👾 твой cto – Telegram
👾 твой cto
1.03K subscribers
13 photos
11 videos
141 links
Будни технического директора
Илья Чекальский (@ilya0)
chekalsky.com
Download Telegram
Channel created
Привет, меня зовут Илья Чекальский и это мой канал о современном PHP и о всяком, чем обычно приходится заниматься разработчикам, девопсам и техническим директорам.

Я работаю CTO в Комитете — мы управляем сайтами vc.ru, tjournal.ru, dtf.ru и spark.ru. Первые три из них работают на Основе — нашей модульной платформе для медиа.

Этот канал существует и в английской версии: @phpcto

По всем вопросам пишите — @ilya0
Остальные контакты: https://chekalskiy.ru/
Для логгирования ошибок мы используем Monolog — PSR-3 уже давно стандарт для всех библиотек (кроме фейсбука конечно же). Логи кладутся в ротируемый локальный файл а также уходят на сервер. Сначала мы использовали Rollbar, но они изменили ценовую политику и мы ушли в Sentry, о чём совсем не жалеем. Сейчас мы тратим на него около $30 в месяц.

Sentry позвоялет логгировать как ошибки на бэкенде, так и на фронте. По каждой записи мы имеем полную карточку — где, когда, при каких условиях возникла ошибка, сразу же видим полный трейс. Обычно это позволяет сразу понять, что случилось. Похожие ошибки группируются. С помощью гибкой системы уведомлений настроили отправку ошибок в наш Slack.

https://sentry.io/
#debug #logging #psr3
Мы используем GitHub Flow. Так как у нас один репозиторий на три проекта, ветка master всегда должна содержать протестированный и рабочий код для всех трёх сайтов. Конечно, мы сталкивались с ситуациями, когда исправляли что-то на одном проекте, параллельно ломая что-то на остальных, но после этого мы ввели обязательное тестирование на всех стейджах перед выкаткой в продакшен.

Под каждый таск из Jira мы создаём ветку, и когда задача готова, создаётся Pull Request и ссылка на него кидается в чат в Slack с упоминанием ответственных или целиком команды. Кто-то должен сделать code review. Мелкие фиксы допускается делать в одной ветке на несколько тасков. В это же время ветка мерджится в ветку stage, которая автоматически разливается на все стейдж-серверы. После этого можно приступать к тестированию. Когда всё готово, Pull Request мерджится в мастер.

Раньше после попадания кода в master он сразу улетал на production-серверы, но из-за необходимости полностью сбрасывать memcached при каждом деплое (потому что всё очень сильно закешировано), мы перешли на ручной деплой. В Slack настроили интеграцию и по специальной команде несколько раз в день код улетает на серверы.

#deployment
Не вижу своей жизни без PHP CodeStyle Fixer и вот почему.

https://github.com/FriendsOfPHP/PHP-CS-Fixer

Эта штука автоматически делает код совместимым с PSR-1 и PSR-2, чистить его от лишних пробелов, array() вместо [] и вообще позволяет коду, написанному разными разработчиками выглядеть примерно одинаково. Это упрощает его последующее чтение и уменьшает баттхёрт технического директора на тему лишних пробелов перед if'ами.

Для этого инструмента есть плагины под все распространённые IDE, так что код можно приводить в порядок сразу после написания по хоткею или даже при каждом сохранении.

Вот наш конфиг, который мы используем сейчас, можете взять его за основу, но не забудьте посмотреть, что значит каждый параметр в документации.
https://gist.github.com/chekalskiy/c79c77657a18419125c72c86fe333b86

#library #php #psr2
Не все знают, что для Composer существует куча плагинов, которые добавляют всякие приятные мелочи. Например:

Versions Check — показывает, какие из пакетов не обновлены до последней версии.
Changelogs — показывает ссылки на changelog обновлённых пакетов.
Prestissimo — параллельная загрузка пакетов.

Эти и ещё много других плагинов можно найти в Awesome Composer.
#composer #library
GitHub открыл собственный магазин интеграций.

https://github.com/marketplace

Например, можете в пару кликов подключить Travis CI, Codecov, Dependabot, Sentry, Blackfire зачастую по специальным тарифам. При этом оплачивается это всё через ваш (или корпоративный) аккаунт на GitHub. Для меня он прежде всего полезен тем, что можно в одно месте посмотреть список всех модных SaaS-сервисов. Кстати, есть ещё одно место с модными сервисами — маркетплейс Slack.

#saas
​​И снова про Composer. Если вы, как и я, любите, чтобы все пакеты в composer.json были отсортированы по алфавиту, и делаете это каждый раз вручную, то у меня для вас хорошая новость: в раздел config в этом файле можно добавить параметр "sort-packages": true — тогда composer require будет автоматически сортировать названия по алфавиту.

Также если вы предпочитаете грузить пакеты в виде дистрибутивов, то туда же можно добавить соответствующий параметр. Больше настроек — в документации.

#composer
Если вы содержите документацию к своему API в строжайшем порядке (ха-ха), например, в формате API Blueprint или Swagger, то вам может быть полезен Dredd — инструмент для проверки ответов API. Он проверяет не только коды ответов, но и содержимое JSON-полей на предмет соответствия типу, описанному в документации. Конечно же его можно интегрировать в ваш любимый CI-сервис — тогда больше ни один пул-реквест не сломает ваши приложения.

Ну а если документация к API есть пока только у вас в голове, то это хороший повод её формализовать. Кстати, если предпочитаете SaaS-решения, то аналогичным образом работает Runscope, его ценник начинается от $79 в месяц.

На самом деле оба этих решения лучше всего иметь параллельно — API на продакшене может отличаться от эталонного не только потому что мы залили плохой код, но и, например, из-за того, что в результате сложной последовательности действий нарушилась консистентность базы (удалили пользователя, а его комментарии не удалились из-за ошибки).

#saas #testing #api
Brotli — новый алгоритм сжатия данных для web от Google. Он существует уже несколько лет и не так давно вышла первая стабильная версия. Что вам надо знать об алгоритме, который, возможно, когда-нибудь придёт на смену gzip?

• Он эффективнее gzip примерно на 20% как по скорости сжатия, так и по коэффициенту компрессии.
• Существуют библиотеки для всех основных веб-серверов. Вот, например, для nginx.
• С сентября Brotli поддерживают браузеры, общая доля которых составляет 70% рынка — в том числе новый Safari.
• Cloudflare рекомендует использовать gzip для маленьких файлов, а brotli — для тех, что побольше (но статья довольно старая).

#devops #nginx
​​Продолжает развиваться новый формат JSON5.

Это такое обратно-совместимое расширение для привычного JSON, делающее его в том числе более удобным для написания руками:
• можно оставлять комментарии,
• можно использовать одинарные кавычки,
• можно не оборачивать в кавычки ключи (но не все),
• можно использовать trailing comma,
и другое.

Библиотека для PHP

#php #library