Filter by tag: Science
  • Server-side Google Analytics by Ast

    Usually, people integrate Google Analytics into their shops via simple pre-generated client-side javascript snippet. It's pretty straightforward, easy to use and works most of the time correctly from the box. So why would anyone want to use a server-side integration? There could be a helluva lot of reasons for that. For example, you may want to track some events from your server-side workers — it would be ugly and unreliable to involve a browser here. Or you may want to implement a complicated funnel for your sales, mixing client-side events with your CRM events. So, is it possible? Sure, it is, and we'll use Measurements Protocol for this. At the time, it's a most modern way to save raw analytics data to Google Analytics from whatever environment you want. I'll use PHP with Guzzle for code examples, but you surely can use any language and any library: there are no differences in principle at all. And let's assume that you already have the perfectly working client-side integration.

    Read more
  • Как я перестал бояться и полюбил конфиг by Ast

    Как правило, наибольшего успеха добивается тот, кто располагает лучшей информацией
    Бенджамин Дизраэли

    Лишь совсем простые приложения могут обойтись без файла конфигурации. У остальных всегда найдется, что хранить в конфиге: настройки окружения, настройки логики, часто меняющиеся фрагменты текста, etc. Словом, вопроса «что хранить в конфигурации» обычно не возникает: кандидатов достаточно. А вот вопрос «как хранить конфигурацию» возникает часто и еще чаще решается не самыми оптимальными способами. В этой статье я хотел бы рассмотреть варианты хранения конфигурации приложения, их плюсы и минусы.

    Read more
  • Миграция медиабиблиотеки Wordpress в S3 by Ast

    В жизни каждого разработчика есть такие задачи, которыми невозможно гордиться, а упоминать их немного стыдно — потому что всё, абсолютно всё, связанное с такими задачами плохо. Поговорим, например, о Wordpress: он хранит данные в сериализованных массивах в базе данных, не умеет в миграции данных, нарушает все мыслимые и немыслимые, гласные и негласные правила написания хорошего кода... Но зато используется в продакшене, приносит бизнесу деньги, а значит — должен поддерживаться, развиваться... а, ну еще вам может понадобиться перенести всю медиа-библиотеку на S3 (на самом деле, это может быть любой CDN).

    Примерный план действий такой:

    1. Установить плагин для работы с S3
    2. Найти все изображения
    3. Залить их на S3
    4. Изменить пути до изображений в постах
    5. По возможности сохранить рассудок

    Чтобы было веселее — все эти действия должны произойти в автоматическом режиме, без нажимания кнопочек в админке, изменения конфигов, т.к. установка предполагается в AWS Elastic Beanstalk. И лучше не спрашивайте меня почему.

    Read more
  • Как прочесть переменные окружения в fpm by Ast

    Если вы используете Docker, скорее всего, вы активно используете и переменные окружения (environment variables). В php-cli или mod_php прекрасно работает стандартный метод их получения:

    # ~/envapp/read.php
    <?php
    $env = getenv("foo");
    echo $env;
    
    php read.php
    bar
    

    Однако, в php-fpm так сделать не получится: дело в настройке «clear_env» (по-умолчанию «true»). Если она активна, прочитать можно будет только те переменные окружения, что указаны в специальном белом списке. Решения, соответственно, два: либо отключить опцию «clear_env», либо добавить необходимые переменные в белый список. В разных обстоятельствах могут понадобиться оба решения:

    Отключение clear_env

    echo "clear_env = no" >> /etc/php5/fpm/pool.d/www.conf
    

    Белый список

    echo "env[foo] = bar" >> /etc/php5/fpm/pool.d/www.conf
    
  • Пакет для балансировки запросов к статическим файлам by Ast

    Url Balancer

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

    • Поддержка Composer (через packagist)
    • Поддержка Silex
    • Расширяемость стратегий балансировки

    Установка

    Рекомендуется установка через Composer:

    {
        "require": {
            "astartsky/url-balancer": "1.1.2"
        }
    }
    

    Пример использования

    $urlBalancer = new \Astartsky\UrlBalancer\UrlBalancer();
    $urlBalancer->setStrategy(new \Astartsky\UrlBalancer\Strategy\HashStrategy())
    $urlBalancer->addBucket(new \Astartsky\UrlBalancer\Domain("s1.myawesomesite.com"));
    $urlBalancer->addBucket(new \Astartsky\UrlBalancer\Domain("s2.myawesomesite.com"));
    $urlBalancer->addBucket(new \Astartsky\UrlBalancer\Domain("s3.myawesomesite.com"));
    
    $url = $urlBalancer->getUrl("/images/my_impressive_content.png");
    

    Ссылки

    На Packagist.org: пакет

    На Bitbucket.org: репозитарий