<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
    <channel>
        <title>Verbose Logging</title>
        <link>http://verboselogging.com/</link>
        <description>software development with some really amazing hair</description>
        <language>en-us</language>
        <managingEditor>darkhelmet@darkhelmetlive.com (Daniel Huckstep)</managingEditor>
        <webMaster>darkhelmet@darkhelmetlive.com (Daniel Huckstep)</webMaster>
        <lastBuildDate>01 May 13 10:00 MDT</lastBuildDate>
        
            <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/VerboseLogging" /><feedburner:info uri="verboselogging" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-sa/2.5/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><feedburner:emailServiceId>VerboseLogging</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
                <title>Ruby Batteries Included</title>
                <category>Programming</category>
                <pubDate>01 May 13 10:00 MDT</pubDate>
                <link>http://feedproxy.google.com/~r/VerboseLogging/~3/CapcjzqIYLM/ruby-batteries-included</link>
                <guid isPermaLink="false">http://verboselogging.com/2013/05/01/ruby-batteries-included</guid>
                <author>Daniel Huckstep</author>
                <description>&lt;p&gt;At the beginning of April 2013, MWRC ensued in Salt Lake City, Utah. I rolled the dice and submitted a talk, not thinking that they'd pick it. Announcements started rolling out on the twitter, and boom, there it was.&lt;/p&gt;

&lt;p&gt;&lt;blockquote class="twitter-tweet"&gt;&lt;p&gt;Speaking at MWRC 2013: @&lt;a href="https://twitter.com/darkhelmetlive"&gt;darkhelmetlive&lt;/a&gt; on &amp;quot;Ruby Batteries Included&amp;quot;. &lt;a href="http://t.co/vzInE1CU" title="http://mtnwestrubyconf.org/2013/ruby-sessions"&gt;mtnwestrubyconf.org/2013/ruby-sess…&lt;/a&gt;&lt;/p&gt;&amp;mdash; MtnWest RubyConf (@mwrc) &lt;a href="https://twitter.com/mwrc/status/294573823641128960"&gt;January 24, 2013&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async src="//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;&lt;/p&gt;

&lt;p&gt;Well, the conference came and went, and I had a great time. Lots of great speakers, met lots of great people, and learned lots of great stuff.&lt;/p&gt;

&lt;p&gt;The videos are coming out now, and mine is available. Check it out!&lt;/p&gt;

&lt;iframe width="640" height="360" src="http://www.youtube.com/embed/BAfy3IgVpjY" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;br/&gt;&lt;/p&gt;

&lt;p&gt;If videos aren't your thing, check out the slides.&lt;/p&gt;

&lt;script async class="speakerdeck-embed" data-id="0dd3c5507fb701301b3c22000a8c4174" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"&gt;&lt;/script&gt;

&lt;p&gt;&lt;br/&gt;&lt;/p&gt;

&lt;p&gt;Thanks for watching, reading, and thanks to everybody who came and watched.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=CapcjzqIYLM:CsiHYGSgMaQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=CapcjzqIYLM:CsiHYGSgMaQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=CapcjzqIYLM:CsiHYGSgMaQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=CapcjzqIYLM:CsiHYGSgMaQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=CapcjzqIYLM:CsiHYGSgMaQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=CapcjzqIYLM:CsiHYGSgMaQ:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=CapcjzqIYLM:CsiHYGSgMaQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=CapcjzqIYLM:CsiHYGSgMaQ:8CPd0h1qtfE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=CapcjzqIYLM:CsiHYGSgMaQ:8CPd0h1qtfE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerboseLogging/~4/CapcjzqIYLM" height="1" width="1"/&gt;</description>
            <feedburner:origLink>http://verboselogging.com/2013/05/01/ruby-batteries-included</feedburner:origLink></item>
        
            <item>
                <title>How Do I RDoc? Documenting Ruby</title>
                <category>Programming</category>
                <pubDate>05 Apr 13 10:00 MDT</pubDate>
                <link>http://feedproxy.google.com/~r/VerboseLogging/~3/EQzBO9eOZLQ/how-do-i-rdoc</link>
                <guid isPermaLink="false">http://verboselogging.com/2013/04/05/how-do-i-rdoc</guid>
                <author>Daniel Huckstep</author>
                <description>&lt;p&gt;Yesterday I &lt;a href="https://speakerdeck.com/darkhelmetlive/ruby-batteries-included"&gt;did a talk&lt;/a&gt; at Mountain West Ruby Conf 2013 all about the Ruby Standard Library.&lt;/p&gt;

&lt;p&gt;The basic premise is you should be looking to the standard library first, before running to RubyGems.org and GitHub for new code. &lt;strong&gt;If all you need is a hammer, you don't need to buy the hardware store.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;Where are the docs?&lt;/h2&gt;

&lt;p&gt;The problem is that sometimes, the standard library doesn't have the documentation you might want. Maybe it's not that great of an example, maybe it's missing completely. Maybe it's almost perfect, but just needs that one last sentence to button it up.&lt;/p&gt;

&lt;h2&gt;How do I Ruby?&lt;/h2&gt;

&lt;p&gt;The solution is you. Ruby is open source, and they love getting pull requests for documentation updates.&lt;/p&gt;

&lt;p&gt;How do you add docs to Ruby? Let's see...&lt;/p&gt;

&lt;h2&gt;Get yours and I'll get mine!&lt;/h2&gt;

&lt;p&gt;First, go to &lt;a href="https://github.com/ruby/ruby"&gt;the GitHub repo&lt;/a&gt; and fork it for yourself. Clone the repo to your local machine.&lt;/p&gt;

&lt;h2&gt;If it ain't broke...&lt;/h2&gt;

&lt;p&gt;In your new ruby directory, run &lt;code&gt;autoconf&lt;/code&gt; to generate the &lt;code&gt;configure&lt;/code&gt; script, then run &lt;code&gt;./configure&lt;/code&gt;. Now run &lt;code&gt;make rdoc-coverage&lt;/code&gt;. This will tell you how much documentation coverage ruby has. It will also give you a list of things that don't have documentation (just scroll up). Find something that needs docs, and go to town!&lt;/p&gt;

&lt;p&gt;If it actually doesn't need documentation (methods that start with &lt;code&gt;_&lt;/code&gt; for example probably don't need rdoc documentation), you can comment with &lt;code&gt;:nodoc:&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Big ups to Ryan Davis for help with these steps!&lt;/p&gt;

&lt;h2&gt;See your progress&lt;/h2&gt;

&lt;p&gt;If you want to see what your docs will look like online, that's pretty easy too. Run &lt;code&gt;rdoc path/to/file.{rb,c} -o html -O&lt;/code&gt; and you'll get an &lt;code&gt;html&lt;/code&gt; directory with stuff. Open up &lt;code&gt;html/index.html&lt;/code&gt; in your browser, and you can see how things look.&lt;/p&gt;

&lt;p&gt;If you are working on a big file, you can run &lt;code&gt;rdoc -C path/to/file.{rb,c}&lt;/code&gt; to get a coverage report for the individual file, to see what you need to work on next.&lt;/p&gt;

&lt;h2&gt;Push it real good&lt;/h2&gt;

&lt;p&gt;Once you've got some documentation written, commit your changes to a branch. Push that branch up to GitHub and make a pull request.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BOOM.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;Fin&lt;/h2&gt;

&lt;p&gt;Every little bit of documentation helps folks. If you are using something, and you're learning about it, put that knowledge into documentation if those docs are lacking. You're helping everybody.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=EQzBO9eOZLQ:Df4r82uhXT8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=EQzBO9eOZLQ:Df4r82uhXT8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=EQzBO9eOZLQ:Df4r82uhXT8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=EQzBO9eOZLQ:Df4r82uhXT8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=EQzBO9eOZLQ:Df4r82uhXT8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=EQzBO9eOZLQ:Df4r82uhXT8:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=EQzBO9eOZLQ:Df4r82uhXT8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=EQzBO9eOZLQ:Df4r82uhXT8:8CPd0h1qtfE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=EQzBO9eOZLQ:Df4r82uhXT8:8CPd0h1qtfE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerboseLogging/~4/EQzBO9eOZLQ" height="1" width="1"/&gt;</description>
            <feedburner:origLink>http://verboselogging.com/2013/04/05/how-do-i-rdoc</feedburner:origLink></item>
        
            <item>
                <title>manbearpig: Mutation Testing for Go</title>
                <category>Programming</category>
                <pubDate>11 Mar 13 10:00 MDT</pubDate>
                <link>http://feedproxy.google.com/~r/VerboseLogging/~3/nvfkmfR4VEM/manbearpig-mutation-testing-for-go</link>
                <guid isPermaLink="false">http://verboselogging.com/2013/03/11/manbearpig-mutation-testing-for-go</guid>
                <author>Daniel Huckstep</author>
                <description>&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Mutation_testing"&gt;Mutation testing&lt;/a&gt; isn't about testing your code, but about improving your tests.&lt;/p&gt;

&lt;p&gt;What happens is the testing tool looks through your source code for instances of some known thing. This usually something easily tweaked, like &lt;code&gt;==&lt;/code&gt;. For each instance, it changes it to some opposite value that makes sense. In the case of &lt;code&gt;==&lt;/code&gt;, we can change it to &lt;code&gt;!=&lt;/code&gt;. For each single change it makes, it runs the tests. The idea is that the tests should fail. If they don't, you might want to consider writing more tests to cover the cases the mutation exposed. After a test run, the mutation is reset, so as to not taint subsequent mutations.&lt;/p&gt;

&lt;p&gt;For my book &lt;a href="http://thestandardlibrary.com/go.html"&gt;Go, The Standard Library&lt;/a&gt; I wrote an example to show off how you can alter a Go &lt;a href="http://en.wikipedia.org/wiki/Abstract_syntax_tree"&gt;AST&lt;/a&gt;. I've reworked the example and packaged up an an application called &lt;a href="https://github.com/darkhelmet/manbearpig"&gt;manbearpig&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;manbearpig&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://res.cloudinary.com/verboselogging/image/upload/t_large/manbearpig.jpg" alt="manbearpig as seen in South Park"&gt;
&lt;/p&gt;

&lt;p&gt;Get start by installing &lt;code&gt;manbearpig&lt;/code&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;go get github.com/darkhelmet/manbearpig
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now you can run it on a standard library to see it in action.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;manbearpig -import crypto/sha256 -mutation ==
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can see that it switches &lt;code&gt;==&lt;/code&gt; to &lt;code&gt;!=&lt;/code&gt;, and that the tests break, as they should.&lt;/p&gt;

&lt;p&gt;Run &lt;code&gt;manbearpig -list&lt;/code&gt; to see the list of available mutations.&lt;/p&gt;

&lt;h2&gt;Fin&lt;/h2&gt;

&lt;p&gt;Run this on your own package to see where your tests are lacking.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=nvfkmfR4VEM:I3ysL7Yvmhg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=nvfkmfR4VEM:I3ysL7Yvmhg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=nvfkmfR4VEM:I3ysL7Yvmhg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=nvfkmfR4VEM:I3ysL7Yvmhg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=nvfkmfR4VEM:I3ysL7Yvmhg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=nvfkmfR4VEM:I3ysL7Yvmhg:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=nvfkmfR4VEM:I3ysL7Yvmhg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=nvfkmfR4VEM:I3ysL7Yvmhg:8CPd0h1qtfE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=nvfkmfR4VEM:I3ysL7Yvmhg:8CPd0h1qtfE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerboseLogging/~4/nvfkmfR4VEM" height="1" width="1"/&gt;</description>
            <feedburner:origLink>http://verboselogging.com/2013/03/11/manbearpig-mutation-testing-for-go</feedburner:origLink></item>
        
            <item>
                <title>Make Your Own Celluloid</title>
                <category>Programming</category>
                <pubDate>11 Feb 13 10:00 MST</pubDate>
                <link>http://feedproxy.google.com/~r/VerboseLogging/~3/CKzFnh0g9Os/make-your-own-celluloid</link>
                <guid isPermaLink="false">http://verboselogging.com/2013/02/11/make-your-own-celluloid</guid>
                <author>Daniel Huckstep</author>
                <description>&lt;p&gt;Oh look, a post on ruby concurrency. LOLZ THREADS.&lt;/p&gt;

&lt;p&gt;Anyway, let's get past the lolz about ruby and threads and just run this on JRuby okay?&lt;/p&gt;

&lt;h2&gt;Celluloid&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://celluloid.io/"&gt;Celluloid&lt;/a&gt; is a ruby library to make concurrency easy. It gives you a nice object oriented interface to the concurrent patterns it provides. We're going to look at two specific interfaces: &lt;a href="https://github.com/celluloid/celluloid/wiki/Basic-usage"&gt;Actors&lt;/a&gt; and &lt;a href="https://github.com/celluloid/celluloid/wiki/Futures"&gt;Futures&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Before we begin, let me say I love Celluloid. I'm just doing this to see how much basic functionality I can get with very little code. You probably shouldn't use any of the code I post here in production, but it's a good learning experience. Just use Celluloid if you need concurrency.&lt;/p&gt;

&lt;h2&gt;Our Interface&lt;/h2&gt;

&lt;p&gt;We want to be able to mix in a module and get two methods: &lt;code&gt;async&lt;/code&gt; and &lt;code&gt;future&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;async&lt;/code&gt; method returns something that sends messages to the instance asynchronously, so calling &lt;code&gt;object.async.long_running_method&lt;/code&gt; will return immediately and &lt;code&gt;long_running_method&lt;/code&gt; will execute in another thread.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;future&lt;/code&gt; method returns something that sends messages it receives to the instance and immediately returns a &lt;code&gt;Future&lt;/code&gt;. This &lt;code&gt;Future&lt;/code&gt; has one method, &lt;code&gt;value&lt;/code&gt;, which will return the return value of the message send when it's ready, possibly blocking until it is ready.&lt;/p&gt;

&lt;p&gt;We'll call our gem &lt;a href="https://github.com/darkhelmet/lol_concurrency/"&gt;lol_concurrency&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;The Async Interface&lt;/h2&gt;

&lt;p&gt;Let's do the &lt;code&gt;async&lt;/code&gt; method first. We'll put everything in the &lt;code&gt;LolConcurrency::Actor&lt;/code&gt; module, which you include into your class. We do a fancy dance to memoize the &lt;code&gt;@async&lt;/code&gt; variable in a threadsafe manner (I think that should be threadsafe...), and then all the real work is done in the &lt;code&gt;LolConcurrency::Actor::Async&lt;/code&gt; class. It forwards &lt;code&gt;respond_to?&lt;/code&gt; to the underlying instance, and then &lt;code&gt;method_missing&lt;/code&gt; saves everything and sends it to the mailbox (using the &lt;code&gt;Queue&lt;/code&gt; class, which is threadsafe). A loop in another thread pops from the mailbox and executes the methods.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Boom.&lt;/strong&gt;&lt;/p&gt;

&lt;script src="https://gist.github.com/darkhelmet/4744122.js?file=actor.rb"&gt;&lt;/script&gt;

&lt;h2&gt;The Future Interface&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;future&lt;/code&gt; method is very similar. We do the same dance to cache the &lt;code&gt;Factory&lt;/code&gt; as I've called it, &lt;code&gt;respond_to?&lt;/code&gt; still gets forwarded, but there's no mailbox. When a message gets sent and hits &lt;code&gt;method_missing&lt;/code&gt;, we make a &lt;code&gt;SizedQueue&lt;/code&gt; able to hold a single value. The actual work gets done in a new thread and the return value shovelled into the queue. We then return a new &lt;code&gt;Future&lt;/code&gt; with the queue. The &lt;code&gt;Future&lt;/code&gt; then does the dance to cache the value it pops from the queue when you want the value. The initial call to &lt;code&gt;value&lt;/code&gt; might be slow (maybe you're making an HTTP request), but will be instantaneous afterwards since the value is cached.&lt;/p&gt;

&lt;script src="https://gist.github.com/darkhelmet/4744122.js?file=future.rb"&gt;&lt;/script&gt;

&lt;h2&gt;All Done&lt;/h2&gt;

&lt;p&gt;That's pretty much it. Wrapping up threads in some safe interface like this can really save you a bunch of headaches. Oh sure, you can still shoot yourself in the foot, doing mutations to things that aren't thread safe. These two modules just give you a nice way to deal with concurrent things without spending too many brain cycles on it.&lt;/p&gt;

&lt;p&gt;Looking at this tested code after the fact, it's probably fine to use, even in production, as long as it's for super simple things. I'll still probably stick with Celluloid anyway. It gives you a ton of other great features to handle actor lifecycles (lol exceptions) and is generally better thought out and designed than this little gem I hacked up in a few hours.&lt;/p&gt;

&lt;p&gt;That's it for now, happy threading!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=CKzFnh0g9Os:QD5orn4kF_c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=CKzFnh0g9Os:QD5orn4kF_c:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=CKzFnh0g9Os:QD5orn4kF_c:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=CKzFnh0g9Os:QD5orn4kF_c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=CKzFnh0g9Os:QD5orn4kF_c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=CKzFnh0g9Os:QD5orn4kF_c:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=CKzFnh0g9Os:QD5orn4kF_c:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=CKzFnh0g9Os:QD5orn4kF_c:8CPd0h1qtfE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=CKzFnh0g9Os:QD5orn4kF_c:8CPd0h1qtfE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerboseLogging/~4/CKzFnh0g9Os" height="1" width="1"/&gt;</description>
            <feedburner:origLink>http://verboselogging.com/2013/02/11/make-your-own-celluloid</feedburner:origLink></item>
        
            <item>
                <title>Basecamp Next Todo Migrator</title>
                <category>Programming</category>
                <pubDate>24 Jan 13 10:00 MST</pubDate>
                <link>http://feedproxy.google.com/~r/VerboseLogging/~3/Tu9xNaay71c/basecamp-next-todo-migrator</link>
                <guid isPermaLink="false">http://verboselogging.com/2013/01/24/basecamp-next-todo-migrator</guid>
                <author>Daniel Huckstep</author>
                <description>&lt;p&gt;I had this conversation on Twitter yesterday.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://res.cloudinary.com/verboselogging/image/upload/t_large/bcx-migration.png" alt="Twitter conversation with @37Signals about migrating a BCX project"&gt;
&lt;/p&gt;

&lt;p&gt;That's fine. 37Signals is known for saying no to things in the interest of a better product. A migrator for BCX isn't exactly something that would add enough value to the product to warrant spending their time on it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's cool.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;Don't worry, I got this&lt;/h2&gt;

&lt;p&gt;I built one. It only took a couple hours to throw together and clean up. It's super basic, but it did the job for me. It handles todolists with their todos and comments, but no attachments.&lt;/p&gt;

&lt;script src="https://gist.github.com/4618013.js"&gt;&lt;/script&gt;

&lt;p&gt;It's not my best code, but whatever it works. The &lt;code&gt;rescue&lt;/code&gt;/&lt;code&gt;retry&lt;/code&gt; stuff was a last minute eye roller because I got an SSL error of sorts. Just keep an eye on it if it gets out of hand. Completed lists are migrated as well, so you have a record of that stuff too.&lt;/p&gt;

&lt;p&gt;It migrated my 800+ todos in my Basecamp Next project to Basecamp Personal in about 24 minutes. Now I can save some bucks in the long run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Happy migrating!&lt;/strong&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=Tu9xNaay71c:VKQUoFhCoEA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=Tu9xNaay71c:VKQUoFhCoEA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=Tu9xNaay71c:VKQUoFhCoEA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=Tu9xNaay71c:VKQUoFhCoEA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=Tu9xNaay71c:VKQUoFhCoEA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=Tu9xNaay71c:VKQUoFhCoEA:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=Tu9xNaay71c:VKQUoFhCoEA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=Tu9xNaay71c:VKQUoFhCoEA:8CPd0h1qtfE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=Tu9xNaay71c:VKQUoFhCoEA:8CPd0h1qtfE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerboseLogging/~4/Tu9xNaay71c" height="1" width="1"/&gt;</description>
            <feedburner:origLink>http://verboselogging.com/2013/01/24/basecamp-next-todo-migrator</feedburner:origLink></item>
        
            <item>
                <title>RubyConf Mission Complete</title>
                <category>Editorial</category>
                <pubDate>08 Nov 12 10:00 MST</pubDate>
                <link>http://feedproxy.google.com/~r/VerboseLogging/~3/Z5-tpuFk8z8/rubyconf-mission-complete</link>
                <guid isPermaLink="false">http://verboselogging.com/2012/11/08/rubyconf-mission-complete</guid>
                <author>Daniel Huckstep</author>
                <description>&lt;p&gt;RubyConf 2012 is at an end, and what a time it was. This was my first conference, and it was all thanks to my employer &lt;a href="http://getyardstick.com/"&gt;Yardstick&lt;/a&gt;. If it wasn&amp;#8217;t for them, I probably wouldn&amp;#8217;t have been able to come, learn so much, and meet so many great people.&lt;/p&gt;
&lt;p&gt;&lt;a href="/2012/10/27/my-rubyconf-mission-thank-all-the-people"&gt;My mission&lt;/a&gt; was to thank as many people as possible, in person. Open source is somewhat of a thankless job. Lots of people using your code or what have you, and never receiving thanks for it.&lt;/p&gt;
&lt;p&gt;While I didn&amp;#8217;t get to meet and thank everybody I wanted to, I did get to quite a few of you. In no particular order&amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/e3/8512155887f48a94d2bf455bce9d28/matz.jpg"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/e8/bc2970d690c4d342b77fd5bdb5d7c9/matz.jpg" class="fright bleft bbottom medium" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h2&gt;Yukihiro &amp;#8220;Matz&amp;#8221; Matsumoto&lt;/h2&gt;
&lt;p&gt;Matz is the reason we were all there. In 1993, Matz started working on what would become ruby. In December of 1995 it was first released. Ruby 1.8 came out in 2003.&lt;/p&gt;
&lt;p&gt;Currently, he works full time on ruby for Heroku. Basically, he gets to do what he loves, and Heroku signs the cheques.&lt;/p&gt;
&lt;p&gt;Domo arigato Matsumoto-san. Ruby makes many people&amp;#8217;s lives better, and the world is a better place for having it. It was a pleasure meeting you and hearing your keynote. I hope we meet again in the future.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/3e/70faf2a47c9e21c3bc408411ed23b0/tenderlove.jpg"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/7e/b4cb62552b80389369cc2efbe609d3/tenderlove.jpg" class="fright bleft bbottom medium" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h2&gt;Aaron &amp;#8220;Tenderlove&amp;#8221; Patterson&lt;/h2&gt;
&lt;p&gt;Aaron is a beacon of positivity in the ruby community. He&amp;#8217;s always wearing a smile and I&amp;#8217;m pretty sure the only reason he stops working is because &lt;a href="https://twitter.com/gorbypuff"&gt;his cat&lt;/a&gt; is sitting on his keyboard.&lt;/p&gt;
&lt;p&gt;He works for AT&amp;amp;T on open source, similar to Matz. He works on rails-core and ruby-core, and has an impressive array of project on &lt;a href="https://github.com/tenderlove"&gt;Github&lt;/a&gt;. Chances are you&amp;#8217;ve run code he&amp;#8217;s written.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/tenderlove"&gt;Follow him on Twitter&lt;/a&gt; and give him a hug.&lt;/p&gt;
&lt;p&gt;Thanks Aaron for all the work you do, code you write, knowledge you drop on us on &lt;a href="http://tenderlovemaking.com/"&gt;your blog&lt;/a&gt;, and your positive attitude. It makes the community better, and encourages us all to be better.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/7a/472e117068c43c60bdab193c3b18d2/weirich.jpg"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/ee/9f18b1a674c4e91453db0a570ac0bc/weirich.jpg" class="fright bleft bbottom medium" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h2&gt;Jim Weirich&lt;/h2&gt;
&lt;p&gt;You&amp;#8217;ve used Jim Weirich&amp;#8217;s code. Yes you have. You know &lt;a href="http://rake.rubyforge.org/"&gt;rake&lt;/a&gt;? Yeah, that was Jim. He also made the &lt;a href="http://builder.rubyforge.org/"&gt;builder gem&lt;/a&gt; for doing &lt;span class="caps"&gt;XML&lt;/span&gt; generation. &lt;a href="http://flexmock.rubyforge.org/"&gt;flexmock&lt;/a&gt; is another one of his that you might use.&lt;/p&gt;
&lt;p&gt;He always gives great presentations at conferences (go watch the videos), and is never greedy when it comes to knowledge and source code.&lt;/p&gt;
&lt;p&gt;These &lt;a href="https://twitter.com/darkhelmetlive/status/264761788682358785"&gt;two&lt;/a&gt; &lt;a href="https://twitter.com/djspinmonkey/status/264813508301058049"&gt;tweets&lt;/a&gt; pretty much cover it.&lt;/p&gt;
&lt;p&gt;Thanks Jim for the great talk, the hug, and all the work you&amp;#8217;ve done and given to the ruby community. It wouldn&amp;#8217;t be the same without you.&lt;/p&gt;
&lt;p&gt;Thank Jim yourself on &lt;a href="https://twitter.com/jimweirich"&gt;his Twitter&lt;/a&gt; or on &lt;a href="http://onestepback.org/"&gt;his blog&lt;/a&gt;. See what other code he&amp;#8217;s shared on &lt;a href="https://github.com/jimweirich"&gt;his Github&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Charles Nutter, Tom Enebo, Nick Sieger&lt;/h2&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/94/87ec00e5990e82fdd998dbe2605ab3/jruby.jpg"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/6f/18de6f2f86a90cf3e97c186652805c/jruby.jpg" class="fright bleft bbottom medium" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;Charlie (center), Tom (left) and Nick (below with Corey Haines) are a few of the &lt;a href="http://jruby.org/"&gt;JRuby&lt;/a&gt; core developers. You know, that popular ruby implementation on the &lt;span class="caps"&gt;JVM&lt;/span&gt; with some crazy performance numbers? Yeah that one. Without these smart people on the JRuby team (and also Ola Bini who wasn&amp;#8217;t present at RubyConf), JRuby would probably just be old abandoned project not worth your time.&lt;/p&gt;
&lt;p&gt;Because of their hard work, JRuby is a force to reckoned with. Charles is also involved with &lt;span class="caps"&gt;JVM&lt;/span&gt; optimizations (I believe he was on two &lt;span class="caps"&gt;JSR&lt;/span&gt; committees), and puts out a lot of code to help get people up and running on JRuby.&lt;/p&gt;
&lt;p&gt;Thanks for all the hard work Charles, Tom, Nick (and Ola!). JRuby is an awesome positive project in the ruby community, and lots of people depend on it. You guys just keep making it better.&lt;/p&gt;
&lt;p&gt;Thank Charles on &lt;a href="https://twitter.com/headius"&gt;Twitter&lt;/a&gt; or &lt;a href="http://blog.headius.com/"&gt;his blog&lt;/a&gt; and get his code on &lt;a href="https://github.com/headius"&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Find Tom on &lt;a href="https://twitter.com/tom_enebo"&gt;Twitter&lt;/a&gt;, &lt;a href="https://github.com/enebo"&gt;Github&lt;/a&gt; or on &lt;a href="http://blog.enebo.com/"&gt;his blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Nick Sieger is also on &lt;a href="https://twitter.com/nicksieger"&gt;Twitter&lt;/a&gt;, &lt;a href="https://github.com/nicksieger"&gt;Github&lt;/a&gt; and has &lt;a href="http://blog.nicksieger.com/"&gt;a blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ola Bini has &lt;a href="https://twitter.com/olabini"&gt;Twitter&lt;/a&gt;, &lt;a href="https://github.com/olabini"&gt;Github&lt;/a&gt;, and &lt;a href="http://olabini.com/blog/"&gt;a blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/4b/c1ed06b8b47b9103debe4b62bb3004/IMG_0396.jpg"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/b6/1f538154e8c99ff791d38e2c7cdb51/IMG_0396.jpg" class="fright bleft bbottom medium" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h2&gt;Corey Haines&lt;/h2&gt;
&lt;p&gt;Corey (right, Nick Sieger left), like Aaron, is pure positivity. I&amp;#8217;m convinced he can&amp;#8217;t form a frown, but Sarah Gray assured me he does frown, but it&amp;#8217;s only at poorly designed code.&lt;/p&gt;
&lt;p&gt;As an advocate of the &amp;#8220;software craftsmanship&amp;#8221; movement, he started &lt;a href="http://coderetreat.org/"&gt;Code Retreat&lt;/a&gt;. These are day long practice sessions to help software developers hone their craft with others.&lt;/p&gt;
&lt;p&gt;He&amp;#8217;s all about becoming better, together.&lt;/p&gt;
&lt;p&gt;Thanks Corey. Your positivity is incredibly valuable, and the ruby community is lucky to have you. Your desire to become better and help us become better as a group is something the ruby community has and others don&amp;#8217;t. That&amp;#8217;s actually a little sad. Everybody community should have Corey Haines.&lt;/p&gt;
&lt;p&gt;You can find Corey on &lt;a href="https://twitter.com/coreyhaines"&gt;Twitter&lt;/a&gt;, &lt;a href="https://github.com/coreyhaines"&gt;Github&lt;/a&gt;, and &lt;a href="http://coreyhaines.com/"&gt;his website&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/b4/4ca8473c519d23b087de51d411a97b/coby.jpg"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/8b/3f903bb59e430d0bfbc2b34baecc68/coby.jpg" class="fright bleft bbottom medium" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h2&gt;Coby Randquist&lt;/h2&gt;
&lt;p&gt;Coby isn&amp;#8217;t pumping out rubygems or ruby-core optimizations, so what does he do? You might not be familiar with the name, because Coby is behind the scenes. Specifically &lt;a href="http://www.confreaks.com/"&gt;Confreaks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;All those videos that are online from ruby and other conferences &lt;strong&gt;for free&lt;/strong&gt;. Coby&amp;#8217;s company produces those. At RubyConf he and his crew were running around between 4 different rooms, recording and live streaming all the talks on Justin.tv.&lt;/p&gt;
&lt;p&gt;It took a while for me to talk to Coby and thank him, because he was always on his game and making sure things were working. If you get the chance, shake his hand and give him the props he deserves.&lt;/p&gt;
&lt;p&gt;Thanks Coby for all the videos! Thank him yourself on &lt;a href="https://twitter.com/kobier"&gt;Twitter&lt;/a&gt; and &lt;a href="http://randquist.us/blog/"&gt;his blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/2e/9e18dd20a8f21349a5eca166512eaf/helmkamp.jpg"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/48/fdca6325191b8601e29af973848d8d/helmkamp.jpg" class="fright bleft bbottom medium" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h2&gt;Bryan Helmkamp&lt;/h2&gt;
&lt;p&gt;Bryan developed the &lt;a href="https://github.com/brynary/rack-bug"&gt;rack-bug&lt;/a&gt; gem which gives you insight into your application when things just aren&amp;#8217;t working the way they&amp;#8217;re supposed to.&lt;/p&gt;
&lt;p&gt;More recently, he founded &lt;a href="https://codeclimate.com/"&gt;Code Climate&lt;/a&gt; which does hosted software metrics for ruby applications. It&amp;#8217;s a business so you&amp;#8217;ll pay for private projects, but for all your open source stuff it&amp;#8217;s nice and free. Head over to the &lt;a href="https://codeclimate.com/explore"&gt;Explore&lt;/a&gt; page to see some of those projects and add your own.&lt;/p&gt;
&lt;p&gt;The similarity between these two projects is that they aren&amp;#8217;t for Bryan; they&amp;#8217;re for us. They help us debug our software and make it better. They encourage better code and generally improve the ruby community. Thanks Bryan!&lt;/p&gt;
&lt;p&gt;Find him on &lt;a href="https://github.com/brynary"&gt;Github&lt;/a&gt; and &lt;a href="https://twitter.com/brynary"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/c1/514d3fed869ab2e4dbc2f1ba51271a/hunt.jpg"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/d0/bee908fa2044ce732d0092e7f9b8ae/hunt.jpg" class="fright bleft bbottom medium" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h2&gt;Chris Hunt&lt;/h2&gt;
&lt;p&gt;Chris Hunt gave a great talk on Service Oriented Architecture at Square. One of the best parts was all the links to &lt;a href="https://github.com/square"&gt;public Github repositories&lt;/a&gt; that Square has released.&lt;/p&gt;
&lt;p&gt;Chris Hunt and Square are shipping like bosses, and it&amp;#8217;s making our community better. Things like &lt;a href="https://github.com/square/cane"&gt;cane&lt;/a&gt; and &lt;a href="https://github.com/square/fdoc"&gt;fdoc&lt;/a&gt; are fantastic. Outside of the ruby community they have Android/Java projects.&lt;/p&gt;
&lt;p&gt;They are giving it all back. Thanks Chris, and thanks Square!&lt;/p&gt;
&lt;p&gt;Find Chris on &lt;a href="https://twitter.com/chrishunt"&gt;Twitter&lt;/a&gt;, at &lt;a href="http://chrishunt.co/"&gt;his website&lt;/a&gt;, and on &lt;a href="https://github.com/chrishunt"&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/be/7482eaf72dfc0429b3fca46ea02eff/loren.jpg"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/32/35c6422ff70ff0643498fa700dfb71/loren.jpg" class="fright bleft bbottom medium" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h2&gt;Loren Segal&lt;/h2&gt;
&lt;p&gt;Write documentation for your code. Pretty please? If you don&amp;#8217;t, Loren Segal will find you. He&amp;#8217;s Canadian though, so he&amp;#8217;ll probably just ask you nicely if you could write docs. I think your kneecaps are safe.&lt;/p&gt;
&lt;p&gt;He&amp;#8217;s the brains behind the &lt;a href="https://github.com/lsegal/yard"&gt;yard gem&lt;/a&gt; for documenting your ruby code. It powers &lt;a href="http://rdoc.info/"&gt;http://rdoc.info/&lt;/a&gt; which is where I go for all my documentation needs.&lt;/p&gt;
&lt;p&gt;When I thanked Loren, he gave this sigh of relief. You should thank him too, and you should probably use yard to document your ruby code. He also gave a talk at RubyConf, so check out the video when it&amp;#8217;s up. Thanks Loren!&lt;/p&gt;
&lt;p&gt;He can be found on &lt;a href="https://twitter.com/lsegal"&gt;Twitter&lt;/a&gt;, &lt;a href="https://github.com/lsegal"&gt;Github&lt;/a&gt;, and &lt;a href="http://gnuu.org/"&gt;gnuu.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/87/22c462b25c372198a084d14c2e9a36/perham.jpg"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/d6/fa1422fb2c8f75647fd864d530b95e/perham.jpg" class="fright bleft bbottom medium" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h2&gt;Mike Perham&lt;/h2&gt;
&lt;p&gt;Mike is all about concurrency on ruby. Some of his work includes &lt;a href="http://mperham.github.com/sidekiq/"&gt;sidekiq&lt;/a&gt;, &lt;a href="https://github.com/mperham/girl_friday"&gt;girl_friday&lt;/a&gt;, and &lt;a href="https://github.com/mperham/rack-fiber_pool"&gt;rack-fiber_pool&lt;/a&gt;. Sidekiq is a job queue similar to &lt;a href="https://github.com/defunkt/resque"&gt;Resque&lt;/a&gt; but instead of processes it uses threads. girl_friday gives you an in-process job queue, and rack-fiber_pool runs requests in ruby fibers, which if used properly can work quite well.&lt;/p&gt;
&lt;p&gt;He also wrote the &lt;a href="https://github.com/mperham/dalli"&gt;dalli&lt;/a&gt; gem, a fast pure ruby memcached client. Give some of those gems a try. You won&amp;#8217;t be disappointed!&lt;/p&gt;
&lt;p&gt;Thanks for all the code Mike! Keep on pushing concurrency to new levels.&lt;/p&gt;
&lt;p&gt;His RubyConf talk will also be on Confreaks, but until then, find him on &lt;a href="https://twitter.com/mperham"&gt;Twitter&lt;/a&gt;, &lt;a href="https://github.com/mperham"&gt;Github&lt;/a&gt;, &lt;a href="http://www.mikeperham.com/"&gt;his blog&lt;/a&gt; and buy cool gear at &lt;a href="https://www.theclymb.com/"&gt;The Clymb&lt;/a&gt; (only US, makes me a sad panda).&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/09/e64a26170a708ecbb5bb10dcfee82d/storimer.jpg"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/ec/a1f766583df03fbc20e5b327279dc3/storimer.jpg" class="fright bleft bbottom medium" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h2&gt;Jesse Storimer&lt;/h2&gt;
&lt;p&gt;Jesse is a fellow Canadian, and in recent times a budding, nay, accomplished author. He&amp;#8217;s written two books to bring lower level techniques such as forking, &lt;span class="caps"&gt;IPC&lt;/span&gt;, and &lt;span class="caps"&gt;TCP&lt;/span&gt; sockets to ruby developers.&lt;/p&gt;
&lt;p&gt;For a lot of the ruby community, the C programming language is completely foreign. Along with it go things like fork/exec, &lt;span class="caps"&gt;IPC&lt;/span&gt;, and raw &lt;span class="caps"&gt;TCP&lt;/span&gt; socket knowledge. Jesse brings these topics together in &lt;a href="http://workingwithcode.com/"&gt;two books&lt;/a&gt;: Working With &lt;span class="caps"&gt;UNIX&lt;/span&gt; Processes and Working With &lt;span class="caps"&gt;TCP&lt;/span&gt; Sockets. These are important topics and will help you understand your development stack and write better code, even if you never actually use the techniques in your app. They&amp;#8217;ll definitely make you think!&lt;/p&gt;
&lt;p&gt;Get your fork on and level up your &lt;span class="caps"&gt;UNIX&lt;/span&gt; beard, and buy his books. Seriously. He stepped it up a bit with the newest one as for a little bit more money you can get an hour long screencast on building an evented IO server.&lt;/p&gt;
&lt;p&gt;Thanks Jesse for the great resources, and thanks for the signed copy!&lt;/p&gt;
&lt;p&gt;He&amp;#8217;s all up on &lt;a href="https://twitter.com/jstorimer"&gt;Twitter&lt;/a&gt;, &lt;a href="https://github.com/jstorimer"&gt;Github&lt;/a&gt;, and &lt;a href="http://jstorimer.com/"&gt;his blog&lt;/a&gt;. Also, he is not &lt;a href="http://cdn.verboselogging.com/transloadit/original/5d/dcec3102645b8a3193aea887772b77/kroeger.jpg"&gt;Chad Kroeger&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/fe/5316ea2ca56e305a5f637a4058e35a/scofield.jpg"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/35/9b89da3642ba94e5c33aac8a855716/scofield.jpg" class="fright bleft bbottom medium" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h2&gt;Ben Scofield&lt;/h2&gt;
&lt;p&gt;Ben is the man behind the curtains at RubyConf. Along with Evan Phoenix handling MC duties and his army of volunteers, Ben makes sure RubyConf happens, and happens without anything lighting on fire.&lt;/p&gt;
&lt;p&gt;His &lt;a href="https://github.com/bscofield"&gt;Github&lt;/a&gt; account isn&amp;#8217;t as active as a lot of rubyists, but he&amp;#8217;s got other things on his mind. He also handles RailsConf since it&amp;#8217;s a &lt;a href="http://www.rubycentral.org/"&gt;Ruby Central&lt;/a&gt; thing.&lt;/p&gt;
&lt;p&gt;Without Ben, RubyConf probably wouldn&amp;#8217;t have happened, or Evan&amp;#8217;s head would have exploded. Running a conference isn&amp;#8217;t something you can do on your own, but Ben and Evan made a pretty good team. Thanks for the conference guys! It was great!&lt;/p&gt;
&lt;p&gt;You&amp;#8217;ll find Ben on &lt;a href="http://benscofield.com/"&gt;his blog&lt;/a&gt; or on &lt;a href="https://twitter.com/bscofield"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/63/0648e8fb6ce4835546f58d02557700/phoenix.jpg"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/0c/df2399f0735a2dfe6d5a2e044c1beb/phoenix.jpg" class="fright bleft bbottom medium" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h2&gt;Evan Phoenix&lt;/h2&gt;
&lt;p&gt;I mentioned Evan Phoenix just a second ago along with Ben Scofield. Evan is a director on Ruby Central, and was instrumental in RubyConf happening the way it did. He MC&amp;#8217;d the event, and was always around to make sure things were going smoothly.&lt;/p&gt;
&lt;p&gt;On top of that, he works on &lt;a href="http://rubini.us/"&gt;Rubinius&lt;/a&gt;, that other awesome ruby implementation with real threads and no &lt;span class="caps"&gt;GIL&lt;/span&gt;, and the &lt;a href="http://puma.io/"&gt;puma webserver&lt;/a&gt;. These are both great projects, and give ruby developers (along with JRuby) a truly concurrent virtual machine ready for the next generation of applications.&lt;/p&gt;
&lt;p&gt;If that wasn&amp;#8217;t enough, he was ear to ear smiles the whole time I saw him at RubyConf. Thanks for all the code Evan, and thanks for the positive attitude.&lt;/p&gt;
&lt;p&gt;Find Evan on &lt;a href="https://twitter.com/evanphx"&gt;Twitter&lt;/a&gt;, &lt;a href="https://github.com/evanphx"&gt;Github&lt;/a&gt; and on &lt;a href="http://blog.fallingsnow.net/"&gt;his blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/6b/fa3695421b863a261f1fa46287ca2b/ford.jpg"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/8a/6174cdbac636487f16d8fb2bd7fba7/ford.jpg" class="fright bleft bbottom medium" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h2&gt;Brian Ford&lt;/h2&gt;
&lt;p&gt;Brian Ford, along with Evan, works on &lt;a href="http://rubini.us/"&gt;Rubinius&lt;/a&gt;. Rubinius stays on the leading edge of ruby thanks to the hard work Brian puts in. You really should take a serious look at. It&amp;#8217;s ahead of the curve and deserves more attention than it gets. Real threads, no &lt;span class="caps"&gt;GIL&lt;/span&gt;, and a lot of the core libraries and tools are written in ruby itself. What&amp;#8217;s not to love?&lt;/p&gt;
&lt;p&gt;Other languages also target the VM, which is built with other languages in mind. It&amp;#8217;s not &lt;em&gt;just&lt;/em&gt; a ruby VM.&lt;/p&gt;
&lt;p&gt;Next time you see Brian, go off to your computer and install rubinius, play with it, run your app on it, report bugs and offer patches. Then go buy him a whiskey. After his talk, of course. He gives great talks. Thanks Brian!&lt;/p&gt;
&lt;p&gt;Head over to &lt;a href="https://twitter.com/brixen"&gt;Twitter&lt;/a&gt;, &lt;a href="https://github.com/brixen"&gt;Github&lt;/a&gt;, and &lt;a href="http://brixen.io/"&gt;his blog&lt;/a&gt; to thank him.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/f1/be763a4e13d692e5a5575136a1bba1/susser.jpg"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/b0/e6168063f5fbd9d581acb171d61118/susser.jpg" class="fright bleft bbottom medium" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h2&gt;Josh Susser&lt;/h2&gt;
&lt;p&gt;Josh gave a talk at RubyConf this year, and I probably should have gone, but the talk on racc was too tempting. I&amp;#8217;ll probably watch the RubyConf video a few times and have my mind blown.&lt;/p&gt;
&lt;p&gt;On top of talking, he&amp;#8217;s been blogging since February of 2006, on ruby, Rails, and a variety of other topics.&lt;/p&gt;
&lt;p&gt;You might also recognize Josh, his voice anyway, from the &lt;a href="http://rubyrogues.com/"&gt;Ruby Rogues podcast&lt;/a&gt; where he is a regular with the other Rogues. Listen to that podcast if you don&amp;#8217;t. It&amp;#8217;s filled with good stuff. Thanks for all the knowledge Josh!&lt;/p&gt;
&lt;p&gt;Follow him on &lt;a href="https://twitter.com/joshsusser"&gt;Twitter&lt;/a&gt;, &lt;a href="http://blog.hasmanythrough.com/"&gt;his blog&lt;/a&gt;, or his &lt;a href="https://github.com/joshsusser"&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/58/ba5aee0a47ab57c539745485466859/eleanor.jpg"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/21/fc2a092fc588041f158fbdd0bbcc35/eleanor.jpg" class="fright bleft bbottom medium" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h2&gt;Eleanor McHugh&lt;/h2&gt;
&lt;p&gt;Eleanor is true hacker. She&amp;#8217;s like a British female _why. She does ruby and Go, plays with virtual machines, gives talks, and can dance up a storm.&lt;/p&gt;
&lt;p&gt;She moderated the lightning talks at RubyConf this year as well. She&amp;#8217;s generally a positive force in whatever community she&amp;#8217;s in.&lt;/p&gt;
&lt;p&gt;I highly recommend &lt;a href="http://www.confreaks.com/presenters/208-eleanor-mchugh"&gt;her videos on Confreaks&lt;/a&gt; and &lt;a href="http://www.slideshare.net/feyeleanor"&gt;her slides on Slideshare&lt;/a&gt;. Thanks for all the knowledge Eleanor!&lt;/p&gt;
&lt;p&gt;Bug her on &lt;a href="https://twitter.com/feyeleanor"&gt;Twitter&lt;/a&gt; and &lt;a href="https://github.com/feyeleanor"&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Yehuda Katz, Matt Aimonetti, Eric Hodel&lt;/h2&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/33/7e67e123fadea68e8697e24d3ec68e/IMG_0374.jpg"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/37/180a540612c974db839f158e2dc424/IMG_0374.jpg" class="fright bleft bbottom medium" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;From left to right we have Yehuda Katz, Aaron Patterson, Eric Hodel, and Matt Aimonetti. Where to start?&lt;/p&gt;
&lt;p&gt;Yehuda&amp;#8217;s done Merb, Rails, &lt;a href="http://handlebarsjs.com/"&gt;Handlebars&lt;/a&gt;, &lt;a href="http://whatisthor.com/"&gt;Thor&lt;/a&gt;, &lt;a href="https://github.com/wycats/rack-offline"&gt;rack-offline&lt;/a&gt;, and &lt;a href="http://gembundler.com/"&gt;bundler&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Find Yehuda on &lt;a href="https://twitter.com/wycats"&gt;Twitter&lt;/a&gt;, &lt;a href="https://github.com/wycats"&gt;Github&lt;/a&gt;, and &lt;a href="http://yehudakatz.com/"&gt;his blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Matt&amp;#8217;s done Merb, &lt;a href="https://github.com/mattetti/Weasel-Diesel"&gt;Weasel-Diesel&lt;/a&gt;, &lt;a href="http://ofps.oreilly.com/titles/9781449380373/"&gt;MacRuby: The Definitive Guide&lt;/a&gt;, &lt;a href="https://github.com/mattetti/googlecharts"&gt;googlecharts&lt;/a&gt;, &lt;a href="http://bubblewrap.io/"&gt;BubbleWrap&lt;/a&gt;, and about a billion other Github repos.&lt;/p&gt;
&lt;p&gt;Find Matt on &lt;a href="https://twitter.com/merbist"&gt;Twitter&lt;/a&gt;, &lt;a href="https://github.com/mattetti"&gt;Github&lt;/a&gt;, and &lt;a href="http://matt.aimonetti.net/"&gt;his blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Eric? &lt;a href="http://rubyforge.org/projects/rubygems/"&gt;Rubygems yo!&lt;/a&gt; &lt;strong&gt;Drops the mic.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Find Eric on &lt;a href="https://twitter.com/drbrain"&gt;Twitter&lt;/a&gt;, &lt;a href="https://github.com/drbrain"&gt;Github&lt;/a&gt;, and &lt;a href="http://blog.segment7.net/"&gt;his blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thanks guys, for all the hard work you do, code you put out, articles and books you write, and talks you give. Thank you.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/1d/0088196913f871869711ad8a6b5d3e/mei.png"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/28/6c1a8c6b5fea8e68e4630d044c15fc/mei.png" class="fright bleft bbottom medium" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h2&gt;Sarah Mei&lt;/h2&gt;
&lt;p&gt;This year at RubyConf, Sarah Mei gave the first female keynote. She dropped the mic and the roof blew off the convention center.&lt;/p&gt;
&lt;p&gt;When she&amp;#8217;s not wowing audiences, she&amp;#8217;s writing ruby for the &lt;a href="https://joindiaspora.com/"&gt;Diaspora project&lt;/a&gt; and organizes &lt;a href="http://workshops.railsbridge.org/"&gt;Rails workshops for women&lt;/a&gt;. She&amp;#8217;s improving the ruby, Rails, and social networking communities, and getting more women into programming.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Like a boss.&lt;/strong&gt; Thanks Sarah!&lt;/p&gt;
&lt;p&gt;Give Sarah mad props at &lt;a href="http://www.sarahmei.com/blog/"&gt;her blog&lt;/a&gt;, on &lt;a href="https://twitter.com/sarahmei"&gt;Twitter&lt;/a&gt;, and on &lt;a href="https://github.com/sarahmei"&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/3b/4e986aaabb6b027f89c8015ebaf95e/gary.png"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/medium/07/92e1b9af38f87f0c45a4322a4aaf71/gary.png" class="fright bleft bbottom medium" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h2&gt;Gary Bernhardt&lt;/h2&gt;
&lt;p&gt;Gary drops knowledge like bombs with his &lt;a href="https://www.destroyallsoftware.com/"&gt;Destroy All Software&lt;/a&gt; screencasts and his talks. He gave a great one at RubyConf. Watch the video if you didn&amp;#8217;t get to see it. Hell, watch it even if you did.&lt;/p&gt;
&lt;p&gt;He also likes to &lt;a href="https://github.com/garybernhardt/base"&gt;troll us all&lt;/a&gt; once in a while. But he educates and trolls with a little smirk and it makes us all giggle a little bit. He brings joy, knowhow, and entertainment in one fantastically well dressed package. Thanks Gary!&lt;/p&gt;
&lt;p&gt;Tweet Gary on &lt;a href="https://twitter.com/garybernhardt"&gt;Twitter&lt;/a&gt;, get his code on &lt;a href="https://github.com/garybernhardt"&gt;Github&lt;/a&gt;, and buy his screencasts at &lt;a href="https://www.destroyallsoftware.com/"&gt;Destroy All Software&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Phew&lt;/h2&gt;
&lt;p&gt;It&amp;#8217;s taken me 3 days to write this up. What&amp;#8217;s crazy is that this list is really only a small fraction of the people who deserve thanks. I tried to meet as many people as I could while at my first RubyConf, and I did a pretty good job. I didn&amp;#8217;t get to meet and thank you all though, but there&amp;#8217;s always next year.&lt;/p&gt;
&lt;p&gt;If you meet somebody on this list, thank them. If you meet somebody off the list and they are contributing positively to whatever community they are a part of, thank them. Give them a handshake or a hug, buy them a drink, and thank them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;They deserve it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To everybody on this list, to everybody I met at RubyConf, to everybody I haven&amp;#8217;t met yet, &lt;strong&gt;thank you.&lt;/strong&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=Z5-tpuFk8z8:dxS3sD8z1r0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=Z5-tpuFk8z8:dxS3sD8z1r0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=Z5-tpuFk8z8:dxS3sD8z1r0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=Z5-tpuFk8z8:dxS3sD8z1r0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=Z5-tpuFk8z8:dxS3sD8z1r0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=Z5-tpuFk8z8:dxS3sD8z1r0:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=Z5-tpuFk8z8:dxS3sD8z1r0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=Z5-tpuFk8z8:dxS3sD8z1r0:8CPd0h1qtfE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=Z5-tpuFk8z8:dxS3sD8z1r0:8CPd0h1qtfE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerboseLogging/~4/Z5-tpuFk8z8" height="1" width="1"/&gt;</description>
            <feedburner:origLink>http://verboselogging.com/2012/11/08/rubyconf-mission-complete</feedburner:origLink></item>
        
            <item>
                <title>rc Files and You: Automating Your Project</title>
                <category>Programming</category>
                <pubDate>06 Nov 12 10:00 MST</pubDate>
                <link>http://feedproxy.google.com/~r/VerboseLogging/~3/aABNEGoXkxI/rc-files-and-you-automating-your-project</link>
                <guid isPermaLink="false">http://verboselogging.com/2012/11/06/rc-files-and-you-automating-your-project</guid>
                <author>Daniel Huckstep</author>
                <description>&lt;p&gt;I gave a lightning talk at &lt;a href="http://rubyconf.org/"&gt;RubyConf 2012 in Denver&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Man was I nervous.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Apparently I did an okay job though, and I'd like to thank all the people who were and took time out of their day to listen to me. Thanks! If you want to view the original talk, the &lt;a href="http://www.justin.tv/confreaks/b/337863983"&gt;video is here&lt;/a&gt;. Scroll to 10:15 to find me, but I recommend watching them all.&lt;/p&gt;

&lt;p&gt;A few people had more questions (I talked really fast since it was a lightning talk after all) and this was originally going to be a blog post in the first place, so here it is, in blog form.&lt;/p&gt;

&lt;h2&gt;Your app is not one language.&lt;/h2&gt;

&lt;p&gt;It's not just ruby/python/java/go/pascal/ada/whatever. It really isn't.&lt;/p&gt;

&lt;p&gt;You at least have bash, or whatever shell you use, and it gives you a bunch of tools.&lt;/p&gt;

&lt;p&gt;Bash for example has functions, loops and conditionals, so you're well on your way to programming yourself out of a paper bag.&lt;/p&gt;

&lt;p&gt;Another trick with bash (and most other shells) is that you can &lt;em&gt;source&lt;/em&gt; files to load things into the current process. You do this everytime you start a shell actually. A &lt;code&gt;.profile&lt;/code&gt; or &lt;code&gt;.bashrc&lt;/code&gt; probably loads up a bunch of stuff. I have a whole mess of stuff in my &lt;em&gt;dotfiles&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;What I like to do is dump a bunch of project specific things into a file in the root project directory named &lt;code&gt;rc&lt;/code&gt;. This way, I can &lt;code&gt;cd&lt;/code&gt; into the directory and then type &lt;code&gt;. rc&lt;/code&gt; and bash will load up all that stuff, kind of setting me up to work on the project.&lt;/p&gt;

&lt;h2&gt;My rc File For ForrestFire (source for &lt;a href="https://Tinderizer.com"&gt;Tinderizer.com&lt;/a&gt;)&lt;/h2&gt;

&lt;p&gt;I built &lt;a href="https://Tinderizer.com"&gt;Tinderizer.com&lt;/a&gt; and the source repo is called ForrestFire. I have this little blob in its &lt;code&gt;rc&lt;/code&gt; file. I set a &lt;code&gt;GOPATH&lt;/code&gt; variable, grab some configuration values from Heroku where the site is hosted, and have a function to tell the server to reload the bookmarklet when I change it.&lt;/p&gt;

&lt;script src="https://gist.github.com/4021205.js?file=ForrestFire.sh"&gt;&lt;/script&gt;

&lt;p&gt;I can load it up like this:&lt;/p&gt;

&lt;script src="https://gist.github.com/4021205.js?file=source.txt"&gt;&lt;/script&gt;

&lt;p&gt;Now I can run &lt;code&gt;watch&lt;/code&gt; and it will run &lt;code&gt;puncher&lt;/code&gt; with the appropriate arguments. I can also access the 3 environment variables in my application.&lt;/p&gt;

&lt;h2&gt;My rc File For darkblog2 (source for the admin to this blog)&lt;/h2&gt;

&lt;script src="https://gist.github.com/4021205.js?file=blog.sh"&gt;&lt;/script&gt;

&lt;p&gt;I run postgres and memcached, so I have functions to start and stop both of those. I also need to load postgres dumps into my local database, so I automate that with another function. I also alias &lt;code&gt;rake&lt;/code&gt; because nobody likes typing &lt;code&gt;bundle exec rake&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;The rc File For &lt;a href="http://getyardstick.com"&gt;Yardstick Measure&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;We also use an &lt;code&gt;rc&lt;/code&gt; file at work, but it's much shorter, yet more powerful.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;alias rake='bundle exec rake'
eval &amp;quot;$(./sub/bin/ys init -)&amp;quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That's weird...what's that &lt;code&gt;eval &amp;quot;$(./sub/bin/ys init -)&amp;quot;&lt;/code&gt; nonsense?&lt;/p&gt;

&lt;p&gt;After sourcing that file, I get the &lt;code&gt;ys&lt;/code&gt; command. When I type that without any arguments, it spits out this:&lt;/p&gt;

&lt;script src="https://gist.github.com/4021205.js?file=ys.txt"&gt;&lt;/script&gt;

&lt;p&gt;We use &lt;a href="https://github.com/37signals/sub"&gt;sub&lt;/a&gt; from the fine folks at 37Signals to do this. Once you setup your &lt;code&gt;sub&lt;/code&gt;, you dump appropriately named scripts in its &lt;code&gt;libexec&lt;/code&gt; directory, and you get access to those commands as &lt;code&gt;subcommands&lt;/code&gt; of the main command. &lt;code&gt;rbenv&lt;/code&gt; uses &lt;code&gt;sub&lt;/code&gt; if you're familiar with that.&lt;/p&gt;

&lt;p&gt;In our setup, the &lt;code&gt;sub&lt;/code&gt; is named &lt;code&gt;ys&lt;/code&gt;, and we have the &lt;code&gt;bugs&lt;/code&gt; command which opens up our bug tracking software from the command line. I can type &lt;code&gt;ys bugs&lt;/code&gt; and FogBugz opens in my browser.&lt;/p&gt;

&lt;h2&gt;sub is awesome&lt;/h2&gt;

&lt;p&gt;This isn't a full look at &lt;code&gt;sub&lt;/code&gt;, but the &lt;strong&gt;docs are great.&lt;/strong&gt; Give them a good read if you decide to play with it.&lt;/p&gt;

&lt;h2&gt;sub basics&lt;/h2&gt;

&lt;pre&gt;
git clone git://github.com/37signals/sub.git [name of your sub]
cd [name of your sub]
./prepare.sh [name of your sub]
&lt;/pre&gt;

&lt;p&gt;In my example above from Yardstick, I would have typed &lt;code&gt;./prepare.sh ys&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;Then...&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Remove the &lt;code&gt;.git&lt;/code&gt; directory.&lt;/li&gt;
&lt;li&gt;Start writing your commands in &lt;code&gt;&amp;lt;where sub is&amp;gt;/libexec/&amp;lt;name of sub&amp;gt;-&amp;lt;command name&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Add the eval/init stuff to your &lt;code&gt;rc&lt;/code&gt; file.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;DROP THE BASS!!!&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=k6lVhGeyXuw&amp;amp;t=1m18s"&gt;Skrillex - Cinema&lt;/a&gt;&lt;/p&gt;

&lt;pre&gt;
Brrrrrrrrrrr........
Wob..Wob..Wob.......
Pfffffffthhhhhhhhhh
Grrrrrrrrr........
Pfffffffffthhhhhhhh..
Wob....Wob...Wob...
Pfffthhh....Brrrrrrrr.
&lt;/pre&gt;

&lt;h2&gt;What Else?&lt;/h2&gt;

&lt;p&gt;It supports...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Autocompletion: Add a magic comment and a hook to tell it what to autocomplete.&lt;/li&gt;
&lt;li&gt;Documentation: Add magic comments at the top of the file for docs when running your &lt;code&gt;sub&lt;/code&gt; command without any args or when using the builtin &lt;code&gt;help&lt;/code&gt; command.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;But wait, there's more!&lt;/h2&gt;

&lt;p&gt;You don't &lt;em&gt;have&lt;/em&gt; to use bash. You can write scripts in ruby, python, haskell, whatever! Just dump it in the &lt;code&gt;libexec&lt;/code&gt; directoy, name it appropriately, and include the proper hashbang to run the script and you're set.&lt;/p&gt;

&lt;p&gt;I think you can use compiled binaries too, but I'm not sure how the documentation and autocompletion would work in that case.&lt;/p&gt;

&lt;h2&gt;What now?&lt;/h2&gt;

&lt;p&gt;Don't do anything more than once by hand what a computer can do for you.&lt;/p&gt;

&lt;p&gt;Automate all the things. You don't have any excuses anymore.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=aABNEGoXkxI:iRFm4tD_Gec:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=aABNEGoXkxI:iRFm4tD_Gec:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=aABNEGoXkxI:iRFm4tD_Gec:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=aABNEGoXkxI:iRFm4tD_Gec:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=aABNEGoXkxI:iRFm4tD_Gec:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=aABNEGoXkxI:iRFm4tD_Gec:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=aABNEGoXkxI:iRFm4tD_Gec:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=aABNEGoXkxI:iRFm4tD_Gec:8CPd0h1qtfE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=aABNEGoXkxI:iRFm4tD_Gec:8CPd0h1qtfE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerboseLogging/~4/aABNEGoXkxI" height="1" width="1"/&gt;</description>
            <feedburner:origLink>http://verboselogging.com/2012/11/06/rc-files-and-you-automating-your-project</feedburner:origLink></item>
        
            <item>
                <title>My RubyConf Mission: Thank All The People!</title>
                <category>Editorial</category>
                <pubDate>27 Oct 12 14:00 MDT</pubDate>
                <link>http://feedproxy.google.com/~r/VerboseLogging/~3/uJaKSmQeUl4/my-rubyconf-mission-thank-all-the-people</link>
                <guid isPermaLink="false">http://verboselogging.com/2012/10/27/my-rubyconf-mission-thank-all-the-people</guid>
                <author>Daniel Huckstep</author>
                <description>&lt;p&gt;Are you excited for &lt;a href="http://rubyconf.org/"&gt;RubyConf&lt;/a&gt;? I am! It&amp;#8217;s my first time, and it&amp;#8217;s made possible by my awesome employer, &lt;a href="http://getyardstick.com/"&gt;Yardstick&lt;/a&gt;. Thanks Yardstick!&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m excited for the talks, though there are some time slots where it&amp;#8217;s going to be tough to pick which talk to go to! Luckily, &lt;a href="http://www.confreaks.com/"&gt;Confreaks&lt;/a&gt; records everything so I can always watch it later! Thanks Confreaks!&lt;/p&gt;
&lt;h2&gt;See the pattern?&lt;/h2&gt;
&lt;p&gt;Two paragraphs, two thank yous.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;But I want more.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/large/fd/3dc000d51194d314cb733d92e7b3f9/thanks.jpg" class=" large" alt="" /&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;h2&gt;I want to thank you&lt;/h2&gt;
&lt;p&gt;I want to meet you at RubyConf and thank you for what you&amp;#8217;ve done in the community. However small or large that contribution is, as long as it&amp;#8217;s positive. If you&amp;#8217;re out trolling the python mailing lists, well that&amp;#8217;s not fun. &lt;a href="http://hugfriday.com/"&gt;Be positive!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you&amp;#8217;re &lt;a href="http://blog.steveklabnik.com/posts/2012-09-22-resque--let-s-do-this"&gt;Rescuing Resque&lt;/a&gt; I want to thank you. If you&amp;#8217;re &lt;a href="http://tenderlovemaking.com/2011/12/05/profiling-rails-startup-with-dtrace.html"&gt;adding DTrace probes to ruby&lt;/a&gt; I want to thank you. If you&amp;#8217;re putting out &lt;a href="http://railscasts.com/"&gt;screencasts on rails&lt;/a&gt; and &lt;a href="https://www.destroyallsoftware.com/"&gt;other topics&lt;/a&gt; I want to thank you.&lt;/p&gt;
&lt;h2&gt;Get the picture?&lt;/h2&gt;
&lt;p&gt;I want to talk to you for a few minutes, take a picture, record or write some notes in Evernote and pull everything together in a nice big blog post after the conference. You&amp;#8217;re doing awesome stuff, and I want to recognize that.&lt;/p&gt;
&lt;p&gt;I know everybody&amp;#8217;s busy, some of you are giving talks, but there still should be lots of time to accomplish this, so please find me if I&amp;#8217;m distracted or haven&amp;#8217;t found you yet. I&amp;#8217;ll be the guy with the beard and dreads. I highly doubt there are going to be other folks with dreads (though if there are, I want to meet you too).&lt;/p&gt;
&lt;p&gt;Are you excited for RubyConf? I am.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=uJaKSmQeUl4:3dQ14jDU9UQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=uJaKSmQeUl4:3dQ14jDU9UQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=uJaKSmQeUl4:3dQ14jDU9UQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=uJaKSmQeUl4:3dQ14jDU9UQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=uJaKSmQeUl4:3dQ14jDU9UQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=uJaKSmQeUl4:3dQ14jDU9UQ:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=uJaKSmQeUl4:3dQ14jDU9UQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=uJaKSmQeUl4:3dQ14jDU9UQ:8CPd0h1qtfE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=uJaKSmQeUl4:3dQ14jDU9UQ:8CPd0h1qtfE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerboseLogging/~4/uJaKSmQeUl4" height="1" width="1"/&gt;</description>
            <feedburner:origLink>http://verboselogging.com/2012/10/27/my-rubyconf-mission-thank-all-the-people</feedburner:origLink></item>
        
            <item>
                <title>One Week, One iPhone 5</title>
                <category>Editorial</category>
                <pubDate>01 Oct 12 10:00 MDT</pubDate>
                <link>http://feedproxy.google.com/~r/VerboseLogging/~3/EMGoKDZs7lA/one-week-one-iphone-5</link>
                <guid isPermaLink="false">http://verboselogging.com/2012/10/01/one-week-one-iphone-5</guid>
                <author>Daniel Huckstep</author>
                <description>&lt;p&gt;Last week, I, along with &lt;a href="http://www.businessinsider.com/iphone-5-sales-opening-weekend-2012-9"&gt;5 million others&lt;/a&gt;, got an iPhone 5. I preordered it as soon as I could, and the &lt;span class="caps"&gt;UPS&lt;/span&gt; man showed up at 9:30 in the morning on the Friday. I had to go to the Telus store to get a new &lt;span class="caps"&gt;SIM&lt;/span&gt; card since my &lt;a href="http://en.wikipedia.org/wiki/Htc_desire_hd"&gt;&lt;span class="caps"&gt;HTC&lt;/span&gt; Desire HD&lt;/a&gt; used the regular sized &lt;span class="caps"&gt;SIM&lt;/span&gt; and the iPhone 5 uses the nano &lt;span class="caps"&gt;SIM&lt;/span&gt;, 2 sizes smaller. Par for the course on Apple launch days, Telus&amp;#8217; system was down for most of the day, so I couldn&amp;#8217;t activate my &lt;span class="caps"&gt;SIM&lt;/span&gt;, and hence use the phone, until about 5pm. No worries, had work to do anyway.&lt;/p&gt;
&lt;h2&gt;So is it good?&lt;/h2&gt;
&lt;p&gt;I&amp;#8217;m coming at this not as somebody who&amp;#8217;s been using an iPhone 4 or 4S for the past while. I was on a 3GS until Thanksgiving&lt;sup class="footnote" id="fnr1"&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt; last year, at which time Telus had a sweet deal on the &lt;a href="http://en.wikipedia.org/wiki/Htc_desire_hd"&gt;&lt;span class="caps"&gt;HTC&lt;/span&gt; Desire HD&lt;/a&gt;. At the time it was still a good phone, but it might have been on the way out, because they must have been having a blowout sale or something. Anyway, we got this phone and a good rate plan. It was a nice upgrade from the 3GS, and I wanted to try the Android setup for something different.&lt;/p&gt;
&lt;p&gt;Well, after a year, I got fed up with this Android and &lt;span class="caps"&gt;HTC&lt;/span&gt; crap, so I got me an iPhone.&lt;/p&gt;
&lt;h2&gt;Choices, Choices&lt;/h2&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/4f/0b080e31e979e67184931b8157abe9/desirehd.jpg"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/small/28/33b6cb81e5d660de91fa44699f23ec/desirehd.jpg" class="right bbottom bleft" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;In retrospect, the &lt;span class="caps"&gt;HTC&lt;/span&gt; Desire HD isn&amp;#8217;t really a good example of a quality Android device. Most of friends here that use Android agree that, despite all the hardware choices in the Android ecosystem, the only real choice is to buy the Google device, and just run vanilla Android. So we&amp;#8217;re back to no choice.&lt;/p&gt;
&lt;p&gt;Speaking of vanilla Android, I had to flash mine to Cyanogenmod7 because an update to the Telus/&lt;span class="caps"&gt;HTC&lt;/span&gt; &lt;span class="caps"&gt;ROM&lt;/span&gt; started to crash regularly, when &lt;strong&gt;receiving phone calls&lt;/strong&gt;. You know, that thing phones are supposed to do.&lt;/p&gt;
&lt;p&gt;But it was good for a while though, probably just because it was new.&lt;/p&gt;
&lt;h2&gt;Music&lt;/h2&gt;
&lt;p&gt;I used my previous 3GS for music all the time. I tried putting music on the Desire HD, but I found no application to do syncing that worked with any reliability. Even once I got music on it, you&amp;#8217;re dealing with a standard filesystem, so you put it here, but this music player expects it here, and this one expects it there. I couldn&amp;#8217;t find a decent music player either; they were all just terrible. At this point I was already heavily invested in iTunes, and in the end I just never used the phone for music.&lt;/p&gt;
&lt;p&gt;The iPhone 5 of course plays nice with iTunes, and I use iTunes Match so all my music is basically just on the phone. Apple kind of broke iTunes Match in iOS6 since you can&amp;#8217;t delete music, it just gets managed for you. Ignoring that annoyance, I use my phone for music again. The new EarPods are also nice. They are 1 of 2 earbuds (the other being the Bose ones) that actually fit in and stay in my ear. They aren&amp;#8217;t as good as the Bose ones, but they are better than anything else. You might have different mileage with your ears.&lt;/p&gt;
&lt;h2&gt;Photo &amp;amp; Video&lt;/h2&gt;
&lt;p&gt;I tried a number of gallery programs on the Android, but I also had to get a little program to &amp;#8220;reindex&amp;#8221; the photos, because they would just disappear out of the gallery.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class="caps"&gt;WTF&lt;/span&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This was happening on the &lt;span class="caps"&gt;HTC&lt;/span&gt; &lt;span class="caps"&gt;ROM&lt;/span&gt; and seemed to go away once I had flashed CM7.&lt;/p&gt;
&lt;p&gt;The camera itself was decent: 8MP stills, 720p video. It took good pictures, though it felt slow. Video was really good.&lt;/p&gt;
&lt;p&gt;The iPhone 5 takes great pictures too, and it&amp;#8217;s deadly fast to do so. Video is great too. I&amp;#8217;m happy with it, and that&amp;#8217;s what matters.&lt;/p&gt;
&lt;h2&gt;The Screen&lt;/h2&gt;
&lt;p&gt;The screen size was a step down from the Desire HD, which has a 4.3&amp;quot; screen, but the iPhone 5 screen is 16:9, where the Desire HD screen is&amp;#8230;something else. It&amp;#8217;s wider and a tad shorter. After using the Desire HD for a while, I started to find the size too big (again, coming from a 3GS).&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m quite happy with the 4&amp;quot; screen on the iPhone 5. It looks good, and after using various apps that make use of the full height, it seems about right.&lt;/p&gt;
&lt;h2&gt;The Size&lt;/h2&gt;
&lt;p&gt;Damn it&amp;#8217;s thin and light.&lt;/p&gt;
&lt;h2&gt;The Speed&lt;/h2&gt;
&lt;p&gt;Damn it&amp;#8217;s fast.&lt;/p&gt;
&lt;h2&gt;What do I miss from Android?&lt;/h2&gt;
&lt;p&gt;The whole master account section is nice. For example, I could sign into my Google account and then Gmail, Calendar, Contacts works (which is about the same on the iPhone), but then the Google Reader application also just works. Other applications that use the Google services could just work as well.&lt;/p&gt;
&lt;p&gt;iOS has some of this now with Twitter and Facebook integration, where applications can use those accounts without having to sign in again (Instagram and the official Twitter application for example).&lt;/p&gt;
&lt;p&gt;The sharing stuff is nice too. Applications on Android can register something somewhere that they support sharing things like photos. Some support sharing multiple things (Google+) and some only a single item (Twitter). You can open the sharing dialog for something, and it will let you share it with any of the registered apps. This is nice for apps like Dropbox, where you can just share something into a Dropbox folder with the application not needing to know anything about Dropbox. On iOS, the app would need Dropbox sharing built in.&lt;/p&gt;
&lt;p&gt;Dropbox is getting big enough that we might see it integrated into iOS one day, but Apple would probably have more interest in pushing Photostream and other services they control.&lt;/p&gt;
&lt;p&gt;The global Search button was nice. Since the Desire HD had a hardware search button, I could hit that in pretty much any application and I&amp;#8217;d get a search dialog. In iOS apps, you may have to hunt for it.&lt;/p&gt;
&lt;h2&gt;What am I glad I don&amp;#8217;t have to deal with anymore?&lt;/h2&gt;
&lt;p&gt;The hardware Back button was useless. It rarely actually went back to somewhere I wanted it.&lt;/p&gt;
&lt;p&gt;The general UI for the phone was fairly annoying and terrible. It doesn&amp;#8217;t help that I was originally on the &lt;span class="caps"&gt;HTC&lt;/span&gt; Sense setup, then the &lt;span class="caps"&gt;ADW&lt;/span&gt; launcher setup (I think&amp;#8230;). I tried another one for a bit, but it was just as bad. So many different UIs, and all were mediocre at best.&lt;/p&gt;
&lt;h2&gt;Problems&lt;/h2&gt;
&lt;p&gt;The wifi connection strength sucks, and is slow. Apple apparently knows about it, and it&amp;#8217;s apparently a software thing, so we should see a fix soon. Okay cool, whatever. Good thing the &lt;span class="caps"&gt;LTE&lt;/span&gt; is bloody fast.&lt;/p&gt;
&lt;p&gt;I occasionally see a little &amp;#8220;broken &lt;span class="caps"&gt;LCD&lt;/span&gt;&amp;#8221; technicolor line through the keyboard when inputting my password for the iTunes or App stores. Other people seem to have this problem, and it only occurs when inputting my password in those two dialogs, so I&amp;#8217;m not concerned that it&amp;#8217;s a hardware problem. The screen looks great the rest of the time.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I&amp;#8217;ll stop rambling. This turned out to be more of a &amp;#8220;my old Android vs my new iPhone&amp;#8221; instead of a &amp;#8220;one week later&amp;#8221; post, but whatever.&lt;/p&gt;
&lt;p&gt;Overall, it&amp;#8217;s a big step up for me. I was already invested in the Apple ecosystem when I decided to try Android, and it just made more sense to go back. If you&amp;#8217;re thinking about going back to Apple from your Android (or other) device, don&amp;#8217;t hesitate. If you&amp;#8217;re upgrading from a 4S&amp;#8230;I don&amp;#8217;t know. I never owned one.&lt;/p&gt;
&lt;p&gt;In any regard, it&amp;#8217;s not perfect, but it&amp;#8217;s a fantastic phone.&lt;/p&gt;
&lt;p class="footnote" id="fn1"&gt;&lt;a href="#fnr1"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; Canadian Thanksgiving&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=EMGoKDZs7lA:5AVPtP2BuEY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=EMGoKDZs7lA:5AVPtP2BuEY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=EMGoKDZs7lA:5AVPtP2BuEY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=EMGoKDZs7lA:5AVPtP2BuEY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=EMGoKDZs7lA:5AVPtP2BuEY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=EMGoKDZs7lA:5AVPtP2BuEY:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=EMGoKDZs7lA:5AVPtP2BuEY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=EMGoKDZs7lA:5AVPtP2BuEY:8CPd0h1qtfE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=EMGoKDZs7lA:5AVPtP2BuEY:8CPd0h1qtfE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerboseLogging/~4/EMGoKDZs7lA" height="1" width="1"/&gt;</description>
            <feedburner:origLink>http://verboselogging.com/2012/10/01/one-week-one-iphone-5</feedburner:origLink></item>
        
            <item>
                <title>On Programming Journals</title>
                <category>Editorial</category>
                <pubDate>03 Sep 12 10:00 MDT</pubDate>
                <link>http://feedproxy.google.com/~r/VerboseLogging/~3/cdQddpNYcIo/on-programming-journals</link>
                <guid isPermaLink="false">http://verboselogging.com/2012/09/03/on-programming-journals</guid>
                <author>Daniel Huckstep</author>
                <description>&lt;p&gt;You might have seen &lt;a href="https://gist.github.com/3444793"&gt;this gist&lt;/a&gt; make the rounds about keeping a programming journal.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Writing things down is important.&lt;/strong&gt; Write on paper, in a bug tracker, on your hand, whatever. Just write it down.&lt;/p&gt;
&lt;p&gt;Writing things down is important for two reasons:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;strong&gt;It helps you remember things.&lt;/strong&gt; Your brain has a finite capacity, and if something is written down, especially in a &amp;#8220;public&amp;#8221; place, it probably won&amp;#8217;t get forgotten.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;It keeps you sane.&lt;/strong&gt; If you just try to remember everything, I&amp;#8217;m pretty sure your head will actually explode.&lt;sup class="footnote" id="fnr1"&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Learn From the Pros&lt;/h2&gt;
&lt;p&gt;If you&amp;#8217;ve read &lt;a href="http://www.amazon.com/The-Mythical-Man-Month-Engineering-ebook/dp/B000OZ0N6M"&gt;The Mythical Man Month&lt;/a&gt;, and you should if you haven&amp;#8217;t, you&amp;#8217;ll see Brooks discuss the idea of the technical journal.&lt;sup class="footnote" id="fnr2"&gt;&lt;a href="#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s similar, except more for the whole project instead of a single developer.&lt;/p&gt;
&lt;h2&gt;My Preference&lt;/h2&gt;
&lt;p&gt;I prefer things written down in the open. I don&amp;#8217;t keep a personal programming journal, I just add comments to tickets. At work, action items and ideas from meetings go into the relevant ticket.&lt;/p&gt;
&lt;p&gt;Thinking out loud about a ticket? &lt;strong&gt;You better believe that&amp;#8217;s a comment on the ticket.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This way, my personal musings about a particular problems are there for everybody to see. It gets it out of my head, and benefits the rest of the people on the project.&lt;/p&gt;
&lt;p&gt;For other things outside of work, I use a combination of &lt;a href="http://basecamp.com/"&gt;Basecamp&lt;/a&gt;, &lt;a href="https://trello.com/"&gt;Trello&lt;/a&gt;, and &lt;a href="http://sprint.ly/"&gt;Sprint.ly&lt;/a&gt; to keep track of ideas I have, bugs in my code I find, checklists I need to accomplish, books I&amp;#8217;m reading or want to read, and other relevant bits of information.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It&amp;#8217;s all written down.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;New Hotness&lt;/h2&gt;
&lt;p&gt;&lt;figure&gt;&lt;a href="http://cdn.verboselogging.com/transloadit/original/ec/83be66ddef63679ef778ad25a2a4c7/moleskine.png"&gt;&lt;img src="http://cdn.verboselogging.com/transloadit/large/42/ffcec264b6e8eea81b44084190c2ac/moleskine.png" class="round large" alt="" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.moleskine.com/"&gt;Moleskine&lt;/a&gt; makes a variety of goodies for taking notes and keeping journals. Their new offering integrates with &lt;a href="http://evernote.com/"&gt;Evernote&lt;/a&gt; so you can take notes with a pen on paper, but then scan it directly into Evernote for a digital version. Evernote can then do handwriting recognition and &lt;span class="caps"&gt;OCR&lt;/span&gt; and all that fun stuff, giving you a nice &lt;strong&gt;searchable&lt;/strong&gt; document stored in their cloud available on all your devices. How cool is that?&lt;/p&gt;
&lt;p&gt;Doesn&amp;#8217;t it make you want to write more stuff down?&lt;/p&gt;
&lt;p&gt;You &lt;strong&gt;should&lt;/strong&gt; write it down. You&amp;#8217;ll feel better about it.&lt;/p&gt;
&lt;p class="footnote" id="fn1"&gt;&lt;a href="#fnr1"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; Head will most likely not actually explode, but then again, I&amp;#8217;m not a medical professional.&lt;/p&gt;
&lt;p class="footnote" id="fn2"&gt;&lt;a href="#fnr2"&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; I don&amp;#8217;t remember the exact term he used, but the technical lead on the project would go around and document work done by everybody in a journal. When I worked at BioWare, the technical lead on the project I was on did this.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=cdQddpNYcIo:h9mhxacMMXI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=cdQddpNYcIo:h9mhxacMMXI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=cdQddpNYcIo:h9mhxacMMXI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=cdQddpNYcIo:h9mhxacMMXI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=cdQddpNYcIo:h9mhxacMMXI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=cdQddpNYcIo:h9mhxacMMXI:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=cdQddpNYcIo:h9mhxacMMXI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/VerboseLogging?a=cdQddpNYcIo:h9mhxacMMXI:8CPd0h1qtfE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/VerboseLogging?i=cdQddpNYcIo:h9mhxacMMXI:8CPd0h1qtfE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VerboseLogging/~4/cdQddpNYcIo" height="1" width="1"/&gt;</description>
            <feedburner:origLink>http://verboselogging.com/2012/09/03/on-programming-journals</feedburner:origLink></item>
        
    </channel>
</rss>
