- Names:
-
Ilya Belikin, Carl Mäsak, Stephen Weeks
- Email:
-
Ilya Belikin ([hidden email]), Carl Mäsak ([hidden email]), Stephen Weeks ([hidden email])
- Amount Requested:
-
$3000.
- Ilya: 1320$, for 12h/week.
- Carl: 1100$, for 10h/week.
- Stephen: 550$, for 5h/week.
- Carl: 1100$, for 10h/week.
Synopsis
Two years ago, Juerd proposed the Web.pm module for Perl 6. Meant to functionally replace Perl 5's CGI.pm, it is a revamping of the fundamentals in order to better serve today's web development needs.
Apart from implementing a working web development toolkit, we intend to integrate templating as a desirable default, make sessions and sticky form values (as described in Juerd's email) work, and organize the framework according to the Model-View-Controller (MVC) pattern and the REST architecture.
The structure of the Web framework will be modular, and a web application writer can choose the parts that make sense for the particular application developed. As the user's application matures, more high-level modules can be swapped in to combat the increasing complexity.
We intend to develop Web.pm in the open, seeking frequent input from people on #perl6 and #parrot, and from the mailing lists perl6-compiler, perl6-users and perl6-language.
Benefits to the Perl Community
Having a simple, well thought-out web development toolkit can be an enormous benefit to Perl 6 and its growing developer community. There is good opportunity at this time to coordinate an effort to create such a toolkit. A web toolkit will increase Rakudo visibility, and bring more people to try Perl 6 programming.
Applications like November show that it is possible to create a Perl 6 web application today, but that much convenience functionality has to be reinvented in the web application itself. The fact that a bridge between Rakudo and Perl 5/CPAN does not exist at this point is an obstacle, but also an opportunity to sit down and think about the parts that we want to improve or remake rather than just inherit.
As the past six months of November clearly show, development of real-world applications is one of the most effective ways to generate feedback to the Rakudo development team, and to help focus on bug fixes and features needed for everyday tasks.
Deliverables
- HTTP::Request, HTTP::Response and Web.pm modules that run on the
latest release of Rakudo.
- A URI module based on RFC 3986, using Perl 6 grammars.
- Web::Tags module for (X)HTML tags generation.
- Dispatcher and Routines (with REST support) modules for better controllers code organization.
- A simple Perl6-ish templater as a replacement for HTML::Template.
- A slightly more advanced XML-aware templating system, similar to Python's Genshi.
- Three web applications that make use of the Web module. (On the assumption that having three clients to an API gives enough clues about the different needs clients might have.) The first web application will most likely be November, the wiki, and the second Maya, a blogging engine. The third will be a proof-of-concept pastebin for Perl 6 code with color coding.
- A tutorial clearly showing the strengths of the Web module framework, why/when it should be used, and how to get started using it.
- A URI module based on RFC 3986, using Perl 6 grammars.
The modules URI, HTML::Template, and Dispatcher already exist in a working alpha state within the November repository, and are being used to run the wiki engine. Ilya has begun developing the blogging engine Maya.
Ilya will post weekly about progress in Russian on the perl6.ru blog. Carl will blog weekly on use.perl.org. Stephen will blog weekly.
Project Details
The following stages can be identified in providing the above deliverables:
- Specifying the basics of a Web framework organized by MVC
pattern and following REST principles.
- Creating a minimal Web, HTTP, Template and Routines modules that can host a minimal "hello world" web application with a simple form, but following the specification.
- Adapting November to run on top of the new Web framework. Much of the infrastructural web code currently residing in November will thereby be the responsibility of the framework instead.
- Setting up Maya to use the framework as well. Deploying and start to use it for perl6-blog us soon as possible.
- Implementing the framework and applications features possible within the current limits of Rakudo.
- Condensing the above experience into a tutorial.
- Creating a minimal Web, HTTP, Template and Routines modules that can host a minimal "hello world" web application with a simple form, but following the specification.
Inch-stones
- Specifying framework basics: 1 week.
- Creating a minimal Web framework: 2 weeks.
- Changing November to run on top of the framework: 1 weeks.
- Setting up Maya to use the framework: 1 week.
- Setting up a proof-of-concept pastebin: 1 week.
- Implementing the features possible within the current limits of Rakudo: 4 weeks.
- Condensing the above experience into a tutorial: 1 week.
- Creating a minimal Web framework: 2 weeks.
Project Schedule
- Specifying framework basics: 1 week.
- Creating a minimal Web framework: 2 weeks.
- Changing November to run on top of the framework: 1 weeks.
- Setting up Maya to use the framework: 1 week.
- Setting up a third web application: 1 week.
- Implementing the features possible within the current limits of Rakudo: 4 weeks.
- Condensing the above experience into a tutorial: 1 week.
- Creating a minimal Web framework: 2 weeks.
We can start in February.
Bios
Ilya Belikin has been working with web technologies since 2000, functioning as an all-round project manager, CSS and HTML coder. A Perl developer since 2006, he founded a small web-developing company 2007. He uses Catalyst, TT, and DBIx::Class in his daily work. He is a productive November committer (280+ commits). He sends Rakudo and Parrot bug reports. He is one of the authors of perl6.ru.
Carl Mäsak has been using Perl since 2002, and has been an avid Pugs participant since 2005. He has committed various tests, documentation files and the occasional Haskell patch, totalling over 100 commits. He is a Parrot committer, helping the main Rakudo developers with bug tickets (over 200 so far), patches and minor features. He is one of the co-founders of the November project.
Stephen Weeks has been using Perl since 2004 for web development and sysadmin tasks. He has been a Parrot core developer since Feb 2008, implementing many features in Rakudo.
OK to publish this proposal?
Yes.
Ah, fix after Deliverables, plz!
What the heck :-S in the way...
I very much welcome this proposal for two major reasons. The first is that Perl 6 really needs libraries as Rakudo is becoming usable, and the second is that it also needs applications.
The experience so far has shown that the test suite wasn't enough to ensure that changes in the compiler don't break things; real world applications like November (and hopefully this upcoming web framework) usually reveal quite different bugs.
I have no doubt about the qualification of Ilya, Carl and Stephen. All three of them have shown impressive Perl 6 work before.
This sounds like a very useful proposal. This could be the start of more people taking up Perl 6 for real application.
My biggest complaint is that it seems to be building an opinionated framework. Something with a name like Web.pm should do just a few Web related things and nothing else. Dispatching is very framework specific and each framework does it differently, so don't build it into something low level like Web.pm
I'm not against a web framework in Perl6 and it can certainly use Web.pm, URI.pm, HTML::Template, etc modules created as part of this project. But it seems like it should be a separate project and have this one just focus on some web related modules that would make frameworks possible.
I concur the comment above. Web.pm is a very precious name - it should not be appriopriated by just one framework - but rather reserved for the very basic infrastructure that would be reused by many competing frameworks. On the other hand I am somehow sure that this amount of man-weeks will not be enough for creating a full blown, even very basic, framework.
I agree fully with mpeters and zbigniew.
I support this grant, but with a few caveats.
First why I support it :
* Being able to implement simple web applications with perl 6 would be a major step in making perl 6 useful.
* On a personal note, this would probably be enough for me to start playing with it for simple sites.
* The chance to start afresh with a modern web interface that's progressed since the early 90s birth of CGI would be a big step forward.
The caveats :
* Less is more! A web interface framework in perl should be unopinionated, minimal and anything that you would want to customise should be an optional extra.
* One of the problems with CGI (apart from being kind of frozen after becoming part of Core perl) is that it includes a ton of stuff that's not used, and worryingly this project seems to recreate that : creating HTML Tags isn't the job of the cgi interface, neither is worrying about sessions, etc.
* In my humble opinion it would be much wiser to focus on what frameworks like Catalyst or whatever need to build on when porting to