Дисклэймер: данная статья написана XTreme. Человек не зарегистрирован на Хабре, поэтому попросил статью опубликовать. Что я и делаю. Если кому-то статья понравится, контакты Михаила могу дать через ЛС.
В далеких 90-х остались времена, когда Perl был наиболее популярным языком для написания всевозможных «примочек» для популярных тогда домашних страниц. Собственно говоря, вызвано это было целым рядом факторов, но факт состоял в том, что на каждом втором сайте, где была возможность устанавливать CGI скрипты, можно было найти гостевую книгу или доску объявлений, написанную на Perl.
На смену Perl’у по популярности пришел PHP, и это было достаточно закономерно с той точки зрения, что PHP имеет намного более понятную и наглядную модель разработки. У обоих языков можно отметить свои плюсы – большую скорость выполнения и безопасность у Perl и простоту разработки и распространенность у PHP. Но данный вопрос скорее является поводом для очередного «холивара», поэтому не будем углубляться в него более подробно.
Большинство существующих сейчас систем управления содержанием сайтов написаны именно на языке PHP. Этот факт является неоспоримым, но вызван он скорее степенью распространенности языка, чем адекватностью языка задаче создания CMS.
Я несколько лет разрабатываю систему управления сайтами на языке Perl – изначально под внутренние проекты своей студии, но на данном этапе система выросла до того момента, когда можно говорить о «публичной версии».
CMS называется Taracot, и сайт проекта доступен по адресу
www.taracot.org (там же имеется демка системы). Лицензия – GPL.
Из основных особенностей системы я бы выделил:
– CMS написана на языке Perl и использует MySQL в качестве базы данных;
– система разработана для систем *NIX (Linux, FreeBSD и т.д.), но может также использоваться и на других системах, включая Windows;
– модульная структура позволяет подключить к Вашему сайту любой необходимый функционал, в основном комплекте уже представлено большое количество модулей;
– работает весьма и весьма шустро:
– достаточно комфортный и удобный пользовательский интерфейс с возможностью модификации;
– «дружественные» адреса URL;
– некоторые возможности технологии AJAX;
– безопасность (надеемся;)).
Система достаточно сложна в установке на серверы. Вызвано это прежде всего недостаточной поддержкой хостерами Perl’а – не стоят многие необходимые модули, и необходимо переписываться с администраторами на предмет их установки. В общем и целом, это – большая беда всех современных проектов.
Еще один недостаток – это плохая документация. Да, поскольку проектом на данном этапе занимаюсь я один, у меня просто физически не хватает времени написать документацию грамотную. То же самое относится и к хорошему инсталлятору.
Тем не менее, система получилась достаточно удачной как минимум в двух планах. Первый аспект – процесс обучения работе пользователей с системой достаточно прост (мне удалось научить работать с ней как минимум трех людей, не имеющих практически никакого отношения к компьютерам и Интернету); второй аспект – не слишком большая нагрузка на сервер, что позволяет использовать CMS в крупных проектах.
Я надеюсь, что моя CMS будет интересна и полезна многим, и особенно хотелось бы обратиться к сообществу Perl программистов с просьбой обратить внимание на данный проект, отметить и обсудить недостатки, а также принять, по возможности, участие в разработке.
С уважением, XTreme.
UPD: Автора статьи пригласили на Хабр, прошу любить и жаловать —
xtremespb .
комментарии (154)
Но «намного» — это очень растяжимое понятие. И зависит от железки/ОС/etc.
Проект на Ruby On Rails генерится в среднем 0.01 и ниже…
Вот такие цифры должны показывать ) а не «меньше секунды» )
1. Что значит один запрос к БД: тянем одну сущность, коллекцию, или делаем десяток джойнов?
2. Какой проект на RoR? Структура данных?
Очень эти цифры контекстнозависимы, имхо…
1. обычный запрос — что-то типа select * from news order by id desc limit 0,10 … просто для примера.
2. Не большое приложение, в котором используются 2 таблицы для организации рубрикатора… ничего сложного.
Я лишь хотел показать, что показатель «меньше секунды» это крайне расплывчато… даже на моём медленном железе… подобные штуки работают меньше десятой секунды.
Тут это бывает сплошь и рядом :)))
И я такой не один ;)
Как-то пхп для таких задач мне дико использовать :)
P.S. Мне кажется, что CMS на PHP это более разумно. Как минимум потому, что проще разработка и сопровождение (насколько я знаю, возможности ООП в PHP5 шире, чем у Perl актуальной версии).
но:
1. не все с етими возможносстями справляються
2. не все о них знают в достаточной мере
ну и может еще такое:
-. нет таких и уже популярных IDE для perl, как для php (имеется в виду Zend или PDT) с такой возможностю, как графический отладчик. естественно есть perl5db.pl, но не всем удобно работать с ним. ( ето мое имхо… )
п.с: есть Komodo IDE, но…
Я много чего перепробовал. И кучу редакторов специально заточенных под Перл, и всякие там Notepad++, и Vim + PerlSupport…
Сейчас я использую, в основном, 2 редактора – это Far Manager + Colorer, когда нужно что-то подправить или написать. Либо Eclipse + EPIC когда действительно нужно, чтобы разработка была удобной.
В таких случаях берут кэмелбук и штудируют :)
Чем не угодил родной перловский отладчик?
Сложный и неудобный
PS Правда, в Perl'e оно меняется для всех экземпляров класса что есть некоторое неудобство :(
а о каких возможностях ООП Perl текущей версии вы знаете?
ru.wikipedia.org/wiki/DJEM
ИМХО, часто полезно делать вещи нетривиальным путем. Иногда оно получается лучше.
есть несколько полезных модулей которые на «сях» написаны (работа с СУБД и датами). надесь скоро появятся нормалные pure perl реализации этих модулей
core модулей достаточно
Все везде есть… я работаю с perl'ом и проблем с наличием модулей или установкой своих не испытываю уже давно.
А плохо было бы сделать тоже самое используя скажем Catalyst? А может стоило попытаться привнести сюда немного ООП? Я не из ярых фанатов perl — но на нем можно писать совсем под другому — достаточно почитать про тот же Moose. Для начала.
# объявляем переменную, которую будем передавать процедуре перемещения my $data;Ни один транслятор или компилятор не сделает из ООП кода — машинный код сопоставимый по объему с тем же функционалом но написаным в обычной «функциональной» нотации.
И даже скорость разработки не причем, ООП это удобство и скорость разработки сложных систем, но для 80% задач это не рационально.
Извиняюсь за «холиварность» коммента.
2) вы считаете, что маленький code reuse способен дать в итоге меньший размер?
3) вы не слышали, например, про inline?
или вы намекаете на то, что perl/php+js+sql+css+html в одном файле будет работать быстрее, чем полноценная MVC?
На вторую про Муус и Каталист отвечу.
1.Catalyst не для CGI. FCGI, mod_perl, POE или что-то еще – пожалуйста, но то только на CGI, слишком уж тормозить он будет.
2.Moose. Я считаю что Moose – это круто, это реальный прорыыв в ООП. Я никогда не использовал Moose в реальных проектах. Я не планирую использовать Moose в реальных проектах, потому что меня вполне устраивает ООП в Перл 5.
А вы используете Moose?
Catalyst – не для CGI, но сейчас активно развивается Mojo. Это детище одного из авторов Каталиста. Он, кроме mod_perl'ов, FCGI и прочего прекрасно работает под CGI, за счет своей легковесности.
Я думаю, что это очень хороший каркас для любой ЦМСки.
Вот немного подробней на русском: Mojo. Велосипед или эволюция?
Сайт проекта: Mojo Web Framework
(код автора не читал)
> Вобще в перл 5 есть достаточный инструментарий, чтобы писать максимально стабильные и безопасные приложения. При условии правильного радиуса кривизны рук (!), продуманости алгоритмов… и т.д. Склоняюсь к мнению, что это не техническая проблема (написание небезопасных программ, про perl могу сказать точно), а проблема кадров
С тем, что проблема кадров, согласен, возможно простота php не очень квалифицированных разработчиков, просто я думаю неопытный perl-разработчик может допустить те же самые ошибкти, связанные например со слабой проверкой входящих данных.
в перл очень много сущностей (этим он пугает новичков и слабых духом) и даже костылей. функционал выносят в модули которые приходится явным образом импортировать. это помогает сохранить минимализм и стройность системы
в реализации багов хватает (умудрился найти рекурсию в регкспе)
«безопасность у Perl» здесь: perldoc.perl.org/perlsec.html
Кстати перловые регулярки, стали стандартом де-факто, библиотеку по регуляркам можно юзать в практически любом нужном вам приложение (си, плюсы и т.д.) не написанном на perl ;)
7 лет назад я тоже писал в одиночку CMS на Perl. Очень любил этот язык, да и сейчас уважаю. Скачал CMS, посмотрел — прямо дежа вю! В том плане, что на дворе-то 2009 год, а там всё какое-то древнее и простенькое :)
По существу, то помимо разнообразных архитектурных ограничений системы, прилично и проблем с юзабилити. Да, всё понятно, это сделано программистом-юниксоидом, в аскетичном стиле. Но дизайнер/юзабилист бы совсем не помешал, тем более мы реально не в 2000 году, когда такое ещё могло прокатить.
Критики действительно много, но я прекрасно понимаю, что человеку реально сил не хватит всё переделать, т.к. работы полно, а он один.
Из того, что сразу бросилось в глаза (вперемешку про разное):
1) Для обычного пользователя поле Groups (взятое из Unix) ни о чём не говорит ( taracot.rh1.ru/cgi-bin/taracot/admin/module.cgi?module=users&page=1&filter=&filter_oncat=&sort=0&action=add ), там должен быть список со множественным выделением. И ведь редактора групп нет вообще, т.е. даже взять их неоткуда.
2) Везде кнопки редактирования и удаления расположены впритык друг к другу — промазать очень легко
3) Delete confirmation message слишком абстрактный («Are you sure?»), никакой конкретики о том, ради чего этот вопрос
4) У иконок операций над элементами списков нет тултипов
5) Язык админки переключается только через правку config0.pm
6) Все операции проходят через промежуточную страницу, на которой написано «Operation successful.» и линк Go back. Совсем плохо.
7) изменения порядка следования элементов выполнены через гиперссылки в виде стрелок — никакого drag-drop и ajax
8) Система шаблонов — редактируются файлы в textarea. Удобства меньше, чем даже в notepad — какой смысл в таком редакторе? Там же, шаблоны общие, т.е. нет привязки к конкретному языку сайта
9) Работа с Category tree — вообще фантастика, надо видеть этот фарш из голубых стрелочек во все стороны :)
10) после добавления категорий в дерево, в выпадающем меню у контента не обновляется список, чтобы увидеть новый, нужно нажать иконку редактирования
Дальше не могу, реально слишком много ужасов :)
если ваш скрипт постом получает данные:
— на перле, вы берете готовый, кем-то написаный или сами садитесь пишите, скрипт на перле, который парсит пришедшие данные в более удобный для работы с ними вид
— на пхп, можно и самому работать с входящим потоком STDIN, но есть готвый, стандартизированный, проверенный, вшитый способ обработки вхоядщего потока, просто $_POST
перл это мега рульный язык, но это не значит что на нем удобно писать веб-интерфейсы
чесно говорю — я бы эту цмс ни под каким соусом не взял бы, это для фанатов и у кого много времени…
Кстати говоря пиэйчпи как аз из за «многое в пхп автоматизировано» считается говно язком.
Не парсит никто на перле STDIN.
CMS может быть гораздо более интересна, если автор ее оттестирует и доведет ее до правильной работы в mod_perl-окружении.
если перл Можно использовать для веб интерфейсов — это не значит что его Нужно использовать для этого? у каждого языка есть своя сфера применения и свои задачи, для чего и почему тот или иной язык создавался…
Вы думаете, что Perl и Template Toolkit плохо подходит для генерации веб интерфейсов?
Из своего опыта, могу сказать, что очень даже хорошо.
Если у меня база данных заполняется данными, добытыми перл-скриптами, то почему бы мне не использовать Перл для вывода этих данных в виде веб интерфейса? Я так и делаю.
А работало всё так:
был файл в корню, например www.site, который был пописан в .htaccess как исполняемый perl. А все ссылки были вида: /www.site/main.html, /www.site/about/index.html…
И этого было достаточно! Модули, динамические карты, шаблоны — и всё в прошлом веке! :)
Эх, было время. Как вспомню собак @_, и $0 — так сразу хочется туда вернуться ))
Я же не писал, что это супер-мега-система с отличным кодом. Это мой личный проект, и я бы хотел, чтобы к разработке данного «поделия» присоединились такие вот специалисты, как Вы. А просто поругать свою поделку я могу и сам, ибо о бОльшем количестве недостатков знаю не понаслышке:)
Хабр уже не торт?!
2. Если автор плохо(?) знает програмирование, объясните почему плохо, что он обратился на Хабр за советом/критикой?!
3. boorooom =/= автор статьи, на всякий случай. boorooom вообще не разбирается в программировании :) пока что.
2. Я уже написал почему — автор, очевидно, совсем не знает MVC, и даже более того, не отрицает этого. Писать веб-сайты как минимум без MV — имхо очень плохо.
3. «boorooom вообще не разбирается в программировании :)» заметно по "=/=". Программист скорее всего написал бы "!=" ;)
2. Вы не ответили на вопрос, а только ещё раз повторили свой тезис, который ответом на мой вопрос не является.
3. Я не скрываю, что я не программист. И никогда не говорил обратного. И ведь именно "!=" хотел сперва написать, да подумал соригинальничать. А так хотелось под «матерого программера» хотя бы в комментариях закосить ;-)
P.S. Не принимайте мои ответы слишком всерьёз, я просто помог человеку опубликоваться. К добру ли, к худу — сообщество решит.
3. Ну, я вообще тоже пошутил ;)
>> отрицает этого.
Было бы лучше, если бы автор не знал MVC и отрицал это :))
Я заметил, что часто весьма спорные/неоднозначные/даже неудачные статьи на Хабре приводят к появлению новых статей сходной тематики, на них ссылающихся.
Т.е. по сути — становятся катализатором, порождающим качественный и интересный контент. А это уже позволяет Хабру быть «тем». И это правильно, на мой сугубо не программистский взгляд. За сим — пошел спать, всех благ.
Вторая стадия — искать существующие решения и затачивать их под себя.
Третья — когда уже не пытается даже затачивать, и можно уже идти в менеджеры…
CMS — Sanitarium WebLoG
Форум — YaBB или Ikonboard.
Мое имхо, что CMS должна предполагать ее модификацию. И самое простое — это написание отдельных модулей (плагинов) у которых слабое взаимодействие с ядром. Я вообще считаю что самое главное написать костяк и сделать хороший порт для плагинов — и дело в шляпе (люди все остальное сделают сами). Ну посудите сами, что такое jQuery, например, без ее плагинов?
В любом случае, у вас потенциально может получится нечто лучшее, но у вас Очень большая конкуренция ;)
Может оффтоп, но написание своей CMS возникло потому что есть в этом потребность и потому что есть неплохая книжка
Вы это серьёзно? По мне так перл уже давно «мёртв»…
CPAN пополняется ежедневно, крупные конференции и локальные сборы перл монгеров проходят стабильно (в т.ч. и в России). Все это продолжит свое существование независимо от состояния «конкурентов».
1) существование, но не развитие.
2) перл «жив» в-основном из-за легаси-кода и «линукса».
поймите, мне от смерти перла ни горячо, ни холодно, я просто констатирую факты.
если у вас факты, доказывающие неправоту п.1 и п.2 — высказывайте, мне интересно.
По поводу п.2: это имеет место быть. Но в меньшей степени, чем в «основом». Честно говоря, мне лень отстаивать свою точку зрения. Именно потому, что мне не горячо и не холодно от этого. Вы даже можете подумать, что я увиливаю от этого, потому что мне сказать нечего)
Выход perl6, не важно когда он случится (в разумных пределах конечно), обеспечит комьюнити «жизненной силой» еще долгое время.
рубисты, кстати, точно так же говорят о «развитии» руби — мол 1.8.x недавно был, и 1.9 _пишется_, предпочитая не вспоминать, что 1.8.0 вышел уже лет 5 назад, а 2.0 в обозримом будущем пока не видно.
Относительно оптимизации текущих версий: имхо, 5ая ветка достигает (достигла?) своей точки максимума в сложности реализации. Видимо настал момент переписать все с нуля.
Это буржуйская статистика. Она мало что мне говорит. Интересно было бы увидеть по странам СНГ, возможно, кто-то знает такие ресурсы.
www.indeed.com/jobtrends?q=perl%2Cpython%2Cphp&l=&relative=1
по снг сходу ничего не помню, разве что как пример — Украина: www.developers.org.ua/salary-db/data/salary-by-year/2008/, но тут перла даже в списке нет…
www.indeed.com/jobtrends?q=perl%2Cpython%2Cphp%2Cruby&l=&relative=1
Он там всех задавил :)
Это в, принципе, хорошо. Развитие — это всегда хорошо.
www.indeed.com/jobtrends?q=ruby%2C+rails%2C+groovy%2C+grails&l=&relative=1
Гляньте живые проекты:
www.re-hash.ru/
ahu.li/
fotokost.rh1.ru — он еще делается, но зато там есть модуль фотоальбома
PS Вот за такой код и не любят Perl-разработчиков…