cogear — опыт разработки свободного продукта

Приветствие всем и доброго времени суток.
Хочу поделиться с вами полезным опытом разработки и распространения системы управления сайтами. Одни люди любят покупать или брать в прокат велосипеды, иные — заново изобретать свои. Каждый выбирает наиболее приемлемый вариант. Сегодня вы не увидите рекламных буклетов и пестрых картинок — только квинтэссенцию полученного опыта в виде простого текста.
Прошу вас настроиться на неформальное расслабленное общение, будто бы мы все собрались на одной большой кухне.
Поскольку сервис picamatic.com ушел в небытие, утащив с собой все загруженные на него картинки, не вижу особого смысла в ссылках на предыдущие топики в силу того, что они потеряли свою наглядность.
Линейка времени
— Познакомившись с HTML на курсах при ИТМО в далеком 1999 году, увлекся веб-разработкой.
— Пожав руку PHP и MySQL где-то в районе 2004 года, познал волшебный мир управления информационными потоками.
— Как обычно это бывает, в процессе познания появилось желание создать значимый и монументальный продукт, поэтому с начала 2007 года был подвластен мысли о разработке собственной системы управления сайтами.
— В мае 2007 года пришел на Хабр, где пребываю и по сей день.
— В декабре 2007 года узнал про BigStreet и был воодушевлен, наблюдая за тем, как один человек redhummer разработал достаточно самобытный и интересный движок.
— В январе 2008 года приступил к разработке движка на CodeIgniter, имя которого навсегда скрыла от нас история. Топик про него →
— В июле 2008 года движок был запущен в сайте «Используй Mac» (см. ссылку выше)
— Осенью 2008 года приходит понимание, что захардкодженные настройки и непродуманная расширяемость, а также повсеместное отсутствие нормальных комментариев к коду, закрывают разработке дорогу в будущее. Не подумайте, что время было потрачена зря — опыт такой разработки оказался полезен и, конечно же, пригодился мне не раз.
— В октябре 2008 года приступаю к разработке нового движка на том же CodeIgniter, на этот раз более обстоятельно подойдя к делу.
О движке
Всем известно, что нелегко подобрать хорошее название для продукта. Мне повезло, потому что, на мой взгляд, cogear — хороший выбор. Название собрано из двух частей:
- co — от англ. community, core, configuration.
- gear — от шестеренки (англ. — gear), которая в общей массе себе подобных приводит двигатель (проводим параллель в реальный мир) в движение.
Основной акцент был сделан на расширяемость и простоту разработки. Если в «попытке номер 1» в качестве прообраза был взят Хабр (по подобию BigStreet), то на cogear в большой степени сказалось влияние Drupal, хотя и данный ресурс не остался в стороне.
Прошу обратить внимание на то, что разговора о том, что «мой движок лучше всех» не идет. Как известно, движок подбирается под каждый проект, исходя из задач и целей, которые он должен выполнять.
Мне нравится работать с Drupal, Wordpress и Joomla — в своей области каждый умеет делать что-то определенное проще и удобнее, чем другие. Каждый движок хорош по-своему.
Особенности
За последние полгода видение текущей разработки в прояснилось, ушло все лишнее и субъективное, поэтому в доступной форме рассказываю плюсы и минусы.
Плюсы
+ Свобода в виде открытого исходного кода и GPL-лицензии.
Да, еще год назад меня одолевали мысли о гениальности происходящего, но, право, каждый может помечтать :-)
Проприетарная лицензия повеселила осведомленных в области лицензирования хабровчан. Мне в очень познавательной форме передали собственный опыт лицензирования и наставили на путь истинный, поэтому в несколько шагов (через Creative Commons) перенес движок на GPL. В принципе, в будущем возможен переход и на MIT, поскольку мне не так важно, затираются и копирайты или нет, сколько то, что мой труд оказался кому-то полезен.
Любой член сообщества может присоединиться к разработке, получив права участника команды в репозиторий SVN.
+ Расширяемость системы
В корне движка лежит папочка «gears», для установки нового компонента требуется просто перетащить его в эту папку и активировать в панели управления одним щелчком мыши. В сообществе cogear модули и плагины принято называть просто «шестеренки», потому что все они лежат в папке «gears» и вместе являются составляющими движущей силы системы.
+ Большое количество доступных шестеренок
Несмотря на то что дистрибутив весит немногим менее 1,5 Мб, в его состав входят 44 шестеренки:
- acl — права доступа
- admin — панель управления
- blogs — блоги
- buddy — друзья
- captcha — капча
- comments — комментарии
- community — сообщества
- cron — планировщик
- cut — тизер
- editor — редактор
- errors — обработчик ошибок
- favorites — избранные
- form — работа с формами
- global — основные настройки
- i18n — интернационализация
- index — главная страница
- install — установка компонентов и движка
- invites — инвайты
- jevix — фильтр html-кода
- kcaptcha — альтернативная капча
- lighter — подсветка синтаксиса через Javascript
- mail — отправка почты и личные сообщения
- menu — навигация по сайту
- meta — мета
- node_icon — иконки к публикациям
- nodes — публикации
- nodes_moderate — модерирование нод
- orphus — проверка орфографии
- pager — постраничная навигация
- pages — статические страницы
- parser — парсер
- points — система рейтинга (на подобие хабровской кармы)
- search — поиск (простой полнотекстовый, пока без Sphinx)
- sidebar — боковая панель
- sitemap — карта сайта
- syndication — агрегация новостных поток и синдикация
- tags — метки
- templater — шаблонизатор
- twitter — интеграция с Твиттером
- upload — загрузка файлов и изображений
- user — профиль, авторизация (в том числе по openid) и регистрация
- user_groups — группы пользователей
- users — список пользователей
- video — вставка видео с популярных видео-хостингов
Да, это еще не все, сегодня на официальном сайте стартовал официальный каталог расширений, который уже заполняется активными участниками сообщества.
+ Автоматическая склейка js и сss
Представьте, если у вас 40 модулей и каждый из них имеет свои скрипты и стили, то браузер будет делать минимум 40 запросов каждый раз (за исключением кеша) для того, чтобы их подгрузить. При модульной структуре этого не избежать иначе, кроме как «склейкой» скриптов и стилей в несколько отдельных файлов, которые будут отдаваться пользователю при загрузке страницы.
Если у вас есть опыт работы с Drupal и другими движками, которые собирают скрипты и стили воедино, спросите себя — сколько раз вы нажимали на кнопку «Очистить кеш» во время разработки? При отключенном кешировании движок быстро пробегает по папкам со скриптами и стилями с помощью сверх-быстрой функции glob (да, да, нагрузка практически нулевая) и проверяет время обновления файлов. Таким образом если вы сохраняете в редакторе js или css какой-либо шестеренки или шаблона (да, со скриптами и стилями шаблонов система тоже работает), то конечные склееные файлы обновляются автоматически. После перевода сайта в продакшн можете включить кеширование в настройках, если у вас есть сомнения в скорости работы glob.
+ Сообщество
Да, нас пока немного — порядка 100 ежедневных посетителей и 10 активистов, но те, кто подключился к разработке, довольны. Самое главное, что каждый активный участник — сознательный и грамотный человек с опытом разработки.
За полгода на официальном сайте опубликовано порядка 185 топиков и 2500 комментариев. Согласитесь, неплохо, но может быть еще лучше.
Движок загружен 5500 тысяч раз, документация в PDF — 2000 раз.
± Скорость работы
Если сосредоточиться на цифрах, то они колеблются от машине к машине, но известно одно, что при установленных акселераторе PHP и memcached главная страница только что установленного движка потребляет около 1Мб памяти и генерируется за десятые доли секунды.
Конечно, если ставить движок на простой хостинг, который всегда урезан по-максимуму, то та же самая страница может отъедать 6Мб памяти (без акселератора) и грузиться вплоть до 10 секунд — все зависит от загруженности и доступных ресурсов.
Поэтому для работы движка рекомендую хотя бы простенький VPS, который в заграничных ДЦ можно арендовать дешевле отечественного хостинга.
Мои соображения на этот счет таковы — большая нагрузка может быть вызвана только большой посещаемостью, а большая посещаемость при любых раскладах означает и прибыль, и затраты, поэтому работа сайтов на более-менее достойной машине — как бы сама-собой разумеется.
± Простота освоения
Если вы уже знакомы c PHP, а тем более CodeIgniter — то быстро освоитесь с cogear, прочитав документацию (на сайте или в PDF).
Ежели вы не знаете о правах доступа к файловой системе, FTP, PHP, MySQL и других основах веб-разработки — потребуется повысить уровень знаний прежде, чем начать присылать мне письма об ошибках :-)
± Нестандартное хранение конфигов
Конфиги настроек хранятся вместе с информацией в ini-файлах в корне каждой шестеренки. С одной стороны это удобно — синтаксис ini-файлов понятен даже незнакомому с программирование человеку. C другой — неудобно, поскольку это встает на пути к мультисайтовости (см. Drupal) и по-началу будет напоминать неопытному веб-мастеру о проставлении нужных прав доступа к файлам.
Также такой вид хранения информации обязательно требует директив веб-сервер (для Apache — уже прописана в .htaccess по-умолчанию), запрещающих доступ к этим файлам извне.
Пока мне нравится так как есть, в следующей мажорной версии (2.0) движка хранение конфигов будет обеспечивать мультисайтовость, а над его удобной и грамотной реализацией еще предстоит подумать.
— CMS с расчетом на программистов
Неоднократно сталкивался с полной неграмотностью потенциальных пользователей системы в вопросах веб-разработки. Зачастую приходится в личной переписке объяснять человеку, откуда берутся те или иные простейшие ошибки, потому что если что-то сразу не запускается, человек думает, что это бага, прежде, чем удосуживается проверить системные требования, конфигурацию сервера или права доступа к файлам.
— Ошибки прошлого
Мое программирование с каждым годом и месяцем становится лучше, но есть некоторые моменты, не назвал бы их явными ошибками, скорее неточности в стиле и ведении программирования, которые встречаются в коде годичной давности. Например, ранее меня преследовало желание подать в одну функцию побольше аргументов, причем один и тот же аргумент мог быть переменной разного типа, и на входе уже штудировалось, что к чему.
Не подумайте, все работает, просто самому уже код некоторый не нравится, но его плоды используются во столь многих местах, что вносить исправления нет ни малейшего желания. Работает без ошибок — ну и ладно.
— Ранняя багливость
По-началу было очень много багов в силу того, что опыт разработки я набирал в процессе.
Самый забавный баг попался в первый же день релиза (16 июня 2009 года) — из-за пропущенного суффикса запроса (get вместо get_where), каждый логинился под аккаунтом админа. Голову сломал, пока не понял в чем дело :-) Сказалась многодневная усталость от плотного графика работы перед релизом. Да, конечно, было стыдно, но усвоил важный урок — обязательность альфа/бета/гамма-тестирования в закрытом кругу доверенных лиц.
Также в первые месяцы было выявлено немало багов, но все они были устранены благодаря помощи участников нашего сообщества.
Идеального в материальном мире не бывает, поэтому и багов при разработке в одиночку не избежать.
Сейчас баги случаются крайне редко и устраняются быстро — налажена система сборки дистрибутива для сайт из SVN.
Задачи и цели
Как было сказано выше, все синяки уже набиты, а иллюзии развеялись — картина происходящего ясна и понятна. Лишние амбиции и желание чего-то невозможного остались далеко позади.
Ради чего ведется разработка, спросите вы? Многие слышали про OpenSource, но далеко не все представляют его преимущества:
— Работа в команде. Приятно осознавать принадлежность к группе людей, занимающихся общим делом.
— Обучение. Вы можете устранить пробелы в знаниях, получив подсказки от владеющих темой участников сообщества.
— Перспектива. Посмотрите на Drupal — перспектива OpenSource во всей красе: тысячи дополнений и десятки тысяч активных участников сообщества. Плюс к всему постоянные конференции и популярность продукта даже в узком кругу разработчиков сайта Белого дома.
OpenSource также может стать и источником заработка — оказание дополнительных услуг, сервисов и поддержки. Деньги в этом деле не главное, но когда есть их приток, можно целиком и полностью сосредоточиться на развитии дела, вместо поисков заработка на хлеб насущный.
О себе
Если позволите, пару слов о себе.
В жизни есть много прекрасных и удивительных моментов и далеко не все они связаны с компьютером. К тому же монотонность одного вида деятельности медленно, но верно надоедает со временем.
Первый компьютер (ZX Spectrum) повстречал 16 лет назад и с тех пор железные друзья прочно вошли в мой быт.
Компьютер для меня прежде всего — средство самовыражения, а само оно может происходить разными способами, поэтому выбрал несколько видов деятельности у монитора:
- Веб-мастерство. Поставить кому-нибудь сайт на подходящем движке и поддерживать его.
- Веб-разработка. Мои идеи по поводу того, каким может быть движок воплощены в cogear. Он не идеален, но мне нравится таким, какой есть.
- Обзоры. Как и многие из нас, люблю новые гаджеты. По мере возможности стараюсь писать о них статьи и делать видео-обзоры. Надеюсь, что в скором времени это перерастет в серьезное русло.
- Cценарий, cъемка, монтаж и озвучка видео. Удивительный и волшебный мир мультимедиа — самый объемный и требовательный вид компьютерной деятельности, но и результат получается достойным всех ожиданий.
К чему
Для того чтобы успеть больше в этой жизни стараюсь основательно, но не до мозга костей изучить каждую интересующую меня область.
Вернемся к IT.
Валидная верстка — это здорово, но если вы еще не успели «врубиться» в нее или набрать нужного опыта — ничего страшного, все впереди. Сайты прекрасно работают и выполняют возложенные на них задачи и без этого.
Не стоит забывать про стиль кода и комментарии, но если вам удобнее писать по-своему, а не так, как пишут осуждающие вашу работу гуру, — пишите так, как вам удобнее.
Конечно, речь идет о разумных пределах. К совершенству можно стремиться, но его нельзя достичь, хотя бы потому, что в году 365 дней вместо 360-ти (как градусов в Зодиаке), а Земля движется по эллипсу, а не по кругу.
Советы
Напоследок дам несколько советов новичкам, кто мечтает о подобном виде деятельности или уже приступил к созданию собственного OpenSource-продукта.
- Назначьте цели, возьмите бумагу с ручкой и нарисуйте план-схему, чтобы разложить все по полочкам. MindMap — это современно, но рисуя на реальном листе бумаги ваш мозг лучше обработает информацию. Одно другому не мешает.
- Общайтесь, особенно если работаете в одиночку. Поймите, что любой продукт делается, прежде всего, для людей. Полной отдачи не будет, если вы разрабатываете что-либо только для себя и ни для кого больше. Если вы что-то задумали — посоветуйтесь с людьми, хотя бы здесь на Хабре. Никто не просто раскрывать всех секретов замысла, но вполне вероятно, что у кого-то уже есть подобный опыт или же данная идея может оказаться не новой.
- Двигайтесь планомерно маленькими шагами. Не ставьте себе сразу колоссальных целей. Сделали маленький, но важный шаг — отчитайтесь перед людьми. Скорее всего найдутся ошибки и пожелания. Реализовать последние при маленьких шагах проще, чем при больших. Представьте — за большой период времени сделали что-то, казалось бы, важное, а на деле — никто не будет заинтересован плодами вашего труда.
- Отбросьте амбиции. Чем раньше, тем лучше, поверьте. Если вы делаете действительно серьезный продукт лучше вообще абстрагироваться от собственного Я к коллективному.
- Не работайте без устали. Устали? Если срочности нет — отдохните, переключитесь на другой вид деятельности. Часто не всегда сразу замечаешь утомленность, поэтому следует еще научиться следить за состоянием здоровья.
- Не стройте ложных надежд. С большей процентной вероятностью они могут не сбыться. Все люди разные, если в вашем представлении что-то кажется феноменальным (привет, Стив!), то другим людям это может прийтись не по вкусу.
- Не забывайте о семье и близких. Кто как ни они поддержат и похвалят или же придут на помощь в трудную минуту, если проект не принесет желанных плодов? Не оставляйте на потом, если вас о чем-то просят. Помните, что чередование видов деятельности полезно.
- Помните о реальном мире. Величие Интернета прежде всего в способности захватывать реальность человека. Отвлекайтесь почаще, хотя бы, на бытовые нужды. Мозг не должен терять связи с реальностью, иначе вы потеряете способность к объективному мышлению.
Заключение
Надеюсь, что мой жизненный опыт, накопленный за последние годы, станет полезным для вас.
Если есть вопросы — задавайте.
Если вы пришли доказывать свое превосходство в той или иной стезе — доказывайте и уходите :-)
Сайт движка — cogear.ru
Демо — cogear.org
P.S. Чтобы прижать себя самого к стенке и ускорить темп работы над публикациями, привожу список обзоров, которые собираюсь подготовить в ближайшем будущем:
- Обзор замечательного тачпад-планшета Bamboo Pen&Touch
- Продолжение феерического обзор американского МФУ Epson Artisan 800
- Обзор МФУ Epson TX550W
- Обзор портативного FullHD камкодера Sanyo Xacti HD2000
- Обзор электронной книги PocketBook 360
- Обзор Mac Pro
- Обзор Apple Cinema Display 23"
- Статья про покупку техники на eBay с доставкой через промежуточные пункты типа Shipito.
Всегда ваш
CuamckuyKot
или
Беляев Дмитрий,
как будет угодно.



комментарии (65)