Продолжаю писать в Телеграм, третий выпуск.


В Твиттере спрашивают, как это я оказался контрибьютором в приватный PHP-репозиторий. Без понятия, наверное, баг Гитхаба. Забавно:


Блин, как люди умудряются в здравом уме писать “МБОУ ДОШ” или “БУЗ ВО ВОКОБ” или прочую дичь вместо “школа” и “клиника”? Никто же так не говорит, ни родитель, ни директор. Но только открыли Ворд, и сразу беда: не школа, а МОУ ВОУ ВОУ ВОУ.

Думаю, это вина учителей: десять лет детей учат, что писать нужно “умно”, иначе снижают оценку. Травмируют ученикам мозг. Оно может умно, да непонятно, над вами потешатся будут (с).


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

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

Стоит ли говорить, какой ад начинается при каскаде событий, когда одно вызывает другое? В аргументах ничего не передается, все берется из глобального стейта.

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

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

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

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


Собрался и перенес свой пет-проджект с Digital Ocean на выделенный сервер в Германии. Что могу сказать?

Облака это дорого. Легкость настройки облака компенсируется ценой. Например, на DO нода на 8 гигабайт оперативки и 6 виртуальных процессоров стоит 80 долларов. А выделенный сервер с процессором i7-6700 Quad-Core, 64 оперативы и 500 гиг SSD стоит 39 евро.

Основная техническая трудность была в том, чтобы написать длиннющий Ansible playbook, чтобы все развернулось в один прогон. Я даже купил на DO ноду за 5 долларов, чтобы на ней порепетировать.

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

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

Гуглеж на тему “dedicated server vs cloud” выдает ссылки на Квору и Стек с диаметральными мнениями. Как уяснил для себя, основное преимущество облака – масштабируемость. В любой момент можно поднять больше нод и не просесть под волнами трафика.

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

Вот и Дропбокс уходит с Амазона на собственную инфраструктуру.


У Digital Ocean неплохой слоган:


А между тем Гугл кое-что подшаманил. Теперь в поиске по картинкам пропала прямая ссылка на изображение. Вместо нее появилась “Save” с иконкой закладки, которая сохраняет картинку… нет, не на диск, а в сервис Google Images, то есть прямой ссылки вам не видать.


Смонтировал видосы с Никитой:

Эти и другие жгучие видосики у нас на канале: https://www.youtube.com/c/deeprefactoring


Все-таки нельзя отпускаться до такого уровня: делать из логотипа “мимимишных” персонажей. Digital Ocean ассоциирует себя с глубиной и океаном, поэтому на лого у них акула. Но когда во время загрузки акула качается на волнах или на странице фидбека говорит в микрофоны, это дичь в стиле Сберика и Сберочки.


Вчера испытал наплыв щедрости от наших американских партнеров (с).

Во-первых, съехал с Digital Ocean, написал им – парни, сколько я вам дожен? Помню, что не оплатил несколько квитанций примерно на 140 долларов. А они отвечают – да, видим, что ты все поудалял, долги отменяем и вообще заходи, если что. Не пришлось платить.

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

Всегда можно попросить что-то и надеяться на положительный исход.


# tor configuration for surfing speed
...
ExcludeExitNodes {ru}

Сначала все идет хорошо, а потом тебе делают корпоративную почту.


В Чите и Забайкальском крае, откуда я родом, есть локальный мем – багульник. Это кустик с малиновыми листьями, который произрастает исключительно в той местности.

В Чите резкий климат, зимой -40, летом +40. Регион убыточный, денег нет, воровские понятия, все держится на торговле с Китаем, до которого меньше дня пути. Но вот этот кустик не дает местным покоя, его суют в каждую щель.

Напечатали сборник стихов, что на обложке? Багульник. С чем подарочный календарь? Тоже с ним. Весенний фестиваль как назвали? Цветущий багульник. Какой-нибудь депутат-пидорас повесил баннер с чем? С багульником, конечно.

Забавно, что настоящий багульник растет в Канаде, а тот, что Забайкалье – какой-то подвид, и называется он рододендрон сибирский. Но всем как-то пох. Был даже мем “сопки малиновые”, но уже лет семь назад весь лес выжгли и свезли в Китай, сопки лысые.

Так вот, жил в Чите мой одноклассник, после школы стал музыкантом, играл “сибирский рок”. Недавно я шарился по Вконтакту и заметил, что одноклассник переехал в Питер, теперь читает рэп. Включил, а первая строчка:

– Багульник скоро зацветет в тени будистских храмов…

Схватился за голову: шесть тысяч километров человек проехал, а багульник остался.

Справедливости ради, мы с женой тоже иногда шутим про багул, но только в особом ключе. Есть стихотворение, что я от вас в Забайкалье сбегу к багульнику. Читаю его в слух, когда дети шумят.

А у нас в Забайкалье сопки — малиновые! Вы, небось, и не знаете, что такое — багул?.. Вы напрасно стараетесь жизнь мне сделать малиною, все равно я однажды в Забайкалье сбегу.


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