Давно ничего не писал, а всё потому что мы начали Огромный Рефакторинг.
Мы в Комитете в качестве эксперимента решили начать посвящать начало каждого года рефакторингу — к концу декабря заканчивать все фичи и после новогодних праздников по заранее определённому плану начинать переписывать костыли, убирать древние окаменелые баги и добавлять новые. Сейчас у нас есть сформулированные задачи на три месяца после окончания рефакторинга, план того, что надо сделать ещё на три месяца вперёд и примерный план движения на весь год. Конечно, по ходу будут вноситься коррективы, но сейчас есть возможность планировать новую архитектуру как минимум на год, до следующего января.
Мы создали канал в Slack, где каждый разработчик может написать, какое место в коде он хотел бы отрефакторить, обсуждение ведётся в ветках, поэтому к январю мы получили готовый список мест, которые требуют нашего внимания. Так вышло, что бэкенд будет переписан процентов на 70, потому что решили сильно упростить структуру и заодно больше использовать ООП — процедурный подход хорош, когда надо писать код в сжатые сроки, но когда есть время, лучше окинуть взглядом всё целиком и попробовать реализовать это красиво.
Так что пока интересностей для вас нет, разве что вышла первая стабильная версия PHP-PM — процесс-менеджера, с помощью которого можно превратить PHP-приложение в демона, чтобы не тратить ресурсы на то, чтобы поднять и инициализировать всё приложение при каждом запросе и получить прирост в скорости в 15 раз.
P.S. Изучение Go идёт полным ходом!
Мы в Комитете в качестве эксперимента решили начать посвящать начало каждого года рефакторингу — к концу декабря заканчивать все фичи и после новогодних праздников по заранее определённому плану начинать переписывать костыли, убирать древние окаменелые баги и добавлять новые. Сейчас у нас есть сформулированные задачи на три месяца после окончания рефакторинга, план того, что надо сделать ещё на три месяца вперёд и примерный план движения на весь год. Конечно, по ходу будут вноситься коррективы, но сейчас есть возможность планировать новую архитектуру как минимум на год, до следующего января.
Мы создали канал в Slack, где каждый разработчик может написать, какое место в коде он хотел бы отрефакторить, обсуждение ведётся в ветках, поэтому к январю мы получили готовый список мест, которые требуют нашего внимания. Так вышло, что бэкенд будет переписан процентов на 70, потому что решили сильно упростить структуру и заодно больше использовать ООП — процедурный подход хорош, когда надо писать код в сжатые сроки, но когда есть время, лучше окинуть взглядом всё целиком и попробовать реализовать это красиво.
Так что пока интересностей для вас нет, разве что вышла первая стабильная версия PHP-PM — процесс-менеджера, с помощью которого можно превратить PHP-приложение в демона, чтобы не тратить ресурсы на то, чтобы поднять и инициализировать всё приложение при каждом запросе и получить прирост в скорости в 15 раз.
P.S. Изучение Go идёт полным ходом!
Когда тебе кажется, что изучил Composer вдоль и поперёк, а потом открываешь эту статью и находишь не одну и не две неизвестные фичи.
https://habrahabr.ru/company/mailru/blog/346488/
Например, как подключить свой форк какого-то пакета, пока там не одобрили твой пул-реквест. Или как принудительно указать версию PHP, для которой нужно искать совместимые пакеты (если локально стоит 7.2, а на сервере 7.1).
#composer #php
https://habrahabr.ru/company/mailru/blog/346488/
Например, как подключить свой форк какого-то пакета, пока там не одобрили твой пул-реквест. Или как принудительно указать версию PHP, для которой нужно искать совместимые пакеты (если локально стоит 7.2, а на сервере 7.1).
#composer #php
Сервис Dependabot подключается к вашему Ruby, JavaScript, Python, PHP, Elixir или Java репозиторию и раз в какое-то время проверяет, не обновились ли какие-то зависимости, и если да — создаёт Pull Request со ссылками на Release Notes или Changelog обновившегося пакета. Очевидно, что если у вас настроен CI, то он ещё и проверит этот PR автотестами.
Это прекрасно! 15 баксов в месяц, если меньше 5 приватных репозиториев, для open source бесплатно. 14 дней триала. Подключить можно через GitHub Marketplace.
#php #composer
Это прекрасно! 15 баксов в месяц, если меньше 5 приватных репозиториев, для open source бесплатно. 14 дней триала. Подключить можно через GitHub Marketplace.
#php #composer
Потрясающая история о том, как хакер взломал криптобиржу, которая работает на смарт-контракте.
Как это было: биржа полностью open source и работает так, что теоретически никто не может повлиять на неё или взломать. Но в одном месте разработчики биржи решили показывать вместа хэша контракта красивое имя, которое внутри этого контракта зашито. Я думаю, вы уже поняли, что произошло. Они забыли заэкранировать переменную, и в результате на странице обмена подставного токена появился скрипт, который отправлял приватные ключи всех зашедших туда пользователей (биржа-то опенсорсная, всё хранится в браузере) к хакеру на сервер.
Вполне себе обычную ссылку на популярную биржу хакер распространял в чатах, а переходившие по ней пользователи отправляли ему все свои деньги.
Читать подробнее
Как это было: биржа полностью open source и работает так, что теоретически никто не может повлиять на неё или взломать. Но в одном месте разработчики биржи решили показывать вместа хэша контракта красивое имя, которое внутри этого контракта зашито. Я думаю, вы уже поняли, что произошло. Они забыли заэкранировать переменную, и в результате на странице обмена подставного токена появился скрипт, который отправлял приватные ключи всех зашедших туда пользователей (биржа-то опенсорсная, всё хранится в браузере) к хакеру на сервер.
Вполне себе обычную ссылку на популярную биржу хакер распространял в чатах, а переходившие по ней пользователи отправляли ему все свои деньги.
Читать подробнее
Исправил предыдущий пост, адрес, который был в нём указан, принадлежит бирже, а не хакеру, кошелёк которого достоверно неизвестен (но его всё равно попробовали выследить, и возможно это гражданин Литвы) и украл он намного меньше суммы, которую я написал. Прошу прощения, что ввёл в заблуждение.
Что мы обычно ждём от техподдержки SaaS-компаний? Для меня самые главные — две вещи:
1) Скорость ответа. Я хочу, чтобы мне сразу отвечали, что сообщение принято и в течение какого времени мне ждать решение вопроса. Это развитый рынок, пока мне сутки готовят ответ, я могу успеть сменить двух их конкурентов.
2) Чтобы меня не держали за идиота. Когда я обращаюсь не в техподдержку своего домашнего провайдера, я хочу, чтобы меня не просили обновить страницу браузера или переподключить Wi-Fi. Если я пишу, что что-то не работает, то обычно я пишу, какие варианты уже попробовал. Иногда в ответ мне предлагают попробовать их ещё раз.
Если речь идёт про стартап, то обычно с этим проблем нет, но стоит стартапу немного вырасти, как качество саппорта зачастую катастрофически падает. А от крупных компаний иногда можно ждать ответа по три дня.
Я очень доволен техподдержкой Селектела — много лет они очень правильно к этому подходят. Кого-то ещё из тех, куда я писал за последние годы я не вспомню, но два недавних примера приведу:
InfoBip — они рассылали авторизационные СМС нашим пользователям во время одного из спецпроектов и мне очень понравилось с ними работать. Во-первых, у них очень толковые менеджеры, которые работали с полной отдачей даже несмотря на то, что мы сразу предупредили, что закупим СМС только на пару тысяч рублей. Во-вторых, когда мы в продакшене столкнулись с проблемой, ребята локализовали её и написали, как исправить за 18 минут. И это русскоязычный отдел в глобальной компании.
Ngenix — наш новый CDN-провайдер тоже порадовал быстрым заключением договора и оперативным общением с менеджером и поддержкой. Каких-то серьёзных проблем ещё не возникало, но даже к мелким вопросам ребята относятся очень серьёзно.
#saas
1) Скорость ответа. Я хочу, чтобы мне сразу отвечали, что сообщение принято и в течение какого времени мне ждать решение вопроса. Это развитый рынок, пока мне сутки готовят ответ, я могу успеть сменить двух их конкурентов.
2) Чтобы меня не держали за идиота. Когда я обращаюсь не в техподдержку своего домашнего провайдера, я хочу, чтобы меня не просили обновить страницу браузера или переподключить Wi-Fi. Если я пишу, что что-то не работает, то обычно я пишу, какие варианты уже попробовал. Иногда в ответ мне предлагают попробовать их ещё раз.
Если речь идёт про стартап, то обычно с этим проблем нет, но стоит стартапу немного вырасти, как качество саппорта зачастую катастрофически падает. А от крупных компаний иногда можно ждать ответа по три дня.
Я очень доволен техподдержкой Селектела — много лет они очень правильно к этому подходят. Кого-то ещё из тех, куда я писал за последние годы я не вспомню, но два недавних примера приведу:
InfoBip — они рассылали авторизационные СМС нашим пользователям во время одного из спецпроектов и мне очень понравилось с ними работать. Во-первых, у них очень толковые менеджеры, которые работали с полной отдачей даже несмотря на то, что мы сразу предупредили, что закупим СМС только на пару тысяч рублей. Во-вторых, когда мы в продакшене столкнулись с проблемой, ребята локализовали её и написали, как исправить за 18 минут. И это русскоязычный отдел в глобальной компании.
Ngenix — наш новый CDN-провайдер тоже порадовал быстрым заключением договора и оперативным общением с менеджером и поддержкой. Каких-то серьёзных проблем ещё не возникало, но даже к мелким вопросам ребята относятся очень серьёзно.
#saas
Когда мы только начинали писать Основу (наша платформа для медиа), я добавил в механизм авторизации простую проверку украденных кук — суть её сводилась к тому, что если одну и ту же куку используют в двух браузерах, то все сессии пользователя сбрасываются, и она становится невалидной.
Каково же было моё удивление, когда за первую неделю работы только запущенного DTF мы поймали такую ситуацию пять раз. Было очевидно, что никто не крал куки сайта с парой тысяч пользователей. Но баг я так и не нашёл — пришлось отключать механизм. До сих пор думаю, что виной — синхронизация между браузерами или что-то вроде того.
А мораль, наверное, в том, что всегда нужно вешать логгирование на такие моменты, чтобы знать, что механизмы защиты работают как задумано.
Каково же было моё удивление, когда за первую неделю работы только запущенного DTF мы поймали такую ситуацию пять раз. Было очевидно, что никто не крал куки сайта с парой тысяч пользователей. Но баг я так и не нашёл — пришлось отключать механизм. До сих пор думаю, что виной — синхронизация между браузерами или что-то вроде того.
А мораль, наверное, в том, что всегда нужно вешать логгирование на такие моменты, чтобы знать, что механизмы защиты работают как задумано.
Прекрасный плагин для PHPStorm — PHP Inspections EA
Статический анализатор, который позволяет сделать ваш код ещё лучше. Что покрывает:
• architecture related issues
• weak types control and possible code construct simplifications
• performance issues
• non-optimal, duplicate and suspicious "if" conditions
• validation of magic methods usage
• regular expressions
• validation of exception handling workflow
• compatibility issues
• variety of time-consuming bugs
• PhpUnit API usage
• security issues
У него есть ещё платная версия, в которой проверок ещё больше. В общем, если вы любите писать идеальный код, то статический анализатор прямо в IDE вам понравится.
#php #ide
Статический анализатор, который позволяет сделать ваш код ещё лучше. Что покрывает:
• architecture related issues
• weak types control and possible code construct simplifications
• performance issues
• non-optimal, duplicate and suspicious "if" conditions
• validation of magic methods usage
• regular expressions
• validation of exception handling workflow
• compatibility issues
• variety of time-consuming bugs
• PhpUnit API usage
• security issues
У него есть ещё платная версия, в которой проверок ещё больше. В общем, если вы любите писать идеальный код, то статический анализатор прямо в IDE вам понравится.
#php #ide
Лучший концепт по написанию надёждных и безопасных приложений. Не забудьте заглянуть в Pull Requests — там есть имплементации с тестированием.
https://github.com/kelseyhightower/nocode
https://github.com/kelseyhightower/nocode
С момента переезда в Польшу начал искать вдохновение для названий классов в польском языке, и боюсь, коллеги скоро начнут меня ненавидеть.
Ну а пока шаблонизатор будет называться Кживик. Потому что по-польски это лекало. А лекало — это первая ссылка в википедии по запросу «шаблон».
Ну а пока шаблонизатор будет называться Кживик. Потому что по-польски это лекало. А лекало — это первая ссылка в википедии по запросу «шаблон».
ФБК опубликовали датасет с нарушениями депутата Слуцкого — самое время попрактиковаться в API Яндекс.Карт. Теперь надо как-то оптимизировать производительность, потому что столько точек Яндекс.Карты не тянут.
https://chekalskiy.ru/slutsky/
https://chekalskiy.ru/slutsky/
Прекрасные новости! Let’s Encrypt запустил выдачу бесплатных wildcard-сертификатов.
https://community.letsencrypt.org/t/acme-v2-and-wildcard-certificate-support-is-live/55579
https://community.letsencrypt.org/t/acme-v2-and-wildcard-certificate-support-is-live/55579
Мне кажется, the next big thing — статические генераторы сайтов.
У меня подошёл к концу бесплатный год в Google Cloud — там хостился наш блог chechannel.com — год назад я взял Ghost и закинул его туда, чтобы складывать длинные заметки про Польшу, но их в итоге оказалось не так много, и почти никто на сайт не заходит. Но домен мне нравится и просто так отключать его не хотелось.
Переезжать на vscale, хоть это и будет стоить 200 рублей в месяц, не хотелось, равно как и оплачивать Ghost Pro по $19 в месяц — зачем платить вообще что-то за сайт с 10 посетителями.
Пришлось озаботиться переносом контента с Ghost на Hugo. Hugo — это такой движок для статических сайтов, написанный на Go. А хоститься при этом можно бесплатно на GitHub Pages в связке с Cloudflare, который возьмёт на себя редиректы, HTTPS, кэширование и всё, что душе угодно.
В итоге несколько часов провозился с конвертером постов и собственно настройкой Hugo — и voilà! статическая версия блога с простой CMS (forestry.io) уже в продакшене.
И вот эта вот простота, надёжность и дешевизна — это явно то, что вскоре позволит всем нам отказаться от Wordpress, к которому нужен ещё и разбирающийся админ, а ещё нужно следить за версией openssl на сервере, да и вообще от серверов. И уже существуют CMS, которые позволяют удобно создавать контент и настраивать генератор статической версии сайта. И всё это автоматически публиковать.
Ссылки для дальнейшего изучения:
https://www.staticgen.com — рейтинг генераторов статических сайтов
https://headlesscms.org — список CMS для них
У меня подошёл к концу бесплатный год в Google Cloud — там хостился наш блог chechannel.com — год назад я взял Ghost и закинул его туда, чтобы складывать длинные заметки про Польшу, но их в итоге оказалось не так много, и почти никто на сайт не заходит. Но домен мне нравится и просто так отключать его не хотелось.
Переезжать на vscale, хоть это и будет стоить 200 рублей в месяц, не хотелось, равно как и оплачивать Ghost Pro по $19 в месяц — зачем платить вообще что-то за сайт с 10 посетителями.
Пришлось озаботиться переносом контента с Ghost на Hugo. Hugo — это такой движок для статических сайтов, написанный на Go. А хоститься при этом можно бесплатно на GitHub Pages в связке с Cloudflare, который возьмёт на себя редиректы, HTTPS, кэширование и всё, что душе угодно.
В итоге несколько часов провозился с конвертером постов и собственно настройкой Hugo — и voilà! статическая версия блога с простой CMS (forestry.io) уже в продакшене.
И вот эта вот простота, надёжность и дешевизна — это явно то, что вскоре позволит всем нам отказаться от Wordpress, к которому нужен ещё и разбирающийся админ, а ещё нужно следить за версией openssl на сервере, да и вообще от серверов. И уже существуют CMS, которые позволяют удобно создавать контент и настраивать генератор статической версии сайта. И всё это автоматически публиковать.
Ссылки для дальнейшего изучения:
https://www.staticgen.com — рейтинг генераторов статических сайтов
https://headlesscms.org — список CMS для них
В августе прошлого года у меня сломался айфон, и когда я восстановил резервную копию из iCloud на новом, из Google Authenticator пропали 2FA-коды всех сервисов (хотя они должны были остаться). Так как я немного параноик и control freak, я отдельно хранил список всех сервисов с 2FA, которыми я пользуюсь. Поэтому нужно было всего лишь восстановить все доступы по списку.
В основном это было не сложно — либо присылают смс, либо просят один из резервных кодов, либо ещё какие-то данные. Небольшие проблемы возникли с blockchain.info — но всё тоже прошло нормально. Настоящими параноиками оказались только Amazon — если потерять девайс с кодами, то сбросить логин можно только по звонку на привязанный к аккаунту номер телефона. Но почему-то именно на этот номер не проходили звонки, а я уже довольно долго находился в Польше. Я позвонил в поддержку Amazon и объяснил ситуацию, предложил прочитать все последние инвойсы, рассказать, что есть внутри аккаунта, но саппорт был непреклонен. В итоге, только сейчас я решился повторить попытку, поставил переадресацию, разобрался с техподдержкой Йоты и Билайна, и наконец-таки смог зайти в свой аккаунт.
Теперь я переживаю — все остальные ведь не так надёжно охраняют мои аккаунты. 🤔
В основном это было не сложно — либо присылают смс, либо просят один из резервных кодов, либо ещё какие-то данные. Небольшие проблемы возникли с blockchain.info — но всё тоже прошло нормально. Настоящими параноиками оказались только Amazon — если потерять девайс с кодами, то сбросить логин можно только по звонку на привязанный к аккаунту номер телефона. Но почему-то именно на этот номер не проходили звонки, а я уже довольно долго находился в Польше. Я позвонил в поддержку Amazon и объяснил ситуацию, предложил прочитать все последние инвойсы, рассказать, что есть внутри аккаунта, но саппорт был непреклонен. В итоге, только сейчас я решился повторить попытку, поставил переадресацию, разобрался с техподдержкой Йоты и Билайна, и наконец-таки смог зайти в свой аккаунт.
Теперь я переживаю — все остальные ведь не так надёжно охраняют мои аккаунты. 🤔
Подборка утилит для PHP-разработки. Про некоторые из них я уже писал, но есть и новые.
Например, PHP Magic Number Detector — ищет магические числа, которые неплохо бы сделать константами (200, 404, 3600 и т.д.).
Кстати, на гитхабе есть наиболее полный список утилит для статического анализа PHP-кода.
P.S. Если вы используете SaaS-сервис, в котором есть большинство или хотя бы самые популярные из этих утилит и который умеет интегрироваться в GitHub Pull Requests, напишите мне, пожалуйста, о своих впечатлениях: @ilya0
Например, PHP Magic Number Detector — ищет магические числа, которые неплохо бы сделать константами (200, 404, 3600 и т.д.).
Кстати, на гитхабе есть наиболее полный список утилит для статического анализа PHP-кода.
P.S. Если вы используете SaaS-сервис, в котором есть большинство или хотя бы самые популярные из этих утилит и который умеет интегрироваться в GitHub Pull Requests, напишите мне, пожалуйста, о своих впечатлениях: @ilya0
Если вы главный контрибьютор некоммерческого opensource-проекта (и удовлетворяете ещё нескольким простым критериям), то можете получить бесплатную лицензию на 1Password Team — лучшее приложение для хранение паролей по мнению автора этого канала.
https://github.com/1Password/1password-teams-open-source
https://github.com/1Password/1password-teams-open-source
🔥 DaisyDisk со скидкой 50%
Для вас скидка на потрясающую утилиту для мака — она поможет найти, куда делось всё свободное место. Пользуюсь ей столько же, сколько владею макбуками (и крайне рекомендую), но купить решил только по такому вот прекрасному поводу. Может быть, вам тоже будет полезно.
Для вас скидка на потрясающую утилиту для мака — она поможет найти, куда делось всё свободное место. Пользуюсь ей столько же, сколько владею макбуками (и крайне рекомендую), но купить решил только по такому вот прекрасному поводу. Может быть, вам тоже будет полезно.