<rmcreative>

RSS
  1. Границы применимости статического анализа в публичных пакетах

    16 июня

    В замечательном чате Валентина Удальцова «Пыхтелка» заметили релиз одной из библиотек Yii 3, Rate limiter и предложили вполне справедливые улучшения. kafkiansky сделал pull request, в который кроме, собственно, улучшений попало одно очень интересное изменение: вместо геттеров-сеттеров сделать свойства класса CounterState публичными и добавить на класс аннотацию @psalm-immutable:

    /**
     * @psalm-immutable
     */
    final class CounterState
    {
        public int $limit;
        public int $remaining;
        public int $resetTime;
        public bool $isLimitReached;

    Почему так:

    1. Используется статический анализ через Psalm.
    2. @psalm-immutable не даст присваивать что-либо этим свойствам, если его добавить в continuous integration.
    3. В будущем легче будет мигрировать на read only properties.
    4. Никакой логики здесь нет, это plain object. С аннотациями меньше кода.

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

    1. Мы не контролируем то, как пакет используется.
    2. Мы не можем гарантировать, что будет использоваться именно Psalm, что он будет запускаться в процессе CI, что вообще будет использоваться хоть какой-то статический анализ.

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

    2 комментария
  2. Приготовили PHP Russia 2021

    4 июня

    Фактически завершили формирование программы и большую часть подготовки. Ещё работаем с докладчиками утрясаем отдельные моменты, но основное сделано. Должно получиться как минимум не хуже 2019-го. Может и лучше.

    Немного мыслей на тему:

    1. Несколько переносов прямо сильно ударили по моральному духу всех причастных. Тут уж ничего не поделать... корона, но я не думал что будет настолько деморализовывать.
    2. Делать конференцию в постоянно меняющихся условиях в разы сложнее: нужны резервные докладчики, есть множество ограничений по площадке, границам и так далее.
    3. Ограничения - это хорошо. Придумали много всего такого, о чём в нормальных условиях не додумались бы.
    4. Русскоязычные докладчики хороши. Да, англоязычные специалисты в 2019-ом привезли крутой контент, но смотрю на текущую программу и понимаю что точно не хуже.
    5. Нужно больше общаться с командой организаторов, докладчиками и потенциальными докладчиками. И темы внезапно оказывается крутые есть, и идеи возникают замечательные и проблемы решаются иногда сами собой. Этот пункт справедлив, в общем-то, для любой командной работы.
    6. Очень многие не спрашивают своих работодателей на тему купить билет на конференцию и зря. Большинство работодателей с радостью это сделают: тут и мотивация и сотрудник с новыми идеями и про компанию, вероятно, услышат.

    Приходите, будет хорошо!

    Комментировать
  3. Делаем приятно в консоли при помощи Starship

    12 мая

    Попробовал Starship, кросс-платформенное приглашение командной строки, написанное на Rust. Подходит к любому шеллу, в том числе к bash или Powershell под Windows.

    Отлично настраивается. Из коробки показывает текущего юзера, ветку git, используемую версию того же PHP, всякое про Docker и так далее. Причём всё в зависимости от контекста текущей директории, то есть это не выглядит как бесполезный космолёт.

    Ставится удивительно легко.

    Пробуем

    1 комментарий
  4. Запоминаем пароли к ssh-ключам в ssh-agent

    12 мая

    Вводить пароли к ssh-ключам того же git каждый раз немного достаёт и неплохо было бы чтобы оно как-то само. Делается при помощи ssh-agent. Примерно так же делается и на Linux-ах и на маке и в Windows с git-bash.

    1. Добавляем запуск ssh-agent (смотрите ниже) в .bash_profile. Скрипт обычно лежит в домашней директории пользователя. В Windows это c:\Users\username.
    2. Идём в конфиг OpenSSH, обычно это .ssh/config в домашней директории пользователя. Если запоминать надо пароли ко всем ключам, добавляем туда AddKeysToAgent yes первой строкой. Если к отдельным, добавляем в конфиги самих ключей.
    3. Открываем новую консоль. Делаем какое-то действие с запросом пароля, вводим пароль.
    4. Всё, пароль запомнен, больше спрашивать не будет.

    Скрипт для запуска ssh agent:

    # start SSH agent
    SSH_ENV=$HOME/.ssh/environment
     
    function start_agent {
         echo "Initializing new SSH agent..."
         /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
         echo succeeded
         chmod 600 ${SSH_ENV}
         . ${SSH_ENV} > /dev/null
         /usr/bin/ssh-add;
    }
     
    # Source SSH settings, if applicable
     
    if [ -f "${SSH_ENV}" ]; then
         . ${SSH_ENV} > /dev/null
         #ps ${SSH_AGENT_PID} doesn't work under cywgin
         ps -efp ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
             start_agent;
         }
    else
         start_agent;
    fi
    5 комментариев
  5. Новости Yii 2021, выпуск 2

    9 мая

    Написал второй выпуск новостей Yii. Есть новости по важным обновлениям Yii 3 и набор релизов Yii 2. Также упомянем некоторые интересные проекты, не связанные напрямую с кодом.

    Читаем на хабре

    Комментировать
  6. Про OpenSource в подкасте "Между Скобок"

    26 апреля

    Обсудили с Сергеем Жуком «кровавый open source»:

    • Почему много хейта?
    • Что представляет собой разработка open source проекта?
    • Есть ли вообще смысл идти в open source?

    Слушаем

    2 комментария
  7. Разрешить Synology Docker ходить в интернет

    19 апреля

    Если у вас нормально настроен firewall, то есть последним правилом запрещено всё, то Docker-контейнеры по умолчанию не смогут ходить в интернет.

    Чтобы исправить нужно это явно разрешить подсети Docker.

    Идём в Docker -> Network. Раскрываем Bridge и видим подсеть. Например, 172.17.0.0/16. Сразу считаем маску подсети. Получается 255.255.0.0.

    Идём в Control Panel -> Security -> Firewall -> Edit Rules. Добавляем новое правило:

    • Ports: All
    • Source IP: Specific IP
      • Subnet
      • IP address: 172.17.0.0
      • Subnet mask: 255.255.0.0
    • Action: Allow

    Правило ставим выше общего запрещающего. Теперь Docker сможет ходить в интернет.

    Комментировать
  8. Замена клавиш Huawei Matebook X Pro

    22 марта

    Понадобилось заменить на ноуте SHIFT и CTRL. Заводской шифт сначала облез, а затем разломился пополам.

    Официальный сервис забирает ноут и держит его у себя довольно долго. К тому же, гарантия закончилась и это будет прилично стоить так как меняется клавиатура целиком. Можно заказать кнопочки на специальных сайтах:

    • replacementlaptopkeys - 20$ + доставка.
    • Можно поискать "Matebook X Pro Keys" на eBay. Это 15$ + доставка. Но клавиши там с разборки и нужных часто нет.
    • laptopkey - 8€.

    К счастью, есть Aliexpress. Найти там что нужно оказалось не так просто, так что вот ссылка. 100 рублей кнопка и ножницы (лучше брать комплект) + 550 рублей доставка.

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

    Как менять:

    4 комментария
  9. Расшифровка "Теория программирования: пакетные принципы и метрики"

    17 марта

    Вышла расшифровка моего доклада про пакетные метрики, дополнение к SOLID. Опубликована на хабре:

    Читаем

    1 комментарий
  10. Новости Yii 2021, выпуск 1

    5 марта

    Первый выпуск новостей за год. Релизы пакетов, интересное из разработки и немного про финансы.

    Читаем на хабре

    Комментировать