Вся жизнь поделилась на «до» и «после». Сегодня наступил этот момент, эта точка экстремума, это событие — если и не всей жизни, то последнего её года точно: мы зарелизились. Finalement.
Что именно мы сделали?
Сайт создавался в 2010 году, как домашний проект — чтобы дать возможность друзьям заниматься по этим урокам. Масштаб задачи определил и выбор инструментов: простенькая и непритязательная платформа, ни к чему не обязывающий «форум». В таком виде это просуществовало почти восемь лет.
Сегодня Гугл заявляет о том, что он прекращает поддержку устаревшей платформы Google Sites, на которой работал сайт. Google Groups, где крутился форум, устарели сами по себе лет двадцать назад и так — это технология 80-х годов прошлого века. Пока была возможность, мы ставили заплатки, чтобы сайт продолжал работать на мобильных устройствах, но всему наступает предел. Наступил он и в нашем случае.
Мы начали искать новые технические решения. Был соблазн быстро перепрыгнуть на WordPress — до сих пор популярную платформу для сайтостроения. И в этой идее было рациональное зерно — все можно было сделать весьма быстро. Но мы понимали, что таким образом Штирлиц лишь оттягивал бы свой конец — со временем мы бы снова уперлись в очередные ограничения.
Не было масштаба в таком решении. Кольчужка маловата!
Другое дело — замутить целое серверное приложение: фреймворки, базы данных... Круто! Дайте две! (с) Ничего в этом не понимаем, зато получаем полный контроль. Мы ведь этого хотели, n'est-ce pas ?
Когда безумство помыслов умножается на терпение и профессионализм друзей, на выходе получаются классные вещи.
Одну из таких классных вещей вы сейчас держите в руках. Под вашей мышкой там трепещут скрытые пружины и мечутся кванты данных. Не без заусенцев это все, конечно, но мы стоим с напильником наготове. :)
Почему так долго?
Первоначально у нас были планы объездить этого жеребца где-то к апрелю-маю. Потом, когда мы осознали всю нетривиальность задачи, мы поняли, что раньше осени не справимся. И чем ближе мы были к результату, тем больше обнажалось проблем, не разрешив которые даже помыслить о релизе было нельзя. В какой-то момент мне показалось, что мы идем по ленинскому принципу: шаг вперед — два шага назад.
Я снова потерял сон. Я осознал, что это уже никогда не случится, потому что мы оторвались от реальности и уже не понимали, с чем можно мириться, а с чем нет.
Дело в том, что когда происходит релиз, разработчики, как правило, знают почти все недостатки и ошибки своего продукта — и даже могут их перечислить в Release Notes и в разделе Known Bugs (известные ошибки). «А что было бы их все сперва не исправить?», — так можно подумать.
ВОТ! В этом-то и состоит искусство — вовремя остановиться!
Можно бесконечно исправлять косяки. Это страшное проклятие перфекциониста: решиться выпустить продукт, ЗНАЯ (!!!), что в нем есть ошибки. Он готов сдвигать дату релиза на очередной день, чтобы только успеть закрыть вот этот косяк; и этот; и еще вот этот — ну пожалуйста, и этот, этот! «Я отказываюсь с вами дальше работать,если вы считаете возможным выпускаться ВОТ С ЭТИМ!» — так рассуждают перфекционисты накануне релиза. Вы знаете, по-моему, перфекционисты — тупиковая ветвь эволюции. Очень надеюсь, в моих детях это мое свойство притупилось. Ну, в конце концов, у меня среди моих детей — одна дочь, это дает шансы моему роду.
Так или иначе, но ты бесконечно отодвигаешь момент релиза, уподобляясь Ахиллесу, соревнующемуся с черепахой. Поймать этот момент, определить эту тонкую черту, что вот ЭТО недопустимо никак и и ни при каких обстоятельствах, а ЭТО пока можно пережить — с ТАКОЙ задачей справиться нелегко, я вам скажу! Без дружеского окрика — очень тяжело, практычески нэвазможна (с). К счастью, такой окрик вовремя случился.
Нелицеприятный разговор, который открыл нам глаза на происходящее.
Почему то, что мы сделали, — это мега круто?
Мы мигрировали форум. За этой простой фразой кроется ОЧЕНЬ много. Если ее расшифровать, мы «сдернули» информацию с Google Groups, где был наш старый форум (он нам не принадлежал — как администратор, я не мог править даже собственные посты), и залили ее на новый форум, которым мы управляем сами. Я почти уверен, что ДО нас в ТАКОМ объеме этого не делал никто. Мы не только восстановили всех пользователей, мы даже сохранили их аватарки — сегодня они могут зайти под собой и продолжить писать от своего имени! Но и это — лишь малая часть всей крутости.
Технически детали крутости
Старый форум жил в Google Groups, слегка приукрашенной и обернутой в красивую упаковку технологии XX века под названием News Groups. Ей примерно столько же лет, сколько и электронной почте, и по сути эти технологии во многом схожи. Каждое сообщение в группу представляет собой по форме электронное письмо. С помощью самописаной программы, которая имитирует поведение пользователя на странице, мы прошлись по всем страницам и веткам Google Groups, докапываясь до самых исходных текстов сообщений, каждое из которых в сыром виде выглядит примерно так:
Тут можно даже прочесть человеческое сообщение: « merci beaucoup de votre aide ! » :)
И в конечном итоге мы получили примерно три тысячи таких вот файлов с кракозябрами.
Мы все их расшифровали (они все были закодированы разными системами кодирования в зависимости от особенностей почтовых программ пользователей), распознали авторов, воспроизвели систему пользователей на новом форуме и привязали к ним их сообщения — мы ПОЛНОСТЬЮ восстановили и все сообщения, и их авторов, для которых создали аккаунты под их оригинальными адресами из почты Гугл — под теми, с которых они писали эти сообщения. Более того: мы даже восстановили их аватарки! Ну, это вообще вертикальный взлет!
Но на этом мы не остановились. Мы прошлись по всем сообщениям, отыскали все адреса e-mail, упоминаемые открытым текстом, наши по этим адресам имена — и заменили упоминания адресов именами. А еще мы весь оверквотинг (чрезмерное цитирование) спрятали под спойлеры. Взгляните на старый форум — он причесан до невероятности — за этим всем стоит огромный труд.
И тут появился мой друг и сказал… Ну, вы видели, что он сказал. ;) Если перевести литературно, мысль была такой: «Вы делаете больше, чем необходимо для релиза». Ну, вот нет, чтобы так и сказать! А он что сказал? А еще нарисовать пытался!
И вот: крутость всего этого не в том, что мы изобрели что-то новаторское и новое. Совсем нет. Крутость в том, что мы это реально сделали. Просто раньше это было в мечтах, а теперь стало реальностью. Ну, это же круто!
Почему еще это круто? Нам охрененно помогли друзья.
Техническое решение для новой платформы было предложено из соображений максимальной гибкости и — безотносительно наших компетенций, увы! Технически это решение безупречно — сейчас с высоты своих новых знаний я могу это утверждать безапелляционно. Практически же оно было абсолютно невыполнимо нашими собственными силами. Когда я говорю «мы», я имею в виду себя и своего старшего сына Антона, который вписался год назад в этот проект фултайм. И кстати, наша мега-крутость, описанная выше, крута лишь потому, что мы оба — непрофессионалы. Так-то во всем этом нет ничего особенного.
Мой бывший коллега Семен Атамась, который и предложил такой технический подход, взялся нам помочь на первом этапе.
Профессионала от любителя отличает то, что очень сложную с точки зрения неискушенного человека задачу профессионал сделает быстро и эффективно. Семен заложил техническую основу нашего нового проекта: создал его структуру, перенес в новую базу весь старый контент (это звучит просто, а технически это виртуозное действо), на ходу заменив архаичные проигрыватели уроков на современные (и делай с ними теперь, шо хошь!). Другой мой коллега, Володя Григорьев нарисовал дизайн основных страниц сайта, подсказал новый подход к организации данных на сайте. Серго Головачёв нарисовал для нас потрясающего кота — того самого, в которого на закрытой голосовалке влюбились все глосующие — и это теперь лицо нашего проекта... Да. Лицо. А что?!
Без такой помощи и помыслить было невозможно даже ввязываться в такой проект.
И еще: мы смоги в этом всем разобраться и продолжить самостоятельно.
Мы понимали, что не можем сидеть у друзей на шее бесконечно. Кроме того, спектр задач постоянно расширялся — мы хотели всяких фишек, мы хотели форум, который в исходном ТЗ не обсуждался, туда надо было втянуть данные со старого форума. мы хотели его интеграции с сайтом, со страницами уроков — все это предстояло делать самим. Рассчитывать можно было только на себя. И вот сперва исподволь, а потом уже и всерьез нам пришлось изучить всю эту кухню, стать программистами на Python под Django, освоить html, разобраться с Bootsrap'ом. Увы, наш скромный опыт не избавил нас от вопросов — мы до сих пор сидим на шее у Семена, хотя и постарались свести этот процесс к нулю.
На последнем этапе к нам присоединилась Светлана Малышева из Одессы, которая прошерстила весь сайт, отыскала все косяки, руками добавила недостающие транскрипты и ревизьоны (тоже по ходу изучив html и навыки работы в WebStorm). И поэтому это еще одна причина, почему все это офигенно круто.
Что мы все в результате получили.
Все, что выше — это был ответ на вопрос «как?». А теперь пара слов о том, что.
Мы догнали паровоз. Раздела «Впереди паровоза» на сайте больше нет. Он был там потому, что оформление страничек уроков не поспевало за новыми уроками, их материалы надо было куда-то складывать — так родился этот раздел. Теперь всем сестрам по серьгам — у каждого урока есть своя страничка, и на ней собраны абсолютно все материалы, которые к нему относятся. А от 160+ и далее уроков появятся комментарии, основанные на рассылке. у 220+ уроков появляются révisions — важные замечания преподавателя, касающиеся грамматики, словоупотреблений, способов запоминания — словом, всех тех квантов знаний, ради которых мы переслушиваем уроки, чтобы лучше все это запомнить.
У каждого урока теперь появился свой топик на форуме, где можно задать вопос, оставить свой комментарий, где можно писать или пополнять народный конспект — для тех уроков, где статьи в Народном конспекте уже были, мы перенесли в качестве первого поста в эти топики.
Появился обновленный форум, и мы будем рады встретиться там с вами, покалякать и поговорить о французском языке.