E-Dobavki - öğrencilerim tarafından yazılan, Java ve Spring Boot'ta gıda katkı maddelerini aramaya yönelik bir web hizmeti

Giriş

Öyle oldu ki son iki yıldır Kiev'deki bilişim okullarından birinde programlama öğretiyorum. Bunu Sadece Eğlence İçin yapmaya başladım. Bir zamanlar programlama blogu yazmıştım, sonra bıraktım. Ancak ilgilenen insanlara faydalı şeyler anlatma arzusu ortadan kalkmadı.

Ana dilim Java. Cep telefonları için oyunlar, radyo iletişimi için yazılımlar ve çeşitli web servisleri yazdım. Ve Java öğretiyorum.

Burada son grubumun eğitim hikayesini anlatmak istiyorum. Eğitime başlama aşamasından çalışan bir web hizmeti yazmaya kadar nasıl geçtikleri. Besin takviyeleri bulmak için yararlı bir web hizmeti. Ücretsiz, reklam, kayıt ve SMS yok.

Hizmetin kendisi burada - E-Dobavki.com.

E-Dobavki - öğrencilerim tarafından yazılan, Java ve Spring Boot'ta gıda katkı maddelerini aramaya yönelik bir web hizmeti

Proje eğitici nitelikte olup herhangi bir reklam içermemektedir. 'dan anladığım kadarıyla bu yayın, bu tür projelere bağlantılar sağlayabilirsiniz.

Projeyi anlatmadan önce size grubun öğrenme sürecinden biraz bahsedeceğim; bu olmadan resim eksik kalacaktır.

9 aylık eğitim

Öğretmenlik yaptığım okulda Java kursu 2 bölüme ayrılıyor. Toplamda kurs, tüm aralar (Yeni Yıl tatilleri, ara projeler yazma zamanı) dahil olmak üzere yaklaşık 9 ay sürer.

Birinci bölümde öğrencilere dilin temel kavramları tanıtılmaktadır. Değişkenler, yöntemler, OOP temelleri ve tüm bunlar.

Kursun ikinci kısmı, öğrencinin Java'da nasıl yazılacağını zaten az çok anladığını ve kendisine "yetişkinlere yönelik" bir teknoloji yığını verilebileceğini sağlar. Her şey SQL, ardından JDBC, Hibernate ile başlar. Daha sonra HTTP, sunucu uygulamaları. Sırada Bahar var, biraz git ve maven hakkında. Ve öğrenciler final projeleri yazıyorlar.

Tüm eğitimler modüllere ayrılmıştır. Haftada iki kez ders verdim. Bir dersin süresi iki saattir.

Öğrenmeye yaklaşımım

5 grup yayınladım. İki yıl için çok fazla gibi görünüyor ama neredeyse her zaman 2 grubu paralel olarak yönettim.

Farklı yaklaşımlar denedim.

İlk seçenek, teori içeren bir sunum için bir çiftin tahsis edilmesidir. İkinci çift tamamen pratiktir. Bu yaklaşım bir şekilde işe yaradı ama bana göre pek etkili olmadı.

Geldiğim ve şu anda üzerinde çalıştığım ikinci seçenek, bütün bir çifti teoriye ayırmamak. Bunun yerine teorinin kısa bölümlerini 5-10 dakika karıştırıp hemen pratik örneklerle pekiştiriyorum. Bu yaklaşım daha iyi sonuç verir.

Yeterli zaman varsa öğrencileri evime çağırıyorum, dizüstü bilgisayarımın başına oturtuyorum, onlar da kendileri pratik örnekler yapıyorlar. Harika çalışıyor ama ne yazık ki çok zaman alıyor.

Herkes sonuna kadar gidemez

Grubun tamamının kursun sonuna ulaşamaması benim için bir aydınlanma oldu.

Gözlemlerime göre öğrencilerin sadece yarısı final projesini yazıyor. Çoğu kursun ilk bölümünde elenir. Ve ikinci kısma ulaşanlar genellikle düşmezler.

Çeşitli nedenlerle ayrılıyorlar.

Birincisi karmaşıklıktır. Kim ne derse desin Java en basit dil değildir. En basit programı bile yazmak için sınıf kavramını, yöntemi anlamanız gerekir. Ve neden yazmanız gerektiğini anlamak için genel statik geçersiz main(String[] arg) Anlaşılması gereken birkaç kavram daha var.

Bunu, ben de dahil olmak üzere birçok kişinin başlattığı Turbo Pascal ile karşılaştırın:

begin
    writeln("Первая программа");
end.

Bildiğim kadarıyla okul bu sorunu ek testler uygulayarak çözecek. Artık herkes Java öğrenemez. Bu henüz konsept aşamasında, ancak atılan adım açıkça doğru.

İkinci sebep ise aşağıdaki resimdeki gibidir:

E-Dobavki - öğrencilerim tarafından yazılan, Java ve Spring Boot'ta gıda katkı maddelerini aramaya yönelik bir web hizmeti

İnsanlar genellikle programlamanın çok fazla metin yazmak ve bunun için çok para kazanmakla ilgili olduğunu düşünürler. Bir metin yazarı gibi, sadece daha fazla para.

Gerçek ise biraz farklıdır. Çok sayıda rutin kod, açık olmayan hatalar, sürekli bir öğrenme süreci. İlginç ama herkes için değil.

Bunlar istatistikler. İlk başta bu beni üzdü, belki yanlış bir şey yapıyorum diye düşündüm. Artık istatistiklerin çoğu kurs için yaklaşık olarak aynı olduğunu anlıyorum. Artık bu konuda endişelenmiyorum ama ilgilenen insanlara öğretiyorum.

Servis fikri

Öğrenciler tüm dersi tamamladıktan sonra final projesini yazmanın zamanı gelmişti. Farklı fikirler vardı. Yapılacaklar listeleri, proje yönetimi projeleri ve başka şeyler teklif ettiler.

Basit ama kullanışlı bir şey yapmak istedim. Kriterim basitti; arkadaşlarımla benim bunu kullanıp kullanamayacağımız. Gıda katkı maddelerini aramaya yönelik bir web hizmeti bu gereksinimleri karşıladı.

Fikir basit. Bir mağazadan ürün aldığınızda bileşiminde bir çeşit E-katkı maddesi görüyorsunuz. Ne kadar tehlikeli olup olmadığı yönetmelikte açık değildir (ayrıca birçok ülkede yasaklanan tehlikeli katkı maddeleri de vardır).

Web sitesini açarsınız, ekin adını (numara, alternatif adlardan biri) girersiniz ve ekin özetini alırsınız:

E-Dobavki - öğrencilerim tarafından yazılan, Java ve Spring Boot'ta gıda katkı maddelerini aramaya yönelik bir web hizmeti

Benzer projeler var. Ayrıca bilgileri her zaman doğru şekilde göstermese de katkı maddesini Google'a yazmanız yeterlidir.

Ancak proje eğitici olduğu için yukarıdaki zorluklar bizi durdurmadı :)

uygulama

Herkes Java'da yazdı, Github'daki projenin kaynak kodu.

Ben dahil 7 kişiydik. Herkes bir çekme talebinde bulundu ve ben veya gruptan başka bir kişi bu çekme talebini kabul ettik.

Projenin uygulanması, fikrin dile getirilmesinden şu anda gördüğünüz duruma kadar yaklaşık bir ay sürdü.

Ayrıştırma katkı maddeleri

Öğrencilerden birinin yaptığı ilk şey, veritabanı çevresinde (varlıklar, depolar vb.) temel bir çerçeve oluşturmanın yanı sıra, mevcut bir bilgi sitesinden eklentileri ayrıştırmaktı.

Kalan noktaları test etmek için bu gerekliydi. Veritabanını doldurmak için ek kod gerekmez. Birkaç katkı maddesini hızlı bir şekilde ayrıştırdıktan sonra kullanıcı arayüzünü, sıralamayı ve filtrelemeyi daha ayrıntılı olarak test edebiliriz.

Spring Boot birden fazla profil oluşturmanıza olanak tanır. Profil, ayarların bulunduğu bir dosyadır.

Geliştirme ortamı için yerel H2 DBMS'ye ve varsayılan HTTP bağlantı noktasına (8080) sahip bir profil kullandık. Böylece uygulama her başlatıldığında veri tabanı temizlendi. Bu durumda ayrıştırıcı bizi kurtaran şeydi.

Arama ve filtreleme

Önemli bir nokta arama ve filtrelemedir. Bir mağazadaki kişi, ekin koduna veya isimlerden birine hızlı bir şekilde tıklamalı ve sonucu almalıdır.

Bu nedenle, Katkı varlığının birkaç alanı vardır. Bu, ek kod, alternatif adlar, açıklamadır. Arama aynı anda tüm alanlarda Beğen kullanılarak gerçekleştirilir. Ve [123] veya [amaranth] girerseniz aynı sonucu elde edersiniz.

Bütün bunları Spesifikasyonlara dayanarak yaptık. Bu, Spring'in temel arama koşullarını tanımlamanıza (örneğin bazı alanlar gibi) ve ardından bu koşulları (VEYA veya VE) birleştirmenize olanak tanıyan bir parçasıdır.

Bir düzine spesifikasyon yazdıktan sonra, "açıklamasında [kırmızı] kelimesi bulunan tüm tehlikeli renklendirici katkı maddeleri" gibi karmaşık sorgular sorabilirsiniz.

Spring veritabanıyla çalışmayı çok uygun buluyorum. Bu özellikle karmaşık sorgularla çalışırken geçerlidir. Bunun kendi ek yükü olduğunu ve manuel olarak yazılan ve optimize edilen bir SQL sorgusunun daha hızlı çalışacağını biliyorum.

Ama aynı zamanda her şeyi önceden optimize etmeye gerek olmadığı görüşüne de katılıyorum. İlk versiyon başlamalı, çalışmalı ve tek tek parçaların değiştirilmesine izin vermelidir. Ve eğer bir yük varsa, bu ayrı parçaların yeniden yazılması gerekir.

Güvenlik

Basit. YÖNETİCİ rolüne sahip kullanıcılar var; eklemeleri düzenleyebilir, silebilir ve yenilerini ekleyebilirler.

Ve başka kullanıcılar da var (kayıtlı olsun ya da olmasın). Yalnızca katkı maddelerinin listesine göz atabilir ve ihtiyaç duyduklarını arayabilirler.

Hakları ayırmak için Spring Security kullanıldı. Kullanıcı verileri bir veritabanında saklanır.

Kullanıcılar kayıt olabilir. Şimdi hiçbir şey vermiyor. Öğrenciler hizmeti geliştirmeye ve bazı kişiselleştirilmiş işlevleri tanıtmaya devam ederse kayıt olmak faydalı olacaktır.

Yanıt Verme ve Önyükleme

Bir sonraki nokta uyarlanabilirliktir. Hizmetimiz söz konusu olduğunda (en azından bizim gördüğümüz şekilde), kullanıcıların çoğunluğu cep telefonu kullanıyor olacaktır. Ve eki cep telefonunuzdan hızlı bir şekilde görüntülemeniz gerekiyor.

CSS sıkıntısı yaşamamak için Bootstrap'i aldık. Ucuz, neşeli ve iyi görünüyor.

Arayüzün ideal olduğunu söyleyemem. Ana sayfa daha da küçüktür ve katkı maddesinin ayrıntılı açıklamasının bulunduğu sayfa dardır; cep telefonlarında genişletilmesi gerekir.

Sadece işe mümkün olduğunca az müdahale etmeye çalıştığımı söyleyebilirim. Bu hala bir öğrenci projesi. Ve elbette çocuklar bu tür anları daha sonra düzeltebilecekler.

Bir Dakikalık SEO Optimizasyonu

İki yılı aşkın bir süredir web siteleri ve SEO ile ilgili her şeyle yakından ilgilendiğim için en azından temel SEO optimizasyonu olmadan bir projeyi yayınlayamazdım.

Aslında her eklenti için Başlık ve Açıklamadan oluşan bir şablon üretimi yaptım. URL neredeyse CNC'dir, ancak kısaltılabilir.

Ayrıca katılım sayaçlarını da ekledim. Arama motorlarından gelen uyarıları izlemek için site Yandex Web Yöneticisi ve Google Search Console'a eklendi.

Bu yeterli değil. Tam indeksleme için robots.txt ve sitemap.xml'yi de eklemeniz gerekir. Ama yine söylüyorum bu bir öğrenci projesi. Onlara ne yapılması gerektiğini anlatacağım, isterlerse yapacaklar.

Bir SSL sertifikası eklemeniz gerekir. Ücretsiz Let's Encrypt da işe yarayacaktır. Bunu Spring Boot için yaptım. Bunu yapmak zor değil ve PS'ye olan güven artıyor.

Proje için sırada ne var?

O zaman aslında seçim erkeklere kalmış. Projenin orijinal fikri aynı zamanda katkı maddeleri ile bağlantıları olan bir ürün veri tabanını da içeriyordu.

“Snickers” girin ve hangi besin katkı maddelerini içerdiğini görün.

Daha projenin başında elimizde ürün olmayacağını biliyordum :) Bu nedenle sadece katkı maddeleri ile başladık.

Artık ürünler ekleyebilir ve ek ürünler tanıtabilirsiniz. çörekler. Eğer geniş bir veri tabanı ise, kullanıcılar da olacaktır.

yayılma

Proje VPS, Aruba Cloud üzerinde konuşlandırıldı. Bu bulabileceğimiz en ucuz VPS. Bu sağlayıcıyı bir yıldan fazla bir süredir projelerim için kullanıyorum ve oldukça memnunum.

VPS özellikleri: 1 GB RAM, 1 CPU (frekansı bilmiyorum), 20 GB SSD. Projemiz için bu yeterli.

Proje olağan mvn clean paketi kullanılarak oluşturulmuştur. Sonuç, tüm bağımlılıkları içeren yürütülebilir bir dosya olan büyük bir kavanozdur.

Tüm bunları biraz otomatikleştirmek için birkaç bash betiği yazdım.

İlk komut dosyası eski jar dosyasını siler ve yeni bir tane oluşturur.

İkinci komut dosyası, birleştirilmiş kavanozu başlatır ve ona gerekli profilin adını iletir. Bu profil veritabanı bağlantı bilgilerini içerir.

DB - Aynı VPS'de MySQL.

Toplam proje yeniden başlatması şunları içerir:

  • SSH aracılığıyla VPS'ye giriş yapın
  • en son git değişikliklerini indir
  • local-jar.sh'yi çalıştırın
  • çalışan uygulamayı sonlandır
  • launch-prodüksiyon.sh'yi çalıştırın

Bu prosedür üç dakika sürer. Bu kadar küçük bir proje için bu bana akıllıca bir seçim gibi görünüyor.

karmaşa

Projeyi yaratmadaki ana zorluklar organizasyonel nitelikteydi.

Programlamayı bilen ama çok iyi bilmeyen bir grup insan var. Bir şeyler biliyorlar ama yine de uygulayamıyorlar. Artık projeyi bir ayda tamamlamaları gerekiyor.

Bu grupta şartlı bir ekip lideri belirledim. Görevlerin ve dağıtılmış görevlerin bir listesini içeren bir Google Dokümanı tuttu ve bunların kabulünü kontrol etti. Ayrıca çekme isteklerini de kabul etti.

Ayrıca öğrencilerden her akşam projede yaptıkları çalışmalarla ilgili kısa bir rapor yazmalarını istedim. Eğer hiçbir şey yapmadıysanız, tamam, sadece “hiçbir şey yapmadım” yazın. Bu harika bir pratiktir ve sizi biraz gerginleştirir. Ne yazık ki herkes bu kurala uymadı.

Bütün bu hareketin amacı basitti. Kısa süreliğine de olsa birlikte çalışacak bir ekip oluşturun.

Adamların işlerinin önemli olduğunu hissetmelerini istedim. Küresel kodun boşlukta yazılmadığını anlayın. Ve birlikte yaptıkları şey, insanların daha sonra kullanacağı bir proje.

İlk bir veya iki hafta bir hazırlıktı. Varlıklar ve küçük taahhütler yavaş bir şekilde yapıldı. Yavaş yavaş onları karıştırdım ve iş daha eğlenceli hale geldi. Sohbette iletişim daha canlı hale geldi, öğrenciler eklemelerini sundu.

Amaca ulaşıldığına inanıyorum. Proje tamamlandı, adamlar bir takımda çalışma konusunda biraz deneyim kazandılar. Arkadaşlara gösterilebilecek ve daha da geliştirilebilecek gözle görülür, somut bir sonuç var.

Bulgular

Öğrenmek ilginçtir.

Her dersten sonra duygusal olarak tedirgin bir halde geri dönüyordum. Her çifti benzersiz kılmaya ve mümkün olduğunca fazla bilgi aktarmaya çalışıyorum.

Ders verdiğim grubun finale çıkması çok güzel. Erkeklerin "Bir işim var, her şey yolunda, teşekkür ederim" yazması özellikle harika. Junior olsa bile, ilk başta en büyük para olmasa bile. Ama en önemlisi arzuları doğrultusunda bir adım attılar ve başardılar.

Makale oldukça hacimli olmasına rağmen, tüm noktaları kapsamak kesinlikle mümkün değildi. Bu nedenle sorularınızı yorumlara yazın.

Kaynak: habr.com

Yorum ekle