dev notes
1.39K subscribers
33 photos
6 videos
189 links
Пишу про Go, Vim, и про то, как я медленно ползу в сторону FAANG.

С предложениями: @junsenpub
Download Telegram
​Создание autoselect-компонента на Symfony/Vue. Часть 1.

В статье я привёл кучу ссылок и материалов про то, как войти в мир vue. Мы разобрали, что такое vue-cli и как с его помощью создать свой первый проект. Создали проект, вывели строку поиска и научились обрабатывать с неё запросы.

В следующей статье мы набросаем небольшую API на Symfony, распарсим её ответы на Vue и закончим с этим компонентом :)

Добро пожаловать под кат!

https://telegra.ph/Sozdanie-autoselect-komponenta-na-SymfonyVue-05-19
Создание autoselect-компонента на Symfony/Vue. Часть 2.

Сегодня в серии:
1) Развернём проект с минимальной базы, подтягивая руками все пакеты
2) Научимся работать с БД в IDE
3) Научимся писать фикстуры и использовать рандомайзер имён
4) Затронем библиотеку lodash и axios, научимся лимитировать обращения к методам, отправлять запросы и получать ответ от бэка
5) Немного поигрались с CORS-политикой
6) Зафиналим наш компонент и будем крутыми ребятами

Залетай под кат!
https://telegra.ph/Sozdanie-autoselect-komponenta-na-SymfonyVue-CHast-2-06-11
​Пишем чат на web-сокетах в Symfony приложении

Подъехала годнота:
* Мы напишем чат с использованием web-socket'ов на PHP (да, это возможно)
* Мы научимся разворачивать Symfony-приложение в docker
* Познакомимся с новыми инструментами и технологиями

Клац, чтобы прочитать

Приятные новости - у нас на канале теперь ещё один автор :) Парень учится, но делает это быстро и разбирает крайне интересные темы, с одной из которых ты можешь познакомится в сегодняшней статье. Все вопросы можно обсудить в нашем чатике - https://t.me/junsenior_chat
всем привет :) ребят, появилась идея немного попрогать в realtime - повисеть часа 2 на стриме
что думаете?)
обсудить можно в нашем чатике - https://t.me/junsenior_chat
​CRUD - от сложного к простому

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

Интересно? Залетай под кат!
Redis: пишем URL-сокращатель

Сегодня у нас полезная теория и вкусная практика по Redis - key-value-хранилищу, способному решать огромный диапазон задач.

Чтобы понять всю красоту этой технологии - под катом пишем URL-сокращатель. Залетай, читай, комментируй.
Пока готовим несколько интересных вещей, запушу интересную тему на обсуждение:
https://kinsta.com/blog/php-7-4/ - обзор нововведений и изменений в PHP 7.4, который вот-вот должен выйти.

Больше всего радует типизация, что-то вроде лямбда-функций и предзагрузка данных в память. Говорят, что можно будет загнать туда большую часть фреймворка и радоваться производительности :) Что думаете? Залетайте в чат, там всё обсудим :)
PHP + Go = ♥️ или RoadRunner в действии

Решил разобраться с RoadRunner - сервером, который умеет запускать несколько процессов PHP-приложения и стабилизировать нагрузку. Да, паттерн "один запрос - один процесс - смерть" больше не работает, и это круто.
Сегодня интегрируем RoadRunner и разбираемся, как работают воркеры. В следующей части разберёмся, как это работает внутри и поиграем с большими нагрузками.
#phpживи

Клац-клац, чтобы твой PHP не умирал на каждый запрос
К теме предыдущей статьи - отличное сравнение бенчмарков на PHP 7.4:
парни из Badoo сравнивают PHP 7.4, PHP 7.4 + Preload, RoadRunner и RoadRunner после оптимизации
А так же рассказывают, чем Preload отличается от OPCache и почему он зайка
Короче, к прочтению рекомендую - https://habr.com/ru/company/badoo/blog/472528/
Более того, как только PHP 7.4 релизнется, а будет это где-то в ноябре, постараюсь подробно рассмотреть и пощупать, как подключать Preload к Symfony-приложениям
Как найти работу? Резюме, собеседования, подготовка

Рассказываю, какие выводы я сделал из почти 10-ти пройденных за год собеседований, как они проходили, где я работал и почему мне не нравится энтерпрайз.
Надеюсь, мой опыт будет полезен. Залетай под кат!
Давайте немного попишем код на листочке...
Lumen + Docker + Websockets

Рассказываю как настроить систему websocket'ов через socket.io в Lumen
Зачем? Потому что могу, и ты сможешь - го читать
Вы просили паттерны? Их есть у меня.

Transactional outbox - паттерн, о котором на русском очень мало информации. Хотя понимание его структуры и схемы работы критически важно в случае создания системы логирования для твоего приложения.

Не хочешь влететь на штрафы, не сохранив факт оплаты от своего юзера? Тогда велком под кат - клац.
Тесты, ревью и флоу вокруг разработки

В одной из компаний, где я работал, была замечательная надпись на стене - "97 дней без багов". Это была одна из немногих компаний, где ревностно следили за чистотой кода, за процессом деплоя и флоу вокруг программирования, что позволяло выдавать стабильность работы всего портала. А портал был далеко не маленький.

Сейчас я опишу эти практики и, надеюсь, кто-то возьмёт их себе на вооружение.
Если ты можешь сделать плохой код лучше - сделай

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

Это не означает, что ты должен начать рефакторить весь проект, переходя из файла в файл, нет. Это означает, что если ты можешь выделить немного времени, дедлайны не горят, спринт ещё не заканчивается и в целом нет каких-то блоков - выдели время и исправь очевидно плохие места.

Например, на моём текущем проекте более 1кк строк кода. Проект писали десятки людей на протяжении многих лет. Часто бывает так, что открывая какой-либо файл я вижу комментарий за 2015 год - "Это может пригодится, пока не удаляем". Окей, Ctrl + F → поиск → нет соответствий. Значит, не то что можно - это нужно удалить. Или, например, ты видишь deprecated-модуль. Посмотри аннотации - скорее всего, этому модулю много лет и он, вероятно, уже нигде не используется и был переписан. Удаляй. Если бизнесу это не пригодилось в течении пары лет - дальше тоже не пригодится. Сомневаешься? Уточни у лида или товарищей по команде, которые на проекте долгое время - использовалось ли это где-то в последние годы. Скорее всего они даже не вспомнят что это.

Бывает, что какой-то контроллер писали в режиме хаоса - были правки на бой, ребята написали пелену кода прямо в контроллере и, поправив ошибку, к этому файлу никто не вернулся. Создай класс-сервис, вынеси туда эту пелену и заинжекти его в класс-контроллер, если у тебя на это есть время. А ещё круче будет, если параллельно к этому ты напишешь тесты.

Увидел функцию из PHP5, которая перечёркнута и ты знаешь её новый аналог - примени (главное версию PHP на сервере проверь; если 5 - не правь, и подумай о смене работы). Так, например, в старом PHP многое делалось через строки - в строке могли объявить функцию, могли вызвать её через строку. Всё это уродство можно заменить, поэтому если увидел - твой долг это поправить. Как писал дядя Мартин - ты должен спорить с бизнесом и доказывать ему, что рефакторинг - это важно, прежде всего, для самого бизнеса.

Так же хорошая практика поделить задачу и рефакторинг на разные коммиты - на PR лид скажет тебе спасибо.
Выжигающие задачи

Почему люди увольняются? Я увольнялся по нескольким факторам: предложение на более вкусное место работы, несработка с командой, отвратительное руководство.
В том случае, когда человек увольняется из-за проблем на работе, а не из-за предложения новой, что-то как правило служит точкой невозврата - достал лист, написал заявление, отнёс начальнику. И, как мне кажется, такой точкой нередко выступают определённого рода задачи.
Как правило, такая задача летит мимо спринта. Аналитики нет, оценки - тоже. Формулировка крайне скудная - реализовать *описание фичи в нескольких словах*.

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

В очередной раз столкнулся на работе с прекрасной постановкой - реализовать возможность *функционал фичи*. Аналитики нет, в спринт задачу вкинули уже после его запуска. Совокупность факторов - и я не разбираясь перевёл статус задачи в "In progress". И через пару дней пообещал себе, что без предварительной оценки, какие бы факторы вокруг не происходили, задачи больше браться в работу не будут.

Основные критерии:
1. Описание задачи затрагивает несколько логических разделов в коде. Например, моя задача, если бы я получше вчитался в описание, затрагивала ядро генерации PDF-файлов и подразумевала большой объем кода в совершенно другом месте для реализации бизнес-логики.
Как это можно было решить? Вчитаться на планировании, поставить задачу на аналитику, выявить проблему и разбить задачу на 2 подзадачи, поочерёдно втягивая их в спринт.

2. Нет чёткой оценки времени. "Да делай, ещё есть время" - самый паршивый для разработчика ответ. В голове сразу мысли: "Сколько? Когда могут спросить? До конца спринта? Или уведём в следующий?". Ответы такого формата делают только одно - заставляют торопиться, из-за чего возникают ошибки, в PR пушатся всё новые комментарии и цикл "правки - PR - комментарии" раскручивается.

3. Нет приёмочный критериев (для тех, кто в танке - приёмочные критерии - одноимённый раздел, который можно активировать у карточки задачи в jira). Это, наверное, самая важная часть, резюмирующая большинство из вышесказанного. Если тебе набросали макет, дали краткую формулировку, но в разделе с приёмочными критериями пусто - уже стоит задуматься, а брать ли задачу или стоит сначала обсудить. Когда менеджмент/команда/лид описывает то, что он хочет видеть на выходе - это уже половина решения. На одном из предыдущих мест работы в процессе формулировки приёмочных мы с командой могли обсуждать задачу несколько встреч подряд, находя всё новые и новые моменты, разбивая задачу на новые подзадачи и описывания новые блокирующие связи. Потеря времени? Как бы ни так. После такого планирования весь пулл подзадач выполняется за пару дней, что бизнесу идёт только на пользу.

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

Так вот, чтобы не сидеть весь спринт над одной задачей, не слушать вопросы менеджмента о её статусе, не ловить подводные камни (они всегда будут, но большинство можно выявить на планировании) и не смотреть на десятки комментариев в PR - учись ловить такие задачи, задавать вопросы, и не приступать к выполнению, пока не будет всех ответов. Лучше потерять время на берегу.
Технический материал писать долго и временами сложно.
Переписывать документацию, как я это делал по-началу, больше как-то не хочется :) А сложные кейсы, возникающие на работе, порой описываются (по вечерам) за неделю-две.
Чтобы канал не простаивал по паре недель без материала, думаю добавить контента и хочу посоветоваться с вами, что вам будет интересно? Хайпить на тупых картинках, репостить новости из других каналов и заливать прочей грязью ленту я не буду.

Заметки с/о работе, как и технические статьи, я буду продолжать писать, это никуда не пропадёт :)