Eligio — платформа для интерактивных автовебинаров

Однажды я сделал вебинар, на который никто не пришёл. Ну что за фигня! — подумал я. — Вот бы вебинар можно было записать один раз, а воспроизводился бы он ежедневно, как запись на магнитофоне. Ну не придёт зритель сегодня — так придёт завтра. А мы ему ещё и комментарии от предыдущих просмотров подтянем в реалтайме, для полного эффекта присутствия. Continue reading “Eligio — платформа для интерактивных автовебинаров”

Как составить не-трэшовую (зачёркнуто) отличную вакансию программиста

Это тезисный конспект к моему вебинару “Как составить не-трэшовую вакансию программиста“.

Я 20 лет работаю в управлении проектами в IT, ищу людей, пишу вакансии, регулярно вижу чужие вакансии, и мне тоже иногда предлагают работу программистом. Мне кажется, я за эти годы насмотрелся всякого, и у меня довольно часто получается составлять вакансию так, чтобы мне писали “извините, я вам пока не подхожу, но уж больно классно написана вакансия”. Вот я бы хотел, чтобы у вас было так же. Continue reading “Как составить не-трэшовую (зачёркнуто) отличную вакансию программиста”

Вытащить подростков из онлайна в реальный мир: миссия выполнима?

В начале 2018 года мы выпустили в открытый доступ проект Kvakka.com – социальную сеть, маркетинговую площадку и дейтинг для фанатов настольных игр. Позади три года разработки, за которые сервис вырос из пет-проекта в коммерческий сервис, пережив две смены фронтенда. Перед нами стояла великая миссия – вытащить детей и подростков из дома, из онлайн-игр, в реальный мир, где они смогут встречаться лицом к лицу с себе подобными. И находить друзей, подруг, партнёров по играм и не только. Continue reading “Вытащить подростков из онлайна в реальный мир: миссия выполнима?”

Возможно, вы имели в виду. Поиск с опечатками

К вам на сайт пришёл юзер и ввёл в поиск что-то вроде “рагняя поэзия пужкина”. Попробуйте сами на своём сайте. Не сработало? Тогда этот пост – для вас. Continue reading “Возможно, вы имели в виду. Поиск с опечатками”

USB-мышь определяется как PS/2 или не работает

Столкнулся с совершенно анекдотичной ситуацией – после замены материнской платы беспроводная мышь Logitech (с nano-адаптером) отказалась работать корректно и стала прикидываться PS/2-мышью. Курсор ездил по экрану как пьяный, и не работал скроллинг колёсиком. Я потратил несколько часов на поиск решения. Continue reading “USB-мышь определяется как PS/2 или не работает”

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

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

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

И получается херня. Потому что таск-менеджер – это не багтрекер. 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 “Две профессиональных болезни ООП: наследование и методы”

Про мессенджеры и ботов

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