16 августа 2012 в 00:09
Кусок Drupal-жизни длиною в 5 лет
Привет.
Критические статьи о Drupal входят в моду, я не хочу писать брызжа слюной о том, что плох друпал или хорош, хотя опыта для первого и второго хватает, я напишу как друпал повлиял на мою жизнь.
Под катом ~5 лет моей жизни бок о бок с друпалом.
Acidfree Albums и начались муки с «дизайном».
Дизайна у нас просто не было, а каждый мимопроходящий объяснял как должен выглядить сайт.
В итоге получилась голубенькая такая гамма, слева герб данной организации, а справа герб РФ. Я познал вёрстку ещё лучше и прочее. Давид был очень педантичный, всё должно было быть выверено до пикселя, кроссбраузерно и без косяков. К слову, сайт и сейчас нормально отображается в современных браузерах.
Сайт был сделан, с запозданием мне его оплатили, и потом ещё полгода точно звонили и спрашивали, куда надо нажать, чтобы ххх.
К слову, с Давидом, мы очень сдружились, и сейчас лучшие друзья.
Оставалось пару недель лета, их я просто прогулял.
Начался учебный год, я сломя голову несусь к научному руководителю, доложить, что сделал первый сайт на Drupal. Он похвалил и всё.
Я полгода занимался всяким аникейством, лазил под столами в одном фирме делающей архитектурные проекты, ставил им автокад (лицензионный, ога) и был далёк от друпала.
Первая работа
Середина 3-го курса, ровно середина, каникулы были, звонит научный руководитель, говорит, чтобы я приехал в универ.
Приезжаю. Диалог:
-Будешь на меня работать?
-А что делать?
-Будешь или нет?
-Буду. А делать-то что?
-Друпалить!
-Владимир Николаевич, у меня же опыта мало!
-Ничего
Потом подъехал одногруппник, его Николаевич тоже позвал для этого же, и третий, на курс старше меня — отказался.
Условия были предложены шикарные.
Мне обещалась зарплата в 20 000р, возможность продолжать обучение, т.е. работать со свободным графиком.
Сейчас я бы сказал, что это был стартап. Далее в тексте он будет упоминаться как «ОЗМИ», название несколько искажено.
Основная идея ОЗМИ была в качественной и количественной рекламе, по крайней мере мне казалось так первое время.
Были инновационные идеи, в стиле, рекламы в платёжных терминалах, смс-рассылки, ещё некоторые штуки, которые я и не упомню.
ОЗМИ
Начало
Начались трудо выебудни. Николаич сразу дал понять, что работать придётся много, особенно первое время.
Мы взяли Drupal 6 и начали.
1 марта мы приступили к работе, в конце марта выкатили бету.
1 марта я не умел писать модули, поверхностно знал API, и кое-как делал тему оформления.
Методы Николаича были жёсткие. И жёсткость заключалась в преждевременной оптимизации, у нас со Стёпой знаний для неё ещё не хватало.
Мне нужно было написать какой-то модуль, по моему, вывод новостей или что-то в этом роде. В пятницу Николаич даёт мне задание, даёт книгу «Pro Development», но по Drupal 5 и сказал «В понедельник нужен модуль, пиши.
Под шестёрку».
И я написал модуль за выходные, после этого мне не особо были понятны рыдания на drupal.ru, о том, что в книге по Drupal 6 было чего-то некорректно, что ничего не получается, etc.
Ситуация с этой книгой была следующая.
Была книга Pro Development Drupal 5. Потом выпустили Pro Development Drupal 7, и при переводе допустили ошибку, в книге по Drupal 6 оказались исходники под Drupal 5, большинство примеров не работало, так как API было изменено, но основные принципы остались теже.
Мы выкатили бету, на сайте началась работа других людей.
Работа с живыми людьми
Контингент на сайте был разный и людей было много. Около 1000 человек постоянной аудитории, они были мотивированы за работу на сайте, это был обезьяний труд — вбивать объявления.
Особенно запомнился некто gordeiko, который на форуме задал вопрос: «Капейки. Куда ввадить капейки, нада нинада?????»
Мы (я, Степан, Николаич) эти капейки вспоминаем до сих пор. Мы просто не знали что ему ответить.
Вопрос этот был вызван тем, что мы что-то сделали с полем цены, не помню что.
Андрей Викторович
Потом появилась эта знаменательная фигура. Далее по тексту — АВ, как мы его называли.
Мы не знали кто он, но гендир сказал, что он будет следить, управлять и направлять нас в разработке сайта.
И началось…
АВ был прожжённый МЛМ-щик, ничего не понимающий ни в МЛМ, ни в веб-разработке, но креативил он знатно.
Притом креативил всегда и везде.
Лесенки/Кирпичики
На сайт была импортирована очень широкая география, весь КЛАДР, без улиц, вышло порядка 180 000 населённых пунктов нашей широкой страны.
Для удобства выбора были сделаны зависимые select-ы, Hierarchical Select в терминах Drupal, но мы написали его самостоятельно, не вытягивала система таксономии такое количество терминов.
АВ каждый раз называл эти селекты по разному, из того что помню, это лесенки и кирпичики, и каждый раз он пытался вспомнить как оно называется, говорил новый термин и добавлял коронную фразу.
Выглядело это так: «Эти глючат, как вы их, программисты, называете? А! Лесенки!»
Барабанная система
Сайт рос и развивался, у нас появился справочник организаций ака «жёлтые страницы». Но тех кто хочет размещаться платно — почти не было.
Тогда АВ придумал новую функцию, которая взорвёт рынок — барабанная система.
Что это такое и почему она должна была взорвать рынок?
Барабанная система напрочь убивает релевантность поискового запроса.
При каждом поисковом запросе организации будут сортироваться не по релевантности, а тупо по очереди.
При первом поисковом запросе твой автосалон последний, при следующем он первый, потом второй, третий, etc.
«Рекламодатели будут пищать! У каждого будет возможность оказаться на первом месте! Это будет бомба! Такого ни у кого нет!».
В общем мы не стали делать эту бомбу, зато после этого совещания команду покинул Владимир Николаевич, не выдержал креатива.
Остались мы вдвоём со Степаном.
Технические задания
Техническое задание у нас было, реально. Но только первый месяц, потом у нас появился АВ и всё начало делаться в стиле «Нам срочно надо! Очень! Делайте! Я тут главный!».
Нам его как-то надо было отвлекать, кое-как с гендиром договорились, что он его любые хотелки будут утверждаться гендиром и только потом переходить к нам. На время поток креатива прекратился.
Потом мне пришло ТЗ… Без ТЗ было лучше.
Это был вордовский файлик из десятка пунктов. Всё было кратко и лаконично, запомнился мне только пункт:
n. Привести в единый вид автор. и неавтор. стороны сайта.
Что это такое — выясняли долго, АВ был любителем экономить буквы, т.е делать странные и непонятные сокращения, а вкупе с креативом — это было нечто.
Автор. и неавтор. это оказались «Авторизованные и неавторизованные стороны сайта», т.е. надо было привести в единый вид — вид сайта для анонима и авторизованного юзера. В чём там разница мы не поняли, АВ тоже не смог объяснить, зато дико разорался «Разве непонятно?»
Потом команду покинул Степан. Я остался один.
Я бы и дальше выкладывал креатив АВ и он есть, но лежит где-то в архивах на другом жёстком диске, там должна быть графика и «графические ТЗ».
Потом был найден как усмирить АВ, мы нашли девочку-дизайнера, они сидели с ним вдвоём, чего-то рисовали, и он был почти рад. Его радость была неполной, он потом обязательно в Paint всё перерисовывал как надо.
Закат
Постепенно становилось всё хуже.
Начались проблемы с деньгами, их тупо задерживали под разными предлогами. Основной канвой был, конечно, кризис.
Потом были взяты ещё 2 программиста, а я осенью покинул компанию, практически сразу после того, как директор начал обещать программерам доли, мне стало понятно, что ловить здесь нечего и чего-то затевается.
Я ушёл в конце сентября, ЕМНИП, директор мне долго никак не мог перечислить долг по ЗП, ссылась то на плохую работу банка, то на то, что я чего-то не доделал, то просто физически мне угрожал. Но к ноябрю вроде как отправил мне мои ~40т.р за 2 месяца работы.
На этом работа с ОЗМИ прекратилась.
Уход во фриланс
Тере
Я ушёл из ОЗМИ, почти сразу меня пригласили в одно известное местное Интернет-СМИ, там у меня долго не получилось проработать, они хотели фуллтайм, были против учёбы, в общем где-то 2 недели я там проработал и ушёл фрилансить.
Почти сразу мне постучался клиент, главный редактор одного интересного журнала, назовём его Тере. Звали его Андрей. Чем он меня поразил — он был главредом и он друпалил.
Мы с ним договорись о часовом рейте, задачах и начали работать.
Прежде всего стояла задача переноса журнала на Drupal, было озвучено — никакого самописа, только «визуальные модули».
Сайт в то время крутился на WP + WP MUI + Buddy Press, могу ошибаться в названиях и каждый вечер, в пик юзеров на сайте, он клал VPS, помогало только передёргивание веб-сервера. Стояли всякие Super Cache, но они не сильно помогали.
Мы быстро вдвоём накидали сайт на Drupal 6, я написал скрипт переноса, перенесли контент и юзеров и сайт начал работать гораздо лучше, LA не поднимался даже до трети того, что было на WP. Для меня это было откровением, Drupal быстрее чем WP, к слову, кеширование у нас отсутствовало.
Потом уже я понял причины, там была очень странная структура БД, WP давал мало запросов, но зато каких!
Проработал я с этими Тере около полугода, и скажу —
Спасибо, Андрей!, вы мне очень помогли.
IT-дозор
Кто связан с друпалом — сразу понял, про кого я говорю.
Как было дело.
Я к тому времени довольно продвинулся в Drupal и стал заметным в сообществе. Меня «приняли» в скайп-чат самых известных русско-язычных друпалеров, был я там самым молодым.
И там я познакомился с Егором, он почти сразу написал в личку, спросил как у меня с линуксом и предложил парт-тайм, по сути, обычным саппортом хостинга. Я согласился.
Егор был владельцем IT-дозор, сам русскоязычный, но перебравшийся в Канаду. Не люблю слово эмиграция, да и можно ли применить это слово к свободным людям?
IT-дозор это была работа моей мечты, да, я много работал с клиентами, но я много учился, я работал с друпалом.
И через 2 месяца Егор предложил мне стать на ступеньку выше — я стал админом. Прошёл краткий курс молодого бойца, и довольно часто оставался за главного.
Так мы с ним и проработали 364 дня, 15 августа я ушёл, просто устал, но если будет надо — я вернусь.
Егор мне показал другой бизнес, не наш русский наебизнес, а совсем другой, где клиент это главное, и клиента нельзя бросать наедине со своими проблемами, даже если он платит 100р в месяц.
В общем уйдя из IT-дозора, меня позвал работать друг в свою свежеоткрытую студию. Скажу честно и сразу — мне не понравилось, просто как-то не так всё.
Потом были всякие фриланс-заказы, на них я останавливаться не буду.
Работая в IT-дозоре я познакомился с многими людьми, и многие люди даже переживали мой уход из этой компании. Сообщество маленькое, всё у всех на виду.
И был один человек, назовём его SU. Он очень переживал «Ты в Краснодаре, без работы, ВЕРНИСЬ В ДОЗОР! Ну куда ты пойдёшь?».
И предложил мне Москву.
Москву как вариант для переезда я никогда не рассматривал, не хотелось мне переезжать, как-то и в Краснодаре было всё хорошо. Что я и говорил SU.
Ну и в общем, по его наводке — меня пригласила одна московская компания. Назовём её Простобокс.
Я отсобеседовался по gtalk, мне сказали, что я нравлюсь им, и со мной хотят пообщаться лично.
Я покупаю билет на Avianova, вылетаю в Москву.
Москва
В Москве я был первый раз в жизни, из знакомых — только знакомые по drupal.ru.
И вот я прилетаю в 7 или 8 утра, а меня уже встречают, даже 2 человека.
Меня сразу прокатили по Москве, показали Москва-сити, Красную площадь, храм Христа Спасителя, ещё какие-то места, которые я незапомнил.
После были посиделки в ресторане с другими друпалерами.
Потом мне пришло письмо на мыло, человек хотел моей консультации, я ему написал, что могу с ним встретиться.
Потом я лёг спать.
Консультация
Так вышло, что я сначала пообщался с человеком, проконсультировал его, а потом пошёл на собеседование.
Консультация была интересной.
Мне утром звонит человек, спрашивает где мы можем встретиться, а я не знаю ни Москвы, ни даже где я нахожусь, меня к себе взял один друпалер.
Но мне надо ехать на собеседование на ст.м Шаболовская, предложил встретиться где-то там, человек согласился, оказалось, что он живёт недалеко.
Я проконсультировал человека, довольно интересный проект и пошёл на собеседование.
Собеседование
Обычные вопросы уровня — JOIN'ы умеешь? Ничего сверхестественного, ответил, рассказал, пообщались, у меня спросили «Когда ты можешь приступить к работе?». Попросил 2 недели на собрать вещи и улетел в Краснодар.
Жизнь и работа в Москве
Через 2 недели я прилетел в Москву, уже работать, так сказать.
Остановился снова у того друпалера, у которого жил. Дети были на даче, а жена ну почти была непротив чужого человека в квартире.
Так я и прожил у него 2 недели.
Потом понял, что нужно чего-нить подыскать. Начал шерстить авито, сландо, и прочее. Даже на хабре спрашивал habrahabr.ru/qa/9936/, не ожидал получить такого отклика, честно говоря.
Случайно нашёл подселение в комнату,
на Краснопресненской за 7000р. Съездили с Андреем, посмотрели, вроде всё ок.
Перевёз вещи, заплатил 14т.р и вечером приехал.
На работе обычная рутина, новый проект на Drupal 7, ничего такого, в принципе.
Ад? Не, намного лучше!
Когда мы приходили смотреть квартиру с Андреем, там было тихо, спокойно, и был только один человек, хозяин квартиры, как мы думали.
Вечером же я узрел гораздо больше людей.
Естественно со всеми познакомился, самое большее впечатление произвёл один стартапер из Республики Беларусь.
Это было нечто. Паша был крайне интересным стартапером, очень большим романтиком и очень слабопонимающим предметную область.
У него было 2 проекта, один "
Реальная база объявлений недвижимости", второй был проект обо всё и ни о чём.
Надежды он возлагал на оба проекта, в частности,
Реальная база недвижимости через пару месяцев должна была поровняться с cian.ru по посещаемости, а сайт обо всём и ни о чём — должен был ему приносить 2 миллиона за счёт квадратиков.
Квадратиками назывались рекламные места.
Паша сразу спросил, кем я работаю и как я могу ему помочь, я сказал, что работаю в другой сфере и не знаю чем ему помочь. Его такой ответ удовлетворил, в принципе.
Но каждый вечер Паша делился со мной планами на будущие успехи.
Паша был вообще весёлый человек, один раз застал интересный разговор. Я слышал только ответы Паши, разговаривал он видимо со своей девушкой:
-На море поехать? Зачем тебе это море! Поехали в Беларусь!
Я валялся с этого.
Но Паша был спокойным соседом, оказалось, что квартира это по меньшей мере проходной двор, а из постоянных соседей — двое наркоманы. Было весело, были и драки, слава богу они прошли мимо меня, были поиски стаффа в пять утра и постоянно у кого-то воняли ноги, а наркоманы были самые чувствительные по запаху.
Так я и прожил с ними 3 недели, потом мне выдали зарплату.
Своя арендованная квартира
У меня было n тысяч-рублей, мне нужно было срочно переезжать от наркоманов, всё равно куда.
И тут мне приходит письмо в личку на drupal.ru.
Писала одна девочка, из города Кемерово, я ей оказывается, когда-то давно помог с сайтом, она узнала, что я ищу квартиру и пообещала помочь найти.
И нашла, очень быстро, отличная квартира, дёшево, но далеко не центр и абсолютно нулёвая — минимальный набор советской мебели.
Мы быстро встретились с хозяйкой, я посмотрел квартиру и почти сразу в неё переехал.
Через неделю я узнал, что после того, как я съехал от наркоманов — их накрыла милиция.
Смена места работы
Так уж вышло, что по разным причинам, работать в Простобоксе мне не сильно нравилось. На то было много причин, начиная от ненавистного мне SVN и заканчивая тем, что я там не развивался как специалист.
В общем я сменил место работы и ушёл в работу над проектом, того человека, которого я консультировал в самом начале моей Москвы.
Новый проект
Здесь я не буду рассказывать про проект, NDA, как-никак. Но расскажу про Drupal и работу с ним.
Проект делается на Drupal 6, минимальной командой. В сумме — нас три человека, но занятость не могу сказать, что полностью полная.
На проект уже ушло ~800 человеко-часов, судя по Redmine.
Ещё порядка 150-200 уйдёт до запуска.
Я не знаю как назвать мою роль в проекте, но я погружён во все процессы + занимаюсь разработкой.
Сделаю небольшое резюме за эти неполные пять лет, что я с друпалом:
Минусы Drupal
Drupal, действительно, не самая лёгкая CMS Любишь кататься, хочешь гибкости и открывать окна мышкой? Плати за это количеством SQL-запросов.
Ещё так вышло, что на продакшен-сервере у нас достаточно медленные диски, всё хорошо, но вот процедуры типа сброса кеша занимали довольно много по времени. Поставили memcache — теперь на SQL уходит только треть времени генерации страницы. Среднее время генерации — не превышает 1000мс.
Любители фреймворков воскрикнут «Да как так можно! Говно ваш друпал!», собственно ничуть не говно, всё пучком, об этом далее.
Drupal тяжело отлаживать Из-за хуков тяжело понять что откуда возникает.
Как пример, был такой баг.
На каждой странице отдавался 404 HTTP-статус, но с контентом было всё ок.
В итоге дело оказалось в hook_menu_alter() одно из самописных модулей, модуль изменял пункт, которого в силу каких-то обстоятельств не существовало. Система меню друпала дурела и получалось вот такое.
Другая история была с модулем Invite и модулем og_features, они пытались одновременно переопределять форму регистрации, в итоге имеем баг, с тем, что модуль инвайтов инвайтиться не хочет.
В Drupal существуют баги Да, это так, но баги, что в ядре полная фигня, по сравнению с тем, что бывает в контрибе.
Если вы не накладываете патчи на модули, то вы, вероятно, не погружались в процесс разработки.
Многие любят делить модули на красненькие и зелёнькие, и считают, что в зелёньких по-умолчанию всё хорошо, но это далеко не всегда так.
Зелёненькие модули — это релизы
Красненькие — dev-версии.
Сообщество Drupal — бяки и злюки и не любят новичков Ага, а я самый главный ненавистник и это не шутка.
В Drupal-сообществе не любят идиотизм в любых его проявлениях, никто никому не обязан и не хочет отвечать на вопрос, который задаётся каждые 3-4 дня «Как мне зайти на сайт, если я скрыл форму входа?»
Не торопитесь делать сайты, читайте больше, а всё что вы хотите спросить — до вас уже спрашивалось.
Плюсы Drupal
Готовые решения Количество готовых решений — зашкаливает, но исповедуется принцип, что модуль для решения задачи не должно быть зоопарка модулей, т.е. если CCK он один и рабочий, а не как у Joomla 6 штук и каждый по разному работает.
Да, бывает всякое, бывает, что и аналогов нет, и модуль не самым лучшим образом работает. Но не ленитесь заглядывать в Issue.
Взять модуль Organic Groups, казалось бы, довольно взрослый модуль, всё должен уметь, увы, разработчик забыл добавить кнопку выхода из группы в интеграцию с Views, решается патчем.
Хотя уже может включено в релиз.
Инструменты Это вообще тема для отдельной статьи, напишу что используем мы.
Drush — инструментарий администрирования Drupal через командную строку, mush have
Drush make — тоже незаменимая вещь для экономии времени. Применительно к нам, используется для следующего.
У нас есть десяток самописных модулей, хранятся они в git, каждый в отдельном репозитории. И напрямую в код проекта коммиты модулей не уходят! На это есть свои причины.
В определённое время мы выпускаем новый релиз, чтобы не ходить по репозиториям и не вводить там
git clone git@server:module_name1
git clone git@server:module_name2
…
git clone git@server:module_name100
Мы используем drush make, в итоге, сборка свежих версий модулей, сводится к запуску команды
drush make custom.make
drush make сам выкачивает модули из репов и раскладывает по каталогам.
Второе применение drush make — наложение патчей. У нас есть список патчей, за которым приходится следить и после апдейта контриб-модулей накладывать. Drush make этот автоматизирует процесс, экономия времени при релизах — колоссальная.
Features — так как Drupal гибкая система для тыкальщиков мышкой, то настройки хранятся в БД, деплой настроек в таком случае — нечто невообразимое, как синхронизировать настройки Dev и Production, ничего не забыть не поломать? Да ещё и хорошо бы, чтобы это всё в git попало. Тут приходит на помощь модуль Features, он на основе настроек в БД генерирует модули своего формата, называемые в обиходе фичами.
Например, вы создали на Dev раздел новостей, естественно, натыкали его мышкой. Вам на Production надо перенести как минимум, 3 сущности, это вьюху, тип контента, словари таксономии. Вручную это займёт примерно час.
С модулем Features это займёт 10 минут в худшем случае. Вам нужно выделить галочками, что вы хотите переносить, сгенерировать модуль, закоммитить его, включить на продакшене и всё, профит.
Документация Документации — полно, что в блогах, что на drupal.org, она хорошо структурирована и есть ответы на большинство вопросов. Лучше документация только у Rails, на мой взгляд.
Мероприятия Здесь полно всего.
Начиная от крупных вроде DrupalConf в Москве, Киеве, заграницей, заканчивая мелкими, местечковыми вроде Drupal-Cafe или Друпал-шашлыки.
Если вы в Москве, в Краснодаре, Киеве, Донецке, Днепропетровске — присоединяйтесь к проводимым мероприятиям! В Москве скоро будет
пейнтбол, например, приглашаются все желающие. Биться будем, кстати, с Joomla-адептами, закончим холивар.
Рынок разработки Пока ещё, держатся более высокие планки стоимости на разработку, демпинг присутствует, но до фриланс.ру ещё далеко.
Будущее друпала
Увы, но я не верю в светлое будущее.
Ситуация мне видится следующей:
Drupal 5 — начало взлёта
Drupal 6 — вырастили армию хомячков
Drupal 7 — вроде и повысили юзабилити для неискушённого юзера/создателя сайта, но поддержка уже сложнее и дороже. Вот хороший пример. Я часто делаю апгрейды с одной мажорной версии на другую, во время Drupal 6 — многие обновлялись с Drupal 5 самостоятельно, без знаний. Апгрейд на Drupal 7 уже требует знания SQL, так как если появлятся ошибки в БД, процесс апгрейда остановится, пока не исправишь, шестёрка эти ошибки просто проглатывала. Мне кажется, это приведёт к тому, что рынок поддержки будет разделён между сильными игроками, а не одиночками.
Drupal 8 — решил «объединяться» с Симфони. Я попробовал Симфони, мне не понравилось + показалось, что сообщества нет как такового, слишком тухло, по сравнению с Drupal, да и как-то сложилось мнение, что для нормальной работы симфони нужно много костылей, у одних ActiveRecord не работает, у других ещё что-то.
Я сейчас веду трудовую деятельность на Drupal и параллельно изучаю RoR.
Я не буду говорить, что RoR рулит, друпал — срулит. Это разные инструменты, но я рад обеим системам.