Давно я что-то не писал постов… За это время в голове много чего накопилось, теперь попытаюсь изложить.
Drupal
Вот, за прошедшее время успел более-менее поглубже изучить эту штуку. Кто не слышал - это CMS, а точнее, CMF (content management framework) такой. Я когда-то давно на него смотрел и даже сайты на нем делал, но по принципу "поставил движок, настроил - сдал". Недавно вот чуть посложнее сайты делать пришлось, даже модули к нему писал. Вобщем, drupal хоть и на PHP, но мне понравился ;) Чем именно:
-
посмотрел код - на редкость для php-приложений чистый и понятный;
-
система прав на основе ролей;
-
куча модулей, под каждую задачу, прямо unix-way;
-
эти модули на удивление хорошо дружат меджу собой, конфликтов почти нет;
-
еще понравилась идея связей между модулями за счет хуков (hooks) - для меня новая. Хук - это просто функция, вызов которой можно перехватить из другого модуля и сделать в дополнение что-то своё. Каждый модуль может создавать хуки и перехватывать существующие. В результате получается, что архитектура приложения (порядок связей между модулями) может меняться при изменении набора модулей.
-
удивительно вменяемое русскоязычное сообщество на drupal.ru.
Конечно, есть у него и проблемы - например, с производительностью не всегда всё отлично, в основном из-за того, что большое количество модулей порождают большое количество запросов к БД.
Git
До недавнего времени я весь свой программный код хранил в svn. Впрочем, это в основном были совсем небольшие программки. А тут появился на горизонте некий более крупный проект, который предполагалось разрабатывать командой (по крайней мере - не в одиночку). И именно в этот момент появился пост Ивана Сагалаева - жалоба на проблемы с merge в subversion. Мне почему-то сразу расхотелось использовать svn :) Стал смотреть на альтернативы, благо их довольно много. Git приглянулся во-первых своей распределенностью со всеми вытекающими, во-вторых - это мейнстрим (среди dvcs), что ни говори ;). Вобщем, стал изучать. Больше всего понравилось:
-
репозиторий создается фактически одной командой (git init), второй командой в него добавляются файлы (git add .), ну и третьей делается первый коммит (git commit). Получается быстрее, чем с subversion, так что имеет смысл использовать его даже для программы из пары файликов или конфига.
-
собственно факт распределенности, git получается удобнее использовать, когда команда разбросана по городу и не у всех не всегда даже интернет есть.
-
графическая морда, gitk, хорошо показывает ветви, коммиты и всё остальное.
Вобщем, перевел я весь свой код на git, благо тулза для импорта из svn в git есть (git-svn, так и называется).
Django
Эту вещь я когда-то уже тоже изучал, и даже что-то писал, но уже даже не помню, что писал :) Блог, кажется, по традиции :) Сейчас вот изучаю заново (в придачу, с предыдущего подхода многое в django успело поменяться). Кто еще про django не слышал (а тут такие есть? :D) - это фреймворк (т.е., по большому счету, набор библиотек + определенный способ их использования) для создания веб-приложений на python.
Сейчас активно пишу на django что-то типа groupware, назвал пока незамысловато - Projects (надо будет еще придумать подходящее название). Описание тут: http://iportnov.ru/projects/projects.
Еще до этой штуки стал писать библиотечку, которую пока назвал HMS (hooks modules system). Это, собственно, эксперимент: питоновский пакет, с помощью которого в любое питон-приложение можно добавить систему модулей, работающую "примерно как в друпале" (см. выше, про хуки). По-моему, оно довольно красиво смотрится в связке с Django. Сейчас у меня эта HMS входит в состав Projects, хотя пока и мало используется там (я пока что в ядре не все функции написал, не до модулей пока).
Еще в комплекте с Projects у меня есть pygit - веб-интерфейс к Git, написанный на django. При желании его можно почти безболезненно выдернуть из Projects и использовать в других проектах. Для связи с Git использует пакет GitPython. Вот только в этом gitpython есть пока баги, и тормозит он в некоторых местах… Ну, баги, надеюсь, скоро починят, а тормоза можно и стороной обойти.
А вы не смотрели на py-dispatcher? Просто складывается ощущение, что он как бы заменяет собой HMS, давно написан, и используется в джанго - те сигналы отдаются с его помощью.
ОтветитьУдалитьСмотрел. Это мегаполезная вещь, но мой "велосипед" всё-таки немного про другое. У меня в нем еще есть поддержка для автоматически генерируемого контента - например, блоки типа "последние комментарии" и пр. Кроме того, результаты работы одного "перехватчика" передаются следующим по цепочке (получается как unix-pipe). Ну и еще, эта штука автоматом импортирует все модули в определенной директории (т.е. для подключения их достаточно просто положить на место).
ОтветитьУдалитьВобщем, похоже, конечно... Я еще немного поэкспериментирую - вдруг что-то дельное выйдет :) А не выйдет - оставлю только генерацию блоков (просто довольно удобно получилось: чтобы добавить на сайт новый блок, надо просто добавить новый модуль).
Какой git сервер используете? Или сами разворачивали?
ОтветитьУдалитьСам развернул, благо там делов-то - запустить git-daemon.
ОтветитьУдалитьа кроме Drupal, про другие CMS что-нибудь хорошее можешь сказать?
ОтветитьУдалитьЯ кроме друпала только джумлой пользовался. Она не понравилась: 1) админка "тяжелая" по трафику (наверное, можно сменить тему на что-то полегче, но по дефолту - тяжело); 2) мне не хватало гибкости для организации контента, в друпале как раз с этим всё хорошо (таксономия); 3) я так и не понял, зачем в джумле 3 разновидности модулей.
ОтветитьУдалитьДругими cms просто не пользовался.
>система прав на основе ролей...
ОтветитьУдалитьСтранно, что именно это Вам понравилось. Это далеко не сильное место в Друпале. Или Вы встречали системы прав без ролей?
Продвинутые системы прав позволяют не только основываться на ролях, но и наследовать роли от других ролей, причем, есть системы, которые позволяют множественное наследование от нескольких родителей.
Объекты, требующие авторизации тоже в серьезных системах представляют собой дерево с наследованием. Ну и конечно же - действие над объектом.
>еще понравилась идея связей между модулями за счет хуков (hooks) - для меня новая.
Если Вы демонстрируете, что Вы новичек в программировании, тогда зачем демонстрировать свое мнение?
Хуки - это пример реализации событийной модели в процедурном программировании. Они стары как программирование. В ООП они известны под названиями Observer, Signals, Events...
>питон-приложение можно добавить систему модулей, работающую "примерно как в друпале" (см. выше, про хуки)...
В джанго уже давно реализована событийная модель на паттерне Signals, - зачем ей Ваши хуки... В ман смотрите иногда...