Новый rus-etrain: как это было

Jun 02, 2012 12:14

Идея о том, чтобы переписать сайт с нуля витала на самом деле очень давно. Ещё в мою бытность инженером, до переквалификации в профессиональные программисты. Первую попытку я предпринял ещё в начале 2009 года, когда решил изучить ajax, и попробовать его в действии. Я написал себе некое подобие ТЗ, сделал пару эскизов в фотошопе, и приступил к кодированию. Но дальше формы регистрации дело не пошло: запал иссяк. Основной рабочий эскиз выглядел так:



И в общем то, это было только к лучшему. Потому что я тогда начал писать, не научившись чему-то принципиально новому с момента запуска предыдущей версии сайта. Это был бы всё тот же PHP, без использования каких-либо фреймворков, это был голый ajax, потому что про jQuery я в те времена ещё не слышал, и в итоге это вылилось бы в очередную самодельную CMS, с кучей проблем и глюков. У меня была уже своя CMS, которую я делал, когда работал веб програмистом в студенчестве, и её всегда приходилось допиливать под каждый новый сайт. Не спорю, каждый уважающий себя веб-программист обязан сделать свою CMS, дабы наступить на все грабли, и получить нужный опыт, но он также должен суметь определить тот момент, когда с ней нужно будет расстаться без сожаления.

Летом 2010 года я начал читать книгу Grails in action. Она была написана очень живым языком, и в процессе чтения мне захотелось попробовать сделать на Grails что-то своё. И тут я вновь вспомнил про rus-etrain. Вспомнил про свои наработки, про ТЗ, которое я написал ещё давно. Сделав ревизию всех своих наработок, я начал кодировать. Однако опять, дальше формы регистрации дело не продвинулось. После того, как прошел энтузиазм, я задался вопросом о том, как я это буду разворачивать для общего доступа? На тот момент, сайт хостился на мастерхосте, на одном из самых бюджетных тарифных планов. Создание же сайта на Grails требовало как минимум VPS, на котором можно было бы развернуть Tomcat, а хостинг на мастерхосте был месяцем ранее проплачен на год вперёд. В общем, эта дилемма постепенно отбила всякое желание писать сайт на Grails. Таким образом, последняя версия сайта на Grails выглядела так:



Однако я всё-же не сдавался, и решил подойти к вопросу с другой стороны. Раз уж имеющийся на тот момент хостинг поддерживал только PHP, то значит и сайт нужно было делать на PHP. К тому времени, я уже перестал относиться к PHP предвзято, в конце концов, и ВКонтакте, и Facebook тоже написаны на PHP. Погуглив немного, я нашел фреймворк Yii, который по сути был аналогом Grails и их общего родоначальника Rails, только написанный на PHP. Я нашел в интернете книжку по Yii, прочитал её, и приступил к реализации.

Сначала всё было хорошо. Я сделал форму регистрации, восстановления пароля, потом были справочник поездов, железных дорог, и, наконец, загрузка фотографий. Я продвинулся гораздо дальше, чем в предыдущие два раза. Однако, чем дальше я делал сайт, тем меньше мне нравился итоговый результат. Потом уже я осознал, что допустил одну глобальную ошибку: я приступил к кодированию, не проработав достаточно тщательно общий дизайн сайта. У меня было конечно представление о том, какие основные разделы должны быть, как должны компоноваться элементы страниц, но этого было недостаточно. Я надеялся заняться дизайном уже после написания всей программной части. Однако, подойдя к этому вопросу вплотную, я осознал, что очень многое придётся переделывать. Разочарованию моему не было предела, и, спустя 5 месяцев, я решил прекратить работу над проектом с использованием Yii. Финальный результат выглядел так:



Но мне было жалко потраченного времени. Мне было жалко оставлять все те наработки, которые я сделал во время работы над сайтом. Я начал рассматривать возможность использования под сайт движка MediaWiki, однако вскоре и от этой идеи пришлось отказаться. MediaWiki не отвечал тем требованиям, которым должен был соответствовать сайт, и в то же время, предоставлял кучу другого функционала, который сайту был абсолютно не нужен. Допиливание MediaWiki фактически вылилось бы в ещё одну разработку, а я хотел отделаться написанием нескольких плагинов, добавляющий функционал, уникальный для rus-etrain, например - поиск поезда, и интеграцию фотогалереи с базой данных по приписке.

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

И раз уж мы свободны в выборе технологий, не было абсолютно никакого смысла оставаться в рамках PHP. Мой окончательный выбор пал на Rails. Язык Ruby, на котором написан Rails, является очень удобным, гибким, выразительным, и очень мощным языком, и мне всегда, с момента моего знакомства с ним, хотелось на нём обязательно что-нибудь написать. Да и потом, сайт железнодорожной тематики просто обязан был быть написан на Rails! :)

Кроме того, я решил использовать в процессе разработки систему контроля версий, о чем в последствии ни разу не пожалел! Даже при разработке в одно лицо использование такой системы очень сильно повышает мобильность и производительность. Я использовал Git. Я развернул основной Git-репозиторий на нашем VPS, и склонировал его на все компьютеры, с которых я мог работать над сайтом. Это мне дало возможность работать как на мощном стационарном компе, с широким монитором, так и на нетбуке, в зависимости от ситуации.

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

Однако, передо мной в итоге встала всё та же самая проблема: отсутствие представления о том, как в конечном счете должен был выглядеть сайт. Без этого было невозможно дальше разрабатывать некоторые фичи, которые сильно зависели от интерфейса. Но на сей раз я решил написать только те модули, которые работали обособленно от интерфейса, а остальные оставить в том виде, в котором их сгенерировал для меня генератор rails scaffold. В итоге, перед началом работ над окончательным дизайном сайт выглядел так:



Сначала я было хотел нарисовать дизайн самостоятельно. Но сделав пару набросков, я понял, что двигаюсь по одному и тому же пути. А мне хотелось нового, свежего решения. Я обратился на форум сайта, с просьбой помочь в разработке дизайна, и где-то через неделю мне написал Руслан, руководитель дизайн студии I-Net (http://www.inetstudio.ru/). Мы с ним сразу нашли общий язык, я обрисовал основные требования, и через полтора месяца он прислал мне первые эскизы. Дизайн мне сразу понравился, и я приступил к окончательной верстке по первым же макетам главной страницы сайта.

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

К тому моменту, когда Руслан закончил работу надо всеми страницами сайта, у меня уже была полностью свёрстана главная страница. Я приступил к вёрстке остальных страниц, параллельно готовя к переезду как данные на сервере, в первую очередь фотогалерею, так и данные из базы данных. Например, пришлось переделать все превьюшки к фотографиям, так как на новом сайте они должны были быть строго 120х90 точек. Но замечательная утилита ImageMagick прекрасно справилась с этой задачей. ImageMagick используется и в самом движке сайта, для обработки подгружаемых фотографий. Фактически - это фотошоп в командной строке!

Закончив с общедоступными страницами, я приступил к модулям управления содержимым сайта, это заняло у меня ещё два месяца. Поняв, что мне нужен какой-то контроль над тем, что необходимо сделать, я завёл себе текстовый файлик notes.txt, в котором описал, что нужно сделать к релизу, что было бы круто реализовать впоследствии, и что я уже сделал. И в процессе работы переносил задачки из одной категории в другую.

Как всегда, мне опять попадались всякие подводные камни, но я упорно решил идти до конца. Иногда, в процессе реализации одной задачи, возникали ещё две сопутствующих. Казалось, что этому никогда не будет конца. И я решил: нужно запускать как можно скорее! Я провел ревизию всех стоящих передо мною задач, и оставил только те, без которых сайт нельзя запускать в общий доступ. К моему удивлению, таких задач оказалось совсем немного. Остальные задачи были перемещены в список доработок, которые можно сделать после запуска. И вот, настал долгожданный момент: 24 мая сайт был открыт для общего доступа!



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

Добро пожаловать на http://rus-etrain.ru !
Previous post Next post
Up