CMS

индекс
77,39

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
или
Беляев Дмитрий,
как будет угодно.
+75
17 февраля 2010, 16:51
46

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

+1
zluk #
Не вижу линка на сайт движка…
0
CuamckuyKot #
Не стал давать линк, ибо законы на Хабре сегодня строже, чем в Ватикане :-)
Все нужные линки в профиле указаны.
+2
homm #
Бред. Закон один — оформляй статьи по уму.
+1
CuamckuyKot #
Полно вам, еще совсем недавно Шух стращал меня за линки на Твиттер, которые теперь запрещены.
+2
homm #
Это как, запрещены?
0
CuamckuyKot #
Так — в топиках ссылки на Твиттер запрещены. Думаете, Шух станет врать? :-)
+1
habraname #
Шух не выдержал давления и ушёл из команды :)
0
CuamckuyKot #
Хотите сказать, получал от своих же за каждый линк на Твиттер? :-)
+1
habraname #
это у меня юмор такой.
причины выхода Шуха из команды особой тайны не составляют; снимая нездоровый ажжиотаж, он где-то писал о них
0
homm #
А можно ссылку на правила, или хотя бы на то, где он это говорил?
0
CuamckuyKot #
Не стану цитировать письмо в личку, поймите правильно.
+1
homm #
Надо излагаться конкретнее — регулярные ссылки на свой твиттер (а так же бложек, жежешку) с целью его пиара запрещены.
+3
Paykachev #
Хорошо, что вы не стали делить шестерёнки на различные группы.
В той же джумле сам чёрт ногу сломит с их системой компонентов, модулей и плагинов.
+2
CuamckuyKot #
Джумла бывает безумна и медлительна, но для некоторых сайтов-визиток подходит на ура.

Пользователи cogear просили предусмотреть вариант с пакетами шестеренок — когда несколько компонентов расположены в одной подпапке.
Иногда такой ход может быть удобно, например, чтобы быстро поднимать сайты с разным базовым функционалом.
0
Napolsky #
>> что при установленных акселераторе PHP и memcached главная страница только что установленного движка потребляет около 1Мб памяти и генерируется за десятые доли секунды.

имхо очень и очень много. при установленном акселлераторе да еще и использовании мемкешеда нужно укладываться в 0.02-0.05
0
CuamckuyKot #
Речь как раз и идет о том, что погоня за цифрами — не есть Истина. Небезызвестный oowl, который часто консультировал меня в процессе разработки, как-то сказал, что если страница формируется половину секунды — это нормально.
Не зацикливайтесь на мелочах, картина в целом важнее.
–3
Napolsky #
Дело не в истине. Конечно же, я согласен, что первоочередная задача любого инструмент (и в особенности CMS) — это удобство для программиста и конечного пользователя. Но тот факт, что

Поэтому для работы движка рекомендую хотя бы простенький VPS.
по моему очень сильно сужает потенциальную аудиторию и возможности его применения. Поэтому может стоить пересмотреть все таки вопрос производительности?

P.S.
Понятия не имею кто такой oowl… :(
0
CuamckuyKot #
Посмотрите на производительность WordPress и Drupal — она в разы ниже, но аудитория самая широкая.
oowl — это хороший человек и программист, который писал последний NNM, prostopleer и другие известные проекты.
+1
habraname #
скачаю, пожалуй, напосмотреть. если оно (кстати, что оно: цмс? цмф? фв? библиотека?) запустится с моим самобытным фреймворком, то это хорошее, годное поделие :)

кстати, почему так много модулей-частей? вы стремитесь охватить конечный функционал?
0
CuamckuyKot #
Да, но еще проще — стремился сделать все, что необходимо для моих сайтов.
+2
IamIvan #
а на 15'' мониторе ваш сайт отображается с горизонтальной прокруткой
0
CuamckuyKot #
Благодарю. На днях перенес сайдбар из подвала туда, где ему и положено было быть — не доглядел.
–2
Kumiro #
примерно 7 часов рассматривал Ваш проект. За 3 месяца не сильно изменились
+2
CuamckuyKot #
Как рассматривали, в монитор глядя? :-)
Развитие планомерное, но медленное, поскольку OpenSource — это чаще хобби, чем работа.
+2
agoodis #
Из всех хабр-подобных движков Cogear выделяется: cтабильностью разработки и простотой создания дополнений для него.

Автору (Дмитрию Беляеву) огромное спасибо за Cogear.

0
CuamckuyKot #
Всегда пожалуйста. Теперь и вы можете свои дополнения распространять через централизованный каталог.
НЛО прилетело и опубликовало эту надпись здесь
0
CuamckuyKot #
Пожалуйста. Если не сложно, скиньте в личку линк — на посмотреть.
+1
FatalRabbit #
То же поблагодарю за движок приятный, но хотел узнать по поводу будущих планов, что насчет версии 2.0, когда она примерно планируется и что будет с текущей версией, совместимость, поддержка?
0
CuamckuyKot #
Вторая версия пока отложена — занимаюсь первой.
Скорее всего данный продукт останется как есть и будет совершенствоваться, а вторая версия появится под схожим названием, допуcтим, cogears.
Конечно, если участники сообщества возьмут на себя доработку ядра и развитие первой версии, то я смогу всецело переключиться на вторую, но пока нет ни сил, ни времени.
+1
b3atb0x #
На моей памяти — это уже третий пиар пост этого движка. Молодцы!
+2
CuamckuyKot #
Это уже не столько PR, сколько взвешенный взгляд на происходящее. Спасибо!
+1
Freem #
С первых дней слежу за разработкой, понравилась структура, уж очень он походит на идеальную ИМХО :) А как удобно начинающему, и не только, разработчику начать писать свои модули. Был удивлен гибкости.

На днях мной была написана не большая шестеренка, поможет при разработке собственной шестеренки избавив от написания рутинного кода и создания структуры. т.е. создается шестеренка по оброзу и подобию болванки, а после лишнее просто удаляется. Попробуйте создать свою шестеренку — это просто :)
0
Noker #
A Database Error Occurred
Error Number: 1146
Table 'cogear_demo.users' doesn't exist
SELECT users.* FROM (users) WHERE `users`.`url_name` = 'admin'
0
CuamckuyKot #
Вы попали на тот момент, когда обновляется база из дампа.
В целях безопасности тестовый сайт сбрасывается раз в пять минут.
0
Roler #
Попробовал поставить. Может я напортачил, возможно, вообщем движок решил, что он находится по адресу .cogear.my и из-за точки не работает.
Где у вас адрес хранится? :)
В файлах вроде нету, а PHPMA у меня, похоже, отвалился, не могу посмотреть.
0
CuamckuyKot #
Посмотрите в /gears/global/global.info. Не понятно, обычно или без поддомена или с ним указывается адрес, но никак не с точкой.
0
Roler #
Спасибо, заработало, посмотрю =)
0
kmike #
У вам там правда ни одного юнит-теста не написано, или просто я плохо смотрел svn-репозиторий?
0
CuamckuyKot #
Все верно, я пока не «въехал» в кухню UNIT-тестирования. Разработчики Kohana и CodeIgniter тоже им не пользуются. Всему свое время.
+2
kmike #
Въезжайте поскорее) Юнит-тестирование — это совсем не сложно, и усилий требует не так много. Зато когда есть тесты — гораздо проще и приятнее писать код (не нужно держать весь проект целиком в голове, можно значительно меньше деталей принимать во внимание, и думать не о том, что же может новый код поломать, а о том, как лучше этот код написать), и переделки становятся не страшны. А для open-source проектов, когда подразумевается совместная работа нескольких человек, они втройне полезны. Тему это поднял из-за пункта «Ранняя багливость», т.к. тесты — это как раз и есть самый безболезненный и естественный способ побороть багливость в активно развивающемся проекте + упростить его разработку.

При этом совсем не обязательно слушать маниаков про 100% test coverage и фанатов TDD (когда тесты обязательно пишутся до кода). Просто начните их писть для разных кусков кода, которые сходу написать не можете (или пишете с ошибками), и для всех пофикшенных багов, уже будет развивать проект проще. Вместо того, чтоб самому в дебаггере отлаживать что-то 10 раз или смотреть результаты print, проще 1 раз тест небольшой написать и все — это не только быстрее, но и пользы больше в дальнейшем.

«Всему свое время» — время давно уже пришло) Это ж просто с ума сойти — держать в голове 1.5МБ кода, если захочешь поменять что-то в ядре.
0
CuamckuyKot #
Пытался читать по ним литературу, но не понял суть. Поверхностно — тест прогоняет те или иные функции с разными значениями аргументов и смотрит, получается ли ожидаемый результат. Верно?
Посоветуйте литературу.
0
kmike #
Да, верно. По сути Вы это руками и так делаете, когда отладкой занимаетесь. С нормальным инструментом для юнит-тестов по времени столько же будет занимать, или меньше.

Книга, которая меня наставила на путь истинный — даже не про тестирование как таковое, это «Рефакторинг» Мартина Фаулера. Там первые 5 глав очень помогают практичный взгляд на тестирование сформировать, проникнуться, зачем и почему тестирование может быть полезным, без догм XP и TDD (которые тоже имеют право на жизнь, конечно, но подходят не всем все же).

Сама книжка толстая, но там после 5й главы практически справочник, его читать целиком не обязательно.
0
CuamckuyKot #
Спасибо. Давно жду человека, который наставит на юнит-тестирование. Постараюсь обратиться к рекомендованной книжке в ближайшем будущем.
0
xintrea #
Юнит-тестирование не панацея. И оно мало помогает для отлавливания логических ошибок, возникающих в совокупности при взаимодействиях модулей. А особенно, когда дело касается пользовательского интерфейса (веб-интерфейса), то тут юниттестированием практически ничего проверить нельзя.
0
kmike #
Вы абсолютно правы. UI проверять часто смысла мало бывает. Шаблоны — почти вообще никогда смысла тестировать нет (разве что свой шаблонизатор пишешь). Время, потраченное на тестирование шаблонов, можно и более полезно потратить. Поэтому всегда полезно понимать, что стоит тестировать, а что не стоит.

И в книжке Фаулера в этом смысле все очень здраво написано — он как раз против того, чтобы писать тесты ради тестов, он говорит, что даже минимальный набор тестов может принести большую пользу, а вот попытка написать тесты для всего-всего — наоборот, может привести к тому, что то, что было необходимо протестировать, останется непротестированным.

Интерфейс, когда нужно, проверяют функциональными тестами, там другие цели и другие инструменты. Ошибки, возникающие в совокупности взаимодействий модулей, отлавливают не юнит-тестами, а интеграционными тестами — умное слово, а суть-то простая. Можно ограничиться, например, тем, что все страницы прогнать на наличие того, что они exception'ов не выкидывают, это уже позволит избежать многих глупых ошибок и выявлять проблемы на ранней стадии.

В нормально спроектированной системе UI отделен от логики, и вот логику, стоящую за UI, в большинстве случаев имеет смысл покрыть юнит-тестами. А вот если логика перемешана с UI и ее не представляется возможным протестировать, то это уже знак того, что что-то тут не чисто.
0
sunnybear #
проблема не в скорости работы glob, а во времени доступа к файлу. Можно с тем же успехом обойтись вообще без glob — клеить на лету только то, что в HTML есть. На шареды не вытянут.
0
CuamckuyKot #
Если клеить на лету из HTML — будет не ясно, что обновилось, соответственно, автоматики не будет. Галочка «Включить кеш» — выход из ситуации на работающем сайте в моем случае.
0
sunnybear #
что обновилось — смотрим по mtime. Автоматика работает.
0
CuamckuyKot #
Вам потребуется пропарсить HTML-код, заменить web-пути на пути в файловой системе и уже после этого обойти все файлы, заменить код в выдаче на склееные файлы.
Как показывает практика — glob на 40 папок выполняется за тысячные доли секунды, а состояние файлов проверяется тем же mtime.
0
sunnybear #
речь-то не об этом — при чем тут вообще glob? Наверняка Вы не сможете сказать, изменился файл или нет, не узнав mtime. А получить список файлов для склейки можно (надежнее) и без glob — все файлы из одной директории не обязаны использоваться на каждой странице: где-то одни, где-то другие.

Хотя да, если переложить заботу о логике склейки файлов на плечи веб-разработчиков, то можно добиться определенных успехов :)

И вы попробуйте glob на шареде — будете (не)приятно удивлены его скоростью :)
crc32 от строки в 1000 символов выполняется явно быстрее, чем glob. Вы еще не учли, что для 40 папок glob должен их все открыть — опять-таки время обращения к диску, а он там ну ооочень критичен.
0
CuamckuyKot #
Напоминаю, что данная процедура необходима только при внесении изменений. В другое время можно включать кеш и нужды в данной операции не будет.
О шареде речь не идет, практически любой движок работает медленней на шаредах.
Я учел открытие папок, но речь идет о тестах на дедике.
0
sunnybear #
и? резюме? CRC32 работает быстрее или медленнее, чем glob?
0
CuamckuyKot #
Резюме следующее — за полгода работы проблем с производительностью не замечено. При разработке разница не будет заметна, а при выводе в продакшн можно фичу отключить кешированием. Нет смысла сравнивать производительность CRC32 и glob, поскольку у них задачи разные.
0
CuamckuyKot #
Понял, вы хотите предложить интеграцию с Web Optimizer? :-)
0
sunnybear #
Да нет, зачем нам интеграция? WEBO Site SPeedUp работает на тысяче сайтов, и заточен на реально высокую производительность, а не на синтетические тесты на dedicated-серверах.

На шареде очень много проблем с производительностью, и не всегда кэширование помогает с ними справиться. Попробуйте оптимизировать cogear на паре виртуальных хостингов — получите бесценный опыт :)
0
CuamckuyKot #
Николай, авторитет вашего проекта не оставляет сомнений, спорить не буду. Выбранного мной способа хватает на пару тысяч уников в сутки. Если появится необходимость — обязательно вспомню ваши слова и выпущу дополнительный компонент или же встрою WEBO Site Speed Up, ведь он работает и с cogear. Спасибо за советы.

С удовольствием читал вашу книгу, спасибо за труд.
+1
sunnybear #
да не за что. Мое дело маленькое — указать на возможные проблемы с производительностью. Как к этому относиться — это уже дело каждого конкретного разработчика :)
+2
Xobb #
Блин, некоторое время назад читал о вашей работе над cogear, тогда еще откоментил что проект бесплатный, но не свободный.

Тепер снимаю шапку, вы молодец, спасибо за продукт.
0
CuamckuyKot #
Спасибо и вам. Стараюсь по мере возможности.
+1
snnwolf #
небольшая ошибочка
> Помните, что чередование видЫ деятельности полезно.
0
CuamckuyKot #
Спасибо, исправил.
0
BSDaemon #
Прочитал статью.
1) Было приятно прочитать.
2) Вы — молодец! Здорово, что можете заниматься любимым делом, и к тому же делиться плодами с окружающими.
0
Nepofigist #
Система очень понравилась.
Собираюсь делать социальную сеть, уже решил: буду ее запускать на Вашем движке.
0
CuamckuyKot #
Спасибо. Буду рад видеть вас в числе разработчиков и участников сообщества.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.