Customer-driven dependency injection: отдаём поток выполнения программы в руки клиенту

Многие из вас знакомы с паттернами снижения “сильносвязанности” кода программного продукта, такими как внедрение зависимостей. В качестве простого примера – объект класса Logger, который не указан явно, а подсовывается в ходе выполнения кода. В зависимости от задач, условий, текущего окружения и так далее – конфигурирование позволяет подсунуть в нужное место тот или иной логгер – и писать хоть в файлы, хоть в базу, хоть в очередь rabbitmq. Вам достаточно делать Logger.write(data), и дальше алгоритм конкретного внедрённого обработчика будет применён к указанным данным.

Однако мы все привыкли обманываться, считая имеющееся у нас “dependency injection” отличным способом понизить связанность. Да, мы убрали алгоритмы во внедряемые компоненты, но мы по-прежнему задаём их либо в коде, либо в аннотациях (в случае PHP/Symfony), либо в конфигурационных файлах окружения. И мне не давала покоя мысль – как отдать такое конфигурирование в руки клиенту (другими словами – сделать его управляемым “на ходу”), при этом не применяя костылирование и не изобретая велосипед. В этом посте я хочу поделиться с вами паттерном, решающим эту задачу, который мне почему-то не встретился в литературе, но его удалось наработать в ходе локальных экспериментов. Continue reading “Customer-driven dependency injection: отдаём поток выполнения программы в руки клиенту”

Делаем аналог “Битрикс Big data” своими руками: часть 1

Я не очень симпатизирую людям, которые размахивают bullshit-терминами на конференциях, однако до сих пор не сделали банальные миграции БД и деплойку в своём продукте. Поэтому, услышав громкие заявления о новом сервисе Битрикса, мне стало за державу обидно захотелось рассказать о том, как такие вещи устроены изнутри.

Сей пост для тех, кто уже владеет сеткой коммерческих сайтов и хочет трекать деятельность посетителей кросс-доменно (т.е. идентифицировать поведенческие факторы по всей сети), однако по счастливой случайности ещё не стал очередным адептом Битрикса. Continue reading “Делаем аналог “Битрикс Big data” своими руками: часть 1″

Интернет и wi-fi на даче

Если вам так же, как и мне, хочется отдыхать на даче, сидя в удобном кресле, вытянув ножки и поставив на колени ноутбук – это пост для вас. Я поделюсь своим текущим опытом организации полноценной домашней сети с интернетом и wi-fi на даче. То есть такой сети, в которой вы чувствовали бы себя как дома, со всеми своими устройствами, фильмами, музыкой и с постоянным доступом к облачным сервисам. Continue reading “Интернет и wi-fi на даче”

События VS изменения данных: кто прав?

Один мой коллега, собаку съевший на управлении данными, подкинул интересную мысль: мол, можно трактовать любое событие (в событийно-ориентированной архитектуре) как изменение данных, и наоборот. Таким образом, предполагается, что можно программировать сколь угодно сложную систему и как связь событий-реакций, и как последовательность изменения данных. Выглядит заманчиво, но спорно, поэтому давайте разберёмся по-порядку. Continue reading “События VS изменения данных: кто прав?”

А как ты насчёт немного покодить?

Этот вопрос задают мне поголовно все работодатели. С первого взгляда ответ кажется очевидным, но… Всегда есть это “но”. Если рассматривать вопрос в лоб, то очевидно: предлагать “покодить” человеку, который более 15 лет работает менеджером, практически с нуля поставил ряд технологических и бизнес-процессов в UMI.CMS, неоднократно формировал успешные команды веб-разработчиков, но никогда в жизни официально не работал программистом, – по меньшей мере странно. Continue reading “А как ты насчёт немного покодить?”