<rmcreative>

RSS
  1. Евгений Россинский про прыгунов

    14 января

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

    Об одной из них в интервью рассказал Евгений Россинский, СТО ivi и член ПК Highload и РИТ:

    Люди, которые прыгают из одной компании в другую, проработав по году, не отвечают за свои слова. Это значит, что те архитектурные решения, которые они сделали, проверяет кто-то другой. И они не получают того самого опыта, который нужен для жизни долгоиграющего сервиса. Ты устроился работать в компании, проработал там два месяца, написал какой-то сервис или сделал какую-нибудь фичу, а когда эта фича через 7-8 месяцев перешла в суровую эксплуатацию, ты увольняешься. Но кто будет отвечать за то, что эту хрень написал ты?

    7 комментариев
  2. 2020

    2 января

    Год получился непростым, непривычным, немного страшным и непредсказуемым, но, в общем, неплохим. Итоги в этот раз чуть отстали, но не написать их не могу, как-никак, стабильно подвожу их с 2010.

    Читаем

    2 комментария
  3. Новости Yii 2020, выпуск 8

    30 декабря 2020

    Успел составить предновогодний выпуск. Тройку полностью не выпустили, но начали. В января будут ещё пакеты.

    Чиатем

    Комментировать
  4. PHP 8

    30 ноября 2020

    На днях релизнулся PHP 8. Он не так богат на полезные возможности, как PHP 7.0 или PHP 7.4, но определённо хорош как производительностью с новым JIT, так и тысячей приятных мелочей.

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

    В честь выхода мы провели стрим с участием двух видных разработчиков этого релиза: Дмитрия Стогова и Никиты Попова.

    Запись можно посмотреть на YouTube.

    По поводу стабильности могу сказать, что, определённо можно пробовать переводить на восьмёрку продакшн. Большинство серьёзных багов отловили в бетах. Yii 1, Yii 2 и Yii 3 к PHP 8 готовы.

    4 комментария
  5. Новости Yii 2020, выпуск 7

    12 ноября 2020

    Вышел очередной выпуск новостей про Yii и новая порция релизов. Опубликовал на хабре.

    Приятного чтения

    Комментировать
  6. Зачистка контекста в unit-тестах

    9 ноября 2020

    Unit-тесты должны быть изолированы. То есть тесты должны проходить если выполнять из по-одному или если включить в PHPUnit режим выполнения в случайном порядке через phpunit.xml.dist:

    <phpunit executionOrder="default">

    Для этого, если тест работает с окружением (например, с файловой системой), окружение нужно подчищать. Причём подчищать и до и после через setUp() и tearDown():

    final class MyTest extends PHPUnit\Framework\TestCase
    {
        public function setUp(): void
        {
            $this->cleanup();
     
            $path = realpath(sys_get_temp_dir());
            mkdir($path, 755);
        }
     
        public function tearDown(): void
        {
            $this->cleanup();
        }
     
        private function cleanup(): void
        {
            $path = realpath(sys_get_temp_dir());
            rmdir($path)
        }

    Зачистка делается два раза и до и после потому как если какой-то тест упадёт, зачистка в tearDown() не выполнится и окружение "встанет".

    8 комментариев
  7. Windows Terminal и пара разных версий PHP в отдельных вкладках

    24 октября 2020

    Недавно у меня умер SSD и заставил настраивать заново всё окружение. Опробованные Linux по тем или иным причинам не зашли (но я ещё попробую, может пропустил что). Вернулся на Windows 10.

    Для тестов фреймворка мне необходимы несколько версий PHP и в этот раз удалось сделать удобно. В Windows Terminal у меня теперь несколько профилей с git bash и в каждом отдельная версия PHP.

    Делается так:

    1. Берём сам PHP, распаковываем в отдельные директории. Например, C:\php74, C:\php80.
    2. Добавляем профили:
    {
        "guid": "{e084a08a-ad94-499d-9573-1d5904b4e9a0}",
        "name": "Git Bash with PHP 8",
        "suppressApplicationTitle": true,
        "icon" : "%PROGRAMFILES%/Git/mingw64/share/git/git-for-windows.ico",
        "commandline": "cmd.exe /C \"SET PATH=%PATH%;C:\\php80\\&& \"%PROGRAMFILES%\\Git\\bin\\bash.exe\" -login -i -l\"",
        "startingDirectory": "D:\\src\\"
     
    },
    {
        "guid": "{08a7817f-8812-4eb0-b4b7-a4939fc9d14a}",
        "name": "Git Bash with PHP 7",
        "suppressApplicationTitle": true,
        "icon" : "%PROGRAMFILES%/Git/mingw64/share/git/git-for-windows.ico",
        "commandline": "cmd.exe /C \"SET PATH=%PATH%;C:\\php74\\&& \"%PROGRAMFILES%\\Git\\bin\\bash.exe\" -login -i -l\"",
        "startingDirectory": "D:\\src\\"
     
    }
    7 комментариев
  8. Yii 2 за балансировщиком нагрузки

    14 октября 2020

    Система asset-ов Yii 2 очень удобна. Можно расположить ресурсы в пакетах или ближе к исходникам и фреймворк при первом запросе на генерируемую PHP страницу скопирует их (или сделает симлинк) в нужное место.

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

    $path = (is_file($path) ? dirname($path) : $path) . filemtime($path);
    return sprintf('%x', crc32($path . Yii::getVersion() . '|' . $this->linkAssets));

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

    Решается просто. В конфиге задаём hashCallback для компонента assetManager:

    'hashCallback' => static function ($path) {
        return hash('md4', $path);
    }

    Но до конца это проблему не решает. Теперь пути совпадают, но при первых запросах получается что в HTML прописан путь к ресурсу с другого сервера, а там ещё запросы не обрабатывались и такого ресурса нет. Опять 404.

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

    1. Отказаться от asset manager, использовать файлы в вебруте.
    2. Использовать webpack или другую систему сборки на node.
    3. Собирать ресурсы командой asset.

    Второй способ — сделать ресурсы общими. Здесь опять несколько вариаций:

    1. Использовать NFS чтобы сделать файловую систему ресурсов общей. Но это не очень быстро и надёжно.
    2. Использовать CDN. Например, ресурсы закинуть на S3 и раздавать оттуда. Заодно получим снижение нагрузки на серверах приложений.

    Последний вариант делается при помощи пакета mikk150/yii2-asset-manager-flysystem. Ставим, настраиваем:

    'assetManager' => [
        'class' => mikk150\assetmanager\AssetManager::class,
        'basePath' => './',
        'baseUrl' => 'Базовый URL статического контента',
        'flySystem' => [
            'class' => creocoder\flysystem\AwsS3Filesystem::class,
            'host' => 'Хост статического контента',
            'key' => 'Ключик S3',
            'secret' => 'Secret S3',
            'region' => 'Регион S3',
            'version' => 'Версия файлов',
            'bucket' => 'Bucket',
            'prefix' => 'Путь к ресурсам' . '/assets',
        ],
    ],
    Комментировать
  9. Рефакторинг в стиле ниндзя и другие приемчики

    25 сентября 2020

    1-го октября, в 19:00 веду вместе с бывшим коллегой, Валентином Назаровым, интересный стрим про рефакторинг. Рефакторить будут Валентин Удальцов и Леонид Корсаков. Оба те разработчики, у которых стоит учиться. Подопытный — «код популярного опенсорс-проекта на гитхабе»... ну вы поняли какого ;)

    Читайте анонс на хабре и добавляйте в календарик

    7 комментариев
  10. Новости Yii 2020, выпуск 6

    18 сентября 2020

    Почти три месяца прошло с последнего выпуска новостей. От нас почти ничего не было слышно. Мы работали. После расширения команды Yii 3 я больше занимаюсь управлением, ревью, проектированием и обсуждениями, чем непосредственно кодом. Получается неплохо. В общем темп ускорился, и мы всё ближе к нашим целям.

    Активность на официальном форуме и форуме yiiframework.ru стала совсем низкой если сравнивать со временами Yii 1 и Yii 2. Сообщество перешло в разные социальные сети и чаты. Я думаю, что такая миграция — это плохо. В соцсетях и чатах практически невозможно найти предыдущие ответы. Одни и те же вопросы повторяются практически каждый день и ответы не оседают в поиске. Почти уверен, что тот, кто первым начнёт собирать вопросы и ответы и публиковать их как статьи в wiki или посты в блоге, станет довольно популярным.

    А теперь перейдём к тому, что же интересного случилось с последнего выпуска.

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

    3 комментария