Pull to refresh
53
0
Алексей Алексеевич Осипенко @aratak

CTO at Cimon.io

Send message

Используем SQL в Rails

Reading time 8 min
Views 6.1K

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


Одна из основных концепций ActiveRecord состоит в том, что база данных достаточно утилитарна и может быть изменена. Ну, вы такие сидите, пишете свои модельки с использованием MySQL и вдруг где-то прочитали, что можно вот так вот взять и заменить MySQL на MongoDB. Хорошо, не так радикально, но, скажем, на PostgreSQL у вас могут быть причины заменить MySQL. Или наоборот, ничего не имею против MySQL. Тут ActiveRecord утверждает, что сделать вам это проще простого, мол скоупы, before/after фильтры и ассоциации достаточно абстрактны, чтобы не переживать за формирование запросов к базе данных и заботится о логике приложения. Что вместо WHERE is_archived = TRUE вы с радостью напишете where(is_archived: true) и ActiveRecord сделает все за вас. Все примеры будут преведены для PostgreSQL, а не для MySQL, так что пользователи MySQL вынуждены будут изобретать свой собственный велосипед.



Но как бы не так! На практике оказывается, что этот слой абстракции вся напрочь дырявая, как корыто из сказки о Золотой Рыбке. И что многие базовые возможности использовать нельзя, вроде сравнения дат или работы с массивами. И получаются скоупы с вынужденными where("#{quoted_table_name}.finished_at >= ?", Date.current) или where("#{quoted_table_name}.other_ids <@ ARRAY[?]", ids). На что ActiveRecord дает вполне осознанный и логичный ответ: не используйте это. Вместо массивов используйте habtm-связь, а если надо сравнивать даты, живите с этим. Да, и не дай бог вам пропустить quoted_table_name в таком скоупе — первый же includes или joins расставит все на свои места. Проще везде и всегда писать, чтобы руку не сбивать.

Читать дальше →
Total votes 10: ↑9 and ↓1 +8
Comments 2

Пилотный выпуск «Lambda Night Show»

Reading time 1 min
Views 1.2K
Ребята. Мы тут выпустили новое шоу, в котором приглашаем гостей и обсуждаем свежие (не очень свежие) новости из айти и различные технологии. И в противовес всем подкастам, это видео-шоу. Ведь подкастов было куча, а видеошоу еще нет.

И в первую очередь интересны ваши комментарии. Что вам понравилось и что не понравилось, над чем стоит поработать и что бы такого улучшить.

Приятного просмотра:

Total votes 10: ↑10 and ↓0 +10
Comments 2

Пилим монолит

Reading time 9 min
Views 13K

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

Читать дальше →
Total votes 28: ↑24 and ↓4 +20
Comments 15

«Разработчик переднего конца» или кто я по профессии

Reading time 4 min
Views 16K

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


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


Читать дальше →
Total votes 41: ↑29 and ↓12 +17
Comments 10

Переход от монолита к микросервисам

Reading time 5 min
Views 36K

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


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

Читать дальше →
Total votes 36: ↑30 and ↓6 +24
Comments 30

Сайдкик-самоубийца

Reading time 3 min
Views 10K

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


image


В итоге решение появилось откуда не ждали и оказалось крайне простым и очевидным.

Читать дальше →
Total votes 15: ↑14 and ↓1 +13
Comments 16

Как связать Docker-контейнеры, не заставляя приложение читать переменные окружения

Reading time 5 min
Views 50K
Docker, если кто умудрился об этом ещё не слышать — фреймворк с открытым исходным кодом для управления контейнерной виртуализацией. Он быстрый, удобный, продуманный и модный. По сути он меняет правила игры в благородном деле управления конфигурацией серверов, сборки приложений, выполнения серверного кода, управления зависимостями и много ещё где.

Архитектура, которую поощряет Docker — это изолированные контейнеры, каждый из которых выполняет одну команду. Эти контейнеры должны знать только как друг друга найти — другими словами, о контейнере нужно знать его fqdn и порт, или ip и порт, то есть, не более, чем о любой внешней службе.

Рекомендованный способ сообщить такие координаты внутрь процесса, выполняемого в Docker — переменные окружения. Типичный пример этого подхода, не применительно к докеру — DATABASE_URL, принятый во фреймворке Rails или NODE_ENV принятый в фрейворке Nodejs.

И вот переменные окружения позволяют приложению внутри контейнера удобно и непринуждённо найти базу данных. Но для этого, человек, который пишет приложение, должен об этом знать. И хотя конфигурация приложения с помощью переменных окружения — это хорошо и правильно, иногда приложения написаны плохо, а запускать их как-то надо.
Читать дальше →
Total votes 16: ↑13 and ↓3 +10
Comments 18

CSS принципы

Reading time 6 min
Views 26K
После тщательного анализа HTML и CSS кода, который постоянно переделывается, можно сделать выводы, которые должны помочь читателю в этом нелегком деле.
В этой статье  не будем привязываться к конкретным реализациям и готовым рецептам, дабы избежать основной проблемы любой CSS документации — за время написания статьи выйдет пара-тройка браузерных обновлений. И советы будут попросту бесполезны.

Читать дальше →
Total votes 25: ↑12 and ↓13 -1
Comments 57

Nethack. Советы на первые полсотни шагов

Reading time 8 min
Views 15K
Надеюсь, прошлая вступительная статья о игре Nethack побудила многих скачать и поставить эту замечательную игрушку. А ветераны, прочтя ее, вновь убили десяток-другой персонажей. Я, пока пишу эти две статьи, веду счет на десятки записей в книге славы нетхака.
Уверен, что ваш персонаж не раз пострадал от внезапной смерти, и пяток койотов приводит вас в замешательство. Не унывай, начинающий искатель приключений! Вместе мы пройдем до конца!

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

давайте уже советы
Total votes 51: ↑47 and ↓4 +43
Comments 56

NetHack. Об игре

Reading time 4 min
Views 14K


Многие, уверен, знают эту замечательную игру и убили на нее не одну неделю своей жизни. По моему скромному мнению — это одна из лучших игр из ныне существующих.
Появилась она очень давно — в 1987 году, через семь лет после выхода Roque — прародителя нетхака и основателем жанра "rogue-подобных игр".
Nethack — самый яркий ее представитель.



И что же такого интересного и захватывающего в этой игре? — спросите вы. И я вам отвечу — возможности игры, графика, геймплей, сюжет.
Да-да. Вы не ослышались. Именно это и ценно в этой игре.



Коротко обо всем по-порядочку.
Total votes 118: ↑107 and ↓11 +96
Comments 114

Information

Rating
Does not participate
Location
Украина
Date of birth
Registered
Activity