Previous Entry Share Next Entry
Web.pm first week
ihrd
Я, Carl и Stephen приступили к работе над грантом. Наша цель -- создать легковесный web framework на Perl6 под Rakudo. Рабочее название -- Web.pm, но многие считают его слишком общим и расплывчатым. Поэтому в ходе работы мы постараемся найти более подходящее. Я думаю мы сможем подобрать название, когда уже будет что называть.

Несмотря на наличие примерного плана разработки, как он описан в нашей заявке [1], первые же дни работы ввергли меня в замешательство. Слишком много вариантов реализации, идей и мнений. Наша IRC канал и рассылка стали необычно активными [2], Daniel Ruoso предложил свой вариант диспатчера [3].

Чтобы справится с хаосом в голове, я постарался выделить главное для себя, и пришел к первому тезису:

-- Максимально использовать стандартные инструменты Perl6.

Perl6 "большой" и богатый язык. Создавая фреймворк мы должны минимизировать число надстроек. Код должен быть организован с использованием стандартных классов, модулей, ролей. Не нужно много специфичной магии. Эта базовая мысль помогла мне выбрать позицию по активно обсуждаемому диспатчеру:

-- Использовать Perl6 MMD (Milti Methods Dispatcher[4]) для диспетчеризации запросов.

Moritz Lenz поддержал эту мысль и предложил свой, простой вариант реализации. Совмещение этой мысли с архитектурой REST [5] и влиянием Waves [6] навела меня на организацию код в виде ресурсов. Где ресурс это класс, а его методы, это собственно методы HTTP:

class Topic {
    multi method GET () { ... } # index
    multi method GET (Int $id) { ... } #show Topic by id
    multi method PUT (Int $id, %data) { ... } # update Topic by id
    multi method POST (%data) { ... } # create new Topic
...
}


Роль диспатчера при таком подходе -- выбрать верный ресурс для вызова метода, остальное делает MMD. Развивая эту мысль я делаю набросок, который назвал Forest, посмотрим, что из этого получится.

Одна из первых мыслей высказанных Ruoso -- взять идею :Chained из Catalyst [7], и построить всю диспетчеризацию как расширенную систему цепочек. Мне нравится эта идея и в Forest я хочу реализовать возможность связывания ресурсов в цепочку.

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

Моя первая неделя работы над грантом была омрачена простудой. Эффективно поработать удалось совсем не много и мне пришлось сделать перерыв. Надеюсь продолжить работу с середины следующей недели.

(С удивлением обнаружил, что доступ к perl6.ru для меня закрыт. Поэтому посты по теме пока пишу сюда.)

1: http://github.com/masak/web/blob/b5b6bf6980f027fdfab217ab2daf3a1b08c80e26/doc/GRANT-PROPOSAL.pod
2: используем IRC канал #november-wiki на irc.freenode.org и рассылку november-wiki@googlegroups.com
3: смотрите логи IRC начиная с http://irclog.perlgeek.de/november-wiki/2009-03-09 и переписку в рассылке
4: http://feather.perl6.nl/syn/S12.html
5: http://en.wikipedia.org/wiki/Representational_State_Transfer
6: http://rubywaves.com/
7: http://www.catalystframework.org/
Tags: ,

  • 1
Круто ! Круто !
У меня есть просьб: а давайте плкгинную систему вы сделаете на столько гибкую, чтобы без особых проблни иожно было сделать авторизацию по опенайди плпгином ?
ну и конечно же хочется разные рендереры, в количестве. Вот у меня сейчас кажется получится зарелизить xslt.

Ещё вопрос: Треды ? fastcgi ? http ?

> У меня есть просьб: а давайте плкгинную систему вы сделаете на столько гибкую, чтобы без особых проблни иожно было сделать авторизацию по опенайди плпгином ?

Постараемся :) Я бы даже с удовольствием попробовал родить его сам для Maya.

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

все что сможем сделаем. Но у нас совсем не вагон времени, как может показатся. Писать _рабочий_ код под Rakudo все еще очень долгое дело. Я только пока черновичек маленький набрасывал запостил два мерзеньких бага. А сейчас вот отлавливал банальные "Use of unitialized value" в November в течении получаса. Потому что где это случилось Rakudo говорить все еще не научился :(

> Ещё вопрос: Треды ?
А?!
В тредах я лох, честно говоря.

> fastcgi ?
FastCGI хочу, но кто бы дал нам хоть примитивное IO, а? Мы только файлики читать можем, да STDIN, STDOUT юзать ничего больше.

> http ?
хочется сделать целиком и полностью, вон Carl портирует Rack во всю.

IO я сделаю. В следующие выходные. Так что и fastcgi и http можно будет сделать.

УРА! Хочу IO! :)

Ну я за вчера чуток отрессюректил io/socket_unix.c. Осталось его завернуть в Socket.pmc и начну проталкивать в Parrot.

Да, за всякие opendir/readdir я не брался ещё. Надо?

. deepone Expand
. bacek Expand
. deepone Expand
. bacek Expand
. mcfist Expand
. deepone Expand
. deepone Expand
. bacek Expand
. bacek Expand
. deepone Expand
. bacek Expand
. deepone Expand
. bacek Expand
. deepone Expand
. bacek Expand
. ihrd Expand
. bacek Expand
. deepone Expand
. ihrd Expand
. bacek Expand
я как раз сейчас тоже натыкаюсь на ио, не очень приятно, но мне сильно легче, rakudo я оставил на сладкое, сейчас просто присматриваю за ним, чтобы при работе вплотную синтаксис не меня не оттолкнул =)
я сейчас пишу на голом пире, xml парсер и xslt процессор к нему.
Парсер уже ... проходит тесты, я довольно.

Так вот, а мысль следующая:
вот есть у вас аппликейшен сервер на пэйроте (я недавно узнал как оно правильно произносится).
Так вот он есть в виде одного процесса.
У него есть один тред мудьтиплексный http или fastcgi сервер, который запросы получает, и тут же пробрасывает их работающим тредам. [треды сейчас исследую, общее вчепятление - не работают =(]
Так вот, на получсение запроса и посыл ответа никакого проца не надо, всё в одном потоке сделать можно, а мысль в том, что таких потоков внутри можно поднять разных, в конфигурации с fastcgi - Engine::FastCGI, при работе с http - Engine::HTTP, и чтоб они отдавали запрос в одинаковом виде в диспатчер, ну диспатчер у вас простенький, MRO говорят во всю работает.

Так вот, на этом мы не заканчиваем мысль, так же как и движки для запросов, в системе должен крутится логгер и общее хранилище. Логгеров пару разных классов, и хранилищей тоже, с хранилищем вообще всё просто, большой хэш и мьютекс на него.

И того, получается некая система, в которой крутятся пользовательские воркеры, и общаются через очередь с пользователем через http, с логами через логгер, друг с другом через хранилище, или через очередь задач. Кста, а вот евенты кажись работают.

И мы получаем фреймворк мечты, в который не составит труда вставить jabber транспорт, и диспатчить его сообщения стандартным способом.

ЗЫ, я клоню к тому, что я точно захочу в это вставить видео маршрутизатор для видео чатов, уже где то год об этом мечтаю =)

Как ты красиво Каталист расписал :)

Каталист собака без взаимодействия между воркерами и вообщем то только для http. =(

А так - да =)

http://search.cpan.org/~druoso/Catalyst-Engine-XMPP2-0.3/lib/Catalyst/Engine/XMPP2.pm

Взаимодействие между воркерами делается одной строчкой в App.pm: our %shared : shared;

Гы ..... Нада попробовать, вечерком ...
А то я только http://search.cpan.org/~nperez/POE-Component-Jabber-3.00/lib/POE/Component/Jabber.pm
Пробовал, понравилось. Но нет потоков.

прошу прощения, что встреваю

>вот есть у вас аппликейшен сервер на пэйроте (я недавно узнал как оно правильно произносится).

parrot [pærət] все-таки не пэйрот читается


Re: прошу прощения, что встреваю


омг, вы что -- я про разговоры о перле, парроте, ракуде и прочем только засыпать могу )
я так, чисто с позиций фонетики английского языка.

> я сейчас пишу на голом пире, xml парсер и xslt процессор к нему.
> Парсер уже ... проходит тесты, я довольно

Carl хочет реализовать шаблонизатор тип Genshi, я думаю ему может пригодится XML-прасер, где бы на него посмотреть?

Сча тестю, через неделю тогда отдам.

  • 1
?

Log in

No account? Create an account