<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><description /><title>Sebastian Riedel about Perl and the Web</title><generator>Tumblr (3.0; @kraih)</generator><link>http://blog.kraih.com/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/kraih" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="kraih" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://tumblr.superfeedr.com/" /><item><title>Mojolicious 4.0 released: Perl real-time web framework</title><description>&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/6a8c50ca57ba262ef913374e974b04a5/tumblr_inline_mmumibdCO71qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;It fills me with great joy to announce our classiest release yet, &lt;a href="http://mojolicio.us"&gt;Mojolicious&lt;/a&gt; 4.0 (Top Hat).&lt;/p&gt;
&lt;p&gt;This is the first major release for the newest member of our core team, please welcome &lt;a href="https://twitter.com/joelaberger"&gt;Dr. Joel Berger&lt;/a&gt;, he was responsible for many of the new features. It has only been 11 months since our &lt;a href="http://blog.kraih.com/post/43199244554/mojolicious-3-0-released-perl-real-time-web-framework"&gt;3.0 release&lt;/a&gt; and the new development process is working out very well for us so far. The community keeps growing fast, we&amp;#8217;ve now been &lt;a href="https://github.com/kraih/mojo"&gt;starred&lt;/a&gt; almost 900 times on GitHub and the IRC channel regularly reaches more than 150 visitors, thanks everyone!&lt;/p&gt;
&lt;p&gt;While the main focus of this release has been on the removal of legacy APIs, there are also quite a few new features, here are the highlights:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Content generators:&lt;/strong&gt; &amp;#8220;json&amp;#8221; and &amp;#8220;form&amp;#8221; generators are built right in. (&lt;a href="http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook#Content_generators"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JSON WebSocket messages:&lt;/strong&gt; Native serialization and deserialization support. (&lt;a href="http://mojolicio.us/perldoc/Mojolicious/Lite#WebSockets"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JSON WebSocket tests:&lt;/strong&gt; Just as easy to use as their HTTP equivalents. (&lt;a href="http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook#Testing_WebSocket_web_services"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Event synchronization:&lt;/strong&gt; Avoid callback spaghetti with &lt;a href="http://mojolicio.us/perldoc/Mojo/IOLoop/Delay"&gt;delays&lt;/a&gt;. (&lt;a href="http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook#Backend_web_services"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scalability:&lt;/strong&gt; The event loop got a lot better at managing more than 10k concurrent connections. (&lt;a href="https://gist.github.com/kraih/5551292"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Smooth restarting:&lt;/strong&gt; The &lt;a href="http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook#Morbo"&gt;Morbo&lt;/a&gt; development web server does not have any noticeable downtime while restarting anymore.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hooks:&lt;/strong&gt; The framework got more extensible with new &lt;a href="http://mojolicio.us/perldoc/Mojolicious#hook"&gt;hooks&lt;/a&gt;. (&lt;a href="http://mojolicio.us/perldoc/Mojolicious/Guides/Rendering#Post-processing_dynamic_content"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GZip:&lt;/strong&gt; Compression is now transparently supported by the user agent.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTML5 forms:&lt;/strong&gt; Tag helpers have been added for many of the new form elements. (&lt;a href="http://mojolicio.us/perldoc/Mojolicious/Plugin/TagHelpers#email_field"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Session expiration:&lt;/strong&gt; Can now be controlled with a relative value that persists within the session. (&lt;a href="http://mojolicio.us/perldoc/Mojolicious/Guides/Growing#State_keeping"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GET/POST parameters:&lt;/strong&gt; Retrieve multiple values at once with the much more secure multi name form. (&lt;a href="http://mojolicio.us/perldoc/Mojolicious/Controller#param"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JSON Pointers:&lt;/strong&gt; Now fully &lt;a href="http://tools.ietf.org/html/rfc6901"&gt;RFC 6901&lt;/a&gt; compliant. (&lt;a href="http://mojolicio.us/perldoc/Test/Mojo#json_message_is"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monotonic clock support:&lt;/strong&gt; All built-in web servers are now very resilient to time jumps.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;And as usual there is a lot more to discover, see &lt;a href="https://github.com/kraih/mojo/blob/v4.0/Changes"&gt;Changes&lt;/a&gt; on GitHub for the full list of improvements.&lt;/p&gt;
&lt;p&gt;Have fun!&lt;/p&gt;</description><link>http://blog.kraih.com/post/50517069291</link><guid>http://blog.kraih.com/post/50517069291</guid><pubDate>Wed, 15 May 2013 22:29:00 +0200</pubDate></item><item><title>Mangolicious</title><description>&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/d0904f036be355c756f5989dd7f63a06/tumblr_inline_miannilFxu1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m very happy to announce the first alpha release of &lt;a href="https://github.com/kraih/mango"&gt;Mango&lt;/a&gt;, a new pure-Perl non-blocking I/O &lt;a href="http://www.mongodb.org/"&gt;MongoDB&lt;/a&gt; client, and the latest &lt;a href="http://mojolicio.us/"&gt;Mojolicious&lt;/a&gt; spin-off project.&lt;/p&gt;
&lt;p&gt;If you&amp;#8217;ve ever worked with the official MongoDB driver for Perl, you&amp;#8217;re probably well aware of its many shortcomings, so i&amp;#8217;m not gonna ramble on about it&amp;#8230; it&amp;#8217;s basically the only driver i could find that still defaults to unsafe writes.&lt;/p&gt;
&lt;p&gt;While MongoDB itself can be a bit quirky as well, it is also a hell of a lot of fun to work with, especially for rapid prototyping HTML5 web applications. Now that real-time web technologies such as &lt;a href="http://en.wikipedia.org/wiki/WebSocket"&gt;WebSockets&lt;/a&gt; are becoming more and more popular, there is a growing demand for versatile non-blocking datastores that work well with event loops. So Mango has been designed from the ground up with the same hybrid architecture as the popular &lt;a href="http://mojolicio.us/perldoc/Mojo/UserAgent"&gt;Mojo::UserAgent&lt;/a&gt;, and both share the same general characteristics.&lt;/p&gt;
&lt;p&gt;Some of the most important features are:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Clean blocking and &lt;strong&gt;non-blocking&lt;/strong&gt; hybrid API.&lt;/li&gt;
&lt;li&gt;All operations are &lt;strong&gt;safe&lt;/strong&gt; by default, you have to work to lose data.&lt;/li&gt;
&lt;li&gt;Fast and &lt;strong&gt;simple&lt;/strong&gt; installation, no C compiler needed.&lt;/li&gt;
&lt;li&gt;Optimized for use with &lt;strong&gt;Mojolicious&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;And of course here&amp;#8217;s the obligatory example application. ;)&lt;/p&gt;
&lt;div class="gist"&gt;&lt;a href="https://gist.github.com/kraih/4756855"&gt;https://gist.github.com/kraih/4756855&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;So, what are you waiting for? Get yourself a free account over at &lt;a href="https://www.mongohq.com/"&gt;MongoHQ&lt;/a&gt; or &lt;a href="https://mongolab.com/"&gt;MongoLab&lt;/a&gt; and start writing awesome web applications.&lt;/p&gt;
&lt;p&gt;Have fun!&lt;/p&gt;</description><link>http://blog.kraih.com/post/43199352166</link><guid>http://blog.kraih.com/post/43199352166</guid><pubDate>Mon, 11 Feb 2013 13:03:00 +0100</pubDate></item><item><title>Mojolicious 3.0 released: Perl real-time web framework</title><description>&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/9458abb4f94f7f65007aafe9205491b5/tumblr_inline_mianmaUbBm1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;It fills me with great joy to announce the release of &lt;/span&gt;&lt;a href="http://mojolicio.us/"&gt;Mojolicious&lt;/a&gt;&lt;span&gt; 3.0 (Rainbow).&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;This marks the first major release for our newly formed core team, consisting of Glen Hinkle, Marcus Ramberg, Abhijit Menon-Sen and yours truly. A lot has happened during the last 8 months since our &lt;a href="http://blog.kraih.com/post/43198085334/mojolicious-2-0-released-perl-real-time-web-framework"&gt;2.0 release&lt;/a&gt;, most design decisions are now made by majority vote. The core feature set is not changing much anymore, and we are in the process of refocusing our efforts on making Mojolicious more approachable for beginners and easier to extend. The community is still growing fast, and we&amp;#8217;ve just passed &lt;a href="https://github.com/kraih/mojo"&gt;666 watchers&lt;/a&gt; on GitHub, thanks everyone! :)&lt;/p&gt;
&lt;p&gt;There are many new features, here are the highlights:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;TLS and IPv6:&lt;/strong&gt; Support for both has been greatly improved.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Commands:&lt;/strong&gt; The command system has been completely revamped. (&lt;a href="http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook#Adding_commands_to_Mojolicious"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plugins:&lt;/strong&gt; Generator and CPAN upload commands make extending Mojolicious easier than ever. (&lt;a href="http://mojolicio.us/perldoc/Mojolicious/Guides/Rendering#Helper_plugins"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Event loops:&lt;/strong&gt; Mojolicious no longer needs to control the event loop. (&lt;a href="http://blog.kraih.com/post/43198561287/mojolicious-hack-of-the-day-more-anyevent-oh-my"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content negotiation:&lt;/strong&gt; Write more RESTful web services. (&lt;a href="http://mojolicio.us/perldoc/Mojolicious/Guides/Rendering#Content_negotiation"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JSON Pointers:&lt;/strong&gt; Many features dealing with JSON got a lot smarter. (&lt;a href="http://mojolicio.us/perldoc/Test/Mojo#json_is"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flexible router:&lt;/strong&gt; Routes can now be rearranged. (&lt;a href="http://mojolicio.us/perldoc/Mojolicious/Guides/Routing#Rearranging_routes"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flexible renderer:&lt;/strong&gt; Serve templates and static files from as many DATA sections and paths as you like. (&lt;a href="http://blog.kraih.com/post/43198653667/mojolicious-hack-of-the-day-mojolyst"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Asset plugins:&lt;/strong&gt; Easily bundle assets such templates and static files with plugins. (&lt;a href="http://mojolicio.us/perldoc/Mojolicious/Guides/Rendering#Bundling_assets_with_plugins"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not found page:&lt;/strong&gt; Is now actually a &lt;a href="http://blog.kraih.com/post/43199195822/a-new-look-for-mojolicious"&gt;development tool&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hypnotoad:&lt;/strong&gt; Doesn&amp;#8217;t require a separate configuration file anymore. (&lt;a href="http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook#Hypnotoad"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WebSockets:&lt;/strong&gt; Fully &lt;a href="http://tools.ietf.org/html/rfc6455"&gt;RFC 6455&lt;/a&gt; compliant. (&lt;a href="http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook#WebSocket_web_service"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Relaxed placeholders: &lt;/strong&gt;Now look like &amp;#8220;/#foo&amp;#8221; instead of &amp;#8220;/(.foo)&amp;#8221;. (&lt;a href="http://mojolicio.us/perldoc/Mojolicious/Guides/Routing#Relaxed_placeholders"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I18N plugin:&lt;/strong&gt; Maintained as a &lt;a href="https://github.com/sharifulin/mojolicious-plugin-i18n"&gt;separate distribution&lt;/a&gt; from now on.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;And as usual there is a lot more to discover, see &lt;a href="https://github.com/kraih/mojo/blob/v3.0/Changes"&gt;Changes&lt;/a&gt; on GitHub for the full list of improvements.&lt;/p&gt;
&lt;p&gt;Have fun!&lt;/p&gt;</description><link>http://blog.kraih.com/post/43199244554</link><guid>http://blog.kraih.com/post/43199244554</guid><pubDate>Mon, 25 Jun 2012 23:44:00 +0200</pubDate></item><item><title>A new look for Mojolicious</title><description>&lt;p&gt;&lt;span&gt;You may remember &lt;/span&gt;&lt;a href="http://blog.kraih.com/post/43196937506/a-missing-raptor-and-the-mojolicious-user-experience"&gt;last year&lt;/a&gt;&lt;span&gt; when we introduced all-new not found and server error pages for &lt;/span&gt;&lt;a href="http://mojolicio.us/"&gt;Mojolicious&lt;/a&gt;&lt;span&gt;. Well, it&amp;#8217;s that time of the year again, and we&amp;#8217;ve recently been modernizing some of them. While both raptor pages still pass with flying colors, the more artsy development mode not found page only got mixed reviews. So it has been redesigned from scratch, and turned into more of a development tool, listing all the routes of your application.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img alt="image" src="http://media.tumblr.com/88c72209e52af76f6e66e7ef741cc67a/tumblr_inline_miankmOAOv1qz4rgp.png"/&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;The server error page only needed a few small refinements for both to have a similar look and feel, hope you like it.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img alt="image" src="http://media.tumblr.com/4934e0d2e4b7826b2a7f1f1fca239886/tumblr_inline_miankzulH41qz4rgp.png"/&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;Have fun!&lt;/span&gt;&lt;/p&gt;</description><link>http://blog.kraih.com/post/43199195822</link><guid>http://blog.kraih.com/post/43199195822</guid><pubDate>Thu, 21 Jun 2012 12:34:00 +0200</pubDate></item><item><title>Mojolicious in the cloud: Hello Heroku!</title><description>&lt;p&gt;A lot has changed in the world of cloud hosting since the last time i took a closer look at one of the providers. Almost all of them support Perl these days, directly or indirectly. One of the most prominent ones is &lt;a href="http://www.heroku.com/"&gt;Heroku&lt;/a&gt;, and today we are going to use their official tools and a &lt;a href="https://github.com/judofyr/perloku"&gt;custom buildpack&lt;/a&gt; to deploy a &lt;a href="http://mojolicio.us/perldoc/Mojolicious/Lite"&gt;Mojolicious::Lite&lt;/a&gt; application into the cloud.&lt;/p&gt;
&lt;p&gt;First of all you need to &lt;a href="https://api.heroku.com/signup"&gt;sign up&lt;/a&gt; for a free account and install the &lt;a href="https://toolbelt.herokuapp.com/"&gt;Heroku Toolbelt&lt;/a&gt;, the &lt;em&gt;heroku&lt;/em&gt; command line client will be available afterwards and take care of the rest.&lt;/p&gt;
&lt;div class="gist"&gt;&lt;a href="https://gist.github.com/kraih/2899489"&gt;https://gist.github.com/kraih/2899489&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;Only three files are required to make an application deployable to Heroku, the application script itself, a &amp;#8220;Makefile.PL&amp;#8221; containing a list of CPAN dependencies, and an executable &amp;#8220;Perloku&amp;#8221; script telling Heroku how to start the &lt;/span&gt;&lt;a href="http://mojolicio.us/"&gt;Mojolicious&lt;/a&gt;&lt;span&gt; web server.&lt;/span&gt;&lt;/p&gt;
&lt;div class="gist"&gt;&lt;a href="https://gist.github.com/kraih/2899522"&gt;https://gist.github.com/kraih/2899522&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;For our little experiment we will only be using a very minimalistic application.&lt;/span&gt;&lt;/p&gt;
&lt;div class="gist"&gt;&lt;a href="https://gist.github.com/kraih/2899530"&gt;https://gist.github.com/kraih/2899530&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;And the only dependency is Mojolicious, but any CPAN module you specify can be installed automatically.&lt;/span&gt;&lt;/p&gt;
&lt;div class="gist"&gt;&lt;a href="https://gist.github.com/kraih/2899541"&gt;https://gist.github.com/kraih/2899541&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;My favorite Heroku feature is that we are allowed to run our own web server, which enables many of those nifty &lt;/span&gt;&lt;a href="http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook#REAL2DTIME_WEB"&gt;real-time web features&lt;/a&gt;&lt;span&gt; to just work. The port to be used for listening will simply be passed along via environment variable.&lt;/span&gt;&lt;/p&gt;
&lt;div class="gist"&gt;&lt;a href="https://gist.github.com/kraih/2899544"&gt;https://gist.github.com/kraih/2899544&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;And those were all the preparations required, now we can just deploy our application with&lt;/span&gt;&lt;em&gt;git&lt;/em&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div class="gist"&gt;&lt;a href="https://gist.github.com/kraih/2899556"&gt;https://gist.github.com/kraih/2899556&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;I&amp;#8217;ve also heard rumors that Glen &amp;#8220;tempire&amp;#8221; Hinkle might be working on new Mojolicious commands to make the whole process even easier, but you&amp;#8217;ll have to visit (or watch the live stream of) his &lt;/span&gt;&lt;a href="http://mojocasts.com/yapc"&gt;talk at YAPC::NA 2012&lt;/a&gt;&lt;span&gt; to learn more about that. ;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img alt="image" src="http://media.tumblr.com/857a567b978f9fc7b796c47de4d0e014/tumblr_inline_mianj0jqfq1qz4rgp.png"/&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;Have fun!&lt;/span&gt;&lt;/p&gt;</description><link>http://blog.kraih.com/post/43199102900</link><guid>http://blog.kraih.com/post/43199102900</guid><pubDate>Fri, 08 Jun 2012 20:46:00 +0200</pubDate></item><item><title>Video</title><description>&lt;iframe src="http://player.vimeo.com/video/40579180" width="400" height="300" frameborder="0"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;</description><link>http://blog.kraih.com/post/43198716008</link><guid>http://blog.kraih.com/post/43198716008</guid><pubDate>Wed, 18 Apr 2012 05:51:00 +0200</pubDate></item><item><title>Mojolicious hack of the day: Mojolyst</title><description>&lt;p&gt;&lt;span&gt;Today i&amp;#8217;ve got a real hack for you. We are going to hijack the &lt;/span&gt;&lt;a href="http://mojolicio.us/"&gt;Mojolicious&lt;/a&gt;&lt;span&gt; router and turn it into a more &lt;/span&gt;&lt;a href="http://catalystframework.org/"&gt;Catalyst&lt;/a&gt;&lt;span&gt;-ish decentralized one, just by using a plugin. Controllers are discovered on application startup and their routes composed automatically, even templates in the DATA sections of each controller are supported. :)&lt;/span&gt;&lt;/p&gt;
&lt;div class="gist"&gt;&lt;a href="https://gist.github.com/kraih/2149176"&gt;https://gist.github.com/kraih/2149176&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;Have fun!&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;</description><link>http://blog.kraih.com/post/43198653667</link><guid>http://blog.kraih.com/post/43198653667</guid><pubDate>Wed, 21 Mar 2012 10:57:00 +0100</pubDate></item><item><title>Mojolicious hack of the day: More AnyEvent, oh my</title><description>&lt;p&gt;&lt;span&gt;Ever since we &lt;/span&gt;&lt;a href="http://blog.kraih.com/post/43197898000/mojolicious-hack-of-the-day-anyevent"&gt;added AnyEvent support&lt;/a&gt;&lt;span&gt; to &lt;/span&gt;&lt;a href="http://mojolicio.us/"&gt;Mojolicious&lt;/a&gt;&lt;span&gt; through &lt;/span&gt;&lt;a href="https://metacpan.org/module/EV"&gt;EV&lt;/a&gt;&lt;span&gt;, it has been a very popular feature. But so far it required Mojolicious to be in control of the event loop, which limited its usefulness quite a bit. That has changed now, both our web server and user agent have become pretty much indistiguishable from normal &lt;/span&gt;&lt;a href="https://metacpan.org/module/AnyEvent"&gt;AnyEvent&lt;/a&gt;&lt;span&gt; components. Today i&amp;#8217;m going to demonstrate how you can non-blockingly search Twitter for Perl with the &lt;/span&gt;&lt;a href="http://mojolicio.us/perldoc/Mojo/UserAgent"&gt;user agent&lt;/a&gt;&lt;span&gt;, from a &lt;/span&gt;&lt;a href="https://metacpan.org/module/PSGI"&gt;PSGI&lt;/a&gt;&lt;span&gt; application running inside the AnyEvent based &lt;/span&gt;&lt;a href="https://metacpan.org/module/Twiggy"&gt;Twiggy&lt;/a&gt;&lt;span&gt; web server. In fact, it should work with any non-blocking capable web framework, such as &lt;/span&gt;&lt;a href="http://catalystframework.org/"&gt;Catalyst&lt;/a&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div class="gist"&gt;&lt;a href="https://gist.github.com/kraih/1868865"&gt;https://gist.github.com/kraih/1868865&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;Have fun!&lt;/span&gt;&lt;/p&gt;</description><link>http://blog.kraih.com/post/43198561287</link><guid>http://blog.kraih.com/post/43198561287</guid><pubDate>Mon, 20 Feb 2012 03:30:00 +0100</pubDate></item><item><title>Mojolicious and DBIx::Class</title><description>&lt;p&gt;If you&amp;#8217;ve ever been wondering how a well designed DBIx::Class model for Mojolicious and Mojolicious::Lite applications would look like, Glen Hinkle got you covered with &lt;a href="http://blogs.perl.org/users/tempire/2012/02/mojolicious-full-and-lite-apps---understanding-the-difference.html"&gt;his latest release&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote class="posterous_medium_quote"&gt;
&lt;p&gt;The example application demonstrates DBIx::Class integration, how to test your web app with Test::Mojo, as well as how to use EP templates with and without tag helpers. For those unfamiliar with testing in general, there are even examples of DBIC schema tests.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Have fun!&lt;/p&gt;</description><link>http://blog.kraih.com/post/43198446819</link><guid>http://blog.kraih.com/post/43198446819</guid><pubDate>Wed, 08 Feb 2012 00:22:00 +0100</pubDate></item><item><title>A logo for MetaCPAN</title><description>&lt;p&gt;&lt;span&gt;In case you&amp;#8217;ve missed it, there is currently a &lt;/span&gt;&lt;a href="http://contest.metacpan.org/"&gt;logo contest for MetaCPAN&lt;/a&gt;&lt;span&gt; in progress. I&amp;#8217;m generally not a big fan of contests, but since it&amp;#8217;s for the Perl community, i&amp;#8217;m participating as well. Here&amp;#8217;s what i came up with. (the official entry should later show up &lt;/span&gt;&lt;a href="http://entries.contest.metacpan.org/2012/01/sebastian-riedel-retro.html"&gt;here&lt;/a&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img alt="image" src="http://media.tumblr.com/73dda7b0eb76b17ea52d8792a6ee155d/tumblr_inline_mian2lGxir1qz4rgp.png"/&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;No fonts were harmed in the making of this logo, every character is custom made. I tried to combine a retro and futuristic feel, to highlight the long history of Perl and the fact that the CPAN is still science fiction for many programming languages. The three flying pixels are a metaphor for modules, small building blocks that can be combined to form something new. Hope you like it.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img alt="image" src="http://media.tumblr.com/adc3786a388b858d39be2f48bf31d1fd/tumblr_inline_mian2yhJ7V1qz4rgp.png"/&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;Have fun!&lt;/span&gt;&lt;/p&gt;</description><link>http://blog.kraih.com/post/43198406760</link><guid>http://blog.kraih.com/post/43198406760</guid><pubDate>Tue, 03 Jan 2012 09:01:00 +0100</pubDate></item><item><title>A Mojolicious 2011</title><description>&lt;p&gt;Happy new year everyone, it&amp;#8217;s amazing how much &lt;a href="http://mojolicio.us/"&gt;Mojolicious&lt;/a&gt; has progressed and grown in 2011, Marcus Ramberg has prepared &lt;a href="http://marcus.nordaaker.com/2011/12/a-mojolicious-2011/"&gt;a little retrospection for us&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote class="posterous_medium_quote"&gt;
&lt;p&gt;A new year is upon us, and I figured this would be good time to take a look at the improvements in the Mojolicious framework in the last year. There has been a dazzling number of releases, 122 in fact, including the current release, 2.42.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Have fun!&lt;/p&gt;</description><link>http://blog.kraih.com/post/43198339120</link><guid>http://blog.kraih.com/post/43198339120</guid><pubDate>Sat, 31 Dec 2011 15:30:00 +0100</pubDate></item><item><title>Mojocast #5 Mojo::UserAgent</title><description>&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/5be747bcf2486956d73c177bc838b1cb/tumblr_inline_mian0pHjed1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;Merry christmas everyone, today Glen &amp;#8220;tempire&amp;#8221; Hinkle has a special treat for us. In this Mojocast he demonstrates why interacting with the web from Perl has never been this much fun before, &lt;a href="http://mojocasts.com/e5"&gt;you should take a look&lt;/a&gt;!&lt;/p&gt;
&lt;blockquote class="posterous_medium_quote"&gt;
&lt;p&gt;Mojocast Monday brings you a high-level overview of Mojo::UserAgent, the client side of Mojolicious. DOM Walking, CSS selectors, and watching live requests are just a couple of the things you&amp;#8217;ll see.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Have fun!&lt;/p&gt;</description><link>http://blog.kraih.com/post/43198299201</link><guid>http://blog.kraih.com/post/43198299201</guid><pubDate>Mon, 26 Dec 2011 02:42:00 +0100</pubDate></item><item><title>Mojocast #4 Stash, Flash, and Sessions</title><description>&lt;p&gt;&lt;span&gt;Happy &lt;/span&gt;&lt;a href="http://mojocasts.com/"&gt;Mojocast&lt;/a&gt;&lt;span&gt; monday everyone. This time Glen &amp;#8220;tempire&amp;#8221; Hinkle will explain to you the very important task of sharing data between the various parts of a &lt;/span&gt;&lt;a href="http://mojolicio.us/"&gt;Mojolicious&lt;/a&gt;&lt;span&gt; application. So, what are you waiting for? Get &lt;/span&gt;&lt;a href="http://mojocasts.com/e4"&gt;over there&lt;/a&gt;&lt;span&gt; and learn web development with Perl in no time!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img alt="image" src="http://media.tumblr.com/2104fde3f035ce7f86dc6d5706a14c78/tumblr_inline_miamzdZxsU1qz4rgp.png"/&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;Have fun!&lt;/span&gt;&lt;/p&gt;</description><link>http://blog.kraih.com/post/43198246612</link><guid>http://blog.kraih.com/post/43198246612</guid><pubDate>Mon, 14 Nov 2011 06:56:00 +0100</pubDate></item><item><title>Mojolicious hack of the day: WebSockets</title><description>&lt;p&gt;&lt;span&gt;By now you&amp;#8217;ve probably heard about &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/WebSocket"&gt;WebSockets&lt;/a&gt;&lt;span&gt;, and that they are the future of web development, but so far there are very little examples that really show how easy to use they actually are. So today we are going to explore the wonderful world of events in &lt;/span&gt;&lt;a href="http://mojolicio.us/"&gt;Mojolicious&lt;/a&gt;&lt;span&gt; a bit and build a little application that forwards all framework log messages to a browser window. (works best in &lt;/span&gt;&lt;a href="http://www.google.com/chrome"&gt;Chrome&lt;/a&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;div class="gist"&gt;&lt;a href="https://gist.github.com/kraih/1330053"&gt;https://gist.github.com/kraih/1330053&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;Have fun!&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;</description><link>http://blog.kraih.com/post/43198206873</link><guid>http://blog.kraih.com/post/43198206873</guid><pubDate>Mon, 31 Oct 2011 23:36:00 +0100</pubDate></item><item><title>Mojolicious 2.0 released: Perl real-time web framework</title><description>&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/30ca681182cf9b9497745f547a682cbc/tumblr_inline_miamvg49IQ1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;I&amp;#8217;m very happy to announce the release of &lt;/span&gt;&lt;a href="http://mojolicio.us/"&gt;Mojolicious&lt;/a&gt;&lt;span&gt; 2.0 (Leaf Fluttering In Wind).&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;It is now almost a year since our &lt;a href="http://blog.kraih.com/post/43194040871/mojolicious-1-0-released"&gt;first stable release&lt;/a&gt;, and what a great year it has been. The community really exploded, with now over 100 regulars on the IRC channel and &lt;a href="https://github.com/kraih/mojo"&gt;450 watchers on GitHub&lt;/a&gt;, making us by far the most successful CPAN module there. Thanks everyone!&lt;/p&gt;
&lt;p&gt;Of course we also have many new features for you, here are the highlights:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Perl 5.10.1:&lt;/strong&gt; We have finally increased the Perl version requirement and are already using all new features extensively. The performance increase is substantial, especially if you&amp;#8217;re coming from Perl 5.8.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Morbo: &lt;/strong&gt;A brand new self-restarting development web server that &lt;a href="http://mojolicio.us/perldoc/Mojolicious/Lite#Reloading"&gt;just works&lt;/a&gt;, even on Windows.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;libev:&lt;/strong&gt; Native support for the &lt;a href="https://metacpan.org/module/EV"&gt;EV&lt;/a&gt; event loop and in turn &lt;a href="https://metacpan.org/module/AnyEvent"&gt;AnyEvent&lt;/a&gt;. (&lt;a href="http://blog.kraih.com/post/43197898000/mojolicious-hack-of-the-day-anyevent"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Events:&lt;/strong&gt; Many objects now &lt;a href="http://mojolicio.us/perldoc/Mojo/EventEmitter#SYNOPSIS"&gt;emit events&lt;/a&gt;, which can be used to extend Mojolicious. (you&amp;#8217;ll hear much more about this soon, it&amp;#8217;s very cool)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mount plugin:&lt;/strong&gt; Whole Mojolicious applications can now be &lt;a href="http://mojolicio.us/perldoc/Mojolicious/Plugin/Mount#SYNOPSIS"&gt;embedded easily&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Groups:&lt;/strong&gt; Mojolicious::Lite applications became a lot more powerful. (&lt;a href="http://blog.kraih.com/post/43197968068/mojolicious-hack-of-the-day-groups"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hypnotoad:&lt;/strong&gt; Our primary production web server got a lot more &lt;a href="http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook#Hypnotoad"&gt;user friendly&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Collections:&lt;/strong&gt; Making web scraping a hell of a lot of fun. (&lt;a href="http://blog.kraih.com/post/43198036449/mojolicious-hack-of-the-day-web-scraping-with"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WebSocket testing:&lt;/strong&gt; You won&amp;#8217;t believe how easy it can be. (&lt;a href="http://blog.kraih.com/post/43197825032/mojolicious-hack-of-the-day-testing-websockets"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;And as usual there is a lot more to discover, see &lt;a href="https://github.com/kraih/mojo/blob/7321e4c7b83a19286b3309df53fc6d4d2e7460f0/Changes"&gt;Changes&lt;/a&gt; on GitHub for the full list of improvements.&lt;/p&gt;
&lt;p&gt;Have fun!&lt;/p&gt;</description><link>http://blog.kraih.com/post/43198085334</link><guid>http://blog.kraih.com/post/43198085334</guid><pubDate>Mon, 17 Oct 2011 08:24:00 +0200</pubDate></item><item><title>Mojolicious hack of the day: Web scraping with collections</title><description>&lt;p&gt;&lt;span&gt;Today we are going to use the &lt;/span&gt;&lt;a href="http://mojolicio.us/"&gt;Mojolicious&lt;/a&gt;&lt;span&gt; &lt;/span&gt;&lt;a href="http://mojolicio.us/perldoc/Mojo/UserAgent"&gt;user agent&lt;/a&gt;&lt;span&gt; to scrape Perl headlines from &lt;/span&gt;&lt;a href="http://www.reddit.com/r/perl/"&gt;Reddit&lt;/a&gt;&lt;span&gt;, and then transform them further with &lt;/span&gt;&lt;a href="http://mojolicio.us/perldoc/Mojo/Collection"&gt;collections&lt;/a&gt;&lt;span&gt;, another one of our latest experimental features.&lt;/span&gt;&lt;/p&gt;
&lt;div class="gist"&gt;&lt;a href="https://gist.github.com/kraih/1280965"&gt;https://gist.github.com/kraih/1280965&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;Have fun!&lt;/span&gt;&lt;/p&gt;</description><link>http://blog.kraih.com/post/43198036449</link><guid>http://blog.kraih.com/post/43198036449</guid><pubDate>Wed, 12 Oct 2011 04:26:00 +0200</pubDate></item><item><title>Mojolicious hack of the day: Groups</title><description>&lt;p&gt;&lt;span&gt;Today i&amp;#8217;m going to show you one of our latest experimental features. In the past we&amp;#8217;ve mostly encouraged just to use &lt;/span&gt;&lt;a href="http://mojolicio.us/"&gt;Mojolicious&lt;/a&gt;&lt;span&gt; instead of &lt;/span&gt;&lt;a href="http://mojolicio.us/perldoc/Mojolicious/Lite"&gt;Mojolicious::Lite&lt;/a&gt;&lt;span&gt; for all non-trivial applications, but over time it has become clear that even for single file prototypes you sometimes need a little more power. We&amp;#8217;ve addressed this recently with the addition of &lt;/span&gt;&lt;em&gt;group&lt;/em&gt;&lt;span&gt; blocks, which allow &lt;/span&gt;&lt;em&gt;under&lt;/em&gt;&lt;span&gt; statements to be nested.&lt;/span&gt;&lt;/p&gt;
&lt;div class="gist"&gt;&lt;a href="https://gist.github.com/kraih/1264549"&gt;https://gist.github.com/kraih/1264549&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;And don&amp;#8217;t forget to give feedback if you like one of our experimental features, or they might never leave the experimental stage. ;)&lt;/p&gt;
&lt;p&gt;Have fun!&lt;/p&gt;</description><link>http://blog.kraih.com/post/43197968068</link><guid>http://blog.kraih.com/post/43197968068</guid><pubDate>Wed, 05 Oct 2011 07:24:00 +0200</pubDate></item><item><title>Mojolicious hack of the day: AnyEvent</title><description>&lt;p&gt;&lt;span&gt;When we recently added the &lt;/span&gt;&lt;a href="https://metacpan.org/module/EV"&gt;EV&lt;/a&gt;&lt;span&gt; backend to &lt;/span&gt;&lt;a href="http://mojolicio.us/"&gt;Mojolicious&lt;/a&gt;&lt;span&gt;, we not only got better performance and scalability, but also native support for &lt;/span&gt;&lt;a href="https://metacpan.org/module/AnyEvent"&gt;AnyEvent&lt;/a&gt;&lt;span&gt;. And to demonstrate how easy to use it actually is, we are going to extend the &lt;/span&gt;&lt;a href="http://blog.kraih.com/mojolicious-hack-of-the-day-html5-eventsource"&gt;HTML5 EventSource example&lt;/a&gt;&lt;span&gt; from last month with some non-blocking IRC goodness today. :)&lt;/span&gt;&lt;/p&gt;
&lt;div class="gist"&gt;&lt;a href="https://gist.github.com/kraih/1245355"&gt;https://gist.github.com/kraih/1245355&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;Have fun!&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;</description><link>http://blog.kraih.com/post/43197898000</link><guid>http://blog.kraih.com/post/43197898000</guid><pubDate>Tue, 27 Sep 2011 08:24:00 +0200</pubDate></item><item><title>Mojolicious hack of the day: Testing WebSockets</title><description>&lt;p&gt;&lt;span&gt;In &lt;/span&gt;&lt;a href="http://mojolicio.us/"&gt;Mojolicious&lt;/a&gt;&lt;span&gt; we care a great deal about testing, after all most of Mojolicious itself was developed using &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;test driven development&lt;/a&gt;&lt;span&gt;. Recently &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/WebSocket"&gt;WebSockets&lt;/a&gt;&lt;span&gt; have turned out to be a real challenge in this regard, their extremely dynamic nature makes it pretty much impossible to design a simple Perl test API that would cover all possible use cases. Luckily we&amp;#8217;ve been supporting WebSockets for quite some time and know by now that the exact message flow is known in advance for the most common ones, which led to this rather pleasant to use API. ;)&lt;/span&gt;&lt;/p&gt;
&lt;div class="gist"&gt;&lt;a href="https://gist.github.com/kraih/1227900"&gt;https://gist.github.com/kraih/1227900&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;Have fun!&lt;/span&gt;&lt;/p&gt;</description><link>http://blog.kraih.com/post/43197825032</link><guid>http://blog.kraih.com/post/43197825032</guid><pubDate>Mon, 19 Sep 2011 16:31:00 +0200</pubDate></item><item><title>Mojocast #3 Authentication, Helpers, and Plugins</title><description>&lt;p&gt;&lt;span&gt;Yes, it&amp;#8217;s finally &lt;/span&gt;&lt;a href="http://mojocasts.com/e3"&gt;Mojocasts&lt;/a&gt;&lt;span&gt; Monday again! And this time Glen &amp;#8220;tempire&amp;#8221; Hinkle makes some rather advanced topics like &amp;#8220;under&amp;#8221; and plugins look trivial. But what&amp;#8217;s maybe even more impressive than the actual screencast itself is the new HTML5 video player, not only does it provide us with even better video quality, but also the ability to link directly to &lt;/span&gt;&lt;a href="http://mojocasts.com/e3#Under%20directive"&gt;individual chapters&lt;/a&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Have fun!&lt;/span&gt;&lt;/p&gt;</description><link>http://blog.kraih.com/post/43197705859</link><guid>http://blog.kraih.com/post/43197705859</guid><pubDate>Mon, 12 Sep 2011 09:53:00 +0200</pubDate></item></channel></rss>
