E-Dobavki - un servizo web para buscar aditivos alimentarios en Java e Spring Boot, escrito polos meus alumnos

Introdución

Aconteceu que durante os últimos case dous anos estiven ensinando programación nunha das escolas de informática de Kiev. Comecei a facer isto Just For Fun. Unha vez escribín un blogue de programación, despois renunciei a el. Pero o desexo de contar cousas útiles ás persoas interesadas non desapareceu.

O meu idioma principal é Java. Escribín xogos para teléfonos móbiles, software para comunicacións por radio e varios servizos web nel. E ensino Java.

Aquí quero contar a historia do adestramento do meu último grupo. Como pasaron de comezar a formación a escribir un servizo web que funcione. Un servizo web útil para atopar suplementos nutricionais. Gratuíto, sen publicidade, rexistro e SMS.

O servizo en si está aquí - E-Dobavki.com.

E-Dobavki - un servizo web para buscar aditivos alimentarios en Java e Spring Boot, escrito polos meus alumnos

O proxecto é educativo e non contén publicidade. Segundo entendo dende esta publicación, pode proporcionar ligazóns a estes proxectos.

Antes de describir o proxecto en si, falareivos un pouco do proceso de aprendizaxe do grupo; sen iso, a imaxe quedará incompleta.

9 meses de formación

Na escola onde imparto clases, o curso de Java está dividido en 2 partes. En total, o curso ten unha duración aproximada de 9 meses, con todos os descansos (vacacións de Aninovo, tempo para escribir proxectos intermedios).

A primeira parte introduce os alumnos nos conceptos básicos da linguaxe. Variables, métodos, conceptos básicos de POO e todas esas cousas.

A segunda parte do curso prevé que o alumno xa comprenda máis ou menos como se escribe en Java, e se lle pode dar unha pila de tecnoloxía "adulta". Todo comeza con SQL, despois JDBC e Hibernate. Despois HTTP, servlets. O seguinte é a primavera, un pouco sobre git e maven. E os estudantes escriben proxectos finais.

Toda a formación divídese en módulos. Fixen clases dúas veces por semana. A duración dunha lección é de dúas horas.

A miña aproximación á aprendizaxe

Saquei 5 grupos. Parece moito durante dous anos, pero case sempre dirixín 2 grupos en paralelo.

Probei diferentes enfoques.

A primeira opción é que se asigne un par para unha presentación cunha teoría. O segundo par é pura práctica. Este enfoque funcionou dalgún xeito, pero non foi moi efectivo, na miña opinión.

A segunda opción á que cheguei e na que estou a traballar agora é non dedicarlle toda unha parella á teoría. Pola contra, mesturo seccións curtas de teoría durante 5-10 minutos e refórzaas inmediatamente con exemplos prácticos. Este enfoque funciona mellor.

Se hai tempo suficiente, chamo aos estudantes ao meu lugar, séntoos no meu portátil e eles mesmos fan exemplos prácticos. Funciona moi ben, pero por desgraza leva moito tempo.

Non todos chegan ata o final

Unha revelación para min foi o feito de que non todo o grupo chega ao final do curso.

Segundo as miñas observacións, só a metade dos alumnos escribe o traballo final. A maioría deles son eliminados durante a primeira parte do curso. E os que chegaron á segunda parte non adoitan caer.

Saen por diversos motivos.

O primeiro é a complexidade. Non importa o que digan, Java non é a linguaxe máis sinxela. Para escribir mesmo o programa máis sinxelo, cómpre comprender o concepto dunha clase, un método. E para entender por que hai que escribir public static void main(String[] arg) Hai algúns conceptos máis para entender.

Compare isto con Turbo Pascal, que é o que comezaron moitas persoas, incluída eu:

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

Polo que sei, a escola resolverá este problema introducindo probas adicionais. Agora non todos poden estudar Java. Isto aínda está na fase de concepto, pero o paso é claramente o correcto.

E a segunda razón é como na imaxe de abaixo:

E-Dobavki - un servizo web para buscar aditivos alimentarios en Java e Spring Boot, escrito polos meus alumnos

A xente adoita pensar que a programación consiste en escribir moito texto e conseguir moito diñeiro por iso. Como un redactor, só máis cartos.

A realidade é un pouco diferente. Moito código de rutina, erros non obvios, un proceso de aprendizaxe constante. É interesante, pero non para todos.

Estas son as estatísticas. Ao principio molestoume, pensei que quizais estaba facendo algo mal. Agora entendo que as estatísticas son aproximadamente as mesmas para a maioría dos cursos. Agora non me preocupo, pero ensínalle a aquelas persoas que están interesadas nel.

Idea de servizo

Unha vez que os alumnos remataron todo o curso, chegou o momento de redactar o traballo final. Había ideas diferentes. Ofreceron follas de tarefas, proxectos de xestión de proxectos e algo máis.

Quería facer algo sinxelo pero útil. O meu criterio era simple: se os meus amigos e eu podíamos usalo. Un servizo web para a busca de aditivos alimentarios cumpriu estes requisitos.

A idea é sinxela. Cando compras un produto nunha tenda, ves algún tipo de aditivo electrónico na composición. Non se desprende do código o perigoso que é ou non (e tamén hai aditivos perigosos que están prohibidos en moitos países).

Abre o sitio web, introduce o nome do suplemento (número, un dos nomes alternativos) e obtén un resumo do suplemento:

E-Dobavki - un servizo web para buscar aditivos alimentarios en Java e Spring Boot, escrito polos meus alumnos

Hai proxectos semellantes. Tamén pode simplemente escribir o aditivo en Google, aínda que non sempre mostra a información correctamente.

Pero como o proxecto é educativo, as dificultades anteriores non nos impediron :)

Implantación

Todo o mundo escribiu en Java, código fonte do proxecto en Github.

Eramos 7, incluído eu. Todos fixeron unha solicitude de extracción e eu, ou outra persoa do grupo, aceptamos esta solicitude de extracción.

A implementación do proxecto levou aproximadamente un mes, desde que se expresa a idea ata o estado que ves agora.

Aditivos de análise

O primeiro que fixo un dos alumnos, ademais da creación básica dun marco arredor da base de datos (entidades, repositorios, etc.), foi analizar complementos dun sitio de información existente.

Isto foi necesario para probar os puntos restantes. Non é necesario ningún código adicional para encher a base de datos. Despois de analizar rapidamente varios aditivos, puidemos probar aínda máis a IU, a clasificación e o filtrado.

Spring Boot permítelle crear varios perfís. Un perfil é un ficheiro con configuración.

Para o contorno de desenvolvemento, utilizamos un perfil cun DBMS H2 local e o porto HTTP predeterminado (8080). Así, cada vez que se lanzaba a aplicación, borraba a base de datos. O analizador neste caso foi o que nos salvou.

Busca e filtrado

Un punto importante é a busca e filtrado. Unha persoa nunha tenda debe facer clic rapidamente no código do suplemento, ou nun dos nomes, e obter o resultado.

Polo tanto, a entidade Aditivo ten varios campos. Este é o código aditivo, nomes alternativos, descrición. A busca realízase usando Like en todos os campos ao mesmo tempo. E se introduces [123] ou [amaranto], obterás o mesmo resultado.

Fixemos todo isto en función das especificacións. Esta é unha parte de Spring que che permite describir condicións básicas de busca (como algún campo, por exemplo) e despois combinalas (OU ou AND).

Despois de escribir unha ducia de especificacións, podes facer consultas complexas como "todos os aditivos colorantes perigosos que teñan a palabra [vermello] na descrición".

En canto a traballar coa base de datos Spring, paréceme moi cómodo. Isto é especialmente certo cando se traballa con consultas complexas. Entendo que isto ten a súa propia sobrecarga, e unha consulta SQL escrita e optimizada manualmente executarase máis rápido.

Pero tamén me adhiro ao punto de vista de que non hai que optimizar todo con antelación. A primeira versión debe comezar, funcionar e permitir a substitución de pezas individuais. E se hai carga, estas partes individuais deben ser reescritas.

seguridade

É sinxelo. Hai usuarios coa función de ADMINISTRADOR: poden editar engadidos, eliminalos e engadir outros novos.

E hai outros usuarios (rexistrados ou non). Só poden navegar pola lista de aditivos e buscar os que precisan.

Spring Security utilizouse para separar dereitos. Os datos do usuario gárdanse nunha base de datos.

Os usuarios poden rexistrarse. Agora non dá nada. Se os estudantes continúan desenvolvendo o servizo e introducen algunhas funcións personalizadas, a inscrición será moi útil.

Capacidade de resposta e Bootstrap

O seguinte punto é a adaptabilidade. No caso do noso servizo (polo menos tal e como nós o vimos), a maioría dos usuarios serán con móbiles. E cómpre ver rapidamente o suplemento desde o seu teléfono móbil.

Para non sufrir co CSS, tomamos Bootstrap. Barato, alegre e parece decente.

Non podo chamarlle a interface ideal. A páxina principal é aínda menos, e a páxina para unha descrición detallada do aditivo é estreita; nos teléfonos móbiles hai que ampliala.

Só podo dicir que tentei interferir no traballo o menos posible. Este aínda é un proxecto de estudantes. E por suposto, os mozos poderán corrixir tales momentos máis tarde.

Un minuto de optimización SEO

Xa que levo máis de dous anos implicado en sitios web e en todo o relacionado co SEO, non podería lanzar un proxecto sen polo menos unha optimización básica de SEO.

De feito, fixen unha xeración de modelo de Título e Descrición para cada complemento. A URL é case CNC, aínda que se pode facer máis curta.

Tamén engadín contadores de asistencia. Engadido o sitio a Yandex Webmaster e Google Search Console para supervisar os avisos dos motores de busca.

Non é suficiente. Tamén cómpre engadir robots.txt e sitemap.xml para a indexación completa. Pero de novo, este é un proxecto de estudantes. Vou dicirlles o que hai que facer e, se queren, farano.

Debe anexar un certificado SSL. O libre Let's Encrypt tamén funcionará. Fixen isto para Spring Boot. Non é difícil de facelo, e aumenta a confianza do PS.

Que segue para o proxecto?

Entón, de feito, a elección correspóndelle aos mozos. A idea orixinal do proxecto tamén incluía unha base de datos de produtos con ligazóns a aditivos.

Introduce "Snickers" e mira que aditivos nutricionais contén.

Incluso no inicio do proxecto, sabía que non teríamos ningún produto :) Polo tanto, comezamos só con aditivos.

Agora podes engadir produtos e introducir outros adicionais. bollos. Se é unha base de datos extensa, haberá usuarios.

Despregamento

O proxecto implantouse en VPS, Aruba Cloud. Este é o VPS máis barato que puidemos atopar. Levo máis dun ano usando este provedor para os meus proxectos, e estou gratamente satisfeito con el.

Características VPS: 1 GB de RAM, 1 CPU (non sei sobre a frecuencia), 20 GB SSD. Para o noso proxecto é suficiente.

O proxecto está construído usando o paquete mvn clean habitual. O resultado é un frasco gordo: un ficheiro executable con todas as dependencias.

Para automatizar un pouco todo isto, escribín un par de scripts bash.

O primeiro script elimina o ficheiro jar antigo e constrúe un novo.

O segundo script inicia o frasco montado, pasándolle o nome do perfil necesario. Este perfil contén información de conexión á base de datos.

DB - MySQL no mesmo VPS.

O reinicio total do proxecto inclúe:

  • iniciar sesión en VPS a través de SSH
  • descarga os últimos cambios de git
  • executar local-jar.sh
  • matar a aplicación en execución
  • executa launch-production.sh

Este procedemento leva tres minutos. Esta paréceme unha opción intelixente para un proxecto tan pequeno.

Dificultades

As principais dificultades na creación do proxecto foron de carácter organizativo.

Hai un grupo de xente que parece saber programar, pero non moi ben. Saben algo, pero aínda non poden aplicalo. E agora necesitan completar o proxecto nun mes.

Identifiquei un xefe de equipo condicional neste grupo. Mantivo un Google Doc cunha lista de tarefas, distribuíu tarefas e controlou a súa aceptación. Tamén aceptou solicitudes de retirada.

Tamén pedín aos alumnos que redactasen cada noite un pequeno informe sobre o traballo que realizaron no proxecto. Se non fixeches nada, ok, escribe "non fixo nada". Esta é unha gran práctica e ponche un pouco de tensión. Non todos seguiron esta regra, por desgraza.

O obxectivo de todo este movemento era sinxelo. Formar un equipo, aínda que sexa por pouco tempo, para traballar xuntos.

Quería que os mozos sentisen que o seu traballo era importante. Comprender que non escriben código esférico no baleiro. E o que están a facer xuntos é un proxecto que despois a xente utilizará.

A primeira semana ou dúas foi unha acumulación. As entidades e pequenos commits fixéronse con vagancia. Pouco a pouco fun remexendonos, e o traballo fíxose máis divertido. A comunicación no chat tornouse máis animada, os estudantes ofreceron as súas incorporacións.

Creo que o obxectivo foi conseguido. O proxecto está feito, os rapaces teñen un pouco de experiencia traballando en equipo. Hai un resultado visible e tanxible que se pode mostrar aos amigos e desenvolverse aínda máis.

Descubrimentos

A aprendizaxe é interesante.

Despois de cada clase volvín emocionado. Intento que cada parella sexa única e transmita o maior coñecemento posible.

É agradable cando o grupo ao que ensino chega ás finais. É especialmente xenial cando os rapaces escriben "Teño un traballo, todo está ben, grazas". Aínda que sexa un júnior, aínda que ao principio non sexa o maior diñeiro. Pero o máis importante é que deron un paso cara aos seus desexos, e conseguírono.

Aínda que o artigo resultou ser bastante voluminoso, certamente non foi posible cubrir todos os puntos. Polo tanto, escribe as túas preguntas nos comentarios.

Fonte: www.habr.com

Engadir un comentario