Установка Redmine на стеке RVM + RoR + Unicorn + Nginx

23.11.2020
Так как Redmine написан на RoR, то необходимо иметь RoR среду, но проблема в том, что разные RoR приложения могут требовать разные версии окружения. В моем случае необходимо было предусмотреть возможность установки RoR приложений с разным окружением. Все это должно работать на веб-сервере nginx.

2 дня на 15 патчей и правки стороннего модуля эквайринга

31.10.2020
У клиента сайт на wordpress + woocommerce, внутри множество модулей (которые в админке выдают уведомления разного рода notice - error. просто трэш) среди которых модуль интернет-эквайринга от одного известного банка. Наш модуль реагирует на хуки woocommerce и осуществляет на основании этого свою работу. Однако, логика модуля зависит от того, как отработает модуль эквайринга ... и как следствие все работало не так как надо.

Запуск дочернего процесса и чтение его вывода, linux

18.10.2020
Задача: программно запускать безголовый браузер, и получать из него данные. Все просто, за исключением некоторых мелочей. Сделать это все надо в linux.

Для этого использовал fork, pipe, waitpid.

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

Опыт разработки модуля для 1С-Битрикс

08.10.2020
На новой работе одной из первых крупных задач была разработка модуля фискализации продаж для движка 1С-Битрикс. Спустя месяц работы (не только над модулем) он был сделан и залит в маркетплейс, однако по некоторым причинам модерация происходила около месяца, а общение с модераторами оставляло желать лучшего, но все-таки получилось :)

Ajax в модуле для 1С-Битрикс

25.08.2020
На момент написания статьи, официальной документации очень не хватает, и данная реализация взаимодействия клиентской части с модулем посредством ajax во многом была собрана по крупицам из статей/форумов интернетов (источники описывали не весь механизм взаимодействия, поэтому появилась эта статья). Только дока по BX.ajax была доступна, но это не совсем то что нужно, потому что в этом случае:
    * необходимо самостоятельно следить за безопасностью
      * самому подключать ядро движка
        * при ajax запросах нужно указывать относительный адрес (в общем-то нормально, но ... можно лучше)

        Проверка SPF и DKIM домена на PHP

        19.06.2020
        Для разработки модуля массовых email рассылок сервиса uppleseen.com потребовалось проверять SPF и DKIM записи домена, так как пользователь осуществляя рассылку, мог бы указать любой домен, без этих записей все письма пойдут прямиком в спам (вообще-то не только по этому), а если речь идет о массовой рассылке значит это касается репутации сервера в глазах принимающих почтовых служб. Рисковать нельзя, надо проверять. Для проверки на php будет использована функция dns_get_record. Но в конце статьи есть вариант для получения DNS при помощи dig.

        Импорт из произвольного CSV файла на PHP

        12.06.2020
        В ходе разработки модуля массовой email рассылки сервиса uppleseen.com, клиенту понадобилось импортировать уже существующую базу клиентов из нескольких хранилищ. В каждом из них своя структура и свой разделитель данных. В статье описано как это удалось решить.

        Автоматизация Instagram

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

        Создание репозитория и работа с субмодулями

        16.05.2020
        В статье рассмотрено 2 вида начала работы с репозиторием, при этом я постарался охватить создание пустого репозитория, и случай когда необходимо клонировать уже существующий (в котором много-много всего).

        GIT detached HEAD

        12.05.2020
        При работе с репозиторием может возникнуть ситуация detached HEAD (в моем случае по неопытности), которую надо как-то решать, потому что это нестандартная ситуация, которая не позволит синхронизироваться с сервером. Внутри предлагаю один из возможных вариантов решения.