• Just saying «Hello» and chilling around2 min read

    I have never been really good at writing. I won some rewards in my childhood. I wrote some shitty verses in my youth. None of those achievements really were significant for the universe around me. It was all like a silly child play with the symbols I barely know. Move one back and another forward, make a stanza, make another one, make them a little bit more shiny. I experienced that well-known fear of a blank page. And I experienced that recursive «oh, I can do this paragraph better» annoying thing too. But I love writing, I really do. I have dreamt about writing a book all my life long just like my grandfather had dreamt before me. That’s why I have decided to write my thoughts in English: to master my slack skills with practice that makes me happy.

    We are what we do and what we think about. The oceans of information we swim in are unstable in our epoch. Their coast and bottom are changing their shapes every second with new memes rising and fighting each other to the bloody death. The key point is that those ideas are battling mostly in English. Native speakers are lucky in some way: they don’t need to do anything to be in the middle of that storm and to see every glimpse of new fancy ideas worth knowing about.

    Not that I say that other languages are not good. They are wonderful, all of them. But they act in this battle as smidge waves in the far away bays. And what I am interested in as a contemporary engineer and transhumanist is this battle itself. I want to be in the vanguard of this mess crushing metaphoric skulls with my own great axe of knowledge and will.

    And then again I asked myself a question: «Do I really want to battle ooze and slime in memetic swamps of my native language? Do I really want to waste my life for that dolorous purpose?»

    So here I am now.

    Continue   
  • Как я перестал бояться и полюбил конфиг12 min read

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

    Бенджамин Дизраэли

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

    5a64abb85d795letsencrypt

    Зачем это?

    У защищенного соединения есть множество преимуществ перед старым добрым http: защита от перехвата траффика, защита от подмены содержимого, лучшее ранжирование в поисковых системах и т.д. Мне вот, например, нравится зеленый значок в адресной строке. Раньше за всё это удовольствие нужно было платить, поэтому сертификаты можно было увидеть только на крупных проектах, либо платежных системах (где риск компрометации данных велик и без сертификата вас просто не поймут). Проект letsencrypt.org призван изменить это положение вещей раз и навсегда.
    Continue   
  • Latest docker for Ubuntu LTS1 min read

    For Ubuntu 14.04 LTS

    Latest docker version (automatic update)

    apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
    echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" >> /etc/apt/sources.list.d/docker.list
    apt-get update
    apt-get purge lxc-docker*
    apt-get install docker-engine

    And result will be like this:

    docker -v
    Docker version 1.9.0, build 76d6bc9

    Latest docker-compose version

    curl -L https://github.com/docker/compose/releases/download/1.5.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose
    Continue   
  • Валидация форм на React JS25 min read

    Нам нужны формы. Больше форм.

    Любой разработчик знает это. Каким бы хитрым фреймоворком вы ни пользовались, какие бы неожиданные идеи ни привносила в процесс разработки ваша очередная революционная концепция, как бы ни был устроен поток данных приложения, вам никуда не уйти от форм. Как только ваше приложение требует ввода более-менее сложных данных, старое доброе решение остается самым простым и эффективным, самым понятным пользователю и простым в реализации. И в React Js та же самая, старая как мир история — нам снова нужны формы.
    Continue   
  • Как показать себя и свои наработки3 min read

    grok
    grok

    За что мы боремся?

    В жизни разработчика регулярно возникает необходимость показать результаты работы кому-либо еще — коллеге, заказчику, тестировщику. Всё довольно просто, если вы сидите в одной комнате или, хотя бы, здании: можно пригласить его к своему столу (скорее всего придется пообещать кофе или печеньки) и показать лично на собственном мониторе. Всё сложнее, если вы находитесь в разных районах, городах или даже странах. А иногда вам может пригодиться доступный из интернета API, развернутый локально — например, если вы разрабатываете или тестируете мобильные приложения.
    Continue   
  • Модальное окно на React JS9 min read

    bycycle
    bycycle

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

    И хотя в арсенале любого фронтенд-разработчика есть простая как топор функция confirm(), будем честны: она страшна как смертный грех, по-разному выглядит в разных браузерах и запросто может разрушить весь эффект от вашего крутого дизайна. Выход один — использовать собственное модальное окно. Всё крайне просто, если вы используете какой-нибудь jQuery и императивно командуете DOM-элементом, в котором оно описано, тем более что и готовых решений существует множество. А вот если вы используете React JS с его парадигмой реактивного программирования, решение может быть достаточно хитрым из-за особенностей связи между родительскими и дочерними компонентами.
    Continue   
  • Docker ambassador pattern4 min read

    Ambassador
    Ambassador

    При проектировании информационной системы очень важна ясность. Нет ничего лучше, чем элегантно построенное приложение, в котором нет лишних деталей, в том числе — лишних связей между компонентами.
    Continue   
  • Миграция медиабиблиотеки Wordpress в S35 min read

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

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

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

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

    Отключение clear_env

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

    Белый список

    echo "env[foo] = bar" >> /etc/php5/fpm/pool.d/www.conf
    Continue   
  • Zsh: больше чем bash1 min read

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

    Установка

    Установить «базовый комплект» проще простого. Например, в Ubuntu:

    apt-get install zsh
    usermod USER -s /usr/bin/zsh

    Установить дополнительные плюшки тоже не сложно:

    curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh

    Результат

    Например, вот так выглядит zsh у меня:

    zsh
    zsh

    Continue   
  • Удаление паролей из истории Git2 min read

    Great Scott!
    Great Scott!

    Почему это важно?

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

    Continue   
  • Миграция с Mercurial на Git1 min read

    migration
    migration

    Иногда возникает необходимость продолжать работу над старыми проектами, в которых могут использоваться устаревшие системы версий — например, mercurial или, боже упаси, svn. К счастью, для перехода с mecurial на git не требуется начинать проект с чистого листа и терять историю изменений, есть утилита, которая всё сделает для нас сама.

    cd
    git clone git://repo.or.cz/fast-export.git
    git init git_repo
    cd ~/git_repo
    ~/fast-export/hg-fast-export.sh -r ~/mercurial-repo
    git checkout HEAD

    В итоге, в текущей папке мы получим самый настоящий git.

    Continue   
  • Собственный VPN за пять минут3 min read

    5a64a79fc2d2cspy

    Существует несколько способов сжечь книгу. И мир полон людей, бегущих с зажженными спичками.

    «Звук бегущих ног», Рей Бредбери

    Лирическое вступление

    Наиболее устойчивые системы — децентрализованные и, к счастью, интернет из их числа. Своим появлением эта технология изменила всё. Никогда ранее не было возможно так просто обмениваться знаниями и новостями, иметь свободный доступ к практически любой точке земного шара. Это позволяет любому мнению быть услышанным — и это прекрасно и очень важно.
    Continue   
  • Набор гика-бегуна1 min read