Pull to refresh

Comments 24

Спасибо за рассказ.
Какой возраст был у студентов?


Если хватает времени, я вызываю студентов на мое место, усаживаю за мой ноут, и они сами делают практические примеры. Это круто работает, но к сожалению занимает много времени.

По каким признакам вы определили, что это работает?


Он вел гугл док со списком задач, раздавал задачи, контролировал их принятие.

Можно гуглдок посмотреть?
Ваш тимлид был по-совместительству главный тестер или задача тестирования тоже делегировалась?


Понемногу я все же их расшевелил, и работа пошла веселее.

Поделитесь, как расшевеливали?

Пожалуйста!


Возраст — от 18 (студенты в ВУЗе) до 45 примерно. Медианно где-то 25-30.


Как определил — субъективно. Студент более собранный становится, задает больше вопросов. Остальные студенты внимательней смотрят, подсказывают товарищу. Ну как бы не препод что-то там пишет, а ваш коллега. Ну и такой эффект включается, что тебя могут вызвать самого что-то написать, волей-неволей больше вдумываешься.


Гуглдок вот — https://docs.google.com/document/d/1Of9u0tJ6hrSde2LiJ9nyWBMbTXJIuzuKZizA204RBdA/edit


Задачей тимлида была выдача заданий, приемка пулл реквестов. А при приеме пулл реквеста он проверял, что проект запускается и работает. Ну и каждый, кто делал фичу, проверял, что она работает. Так и писал в чат — "сделал пулл реквест. Запустил, работает". Конечно это не назвать полноценным тестированием, но более-менее работало.


За расшевеливание:
1) Ежедневные отчеты. Кажется фигней, но отлично мотивирует. Эту штуку я подглядел, когда сам проходил онлайн-курсы (не по программированию).
2) Ежедневное общение в чате. Отвечал на все комменты, задавал вопросы. То есть, было ощущение, что проект живет, развивается, пишется.
3) Когда видел, что от кого-то долго нет отчетов и сообщений, писал ему лично, спрашивал, все ли нормально, есть ли таски. Помогало — были моменты, что человек что-то сделал, но стеснялся залить на гитхаб, даже так :)
4) Как только появилась первая версия проекта, почти без ничего — залил на VPS, и показал, что оно шевелится. Появилось ощущение не "пишем пет-проект в стол", а "делаем сервис для людей"

Не совсем понимаю, о чем вы.


Если о счетчиках посещаемости — да, добавлен счетчик Яндекс.Метрики и счетчик Google Analytics. Добавлены, потому что интересно посмотреть, сколько людей пользуются сайтом, по каким ключевым словам приходят.

Вот студенты привыкают смотреть и потом на сайтах этой шелухи килотонны и получаются.

Ну счетчики добавил я сам. А по факту вы в любом случае, особенно в случае коммерции, будете с ними сталкиваться. Вот спросят у вас простой вопрос — "Сколько людей за месяц зашло на наш сайт? А на вот эту страничку?". Так что или будете свои писать, либо готовые возьмете, с аналитикой уже готовой.

Если завальщики оценивают эффективность по кол-ву заходов / просмотров рекламы — тогда конечно. Простонужно понимать, что если берешь что-то с неконтролируемых источников, то последствия могут быть непредсказуемыми. Да и свою аналитику сделать — не проблема.
Нужно прицепить SSL сертификат. Подойдет и бесплатный Let's Encrypt. Я делал это для Spring Boot


Вы делали это средствами самого спрингбута или же ставили nginx/apache перед ним? Если только спрингбутом, то расскажите, пожалуйста, подробней.

Только средства Spring Boot.


Если кратко, примерно так:


1) Генерируется SSL сертификат, преобразуется в понятный Спрингу формат. Делал по этому туториалу — https://dzone.com/articles/spring-boot-secured-by-lets-encrypt
2) Меняется server.port: 8443 на server.port: 443. Это дефолтный для HTTPS порт
3) Теперь ваше приложение будет доступно по HTTPS, но недоступно по HTTP. Чтобы это исправить, добавляете редирект с HTTP на HTTPS:


@Configuration
@Profile("prod")
public class RedirectHttpComponent {
    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint securityConstraint = new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                securityConstraint.addCollection(collection);
                context.addConstraint(securityConstraint);
            }
        };
        tomcat.addAdditionalTomcatConnectors(redirectConnector());
        return tomcat;
    }

    private Connector redirectConnector() {
        Connector connector = new Connector(
                TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
        connector.setScheme("http");
        connector.setPort(80);
        connector.setSecure(false);
        connector.setRedirectPort(443);
        return connector;
    }
}

Аннотация Profile("prod") указывает, что эта конфигурация применится лишь при запуске приложения в продакшн режиме.

Вы упоминали Bash скрипты в теме, можете ними поделиться, сам изучаю spring boot, будет интересно взглянуть на sh скрипты для собственного развития, спасибо

Автор же оставил ссылку на гитхаб проекта. Там есть всё.
Скрипт для сборки\удаления(mvn clean package; rm file; cp file-from-target file;)
github.com/OlexandrHorch/JavaDeveloperFinalProject/blob/master/local-jar.sh

Скрипт для запуска уберджарки в с профилем прод.
github.com/OlexandrHorch/JavaDeveloperFinalProject/blob/master/launch-production.sh
Автор, почему не рассматривали gitlab для ведения проекта и обучения ваших студентов зачаткам ci\cd?
VPS есть, могли настроить полноценный пайплайн, как это сделано в многих современных компаниях.
Куда полезнее, чем вручную лезть по ssh и собирать проект на прод-машине. Даже для учебного проекта это слишком. :)

Я ни разу не пользовался gitlab, только читал про эту штуку, хочу попробовать. Согласен, что это лучше, чем набор bash скриптов.


Может и попробуем gitlab чуть позже.

В вашем случае скрипт будет практически такой же, как ваши башскрипты, просто оно будет выполняться не вручную человеком, а машиной.
При пуше в мастер(мёрдже мердж реквеста) автоматически будет запускаться процесс сборки и деплоя.
— mvn clean package
— scp target/app.jar user@remote.host:/some/remote/directory
— ssh user@remote.host «cd some/remote/directory && java -jar app.jar»

Благо, в гитлабе базовая функция ci\cd бесплатна и попробовать её можно хоть сейчас. Удачи в этом вам и вашим студентам.

Спасибо! Если продолжим развивать проект — попробуем gitlab

Я думаю, что для учебного проекта это как раз полезно, чтобы студент понимал, как это делать руками, и, что этот процесс можно автоматизировать.
Это полезно показать и объяснить, верно. Но не использовать на регулярной основе.
Проводите грань между полезно знать, понимать, как это делается и использование на регулярной основе.
Напомню, они в течении месяца писали проект и каждый раз, после каждого изменения нужно было проделывать эту операцию с заходом на сервак, когда есть простые и доступные средства автоматизации.
Можно половину проекта, чтобы студенты поняли, как это происходит, вручную деплоить, а вторую половину автоматизируя посредством ci.

В текущем варианте студент не знал, что процесс можно автоматизировать и опыта автоматизации он не получил, поэтому это не полезно.
они в течении месяца писали проект и каждый раз, после каждого изменения нужно было проделывать эту операцию с заходом на сервак

Значит эта операция не отнимала такое количество времени и сил, чтобы ее захотелось автоматизировать. Если бы это было долго/нудно/неинтересно, то CI/CD наколхозили бы на коленке.

Значит эта операция не отнимала такое количество времени и сил, чтобы ее захотелось автоматизировать. Если бы это было долго/нудно/неинтересно, то CI/CD наколхозили бы на коленке.

Они студенты, а не профессиональные разработчики. Они могут банально не знать о том, что подобное можно автоматизировать. Не знать инструментов. Не знать теории. Не знать, что то, что они придумали наколенночное решение и можно было куда проще.

А ещё им может быть лень и даже не думали о том, что что-то можно поменять. Зависит от ситуации. Им могли выдать инструкцию, что вот так и так нужно обновлять приложение и они даже не думали, что можно иначе, а просто действовали по инструкции. Привычка.
Если им после этого показать, что можно автоматизировать — они могли, откровенно, получить просветление о том, что оказывается можно ТАК.

Иными словами — нет, это совершенно не значит, что эта операция была настолько незначительной, что им не хотелось её автоматизировать.

Да, вы правы, операция отнимала и отнимает мало времени. Обновление проекта занимает меньше пяти минут.


За все время разработки проект обновлялся на VPS не больше пяти раз. Остальное время тестировалось локально все.

А откуда берётся информация о добавках? Видимо, о добавках с номерами больше 1000, информации там не было.
P.S. Зачем украили эмблему https://e-dostavka.by/? :)

Информацию о добавках сейчас берем из сайта http://dobavkam.net. Это первый сайт, который попался нам на глаза.


Вы правы за количество. На этом сайте далеко не все добавки, только трехзначные. По нормальному нужно парсить Википедию, там больше данных. Ну мы взяли первый попавшийся сайт, потому что было важно написать парсер на примере любого сайта.


За эмблему не совсем понял :) Вы про эмблему сайта или про favicon? Если favicon, то это стандартная иконка Spring.

Я про то, что url, иконка да и название похожи. Нет, я не обвиняю в плагиате, просто информирую, что вот так получилось.

А, ну бывает и такое:) Действительно глянул логотип — похожий.

Sign up to leave a comment.

Articles