воскресенье, июня 15, 2008

Всякое разное: Drupal, Git, Django...

Давно я что-то не писал постов… За это время в голове много чего накопилось, теперь попытаюсь изложить.

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 есть пока баги, и тормозит он в некоторых местах… Ну, баги, надеюсь, скоро починят, а тормоза можно и стороной обойти.

7 комментариев:

  1. А вы не смотрели на py-dispatcher? Просто складывается ощущение, что он как бы заменяет собой HMS, давно написан, и используется в джанго - те сигналы отдаются с его помощью.

    ОтветитьУдалить
  2. Смотрел. Это мегаполезная вещь, но мой "велосипед" всё-таки немного про другое. У меня в нем еще есть поддержка для автоматически генерируемого контента - например, блоки типа "последние комментарии" и пр. Кроме того, результаты работы одного "перехватчика" передаются следующим по цепочке (получается как unix-pipe). Ну и еще, эта штука автоматом импортирует все модули в определенной директории (т.е. для подключения их достаточно просто положить на место).

    Вобщем, похоже, конечно... Я еще немного поэкспериментирую - вдруг что-то дельное выйдет :) А не выйдет - оставлю только генерацию блоков (просто довольно удобно получилось: чтобы добавить на сайт новый блок, надо просто добавить новый модуль).

    ОтветитьУдалить
  3. Какой git сервер используете? Или сами разворачивали?

    ОтветитьУдалить
  4. Сам развернул, благо там делов-то - запустить git-daemon.

    ОтветитьУдалить
  5. а кроме Drupal, про другие CMS что-нибудь хорошее можешь сказать?

    ОтветитьУдалить
  6. Я кроме друпала только джумлой пользовался. Она не понравилась: 1) админка "тяжелая" по трафику (наверное, можно сменить тему на что-то полегче, но по дефолту - тяжело); 2) мне не хватало гибкости для организации контента, в друпале как раз с этим всё хорошо (таксономия); 3) я так и не понял, зачем в джумле 3 разновидности модулей.

    Другими cms просто не пользовался.

    ОтветитьУдалить
  7. Анонимный9/05/2009 3:38 PM

    >система прав на основе ролей...
    Странно, что именно это Вам понравилось. Это далеко не сильное место в Друпале. Или Вы встречали системы прав без ролей?
    Продвинутые системы прав позволяют не только основываться на ролях, но и наследовать роли от других ролей, причем, есть системы, которые позволяют множественное наследование от нескольких родителей.
    Объекты, требующие авторизации тоже в серьезных системах представляют собой дерево с наследованием. Ну и конечно же - действие над объектом.

    >еще понравилась идея связей между модулями за счет хуков (hooks) - для меня новая.
    Если Вы демонстрируете, что Вы новичек в программировании, тогда зачем демонстрировать свое мнение?

    Хуки - это пример реализации событийной модели в процедурном программировании. Они стары как программирование. В ООП они известны под названиями Observer, Signals, Events...

    >питон-приложение можно добавить систему модулей, работающую "примерно как в друпале" (см. выше, про хуки)...

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

    ОтветитьУдалить