Почему из новомодных систем управления проектами получается х..

Таск-менеджер – это не багтрекер, или Почему из новомодных систем управления проектами получается херня.

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

И получается херня. Потому что таск-менеджер – это не багтрекер. Continue reading “Почему из новомодных систем управления проектами получается х..”

Ограничиваем доступ к S3 средствами Rails-приложения

Добавить хранение файлов в облаке Amazon S3 в приложение на Rails очень просто: устанавливаем гемы paperclip и aws-sdk, и готово. Но что если мы хотим скрыть прямые ссылки на хранилище S3, и даже разграничивать доступ к конкретным файлам в зависимости от роли пользователя? Вот рабочий пример: Continue reading “Ограничиваем доступ к S3 средствами Rails-приложения”

Паттерн voter injection: взаимодействие без хардкода

В моей практике часто возникают ситуации, когда в программе один объект должен определённым образом реагировать на другие объекты. То есть – решать, взаимодействовать с ними или игнорировать. Например, когда объект принимает сообщения от других объектов, и должен решать – отреагировать на конкретное сообщение или пропустить его. Понятно, что в простейшем случае достаточно это захардкодить: допустим, объект user реагирует на все сообщения про этого юзера. Но что делать, если ситуация сложнее, и реакции должны быть динамическими? (например, если ваши объекты порождаются фабрикой). Для этого у меня есть некий паттерн, который я называю voter injection. Continue reading “Паттерн voter injection: взаимодействие без хардкода”

Две профессиональных болезни ООП: наследование и методы

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

Лютый ад и баттхерт начинается, когда надо породить объект, не только включающий в себя особенности сразу нескольких дочерних классов, но и имеющий парочку совсем маааленьких отличий. Continue reading “Две профессиональных болезни ООП: наследование и методы”