<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7734799596325955005</id><updated>2012-01-09T23:39:12.771-02:00</updated><category term='gci'/><category term='YAPC::SA'/><category term='calendar'/><category term='gsoc'/><category term='sppw'/><category term='tpf'/><category term='Test::LongString'/><category term='perl'/><category term='advent calendars'/><category term='lacuna'/><category term='sdl'/><category term='community'/><category term='starman'/><category term='pretty'/><category term='events'/><category term='Tutorial'/><category term='TT'/><category term='perl ddg duckduckgo'/><category term='oneliner'/><category term='YAPC::Brasil'/><category term='data::printer'/><category term='ufrj'/><category term='Catalyst'/><category term='2010 retrospective'/><category term='metacpan'/><category term='xkcd'/><category term='Template Toolkit'/><category term='Padre'/><category term='bicycle'/><category term='ironman'/><category term='printer'/><category term='CPAN Ratings'/><category term='course'/><category term='class'/><category term='dreamhost hosting perl'/><category term='undergraduates'/><category term='dcc'/><category term='Deploy'/><category term='perl community'/><category term='rexify'/><category term='lacuna expanse'/><category term='training'/><category term='cpanm'/><category term='contest'/><category term='LCSS'/><category term='workshop'/><category term='dancer'/><category term='students'/><category term='perlbal'/><category term='cpan'/><category term='aop'/><category term='perl mojolicious twitter tweetylicious'/><category term='blekko'/><category term='games'/><category term='CPAN Forks::Super'/><category term='Mojo'/><category term='tip'/><category term='perlbrew'/><category term='perl mongers'/><category term='Example'/><category term='moose'/><category term='Mojolicious'/><category term='pretty printer'/><category term='perl popularity tv geeks'/><category term='orm'/><category term='perl ironman mst'/><category term='perl thanksgiving'/><category term='stats'/><category term='DotCloud'/><category term='2011 retrospective'/><category term='testing'/><category term='datetime'/><category term='duckduckgo'/><category term='conferences'/><category term='rakudo'/><category term='object-orientation'/><category term='bugzilla'/><title type='text'>The Onion Stand</title><subtitle type='html'>Showcasing some Perl do the unsuspecting World</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>35</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-2404344510897908055</id><published>2012-01-03T06:02:00.004-02:00</published><updated>2012-01-04T02:34:08.389-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='calendar'/><category scheme='http://www.blogger.com/atom/ns#' term='metacpan'/><category scheme='http://www.blogger.com/atom/ns#' term='events'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='gci'/><category scheme='http://www.blogger.com/atom/ns#' term='tpf'/><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='perl mongers'/><category scheme='http://www.blogger.com/atom/ns#' term='stats'/><category scheme='http://www.blogger.com/atom/ns#' term='sdl'/><category scheme='http://www.blogger.com/atom/ns#' term='object-orientation'/><category scheme='http://www.blogger.com/atom/ns#' term='orm'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='rexify'/><category scheme='http://www.blogger.com/atom/ns#' term='aop'/><category scheme='http://www.blogger.com/atom/ns#' term='advent calendars'/><category scheme='http://www.blogger.com/atom/ns#' term='2011 retrospective'/><title type='text'>The Perls of 2011</title><content type='html'>Following my &lt;a href="http://onionstand.blogspot.com/2010/12/2010-filled-with-perls.html"&gt;2010 post&lt;/a&gt;, I thought I should register some of the great things that happened in the &lt;a href="http://perl.org/"&gt;Perl programming&lt;/a&gt;  world in 2011. Only this time instead of turning it into a timeline,  I'm going to place things in topics so you can just concentrate on what  really matters :)&lt;br /&gt;&lt;br /&gt;Also, I'm only going to write about Perl 5. If you're looking for a Perl 6 retrospective, &lt;a href="http://perlgeek.de/blog-en/perl-6/perl-6-in-2011.html"&gt;Moritz Lenz already did a very nice job with that&lt;/a&gt; :)&lt;br /&gt;&lt;br /&gt;Apologies  if I missed something - it's really hard to keep track of all the  wonderful projects and conferences going on! Make sure to add them in  the comments section below.&lt;br /&gt;&lt;br /&gt;So, without further ado, here are the "Perls of 2011".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Some Perl &amp;amp; CPAN stats&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;According to &lt;a href="https://www.ohloh.net/p/perl/"&gt;Ohloh&lt;/a&gt;, over the course of 2011 there were nothing short of &lt;span style="font-style: italic;"&gt;5975 commits&lt;/span&gt;  to the main Perl 5 repository. Wow! For comparison, Ruby had 3153  commits and PHP, 4461. We were a little short from our friends in the  Python community, though, which had 6974 commits. Not bad, huh?&lt;br /&gt;&lt;br /&gt;The  Perl 5 bugtracking system reports a total of 915 tickets created in  2011, and 928 tickets closed in that same period. That was close, but  the awesome folks at p5p once again managed to keep the stats positive  :)&lt;br /&gt;&lt;br /&gt;By the way, can you guess how many perl releases we had in 2011? 1? 3? more? 10? Try 21. &lt;span style="font-style: italic;"&gt;Twenty one&lt;/span&gt;, including development and stable releases!&lt;br /&gt;&lt;br /&gt;One of the coolest ones was, of course, perl 5.14, which brought us  Unicode 6.0 support, new regex flags, the sugary "package Foo { }"  syntax, improved IPv6 support and, as if these weren't enough, it uses  even &lt;span style="font-style: italic;"&gt;less&lt;/span&gt; memory and CPU than previous releases!&lt;br /&gt;&lt;br /&gt;How about CPAN? 16197 distributions uploaded, of which 1873 were brand new!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Security&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The Common Vulnerabilities and Exposures had &lt;a href="http://web.nvd.nist.gov/view/vuln/search-results?adv_search=true&amp;amp;cves=on&amp;amp;cve_id=&amp;amp;query=&amp;amp;cwe_id=&amp;amp;cpe_product=cpe%3A%2Fa%3Aperl%3Aperl&amp;amp;cpe_version=&amp;amp;pub_date_start_month=0&amp;amp;pub_date_start_year=2011&amp;amp;pub_date_end_month=11&amp;amp;pub_date_end_year=2011&amp;amp;mod_date_start_month=-1&amp;amp;mod_date_start_year=-1&amp;amp;mod_date_end_month=-1&amp;amp;mod_date_end_year=-1&amp;amp;cvss_sev_base=&amp;amp;cvss_av=&amp;amp;cvss_ac=&amp;amp;cvss_au=&amp;amp;cvss_c=&amp;amp;cvss_i=&amp;amp;cvss_a="&gt;5 entries tagged "perl"&lt;/a&gt; in 2011, of which only 2 were actually regarding perl itself (namely, &lt;a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-0761"&gt;CVE-2011-0761&lt;/a&gt; and &lt;a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-1487"&gt;CVE-2011-1487&lt;/a&gt;). Again, for comparison, python also had 2 records, ruby had 7, and php had 36.&lt;br /&gt;&lt;br /&gt;Perl's commitment to stability and security was showcased in late  december, when Alexander “alech” Klink and Julian “zeri” Wälde delivered  a very nice talk at the 28th Chaos Communication Congress security  conference in Berlin, entitled &lt;a href="http://events.ccc.de/congress/2011/Fahrplan/attachments/2007_28C3_Effective_DoS_on_web_application_platforms.pdf" rel="nofollow" title="28c3 talk page"&gt;"Efficient Denial of Service Attacks on Web Application Platforms"&lt;/a&gt;. Their work builds on top of an &lt;a href="http://perldoc.perl.org/perlsec.html#Algorithmic-Complexity-Attacks"&gt;attack vector described in perlsec&lt;/a&gt; and &lt;span style="font-style: italic;"&gt;fixed back in 2003&lt;/span&gt;  (the long-since-deprecated 5.8.1), and shows the issue affects almost  every other popular language for the web, including Python, Java, PHP,  ASP.NET and JavaScript. Ruby fixed their code in 2008 and people should  be fine as long as they use CRuby 1.9 and above.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;The King is dead. Long live the King!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For  the past two years Jesse Vincent (obra) was our beloved Perl 5  Pumpking. Back in october he passed the torch to the incredibly prolific  Ricardo Signes (rjbs), who will undoubtedly make us all very proud! A  huge thanks is in order to both of them for the remarkable work they did  last year - and that they'll undoubtedly keep on doing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;TPF Grants &amp;amp; Donations&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dave Mitchell once again did an astounding work with his "Fixing Perl 5  Core Bugs". Last year alone he worked more than 470 hours, closing 29  tickets. Great job, Dave!&lt;br /&gt;&lt;br /&gt;In the middle of the year Nicholas Clark jumped on the wagon with his  "Improving Perl 5" grant, approved with praise. So far Nick reported  more than 380 hours of work, and tons of code to make Perl development  even smoother.&lt;br /&gt;&lt;br /&gt;None of this would be possible without the wonderful support from  several companies that are proud to use Perl, giving out not only their  public praise but also donating infrastructure and money to help further  develop the language. This year we saw some incredible support from &lt;a href="http://www.booking.com/"&gt;Booking.com&lt;/a&gt;, &lt;a href="http://www.cpanel.net/"&gt;cPanel&lt;/a&gt;, &lt;a href="http://www.dijkmat.nl/"&gt;Dijkmat&lt;/a&gt;, &lt;a href="http://www.liquidweb.com/"&gt;Liquid Web&lt;/a&gt;, &lt;a href="http://www.net-a-porter.com/"&gt;Net-A-Porter&lt;/a&gt;, the &lt;a href="http://oslo.pm.org/"&gt;Oslo Perl Mongers&lt;/a&gt;, &lt;a href="http://www.perl-services.de/"&gt;perl-services.de&lt;/a&gt;, and the &lt;a href="http://vienna.pm.org/"&gt;Vienna Perl Mongers&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Google Summer of Code (GSoC)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Every year The Perl Foundation participates on the Google Summer of Code  program, and 2011 was no exception. This time, 6 students were accepted  and all of them made their mentors proud - 100% success rate! A huge  thanks is in order for everyone that participated.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Google Code-in&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Another great initiative from Google in 2011 was the Code-in program,  aimed at 13-17 year old  school/college students with the idea of  getting them involved with open  source. The project is still running  but we can already see some &lt;a href="http://mdk.per.ly/2011/12/27/google-code-in-fit-the-third/"&gt;impressive results&lt;/a&gt;, such as over 135 completed tasks.&lt;br /&gt;&lt;br /&gt;These numbers are great, and show that there's a big niche for Perl in schools and undergrad courses. I had the opportunity to &lt;a href="http://onionstand.blogspot.com/2011/02/teaching-perl-to-undergraduates.html"&gt;teach Perl to undergrads&lt;/a&gt;  in a one-week course at the Federal University of Rio de Janeiro and  the receptivity was incredible! If you have the chance to give a short  free workshop at your local college/university, I highly recommend you  do so :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Conferences! Conferences! Conferences!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;All over the world, the vibrant Perl open-source community and their  corporate sponsors filled the year 2011 with conferences showing the  best modules, tools, techniques and design patterns, talking about a lot  of bleeding-edge features and how to make Perl help with innovation and  productivity for your enterprise.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;January:&lt;/span&gt; Orlando Perl Workshop (OPW - a.k.a. The Perl Oasis)&lt;br /&gt;&lt;span style="font-style: italic;"&gt;February:&lt;/span&gt; Frozen Perl, Bulgarian Perl Workshop&lt;br /&gt;&lt;span style="font-style: italic;"&gt;March:&lt;/span&gt; Dutch Perl Workshop&lt;br /&gt;&lt;span style="font-style: italic;"&gt;April:&lt;/span&gt; Toronto Perl Workshop, QA Hackathon&lt;br /&gt;&lt;span style="font-style: italic;"&gt;May:&lt;/span&gt; São Paulo Perl Workshop&lt;br /&gt;&lt;span style="font-style: italic;"&gt;June:&lt;/span&gt; Nordic Perl Workshop, French Perl Workshop, YAPC::NA&lt;br /&gt;&lt;span style="font-style: italic;"&gt;August:&lt;/span&gt; YAPC::Europe&lt;br /&gt;&lt;span style="font-style: italic;"&gt;September:&lt;/span&gt; Italian Perl Workshop, Portuguese Perl Workshop&lt;br /&gt;&lt;span style="font-style: italic;"&gt;October:&lt;/span&gt; Ukrainian Perl Workshop, Pittsburgh Perl Workshop, Belgian Perl Workshop, German Perl Workshop, YAPC::Asia&lt;br /&gt;&lt;span style="font-style: italic;"&gt;November:&lt;/span&gt; YAPC::Brasil, TwinCity Perl Workshop, London Perl Workshop&lt;br /&gt;&lt;span style="font-style: italic;"&gt;December:&lt;/span&gt; Russian Perl Workshop&lt;br /&gt;&lt;br /&gt;Only July had no perl-centric conference. Quite impressive! And we're  not even counting general conferences in which we participated such as  FOSDEM, FISL, OSDC, OSCON, or even Perl Mongers tech meetings. Speaking of which...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Perl Mongers&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The number of active Perl Mongers group just keeps growing and growing.  In 2011 alone, 15 new groups were spawned! Good luck to all our friends  from AtlanticCity.pm (US), Makati.pm (PH), Bordeaux.pm (FR),  HradecKralove.pm (CZ), Goiania.pm (BR), Petropolis.pm (BR), Brno.pm  (CZ), Logan.pm (US), Tolyatti.pm (US), LGBT.pm, SouthernOregon.pm (US),  Plzen.pm (CZ), Sendai.pm (JP), WestVirginia.pm (US) and Kerman.pm (IR).&lt;br /&gt;&lt;br /&gt;With these new additions, our tiny planet hosts 251 active Perl Mongers groups :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Prominent Perl People in 2011&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This year we had some well-deserved White Camel Award winners: Leo  Lapworth, Daisuke Maki and Andrew Shitov. Congratulations and thanks for  making the Perl world better!&lt;br /&gt;&lt;br /&gt;There are several others whom also deserve a huge praise for last year's  work, amongst them Mark Keating of Shadowcat/EPO/TPF, who is tirelessly  working on quality Perl marketing; Gábor Szabó who started the &lt;a href="http://perlweekly.com/"&gt;Perl Weekly&lt;/a&gt; mailing list and a series of &lt;a href="https://www.youtube.com/user/gabor529/videos"&gt;Video Tutorials&lt;/a&gt;; and Thiago Rondon, who did huge things for the OpenData initiative, leading us (and Perl) into &lt;a href="http://opendatabr.org/"&gt;projects&lt;/a&gt; that added a lot of transparency to the Brazilian government and even resulted in a &lt;a href="http://www.w3c.br/pub/Materiais/PublicacoesW3C/manual_dados_abertos_desenvolvedores_web.pdf"&gt;W3C Brazil OpenData Developer's Manual&lt;/a&gt; (of which I'm proud to have been a part of) and in &lt;a href="http://mdk.per.ly/2011/12/06/perl-rocks-latin-america/"&gt;winning the Latin America OpenData hackathon&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;A couple of new, fun and downright useful websites were born in 2011, including &lt;a href="http://perlnews.org/"&gt;Perl News&lt;/a&gt; by Dave Cross, &lt;a href="http://www.github-meets-cpan.com/"&gt;Github-Meets-CPAN&lt;/a&gt; by Johannes Plunien; and &lt;a href="http://prepan.org/"&gt;PrePan&lt;/a&gt;, by Kentaro Kuribayashi. Important to notice that &lt;a href="http://learn.perl.org/"&gt;learn.perl.org&lt;/a&gt; was relaunched with a beautiful look and a lot of updated content. Great job, everyone!&lt;br /&gt;&lt;br /&gt;But there are also the silent workers, the ones that are mostly behind  the scenes but whose efforts were paramount for the Perl 5 ecosystem.  People like Karen Pauley, president of The Perl Foundation; and Barbie,  who worked really hard in keeping the incredible &lt;a href="http://cpantesters.org/"&gt;CPAN Testers&lt;/a&gt; service up and running.&lt;br /&gt;&lt;br /&gt;In fact, a *HUGE* thanks are due to everybody involved in CPAN Testers  in 2011: Barbie, Dave Golden, Chris Williams, David Cantrell, Slaven  Rezić and just about everyone else. I had the great opportunity to help  Dave Golden upgrade the cpan-reporter module to use metabase and I could  see how intricate the whole thing is. By the way, did you know that in  2011 CPAN Testers crossed the barrier of over 1 million test reports in a  single month? That's incredible!&lt;br /&gt;&lt;br /&gt;Speaking of which, what would be of Perl 5 without its core developers?  Several of them were already mentioned and praised here, but you can  check the full list of contributors in the &lt;a href="https://metacpan.org/source/DROLSKY/perl-5.15.6/AUTHORS"&gt;AUTHORS file&lt;/a&gt;, or in &lt;a href="https://metacpan.org/module/perldelta"&gt;perldelta&lt;/a&gt; for a more recent list. This year we had the pleasure of seeing commits from Father Chrysostomos, Florian Ragwitz, H.Merijn Brand, Karl Williamson, Claudio Ramirez, Vladimir Timofeev, Nobuhiro Iwamatsu and many, many others. Thanks, guys!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Perl Games&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The Perl gaming scene got yet another massive overhaul in 2011. Coming  from all the hard work Kartik Thakore, Tobias Leich and everyone else at  the SDL Perl project put in 2010, game development in Perl has never  been this easy or fun.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://sdlperl.ath.cx/releases/SDL_Manual.pdf"&gt;SDL Perl Manual&lt;/a&gt; was finished early in the year, and we were having so much fun we threw together the &lt;a href="http://yapgh.blogspot.com/2011/02/sdl-perl-game-contest.html"&gt;SDL Perl Game Contest&lt;/a&gt; in march, resulting in a total of 16 new games written from scratch in just one month!&lt;br /&gt;&lt;br /&gt;The year also saw the coming of a &lt;a href="https://metacpan.org/module/Box2D"&gt;Box2D wrapper for Perl&lt;/a&gt;, letting us add some fast physics to games and simulations.&lt;br /&gt;&lt;br /&gt;But the best was yet to come. &lt;a href="http://ue.o---o.eu/"&gt;Construder&lt;/a&gt;, a jaw dropping 3D game created by Perl  hacker Robin "elmex" Redeker, features futuristic settings  with some nice graphics and an (almost) infinite world for you to build  and play with. Make sure to check it out if you haven't already!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;A Web of Perl&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Perl's most widely adopted web frameworks also kept extremely busy, and 2011 marked some pretty cool releases and announcements:&lt;br /&gt;&lt;br /&gt;Catalyst 5.9 was released back in august, incorporating Plack as its  default Engine. This change benefits Catalyst significantly by reducing  the amount of  code inside the framework, getting upstream  bug fixes in &lt;a href="https://metacpan.org/module/Plack"&gt;Plack&lt;/a&gt;, and automatically gaining support for any web server which a &lt;a href="https://metacpan.org/module/PSGI"&gt;PSGI&lt;/a&gt; compliant handler is written for.&lt;br /&gt;&lt;br /&gt;Mojolicious saw a total of 122(!) releases, including its 2.0 one, and  now features updated websockets support, documentation enhancements and  several asynchronous/non-blocking features. You can check out the &lt;a href="http://marcus.nordaaker.com/2011/12/a-mojolicious-2011/"&gt;official Mojolicious 2011&lt;/a&gt; retrospective for the full monty.&lt;br /&gt;&lt;br /&gt;The nice folks of Dancer started working on a massive core rewrite that  will help the project tremendously. Among the changes being made, there  will be no more globals in the core, 100% object-oriented backend,  better scoping for sub-applications, and a better design overall.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Advent Calendars&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The tradition remains, and the 2011 &lt;a href="http://perladvent.org/2011/"&gt;Perl&lt;/a&gt; &lt;a href="http://www.catalystframework.org/calendar/2011/"&gt;Advent&lt;/a&gt; &lt;a href="http://advent.perldancer.org/2011"&gt;Calendars&lt;/a&gt; are filled  with great content ranging from beginner tips to advanced hacks. The  Japanese Perl Community once again delivered several &lt;a href="http://perl-users.jp/articles/advent-calendar/2011/"&gt;high-quality articles in 9 different tracks&lt;/a&gt;, while the Brazilian Perl Community &lt;a href="http://sao-paulo.pm.org/artigos"&gt;scattered their great articles&lt;/a&gt; throughout the two months of the Equinox.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Books&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O'Reilly has been busy in 2011, with the updated &lt;a href="http://shop.oreilly.com/product/0636920018452.do"&gt;6th edition of Learning Perl&lt;/a&gt; - the &lt;span style="font-style: italic;"&gt;Llama&lt;/span&gt; - by Randal Schwartz, brian d foy and Tom Phoenix, and Johan Vromans' handy &lt;a href="http://shop.oreilly.com/product/0636920018476.do"&gt;Perl Pocket Reference&lt;/a&gt;. They're also getting ready for the 4th edition of Programming Perl - the &lt;span style="font-style: italic;"&gt;Camel&lt;/span&gt; - to be released in early 2012. Heck, at O'Reilly &lt;a href="http://twitter.com/#%21/LaurieP/status/142634633337643008"&gt;they even used Perl to pick their Secret Santa&lt;/a&gt; :)&lt;br /&gt;&lt;br /&gt;Speaking of upcoming titles, Ovid's &lt;a href="http://blogs.perl.org/users/ovid/2012/01/beginning-perl---table-of-contents.html"&gt;Beginning Perl&lt;/a&gt; and chromatic's &lt;a href="https://github.com/chromatic/little_plack_book"&gt;Little Plack Book&lt;/a&gt; are ones to keep an eye for. Who knows, maybe I'll get to talk a bit more about them in the 2012 wrap-up? I look forward to it!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Rise of The MetaCPAN&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you were one of the early adopters, you know MetaCPAN was actually born on late 2010 (november 3rd, to be precise). The project had some ambitious goals: provide a free and open sourced alternative search engine to the ever-glorious CPAN. But in 2011 it became more. So much more.&lt;br /&gt;&lt;br /&gt;Moritz "Mo" Onken, a student at the Karlsruhe Institute of Technology (KIT), &lt;a href="http://www.google-melange.com/gsoc/proposal/review/google/gsoc2011/mo/1"&gt;applied for the GSoC&lt;/a&gt; and quickly became a hero. Sure, he already had several years of Perl background, but what Clinton Gormley, Olaf Alders and himself achieved in 2011 exceeded all expectations and revolutionized the Perl world.&lt;br /&gt;&lt;br /&gt;MetaCPAN is not only a sophisticated and fast CPAN search engine, but also offers a full featured REST API that lets you build on top of it making all sorts of complex search queries for extracting data from and about the CPAN. Another (very) important aspect: an active and vibrant community that actually encourages people to send patches fixing bugs and adding new features.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Featured Perl Modules&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Wrapping up the retrospective, I should go about some of the cool new modules that spawned in 2011. This is not meant to be a thorough list, just a small snippet for your viewing pleasure:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://metacpan.org/module/Mason"&gt;&lt;span style="font-weight: bold;"&gt;Mason 2&lt;/span&gt;&lt;/a&gt; - The traditional HTML::Mason distribution received a major overhaul and became just "Mason". The new distribution is being very actively developed and has a much more modern architecture. &lt;a href="http://www.openswartz.com/2011/02/21/announcing-mason-2/"&gt;Check out the changes&lt;/a&gt; and give it a try!&lt;br /&gt;&lt;br /&gt;&lt;a href="https://metacpan.org/module/dip"&gt;&lt;span style="font-weight: bold;"&gt;dip&lt;/span&gt;&lt;/a&gt; - this nifty new tool offers dynamic instrumentation like DTrace, using aspects. Marcel Grünauer builds on top of Adam Kennedy's awesome &lt;a href="https://metacpan.org/module/Aspect"&gt;Aspect Oriented Programming (AOP) Perl interface&lt;/a&gt; (that also reached 1.0 in 2011) to provide a tool that lets you change application's behavior without actually touching the source code. Very nice!&lt;br /&gt;&lt;br /&gt;&lt;a href="https://metacpan.org/module/Lucy"&gt;&lt;span style="font-weight: bold;"&gt;Lucy&lt;/span&gt;&lt;/a&gt; - David Wheeler released a nice Perl wrapper for &lt;a href="http://incubator.apache.org/lucy/"&gt;Apache Lucy&lt;/a&gt;, a high-performance, modular full-text search engine library that assimilated the KinoSearch codebase and community.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="https://metacpan.org/module/Data::Printer"&gt;&lt;span style="font-weight: bold;"&gt;Data::Printer&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; - I don't like to talk about stuff I wrote doing general retrospectives, but I'm going to open an exception here. Data::Printer provides a simple and powerful - not to mention, colorful! - way to view your data structures. It's highly customizable and if you ever used Data::Dumper to view variable contents on the screen, you should give it a try :-)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;There were also some visible trends on CPAN last year:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Towards a lighter Moose&lt;/span&gt;: everybody loves Moose (which also reached 2.0 in 2011!), but sometimes you just want - or think you just want - the sugary OO syntax, not the full-blown object system. Or maybe your particular environment doesn't let you install it, and you still need some small piece of it to make everything better. In 2011 there were a lot of uploads for Moose and Mouse alternatives, including Moo, Mo, and Mite. This definitely shows an itch that needs some scratching.&lt;br /&gt;&lt;br /&gt;On a somewhat related note, Stevan Little is developing a &lt;a href="https://github.com/stevan/p5-mop"&gt;proposal and a functioning prototype&lt;/a&gt; for a Meta Object Protocol, or MOP, to be perhaps included in a future version of Perl 5. Comments are welcome!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sysadmin tools:&lt;/span&gt; Matt S. Trout took the time to bolt some modules together and bring us &lt;a href="https://metacpan.org/module/Tak"&gt;Tak&lt;/a&gt;, a multi-host remote control over ssh. But he wasn't the only one, and new sysadmin tools and modules sprouted all over the perlverse. Some fine examples include &lt;a href="https://metacpan.org/module/helm"&gt;helm&lt;/a&gt;, providing easy server and cluster automation, and the &lt;a href="http://rexify.org/"&gt;great Rex&lt;/a&gt; (or, rather, "(R)?ex"), that lets you manage all your boxes from a central point through the complete process of configuration management and software deployment. Check out &lt;a href="http://rexify.org/"&gt;rexify.org&lt;/a&gt; for a quick glimpse of some of its features!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Simple ORMs:&lt;/span&gt; another trend in 2011 was to create simple DBI wrappers providing ORM-ish features, resulting in lightweight frameworks somewhere between DBI and DBIx::Class. Among the new distributions are &lt;a href="https://metacpan.org/module/Teng"&gt;Teng&lt;/a&gt; and &lt;a href="https://metacpan.org/module/DBIx::Sunny"&gt;DBIx::Sunny&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dependency Managers:&lt;/span&gt; Finally, following Ingy's "&lt;a href="https://metacpan.org/module/only"&gt;only&lt;/a&gt;" pragma from back in 2003, a lot of effort has been put into making new and improved dependency managers for Perl applications and distributions. Miyagawa's &lt;a href="https://metacpan.org/module/carton"&gt;carton&lt;/a&gt; and Gugod's &lt;a href="https://metacpan.org/module/perlrocks"&gt;perlrocks&lt;/a&gt; deserve particular attention.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;That's it for this 2011 Perl retrospective. Hope you guys had as much of a nice time reading it as I had writing it. Let 2012 be the year of the Velociraptor!!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-2404344510897908055?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/2404344510897908055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2012/01/perls-of-2011.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/2404344510897908055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/2404344510897908055'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2012/01/perls-of-2011.html' title='The Perls of 2011'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-3455225914101217064</id><published>2011-05-30T06:19:00.001-03:00</published><updated>2011-05-30T06:19:00.113-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='data::printer'/><category scheme='http://www.blogger.com/atom/ns#' term='pretty'/><category scheme='http://www.blogger.com/atom/ns#' term='printer'/><category scheme='http://www.blogger.com/atom/ns#' term='pretty printer'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Data::Printer - a colored pretty printer for Perl</title><content type='html'>&lt;span style="font-style: italic;"&gt;Wait, stop. Is this Yet Another Data::Dumper?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Well, yes and no. Data::Dumper (and friends) are meant to stringify data structures in a way that makes them still suitable for being &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;eval&lt;/span&gt;&lt;/span&gt;'ed back in. That's really awesome, but poses a huge constraint over pretty-printers. Earlier this year, brian d foy talked about the &lt;a href="http://www.effectiveperlprogramming.com/blog/312"&gt;amazing powers of Data::Dump&lt;/a&gt;, but it still suffers from those constraints. Same goes for the (also great) &lt;a href="http://search.cpan.org/perldoc?Data::Dump::Streamer"&gt;Data::Dump::Streamer&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here's a quick visual comparison between the ever popular Data::Dumper and the new &lt;a href="http://search.cpan.org/perldoc?Data::Printer"&gt;Data::Printer&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://3.bp.blogspot.com/-7xywnshViN8/TeM2joULxII/AAAAAAAAAOA/bl18yGGXbYM/s1600/dataprinter-1.png" alt="" id="BLOGGER_PHOTO_ID_5612389546379166850" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;First thing you'll notice is the colored output, indexed arrays and a little extra regex information. But &lt;a href="http://search.cpan.org/perldoc?Data::Printer"&gt;Data::Printer&lt;/a&gt; offers much more than that. How about debugging objects?&lt;br /&gt;&lt;br /&gt;&lt;img src="http://3.bp.blogspot.com/-b1s1PxyJkx0/TeNC7BZZ8xI/AAAAAAAAAOQ/2wzKvDS5QvA/s1600/dataprinter-2.png" alt="" id="BLOGGER_PHOTO_ID_5612403142388478738" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;And what if your data is attached to others?&lt;br /&gt;&lt;br /&gt;&lt;img src="http://4.bp.blogspot.com/-ZylOBdcyPWE/TeNE43zzswI/AAAAAAAAAOY/FQEcwGGwid4/s1600/dataprinter-3.png" alt="" id="BLOGGER_PHOTO_ID_5612405304478380802" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;The idea behind Data::Printer is that most developers (at least to my experience) use such tools mostly just to see  what's going on inside their variables and objects, not to serialize  data in and out of Perl. So I decided to make a module that would focus on that: &lt;i&gt;display Perl variables and objects on screen, properly formatted&lt;/i&gt; (to be inspected by a human). Data::Printer is somewhat similar to Ruby's "&lt;a href="https://github.com/michaeldv/awesome_print"&gt;awesome_print&lt;/a&gt;", but I made sure to include more customization options and some neat features present in Perl's data dumpers.&lt;br /&gt;&lt;br /&gt;For example, I called the printer function "&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;p()&lt;/span&gt;&lt;/span&gt;"  as it's nice and short and should steer clear of name collisions. But  if you're so used to calling "&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Dumper()&lt;/span&gt;&lt;/span&gt;" in your code it just comes out  naturally while you type, you can try this:&lt;br /&gt;&lt;pre class="sh_perl sh_sourceCode"&gt;  &lt;span class="sh_keyword"&gt;use&lt;/span&gt; Data&lt;span class="sh_symbol"&gt;::&lt;/span&gt;Printer alias &lt;span class="sh_symbol"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="sh_string"&gt;'Dumper'&lt;/span&gt;&lt;span class="sh_symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="sh_function"&gt;  Dumper&lt;/span&gt;&lt;span class="sh_symbol"&gt;(&lt;/span&gt; &lt;span class="sh_variable"&gt;%foo&lt;/span&gt; &lt;span class="sh_symbol"&gt;);  # there, problem solved!&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;Data::Printer comes with (I hope!) very sane defaults, so usually all you have to do is "&lt;span style="font-family:courier new;"&gt;use Data::Printer&lt;/span&gt;" (or even shorter: "&lt;span style="font-family:courier new;"&gt;use DDP&lt;/span&gt;") and start peeking at data structures with the exported "&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;p()&lt;/span&gt;&lt;/span&gt;" function. But pretty is a matter of personal taste, and from colors to array indexes to the hash separator and their default values, you can &lt;a href="http://search.cpan.org/perldoc?Data::Printer#CUSTOMIZATION"&gt;customize just about anything&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Sounds neat, but I'm not gonna type all that every time!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And you shouldn't - which is why Data::Printer looks for a file called &lt;code&gt;.dataprinter&lt;/code&gt; in your home directory and lets you keep all your preferred settings right there, so you only have to worry about it once :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Filters&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There are times when you don't really wish to see an entire object's internals during your review, just that important piece of information that you're holding in it. Data::Printer also offers you the ability to easily add filters to override any kind of data display:&lt;br /&gt;&lt;br /&gt;&lt;pre class="sh_perl sh_sourceCode"&gt;&lt;span class="sh_keyword"&gt;  use&lt;/span&gt; Data&lt;span class="sh_symbol"&gt;::&lt;/span&gt;Printer filters &lt;span class="sh_cbracket"&gt;=&amp;gt; {&lt;/span&gt;&lt;br /&gt;&lt;span class="sh_string"&gt;     'DateTime'&lt;/span&gt;      &lt;span class="sh_symbol"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="sh_keyword"&gt;sub&lt;/span&gt; &lt;span class="sh_cbracket"&gt;{&lt;/span&gt; &lt;span class="sh_variable"&gt;$_&lt;/span&gt;&lt;span class="sh_symbol"&gt;[&lt;/span&gt;&lt;span class="sh_number"&gt;0&lt;/span&gt;&lt;span class="sh_symbol"&gt;]-&amp;gt;&lt;/span&gt;ymd &lt;span class="sh_cbracket"&gt;}&lt;/span&gt;&lt;span class="sh_symbol"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span class="sh_string"&gt;     'HTTP::Request'&lt;/span&gt; &lt;span class="sh_symbol"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="sh_keyword"&gt;sub&lt;/span&gt; &lt;span class="sh_cbracket"&gt;{&lt;/span&gt; &lt;span class="sh_variable"&gt;$_&lt;/span&gt;&lt;span class="sh_symbol"&gt;[&lt;/span&gt;&lt;span class="sh_number"&gt;0&lt;/span&gt;&lt;span class="sh_symbol"&gt;]-&amp;gt;&lt;/span&gt;uri &lt;span class="sh_cbracket"&gt;}&lt;/span&gt;&lt;span class="sh_symbol"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span class="sh_cbracket"&gt;  }&lt;/span&gt;&lt;span class="sh_symbol"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;If your filters are too complex you can &lt;a href="http://search.cpan.org/perldoc?Data::Printer::Filter"&gt;create them as a separate module&lt;/a&gt; and load them by name. You can even upload them to CPAN so others can benefit from it! In fact, Data::Printer already ships with some (hopefully useful) filters for the whole DateTime family of modules (not just DateTime, but also Time::Piece and friends), and some Database ones as well (currently DBI and DBIx::Class):&lt;br /&gt;&lt;br /&gt;&lt;img src="http://2.bp.blogspot.com/-eFOC7LSmG8k/TeNOqguCP8I/AAAAAAAAAOg/Is8kKLBFkJQ/s1600/dataprinter-4.png" alt="" id="BLOGGER_PHOTO_ID_5612416052878262210" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;You can also make your classes Data::Printer-aware simply by adding a _data_printer() function to them. You don't have to add Data::Printer as a dependency at all, and it will use that function to filter your class by default instead of doing a regular dump.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;In Short...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you want to serialize/store/restore Perl data structures, this module   will NOT help you, and you should try other solutions such as the  Dumper/Dump family, &lt;a href="http://search.cpan.org/perldoc?Storable"&gt;Storable&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?JSON"&gt;JSON&lt;/a&gt;, or whatever you can find on CPAN.&lt;br /&gt;&lt;br /&gt;But if you only care about seeing what's going on inside your data structures and objects, give &lt;a href="http://search.cpan.org/perldoc?Data::Printer"&gt;Data::Printer&lt;/a&gt; a try! Oh, and if you're into REPLs, you can add it as your default &lt;a href="http://search.cpan.org/perldoc?Devel::REPL::Plugin::DataPrinter"&gt;dumper for Devel::REPL&lt;/a&gt; too =)&lt;br /&gt;&lt;br /&gt;&lt;a href="https://github.com/garu/Data-Printer"&gt;Code is on github&lt;/a&gt;. Comments, feature requests, bug reports and patches are welcome!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-3455225914101217064?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/3455225914101217064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2011/05/dataprinter-colored-pretty-printer-for.html#comment-form' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/3455225914101217064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/3455225914101217064'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2011/05/dataprinter-colored-pretty-printer-for.html' title='Data::Printer - a colored pretty printer for Perl'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-7xywnshViN8/TeM2joULxII/AAAAAAAAAOA/bl18yGGXbYM/s72-c/dataprinter-1.png' height='72' width='72'/><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-9155954503050384640</id><published>2011-05-13T17:19:00.005-03:00</published><updated>2011-05-13T17:20:46.208-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bicycle'/><category scheme='http://www.blogger.com/atom/ns#' term='workshop'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='sppw'/><category scheme='http://www.blogger.com/atom/ns#' term='ironman'/><title type='text'>The *REAL* Perl Ironmen =)</title><content type='html'>Last Saturday (May 7) there was a huge Perl event in Brazil - the &lt;a href="http://perlworkshop.com.br/"&gt;São Paulo Perl Workshop&lt;/a&gt;! It was a full-day conference with several awesome talks, featuring brilliant international keynotes like brian d foy, Brad Fitzpatrick and Larry Wall himself! The workshop also contained some of our local talent like Eden Cardim, Thiago Rondon and Solli Honório, and even talks from W3C and brazilian companies relying on Perl for their core businesses. We had around 100 attendants, making this one of the largest Perl events in the world!&lt;br /&gt;&lt;br /&gt;But here's where it really heats up: We were on the Rio Perl Mongers mailing list, calmly discussing how to get to São Paulo for the workshop - you know, renting a bus, getting on the same flight, that sort of thing - when Diogo suggested we use other, less convenient, means of transportation.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Bicycles.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, for those of you that are unfamiliar with Brazil, here's a little geography lesson. It's the 5th largest country in the world, and although in adjacent States, the distance from Rio to São Paulo is over 480km (298.3 miles), most of it UPHILL. It beats NYC to Washington DC by 150km (93 miles), Tokyo to Kyoto by 110km (68 miles), and London to Paris by over 140km (87 miles)! Of course, being a mailing list of mostly brazilian people, we all knew that already. So when Diogo tossed in the air such an absurd idea, bearing on the clinically insane, there was only one thing we could do.&lt;br /&gt;&lt;br /&gt;We said &lt;span style="font-style: italic;"&gt;"Hell, yeah!!"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There were 4 of us in total for the adventure: MDA on the "safety car", Marcio, Diogo and myself riding the bikes. Marcio is actually from São Paulo, and would come to Rio by plane with his bike only so he could ride with us!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Plan and Preparations&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A friend of mine is actually a professional trainer for a big team here in Rio, and agreed to help us get into shape and plan for the ride - granted, her wording was more in the line of "I'll do my best to help you not die", after a few minutes of screaming about how crazy we were. We only had two weeks(!!) to prepare so we'd need all the help we could get. Thanks coach!&lt;br /&gt;&lt;br /&gt;Once we started taking it really serious and got our feet back on the ground, we realized there were some problems with the journey. Thing is, even at an extremely generous 25km/h rate (did I mention most of the way is uphill?) we'd still take over &lt;span style="font-style: italic;"&gt;20 hours straight&lt;/span&gt; to reach São Paulo. That's at least two days, and unlikely to happen. Getting the friday off was not that big a deal, but there was little chance we'd all be excused for thursday too. So we decided to cycle from 7am until it got dark, at which point we'd get in the safety car and finish the travel. After all, we had a Workshop to attend ;-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Surely, nothing can go wrong! Oh, wait...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Marcio missed his flight, and had to travel by bus to Rio overnight. MDA faced a lot of traffic jams and we could only reach Marcio at the bus station by 9am. Then Marcio found out his bike's fork broke during the travel, and we had to find a place to quickly fix or replace it. With all that trouble, it was only 2pm when we finally hit the road!&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/61554145@N00/5708033448/" title="Marcio had minor bike issues, on Flickr"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer;" src="http://farm3.static.flickr.com/2077/5708033448_a04a3d8203_m.jpg" alt="Marcio had a tiny issue with his bike" height="180" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;On the highway, we started pedaling on the side of the road, and found out the hard way there were a lot of places with no "side of the road" at all! Whenever we found such places we had to get back in the car and wait until it was safe again. It was a nuisance, but no one had a death wish.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/61554145@N00/5712357319/" title="that was actually an easy one, on Flickr"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer;" src="http://farm3.static.flickr.com/2500/5712357319_5cd9022353_m.jpg" width="240" height="160" alt="that was actually an easy one"&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/61554145@N00/5707561443/" title="Warning: side of the road missing, on Flickr"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer;" src="http://farm4.static.flickr.com/3068/5707561443_e2dd767a62_m.jpg" alt="warning: side of the road missing" height="180" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;It was really scary to ride next to giant trucks and speeding cars, and to see several pieces of tire torn off from trucks on the way.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/61554145@N00/5712348833/" title="you know, kinda like this, on Flickr"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer;" src="http://farm4.static.flickr.com/3582/5712348833_522052da82_m.jpg" width="160" height="240" alt="you know, kinda like this"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;At some point we even had to quickly move to the "side of the side of the road" - whatever that means - to avoid being hit by a car traveling against the traffic, on our lane!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Conclusion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It was a 4 hour ride and, albeit exhausted, we had a lot of fun! It was a nice opportunity to exercise outdoors, see some great sights and even raise awareness of the local IT community to the Workshop and to Perl itself - there was a lot of joking around because "&lt;span style="font-style: italic;"&gt;camel&lt;/span&gt;" in portuguese is also a slang for bicycles =)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;object type="application/x-shockwave-flash" data="http://www.flickr.com/apps/video/stewart.swf?v=71377" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" height="300" width="400"&gt; &lt;param name="flashvars" value="intl_lang=en-us&amp;amp;photo_secret=ecb45c778e&amp;amp;photo_id=5707600905"&gt; &lt;param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=71377"&gt; &lt;param name="bgcolor" value="#000000"&gt; &lt;param name="allowFullScreen" value="true"&gt;&lt;embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=71377" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&amp;amp;photo_secret=ecb45c778e&amp;amp;photo_id=5707600905" height="300" width="400"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;As a reward, we got the chance to be in a great workshop with fellow Perl hackers. Now who knows, maybe this november for the &lt;a href="http://yapcbrasil.org.br"&gt;YAPC in Rio&lt;/a&gt; we'll travel back from São Paulo ;-)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/61554145@N00/5713808155/" title="the cycling team and their reward, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3114/5713808155_1dcf0ddc30.jpg" alt="the cycling team and their reward" height="375" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Oh, and if you're interested in more pics of the journey and the conference itself, &lt;a href="http://www.flickr.com/photos/61554145@N00/sets/72157626567355471/with/5712348833/"&gt;here they are&lt;/a&gt; :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-9155954503050384640?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/9155954503050384640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2011/05/real-perl-ironmen.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/9155954503050384640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/9155954503050384640'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2011/05/real-perl-ironmen.html' title='The *REAL* Perl Ironmen =)'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2077/5708033448_a04a3d8203_t.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-5071399066460514769</id><published>2011-04-30T04:29:00.000-03:00</published><updated>2011-04-30T04:29:00.055-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Catalyst'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='Example'/><category scheme='http://www.blogger.com/atom/ns#' term='DotCloud'/><category scheme='http://www.blogger.com/atom/ns#' term='Deploy'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Catalyst in the Cloud</title><content type='html'>A lot of buzz was generated recently in the Perl community after &lt;a href="http://www.dotcloud.com/"&gt;DotCloud&lt;/a&gt;, a big &lt;a href="http://en.wikipedia.org/wiki/Platform_as_a_service"&gt;PaaS&lt;/a&gt; player, introduced its &lt;a href="http://blog.dotcloud.com/dotcloud-introduces-camel-as-a-service-with-i"&gt;brand new Perl stack&lt;/a&gt;, letting developers deploy modern Perl web applications into the "Cloud" without having to worry about the underlying system at all.&lt;br /&gt;&lt;br /&gt;DotCloud already provides a nice &lt;a href="http://docs.dotcloud.com/components/perl/"&gt;Dancer example&lt;/a&gt;, and sri was diligent enough to provide a &lt;a href="http://blog.kraih.com/mojolicious-in-the-cloud-hello-dotcloud"&gt;Mojolicious example&lt;/a&gt; as soon as he got his hands on an account. So when I got my own invitation to the service, I wondered how Catalyst would stand to the challenge.&lt;br /&gt;&lt;br /&gt;After going through the whole thing in just a couple of minutes, all I can say is that:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 0);"&gt;If you were ever scared or concerned of using Catalyst due to its dependencies and how hard it would be to deploy... you're out of excuses =)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So, without further ado, here's the Catalyst DotCloud deploy process!&lt;br /&gt;&lt;br /&gt;Install the "dotcloud" app in your local machine:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;   $ sudo apt-get install python-setuptools&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;   $ sudo easy_install dotcloud&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Create a DotCloud namespace (I called it "catalyst")&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;   $ dotcloud create catalyst&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Deploy a Perl stack into that namespace:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;   $ dotcloud deploy -t perl catalyst.www&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Create a sample Catalyst app (skip if you already have one) and enter its directory:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;   $ catalyst.pl CatalystCloud&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;   $ cd CatalystCloud&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;DotCloud uses the "&lt;span style="font-family:courier new;"&gt;static&lt;/span&gt;" dir for static files, so let's create a symbolic link there for Catalyst's &lt;span style="font-style: italic;font-family:courier new;" &gt;root/static&lt;/span&gt;, or wherever else you placed your static files. There are probably other ways to customize this with DotCloud's standard configuration and its nginx server, but I just joined and haven't fiddled with any docs yet :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;   $ ln -s root/static static&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Add PSGI support for your Catalyst app. We could try the built-in FastCGI run script, but the recommended way is PSGI. To do that, simply install Catalyst::Engine::PSGI and create the new helper for your app, naming it "&lt;span style="font-family:courier new;"&gt;app.psgi&lt;/span&gt;" in your app's base directory:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;   $ cpan Catalyst::Engine::PSGI&lt;/span&gt;    (or cpanm, or whatever you like)&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;   $ script/catalystcloud_create.pl PSGI&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;     $ ln -s script/catalystcloud.psgi app.psgi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The "&lt;span style="font-family:courier new;"&gt;app.psgi&lt;/span&gt;" file needs to know how to find your app, so add a &lt;span style="font-style: italic; color: rgb(255, 102, 0);font-family:courier new;" &gt;use lib 'lib';&lt;/span&gt; statement to it, right after "&lt;span style="color: rgb(255, 102, 0); font-style: italic;font-family:courier new;" &gt;use warnings&lt;/span&gt;". The final file should look something like this (replacing "&lt;span style="font-family:courier new;"&gt;CatalystCloud&lt;/span&gt;" with your app's name, of course):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   #!/usr/bin/env perl&lt;br /&gt;   &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;use strict;&lt;/span&gt;&lt;br /&gt;           &lt;span style="font-family:courier new;"&gt;use warnings;&lt;/span&gt;&lt;br /&gt;           &lt;span style="font-family:courier new;"&gt;use lib 'lib';&lt;/span&gt;&lt;br /&gt;           &lt;span style="font-family:courier new;"&gt;use CatalystCloud;&lt;/span&gt;&lt;br /&gt;      &lt;span style="font-family:courier new;"&gt;CatalystCloud-&amp;gt;setup_engine('PSGI');&lt;br /&gt;     &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;my $app = sub { CatalystCloud-&amp;gt;run(@_) };&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Remember to add the new dependency to your app's Makefile.PL, so DotCloud knows what's required when it deploys:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   requires 'Catalyst::Engine::PSGI';&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Your application is ready; let's push it to DotCloud:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;   $ dotcloud push catalyst.www  .&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now sit back and watch as DotCloud smoothly walks through all of Catalyst's dependencies and deploys your app to the Web. Sweet!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-jCo_VPXBuUw/TbuyUUQ9udI/AAAAAAAAANM/tdI7HGxUryg/s1600/catalyst_dotcloud.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 394px;" src="http://4.bp.blogspot.com/-jCo_VPXBuUw/TbuyUUQ9udI/AAAAAAAAANM/tdI7HGxUryg/s400/catalyst_dotcloud.png" alt="" id="BLOGGER_PHOTO_ID_5601266623672334802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Once you start working on your application, remember to keep your Makefile.PL up-to-date, adding any and all dependencies to it (like Catalyst::View::TT and Catalyst::Model::DBIC::Schema). But you already do that, don't you?&lt;br /&gt;&lt;br /&gt;If you run into trouble, give "&lt;span style="font-family:courier new;"&gt;dotcloud logs catalyst.www&lt;/span&gt;" a try (again, replacing the &lt;span style="font-style: italic;"&gt;catalyst.www&lt;/span&gt; namespace with your app's) and browse through you application's logs in real time. If you left the &lt;span style="font-style: italic;"&gt;-Debug&lt;/span&gt; flag on, you can even see Catalyst's messages on the fly.&lt;br /&gt;&lt;br /&gt;Many thanks are in order to the ever-awesome &lt;a href="http://bulknews.typepad.com/"&gt;Miyagawa&lt;/a&gt; and the whole DotCloud team for making deploying Perl applications such a breeze =)&lt;br /&gt;&lt;br /&gt;Have fun!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-5071399066460514769?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/5071399066460514769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2011/04/catalyst-in-cloud.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/5071399066460514769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/5071399066460514769'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2011/04/catalyst-in-cloud.html' title='Catalyst in the Cloud'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-jCo_VPXBuUw/TbuyUUQ9udI/AAAAAAAAANM/tdI7HGxUryg/s72-c/catalyst_dotcloud.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-4100863455587034083</id><published>2011-02-25T17:17:00.004-03:00</published><updated>2011-02-25T17:17:39.497-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='sdl'/><category scheme='http://www.blogger.com/atom/ns#' term='contest'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>The SDL Perl Game Contest!</title><content type='html'>Sure, you know what &lt;a href="http://libsdl.org/"&gt;SDL&lt;/a&gt; is, right? Well, SDL has &lt;a href="http://search.cpan.org/perldoc?SDL"&gt;very nice Perl bindings&lt;/a&gt; that let you use the power and flexibility of Perl to write awesome games in no time!&lt;br /&gt;&lt;br /&gt;There's even a &lt;a href="http://sdlperl.ath.cx/releases/SDL_Manual.pdf"&gt;manual to help you get started&lt;/a&gt;, including full game tutorials and a list of free/open-source resources for your games, like sprites, sound effects and music.&lt;br /&gt;&lt;br /&gt;But by far the Coolest Game Ever&lt;span class="term"&gt;™&lt;/span&gt; is the one &lt;span style="font-weight: bold;"&gt;*you*&lt;/span&gt; write, from that silly idea you had the other day to a playable game you and your friends can enjoy.&lt;br /&gt;&lt;br /&gt;And this march, the SDL Perl team is going to help you take that project out of your dusty drawer of "TODO"s and turn it into a reality, with the &lt;span style="font-weight: bold;"&gt;SDL Perl Game Contest&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;The rules are simple, and much like the &lt;a href="http://ironman.enlightenedperl.org/"&gt;Perl Ironman&lt;/a&gt; contest:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic;"&gt;"One game per week. Every week of march."&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This means by the end of march you'll have not one, but FOUR games to show for. How cool is that?!&lt;br /&gt;&lt;br /&gt;In fact, you can even make your weekly game the subject of your Ironman posts this month, and take out two birds with one stone (hmm... more game ideas)!&lt;br /&gt;&lt;br /&gt;This monday (feb. 28), start writing your game! You have until the following monday to make it playable ("complete") and start all over again with a brand new game for the next week.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;But what if I miss a deadline? What if I can't start this monday?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It doesn't really matter - just join the party and have some fun! Even if you only get to do one game, it's still a great opportunity to improve your skills and learn a bit about game design and development.&lt;br /&gt;&lt;br /&gt;If you need any assistance writing your game, from ideas to code, WE WILL HELP! Just send an email to the SDL Perl mailing list with your questions (subscribe by sending an empty email to &lt;span style="font-style: italic;"&gt;sdl-devel-subscribe@perl.org&lt;/span&gt;, then fire your questions to &lt;span style="font-style: italic;"&gt;sdl-devel@perl.org&lt;/span&gt;) or, better yet, join us live in #sdl over at irc.perl.org and we'll be more than happy to assist you and try your game out. If you never used irc before, please keep in mind people might be busy or in different timezones than you, so you may get instant responses or have to wait a few of hours before you get a reply. Be patient!&lt;br /&gt;&lt;br /&gt;It can be a game about anything. Just make sure it's doable in a week. Some games take years to be complete, but you might be surprised at how much you can accomplish in just a few hours with SDL Perl :)&lt;br /&gt;&lt;br /&gt;Oh, there's one extra rule, actually, and that's mandatory - &lt;span style="font-weight: bold;"&gt;HAVE FUN!! :)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-4100863455587034083?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/4100863455587034083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2011/02/sdl-perl-game-contest.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/4100863455587034083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/4100863455587034083'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2011/02/sdl-perl-game-contest.html' title='The SDL Perl Game Contest!'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-1167381709363216304</id><published>2011-02-18T14:02:00.001-02:00</published><updated>2011-02-18T14:04:46.338-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='students'/><category scheme='http://www.blogger.com/atom/ns#' term='class'/><category scheme='http://www.blogger.com/atom/ns#' term='course'/><category scheme='http://www.blogger.com/atom/ns#' term='undergraduates'/><category scheme='http://www.blogger.com/atom/ns#' term='ufrj'/><category scheme='http://www.blogger.com/atom/ns#' term='training'/><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='dcc'/><title type='text'>Teaching Perl to Undergraduates</title><content type='html'>&lt;a href="http://perl.org/"&gt;Perl&lt;/a&gt; is an amazing programming language. And, with its growing worldwide re-popularization, it was an easy sell to the &lt;a href="http://dcc.ufrj.br/"&gt;Computer Science Department&lt;/a&gt; of the &lt;a href="http://ufrj.br/"&gt;Federal University of Rio de Janeiro&lt;/a&gt;, one of the best and most famous universities in Brazil, when I offered to give a free Perl summer class to the undergrads.&lt;br /&gt;&lt;br /&gt;The idea was to give students the opportunity to learn a new language, presenting the concepts, structure, best practices and design patterns of modern Perl 5. It was also my response to seeing so many companies here complaining about the lack of Perl developers, forcing them to use other languages even when Perl would be the best alternative for them.&lt;br /&gt;&lt;br /&gt;And what a huge success it was!&lt;br /&gt;&lt;br /&gt;The course was given by &lt;a href="http://brunobuss.wordpress.com/"&gt;Bruno Buss&lt;/a&gt; and myself, with me doing the talk  and him preparing and giving exercises to the students and helping them with their code. At first we were hoping to get about 10 students interested, specially since we didn't have time to advertise the summer class at all. In fact, due to uncontrollable events, we could only confirm it and open registration two weeks before the class itself started. Even so, we decided to carry on with it. Later that night I got a message from Buss: &lt;span style="font-style: italic;"&gt;"we're gonna need a bigger room"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Turns out that in less than 24 hours we already had over 25 undergrad students registered for the course! We kept registration open as a waiting list, since we couldn't find an available lab with more than 25 PCs in such a short timeframe. A day before the beginning of the class there were &lt;span style="font-weight: bold;"&gt;over 50 students&lt;/span&gt; applying for a spot, even though they already &lt;span style="font-weight: bold;"&gt;knew&lt;/span&gt; the class was full!&lt;br /&gt;&lt;br /&gt;And this is Perl competing against student vacations, during summer, in Rio.&lt;br /&gt;&lt;br /&gt;The course was one week long, from 1pm to 5pm (yes, we had to compensate $dayjob during nighttime, but it was well worth it). Slides for all 5 days are available. It's mostly Perl, with a little Portuguese here and there like variable names, values and complementary information whenever necessary. Here's what we covered:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Day 1 (&lt;/span&gt;&lt;a style="font-style: italic;" href="http://www.slideshare.net/garux/perl-moderno-dia1"&gt;slides&lt;/a&gt;&lt;span style="font-style: italic;"&gt;) -&lt;/span&gt; What's Perl all about; how to use &lt;a href="http://perldoc.perl.org/"&gt;perldoc&lt;/a&gt;; the modern and safe header (use 5.12.3; use warnings); basic I/O; scalar variables; manipulating numbers and strings; conditionals; loops; and file I/O, with &lt;a href="http://search.cpan.org/perldoc?autodie"&gt;autodie&lt;/a&gt; to capture exceptions. We also spoke about the &lt;a href="http://pm.org/"&gt;Perl community&lt;/a&gt;, showed off a bit of &lt;a href="http://padre.perlide.org/"&gt;Padre, the Perl IDE&lt;/a&gt;, and encouraged students to use &lt;a href="http://modernperlbooks.com/"&gt;chromatic&lt;/a&gt;'s brilliant "Modern Perl" &lt;a href="http://www.onyxneon.com/books/modern_perl/"&gt;book&lt;/a&gt; as reference material.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Day 2 (&lt;/span&gt;&lt;a style="font-style: italic;" href="http://www.slideshare.net/garux/perl-moderno-dia2"&gt;slides&lt;/a&gt;&lt;span style="font-style: italic;"&gt;) -&lt;/span&gt; Running external programs; arrays (and how to manipulate them); hashes (and how to manipulate them); scalar x list x void context. That, and lots of exercises to fixate what they learned so far.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Day 3 (&lt;/span&gt;&lt;a style="font-style: italic;" href="http://www.slideshare.net/garux/perl-moderno-dia3"&gt;slides&lt;/a&gt;&lt;span style="font-style: italic;"&gt;) -&lt;/span&gt; References; building complex data structures; functions (subroutines); stack traces with &lt;a href="http://search.cpan.org/perldoc?carp"&gt;Carp&lt;/a&gt; and &lt;a href="http://search.cpan.org/perldoc?Carp::Always"&gt;Carp::Always&lt;/a&gt;; and retrieving command line arguments with &lt;a href="http://search.cpan.org/perldoc?Getopt::Long"&gt;Getopt::Long&lt;/a&gt;. While explaining anonymous subs we also mentioned/demonstrated closures and state variables, but didn't really get into it as it was a beginners class. The day ended with an explanation of Perl's sweetheart, the &lt;a href="http://search.cpan.org/"&gt;CPAN&lt;/a&gt;. We showed students not only how to install modules (with &lt;a href="http://search.cpan.org/perldoc?local::lib"&gt;local::lib&lt;/a&gt;), but included an explanation of the full CPAN stack, including &lt;a href="http://search.metacpan.org/"&gt;web search&lt;/a&gt;, CPAN &lt;a href="http://static.cpantesters.org/"&gt;Testers&lt;/a&gt;, &lt;a href="http://deps.cpantesters.org/"&gt;Deps&lt;/a&gt;, &lt;a href="http://cpanratings.perl.org/"&gt;Ratings&lt;/a&gt; and &lt;a href="https://rt.cpan.org/"&gt;Bug/Request Tracking&lt;/a&gt;. We also discussed how to exploit those features (and other common tips) to pick a good module (and, of course, &lt;a href="http://search.cpan.org/perldoc?Task::Kensho"&gt;Task::Kensho&lt;/a&gt;).&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Day 4 (&lt;/span&gt;&lt;a style="font-style: italic;" href="http://www.slideshare.net/garux/perl-moderno-dia4"&gt;slides&lt;/a&gt;&lt;span style="font-style: italic;"&gt;) -&lt;/span&gt; Regular expessions; how to create modules and &lt;a href="http://search.cpan.org/perldoc?Exporter"&gt;export&lt;/a&gt; functions; and more CPAN goodies, including &lt;a href="http://search.cpan.org/perldoc?Capture::Tiny"&gt;Capture::Tiny&lt;/a&gt; to properly retrieve the output of external programs (and pretty much everything else); &lt;a href="http://search.cpan.org/perldoc?Try::Tiny"&gt;Try::Tiny&lt;/a&gt; to capture exceptions; &lt;a href="http://search.cpan.org/perldoc?DateTime"&gt;DateTime&lt;/a&gt; to handle, well, dates and times; &lt;a href="http://search.cpan.org/perldoc?Path::Class"&gt;Path::Class&lt;/a&gt; to manipulate files and dirs; &lt;a href="http://search.cpan.org/perldoc?Config::Any"&gt;Config::Any&lt;/a&gt; and &lt;a href="http://search.cpan.org/perldoc?Log::Log4perl"&gt;Log::Log4perl&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Day 5 (&lt;/span&gt;&lt;a style="font-style: italic;" href="http://www.slideshare.net/garux/perl-moderno-dia-5"&gt;slides&lt;/a&gt;&lt;span style="font-style: italic;"&gt;) -&lt;/span&gt; &lt;a href="http://perldoc.perl.org/perlpod.html"&gt;Plain old documentation&lt;/a&gt;; writing &lt;a href="http://search.cpan.org/perldoc?Test::More"&gt;tests&lt;/a&gt;; &lt;a href="http://perlcritic.com/"&gt;Perl Critic&lt;/a&gt;; &lt;a href="http://search.cpan.org/perldoc?Perl::Tidy"&gt;Perl Tidy&lt;/a&gt;; Object Orientation (&lt;a href="http://search.cpan.org/perldoc?Moose"&gt;Moose&lt;/a&gt; only, including meta - I only mentioned bless as a curiosity, while explaining what happens under the hood); databases (nothing fancy, just plain &lt;a href="http://search.cpan.org/perldoc?DBI"&gt;DBI&lt;/a&gt; with a strong encouragement towards ORMs like &lt;a href="http://search.cpan.org/perldoc?DBIx::Class"&gt;DBIx::Class&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Rose::DB::Object"&gt;Rose::DB::Object&lt;/a&gt;&lt;a href="http://search.cpan.org/perldoc?Fey::ORM"&gt;Fey::ORM&lt;/a&gt;); Web Crawling with &lt;a href="http://search.cpan.org/perldoc?WWW::Mechanize"&gt;WWW::Mechanize&lt;/a&gt; and &lt;a href="http://search.cpan.org/perldoc?Mojo::Client"&gt;Mojo::Client&lt;/a&gt;; and Web development with &lt;a href="http://mojolicio.us/"&gt;Mojolicious::Lite&lt;/a&gt;, while also heavily encouraging them to try out &lt;a href="http://catalystframework.org/"&gt;Catalyst&lt;/a&gt; in their own time.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Students were mostly from Computer Science, with around 6 of them being  from Biology/Biophysics/Bioinformatics, and one or two from Electric  Engineering and Applied Mathematics. In the end, there were 27  undergrads. Yes, 27. It was very rewarding to see 2 booted students showing up anyway, with their laptops, asking if they could sit on the back and participate. Of course they could :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-1167381709363216304?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/1167381709363216304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2011/02/teaching-perl-to-undergraduates.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/1167381709363216304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/1167381709363216304'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2011/02/teaching-perl-to-undergraduates.html' title='Teaching Perl to Undergraduates'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-2723197714042249155</id><published>2010-12-27T07:01:00.002-02:00</published><updated>2010-12-27T16:48:11.831-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bugzilla'/><category scheme='http://www.blogger.com/atom/ns#' term='moose'/><category scheme='http://www.blogger.com/atom/ns#' term='dancer'/><category scheme='http://www.blogger.com/atom/ns#' term='starman'/><category scheme='http://www.blogger.com/atom/ns#' term='perlbal'/><category scheme='http://www.blogger.com/atom/ns#' term='2010 retrospective'/><category scheme='http://www.blogger.com/atom/ns#' term='duckduckgo'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='blekko'/><category scheme='http://www.blogger.com/atom/ns#' term='perlbrew'/><category scheme='http://www.blogger.com/atom/ns#' term='tpf'/><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='lacuna'/><category scheme='http://www.blogger.com/atom/ns#' term='cpanm'/><category scheme='http://www.blogger.com/atom/ns#' term='Mojolicious'/><category scheme='http://www.blogger.com/atom/ns#' term='rakudo'/><category scheme='http://www.blogger.com/atom/ns#' term='sdl'/><title type='text'>A 2010 filled with Perls</title><content type='html'>2010 is almost over, and I figured it's time for a retrospective of yet another awesome year for the Perl programming language and its worldwide communities. I tried making this list as complete as possible, but it's of course my own point of view, so feel free to add anything you feel I've missed on the comments below, or in your own blog post.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;So, without further ado, here are (my) highlights of the Perl world in 2010!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;January&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The year started with &lt;a href="http://www.perloasis.info/opw2010"&gt;Perl Oasis&lt;/a&gt;, the traditional conference in Florida, USA, in a full day packed with great talks!&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://2010.perlbulgaria.org/"&gt;Bulgarian Perl Workshop&lt;/a&gt; in Sofia also had some very nice practical talks about modern Perl topics.&lt;br /&gt;&lt;br /&gt;Viacheslav Tykhanovskyi released &lt;a href="http://search.cpan.org/perldoc?Text::Haml"&gt;Text::Haml&lt;/a&gt;, a Perl renderer for the increasingly popular &lt;a href="http://haml-lang.com/"&gt;Haml templates&lt;/a&gt; born in the Ruby/Rails world. The popularity is spreading fast, and there are already views for it in &lt;a href="http://search.cpan.org/perldoc?Catalyst::View::Haml"&gt;Catalyst&lt;/a&gt;, &lt;a href="http://search.cpan.org/dist/MojoX-Renderer-Haml/"&gt;Mojolicious&lt;/a&gt; and &lt;a href="http://search.cpan.org/perldoc?Dancer::Template::Haml"&gt;Dancer&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;February&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.frozen-perl.org/mpw2010/"&gt;Frozen Perl&lt;/a&gt;, a three-day event in Minnesota, USA, this year also had two Perl classes and a hackathon. Very nice!&lt;br /&gt;&lt;br /&gt;On the other side of the world, the &lt;a href="http://2010.perlrussia.org/perlburg"&gt;Perlburg Workshop&lt;/a&gt; in Yekaterinburg, Russia, was also packed with talks on several modern Perl topics.&lt;br /&gt;&lt;br /&gt;The first version of &lt;a href="http://search.cpan.org/perldoc?perlbrew"&gt;perlbrew&lt;/a&gt; was released! What an amazing tool by Kang-min Liu, letting you manage several different perl installations in your home dir. Feels like forever, right?&lt;br /&gt;&lt;br /&gt;How about &lt;a href="http://search.cpan.org/perldoc?cpanm"&gt;cpanm&lt;/a&gt;, yet another incredible miyagawa-ware, proving to be an excellent lightweight alternative for installing Perl modules. It also made its debut to CPAN in February, and now you can even do &lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;font-family:courier new;" &gt;curl -L http://cpanmin.us | perl - $MODULE&lt;/span&gt;&lt;/span&gt;. Soo sexy!&lt;br /&gt;&lt;br /&gt;Tools like these two and &lt;a href="http://search.cpan.org/perldoc?local::lib"&gt;local::lib&lt;/a&gt; make us wonder how did we live before them :-)&lt;br /&gt;&lt;br /&gt;In fact, speaking of Miyagawa, man was he on fire or what this month?! February also marked the release of &lt;a href="http://search.cpan.org/perldoc?Starman"&gt;Starman&lt;/a&gt;, a high-performance preforking PSGI/Plack web server. It fits so nicely it's now used in production everywhere.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Last but most certainly not least, David Mitchell &lt;a href="http://news.perlfoundation.org/2010/02/grant-proposal-fixing-perl5-co.html"&gt;submitted a grant &lt;/a&gt;proposal to &lt;a href="http://perlfoundation.org/"&gt;The Perl Foundation&lt;/a&gt;, to fix bugs in core Perl 5. It was a huge success, and over the year he worked for more than 500 hours and closed 127(!!) tickets.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;March&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://conferences.yapceurope.org/hack2010dk/"&gt;Perl 6 Hackathon&lt;/a&gt; in Copenhagen, Denmark, raised &lt;a href="http://4.bp.blogspot.com/_Zg_F9liESSo/TReSQ7GTO-I/AAAAAAAAAJQ/t7TtJM47Ejw/s1600/camelia-logo-small.png"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 120px; height: 111px;" src="http://4.bp.blogspot.com/_Zg_F9liESSo/TReSQ7GTO-I/AAAAAAAAAJQ/t7TtJM47Ejw/s200/camelia-logo-small.png" alt="" id="BLOGGER_PHOTO_ID_5555069484824476642" border="0" /&gt;&lt;/a&gt;a lot of awareness around &lt;a href="http://perl6.org/"&gt;Perl 6&lt;/a&gt;, showed practical examples and offered a hands-on experience to all attendants.&lt;br /&gt;&lt;br /&gt;Perl also made a huge appearance in Germany at &lt;a href="http://www.cebit.de/"&gt;CeBIT&lt;/a&gt;, the world's largest computer expo, showcasing modern Perl solutions like &lt;a href="http://www.iinteractive.com/moose/"&gt;Moose&lt;/a&gt;, &lt;a href="http://www.catalystframework.org/"&gt;Catalyst&lt;/a&gt; and &lt;a href="http://search.cpan.org/perldoc?DBIx::Class"&gt;DBIx::Class&lt;/a&gt; to over 8000 individual developers and companies from all around the globe, not to mention products such as &lt;a href="http://foswiki.org/"&gt;Foswiki&lt;/a&gt;, and &lt;a href="http://otrs.org/"&gt;OTRS&lt;/a&gt;. Nice marketing, &lt;a href="http://search.cpan.org/perldoc?Perl::Staff"&gt;Perl::Staff&lt;/a&gt;! :-)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.iinteractive.com/moose/"&gt;Moose&lt;/a&gt; 1.0 was released to the world! Now, I know Moose has been stable and production ready for a few years now, being the &lt;span style="font-style: italic;"&gt;de-facto&lt;/span&gt; way to create and manipulate objects in modern Perl, and the only reason 1.0 was released was because they ran out of two-digit numbers. Either way, it looks nice and might make some enterprise people subconsciously more comfortable using it ;-)&lt;br /&gt;&lt;br /&gt;March is the month of the first Equinox of the year, and the São Paulo Perl Mongers in Brazil celebrated the date with a &lt;a href="http://sao-paulo.pm.org/artigos"&gt;calendar&lt;/a&gt; of Perl articles in portuguese, contributed by developers all over the country, just like the traditional advent calendars in december.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;April&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.perl.org/get.html"&gt;Perl 5 release 12&lt;/a&gt; was finally out of the oven! And what a great improvement it was, with default strictness, Unicode overhaul, Y2038 compliance, pluggable keywords, and much more!&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://2010.qa-hackathon.org/qa2010/wiki"&gt;Perl QA Hackathon&lt;/a&gt; in Vienna, Austria, gathered around 30 people in 3 full days of intense (and happy!) hacking, culminating in several improvements on the already great Quality Assurance tools for Perl, including &lt;a href="http://search.cpan.org/perldoc?Devel::Cover"&gt;Devel::Cover&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Test::Smoke"&gt;Test::Smoke&lt;/a&gt; and &lt;a href="http://search.cpan.org/perldoc?Test::Harness"&gt;Test::Harness&lt;/a&gt;.&lt;a href="http://1.bp.blogspot.com/_Zg_F9liESSo/TRgUeMsOC9I/AAAAAAAAAJY/Cho1DwDRFgI/s1600/Buggie_new.png"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 95px; height: 125px;" src="http://1.bp.blogspot.com/_Zg_F9liESSo/TRgUeMsOC9I/AAAAAAAAAJY/Cho1DwDRFgI/s200/Buggie_new.png" alt="" id="BLOGGER_PHOTO_ID_5555212649396833234" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bugzilla.org/"&gt;Bugzilla&lt;/a&gt; 3.6 was released, offering exciting new features for users and administrators, including migration tools, a simple "Browse" interface, lots of usability improvements and &lt;a href="https://wiki.mozilla.org/Bugzilla:Addons#Bugzilla_Extensions"&gt;drop-in extensions&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Josheph Hall and brian d foy did it again, and the second edition of Effective Perl Programming is better than ever, showing real problems and real solutions, just like the &lt;a href="http://www.effectiveperlprogramming.com/"&gt;companion website&lt;/a&gt;. What are you waiting for, go &lt;a href="http://www.amazon.com/gp/product/0977920151?ie=UTF8&amp;amp;tag=onyneopre-20"&gt;get it now&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://xslate.org/"&gt;unbelievably fast Text::Xslate&lt;/a&gt; templating system by Goro Fuji was released on an unsuspecting world. It's up to 158X faster (!!) than everyone's favorite &lt;a href="http://template-toolkit.org/"&gt;Template::Toolkit&lt;/a&gt;, and provides a compatibility layer letting you use &lt;a href="http://search.cpan.org/perldoc?Text::Xslate::Syntax::TTerse"&gt;TT2's syntax&lt;/a&gt; and &lt;a href="http://search.cpan.org/perldoc?Text::Xslate::Bridge::TT2Like"&gt;virtual methods&lt;/a&gt; if you want. Also, there are already views available for your &lt;a href="http://search.cpan.org/perldoc?Catalyst::View::Xslate"&gt;Catalyst&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Mojolicious::Plugin::Xslate"&gt;Mojolicious&lt;/a&gt; and &lt;a href="http://search.cpan.org/perldoc?Dancer::Template::Xslate"&gt;Dancer&lt;/a&gt; web apps.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;May&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://devconf.ru/"&gt;DevConf&lt;/a&gt;, a major conference in Russia gathering over a thousand professional web developers, had a &lt;a href="http://devconf.ru/perl"&gt;full track just for Perl&lt;/a&gt;!. And of course, the Russian Perl Community was amazing as usual and provided several nice talks for &lt;a href="http://devconf.ru/perl"&gt;DevConf::Perl&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;June&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Wow, this month was filled with Perl conferences! &lt;a href="http://workshop.perl.pt/ptpw2010/"&gt;Portuguese Perl Workshop&lt;/a&gt;, &lt;a href="http://conferences.yapceurope.org/gpw2010/"&gt;German Perl Workshop&lt;/a&gt;, &lt;a href="http://www.perlworkshop.be/bpw2010/"&gt;Belgian Perl Workshop&lt;/a&gt;, each of them filled with nice talks and courses.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://social.yapcrussia.org/yr2010/"&gt;YAPC::Russia&lt;/a&gt; this year happened in Kiev together with Perl Mova, the Ukrainian Perl Workshop, and was another huge success.&lt;br /&gt;&lt;br /&gt;And speaking of huge successes, June is not over until after &lt;a href="http://yapc2010.com/"&gt;YAPC::NA&lt;/a&gt;. The greatest Perl conference in the Americas happened for a full week in Ohio, USA, and had over 130 talks!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;July&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Following the mid-year sprint of Perl events, we also had the São Paulo Perl Workshop in Brazil, and the &lt;a href="http://warszawa.linux.org.pl/"&gt;Warsaw Perl Workshop&lt;/a&gt; in Poland.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://rakudo.org/"&gt;Rakudo Star&lt;/a&gt; was released! It's a useful - and usable! - implementation of the Perl 6 language specification.&lt;br /&gt;&lt;br /&gt;Goro Fuji released the first version of &lt;a href="http://search.cpan.org/perldoc?Text::Clevery"&gt;Text::Clevery&lt;/a&gt;, a Text::Xslate subclass allowing developers using &lt;a href="http://www.smarty.net/"&gt;PHP's Smarty&lt;/a&gt; template syntax.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_Zg_F9liESSo/TRgVYvDBVNI/AAAAAAAAAJg/Iq5DZTKohjU/s1600/Duck.duck.go.png"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 107px; height: 104px;" src="http://2.bp.blogspot.com/_Zg_F9liESSo/TRgVYvDBVNI/AAAAAAAAAJg/Iq5DZTKohjU/s200/Duck.duck.go.png" alt="" id="BLOGGER_PHOTO_ID_5555213655051687122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Gabriel Weinberg released DuckDuckGo's &lt;a href="http://duck.co/"&gt;community website&lt;/a&gt;. I already &lt;a href="http://onionstand.blogspot.com/2010/07/duckduckgo-fast-and-awesome-web-search.html"&gt;wrote&lt;/a&gt; a bit about the amazing (and amazingly fast) &lt;a href="http://duckduckgo.com/"&gt;DuckDuckGo search engine&lt;/a&gt;, and if you never used it, now is the perfect time. But beware: you might never return to Google search. I know I haven't ;-)&lt;br /&gt;&lt;br /&gt;July also marked the second birthday of &lt;a href="http://padre.perlide.org/"&gt;Padre, the Perl IDE&lt;/a&gt;. For a whole weekend, Padre developers, users, friends and well-wishers joined a huge party and hackathon.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://softwarelivre.org/fisl11"&gt;FISL 11&lt;/a&gt;, the largest opensource event in Latin America, gathered over 7000 developers, enthusiasts and companies in Porto Alegre, Brazil. We had a very busy Perl stand there, and made a contest on the conference's big screen of an &lt;a href="http://search.cpan.org/perldoc?Games::Zumbis"&gt;arcade zombie game&lt;/a&gt; developed live during the conference using SDL Perl. It was lots of fun!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;August&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://conferences.yapceurope.org/ye2010/"&gt;YAPC::EU&lt;/a&gt;, &lt;span style="font-style: italic;"&gt;"The Renaissance of Perl"&lt;/span&gt;, joined Perl developers from all over the world in Pisa, Italy, with over 100 amazing talks and 14 tracks! They even had a &lt;a href="http://conferences.yapceurope.org/ye2010/news/639"&gt;cooking contest&lt;/a&gt; after the conference =P&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;September&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.perl.org/users/jt_smith/"&gt;JT Smith&lt;/a&gt; and crew released &lt;a href="http://www.lacunaexpanse.com/"&gt;Lacuna Expanse&lt;/a&gt;, a highly addictive free massive multiplayer online (MMO) deep space empire strategy simulator (phew!) written in Modern Perl. It also has a public API, and people even hacked a new &lt;a href="https://github.com/tsee/Games-Lacuna-Client"&gt;client for automated tasks&lt;/a&gt;. If you haven't played it yet, do it. Now. It's even integrated to Facebook, so if you have an account there, you don't even need to create a login.&lt;br /&gt;&lt;br /&gt;Speaking of games, &lt;a href="https://github.com/PerlGameDev/SDL_Manual"&gt;SDL Manual&lt;/a&gt; was started by Kartik Thakore in yet another grant by The Perl Foundation. It's not done yet, but it's the first real documentation of the new API, and already contains tons of code examples and complete game tutorials in Perl.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;October&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This month we had not one, but two other YAPCs!&lt;br /&gt;&lt;br /&gt;The ever great &lt;a href="http://yapcasia.org/2010/"&gt;YAPC::Asia&lt;/a&gt; in Tokyo went along for 3 days filled with the most awesome talks, and broke a new record: over 500 attendants!! How cool is that?!&lt;br /&gt;&lt;br /&gt;On the other side of the world, &lt;a href="http://www.yapcbrasil.org.br/2010/"&gt;YAPC::Brazil&lt;/a&gt; made its second appearance as a standalone conference in the beautiful city of Fortaleza, with around 100 of people attending online and on-site.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://search.cpan.org/perldoc?Facebook"&gt;Facebook SDK distribution&lt;/a&gt; was revived by Torsten Raudssus, giving a better overview on how to dive into the Facebook platform using the long existing modules to access the Facebook API via &lt;a href="http://search.cpan.org/perldoc?Facebook::Graph"&gt;Graph&lt;/a&gt; or &lt;a href="http://search.cpan.org/perldoc?WWW::Facebook::API"&gt;REST&lt;/a&gt;. Many Perl developers are active in social networks (&lt;a href="http://search.cpan.org/perldoc?Net::Twitter"&gt;writing robots for Twitter&lt;/a&gt; is a real breeze with modern Perl), so if you missed it now is the perfect time to get on board ;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;November&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.blekko.com/"&gt;Blekko search engine&lt;/a&gt; was released, offering a neat &lt;span style="font-style: italic;"&gt;/slashtag&lt;/span&gt; syntax that lets you get the most relevant results in a heartbeat. It's great to see so many new companies relying on modern Perl for their core businesses. Give it a try, and slash the web!&lt;br /&gt;&lt;br /&gt;Following the events calendar, the &lt;a href="http://2010.useperl.at/apw2010/"&gt;Austrian Perl Workshop&lt;/a&gt; opened&lt;a href="http://4.bp.blogspot.com/_Zg_F9liESSo/TQulXjiIoWI/AAAAAAAAAJA/ptej0eWz5qY/s1600/npw.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; width: 124px; float: right; height: 165px; cursor: pointer;" id="BLOGGER_PHOTO_ID_5551712789758255458" alt="" src="http://4.bp.blogspot.com/_Zg_F9liESSo/TQulXjiIoWI/AAAAAAAAAJA/ptej0eWz5qY/s400/npw.png" border="0" /&gt;&lt;/a&gt; november with a 2-day conference filled with great talks.&lt;br /&gt;&lt;br /&gt;There was also &lt;a href="http://conferences.yapceurope.org/npw2010/"&gt;Nordic Perl Workshop&lt;/a&gt;, organized by the Icelandic Society For Digital Freedoms in Reykjavik. It's the first time the NPW is held in Iceland, proving that &lt;a href="https://secure.wikimedia.org/wikipedia/en/wiki/2010_eruptions_of_Eyjafjallaj%C3%B6kull"&gt;volcanic eruptions&lt;/a&gt; may shut down an entire continent's airspace, but the camels will just keep strolling like it's a morning fog ;-)&lt;br /&gt;&lt;br /&gt;With the second Equinox of the year, the São Paulo Perl Mongers arranged another sprint of modern Perl articles in portuguese, written by the entire Brazilian community.&lt;br /&gt;&lt;br /&gt;Finally, after a lot of expectation from the worldwide Perl community, chromatic's &lt;a href="http://www.onyxneon.com/books/modern_perl/index.html"&gt;Modern Perl book&lt;/a&gt; was finally out! As far as I can tell it's the best reference for modern Perl coding today, and an excellent read. I honestly think it's an amazing learning and reference material, and might prove insightful even to the most seasoned programmer. So &lt;a href="http://www.amazon.com/gp/product/0977920151?ie=UTF8&amp;amp;tag=onyneopre-20"&gt;go buy it now&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;December&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The always amazing &lt;a href="http://conferences.yapceurope.org/lpw2010/"&gt;London Perl Workshop&lt;/a&gt; happened on the 4th and proved once again to be an enormous success, including a talk by Spiros Denaxas about how Perl was used in medical research and epidemiology to help cure coronary heart disease.&lt;br /&gt;&lt;br /&gt;On the 18th - &lt;a href="http://perl.org/"&gt;Perl&lt;/a&gt;'s birthday! - there was the &lt;a href="http://event.perlrussia.org/saintperl2/"&gt;Sixth Russian Perl Workshop, Saint Perl 2&lt;/a&gt;, in the lovely St. Petersburg, also filled with talks in Russian and English for all audiences, for free.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="https://github.com/cog/perlbaldoc/"&gt;Perlbal::Manual&lt;/a&gt;, a complete manual for the highly used &lt;a href="http://www.danga.com/perlbal/"&gt;Perlbal reverse proxy and load balancer&lt;/a&gt;, was published by Bruno Martins and José Castro. Yay!&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://search.cpan.org/perldoc?Mojolicious"&gt;Mojolicious&lt;/a&gt; 1.0 was finally released, and it really makes web development fun - specially &lt;a href="http://search.cpan.org/perldoc?Mojolicious::Lite"&gt;Mojolicious::Lite&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Speaking of fun lite web frameworks, the &lt;a href="http://advent.perldancer.org/2010"&gt;Dancer Advent Calendar&lt;/a&gt; made its debut this year, with several articles teaching you how to do things with &lt;a href="http://search.cpan.org/perldoc?Dancer"&gt;Dancer&lt;/a&gt;, from testing and managing database connections to creating a tiny blog!&lt;br /&gt;&lt;br /&gt;All other already traditional &lt;a href="http://www.perladvent.org/2010/"&gt;Perl&lt;/a&gt;, &lt;a href="http://perl6advent.wordpress.com/"&gt;Perl6&lt;/a&gt;, &lt;a href="http://www.catalystframework.org/calendar/2010"&gt;Catalyst&lt;/a&gt;, &lt;a href="http://advent.rjbs.manxome.org/2010/"&gt;RJBS&lt;/a&gt;'s, and &lt;a href="http://perl-users.jp/articles/advent-calendar/2010/"&gt;JPerl&lt;/a&gt; Advent Calendars are most definitively praise-worthy and were responsible for over 300(!!) new articles on Perl and its modules, with tons of awesome tips and cookbooks &lt;span style="font-weight: bold;"&gt;this month only&lt;/span&gt;! In fact, the Japanese Perl community is so freaking amazing they had 8 (that's right, EIGHT) tracks on their Advent Calendar, so JPerl alone was responsible for 200 articles this month. &lt;span style="font-size:78%;"&gt;すごい!!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Wow, so much in just a year! I can't even begin to imagine all the wonderful things that are going to pop up in 2011!&lt;br /&gt;&lt;br /&gt;See you there :-)&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-2723197714042249155?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/2723197714042249155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2010/12/2010-filled-with-perls.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/2723197714042249155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/2723197714042249155'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2010/12/2010-filled-with-perls.html' title='A 2010 filled with Perls'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Zg_F9liESSo/TReSQ7GTO-I/AAAAAAAAAJQ/t7TtJM47Ejw/s72-c/camelia-logo-small.png' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-2732963663141130674</id><published>2010-10-06T17:38:00.001-03:00</published><updated>2010-10-06T17:38:14.252-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lacuna expanse'/><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='xkcd'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Perl and Online Communities</title><content type='html'>Today, the ever amazing &lt;a href="http://xkcd.com/"&gt;xkcd&lt;/a&gt; released a new &lt;a href="http://xkcd.com/802/"&gt;map of online communities&lt;/a&gt;. Until last year or so, most of the Perl community resided on "email land". Granted, it's a huge place, but not so pretty, and foreigners probably needed a visa to enter - or at least someone inside to give you &lt;a href="http://lists.perl.org/"&gt;directions&lt;/a&gt; and keep you &lt;a href="http://catb.org/%7Eesr/faqs/smart-questions.html"&gt;out of trouble&lt;/a&gt;. Oh, we also have our cozy and warm "&lt;a href="http://www.irc.perl.org/"&gt;irc isles&lt;/a&gt;", but let's face it: it's not that big an empire.&lt;br /&gt;&lt;br /&gt;Then the &lt;a href="http://ironman.enlightenedperl.org/"&gt;Ironman Challenge&lt;/a&gt; came, and people followed. Or, rather, blogged. And what a great thing it is! Our brave explores went out of their comfort zones and right into the blogosphere core, planting the camel flag and claiming more ground for Perl.&lt;br /&gt;&lt;br /&gt;Lots of us also settled on the huge &lt;a href="http://twitter.com/#search?q=%23perl"&gt;Twitter continent&lt;/a&gt;, showcasing Perl to contacts and followers. Others have decided to head north and are now bravely fighting the flames of &lt;a href="http://www.reddit.com/"&gt;Reddit&lt;/a&gt;, &lt;a href="http://digg.com"&gt;Digg&lt;/a&gt; and several other web forums, getting more and more Perl news out of the annoying old myths and into the &lt;a href="https://secure.wikimedia.org/wikipedia/en/wiki/Slashdot_effect"&gt;Slashdot effect&lt;/a&gt; - and what a nice bootstrapping this is, being that &lt;a href="http://slashdot.org/"&gt;Slashdot&lt;/a&gt; itself is &lt;a href="http://www.slashcode.com/"&gt;written in Perl&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;What lies ahead? Right now, the great (and greatly addictive) &lt;a href="http://lacunaexpanse.com"&gt;Lacuna Expanse&lt;/a&gt; game is taking Modern Perl straight right into the "MMO Isle", where I'm sure very nice things await. It's the new land of opportunity for Perl apps. And it's already integrated to &lt;a href="http://www.facebook.com/pages/perl/16665510298"&gt;Facebook&lt;/a&gt;, another promising shore for the Perl programming language and its ever growing community.&lt;br /&gt;&lt;br /&gt;Now if you excuse me, I have a Spy Pod waiting to be launched against the evil Perigrin's Estate. Erm, I mean... work, yeah. ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-2732963663141130674?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/2732963663141130674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2010/10/perl-and-online-communities.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/2732963663141130674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/2732963663141130674'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2010/10/perl-and-online-communities.html' title='Perl and Online Communities'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-5407874403957784649</id><published>2010-10-06T13:39:00.001-03:00</published><updated>2010-10-06T13:39:00.797-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dreamhost hosting perl'/><title type='text'>One Click Installers for Perl Web Apps on Dreamhost</title><content type='html'>Love it or hate it, &lt;a href="http://www.dreamhost.com/"&gt;Dreamhost&lt;/a&gt; is one of the most popular web hosting services out there. One of the reasons is their one-click install feature, letting people install opensource software for their web publishing needs like &lt;a href="http://wordpress.org/"&gt;Wordpress&lt;/a&gt;, &lt;a href="http://www.mediawiki.org/wiki/MediaWiki"&gt;MediaWiki&lt;/a&gt;, &lt;a href="http://trac.edgewall.org/"&gt;Trac&lt;/a&gt;, &lt;a href="http://drupal.org/"&gt;Drupal&lt;/a&gt; and &lt;a href="http://wiki.dreamhost.com/Available_One_Click_Installs"&gt;several others&lt;/a&gt;, automatically.&lt;br /&gt;&lt;br /&gt;Now it's our chance to add some Perl apps there too! If you are part of an app's community, Dreamhost created a &lt;a href="http://www.dreamhost.com/hosting-oneclick-installer-submitter.cgi"&gt;"One-click installer" submitter form for developers&lt;/a&gt;, where you can add your app up for evaluation. In their own words, it's &lt;span style="font-style: italic;"&gt;"a unique chance to get some great exposure; thousands of DreamHost customers would see it every day!"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;How about it, then? &lt;a href="http://movabletype.org/"&gt;MovableType&lt;/a&gt;? &lt;a href="http://openmelody.org/"&gt;Melody&lt;/a&gt;? &lt;a href="http://mojomojo.org/"&gt;MojoMojo&lt;/a&gt;? From what I can tell, everyone is welcome - just fill the form (you will need to provide a contact email) and cross your fingers :)&lt;br /&gt;&lt;br /&gt;And if you really want to get to them, it appears they are starting an experimental program with all the developers using Dreamhost. Just sign in their &lt;a href="http://developer.dreamhost.com/"&gt;developer mailing list&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;What I would really want to see from Dreamhost is &lt;a href="http://www.catalystframework.org/"&gt;Catalyst&lt;/a&gt; already installed - or at least a lighter/simpler framework like &lt;a href="http://mojolicious.org/"&gt;Mojolicious/Mojolicious::Lite&lt;/a&gt; or &lt;a href="http://perldancer.org/"&gt;Dancer&lt;/a&gt;. They already come with &lt;a href="http://wiki.dreamhost.com/Ruby_on_Rails"&gt;Rails support&lt;/a&gt;, so why not Perl as well? Spread the word, let's make some noise! :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-5407874403957784649?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/5407874403957784649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2010/10/one-click-installers-for-perl-web-apps.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/5407874403957784649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/5407874403957784649'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2010/10/one-click-installers-for-perl-web-apps.html' title='One Click Installers for Perl Web Apps on Dreamhost'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-7364266934477960711</id><published>2010-08-01T22:25:00.000-03:00</published><updated>2010-08-01T22:25:01.012-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl community'/><title type='text'>Bringing Worldwide Perl Communities Together</title><content type='html'>A couple of weeks ago I had this very nice talk with &lt;a href="http://blog.perlassociation.org/"&gt;Daisuke Maki&lt;/a&gt;, &lt;a href="http://szabgab.com/"&gt;Gábor Szabó&lt;/a&gt; and &lt;a href="http://search.cpan.org/~ishigaki/"&gt;Kenichi Ishigaki&lt;/a&gt; about Perl communities worldwide. These days, as once was with french, and german, and latin, if you want to be heard in a wider audience, you have to speak (or, in this case, write) in english.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But what goes around in english doesn't necessarily reflect what's actually happening worldwide. Wikipedia estimates only 400 million people having english as their first language, and something between 500 million to 1.8 billion speakers overall. In a world of little less than 7 billion people, you can see how a lot of information may be lost.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In fact, as Ishigaki-san pointed out, a lot happens where most of the non-speakers don't know. This is true for both the japanese and brazilian communities, and I'm pretty sure it is also true for a lot of other communities where the native language is not english. It's not some bizarre sort of protectionism or xenophobia; there is just too much going on with too few having/taking the time to show them off to the unsuspecting, english-speaking, world.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Not that everyone would care, of course. But some might (I know I do, and Gábor does, too). Besides, as Maki-san mentioned, it might be interesting not to be completely clueless about what happens in other communities, even if some of those things are too regional to be useful outside the local &lt;a href="http://pm.org/"&gt;Perl Monger&lt;/a&gt; group. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While events such as the imminent &lt;a href="http://conferences.yapceurope.org/ye2010/"&gt;YAPC::EU&lt;/a&gt;, are an awesome opportunity to hear about what's going on with several different Perl groups, a lot of us can't make it to Europe, and the language barrier still poses an issue.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some movement is already there to achieve this sort of integration and spread the Perl word across idiom barriers. &lt;a href="http://www.fayland.org/"&gt;Fayland&lt;/a&gt; wrote and uploaded to CPAN a &lt;a href="http://search.cpan.org/perldoc?Book::Chinese::MasterPerlToday"&gt;Perl Book in Chinese&lt;/a&gt;, so Perl would easier reach the Chinese Community. I believe &lt;a href="http://sartak.org/"&gt;Shawn Moore&lt;/a&gt;'s &lt;a href="http://cpanratings.perl.org/dist/Book-Chinese-MasterPerlToday"&gt;comment in that module's ratings&lt;/a&gt; goes a long way. Speaking of Chinese Community, did you know last year they even made a Perl &lt;a href="http://perlchina.org/advent/"&gt;Advent Calendar&lt;/a&gt;?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There's also an ongoing attempt to &lt;a href="http://perldoc.org/"&gt;translate documentation&lt;/a&gt; and make &lt;a href="http://search.cpan.org/perldoc?POD2::Base"&gt;perldoc aware of localization&lt;/a&gt;. Translations in &lt;a href="http://search.cpan.org/perldoc?POD2::FR"&gt;French&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?POD2::IT"&gt;Italian&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?POD2::LT"&gt;Lithuan&lt;/a&gt;, and &lt;a href="http://search.cpan.org/perldoc?POD2::PT_BR"&gt;Brazilian Portuguese&lt;/a&gt; are already on CPAN. And Ishigaki's &lt;a href="http://search.cpan.org/perldoc?Acme::CPANAuthors"&gt;Acme::CPANAuthors&lt;/a&gt; quickly became a huge success - I'm actually proud of being one of the early adopters - offering a way for &lt;a href="http://search.cpan.org/perldoc?Acme::CPANAuthors::Japanese"&gt;Japanese&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Acme::CPANAuthors::Brazilian"&gt;Brazilian&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Acme::CPANAuthors::Russian"&gt;Russian&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Acme::CPANAuthors::Ukrainian"&gt;Ukrainian&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Acme::CPANAuthors::British"&gt;British&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Acme::CPANAuthors::Icelandic"&gt;Icelandic&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Acme::CPANAuthors::Norwegian"&gt;Norwegian&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Acme::CPANAuthors::French"&gt;French&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Acme::CPANAuthors::Canadian"&gt;Canadian&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Acme::CPANAuthors::Korean"&gt;Korean&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Acme::CPANAuthors::Italian"&gt;Italian&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Acme::CPANAuthors::Taiwanese"&gt;Taiwanese&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Acme::CPANAuthors::Turkish"&gt;Turkish&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Acme::CPANAuthors::Portuguese"&gt;Portuguese&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Acme::CPANAuthors::Israeli"&gt;Israeli&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Acme::CPANAuthors::Indonesian"&gt;Indonesian&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Acme::CPANAuthors::German"&gt;German&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Acme::CPANAuthors::Dutch"&gt;Dutch&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Acme::CPANAuthors::Chinese"&gt;Chinese&lt;/a&gt;, and &lt;a href="http://search.cpan.org/perldoc?Acme::CPANAuthors::Austrian"&gt;Austrian&lt;/a&gt; authors to know a bit more about each other. And I'm sure more are on their way!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, just as I often try to make people here in Brazil aware of what's going on in the worldwide Perl community, in the next few posts I'll take some time to go the other way around, and broadcast a little of what's going on in these parts to whomever is listening.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'd also really like to know more about &lt;b&gt;*your*&lt;/b&gt; local Perl Mongers group. After all, we do speak the same language, and that is Perl  ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, what have you guys been up to?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-7364266934477960711?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/7364266934477960711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2010/08/bringing-worldwide-perl-communities.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/7364266934477960711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/7364266934477960711'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2010/08/bringing-worldwide-perl-communities.html' title='Bringing Worldwide Perl Communities Together'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-1504435701212493405</id><published>2010-07-27T16:53:00.001-03:00</published><updated>2010-07-27T16:53:23.558-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl ddg duckduckgo'/><title type='text'>DuckDuckGo, a *fast* and *awesome* web search engine (in Perl!)</title><content type='html'>&lt;div&gt;More than often we hear people in the Perl community asking for more Perl applications and solutions instead of just modules. Well, &lt;a href="http://www.gabrielweinberg.com/"&gt;Gabriel Weinberg&lt;/a&gt; (&lt;a href="http://search.cpan.org/~yegg/"&gt;YEGG&lt;/a&gt;, on CPAN) did just that!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;His new creation is called DuckDuckGo (DDG for short), a search engine with lots of cool features, like:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;It's blazing fast!&lt;/b&gt; Google's search results doesn't quite make it for me, but I could get to the "right" result in the list (even in other pages) really fast, so is was one of the biggest blockers for me in switching to other engines. No more :-)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Official sites&lt;/b&gt; are labelled and displayed on top.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;No ads above results, and actual privacy!&lt;/b&gt; Unlike Google, DDG does not track users, nor displays "sponsored links" on top of your search.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Zero-click info&lt;/b&gt; is an amazing way to find what you're looking for in your search without having to follow any links. Let DDG do the hard work for you!&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Several goodies ready for you&lt;/b&gt;: go to the first result prepending a "!" to your search, find your IP address by simply querying "ip", get random numbers, test a regexp, and &lt;a href="http://duckduckgo.com/goodies.html"&gt;much, much more&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;site:, filetype:, inurl:, AND, OR&lt;/b&gt;, and all your favorite advanced operators work too!&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Keyboard shortcuts and customizations&lt;/b&gt; let you setup fonts, colors and much more! If you don't like to use the mouse, you can do everything via the keyboard.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Encrypted search&lt;/b&gt;, just use https:// instead of http://&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Read the &lt;a href="http://duckduckgo.com/about.html"&gt;About&lt;/a&gt; and &lt;a href="http://duckduckgo.com/faq.html"&gt;FAQ&lt;/a&gt; for more features and information, and &lt;a href="http://dukgo.com/"&gt;give it a try&lt;/a&gt;. You might be surprised :-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Want to help promote more Perl-based solutions? Sick and tired of Google search? Switch now!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://dukgo.com/"&gt;http://dukgo.com&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://duckduckgo.com/"&gt;http://duckduckgo.com&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Oh, did I mention it is &lt;b&gt;**fast**&lt;/b&gt; ??&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Cheers!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-1504435701212493405?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/1504435701212493405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2010/07/duckduckgo-fast-and-awesome-web-search.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/1504435701212493405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/1504435701212493405'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2010/07/duckduckgo-fast-and-awesome-web-search.html' title='DuckDuckGo, a *fast* and *awesome* web search engine (in Perl!)'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-1481503847450568761</id><published>2010-06-14T17:54:00.000-03:00</published><updated>2010-06-14T17:55:33.244-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl mojolicious twitter tweetylicious'/><title type='text'>Tweetylicious - a Twitter-like microblogging app in just one file!</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Verdana, sans-serif;"&gt;So, I've been playing a little with &lt;a href="http://search.cpan.org/perldoc?Mojolicious::Lite"&gt;Mojolicious::Lite&lt;/a&gt;, and here's what I came up with :-)&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span"   style="  ;font-family:Verdana, sans-serif;font-size:medium;"&gt;&lt;p&gt;&lt;img src="http://4.bp.blogspot.com/_Zg_F9liESSo/TBXPqHe45BI/AAAAAAAAAIA/BWB6sICznR8/s400/tweetylicious.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 332px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5482516443863507986" /&gt;&lt;/p&gt;&lt;p&gt;Tweetylicious is a small - but rather complete - &lt;a href="http://en.wikipedia.org/wiki/Micro-blogging" style="text-decoration: none; "&gt;microblogging&lt;/a&gt; web application in a single file! It is meant to demonstrate how easy and fun it is to create your own Web applications using &lt;a href="http://www.perl.org/"&gt;modern Perl 5&lt;/a&gt; and &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;!&lt;/p&gt;&lt;p&gt;Some features:&lt;/p&gt;&lt;ul style="margin-top: 10px; margin-right: auto; margin-bottom: 10px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: square; list-style-position: outside; list-style-image: initial; display: block; width: 648px; "&gt;&lt;li style="margin-bottom: 10px; "&gt;Multi-user, with homepages, search and list of followers/following&lt;/li&gt;&lt;li style="margin-bottom: 10px; "&gt;Nice, clean, pretty interface (at least I think so :P)&lt;/li&gt;&lt;li style="margin-bottom: 10px; "&gt;User avatar images provided by &lt;a href="http://gravatar.com/" style="text-decoration: none; "&gt;gravatar&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-bottom: 10px; "&gt;Unicode support&lt;/li&gt;&lt;li style="margin-bottom: 10px; "&gt;Well structured, commented code, easy to expand and customize&lt;/li&gt;&lt;li style="margin-bottom: 10px; "&gt;Encrypted online sessions&lt;/li&gt;&lt;li style="margin-bottom: 10px; "&gt;Uses an actual database (SQLite) and stores encrypted user password&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you want it, the &lt;a href="http://github.com/garu/tweetylicious"&gt;full code is in github&lt;/a&gt;. Removing just blank lines and comments, the Model has ~80 lines, the Controller ~110 lines, templates ~170 lines, plus ~90 lines of static css and ~60 of static javascript. And that's the &lt;b&gt;whole&lt;/b&gt; app :D&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;How do you run it?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;   perl tweetylicious.pl daemon&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You'll need &lt;a href="http://search.cpan.org/perldoc?Mojolicious"&gt;Mojolicious&lt;/a&gt; and &lt;a href="http://search.cpan.org/perldoc?ORLite"&gt;ORLite&lt;/a&gt; - two very lightweight modules - to run the app, and that's about it! A live Internet connection is also good, since it fetches jQuery on the fly.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Mind you, it's far from perfect (&lt;a href="http://github.com/garu/tweetylicious/issues"&gt;bug reports and patches always welcome!&lt;/a&gt;). I wrote it as a demo to show the kind of stuff you can quickly achieve with Perl. It's totally usable and might be a good fit for quick deployment and customization on internal networks, but if you're looking for a business ready microblogging solution, you might want to look at &lt;a href="http://status.net/"&gt;status.net&lt;/a&gt; (which powers &lt;a href="http://identi.ca/"&gt;identi.ca&lt;/a&gt;). But it's waaaay bigger ;-P&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Tutorial...ish&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I tried making the commits linear and modular, so newcomers can take a look at git log for a "tutorial":&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;initial commit - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/95f9134b6717bbc92e89548082c424de9ca904e9#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/95f9134b6717bbc92e89548082c424de9ca904e9/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;adding index page (and route) - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/bd85ed29aba21c70edbcd4961a036e14de13212a#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/bd85ed29aba21c70edbcd4961a036e14de13212a/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;separating common html into a shareable 'layout' - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/63152dce6c7c1571916472cf44c9c009b15b7e7f#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/63152dce6c7c1571916472cf44c9c009b15b7e7f/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;adding (all) css - sorry, this is not a css tutorial :P - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/66fdfb909850939705c95bbc8ca768975cfc1a6d#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/66fdfb909850939705c95bbc8ca768975cfc1a6d/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;users will need to 'login' and 'join' (register)! - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/9e928abcb6fac99a56e0fc8c307d4d040240d841#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/9e928abcb6fac99a56e0fc8c307d4d040240d841/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;first jQuery contact: turning links into buttons - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/7ccd87cfd88e61283128b72c4947597638640014#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/7ccd87cfd88e61283128b72c4947597638640014/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;creating the 'User' model schema in our database - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/7ccd87cfd88e61283128b72c4947597638640014/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/57ebf27258e5404b2c0b382c3479d3f11c7e58f1/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;registering users: the template - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/04e44bfbe45405b1be77b22d5bf6d3b2f8b4b471#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/04e44bfbe45405b1be77b22d5bf6d3b2f8b4b471/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;registering users: the controller - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/d16efb39f9a06c1cd2321e0722ecb5ddeabcb229#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/d16efb39f9a06c1cd2321e0722ecb5ddeabcb229/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;registering users: validating registration data - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/03d096c941553b23521038cd8fa5c6e29a840edb#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/03d096c941553b23521038cd8fa5c6e29a840edb/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;registering users: prevent usernames that are part of a route - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/b5eede60c32b05bfa807cbf86132e97634a833f1#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/b5eede60c32b05bfa807cbf86132e97634a833f1/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;user login: the template (and basic route) - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/f73b8f2d0452832f4cb8d206d3a7a3e05bc8faad#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/f73b8f2d0452832f4cb8d206d3a7a3e05bc8faad/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;user login: the controller (handling form submission) - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/7035cf787a6b36c63a012e82ff0c1163a00b695c#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/7035cf787a6b36c63a012e82ff0c1163a00b695c/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;user logout: controller, and option in template - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/9c3cee4d47f00b547ef341debf89d8f08b573264#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/9c3cee4d47f00b547ef341debf89d8f08b573264/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;the user's homepage (template) - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/0605ef16a9ff5074e9c374995c0b314ab503f5ee#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/0605ef16a9ff5074e9c374995c0b314ab503f5ee/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;the user's homepage (controller) - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/e59bd6f066eb564420eef71313cfc8244e8e06dd#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/e59bd6f066eb564420eef71313cfc8244e8e06dd/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;adding a 'not found' page - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/99afc640f812560a0addb0eea4ac16e5f12dbd42#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/99afc640f812560a0addb0eea4ac16e5f12dbd42/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;making 'login' and 'join' redirect to user's homepage - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/99b3d5377bbe4cbca2f072d1e3c7c90581ca0431#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/99b3d5377bbe4cbca2f072d1e3c7c90581ca0431/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;updating our model: posts! - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/e03bb401fabfa72715b45e16ea61165a3c856027#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/e03bb401fabfa72715b45e16ea61165a3c856027/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;making user's homepage show posts (but user can't create them just yet - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/31785e372749148156b30fab3580d443f49a649d#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/31785e372749148156b30fab3580d443f49a649d/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;updating our controller: creating posts - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/76eed746264c0ebb12567213845624c9a64d2a7f#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/76eed746264c0ebb12567213845624c9a64d2a7f/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;updating our controller: deleting posts - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/bfa937d034bd8758936fab51657d33d68fdc31e4#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/bfa937d034bd8758936fab51657d33d68fdc31e4/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;updating our controller: turning common posting auth code into a ladder - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/bd7b55f6f4db2843cdf89ebebea13c62cca530e9#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/bd7b55f6f4db2843cdf89ebebea13c62cca530e9/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;more jQuery: styling post submit into a button too - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/3a1051bd7e4a353a5d51af6eeb35cf9c7482f9f5#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/3a1051bd7e4a353a5d51af6eeb35cf9c7482f9f5/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;more jQuery: showing how many characters are left in a post - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/6d280af611174e8c6de9371a90aec3e390244f2d#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/6d280af611174e8c6de9371a90aec3e390244f2d/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;more jQuery: highlighting posts on hover - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/9d24f83512ee4fe38b5442d9aa86a152606d9648#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/9d24f83512ee4fe38b5442d9aa86a152606d9648/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;more jQuery: formatting our content for RTs (@user) - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/d1d6d08481cd8a56b3910940492765449e6d3466#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/d1d6d08481cd8a56b3910940492765449e6d3466/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;creating posts via Ajax (rather, Ajaj, since we're using JSON ;) - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/07f686afcbdb33cdb2f58cda7d96b2be99fa0b8a#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/07f686afcbdb33cdb2f58cda7d96b2be99fa0b8a/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;deleting posts via Ajax (rather, Ajaj, since we're using JSON ;) - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/57346c7f45c99a286e2742ee52eb9f225070dd48#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/57346c7f45c99a286e2742ee52eb9f225070dd48/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;searching posts: search form template - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/8a43b98e10e7f1751a10486e135aba7a2ceed0b1#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/8a43b98e10e7f1751a10486e135aba7a2ceed0b1/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;searching posts: jQuery effects - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/8a43b98e10e7f1751a10486e135aba7a2ceed0b1/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/6abdd89fb85d399a640f9a33541668b6899fe9e0/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;searching posts: model - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/e338ebe169481f60d8aaa9204d0b2fc358cf6d0b#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/e338ebe169481f60d8aaa9204d0b2fc358cf6d0b/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;searching posts: controller - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/7bc3ebfdb8044fba42e8f83d5c6142b5080792ec#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/blob/7bc3ebfdb8044fba42e8f83d5c6142b5080792ec/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;searching posts: results template - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/57a48574d9efacfac40b32e7f4e7fd51c44b3470#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/57a48574d9efacfac40b32e7f4e7fd51c44b3470/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;searching posts: jQuery (naive) formatting for topics (#topic) - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/3da8b2ecb8021fd9ba6e40afde85c5c6402ac115#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/3da8b2ecb8021fd9ba6e40afde85c5c6402ac115/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;followers and following: the model - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/f2c2644fb75f3e097be1263651117c1c2949bd20#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/f2c2644fb75f3e097be1263651117c1c2949bd20/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;followers and following: the controller - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/5891bb54cd4183585b11be8a6aff70f0ec522556#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/5891bb54cd4183585b11be8a6aff70f0ec522556/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;followers and following: template changes - &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/commit/216fed6b3aae928a505fb034a54b1058e4a1c5a5#diff-0"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;diff&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://github.com/garu/tweetylicious/raw/master/tweetylicious.pl"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;full file&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Newer commits will likely be not as organized, and mostly bugfixing, but this should get people going - hopefully :P&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well, that's it. Have fun!&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-1481503847450568761?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/1481503847450568761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2010/06/tweetylicious-twitter-like.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/1481503847450568761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/1481503847450568761'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2010/06/tweetylicious-twitter-like.html' title='Tweetylicious - a Twitter-like microblogging app in just one file!'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Zg_F9liESSo/TBXPqHe45BI/AAAAAAAAAIA/BWB6sICznR8/s72-c/tweetylicious.png' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-5992867431275954205</id><published>2010-05-18T15:02:00.001-03:00</published><updated>2010-05-18T15:14:43.319-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl ironman mst'/><title type='text'>Getting back at mst</title><content type='html'>&lt;div style="text-align: left;"&gt;Hi guys!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Our dear Matt S. Trout's latest &lt;a href="http://www.shadowcat.co.uk/blog/matt-s-trout/"&gt;blog&lt;/a&gt; post is entitled "Exciting days ahead". Oh boy, I'm sure "exciting" is a very nice word. And no, I'm not speaking about the &lt;a href="http://search.cpan.org/perldoc?perl5121delta"&gt;brand new Perl 5.12.1&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;See, that post is dated April 14. That's over a month, and as such waaaaay past the &lt;a href="http://ironman.enlightenedperl.org/"&gt;Ironman Challenge&lt;/a&gt;'s 10-day deadline. If I remember correctly, and he made sure to say this over and over again:&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;"If I lose, I'm gonna let you guys pick a colour and a theme, and I'll do a talk about that theme with my hair dyed on that colour"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well, folks, it's time to collect!! =)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://4.bp.blogspot.com/_Zg_F9liESSo/S_LU4Pojm2I/AAAAAAAAAH4/-SyiaQY1jy8/s400/mst-colour.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 135px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5472670559942974306" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Note: Granted, mst is a rather polemic character in our community. Love him or hate him, his contributions to modern Perl and to making the Ironman Challenge and the whole Perl blogging initiative the enormous success it is, are completely undeniable. He knows I'm blogging about this right now (though he likely doesn't know about my poor gimp talent) and is about to do a "press conference" on the subject himself - I just found it funny that no one said anything until now! Also, I lost the ironman challenge several times since I entered it, and likely so did you - the whole project of getting the Perl word out there is awesome and I'm sure all of us will keep doing it. The point is, none of us made half-drunk promises about not failing :PP&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-5992867431275954205?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/5992867431275954205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2010/05/getting-back-at-mst.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/5992867431275954205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/5992867431275954205'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2010/05/getting-back-at-mst.html' title='Getting back at mst'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Zg_F9liESSo/S_LU4Pojm2I/AAAAAAAAAH4/-SyiaQY1jy8/s72-c/mst-colour.png' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-8339975857332047260</id><published>2010-04-09T00:55:00.000-03:00</published><updated>2010-04-09T00:55:00.966-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oneliner'/><category scheme='http://www.blogger.com/atom/ns#' term='tip'/><title type='text'>one-liner tip: aliases</title><content type='html'>When it comes to bending the system into doing what we want in a quick-and-dirty fashion, nothing beats a Perl one-liner. There are &lt;a href="http://www.catonmat.net/?s=perl+one+liners"&gt;several&lt;/a&gt; &lt;a href="http://blogs.perl.org/users/john_mcnamara/2009/12/some-perl-one-liners.html"&gt;great tips&lt;/a&gt; and &lt;a href="http://www.slideshare.net/Util/yapcna2009-command-line-perl"&gt;talks&lt;/a&gt; on one-liners, but they usually focus on Perl itself. Well, turns out I use one liners often enough that I became lazy even to write "perl -...". So I remembered the good old 'alias' shell command and put these in the end of my .bashrc file:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; alias pe='perl -E'&lt;br /&gt; alias ppe='perl -pE'&lt;br /&gt; alias pne='perl -nE'&lt;br /&gt; alias pipe='perl -i -pE'&lt;br /&gt; alias pine='perl -i -nE'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;that alone saves me a whole lot of typing over the week :)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; &gt; pe 'say q[hello, lazyness!]'&lt;br /&gt; &gt;    hello, lazyness!&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;It's also pretty easy to remember, since you just type 'p' for 'perl', followed by the main flags your one-liner has. Oh, and of course you also can pre-load your favorite modules, doing things like:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; alias pe='perl -MData::Dumper -lE'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;That's it, hope you enjoy it :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-8339975857332047260?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/8339975857332047260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2010/04/one-liner-tip-aliases.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/8339975857332047260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/8339975857332047260'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2010/04/one-liner-tip-aliases.html' title='one-liner tip: aliases'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-164290086430349606</id><published>2010-01-18T21:59:00.001-02:00</published><updated>2010-01-18T22:06:27.028-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Catalyst'/><category scheme='http://www.blogger.com/atom/ns#' term='LCSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Test::LongString'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Better output testing HTML and other long strings</title><content type='html'>If you ever wrote or ran a website test in Perl, you probably used &lt;a href="http://consttype.org/"&gt;Rafaël Garcia-Suarez&lt;/a&gt;'s wonderful &lt;a href="http://search.cpan.org/perldoc?Test::LongString"&gt;Test::LongString&lt;/a&gt;, even if you never heard of it before. Not only is it &lt;a href="http://cpants.perl.org/dist/used_by/Test-LongString"&gt;used by lots of CPAN modules&lt;/a&gt;, it is the foundation of &lt;a href="http://search.cpan.org/perldoc?Test::WWW::Mechanize"&gt;Test::WWW::Mechanize&lt;/a&gt; test functions, with flavors for &lt;a href="http://search.cpan.org/perldoc?Test::WWW::Mechanize::Catalyst"&gt;Catalyst&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Test::WWW::Mechanize::PSGI"&gt;PSGI&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Test::WWW::Mechanize::CGIApp"&gt;CGIApp&lt;/a&gt; and &lt;a href="http://cpants.perl.org/dist/used_by/Test-WWW-Mechanize"&gt;several others&lt;/a&gt;. But it doesn't have to be HTML content testing - any string output can be tested with its awesome functions.&lt;br /&gt;&lt;br /&gt;Maybe Test::LongString's most common function is &lt;span style="font-style: italic;"&gt;contains_string()&lt;/span&gt;, which you may know as Test::WWW::Mechanize's &lt;span style="font-style: italic;"&gt;$mech-&gt;content_contains()&lt;/span&gt; method. When it fails, the failing test output shows the original string and the text it was trying to find:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: courier new; font-size: 85%;"&gt;&lt;br /&gt;#     searched: "foo bar"&lt;br /&gt;#   can't find: "baz"&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Problem is, when the original string is too long, you get only the beginning of it. This happens a lot when you're trying to find content inside HTML, like:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: courier new; font-size: 85%;"&gt;&lt;br /&gt;#     searched: "&amp;#60;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Trans"...&lt;br /&gt;#   can't find: "some random content"&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Such output is only barely useful, and I got fed up of having to edit a test file manually, add &lt;span style="font-style: italic;"&gt;diag()&lt;/span&gt; calls to see the complete output, then &lt;a href="http://betterthangrep.com/"&gt;ack&lt;/a&gt; for the wanted string to see what went wrong. So I made a small patch to Test::LongString, which Rafaël promptly accepted (yup, he rocks, but we all know that ;-).&lt;br /&gt;&lt;br /&gt;Now, whenever such test fails, you'll get two extra lines:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: courier new; font-size: 85%;"&gt;&lt;br /&gt;#     searched: "&amp;#60;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Trans"...&lt;br /&gt;#   can't find: "some random content"&lt;br /&gt;#         LCSS: "ome random content"&lt;br /&gt;# LCSS context: "d="content" class="foo"&amp;#62;Some random content!&amp;#60;/div&amp;#62;"&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"LCSS"&lt;/span&gt; stands for Longest Common SubString, meaning you get whatever matched the most inside the original content (note that LCSS is not the same as LCS, or Longest Common Subsequence, which would go for a non-sequential match as seen in diff-like outputs). And, of course, &lt;span style="font-style: italic;"&gt;"LCSS context"&lt;/span&gt; means the surroundings of the LCSS string just found.&lt;br /&gt;&lt;br /&gt;Now, just by looking at our example, we know exactly why the test failed, and we are free to fix either the test suite or the application. &lt;br /&gt;&lt;br /&gt;Know what's best? You get all that for free, no need to change a single line in your tests. Just update Test::LongString to 0.12 or later and enjoy! :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-164290086430349606?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/164290086430349606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2010/01/better-output-testing-html-and-other.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/164290086430349606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/164290086430349606'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2010/01/better-output-testing-html-and-other.html' title='Better output testing HTML and other long strings'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-1072996709244639003</id><published>2010-01-04T18:14:00.000-02:00</published><updated>2010-01-04T18:14:44.521-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CPAN Forks::Super'/><title type='text'>First CPAN upload of 2010</title><content type='html'>Hi everyone - happy new year!&lt;br /&gt;&lt;br /&gt;2009 came and went, so here's to an amazing 2010 for the Perl world, with even more than we already accomplished last year :-)&lt;br /&gt;&lt;br /&gt;And look at that, it's only day 4 of 2010 and we already saw &lt;a href="http://search.cpan.org/recent"&gt;over 200 CPAN uploads&lt;/a&gt;. But don't look just yet! See if you can figure out what was the very first package upload to CPAN in 2010 (CPAN-time, of course). No clue? Couldn't care less? Well, call me curious, but I had to look ;-)&lt;br /&gt;&lt;br /&gt;January 1st had several heavy competitors: &lt;a href="http://search.cpan.org/perldoc?PDL"&gt;PDL&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?Chart::Clicker"&gt;Chart::Clicker&lt;/a&gt;, &lt;a href="http://search.cpan.org/perldoc?POE"&gt;POE&lt;/a&gt;... even &lt;a href="http://search.cpan.org/perldoc?Plack"&gt;Plack&lt;/a&gt; was this close from being the one. But our "winner" is a rather young package by &lt;a href="http://search.cpan.org/%7Emob/"&gt;Marty O'Brien&lt;/a&gt;. I'm talking about &lt;a href="http://search.cpan.org/perldoc?Forks::Super"&gt;Forks::Super&lt;/a&gt;, in it's 12th release.&lt;br /&gt;&lt;br /&gt;Forks::Super provides new definitions for the Perl functions &lt;code&gt;fork&lt;/code&gt;, &lt;code&gt;wait&lt;/code&gt;, and &lt;code&gt;waitpid&lt;/code&gt; with richer functionality. The new features are designed to make it more convenient to spawn background processes and more convenient to manage them and to get the most out of your system's resources. Take good old fork(), for example. Without arguments, it behaves just like it used to, but now you can also do stuff like:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;     my $pid = fork { cmd =&gt; [ qw(/bin/prog opt1 $opt2 opt3) ] };&lt;br /&gt;&lt;/pre&gt;or&lt;br /&gt;&lt;pre&gt;     my $pid = fork { sub =&gt; \&amp;amp;subroutine, args =&gt; [ @args ] };&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Your can even set timeouts on your forks, queue jobs and obtain filehandles. Pretty cool, huh?&lt;br /&gt;&lt;br /&gt;I haven't actually used it, but Marty took his time with &lt;a href="http://search.cpan.org/perldoc?Forks::Super"&gt;a very comprehensive Pod,&lt;/a&gt; and even some &lt;a href="http://cpansearch.perl.org/src/MOB/Forks-Super-0.12/README.windows"&gt;information for windows users&lt;/a&gt;. So, if you usually use fork in your programs, be sure to check it out.&lt;br /&gt;&lt;br /&gt;Until next time!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-1072996709244639003?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/1072996709244639003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2010/01/first-cpan-upload-of-2010.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/1072996709244639003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/1072996709244639003'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2010/01/first-cpan-upload-of-2010.html' title='First CPAN upload of 2010'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-2703258773142885606</id><published>2009-12-04T21:20:00.000-02:00</published><updated>2009-12-04T21:24:22.464-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='datetime'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>A special Date, a special someone.</title><content type='html'>&lt;span style="font-family:courier new;"&gt;perl -MDateTime -E 'our $first_kiss = DateTime-&gt;new( year =&gt; 2007, month =&gt; 3, day =&gt; 10 ); say $first_kiss-&gt;delta_days( DateTime-&gt;now )-&gt;delta_days'&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;br /&gt;1000&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Talk about serendipity, finding out about this 3 days before the actual date!&lt;br /&gt;&lt;br /&gt;Taking her to dinner now ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-2703258773142885606?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/2703258773142885606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2009/12/special-date-special-someone.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/2703258773142885606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/2703258773142885606'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2009/12/special-date-special-someone.html' title='A special Date, a special someone.'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-1242193268484742644</id><published>2009-11-26T05:23:00.001-02:00</published><updated>2009-11-26T05:26:20.477-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl thanksgiving'/><title type='text'>Thanksgiving</title><content type='html'>Did you ever look over a module you use to see who wrote it? There are people behind every line of code you use, people who once had the same problem you had and fixed it for you before you even saw it coming.&lt;br /&gt;&lt;br /&gt;I believe today is &lt;a href="http://en.wikipedia.org/wiki/Thanksgiving"&gt;Thanksgiving&lt;/a&gt; Holiday in the US. We don't celebrate anything like it in Brazil - heck, if it weren't for television most people here wouldn't even know about it - but I thought this would be a good time to say "Thank You" to the Perl community and CPAN authors, for making this such a nice language to work with :-)&lt;br /&gt;&lt;br /&gt;I pay my bills coding with Perl, loving every minute of it, and I'm sure it wouldn't be half as fun if it weren't for the nice people behind the communities and all the awesome modules I get to use and rely on. Sometimes - and I &lt;span style="font-style: italic;"&gt;know&lt;/span&gt; I'm not the only one - I spend hours and hours just browsing through CPAN &lt;a href="http://xkcd.com/214/"&gt;like a developer's Wikipedia&lt;/a&gt;. Peeking over at &lt;a href="http://search.cpan.org/recent"&gt;recently uploaded modules&lt;/a&gt; is aways fun too!&lt;br /&gt;&lt;br /&gt;So, today I pay my respects to some (not all, as I'd be here all week, if not longer - and I need material for next year :-P) of the CPAN authors of modules I use(d) over the years, and thank them. I'll also &lt;a href="http://onionstand.blogspot.com/2009/06/rate-perl-module-today.html"&gt;rate their modules&lt;/a&gt; and send them a private email to show my appreciation, just in case they don't ever read this.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Thank you &lt;a href="http://search.cpan.org/%7Egaas/"&gt;Gisle Aas&lt;/a&gt; for URI, Digest::*, LWP and the whole libwww-perl family (&lt;a href="http://cpan-explorer.org/category/distributions/"&gt;we can actually see that the CPAN universe owes you a lot&lt;/a&gt;. We all do); &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Thank you &lt;a href="http://ali.as/"&gt;Adam Kennedy&lt;/a&gt;, for PPI, Module::Install, ORLite, Strawberry Perl, for authoring/maintaining over 200 modules, and for being such a nice and enthusiatic person overall;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Thank you &lt;a href="http://yapgh.blogspot.com/"&gt;Kartik Thakore&lt;/a&gt;, for taking upon yourself the weight of the &lt;a href="http://sdl.perl.org/"&gt;SDL Perl&lt;/a&gt; project just a few months after even learning Perl (and doing a well job while at it);&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Thank you &lt;a href="http://www.trout.me.uk/"&gt;Matt Trout&lt;/a&gt;, for local::lib, DBIx::Class, and for bringing new life to the Perl world via the &lt;a href="http://ironman.enlightenedperl.org/"&gt;Iron Man Challenge&lt;/a&gt; and the &lt;a href="http://www.enlightenedperl.org/"&gt;Enlightened Perl Organization;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Thank you &lt;a href="http://www.linkedin.com/in/gbarr"&gt;Graham Barr&lt;/a&gt;, for Scalar::Util, List::Util, and all the Net::* modules;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Thank you &lt;a href="http://www.onemogin.com/blog/"&gt;Cory Watson&lt;/a&gt;, for Chart::Clicker. I found out about it a couple years ago in &lt;a href="http://perlmonks.org/"&gt;Perlmonks&lt;/a&gt; and was blown away. Keep it up!;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Thank you &lt;a href="http://search.cpan.org/%7Echm/"&gt;Chris Marshall&lt;/a&gt;, not only for &lt;a href="http://pdl.perl.org/"&gt;PDL&lt;/a&gt; but also for co-maintaining the awesome &lt;a href="http://graphcomp.com/opengl/"&gt;Perl OpenGL&lt;/a&gt; project together with Bob "grafman" Free (Thanks to you too, Bob!);&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Thank you &lt;a href="http://search.cpan.org/%7Eferreira/"&gt;Adriano Ferreira&lt;/a&gt;, for Carp::Always, and for being the Brazilian author with most modules in CPAN. You're an inspiration to us all (&lt;span style="font-style: italic;"&gt;mesmo entocado aí nas Minas Gerais... vê se aparece!!! &lt;/span&gt;:P)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Dammit, I tried keeping this short, but here I was immerse in CPAN awesomeness again. So, if you ever put code out there, be it a whole module, a minor contribution to someone else's, or even a simple bug report, THANK YOU. Be sure you made at least one person's life easier.&lt;br /&gt;&lt;br /&gt;Oh, I'll also take my time today to use the &lt;a href="http://perldoc.perl.org/5.8.9/perlthanks.html"&gt;perlthanks&lt;/a&gt; tool and say thanks to all the nice people who help with perl itself. None of this would be here if not for you guys... Thanks!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-1242193268484742644?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/1242193268484742644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2009/11/thanksgiving.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/1242193268484742644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/1242193268484742644'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2009/11/thanksgiving.html' title='Thanksgiving'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-3398264154999337498</id><published>2009-10-16T18:31:00.002-03:00</published><updated>2009-10-16T18:38:01.063-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YAPC::Brasil'/><title type='text'>make a video for YAPC::Brasil 2009!</title><content type='html'>Hey everyone! A lot of time without blogging, been really busy with work and almost all of my free time has been dedicated to making &lt;a href="http://yapcbrasil.org.br/2009"&gt;YAPC::Brasil&lt;/a&gt; happen - spawning a big Perl conference is a lot of work!&lt;br /&gt;&lt;br /&gt;In case you haven't already heard of it, from &lt;a href="http://www.theperlreview.com/community_calendar"&gt;october the 30th to November 1st&lt;/a&gt;, we're working hard to put forth the greatest and largest Perl-only event in the entire Latin America, celebrate the Joy of Perl among ourselves, and tempt everyone else to join us in developing &lt;a href="http://blog.doloreslabs.com/2009/05/the-programming-language-with-the-happiest-users/"&gt;the programming language that has the happiest users&lt;/a&gt;! Humble goals, huh? :-)&lt;br /&gt;&lt;br /&gt;&lt;p&gt;We're still learning the ropes, so we refrained from making too much international buzz about it, or inviting foreigners to come to this year's edition. This way we can improve and mature our organization, and next year provide an event of international proportions - maybe even pay for travel and expenses of some keynotes (many thanks to all sponsors who are helping us trying to stay above the red line).&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Even so, we could really use your international support!&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Make a short video of just a few seconds stating your name (and cpan/irc id if you have them), location, and give us a shout! Here's a standard boilerplate example:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;"Hi there! This is $name, from $location, author of $foo. Welcome to YAPC::Brasil 2009, enjoy the conference!"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;That alone would be amazing, but please keep in mind it doesn't have to be &lt;span style="font-style: italic;"&gt;that&lt;/span&gt; short, and of course you're free to be as creative as you want in any words of motivation you guys may have for us. Let the Brazilian Perl community see for themselves that we're just part of a whole, and that Perl is used and widely supported all over the World! Hopefully we'll be able to put up a 5-10 minute long compilation to show in the conference opening ceremony.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Oh! Almost forgot! Send the video to garu at yapcbrasil dot org dot br - thanks  :-)&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Become a part of the YAPC::Brasil today! And maybe in the following years we'll be fortunate enough to enjoy your physical presence there as well :-)&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Thanks &lt;a href="http://edenc.vox.com/"&gt;edenc&lt;/a&gt; for giving this amazing video shouting idea for the event, and &lt;a href="http://chris.prather.org/"&gt;perigrin&lt;/a&gt; for reminding me to blog about it :D&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;And many many thanks to &lt;span style="font-weight: bold;"&gt;you&lt;/span&gt;, for taking the time to record and send that video to us!&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-3398264154999337498?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/3398264154999337498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2009/10/make-video-for-yapcbrasil-2009.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/3398264154999337498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/3398264154999337498'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2009/10/make-video-for-yapcbrasil-2009.html' title='make a video for YAPC::Brasil 2009!'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-2336831337858784716</id><published>2009-09-27T20:07:00.000-03:00</published><updated>2009-09-27T20:07:08.797-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl popularity tv geeks'/><title type='text'>Geeks love Perl!</title><content type='html'>Of course, you most likely already knew about this, seeing Perl featured in not &lt;a href="http://ikeapimp.blogspot.com/2009/03/chuck-vs-camel.html"&gt;one&lt;/a&gt;, but &lt;a href="http://sergemadenian.com/?p=22"&gt;two&lt;/a&gt; episodes of popular tv show &lt;a href="http://www.nbc.com/Chuck/"&gt;Chuck&lt;/a&gt;, and knowing it is &lt;a href="http://blog.doloreslabs.com/2009/05/the-programming-language-with-the-happiest-users/"&gt;the programming language with the happiest users&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;But now &lt;a href="http://www.librarything.com/profile/felius"&gt;John Dalton&lt;/a&gt;, LibraryThing's systems administrator, used  &lt;a href="http://www.librarything.com/blog/2009/09/tagmash-redux-tims-favorite-feature.php"&gt;LibraryThing's tagmash feature&lt;/a&gt; to &lt;a href="http://twitter.com/johndalton/status/4335511268"&gt;come up&lt;/a&gt; with some hard data evidence of the difference between geeks and nerds:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.librarything.com/blog/2009/09/geeks-vs-nerds-hard-data.php"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 172px;" src="http://3.bp.blogspot.com/_Zg_F9liESSo/Sr_q93nag-I/AAAAAAAAAGg/x2258wUpyB4/s400/geeksandnerds.png" alt="" id="BLOGGER_PHOTO_ID_5386282027980588002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;As you can see, Perl is not just the &lt;span style="font-weight: bold;"&gt;only&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; programming language mentioned, it is also looking as popular as Linux itself!&lt;br /&gt;&lt;br /&gt;What are you waiting for? Join the revolution! Learn Perl now and see for yourself why we all like it so much :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-2336831337858784716?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/2336831337858784716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2009/09/geeks-love-perl.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/2336831337858784716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/2336831337858784716'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2009/09/geeks-love-perl.html' title='Geeks love Perl!'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Zg_F9liESSo/Sr_q93nag-I/AAAAAAAAAGg/x2258wUpyB4/s72-c/geeksandnerds.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-4173756905367005399</id><published>2009-09-02T06:07:00.002-03:00</published><updated>2009-09-02T06:13:11.121-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Padre'/><title type='text'>Padre 0.45 "stable" released!</title><content type='html'>It is again with enormous pleasure that I announce &lt;a href="http://padre.perlide.org"&gt;Padre, the Perl IDE&lt;/a&gt;, on it's 0.45 release. We are trying to mark some special releases as "stable", somewhat sync'd to &lt;a href="http://rakudo.org/"&gt;rakudo&lt;/a&gt; (for our "six" &lt;a href="http://padre.perlide.org/download.html"&gt;win32 release&lt;/a&gt; that bundles Padre with Perl 6), so downstream packagers can do their thing without pulling their hair out for us issuing so many releases (last month, on Padre's birthday, we had 3 releases on a 10-day span). As a result, this release has only bugfixes and translation updates - both more than enough reason for an upgrade :-)&lt;br /&gt;&lt;br /&gt;Also, this has some sentimental value for me as it is my last release of Padre. We have a very nice rotation scheme going on and Ryan52 volunteered for this month, so I gladly handed off the baton - it's been great, but I must confess I do need some vacation from the responsibility!&lt;br /&gt;&lt;br /&gt;Many many thanks to all of you for making Padre such a great IDE for Perl, be it developing or just using it. Also, a big cheer to all translators who's time has been put to Padre - your help is very much appreciated!&lt;br /&gt;&lt;br /&gt;Hey, maybe now I'll actually have time to blog about something other than Padre releases. Yay :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-4173756905367005399?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/4173756905367005399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2009/09/padre-045-stable-released.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/4173756905367005399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/4173756905367005399'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2009/09/padre-045-stable-released.html' title='Padre 0.45 &quot;stable&quot; released!'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-3827149450086317865</id><published>2009-08-25T00:17:00.004-03:00</published><updated>2009-08-25T01:04:59.748-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Padre'/><title type='text'>Padre 0.44 released!</title><content type='html'>Hi everyone!&lt;br /&gt;&lt;br /&gt;I'm happy to announce Padre, The Perl IDE, release 0.44. Since last week, &lt;a href="http://ahmadzawawi.blogspot.com/"&gt;azawawi&lt;/a&gt;++ kept his work frenzy going and added several neat features to Padre this week:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Help Search is now greatly enhanced, faster and even supporting help for Perl operators!&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Padre now has an integrated "Quick Fix" feature for Perl code! Perl 5 quick fixes are still getting mature but we're all very excited on new ideas to help Modern Perl coding and beginners.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The Directory Browser has had several stability fixes as well, and is turning into a better feature each day.&lt;/li&gt;&lt;/ul&gt;Aside from the usual bugfixes from all Padre devs, other features worth noticing include the return of the F12 "save as" shortcut from &lt;a href="http://szabgab.com/"&gt;szabgab&lt;/a&gt;++ and the new "Edit-&gt;Insert" menu option from &lt;a href="http://www.aarontrevena.co.uk/"&gt;teejay&lt;/a&gt;++ that let's you insert snippets and special values like today's date, file size, etc.&lt;br /&gt;&lt;br /&gt;This release is also special because we're experimenting on a new "stable" release process. The 0.45 release is scheduled for the end of the week and will contain only bugfixes and translation improvements from 0.44. This will let us create "stable" packages for linux distros and different operating systems (such as win32), while still letting us work on bleeding-edge stuff (released about the same time, but as 0.46).&lt;br /&gt;&lt;br /&gt;Many thanks to everyone that contributed to this release - be it developing Padre or just using it and giving us bug reports. Thanks everyone!&lt;br /&gt;&lt;br /&gt;Padre 0.44 should arrive at your local &lt;a href="http://search.cpan.org/"&gt;CPAN&lt;/a&gt; mirror anytime now. Enjoy!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;newcomer notice: in the programming community, specially in those that use IRC as a communication channel, it is common to use "++" at the end of someone's name/nickname to indicate praise for that person's work, that you acknowledge and are thankful for what they did in whatever topic you are writing about. It is a standard iteration to variables in several programming languages such as C and Perl, so we use it to say (what they did) increased their "magic value" - usually called "karma". So if you see yournick++ somewhere, be glad :)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-3827149450086317865?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/3827149450086317865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2009/08/padre-044-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/3827149450086317865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/3827149450086317865'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2009/08/padre-044-released.html' title='Padre 0.44 released!'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-5041136440380661242</id><published>2009-08-17T04:22:00.002-03:00</published><updated>2009-08-17T04:30:52.716-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Padre'/><title type='text'>Padre 0.43 released!</title><content type='html'>&lt;a href="http://search.cpan.org/perldoc?Padre"&gt;Padre 0.43 was (finally) released&lt;/a&gt;! Only 16 days after our &lt;a href="http://onionstand.blogspot.com/2009/07/on-padres-birthday-gift-to-you-042.html"&gt;birthday release&lt;/a&gt;, we already have a lot of new features and several improvements, starting with a beautiful splash screen. Maybe we change the image on a somewhat regular basis &lt;a href="http://www.gimp.org/about/splash/"&gt;like the Gimp project does&lt;/a&gt;, who knows? :-)&lt;br /&gt;&lt;br /&gt;On the &lt;span style="font-style: italic;"&gt;"new stuff that you're gonna love"&lt;/span&gt;, we have:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;"Quick menu access" option that let's you quickly browse through and select menu options without ever leaving the keyboard. Just press Ctrl-3 and start typing!&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; "Open Resource" option is also a great help to quickly find files inside any resources directory. Just type Ctrl-Shift-R and off you go.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; Padre's search engine has been refactored and is dazzling fast! Also, if you select text (1 line or less) and press F3, it will do an active search for the selected entry without even invoking the Find dialog.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; The directory browser now has an "open in file browser" option that opens the requested file/folder in your default file browser. Just right-click on any item on the directory tree to view the option (among others).&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; If you have Syntax Checking enabled, you can now use the new "Next Problem" option that points you to the line where the (next) detected problem is!&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; All PPI-based features now fully support perl 5.10.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; The new Help Search option (F2) let's you browse through perl's documentation with ease.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;We also had a lot of work on the &lt;span style="font-style: italic;"&gt;"Important stuff that's not so visible"&lt;/span&gt; category, like reducing our dependencies, upgrading plugin support internals, testing and bug-fixing.&lt;br /&gt;&lt;br /&gt;As usual, many many thanks to all Padre &lt;a href="http://padre.perlide.org/developers.html"&gt;developers&lt;/a&gt; and &lt;a href="http://padre.perlide.org/translators.html"&gt;translators&lt;/a&gt; for all their work (&lt;a href="http://padre.perlide.org/trac/"&gt;join us&lt;/a&gt; if you haven't already), and to all the users out there - the Padre project would not be half what it is without you!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cheers, and until next time!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-5041136440380661242?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/5041136440380661242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2009/08/padre-043-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/5041136440380661242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/5041136440380661242'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2009/08/padre-043-released.html' title='Padre 0.43 released!'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-3719401866173063433</id><published>2009-07-31T17:44:00.000-03:00</published><updated>2009-07-31T17:44:52.749-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Padre'/><title type='text'>On Padre's birthday, a gift to you (0.42 released!)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Zg_F9liESSo/SnNVJj6Ar2I/AAAAAAAAAGQ/eBzZ8T5aTs0/s1600-h/logo.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 64px; height: 64px;" src="http://4.bp.blogspot.com/_Zg_F9liESSo/SnNVJj6Ar2I/AAAAAAAAAGQ/eBzZ8T5aTs0/s400/logo.png" alt="" id="BLOGGER_PHOTO_ID_5364725203874131810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It is with enormous pleasure that I present &lt;a href="http://padre.perlide.org/"&gt;Padre, the Perl IDE&lt;/a&gt;, release #&lt;a href="http://en.wikipedia.org/wiki/Answer_to_Life,_the_Universe,_and_Everything"&gt;42&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As you may have known from previous posts, this Monday was the 1st anniversary of Padre! Everybody got together over the weekend and several improvements and bugfixes were made. We even got a brand new Padre logo, the Blue Morpho Butterfly. Check it out above!&lt;br /&gt;&lt;br /&gt;A few other highlights of the biggest Changelog we had since release 0.21 (weird, huh?!):&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The Directory Browser is not only prettier, faster and more useful than ever (with a built in search engine and some DWIM behavior)  but now also has a panel on the left side of Padre all for itself called "project tools". &lt;a href="http://use.perl.org/%7EAlias/journal/"&gt;Alias&lt;/a&gt;++ &amp;amp;&amp;amp; gabrielmad++.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ahmadzawawi.blogspot.com/"&gt;Azawawi&lt;/a&gt;++ implemented smart highlighting, and now whenever you double click on a word will not only select it as usual but also show a green squiggle for each mathing word on that same document.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Azawawi also got to finish his work on initial support for Padre actions, which means an action can be re-used by anything running on Padre. This will most definitely have a major positive impact on future development of the project.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://bricas.vox.com/"&gt;Bricas&lt;/a&gt;++ added a &lt;span style="font-style: italic;"&gt;"right margin"&lt;/span&gt; option which will show &lt;a href="http://bricas.vox.com/library/post/adding-a-feature-to-padre.html"&gt;a tiny vertical line at the specified column&lt;/a&gt;. This is a really cool visual aid if you don't want to get your strings beyond 78 characters or whatever standard you may have. Incidentally, he is also the maintainer of the PerlTidy plugin, which might help you even more on tidying you code.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Alias also added two new options: &lt;span style="font-style: italic;"&gt;"Close This Project"&lt;/span&gt; to close all open files in the same project as the current file, and &lt;span style="font-style: italic;"&gt;"Close Other Projects"&lt;/span&gt; to do the opposite. Something everybody used to editing several projects at the same time were really looking forward to.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;As usual, many thanks are in order to everybody who got involved directly or indirectly in this release of Padre. And make sure to keep bug reports and wishlists coming!&lt;br /&gt;&lt;br /&gt;Oh, one more thing: being a special "birthday edition", this release has a commemorative title on the main Padre window. Make sure you drop by #padre on irc.perl.org and help us go through enough changes/fixes so we can release 0.43 even better (and without that title :P)&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-3719401866173063433?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/3719401866173063433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2009/07/on-padres-birthday-gift-to-you-042.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/3719401866173063433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/3719401866173063433'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2009/07/on-padres-birthday-gift-to-you-042.html' title='On Padre&apos;s birthday, a gift to you (0.42 released!)'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Zg_F9liESSo/SnNVJj6Ar2I/AAAAAAAAAGQ/eBzZ8T5aTs0/s72-c/logo.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-314829149597668445</id><published>2009-07-23T04:03:00.004-03:00</published><updated>2009-07-23T04:11:27.048-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Padre'/><title type='text'>Padre 0.41 released!</title><content type='html'>Wow, not even a week passed and we already have a new version for you!&lt;br /&gt;&lt;br /&gt;Aside from the usual bugfixes, &lt;a href="http://padre.perlide.org/"&gt;Padre&lt;/a&gt; 0.41 has the following changes:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The deprecated and rarely visible "experimental mode" was completely removed;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ahmadzawawi.blogspot.com/"&gt;Ahmad Zawawi&lt;/a&gt;++ is doing a huge revamp on Padre's internals (sorry, you'll have to wait for the birthday edition to get all the benefits), and thanks to him now run_command in a separate window works in win32 to support prompt('...') in Perl 6 and &lt;stdin&gt; in Perl 5;&lt;/stdin&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The long awaited find/replace inside selections feature is finally implemented for your refactoring pleasure&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Also, &lt;a href="http://szabgab.com/"&gt;Gabor Szabo&lt;/a&gt;++ created a brand new syntax highlighter configuration system. Plugins now can add more syntax highlighters and users can pick one per mime-type. Some plugins already support this (such as the Parrot and Perl 6 ones) so if you have them enabled you can already change your preferred highlighter (from Scintilla to STD.pm, for example);&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Last but not least, Gabriel Vieira++ just kept going with his changes on the directory view. This time, not only does Padre got some really nice artwork for folders and files on the tree view, but also users are now able to drag and drop their files around.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;With this brand new 0.41 release, we open the gates for this weekend's Padre birthday festival. I'll probably blog about it tomorrow. Until then, hack away :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-314829149597668445?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/314829149597668445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2009/07/padre-041-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/314829149597668445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/314829149597668445'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2009/07/padre-041-released.html' title='Padre 0.41 released!'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-3269915615205137716</id><published>2009-07-17T03:06:00.002-03:00</published><updated>2009-07-20T18:22:53.508-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Padre'/><title type='text'>Padre 0.40 released!</title><content type='html'>It is with great pleasure that I announce &lt;a href="http://search.cpan.org/perldoc?Padre"&gt;Padre 0.40&lt;/a&gt; is just fresh out of the oven!&lt;br /&gt;&lt;br /&gt;&lt;div class="im"&gt;This is a special release of &lt;a href="http://padre.perlide.org/"&gt;Padre, The Perl IDE&lt;/a&gt;, on very different accounts:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://use.perl.org/%7EAlias/journal/"&gt;Adam Kennedy&lt;/a&gt;++ ran his new toy (&lt;a href="http://search.cpan.org/perldoc?CPANDB"&gt;CPANDB with dependency Graphs&lt;/a&gt;) on Padre and was able to eliminate about 10 Padre dependencies, including some pretty hairy ones with lots of FAIL reports on CPAN Testers. This not only makes Padre lighter, but also greatly enhances chances of a successful install, and makes it really easier to package.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Our newest contributor, Gabriel Vieira++, committed several improvements to the Directory Browser (view -&gt; directory tree), making it way faster and more usable than before.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="im"&gt;The brand new Padre 0.40 should arrive at your nearest &lt;a href="http://search.cpan.org/"&gt;CPAN&lt;/a&gt; mirror in no time. Please report any problems or feature requests to &lt;a href="http://padre.perlide.org/trac/"&gt;our request tracker&lt;/a&gt; or on &lt;a href="http://padre.perlide.org/irc.html#padre"&gt;#padre at &lt;/a&gt;&lt;a href="http://padre.perlide.org/irc.html#padre" target="_blank"&gt;irc.perl.org&lt;/a&gt;. We're really excited and expecting to do a lot of work now that we're so close to Padre's &lt;a href="http://use.perl.org/%7EAlias/journal/39293"&gt;"birthday release"&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div class="im"&gt;&lt;br /&gt;As usual, many thanks are also in order to all of Padre's unsung heroes, and just about everyone that helps us directly or indirectly turn it into one of the best IDEs for Perl development out there.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;Have fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-3269915615205137716?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/3269915615205137716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2009/07/padre-040-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/3269915615205137716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/3269915615205137716'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2009/07/padre-040-released.html' title='Padre 0.40 released!'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-744217040905213874</id><published>2009-07-12T04:05:00.000-03:00</published><updated>2009-07-12T04:05:47.282-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TT'/><category scheme='http://www.blogger.com/atom/ns#' term='Template Toolkit'/><title type='text'>View your templates' structure as a graph</title><content type='html'>Some very nice visualization tools have emerged on CPAN lately, such as &lt;a href="http://www.simplicidade.org/notes/"&gt;melo&lt;/a&gt;++'s &lt;a href="http://marcus.nordaaker.com/2009/05/awesome-route-graph-with-mojoxroutesasgraph/"&gt;MojoX::Routes::AsGraph&lt;/a&gt; and &lt;a href="http://lumberjaph.net/blog/"&gt;franckc&lt;/a&gt;++'s &lt;a href="http://lumberjaph.net/blog/index.php/2009/05/30/catalystxdispatcherasgraph/"&gt;CatalystX::Dispatcher::AsGraph&lt;/a&gt;. Now, be it Catalyst, Mojolicious, Titanium, Jifty or whatever Perl web framework you use, you most likely use &lt;a href="http://wardley.org/"&gt;abw&lt;/a&gt;++'s amazing &lt;a href="http://wardley.org/computers/tt.html"&gt;Template Toolkit&lt;/a&gt; for rendering your site. So I really missed something that would help visualize and untangle the usually complex template structure on a complex website. If you feel that way too, wait no more! :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;use Template::AsGraph&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;my $graph = Template::AsGraph-&gt;graph('mytemplate.tt2');&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;That's about it. You can also pass TT's configurations and even variables that might mangle with template flow:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Template::AsGraph-&gt;graph('template.tt2', \%config, \%vars);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This even lets you get the actual output of the template processing in case you want it as well (you do this with the OUTPUT setting on your config hash, btw).&lt;br /&gt;&lt;br /&gt;The result? See for yourself:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Zg_F9liESSo/SlmFgb0mAjI/AAAAAAAAAGI/pKZ3wN_a-lM/s1600-h/routes.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 166px;" src="http://3.bp.blogspot.com/_Zg_F9liESSo/SlmFgb0mAjI/AAAAAAAAAGI/pKZ3wN_a-lM/s400/routes.png" alt="" id="BLOGGER_PHOTO_ID_5357460024004575794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Zg_F9liESSo/SlmFgHmMQCI/AAAAAAAAAGA/xpkS1Ov3mNk/s1600-h/asgraph.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 216px;" src="http://4.bp.blogspot.com/_Zg_F9liESSo/SlmFgHmMQCI/AAAAAAAAAGA/xpkS1Ov3mNk/s400/asgraph.png" alt="" id="BLOGGER_PHOTO_ID_5357460018575458338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://github.com/garu/Template-AsGraph"&gt;Dev code's on github&lt;/a&gt;, and the first release should arrive &lt;a href="http://search.cpan.org/perldoc?Template::AsGraph"&gt;at your local CPAN mirror&lt;/a&gt; anytime now.&lt;br /&gt;&lt;br /&gt;Let me know what you think!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-744217040905213874?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/744217040905213874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2009/07/view-your-templates-structure-as-graph.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/744217040905213874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/744217040905213874'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2009/07/view-your-templates-structure-as-graph.html' title='View your templates&apos; structure as a graph'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Zg_F9liESSo/SlmFgb0mAjI/AAAAAAAAAGI/pKZ3wN_a-lM/s72-c/routes.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-8944580042402355948</id><published>2009-06-15T02:02:00.002-03:00</published><updated>2009-06-15T02:47:50.938-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CPAN Ratings'/><title type='text'>Rate a Perl module today!</title><content type='html'>While &lt;a href="http://search.cpan.org/"&gt;CPAN&lt;/a&gt; is all in favor of &lt;a href="http://c2.com/cgi/wiki?ThereIsMoreThanOneWayToDoIt"&gt;TIMTOWTDI&lt;/a&gt;, when we search for a functionality we usually want the best option out there. Which is it? It's the one that best fits &lt;span style="font-weight: bold;"&gt;your&lt;/span&gt; needs, of course, and that's the whole beauty of it. But, when you're filled with doubt, where to look? Well, see what others think of the alternatives!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Enter CPANRatings&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When coding non-&lt;a href="http://search.cpan.org/perldoc?Moose"&gt;Moose&lt;/a&gt; OO, I, for instance, really like &lt;a href="http://search.cpan.org/dist/Class-XSAccessor/"&gt;Class::XSAccessor&lt;/a&gt;. So, it's about time I pay my respects to &lt;a href="http://steffen-mueller.net/"&gt;smueller&lt;/a&gt;++. The first thing I do is open &lt;a href="http://cpanratings.perl.org/"&gt;CPANRatings website&lt;/a&gt; and look for it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Zg_F9liESSo/SjW_2oxbT0I/AAAAAAAAAFY/DtzAQBFDgCo/s1600-h/4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 237px;" src="http://1.bp.blogspot.com/_Zg_F9liESSo/SjW_2oxbT0I/AAAAAAAAAFY/DtzAQBFDgCo/s400/4.png" alt="" id="BLOGGER_PHOTO_ID_5347391077950902082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;As important as this module is (at least for me), it has no ratings yet. So I click on "&lt;span style="font-style: italic;"&gt;Rate this distribution&lt;/span&gt;" link as shown above. It points me to &lt;a href="http://www.askbjoernhansen.com/"&gt;Ask&lt;/a&gt;++'s &lt;a href="https://www.bitcard.org/"&gt;Bitcard&lt;/a&gt; login. To create your own login, all you need is an email account.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Zg_F9liESSo/SjXAyPob3wI/AAAAAAAAAFg/-GHQzMBihx4/s1600-h/3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 284px; height: 129px;" src="http://3.bp.blogspot.com/_Zg_F9liESSo/SjXAyPob3wI/AAAAAAAAAFg/-GHQzMBihx4/s400/3.png" alt="" id="BLOGGER_PHOTO_ID_5347392101994454786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;After clicking on "&lt;span style="font-style: italic;"&gt;login&lt;/span&gt;", I get to type my email and chosen password. If this is your first Rating and you don't have a Bitcard account, just click on "&lt;span style="font-style: italic;"&gt;register&lt;/span&gt;", as shown in the image below. It goes to a page very similar to the login one, with just the additional "&lt;span style="font-style: italic;"&gt;Verify Password&lt;/span&gt;" field. It's quick and easy, and requires no personal data input. After successfully logging in, you can even set an option so it logs you in automatically in the future.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Zg_F9liESSo/SjXDnIhZgvI/AAAAAAAAAFo/Dh5Md0dvUu8/s1600-h/5.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 277px; height: 244px;" src="http://1.bp.blogspot.com/_Zg_F9liESSo/SjXDnIhZgvI/AAAAAAAAAFo/Dh5Md0dvUu8/s400/5.png" alt="" id="BLOGGER_PHOTO_ID_5347395209642214130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;After the login, you get to rate the chosen distribution. You'll be presented with four fields: Documentation, Interface, Ease of Use, and Overall, and be allowed to place your vote in a scale 1 to 5, higher numbers being better. Since all fields are optional, you can leave any of them blank if you want. Finally, there is a "free-text" &lt;span style="font-style: italic;"&gt;Review&lt;/span&gt; box where you can speak your mind freely about that distribution, its strengths and weaknesses, maybe even justify your choices in the fields above or talk about alternatives.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Zg_F9liESSo/SjXLkEpL-4I/AAAAAAAAAFw/eLQgrG5I9tY/s1600-h/6.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 222px;" src="http://3.bp.blogspot.com/_Zg_F9liESSo/SjXLkEpL-4I/AAAAAAAAAFw/eLQgrG5I9tY/s400/6.png" alt="" id="BLOGGER_PHOTO_ID_5347403953154554754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A few reminders are in order:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Be useful&lt;/li&gt;&lt;li&gt;Be polite&lt;/li&gt;&lt;/ul&gt;If you dislike a given distribution, don't write "&lt;span style="font-style: italic;"&gt;this sucks&lt;/span&gt;". Give a constructive criticism, say &lt;span style="font-weight: bold;"&gt;why&lt;/span&gt; you don't like it, or even better, what could be done to improve it. And remember, you can always come back to your rating and edit it! (writing "&lt;span style="font-style: italic;"&gt;this rocks&lt;/span&gt;" is also not very useful, so remember to explain your opinion be it good or bad - or just not write anything at all and stick to the ratings).&lt;br /&gt;&lt;br /&gt;Also, refrain from rating your own distributions. Your module isn't rated? Ask a user to do it! If you wish to reply to a rating given to one of your modules, leave the ratings blank and just write the review.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Quick Access Through CPAN&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What's that URL again? &lt;a href="http://cpanratings.perl.org/"&gt;http://cpanratings.perl.org&lt;/a&gt;, but don't worry about it. Since most Perl developers live inside the &lt;a href="http://search.cpan.org/"&gt;CPAN search&lt;/a&gt;, there's a quick way to the ratings from there, too. After doing your search, just click on the module distribution link - the one with the version number, as shown below:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Zg_F9liESSo/SjWzG05leBI/AAAAAAAAAFI/dcT6xmxGux0/s1600-h/1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 365px; height: 148px;" src="http://4.bp.blogspot.com/_Zg_F9liESSo/SjWzG05leBI/AAAAAAAAAFI/dcT6xmxGux0/s400/1.png" alt="" id="BLOGGER_PHOTO_ID_5347377062433093650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This can give a lot of information on a given distribution, including module lists, documentation, test results, bug reports, and... ratings! The image below shows me part of the result for Class::XSAccessor at the time of writing this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Zg_F9liESSo/SjXXBB9wLBI/AAAAAAAAAF4/H5xDQakCEjg/s1600-h/2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 135px;" src="http://4.bp.blogspot.com/_Zg_F9liESSo/SjXXBB9wLBI/AAAAAAAAAF4/H5xDQakCEjg/s400/2.png" alt="" id="BLOGGER_PHOTO_ID_5347416545279618066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As you can see, it has no reviews whatsoever. So let's write one! When clicking on "&lt;span style="font-style: italic;"&gt;Rate this distribution&lt;/span&gt;", you are redirected to CPANRatings and can follow the steps just as before. Nice, huh?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Where to Start?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It doesn't matter, really. Find a module you use (or had to use) for any particular task, and take a couple of minutes to tell the world how you feel about it. This can be specially helpful not only to other users, but also to the developer himself/herself in order to get user feedback and further improve it.&lt;br /&gt;&lt;br /&gt;As an example, a simple browse on &lt;a href="http://padre.perlide.org/"&gt;Padre&lt;/a&gt;'s Makefile.PL showed 22 modules (30%) &lt;span style="font-style: italic;"&gt;without any rating&lt;/span&gt;, including &lt;a href="http://search.cpan.org/dist/Class-Adapter/"&gt;Class::Adapter&lt;/a&gt;, &lt;a href="http://search.cpan.org/dist/Class-XSAccessor/"&gt;Class::XSAccessor&lt;/a&gt; (and &lt;a href="http://search.cpan.org/dist/Class-XSAccessor-Array/"&gt;Class::XSAccessor::Array&lt;/a&gt;), &lt;a href="http://search.cpan.org/dist/IO/"&gt;IO&lt;/a&gt; (!), &lt;a href="http://search.cpan.org/dist/threads/"&gt;threads&lt;/a&gt; (!!!), and even &lt;a href="http://search.cpan.org/dist/Test-Most/"&gt;Test::Most&lt;/a&gt;. Not **one** rating. Not even Padre has a rating yet!&lt;br /&gt;&lt;br /&gt;It doesn't even have to be a "rateless" distribution either. Did you know that, by the time of this writing, &lt;a href="http://search.cpan.org/dist/PAR/"&gt;PAR&lt;/a&gt; only has three ratings?&lt;a href="http://search.cpan.org/dist/Win32-API/"&gt; Win32::API&lt;/a&gt; too! Even &lt;a href="http://search.cpan.org/%7Egaas/"&gt;gaas&lt;/a&gt;++'s &lt;a href="http://search.cpan.org/dist/URI/"&gt;URI&lt;/a&gt; distribution, &lt;a href="http://lumberjaph.net/blog/index.php/2009/06/12/shape-of-cpan/"&gt;recently found to be one of the centers&lt;/a&gt; of the &lt;a href="http://cpan-explorer.org/packages/"&gt;CPAN module cloud&lt;/a&gt;, has only two ratings!&lt;br /&gt;&lt;br /&gt;When writing your usual "&lt;span style="font-family:courier new;"&gt;use MODULE&lt;/span&gt;" statement, think about it. Do you love it? Do you hate it? If someone were to ask about it, would you recommend it? Why?&lt;br /&gt;&lt;br /&gt;Next time you see yourself lost amidst the CPAN jungle of alternatives, remember: we are all responsible.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;So, what are you waiting for? Rate a module today!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-8944580042402355948?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/8944580042402355948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2009/06/rate-perl-module-today.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/8944580042402355948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/8944580042402355948'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2009/06/rate-perl-module-today.html' title='Rate a Perl module today!'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Zg_F9liESSo/SjW_2oxbT0I/AAAAAAAAAFY/DtzAQBFDgCo/s72-c/4.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-8652955105421299534</id><published>2009-06-01T21:32:00.000-03:00</published><updated>2009-06-01T21:32:01.018-03:00</updated><title type='text'>Fast, concise and reliable code? Try Perl!</title><content type='html'>Maybe you're new to programming. Maybe you just like learning new languages. But, from so many options, which one to choose?&lt;br /&gt;&lt;br /&gt;Sure, you probably heard a lot about about &lt;a href="http://java.com/"&gt;Java&lt;/a&gt;. &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt; too, specially if you're into web programming. If you're into open-source, you might have also heard about &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; and, if you're a Object-Oriented junkie, &lt;a href="http://www.ruby-lang.org/"&gt;Ruby&lt;/a&gt;.  In all cases, you probably also heard about &lt;a href="http://www.perl.org/"&gt;Perl&lt;/a&gt;.&lt;br /&gt;&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="on down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;img src="http://www.blogger.com/img/blank.gif" alt="Link" class="gl_link" border="0" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Perl.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately, chances are you heard a lot of &lt;a href="http://en.wikipedia.org/wiki/Fear,_uncertainty_and_doubt"&gt;FUD&lt;/a&gt; about Perl. This topic itself has sprung a lot of comments and replies, so I'll not go there. For whatever purpose or language, you should never pay attention to FUD. So, don't. Instead, I'm gonna talk a little about what makes Perl the language of choice for so many people and companies.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Perl is fast!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I know, I know, benchmarking is evil (you can see a broader discussion about it &lt;a href="http://shootout.alioth.debian.org/u32q/miscfile.php?file=benchmarking&amp;amp;title=Flawed%20Benchmarks"&gt;here&lt;/a&gt; and here(&lt;a href="http://www252.pair.com/comdog/Talks/brian.d.foy-BenchmarkingPerl-LightningTalk.pdf"&gt;slides&lt;/a&gt;+&lt;a href="http://perlcast.com/2007/04/08/brian-d-foy-on-benchmarking/"&gt;talk&lt;/a&gt;)). But you don't even have to benchmark your code to see how fast it runs. Perl is not purely interpreted and has several optimizations during compile time. If even after that your code is not fast enough for your purposes, you can use &lt;a href="http://perldoc.perl.org/perlxs.html"&gt;XS&lt;/a&gt;, &lt;a href="http://www.swig.org/"&gt;SWIG&lt;/a&gt; or even &lt;a href="http://search.cpan.org/perldoc?Inline"&gt;Inline&lt;/a&gt; to create parts of code in C (or even Assembly, for that matter) where speed is critical.&lt;br /&gt;&lt;br /&gt;Examples include Perl's OpenGL implementation, which has no statistical differences between the C implementation and even overcomes C in some operations (impressed? &lt;a href="http://graphcomp.com/pogl.cgi?v=0111s3m3&amp;amp;r=s1m1"&gt;see the full story&lt;/a&gt;). I've also seen &lt;a href="http://www.lornlab.org/"&gt;Lorn&lt;/a&gt;++'s &lt;a href="http://search.cpan.org/perldoc?LWP::Curl"&gt;LWP::Curl&lt;/a&gt; fetch web pages faster than the &lt;a href="http://curl.haxx.se/"&gt;curl&lt;/a&gt; binary itself (I'll probably blog about this later on, but if you're interested, &lt;a href="http://github.com/lorn/lwp-curl/tree/master"&gt;he could use your help&lt;/a&gt;!).&lt;br /&gt;&lt;br /&gt;Not only that, but &lt;a href="http://www.tbray.org/ongoing/When/200x/2007/10/30/WF-Results"&gt;a Perl implementation also won the WideFinder contest&lt;/a&gt;, where people attempted to write a program that would benefit from paralelism present in modern CPUs with slow clock rate but many cores.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Perl lets you do more, with less code.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Perl's conciseness is so amazing that it's a popular game among programmers to try and write a program that solves a particular problem with less characters as possible (this is called &lt;span style="font-style: italic;"&gt;golf&lt;/span&gt;, and you can see &lt;a href="http://codegolf.com/"&gt;here&lt;/a&gt; how Perl stands out from the crowd in it). Not only that, but one-liners can be so powerful there are a lot of system administrators who use Perl as a command line tool instead of as a programmer would.&lt;br /&gt;&lt;br /&gt;Sure, you can write a &lt;a href="http://c2.com/cgi/wiki?ShortestWikiContest"&gt;complete wiki in 5 lines of Perl&lt;/a&gt;. But, of course, it doesn't mean you should. Professional programs, written by professional Perl programmers, tend to be clear and scalable, &lt;span style="font-style: italic;"&gt;yet&lt;/span&gt; still concise. If you're into metrics, you know this usually means &lt;a href="http://en.wikipedia.org/wiki/Software_metrics"&gt;faster development&lt;/a&gt; and &lt;a href="http://amartester.blogspot.com/2007/04/bugs-per-lines-of-code.html"&gt;fewer bugs&lt;/a&gt; in your code.&lt;br /&gt;&lt;br /&gt;I recently came across the &lt;a href="http://shootout.alioth.debian.org/index.php"&gt;Computer Language Benchmarks Game&lt;/a&gt; and a &lt;a href="http://gmarceau.qc.ca/blog/2009/05/speed-size-and-dependability-of.html"&gt;nice graph&lt;/a&gt; of programs benchmarked against their implementations in several different languages. The X axis is slowness, while the Y axis is code size. So, an utopic optimal language would have all their programs on (0,0). Here's the result related to this post:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Zg_F9liESSo/SiRbdAkcIvI/AAAAAAAAAFA/pSoMvW7rXp4/s1600-h/linguagens.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 90px;" src="http://3.bp.blogspot.com/_Zg_F9liESSo/SiRbdAkcIvI/AAAAAAAAAFA/pSoMvW7rXp4/s400/linguagens.png" alt="" id="BLOGGER_PHOTO_ID_5342495611895423730" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;As you can see, Perl is not only a heavy player, it's one of your best choices when it comes to speed, size and dependability. Of course, you can help your language (whatever it is) improve it's average - even Perl! But I digress...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Perl has a powerful and modern object system.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It's called &lt;a href="http://search.cpan.org/perldoc?Moose::Manual"&gt;Moose&lt;/a&gt;. Perl 5 provides all the material to implement object orientation (OO) as you see fit. While writing standard Perl OO is easy if you actually understand OO, it's through Moose that you'll experience the actual ease of use and power of OO. Moose proudly stole all the nice features from other object systems present in different languages such as Java, Ruby, Smalltalk, Ocaml, Perl6, and implemented some sweetness of their own, such as &lt;a href="http://www.modernperlbooks.com/cgi-bin/mt/mt-search.cgi?blog_id=1&amp;amp;tag=roles&amp;amp;limit=20"&gt;Perl Roles&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;-------------8&lt;-------------&lt;br /&gt;package Laptop;&lt;br /&gt;use Moose;&lt;br /&gt;&lt;br /&gt;extends 'Computer';&lt;br /&gt;&lt;br /&gt;has 'weight' =&gt; (isa =&gt; 'Int', is =&gt; 'rw', required =&gt; 1);&lt;br /&gt;-------------8&lt;-------------&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Beautiful, simple, elegant, powerful. Moose.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Perl has an amazing and active community.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The Perl community is HUGE and vibrant. We have several Perl Mongers groups spread around the globe, so you'll probably find one nearby (if not, you can always create one!). There are monthly social and technical meetings, workshops and major Perl conferences called YAPCs. But, if people are not really your thing, mind the code they produce: The &lt;a href="http://search.cpan.org/"&gt;Comprehensive Perl Archive Network&lt;/a&gt; (CPAN) has more than 16 thousand modules ready for you to use, earning the common saying that, with CPAN, "90% of your program - whatever it is - is already written". Play with the search utility and see for yourself! Not only that, by the time of this writing there was an average of around 200 new modules/versions uploaded every month!&lt;br /&gt;&lt;br /&gt;But, most importantly:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-style: italic;"&gt;Perl is fun!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When you first dip your toe into Perl, you might be a little scared of how can there be so many ways of doing the same thing (in the Perl world this is called TIMTOWTDI). Perl not only has a plural and flexible syntax, it lets you extend it, bend it, and modify it to suit your needs and style.  With Perl, you are not tied to the way the language developer's wanted you to write your program. It lets you write &lt;span style="font-style: italic;"&gt;your code, your way&lt;/span&gt;. So, letting your imagination flow, you can actually have fun while coding, be it writing clear, elegant and professional code during work (which can even be enforced with &lt;a href="http://search.cpan.org/perldoc?Perl::Critic"&gt;Perl::Critic&lt;/a&gt; and &lt;a href="http://search.cpan.org/perldoc?Perl::Tidy"&gt;allies&lt;/a&gt;) or writing &lt;a href="http://search.cpan.org/search?m=all&amp;amp;q=Acme&amp;amp;s=1&amp;amp;n=100"&gt;many&lt;/a&gt; &lt;a href="http://search.cpan.org/perldoc?Lingua::Romana::Perligata"&gt;other&lt;/a&gt; &lt;a href="http://www.perlmonks.org/index.pl?node_id=45213"&gt;forms&lt;/a&gt; of &lt;a href="http://www.perlmonks.org/index.pl?node_id=456041"&gt;art&lt;/a&gt; in your free time.&lt;br /&gt;&lt;br /&gt;Perl is freedom - try it.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-8652955105421299534?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/8652955105421299534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2009/06/fast-concise-and-reliable-code-try-perl.html#comment-form' title='24 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/8652955105421299534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/8652955105421299534'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2009/06/fast-concise-and-reliable-code-try-perl.html' title='Fast, concise and reliable code? Try Perl!'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Zg_F9liESSo/SiRbdAkcIvI/AAAAAAAAAFA/pSoMvW7rXp4/s72-c/linguagens.png' height='72' width='72'/><thr:total>24</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-4482208940309089266</id><published>2009-05-25T15:46:00.000-03:00</published><updated>2009-05-25T15:46:29.728-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mojolicious'/><category scheme='http://www.blogger.com/atom/ns#' term='Catalyst'/><category scheme='http://www.blogger.com/atom/ns#' term='Mojo'/><category scheme='http://www.blogger.com/atom/ns#' term='Padre'/><title type='text'>Catalyst/Mojo Plugins for Padre now in 8 languages!</title><content type='html'>&lt;a href="http://www.catalystframework.org/"&gt;Catalyst&lt;/a&gt; is an amazing web framework, but requires a little learning effort before you get to do all the cool stuff. &lt;a href="http://mojolicious.org/"&gt;Mojo&lt;/a&gt; still needs some work (specially documentation-wise) but it's catching up as a solid &lt;span style="font-style: italic;"&gt;simple-yet-powerful&lt;/span&gt; alternative for web development, specially if you're Perl begginer. As you may know, both of them have &lt;a href="http://padre.perlide.org/"&gt;Padre&lt;/a&gt; plugins to further easen your developing process. To make it even easier, the new versions of &lt;a href="http://onionstand.blogspot.com/2009/04/padre-mojolicious.html"&gt;Padre::Plugin::Mojolicious&lt;/a&gt; (0.02) and &lt;a href="http://onionstand.blogspot.com/2009/04/padre-catalyst.html"&gt;Padre::Plugin::Catalyst&lt;/a&gt; (0.03) now have localization support, so menu and messages can be displayed in your native tongue! Problem is, I don't know what your native tongue is ;)&lt;br /&gt;&lt;br /&gt;Right now, they're already translated in these languages (besides original english, of course):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Arabic (&lt;a href="http://search.cpan.org/%7Eazawawi/"&gt;azawawi&lt;/a&gt;++)&lt;/li&gt;&lt;li&gt;Brazilian Portuguese (&lt;a href="http://onionstand.blogspot.com/"&gt;me&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Chinese (Traditional)  (&lt;a href="http://bluet.org/"&gt;bluet&lt;/a&gt;++)&lt;/li&gt;&lt;li&gt;Dutch (&lt;a href="http://use.perl.org/%7Eddn123456/journal/"&gt;ddn&lt;/a&gt;++)&lt;/li&gt;&lt;li&gt;French (&lt;a href="http://jquelin.blogspot.com/"&gt;jq&lt;/a&gt;++)&lt;/li&gt;&lt;li&gt;Polish (&lt;a href="http://therek.net/"&gt;therek&lt;/a&gt;++)&lt;/li&gt;&lt;li&gt;Russian (&lt;a href="http://www.sharifulin.ru/"&gt;sharifuln&lt;/a&gt;++)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Is your native tongue not listed? Then please add support for it! You can find both plugins on &lt;a href="http://svn.perlide.org/padre/trunk"&gt;Padre's svn repository&lt;/a&gt;. Let me know if you need any help creating a &lt;span style="font-style: italic;"&gt;.po&lt;/span&gt; file from &lt;span style="font-style: italic;"&gt;messages.pot&lt;/span&gt;. Also, since both Cat and Mojo plugins share almost the same messages, if you translate one of them, the other should be a quick and easy copy/paste process. Heck, I can even do it for you if you're too lazy ;)&lt;br /&gt;&lt;br /&gt;Many thanks to all translators! Also, many thanks to jq, who did an excellent job adding translation support for plugins on Padre, and to &lt;a href="http://szabgab.com/"&gt;szabgab&lt;/a&gt;++ for the impressive effort on enabling translation for all plugins under Padre's svn repo. Now we could really use your help translating not only these, but all of Padre's plugins!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-4482208940309089266?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/4482208940309089266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2009/05/catalystmojo-plugins-for-padre-now-in-8.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/4482208940309089266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/4482208940309089266'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2009/05/catalystmojo-plugins-for-padre-now-in-8.html' title='Catalyst/Mojo Plugins for Padre now in 8 languages!'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-7841514134103434346</id><published>2009-05-15T18:20:00.000-03:00</published><updated>2009-05-15T18:20:02.093-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Test::More memory issues</title><content type='html'>You gotta love testing. And, writing Perl code/tests, you gotta love &lt;a href="http://search.cpan.org/perldoc?Test::More"&gt;Test::More&lt;/a&gt;. It has a great API, it's cool, it's fast, it's stable, it's leaking memory... &lt;span style="font-style: italic;"&gt;"Say what?!"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yeah. I mean, it's not &lt;span style="font-style: italic;"&gt;leaking&lt;/span&gt; leaking, just eating more memory at every test you run, be it &lt;span style="font-family: courier new;"&gt;is()&lt;/span&gt;, &lt;span style="font-family: courier new;"&gt;ok()&lt;/span&gt;, or whatever. See for yourself:&lt;br /&gt;&lt;pre&gt;-------------8&lt;-------------&lt;br /&gt;use Test::More qw(no_plan);&lt;br /&gt;while (1) {&lt;br /&gt; is(1,1);&lt;br /&gt;}&lt;br /&gt;-------------&gt;8-------------&lt;br /&gt;&lt;/pre&gt;If you run this, you'll see memory consumption for the process going up at a very fast pace (use &lt;a href="http://en.wikipedia.org/wiki/Top_%28Unix%29"&gt;top&lt;/a&gt; or any other viewer), this is what it looks like on my system after 40K tests (a couple of seconds using the code above):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Zg_F9liESSo/SgybjdHQBqI/AAAAAAAAAE4/Kr6Lw56l6_o/s1600-h/test-more1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 452px; height: 63px;" src="http://4.bp.blogspot.com/_Zg_F9liESSo/SgybjdHQBqI/AAAAAAAAAE4/Kr6Lw56l6_o/s400/test-more1.png" alt="" id="BLOGGER_PHOTO_ID_5335810691939960482" border="0" /&gt;&lt;/a&gt;After a quick stop by &lt;a href="http://www.irc.perl.org/channels.mhtml"&gt;#perl-qa&lt;/a&gt;, &lt;a href="http://rjbs.manxome.org/"&gt;rjbs&lt;/a&gt;++ said it was a feature, not a bug. Apparently, Test::Builder (the backend for Test::More, Test::Simple and their siblings/derivatives) stores each test result, so by the time you're at 50_000 results, you'll have 50_000 hashes in memory, even if they are all just PASS tests.&lt;br /&gt;&lt;br /&gt;This does explain the ever-increasing memory issue, but it's still a no go for me. Although &lt;a href="http://blog.grokmedia.com/2008/11/20/95-of-all-statistics-are-made-up/"&gt;95%&lt;/a&gt; of Test::Builder users will never see this as a problem, I'm doing &lt;a href="http://onionstand.blogspot.com/2009/05/testing-differences-in-templates.html"&gt;a lot of combinatorics tests&lt;/a&gt;, so a single &lt;span style="font-style: italic;"&gt;.t&lt;/span&gt; of mine has to go through well over 500K tests, hitting a memory wall real hard.&lt;br /&gt;&lt;br /&gt;Now, if you stumbled in that same problem, &lt;a href="http://en.wikipedia.org/wiki/Don%27t_Panic_%28Hitchhiker%27s_Guide_to_the_Galaxy%29#Don.27t_Panic"&gt;don't panic&lt;/a&gt;: there are at least two possible workarounds for it.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Split you combinatorics tests into smaller test files, picking the variable with the most possible...erm... variations... and turn it into a different constant for each test file. If you picked a good one, the number of tests on each file will be exponetially decreased and the collected test data won't be such a memory burden.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If you have huge/nested loops in your tests, you can take a reverse approach and instead of using "ok or not ok" functions, use "normal" (code) compares, triggering &lt;span style="font-family: courier new;"&gt;fail()&lt;/span&gt; if something bad happens. This way the testing framework will only store the history of failed tests, eating as little memory as possible.&lt;/li&gt;&lt;/ol&gt;Just a couple of hours before my "&lt;a href="http://code.google.com/p/test-more/issues/detail?id=43"&gt;potential bug&lt;/a&gt;" report, &lt;a href="http://schwern.org/"&gt;Schwern&lt;/a&gt;++ replied confirming it was "working as designed", and was kind enough to patch those workaround tips in the "CAVEATS and NOTES" part of the documentation for Test::Builder (as it affects everything, not just Test::More). I really should thank &lt;a href="http://search.cpan.org/%7Eapocal/"&gt;Apocalypse&lt;/a&gt;++ for talking me into writing it :)&lt;br /&gt;&lt;br /&gt;Of course, I still hope to see this problem go away in future releases, and (fortunately for me) so does Schwern. According to him, this was one of the design issues which brought Test::AtRuntime to a halt. As a result, his upcoming &lt;a href="http://github.com/schwern/test-more/tree/Test-Builder2"&gt;Test::Builder2&lt;/a&gt; will have the ability to turn off history and the history sub-system will be a separate object. There also might be a happy medium where history contains just a count of each type of result - just as I hoped - which will allow most of Test::More's features based on knowing the results to continue to work while not eating up too much memory in a long-running test file.&lt;br /&gt;&lt;br /&gt;Yay for testing, and for the &lt;a href="http://qa.perl.org/"&gt;Perl QA community&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-7841514134103434346?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/7841514134103434346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2009/05/testmore-memory-issues.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/7841514134103434346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/7841514134103434346'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2009/05/testmore-memory-issues.html' title='Test::More memory issues'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Zg_F9liESSo/SgybjdHQBqI/AAAAAAAAAE4/Kr6Lw56l6_o/s72-c/test-more1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-6682822585126878072</id><published>2009-05-09T22:38:00.000-03:00</published><updated>2009-05-09T22:38:01.486-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Testing Differences in Templates</title><content type='html'>I've been doing some template refactoring now, and since I want to make sure the new templates render exactly the same as the old ones, I used &lt;a href="http://schwern.org/"&gt;Schwern&lt;/a&gt;++'s &lt;a href="http://search.cpan.org/perldoc?Test::More"&gt;Test::More&lt;/a&gt; to compare their outputs for all combinations of input variables I had. Things were great for the first small-and-obvious changes, but at some point both outputs &lt;span style="font-style: italic;"&gt;looked&lt;/span&gt; the same to me, and yet were still failing the test, meaning something was off. But what?&lt;br /&gt;&lt;br /&gt;A quick &lt;a href="http://search.cpan.org"&gt;CPAN search&lt;/a&gt; pointed me to &lt;a href="http://search.cpan.org/%7Erbs/"&gt;Barrie Slaymaker&lt;/a&gt;++'s &lt;a href="http://search.cpan.org/perldoc?Test::Differences"&gt;Test::Differences&lt;/a&gt; (now maintained by &lt;a href="http://use.perl.org/%7EOvid/journal/"&gt;Ovid&lt;/a&gt;++). After that, all I had to do was replace my &lt;span style="font-family: courier new;"&gt;is()&lt;/span&gt; call with &lt;span style="font-family: courier new;"&gt;eq_or_diff()&lt;/span&gt; and voilá:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: courier new; font-size: 85%;"&gt;#   Failed test 'templates should produce the exact same output'&lt;br /&gt;#   at t/refactoring.t line 128.&lt;br /&gt;# +---+------+---+----------+&lt;br /&gt;# | Ln|  Got | Ln| Expected |&lt;br /&gt;# +---+------+---+----------+&lt;br /&gt;# | 3 |      | 3 |          |&lt;br /&gt;# | 4 |      | 4 |          |&lt;br /&gt;# | 5 |      | 5 |          |&lt;br /&gt;# * 6 |\t\n  * 6 |\n        |&lt;br /&gt;# | 7 |      | 7 |          |&lt;br /&gt;# | 8 |      | 8 |          |&lt;br /&gt;# | 9 |      | 9 |          |&lt;br /&gt;# +---+------+---+----------+&lt;br /&gt;&lt;/pre&gt;Ha! Much easier, much direct. After a simple extra tab removal, all tests were successful and I could move on. Yay!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-6682822585126878072?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/6682822585126878072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2009/05/testing-differences-in-templates.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/6682822585126878072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/6682822585126878072'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2009/05/testing-differences-in-templates.html' title='Testing Differences in Templates'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-8190015677496735983</id><published>2009-05-01T16:45:00.001-03:00</published><updated>2009-05-01T16:55:25.865-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mojolicious'/><category scheme='http://www.blogger.com/atom/ns#' term='Mojo'/><category scheme='http://www.blogger.com/atom/ns#' term='Padre'/><title type='text'>Padre + Mojolicious</title><content type='html'>You most likely already know about &lt;a href="http://padre.perlide.org/"&gt;Padre, the Perl IDE&lt;/a&gt; (if you follow this blog you do!). It's quickly becoming a great environment for beginners to learn &lt;a href="http://www.perl.org/"&gt;Perl&lt;/a&gt;, and is already proving itself &lt;a href="http://use.perl.org/%7Etsee/journal/38714"&gt;useful to some seasoned developers&lt;/a&gt; as well.&lt;br /&gt;&lt;br /&gt;Recently, I talked about my &lt;a href="http://onionstand.blogspot.com/2009/04/padre-catalyst.html"&gt;Catalyst Plugin&lt;/a&gt; for Padre. It's also turning into a hit (yay!) and will hopefully help a lot of people doing web development in Padre. But Catalyst, amazing as it is, can impose a somewhat high learning curve for beginners, specially those not very familiar with (the also great) &lt;a href="http://template-toolkit.org/"&gt;Template Toolkit&lt;/a&gt; and &lt;a href="http://search.cpan.org/perldoc?DBIx::Class"&gt;DBIx::Class&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This is where Mojolicious enters the scene.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mojolicious.org/"&gt;Mojolicious&lt;/a&gt; is a next generation MVC web framework focused on minimalism and simplicity. It comes with the Mojo backend, a &lt;span style="font-style: italic;"&gt;"framework for web frameworks"&lt;/span&gt;. Through constant development and the tireless efforts of &lt;a href="http://labs.kraih.com/blog/"&gt;sri&lt;/a&gt;++, &lt;a href="http://github.com/vti"&gt;vti&lt;/a&gt;++, &lt;a href="http://d.hatena.ne.jp/charsbar/"&gt;charsbar&lt;/a&gt;++ and several others, Mojolicious offers state of the art technology to deliver an environment where it is simple enough for beginners to get started, and powerful enough to just keep you going all the way.&lt;br /&gt;&lt;br /&gt;Mojolicious is &lt;a href="http://labs.kraih.com/blog/2008/09/why-mojo-wont-kill-catalyst.html"&gt;not a replacement&lt;/a&gt; for Catalyst, or vice-versa. They are just different approaches to the same problem and, although separately, both teams work very closely with each other (in fact, sri was -the- founder of the Catalyst project, and &lt;a href="http://search.cpan.org/%7Emramberg/"&gt;marcus&lt;/a&gt;++ is a channel op at #mojo on &lt;span style="font-style: italic;"&gt;irc.perl.org&lt;/span&gt;). You should simply pick the one that best suits your experience and needs. And now you can do it inside Padre, too!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Zg_F9liESSo/SftNc0NIPcI/AAAAAAAAAEw/hldoO5V8_IE/s1600-h/mojolicious.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 290px;" src="http://1.bp.blogspot.com/_Zg_F9liESSo/SftNc0NIPcI/AAAAAAAAAEw/hldoO5V8_IE/s400/mojolicious.png" alt="" id="BLOGGER_PHOTO_ID_5330939741368499650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://search.cpan.org/perldoc?Padre::Plugin::Mojolicious"&gt;Padre::Plugin::Mojolicious&lt;/a&gt; incorporates helpers for Mojolicious inside Padre. Its behaviour is pretty much like the Catalyst plugin, letting you create new Mojolicious web applications, start and stop the webserver, and review some of the documentation.&lt;br /&gt;&lt;br /&gt;Enjoy! And let me know if you have any suggestions to further improve it :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-8190015677496735983?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/8190015677496735983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2009/04/padre-mojolicious.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/8190015677496735983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/8190015677496735983'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2009/04/padre-mojolicious.html' title='Padre + Mojolicious'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Zg_F9liESSo/SftNc0NIPcI/AAAAAAAAAEw/hldoO5V8_IE/s72-c/mojolicious.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-913618894097354276</id><published>2009-04-24T02:09:00.005-03:00</published><updated>2009-04-24T04:06:10.954-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YAPC::SA'/><title type='text'>YAPC::SA 2009</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Zg_F9liESSo/SfFgU-TBVHI/AAAAAAAAAEo/B2qVjcpOQ6I/s1600-h/banner468x60.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 51px;" src="http://4.bp.blogspot.com/_Zg_F9liESSo/SfFgU-TBVHI/AAAAAAAAAEo/B2qVjcpOQ6I/s400/banner468x60.png" alt="" id="BLOGGER_PHOTO_ID_5328145747592434802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Perl is a very popular language all around the world. But how come all the nice Perl conferences happen only in Europe or the US? &lt;a href="http://www.yapceurope.org/"&gt;YAPC::Europe&lt;/a&gt;, &lt;a href="http://yapc10.org/yn2009/"&gt;YAPC::NA&lt;/a&gt;, &lt;a href="http://pghpw.org/ppw2008/"&gt;PPW&lt;/a&gt;, &lt;a href="http://www.perlworkshop.no/npw2009/"&gt;NPW&lt;/a&gt;, &lt;a href="http://conferences.mongueurs.net/fpw2009/"&gt;FPW&lt;/a&gt;, &lt;a href="http://conferences.yapceurope.org/lpw2008/"&gt;LPW&lt;/a&gt;, ... the only (minor) exceptions to this rule are &lt;a href="http://www.yapcasia.org/"&gt;YAPC::Asia&lt;/a&gt; and &lt;a href="http://2009.yapcrussia.org/mayperl2/"&gt;YAPC::Russia&lt;/a&gt; - even so, all in the northern hemisphere.&lt;br /&gt;&lt;br /&gt;South America has an astounding number of Perl developers. Right now there are &lt;span style="font-weight: bold;"&gt;nine&lt;/span&gt; active Perl Mongers groups in Brazil only, not to mention Argentina, Venezuela and other countries. &lt;a href="http://rio.perl.org.br/pesquisa.pl"&gt;2007's Perl Survey data&lt;/a&gt; shows our stats compared to the rest of the Perl community, corroborating with &lt;a href="http://www.pm.org/census.pdf"&gt;what Dave Cross already saw back in 2005&lt;/a&gt;. So, where are the Perl conferences down in SA?&lt;br /&gt;&lt;br /&gt;To my knowledge, South American Perl hackers are not used to huge Perl conferences. Maybe it's not in our culture, as there are a lot of us who just don't participate in the community at all: some claim they are too busy with their lives/jobs to engage or even attend to a meeting or conference (specially one that's not sponsored by a big company), others say they just never heard of the community in the first place (!).  Imho this isn't actually a Perl problem: I've seen similar complaints from people on a lot of different languages. It's hard enough to get people in Free Software conferences, imagine a Perl-only one.&lt;br /&gt;&lt;br /&gt;So, moved by a "&lt;a href="http://en.wikipedia.org/wiki/If_you_build_it,_he_will_come#.22If_you_build_it....22"&gt;if you build it they'll come&lt;/a&gt;" spirit, some people (including myself) arranged for YAPC::SA 2009 to happen!&lt;br /&gt;&lt;br /&gt;----------------&lt;br /&gt;&lt;a href="http://www.perl.org.br/YAPC/SA2009/WebHome"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;YAPC::SA 2009&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;24 ~ 27 june - Porto Alegre - RS - Brazil&lt;/span&gt;&lt;br /&gt;----------------&lt;br /&gt;&lt;br /&gt;The event will take place inside &lt;a href="http://www.fisl.org.br/10/www/"&gt;FISL&lt;/a&gt; - the International Free Software Forum - a major FLOSS event which this year will have the participation of FSF's Richard Stallman and The Pirate Bay's Peter Sunde, among several others.&lt;br /&gt;&lt;br /&gt;We're still learning the ropes and have a long way to go before getting even close to the major Perl events mentioned above. But nevertheless we're planning a great Perl conference for you, including hackathons, lightning talks, mini-courses, and the distribution of gifts - not to mention daily social meetings after the event.&lt;br /&gt;&lt;br /&gt;Everyone's invited!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-913618894097354276?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/913618894097354276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2009/04/yapcsa-2009.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/913618894097354276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/913618894097354276'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2009/04/yapcsa-2009.html' title='YAPC::SA 2009'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Zg_F9liESSo/SfFgU-TBVHI/AAAAAAAAAEo/B2qVjcpOQ6I/s72-c/banner468x60.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7734799596325955005.post-4787865194962618730</id><published>2009-04-14T00:33:00.026-03:00</published><updated>2009-04-14T04:44:42.549-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Catalyst'/><category scheme='http://www.blogger.com/atom/ns#' term='Padre'/><title type='text'>Padre + Catalyst</title><content type='html'>For a while now, I've been contributing (or at least trying) to &lt;a href="http://padre.perlide.org/"&gt;Padre - The Perl IDE&lt;/a&gt;. Although it still lacks some nice IDE features, it's really amazing to see how much has already been done in so little time. In fact, &lt;a href="http://search.cpan.org/perldoc?Padre"&gt;Padre&lt;/a&gt; releases are almost weekly, with Changelogs filled with active development and bug tracking. &lt;a href="http://szabgab.com/"&gt;Szabgab&lt;/a&gt;++ managed to create an active and exciting community around the project, and I'm really glad to be a part of it.&lt;br /&gt;&lt;br /&gt;One of Padre's cool features is plugins. &lt;a href="http://jquelin.blogspot.com/"&gt;Jq&lt;/a&gt;++, &lt;a href="http://use.perl.org/%7EAlias/"&gt;Alias&lt;/a&gt;++ and everyone else did an amazing job with the plugin API, so it's getting easier and easier to extend Padre's functionality. In fact, there are already over 20 plugins available on &lt;a href="http://search.cpan.org/search?query=Padre%3A%3APlugin&amp;amp;mode=all"&gt;CPAN&lt;/a&gt; and many more to come.  Recently, I created one myself, hoping it would improve the Padre experience and help developers of web applications, specially beginners: &lt;a href="http://search.cpan.org/perldoc?Padre::Plugin::Catalyst"&gt;Padre::Plugin::Catalyst&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Installing the plugin should be fairly simple on the cpan shell&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;cpan&gt; install Padre::Plugin::Catalyst&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Of course, it has both Padre and &lt;a href="http://search.cpan.org/perldoc?Catalyst::Devel"&gt;Catalyst::Devel&lt;/a&gt; as dependencies. After installation, fire up Padre and go to the &lt;span style="font-style: italic;"&gt;Plugins-&gt;Plugin Manager&lt;/span&gt; menu option.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Zg_F9liESSo/SeQYaSR97dI/AAAAAAAAADg/FeH4pUyzrJs/s1600-h/cat-plugin.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 60px;" src="http://1.bp.blogspot.com/_Zg_F9liESSo/SeQYaSR97dI/AAAAAAAAADg/FeH4pUyzrJs/s200/cat-plugin.png" alt="" id="BLOGGER_PHOTO_ID_5324407499321634258" border="0" /&gt;&lt;/a&gt;The Catalyst plugin should show up. Select it and click on the &lt;span style="font-style: italic;"&gt;"Enable"&lt;/span&gt; button so its status turns green (enabled), as shown in the image above.&lt;br /&gt;&lt;br /&gt;That's it! The plugin and all its features can be accessed through its own menu at &lt;span style="font-style: italic;"&gt;Plugins-&gt;Catalyst&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Zg_F9liESSo/SeQcKukzGqI/AAAAAAAAADo/C_om0uPsYhY/s1600-h/cat-plugin-menu.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 189px;" src="http://4.bp.blogspot.com/_Zg_F9liESSo/SeQcKukzGqI/AAAAAAAAADo/C_om0uPsYhY/s320/cat-plugin-menu.png" alt="" id="BLOGGER_PHOTO_ID_5324411630085413538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Let's browse through some of the options:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:130%;" &gt;New Catalyst Application&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Zg_F9liESSo/SeQhic-kBiI/AAAAAAAAADw/LPJ1owgGKl0/s1600-h/cat-plugin-newapp.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 246px; height: 141px;" src="http://4.bp.blogspot.com/_Zg_F9liESSo/SeQhic-kBiI/AAAAAAAAADw/LPJ1owgGKl0/s320/cat-plugin-newapp.png" alt="" id="BLOGGER_PHOTO_ID_5324417535236638242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;This option will create a new Catalyst application on the specified folder. You can mark the &lt;span style="font-style: italic;"&gt;"short names"&lt;/span&gt; checkbox to use &lt;span style="font-style: italic;"&gt;"M"&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;"V"&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;"C"&lt;/span&gt; folder names instead of the recommended &lt;span style="font-style: italic;"&gt;"Model"&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;"View"&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;"Controller"&lt;/span&gt; names. After clicking on the "OK" button, the plugin will create a skeleton program for you and ask if you want to open the created &lt;span style="font-style: italic;"&gt;"Root.pm"&lt;/span&gt; controller so you can start programming right away.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:130%;" &gt;Create New -&gt; Model&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Zg_F9liESSo/SeQp-9dIm3I/AAAAAAAAAD4/OjxTiWOPDjQ/s1600-h/cat-plugin-model.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 243px; height: 160px;" src="http://2.bp.blogspot.com/_Zg_F9liESSo/SeQp-9dIm3I/AAAAAAAAAD4/OjxTiWOPDjQ/s320/cat-plugin-model.png" alt="" id="BLOGGER_PHOTO_ID_5324426821084158834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This option lets you create a new model for your application. Here, you can specify your Model's name, type, and any additional parameters needed. &lt;span style="font-style: italic;"&gt;"Type"&lt;/span&gt; is a list with all &lt;a href="http://search.cpan.org/search?mode=all&amp;amp;query=Catalyst%3A%3AHelper%3A%3AModel"&gt;helper models&lt;/a&gt; available on your system, for you to choose from. It defaults to &lt;a href="http://www.trout.me.uk/"&gt;mst&lt;/a&gt;++'s &lt;a href="http://search.cpan.org/perldoc?Catalyst::Helper::Model::DBIC::Schema"&gt;DBIC::Schema&lt;/a&gt; (if available), as it's considered the ORM technology of choice for Catalyst.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:130%;" &gt;Create New -&gt; View&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Zg_F9liESSo/SeQtIq_pjSI/AAAAAAAAAEA/7r5xMW941wM/s1600-h/cat-plugin-view.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 247px; height: 138px;" src="http://2.bp.blogspot.com/_Zg_F9liESSo/SeQtIq_pjSI/AAAAAAAAAEA/7r5xMW941wM/s320/cat-plugin-view.png" alt="" id="BLOGGER_PHOTO_ID_5324430286462225698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Similarly, this option will let you create a new View component for your application. &lt;span style="font-style: italic;"&gt;"Type"&lt;/span&gt; defaults to the highly popular &lt;a href="http://template-toolkit.org/"&gt;Template Toolkit&lt;/a&gt; helper, whenever available.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:130%;" &gt;Create New -&gt; Controller&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Zg_F9liESSo/SeQvm21bnPI/AAAAAAAAAEI/_Mv3-lZ46I8/s1600-h/cat-plugin-controller.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 243px; height: 160px;" src="http://1.bp.blogspot.com/_Zg_F9liESSo/SeQvm21bnPI/AAAAAAAAAEI/_Mv3-lZ46I8/s320/cat-plugin-controller.png" alt="" id="BLOGGER_PHOTO_ID_5324433004059925746" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;With this option, you are able to quickly create a skeleton for any controllers your application may have. The default&lt;span style="font-style: italic;"&gt; "Type"&lt;/span&gt; is no type at all, but, if you do use Controller helpers, you can also specify any additional parameters for it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:130%;" &gt;Start/Stop Web Server&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Zg_F9liESSo/SeQ3Qbx5ZNI/AAAAAAAAAEY/ueHbHx6gHyk/s1600-h/padre_0.33_on_ubuntu-running_catalyst_plugin.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 414px; height: 301px;" src="http://1.bp.blogspot.com/_Zg_F9liESSo/SeQ3Qbx5ZNI/AAAAAAAAAEY/ueHbHx6gHyk/s320/padre_0.33_on_ubuntu-running_catalyst_plugin.png" alt="" id="BLOGGER_PHOTO_ID_5324441414933243090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;At any point, should you want to test-drive your web application, you can click on this option to call the &lt;span style="font-style: italic;"&gt;yourapp_server.pl&lt;/span&gt; script (where &lt;span style="font-style: italic;"&gt;"yourapp"&lt;/span&gt; is the name of your Catalyst application, of course), a stand-alone development web server. All the output produced by the server will be displayed right on Padre's Output window (very useful for debugging), and it will ask if you want to open your web browser to actually view your application running.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:130%;" &gt;Catalyst Online References&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This option has quick shortcuts to some handy developer's information links available on the Internet:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Catalyst::Manual::Tutorial"&gt;Beginner's Tutorial&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://search.cpan.org/perldoc?Catalyst::Manual::Cookbook"&gt;Catalyst Cookbook&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://dev.catalystframework.org/wiki/recommended_plugins"&gt;Recommended Plugins&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://dev.catalyst.perl.org/repos/Catalyst/trunk/examples/"&gt;Examples&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://dev.catalystframework.org/wiki/"&gt;Catalyst Wiki&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.catalystframework.org/"&gt;Catalyst Website&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;That's about it :)&lt;br /&gt;&lt;br /&gt;Future plans include letting the developer choose its favorite types, script updating features, and much more. If you want to help, you can checkout the current code from Padre's &lt;a href="http://svn.perlide.org/padre"&gt;svn repository&lt;/a&gt;, or give me some feedback on any bugs or feature requests via &lt;a href="http://padre.perlide.org/wiki/Tickets"&gt;Padre's Tickets&lt;/a&gt; or &lt;a href="http://rt.cpan.org/Public/Bug/Report.html?Queue=Padre-Plugin-Catalyst"&gt;CPAN's RT&lt;/a&gt;.&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let me know what you think!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7734799596325955005-4787865194962618730?l=onionstand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://onionstand.blogspot.com/feeds/4787865194962618730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://onionstand.blogspot.com/2009/04/padre-catalyst.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/4787865194962618730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7734799596325955005/posts/default/4787865194962618730'/><link rel='alternate' type='text/html' href='http://onionstand.blogspot.com/2009/04/padre-catalyst.html' title='Padre + Catalyst'/><author><name>garu</name><uri>http://www.blogger.com/profile/00553247579311713092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Zg_F9liESSo/SeQYaSR97dI/AAAAAAAAADg/FeH4pUyzrJs/s72-c/cat-plugin.png' height='72' width='72'/><thr:total>8</thr:total></entry></feed>
