<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>tempire</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/tempire/" />
    <link rel="self" type="application/atom+xml" href="http://blogs.perl.org/users/tempire/atom.xml" />
    <id>tag:blogs.perl.org,2009-11-03:/users/tempire//286</id>
    <updated>2012-06-20T01:52:39Z</updated>
    <subtitle>A blog about the Perl programming language</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 4.38</generator>

<entry>
    <title>YAPC::NA 2012: Mojolicious, swag, and pizzazz</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/tempire/2012/06/yapcna-2012-mojolicious-swag-and-pizzazz.html" />
    <id>tag:blogs.perl.org,2012:/users/tempire//286.3414</id>

    <published>2012-06-19T23:14:43Z</published>
    <updated>2012-06-20T01:52:39Z</updated>

    <summary>The Intro to Mojolicious talk at YAPC::NA 2012 was a success! One person came up afterwards and told me it was one of the most cogent talks at the conference. Awesome! I was definitely shooting for cogent. Someone else even...</summary>
    <author>
        <name>tempire</name>
        <uri>http://tempi.re/</uri>
    </author>
    
    <category term="beardswag" label="beard swag" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mojolicious" label="mojolicious" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="pizzazz" label="pizzazz" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/tempire/">
        <![CDATA[<p>The Intro to Mojolicious talk at YAPC::NA 2012 was a success!</p>

<p>One person came up afterwards and told me it was one of the most cogent talks at the conference.  Awesome!  I was definitely shooting for cogent.  Someone else even <a href="http://blog.xzion.net/2012/06/18/my-first-yapc/">mentioned</a> that it was their favorite talk of the event, and that is indeed high praise for which I am truly grateful.</p>

<p>I put a lot of work into the flow of the presentation, intending for it to come across as much like a <a href="http://mojocasts.com/">mojocast</a> as possible.  In watching the video content all over the web, I've noticed a distinct lack of cohesion in the presentation of information, and I wanted to make sure I've done everything possible to ease the transition of data into others' brains.</p>

<p>It's fantastic that a subset of the videos have been posted to youtube; that many more search results for modern Perl information.  The <a href="http://www.youtube.com/watch?v=NUAOns_WAXA">more creative lightning talks</a> were my favorite.</p>

<p>Sometimes, the the video of the speaker covers up necessary information in the slides:</p>

<p><img alt="speaker covers slides" src="http://blogs.perl.org/users/tempire/speaker%20covers%20slides.png" width="370" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></p>

<p>I've put together a higher quality video of the Mojolicious presentation, complete with some post-editing pizzazz that gives it that extra edge.  My edited rendition fades out the speaker video when necessary:</p>

<p><img alt="speaker fades out" src="http://blogs.perl.org/users/tempire/speaker%20fades%20out%20screenshot.png" width="370" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></p>

<p>It also displays summarized questions as they are being asked, so as to include the online viewer in the fun:</p>

<p><img alt="question example screenshot" src="http://blogs.perl.org/users/tempire/question%20example%20screenshot.png" width="370" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></p>

<p>The edited video also displays well at resolutions of 1024x768.  </p>

<p>The pizzazzed presentation, as well as the set of resources and links mentioned in the talk is available at <a href="http://mojocasts.com/yapc/">http://mojocasts.com/yapc/</a>.</p>

<p>--</p>

<p>I was much more interested in speaking with the general populace of the event than certain "known" names.  I would often sit down in a new group of people and begin talking.</p>

<p>Easily, my favorite person of the entire event was <a href="https://twitter.com/DSWallis">@dswallis</a>.  She gave a lightning talk about how the word "Monger" has no relevance, and that the M of PM needs a better meaning.  </p>

<p>Agreed.</p>

<p>I also enjoyed the job fair.  I'm rarely looking for a job, but I'm always open to being convinced.  It was interesting to see how each company chose to present themselves.  I would have expected ActiveState to have more of a presence, but when I went by their booth, no one was there.  Maybe that's why they were hiring.</p>

<p>That brings us to the swag.</p>

<p>My favorite was definitely LiquidWeb's hero:</p>

<p><img alt="liquidweb hero" src="http://blogs.perl.org/users/tempire/liquidweb.jpg" width="370" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></p>

<p>Followed by OmniIT's throwable brain.</p>

<p><img alt="omniweb brain" src="http://blogs.perl.org/users/tempire/brain.jpg" width="370" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></p>

<p>Booking had a strong presence, mostly due to the pleasant presence of <a href="https://www.evernote.com/shard/s15/sh/9950ea21-3c1c-4a67-b63c-f00a25c3aa8f/d5de6cd6540fb21c78ed2fccf1e0d410">Ingrid</a>.  I stole many of their globes for no reason in particular.</p>

<p><img alt="globes.jpg" src="http://blogs.perl.org/users/tempire/globes.jpg" width="370" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></p>

<p>Shutterstock had a little paper thing, which <a href="http://twitter.com/belden">@belden</a> told me was face decoration.  He's a liar.  It's clearly beard decoration:</p>

<p><img alt="beard cover" src="http://blogs.perl.org/users/tempire/beard%20cover.png" width="370" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></p>

<p>Linode had some pretty neat stickers.  I ganked more than my fair share, and stand by my actions.</p>

<p><img alt="linode" src="http://blogs.perl.org/users/tempire/linode.jpg" width="370" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></p>

<p>I'm happy to have attended the event.  Given that this was my first tech conference, Perl, as it most often does, sets the standard that everything else is to be compared by.</p>

<p><small><a href="http://twitter.com/tempire">Hey!  Follow me on the twitter!</a></small></p>]]>
        
    </content>
</entry>

<entry>
    <title>Mojolicious Full and Lite apps - understanding the difference</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/tempire/2012/02/mojolicious-full-and-lite-apps---understanding-the-difference.html" />
    <id>tag:blogs.perl.org,2012:/users/tempire//286.2784</id>

    <published>2012-02-08T02:18:01Z</published>
    <updated>2012-02-08T08:29:34Z</updated>

    <summary>The mojocasts have thus far used lite apps exclusively to demonstrate basic Mojolicious functionality. This has led some to believe that Mojolicious is a one-file micro-framework; however, that is not the case. Mojolicious a full-featured framework, supporting what some would...</summary>
    <author>
        <name>tempire</name>
        <uri>http://tempi.re/</uri>
    </author>
    
    <category term="mojoliciousfulllitedbictestingeplperl" label="mojolicious full lite dbic testing epl perl" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/tempire/">
        <![CDATA[<p>The <a href="http://mojocasts.com/">mojocasts</a> have thus far used lite apps exclusively to demonstrate basic Mojolicious functionality.  This has led some to believe that Mojolicious is a one-file micro-framework; however, that is not the case.  </p>

<p>Mojolicious a full-featured framework, supporting what some would call Catalyst-level deployments, in addition to one-file simple applications.</p>

<p>Mojolicious::Lite is a thin layer on top of the full framework - literally a <a href="https://github.com/kraih/mojo/blob/master/lib/Mojolicious/Lite.pm">68-line module</a> that provides Sinatra-like syntax, including the ability to <a href="https://github.com/tempire/MojoExample/blob/master/mojolite#L1031">embed base64-encoded binary files</a>.</p>

<p>Full apps are a good choice for teams, and for sanely separating concerns for large web apps.</p>

<p>I've uploaded a sample application to demonstrate the differences, and allow folks to see first hand how to translate from Full to Lite, and vice-versa.</p>

<p>The example application <a href="https://github.com/tempire/MojoExample/blob/master/lib/MojoFull.pm#L3">demonstrates DBIx::Class integration</a>, how to <a href="https://github.com/tempire/MojoExample/blob/master/t/photos.t">test your web app with Test::Mojo</a>, as well as how to use EP templates <a href="https://github.com/tempire/MojoExample/blob/master/templates/blogs/index.html.ep">with</a> and <a href="https://github.com/tempire/MojoExample/blob/master/templates/blogs/show.html.ep">without</a> <a href="http://mojolicio.us/perldoc/Mojolicious/Plugin/TagHelpers">tag helpers</a>.  For those unfamiliar with testing in general, there are even examples of DBIC schema tests.</p>

<p>Both apps are identical in functionality:<br />
<a href="https://github.com/tempire/MojoExample">Full app</a><br />
<a href="https://github.com/tempire/MojoExample/blob/master/mojolite">Lite app</a></p>

<p>They are runnable using the <a href="http://mojolicio.us/perldoc/Mojo/Server/Morbo#DESCRIPTION">morbo</a> development server, as well as <a href="http://mojolicio.us/perldoc/Mojo/Server/Hypnotoad#DESCRIPTION">hypnotoad</a>, the "<em>full featured UNIX optimized preforking non-blocking I/O HTTP 1.1 and WebSocket server built around the very well tested and reliable Mojo::Server::Daemon with IPv6, TLS, Bonjour, libev and hot deployment support that just works</em>".</p>

<p>Shnikies that's a lot of buzzwords for a Perl framework!</p>

<p>And as always, Mojolicious downloads and installs in about a minute:<br />
<blockquote>curl -L cpanmin.us | perl - Mojolicious<br />
</blockquote><br />
  Even better, enable parallel tests and you can install in about 15 seconds!</p>

<blockquote>HARNESS_OPTIONS=j9 cpanm Mojolicious</blockquote>

<p><br />
\o/<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>Mojocast #5: Mojo::UserAgent</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/tempire/2011/12/mojocast-5-mojouseragent.html" />
    <id>tag:blogs.perl.org,2011:/users/tempire//286.2611</id>

    <published>2011-12-26T08:55:13Z</published>
    <updated>2011-12-26T09:06:57Z</updated>

    <summary>Mojocast Monday brings you a high-level overview of Mojo::UserAgent, the client side of Mojolicious. DOM Walking, CSS selectors, and watching live requests are just a couple of the things you&apos;ll see. Mojocast #5: Mojo::UserAgent If this is your first exposure...</summary>
    <author>
        <name>tempire</name>
        <uri>http://tempi.re/</uri>
    </author>
    
    <category term="perlmojoliciousclientuseragent" label="perl mojolicious client useragent" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/tempire/">
        <![CDATA[<p>Mojocast Monday brings you a high-level overview of Mojo::UserAgent, the client side of Mojolicious.  DOM Walking, CSS selectors, and watching live requests are just a couple of the things you'll see.</p>

<p><a href="http://mojocasts.com/e5">Mojocast #5: Mojo::UserAgent</a></p>

<p>If this is your first exposure to mojocasts, you might want to start with the <a href="http://mojocasts.com/e1">first episode</a>.</p>

<p>Merry Christmas and Happy Unicorns!</p>]]>
        
    </content>
</entry>

<entry>
    <title>Mojocast #4: Stash, Flash, and Sessions</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/tempire/2011/11/mojocast-4-stash-flash-and-sessions.html" />
    <id>tag:blogs.perl.org,2011:/users/tempire//286.2441</id>

    <published>2011-11-14T15:15:51Z</published>
    <updated>2011-11-14T22:57:12Z</updated>

    <summary>It&apos;s Mojocast Monday, kids, which means a brand new Mojocast for your perusing pleasure. Continuing to demonstrate Mojolicious::Lite, the Mojocasts are moving through Mojolicious basics, so newcomers can get up and running more quickly than ever (And dare I say...</summary>
    <author>
        <name>tempire</name>
        <uri>http://tempi.re/</uri>
    </author>
    
    <category term="mojoliciousscreencast" label="mojolicious screencast" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/tempire/">
        <![CDATA[<p>It's Mojocast Monday, kids, which means a brand new Mojocast for your perusing pleasure.</p>

<p>Continuing to demonstrate Mojolicious::Lite, the Mojocasts are moving through Mojolicious basics, so newcomers can get up and running more quickly than ever (And dare I say it, have fun at the same time.  *gasp*).</p>

<p>As the screencasts continue, you can bet your sweet ponycorn we'll be covering some of the more cutting-edge features, such as web-sockets and event-driven web apps.</p>

<p>For now, however, we have another installment to make sure those old and new can get started quickly with Perl web development, without a lot of fuss.</p>

<p><a href="http://mojocasts.com/e4">Mojocast #4: Stash, Flash, and Sessions</a></p>

<p>Keep in mind - the shortcuts link to specific times in the screencast, so you can share/bookmark specific topics.</p>

<p>Thank you to @kure_ji_neko and elb0w for agreeing to host the Mojocast video files.  We can all feel that much more hip by using HTML5 video instead of flash.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Mojocast #3: Authentication, Helpers, and Plugins</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/tempire/2011/09/mojocast-3-authentication-helpers-and-plugins.html" />
    <id>tag:blogs.perl.org,2011:/users/tempire//286.2185</id>

    <published>2011-09-12T15:21:46Z</published>
    <updated>2011-09-12T16:16:57Z</updated>

    <summary>The response for Mojocast #2 was even more overwhelming than the first episode. How overwhelming? That&apos;s right, your upvotes matter. Within 6 minutes of posting, it was secured on the front page. Within 20 minutes, it was #1. Consider the...</summary>
    <author>
        <name>tempire</name>
        <uri>http://tempi.re/</uri>
    </author>
    
    <category term="perlmojoliciousscreencast" label="perl mojolicious screencast" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/tempire/">
        <![CDATA[<p>The response for Mojocast #2 was even more overwhelming than the first episode.</p>

<p>How overwhelming?</p>

<p><img alt="mojocast e2 #1 on hackernews.png" src="http://blogs.perl.org/users/tempire/Screen%20Shot%202011-09-10%20at%208.05.49%20PM.png" width="659" height="197" class="mt-image-none" style="" /></p>

<p>That's right, your upvotes matter.  Within 6 minutes of posting, it was secured on the front page.  Within 20 minutes, it was #1.  </p>

<p>Consider the reality here: the most watched site on the internet by hackers/developers had a Perl-related post in the top spot.  It remained on the front page for 6 hours, which is pretty good for a screencast with no article attached.  That's a solid group of folks with a lot of potential <strong><em>aha</em></strong> moments in Perl's favor.</p>

<p>Bottom line: If you care about the marketing of Perl and its exposure among the masses, consider upvoting the Mojocast, leave a comment, and spread the word!</p>

<p>Hooray Perl!</p>

<p>Speaking of which, </p>

<p><a href="http://mojocasts.com/e3">Mojocast #3: Authentication, Helpers, and Plugins</a></p>

<p><a href="http://hackerne.ws/item?id=2987819">Hackernews post</a><br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>The Making of Mojocasts</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/tempire/2011/08/the-making-of-mojocasts.html" />
    <id>tag:blogs.perl.org,2011:/users/tempire//286.2071</id>

    <published>2011-08-09T17:48:05Z</published>
    <updated>2012-05-28T03:02:45Z</updated>

    <summary>szabgab, who has quite a few screencasts, asked me to explain how I made the mojocasts. Creating them has been quite the learning curve. My initial inspiration was Vimcasts, and although I don&apos;t have the hip accent, I figured I...</summary>
    <author>
        <name>tempire</name>
        <uri>http://tempi.re/</uri>
    </author>
    
    <category term="perlscreencastmojocastimoviescreenflow" label="perl screencast mojocast imovie screenflow" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/tempire/">
        <![CDATA[<p><a href="http://szabgab.com/">szabgab</a>, who has <a href="http://www.youtube.com/user/gabor529">quite a few screencasts</a>, asked me to explain how I made <a href="http://mojocasts.com/">the mojocasts</a>.</p>

<p>Creating them has been quite the learning curve.  My initial inspiration was <a href="http://vimcasts.org/">Vimcasts</a>, and although I don't have the hip accent, I figured I could put something interesting together for...something.  It didn't take to long to settle on Perl and my preferred source of Perl unicorns, Mojolicious.</p>

<p>A Vimcast has a very cool, down-to-earth presentation; the music, the tone of voice, and the presentation as a whole tell the viewer, "Yeah, Vim is just that cool, and if you learn this, you'll be that cool as well".  Presentation is vital: the Apple logo on most of my devices state as much.</p>

<p>Given Perl's less than stellar rep among the masses, I wanted something to counteract the stale feeling that Perl's critics likely feel - something that screamed "Fresh".  Remember, we're talking about feeling here, not facts.  I figured the composer of Vimcast's jingle would give me place to start, and luckily, the same composer had a royalty-free tune that broadcasted exactly the feeling I was looking for.  Go ahead, listen to the mojocast intro music...close your eyes and picture a world with that theme music. </p>

<p>It's <a href="http://happybloggers.com/sites/default/files/HAPPY.jpg">happy</a>.  It's <a href="http://www.youtube.com/watch?v=CZ1NA7Mgzgw">fresh</a>.  It's a whole new adventure.  <em>Everything is going to be different now.</em></p>

<p>If that's not perfect for a Modern Perl presentation, I don't know what is.  Tie that in with the Mojolicious theme of light and fluffy clouds, rainbows, and unicorns...hey, we've got something here.  </p>

<p>The content was easy enough - show people how easy it is to get started.  Quickly.  From scratch, with no clutter.  Show them exactly what they need to see, and nothing more.  Walk them through the process, and throw in a couple "Huh, that's neat" moments.</p>

<p>I used <a href="http://www.telestream.net/screen-flow">Screenflow</a><b>*</b> to capture the screen.  After toying with several resolutions, I changed a secondary display to 800x600 and recorded all the actions in sequence, leaving the audio for later.  Screenflow allows you to fade opacity levels over time for images and video clips, which is how the intro shows the clouds and logo text in succession.  I found that timing isn't important at this stage - you can always modify the speed of clips later on as necessary.</p>

<p>Technically, you could do the entire project from within Screenflow, but the interface is somewhat cumbersome when dealing with the entire timeline.  My goal from the beginning was to use iMovie, so I decided to export it.</p>

<p>I'm going to save you a lot of trouble and give you a screenshot of the optimal settings you want to use when transferring a video for use in another program.</p>

<p><img alt="export for imovie.png" src="http://blogs.perl.org/users/tempire/export%20for%20imovie.png" width="465" height="681" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></p>

<p>There.  You have 4 more hours of your life to do something useful with.</p>

<p>iMovie is wonderful.  Transitions, text overlays, and image importing are nearly everything you need for a decent screencast.  With iMovie '11, you can add voiceovers and change the audio levels with sub-second precision, and see whether the voice levels between clips are equivalent at a glance.  </p>

<p>I imported the full movie, and then copied each section of the imported movie into the main timeline according to topic.  I learned over time that it's important to mark each section with chapter markers, since the visual representation in the timeline is at best an estimate, and it's easy to get half-empty terminal windows mixed up.</p>

<p>Initially, I used the built-in Macbook mic, and happened to choose a perfect spot at my desk that detected no background noise.  I ended up having to re-record all the voiceovers, and learned that the magical spot at my desk was not so easily reproducible.  The second episode made use of a Audio Technica AT2020 USB Cardioid condenser microphone, recorded at 50% input volume with -40dB Noise Reduction and voice enhancement enabled.  Alias pointed out that professional voiceovers are recorded while standing, so I adjusted my workstation as such; I think you'll agree that Mojocast #2 is a marked improvement in audio quality.</p>

<p>After all the recording is done, it's time to make video edits.  There's no shortcut here.  It simply takes time.</p>

<ol>
	<li>Watch the whole video.</li>
        <li>Make sure there's enough time between statements so that viewers can take in the visual and auditory information without feeling rushed.</li>
        <li>Make sure the video matches exactly what the voiceover is talking about.  If you're talking about reloading a page, show the action as the word is said.</li>
        <li>Repeat until you can't stand it anymore</li>
</ol>

<p>That's pretty much it.</p>

<p>I hope this is helpful to some folk.  Thankful readers should <a href="http://cookiesmcnett.com/">buy me some cookies</a>.</p>

<p>Go forth, and make some <em>[your cool subject]</em>casts.</p>

<p></p>

<p><strong>*Update 2012-05-27</strong><br />
Quicktime now supports screen capture with more accurate color reproduction than Screenflow.  It is recommended.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Mojocast #2 - More cloudy goodness</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/tempire/2011/08/mojocast-2---more-cloudy-goodness.html" />
    <id>tag:blogs.perl.org,2011:/users/tempire//286.2065</id>

    <published>2011-08-08T15:40:34Z</published>
    <updated>2011-08-08T16:02:06Z</updated>

    <summary>Mojocast #1 was a hit! The first episode detailed how to install and get your first Mojolicious Lite app running, and the followup continues the process by explaining how to use multiple types of placeholders, http methods, and formats to...</summary>
    <author>
        <name>tempire</name>
        <uri>http://tempi.re/</uri>
    </author>
    
    <category term="perlmojoliciousscreencast" label="perl mojolicious screencast" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/tempire/">
        <![CDATA[<p><a href="http://mojocasts.com/e1">Mojocast #1</a> was a hit!</p>

<p>The first episode detailed how to install and get your first Mojolicious Lite app running, and the followup continues the process by explaining how to use multiple types of placeholders, http methods, and formats to give you more flexibility in your lite apps.</p>

<p><a href="http://mojocasts.com/e2">Mojocast #2: Placeholders, methods, and formats</a></p>

<p>Hooray!</p>]]>
        
    </content>
</entry>

<entry>
    <title>Mojocasts forthcoming</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/tempire/2011/07/mojocasts-forthcoming.html" />
    <id>tag:blogs.perl.org,2011:/users/tempire//286.1995</id>

    <published>2011-07-20T21:08:43Z</published>
    <updated>2011-07-20T21:36:21Z</updated>

    <summary>It&apos;s been several weeks since the first mojocast, and the response has been quite positive. What started out as an excuse to use iMovie has turned into something useful and galvanizing. Especially encouraging are the comments from folks currently learning...</summary>
    <author>
        <name>tempire</name>
        <uri>http://tempi.re/</uri>
    </author>
    
    <category term="perlmojoliciousmojocast" label="perl mojolicious mojocast" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/tempire/">
        <![CDATA[<p>It's been several weeks since the first <a href="http://mojocasts.com/">mojocast</a>, and the response has been quite positive.  </p>

<p>What started out as an excuse to use iMovie has turned into something useful and galvanizing.  Especially encouraging are the comments from folks currently learning Perl; presenting n00b information in an easily consumable and pleasant manner solidifies new users' decisions that Perl is an excellent choice.</p>

<p>The second mojocast is forthcoming, delayed only by the process of moving; sleeping on couches en route has a negative effect on finding quiet locations with decent acoustics, and girls always want attention when you're in their house.  Go figure.</p>

<p>Never fear, though, the second mojocast is nearly complete.</p>

<p>Anyone who wants to contribute to its launch and the marketing of Perl through mojocasts, please contact me directly - via comments, email, or in the #mojo irc channel.  The comments for the first episode indicate that even the Ruby folk are surprised and impressed with a taste of Modern Perl, so the more people that are onboard, the better; there's every reason to work together to make an impact on Perl's impression in the open source community as a whole.</p>

<p>Viva la revolución!</p>]]>
        
    </content>
</entry>

<entry>
    <title>Mojocast #1 - Fun with clouds!</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/tempire/2011/07/mojocast-1---fun-with-clouds.html" />
    <id>tag:blogs.perl.org,2011:/users/tempire//286.1942</id>

    <published>2011-07-05T16:56:16Z</published>
    <updated>2011-07-05T17:11:52Z</updated>

    <summary>I&apos;ve just recently released my first Perl-related screencast, Fun with clouds. It details how to install and build your first Mojolicious web application. I&apos;d like to create more, just let me know what Mojolicious-related topics you would like to hear...</summary>
    <author>
        <name>tempire</name>
        <uri>http://tempi.re/</uri>
    </author>
    
    <category term="perlmojolicious" label="perl mojolicious" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/tempire/">
        <![CDATA[<p>I've just recently released my first Perl-related screencast, Fun with clouds.</p>

<p>It details how to install and build your first Mojolicious web application.  I'd like to create more, just let me know what Mojolicious-related topics you would like to hear about on <a href="http://mojocasts.com/">http://mojocasts.com</a>.  The more feedback I get, the more I'll release.</p>

<p><iframe src="http://player.vimeo.com/video/25921577?title=0&amp;byline=0&amp;portrait=0" width="400" height="300" frameborder="0"></iframe><p><a href="http://vimeo.com/25921577">Mojocast #1 Fun with clouds!</a> from <a href="http://vimeo.com/tempire">glen hinkle</a> on <a href="http://vimeo.com">Vimeo</a>.</p></p>

<p>Enjoy!</p>]]>
        
    </content>
</entry>

<entry>
    <title>Perl numbrenclature support</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/tempire/2011/06/perl-numbrenclature-support.html" />
    <id>tag:blogs.perl.org,2011:/users/tempire//286.1929</id>

    <published>2011-06-30T15:01:47Z</published>
    <updated>2011-06-30T15:49:17Z</updated>

    <summary>Erez Schatz has proposed that each released version of Perl be referred to as a code name. Besides the fact that &quot;Erez Schatz&quot; is a cool name by itself, I think he&apos;s on to something. Since it&apos;s clear that the...</summary>
    <author>
        <name>tempire</name>
        <uri>http://tempi.re/</uri>
    </author>
    
    <category term="raptor" label="raptor" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/tempire/">
        <![CDATA[<p>Erez Schatz has proposed that each released version of Perl be<a href="http://bit.ly/kcD3T4"> referred to as a code name</a>.</p>

<p>Besides the fact that "Erez Schatz" is a cool name by itself, I think he's on to something.</p>

<p>Since it's clear that the Perl6 moniker is going to remain, and most folks are too curmudgeonly to change the name of Perl5, this seems like a good compromise.  It allows for a clear marketing difference for each release - one that obviously works elsewhere in the tech industry.</p>

<ul>
<li>Perl 5.8   Zombie (because it <a href="http://bit.ly/mzwzxs">never dies</a>, <a href="http://bit.ly/lDalNM">haunting us</a> until the end of days)</li>
<li>Perl 5.10 Onion</li>
<li>Perl 5.12 Camel</li>
<li>Perl 5.14 Llama</li>
<li>Perl 5.16 Butterfly</li>
</ul>

<p><br />
(You know Sebastian's going to jump at the chance to design a nifty logo for each one)</p>

<p>Peter Shangov's idea is also worth pursuing - <a href="http://bit.ly/lQNXhW">a Perl distribution with all the modern toolkits included</a>.  Given the recent <a href="http://bit.ly/mwY44J">logo</a> <a href="http://bit.ly/ktdD2E">activity</a>, it should be called Raptor.  It would be easy enough to start referring to "Raptor", just as "Rails" is a rallying cry for the Ruby folk.  It could be downloadable from http://raptor.perl.org, of course - possibly even installable via perlbrew:</p>

<p>$ perlbrew install raptor</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Logginz ur console with Mojolicious</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/tempire/2011/02/logginz-ur-console-with-mojolicious.html" />
    <id>tag:blogs.perl.org,2011:/users/tempire//286.1499</id>

    <published>2011-02-23T22:48:25Z</published>
    <updated>2011-02-24T00:00:36Z</updated>

    <summary>A new Mojolicious plugin has been released, Mojolicious::Plugin::ConsoleLogger. By default, Mojolicious will send debug messages to a log/[mode].log file; if the log directory does not exist, messages will default to the terminal console. You can use any of the four...</summary>
    <author>
        <name>tempire</name>
        <uri>http://tempi.re/</uri>
    </author>
    
    <category term="mojobrowserconsole" label="mojo browser console" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/tempire/">
        <![CDATA[<p>A new Mojolicious plugin has been released, <a href="http://search.cpan.org/~tempire/Mojolicious-Plugin-ConsoleLogger/README.pod">Mojolicious::Plugin::ConsoleLogger</a>.</p>

<p>By default, Mojolicious will send debug messages to a log/[mode].log file; if the log directory does not exist, messages will default to the terminal console.</p>

<p><script src="https://gist.github.com/841380.js?file=gistfile1.eclass"></script></p>

<p>You can use any of the four logging groups for customized messages:</p>

<p><script src="https://gist.github.com/841386.js?file=gistfile1.pl"></script></p>

<p>With Mojolicious::Plugin::ConsoleLogger, you can log these same messages directly to your browser console.</p>

<p>Declare the plugin:</p>

<p><script src="https://gist.github.com/841389.js?file=gistfile1.pl"></script></p>

<p>And view all your log messages directly from your browser:</p>

<p><img alt="console logger devtools screenshot.png" src="http://blogs.perl.org/users/tempire/11.png" width="622" height="240" class="mt-image-none" style="" /></p>

<p>That's all well and good, but let's take it a step further.  You can even see error messages when the template is missing:</p>

<p><img alt="template not found browser console error.png" src="http://blogs.perl.org/users/tempire/template%20not%20found%20browser%20console%20error.png" width="625" height="51" class="mt-image-none" style="" /></p>

<p>Or when there's a template error:</p>

<p><img alt="syntax error template mojo console logger.png" src="http://blogs.perl.org/users/tempire/syntax%20error%20template%20mojo%20console%20logger.png" width="626" height="105" class="mt-image-none" style="" /></p>

<p>Even when there's a Perl compilation error:</p>

<p><img alt="perl error mojo console logger.png" src="http://blogs.perl.org/users/tempire/perl%20error%20mojo%20console%20logger.png" width="661" height="52" class="mt-image-none" style="" /></p>

<p>As always, Mojolicious installs in about a minute:<br />
<code>sudo -s 'curl -L cpanmin.us | perl - Mojolicious::Plugin::ConsoleLogger'</code></p>

<p><small>Disclaimer:<br />
Implementation stolen from Plack::Middleware::ConsoleLogger</small></p>]]>
        
    </content>
</entry>

<entry>
    <title>CSS selector goodness in Mojo::DOM</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/tempire/2011/02/css-selector-goodness-in-mojodom.html" />
    <id>tag:blogs.perl.org,2011:/users/tempire//286.1475</id>

    <published>2011-02-17T03:29:13Z</published>
    <updated>2011-02-17T04:21:08Z</updated>

    <summary>Now that we&apos;ve seen how easy Mojo::DOM makes parsing html, let&apos;s take a closer look at the css selector goodness it provides. Here&apos;s a fairly verbose html sample for us to work with: First, we initialize and parse the file:...</summary>
    <author>
        <name>tempire</name>
        <uri>http://tempi.re/</uri>
    </author>
    
    <category term="cssparsedom" label="css parse dom" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/tempire/">
        <![CDATA[<p>Now that we've seen how easy Mojo::DOM makes parsing html, let's take a closer look at the css selector goodness it provides.</p>

<p>Here's a fairly verbose html sample for us to work with:</p>

<p><script src="https://gist.github.com/828913.js?file=gistfile1.html"></script></p>

<p>First, we initialize and parse the file:<code><br />
use File::Slurp 'slurp';<br />use Mojo::DOM;<br />my $dom = Mojo::DOM->new->parse(scalar slurp 'some.html');</code></p>

<p>Getting all the articles' contents, of course, is easy:<br />
<code>$dom->find('li a');</code></p>

<p>But we can do better than that.  Let's say we want only the article titles that have page anchors:<br />
<code>$dom->find('a[href^=#]');</code></p>

<p>Nah, let's get the article titles that link to external urls:<br />
<code>$dom->find('a[href^=http]');</code></p>

<p>How about only article titles that link to .net domains?<br />
<code>$dom->find('a[href*=.net/]');</code></p>

<p>We can also get the page anchors themselves:<br />
<code>$dom->find('div.article a[name]');</code></p>

<p>It could be that some articles have no text content; let's single those out:<br />
<code>$dom->find('div.article p:empty');</code></p>

<p>Or, if we want only the articles with text content:<br />
<code>$dom->find('div.article p:not(:empty)');</code></p>

<p>Let's get the articles that are only snippets (class name ends with 'snippet'):<br />
<code>$dom->find('div.article p[class$=snippet]');</code></p>

<p>There's an advertisement in the markup, let's look at the article immediately following it:<br />
<code>$dom->find('a.advertisement + div.article');</code></p>

<p>If you're looking to be particularly awesome, with Mojolicious 1.1, you can use all of these <a href="http://mojolicio.us/perldoc?Mojolicious/Guides/Cookbook#Command_Line">selectors from the command line</a>.</p>

<p>Mojo::DOM currently implements all the selectors from jQuery that make contextual sense; if you run into a use case for something that's not implemented, pop into #mojo or the mailing list and make your case.  Join the revolution!</p>

<p>As always, it's one-step easy to install:<br />
<code>sudo -s 'curl -L cpanmin.us | perl - Mojolicious'</code></p>

<p><a href="http://mojolicio.us/perldoc?Mojo/DOM">Mojo::DOM docs</a><br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>Testing your Mojo with Test::Mojo</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/tempire/2011/02/testing-your-mojo-with-testmojo.html" />
    <id>tag:blogs.perl.org,2011:/users/tempire//286.1448</id>

    <published>2011-02-09T05:54:06Z</published>
    <updated>2011-02-09T07:17:07Z</updated>

    <summary>They say programmers don&apos;t like to test. It seems to me that the folks who say that aren&apos;t programmers. If they are, they&apos;ve never been the sole responsible party for any application. When there&apos;s no one to pass the blame...</summary>
    <author>
        <name>tempire</name>
        <uri>http://tempi.re/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/tempire/">
        <![CDATA[<p>They say programmers don't like to test.</p>

<p>It seems to me that the folks who say that aren't programmers.  If they are, they've never been the sole responsible party for any application.  When there's no one to pass the blame to, TDD is no longer just an idea, it's time & money.</p>

<p>Once you get the hang of it, the peace of knowing that your code works has a value beyond measurement. </p>

<p>It's for this reason Mojolicious makes it easy to test your web apps in a clean, simple manner.</p>

<p><script src="https://gist.github.com/817976.js?file=gistfile1.pl"></script></p>

<p>Now that's easy.  But there's more.</p>

<p>Test::Mojo tests are chainable, so you can keep your tests in a clean group:</p>

<p><script src="https://gist.github.com/817981.js?file=gistfile1.pl"></script></p>

<p>Now that's pretty.  But wait, there's more.</p>

<p>Using Mojolicious' built in JSON parser, you can test JSON output using an equivalent decoded Perl structure:</p>

<p><script src="https://gist.github.com/817985.js?file=gistfile1.pl"></script></p>

<p>On a side note, Mojo::JSON is the fastest pure-perl JSON parser available.  Thanks to chansen, it recently became even faster, outperforming JSON::PP by 3x.</p>

<p>But wait, there's more.</p>

<p>Test::Mojo methods have exactly the same syntax as their corresponding Mojo::Client methods, sharing much of the same code.</p>

<p>For example, with Mojo::Client, you would write:</p>

<p><script src="https://gist.github.com/817988.js?file=gistfile1.pl"></script></p>

<p>Testing the route would be nearly the same thing - Just add the _ok suffix, and you're good to go:</p>

<p><script src="https://gist.github.com/817998.js?file=gistfile1.pl"></script></p>

<p>As a matter of fact, testing with all the HTTP methods have the same naming scheme:</p>

<p><script src="https://gist.github.com/818019.js?file=gistfile1.pl"></script></p>

<p>But wait, there's more.</p>

<p>Much like Mojo::Client, Test::Mojo automatically stores cookies for you, so you can test cookie-based web apps without any extra code.</p>

<p>When you need to drop existing cookies, you can reset the session:</p>

<p><script src="https://gist.github.com/818000.js?file=gistfile1.pl"></script></p>

<p>Sometimes, it's necessary to break free and do your own thing.  You can access the most recent transaction using the ->tx accessor:</p>

<p><script src="https://gist.github.com/818001.js?file=gistfile1.pl"></script></p>

<p>Installing is one-step easy, and takes about a minute:<br />
<code>curl -L cpanmin.us | perl - Mojolicious</code></p>

<p><br />
One more thing...</p>

<p>Since Test::Mojo is based Mojo::Client, you can debug your tests by printing the HTTP request/response to stderr using an environment variable:</p>

<p><code>MOJO_CLIENT_DEBUG=1 prove t/webapp.t</code></p>

<p>You've got the idea.  Now go test your web apps!</p>

<p><a href="http://mojolicio.us/perldoc?Test/Mojo">Test::Mojo docs</a></p>]]>
        
    </content>
</entry>

<entry>
    <title>Easy DOM parsing with Mojo::DOM</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/tempire/2011/02/easy-dom-parsing-with-mojodom.html" />
    <id>tag:blogs.perl.org,2011:/users/tempire//286.1432</id>

    <published>2011-02-06T18:14:40Z</published>
    <updated>2011-02-06T19:50:40Z</updated>

    <summary>Long ago, I used regex&apos;s to parse HTML. They told me it was evil. They told me it was not maintainable. They were right. But the alternatives were painful. They were clunky. They required me to change the way I...</summary>
    <author>
        <name>tempire</name>
        <uri>http://tempi.re/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/tempire/">
        <![CDATA[<p>Long ago, I used regex's to parse HTML.</p>

<p>They told me it was evil. They told me it was not maintainable. They were right.</p>

<p>But the alternatives were painful. They were clunky. They required me to change the way I approached HTML. They required me to abandon the hipness of css selectors I had embraced with javascript libraries, and ignore the many years spent perfecting my css-foo.</p>

<p>HTML::Parser, HTML::TreeBuilder, I'm sure you're brilliant in your own way. I'm sure you have conquered many lands, and for those who wanted to adapt to your mindset, you brought much happiness.</p>

<p>I wanted a simpler way. jQuery taught us that css selectors are that better way.</p>

<p>Fortunately, Mojo::DOM sprouted up out of the land of cookies and rainbows and unicorns.</p>

<p><script src="https://gist.github.com/813613.js?file=gistfile1.pl"></script></p>

<p>Seriously, have you ever seen HTML retrieved, parsed, and processed so nicely in Perl?</p>

<p>Since most of you have used jQuery and/or similiar Javascript libraries, you already know how to use Mojo::Client/DOM. You simply apply your existing Perl & Javascript knowledge, and you're done.</p>

<p>You're not relegated to parsing only web-requested data; you can use Mojo::DOM directly:</p>

<p><script src="https://gist.github.com/813614.js?file=gistfile1.pl"></script></p>

<p>Installing is one-step easy:<br />
<code>curl -L cpanmin.us | perl - Mojolicious</code></p>

<p>So now you know: you can leave the cruftiness behind, and hang with the hippest of the hip - there's no need to hide your head in shame when talking with hipsters about the latest Ruby shine.  Shine is external; your Mojo runs deep.</p>

<p><a href="http://mojolicio.us/perldoc?Mojo/DOM#NAME">Mojo::DOM docs</a> </p>]]>
        
    </content>
</entry>

<entry>
    <title>Mojolicious Plugins</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/tempire/2011/01/mojolicious-plugins.html" />
    <id>tag:blogs.perl.org,2011:/users/tempire//286.1332</id>

    <published>2011-01-11T01:47:12Z</published>
    <updated>2011-01-11T02:42:05Z</updated>

    <summary>I&apos;ve recently released a couple more Mojolicious Plugins:Mojolicious::Plugin::ParamsAuthMojolicious::Plugin::SslAuth They&apos;re quite simple, and match the Mojolicious::Plugin::BasicAuth implementation. SslAuth uses the recently added TLS certificate authentication support in Mojolicious 1.01. The first argument passed to the callback sub is the IO handle,...</summary>
    <author>
        <name>tempire</name>
        <uri>http://tempi.re/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/tempire/">
        <![CDATA[<p>I've recently released a couple more Mojolicious Plugins:<ul><li><a href="http://search.cpan.org/dist/Mojolicious-Plugin-ParamsAuth/">Mojolicious::Plugin::ParamsAuth</a></li><li><a href="http://search.cpan.org/dist/Mojolicious-Plugin-SslAuth/">Mojolicious::Plugin::SslAuth</a></li></ul><br />
They're quite simple, and match the <a href="http://search.cpan.org/dist/Mojolicious-Plugin-BasicAuth/">Mojolicious::Plugin::BasicAuth</a> implementation.</p>

<p>SslAuth uses the recently added TLS certificate authentication support in Mojolicious 1.01.</p>

<p><script src="https://gist.github.com/773870.js?file=gistfile1.pl"></script></p>

<p>The first argument passed to the callback sub is the IO handle, giving you access to whatever  IO::Socket::SSL provides.  (get_cipher, for example).</p>

<p>ParamsAuth is very basic, its purpose being to keep your params-based authentication uniform with other auth-types.</p>

<p><script src="https://gist.github.com/773872.js?file=gistfile1.pl"></script></p>

<p>The arguments passed to the callback are the values from the named form or query parameters.</p>

<p>BasicAuth has been around for a while, and uses a similar interface:</p>

<p><script src="https://gist.github.com/773873.js?file=gistfile1.pl"></script></p>

<p>If you're looking to be hip with the latest oauth goodness, Marcus Ramberg recently released <a href="http://search.cpan.org/~mramberg/Mojolicious-Plugin-OAuth2-0.02/lib/Mojolicious/Plugin/OAuth2.pm">Mojolicious::Plugin::OAuth2</a>.</p>

<p>...</p>

<p>On a side note, Вячеслав Тихановский (vti) updated <a href="http://search.cpan.org/dist/MojoX-Validator/">MojoX::Validator</a> only days ago.  It is, to date, the only form validation helper that doesn't make me think Amway would have been a better career choice.  It can be integrated into Mojolicious or used separately.  And, like Mojolicious, the code is easy to understand and contribute to.  Join up!<br />
</p>]]>
        
    </content>
</entry>

</feed>
