<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description></description><title>Chris Moyer's Ramblings</title><generator>Tumblr (3.0; @cdmoyer)</generator><link>http://blog.inarow.net/</link><item><title>The Perfect Storm: A True Story of Men Against the Sea - Book Review</title><description>&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=iar-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as4&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;ref=ss_til&amp;amp;asins=B002EF2ALQ" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/B002EF2ALQ/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=iar-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399349&amp;amp;creativeASIN=B002EF2ALQ"&gt;The Perfect Storm: A True Story of Men Against the Sea&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B002EF2ALQ&amp;amp;camp=217145&amp;amp;creative=399349" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;"/&gt; by Sebastian Junger was an enjoyable read.  I understand there&amp;#8217;s some controversy about the level of journalism and the accuracy, but if you accept it as a narrative-based interpretation of the events, it&amp;#8217;s a fun read.  If you&amp;#8217;re like me, this book will have you spending hours (during and after reading it) on wikipedia reading about nautical information, fishing practices, weather and meteorology.&lt;/p&gt;

&lt;p&gt;There&amp;#8217;s enough meteorological, nautical and fishing-industry information to make it an educational read, but enough character and narrative to keep you turning the pages.  You&amp;#8217;ll definitely start to feel something for the crew of the Andrea Gail, and the tension rises with the storm, the rescue attempts and the aftermath.  Even if you&amp;#8217;ve seen the movie, this book is still worth reading, definitely more information and breadth.&lt;/p&gt;

&lt;p&gt;This book started me on a non-fiction-books-about-fishing kick, and I picked up a couple by Linda Greenlaw that were quite enjoyable, and I&amp;#8217;d also recommend.&lt;/p&gt;</description><link>http://blog.inarow.net/post/14657290840</link><guid>http://blog.inarow.net/post/14657290840</guid><pubDate>Fri, 23 Dec 2011 00:40:15 -0500</pubDate></item><item><title>Feeds I Reads</title><description>&lt;p&gt;I was in google reader this morning, and thought it might be fun to go through my massive list of feeds and highlight my favorites.  I&amp;#8217;ve got 178 feeds total, although a large chunk are inactive or dormant (like mine is most of the time), so I&amp;#8217;ll probably break this into series of posts.  Based on my blogging record, this will take three years to complete. ;)&lt;/p&gt;

&lt;p&gt;Presented in no particular order:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://ejohn.org/category/blog/"&gt;John Resig&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Creator of jQuery and consumate javascript hacker.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.tbray.org/ongoing/"&gt;Tim Bray&amp;#8217;s Ongoing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Former Sun employee, now Google Android advocate, Tim has some good content.  His older posts about the WideFinder project were really neat&amp;#8230; trying to find which environments made it easiest to take advantage of multiple cores for simple programming tasks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.philvischer.com/"&gt;Phil Vischer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Creator of Veggie Tales, his old series of posts about the rise and fall of his company, Big Idea, is a great read.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://scripting.com/"&gt;Scripting.com - Dave Winer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dave is smart, opinionated, and always interesting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://alblue.bandlem.com/"&gt;AlBlue’s Blog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thoughts on Java, XML, Mac and random other topics from time to time.
Currently doing a neat series on git.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://aws.typepad.com/"&gt;Amazon Web Service&amp;#8217;s Blog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Great source of news about all of amazon&amp;#8217;s aws services.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://bitworking.org/news/"&gt;Joe Gregorio&amp;#8217;s BitWorking&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Joe&amp;#8217;s a Googler how posts great tidbits.  Funny graphs, info about new google apis, general tech commentary and development advice.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.kk.org/cooltools/"&gt;Cool Tools&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Just what the title says.  A blog about cool tools.   It&amp;#8217;s why I have a &lt;a href="http://www.kk.org/cooltools/archives/002875.php"&gt;Skeletool&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://eigenclass.org/R2/"&gt;Eigenclass&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This guy is way too smart for me.  I have no idea how it ended up in my list, but I enjoy his data-heavy discussion about optimizing algorithms.  I think maybe it was &lt;a href="http://eigenclass.org/R2/writings/fast-extensible-simplified-markdown-in-ocaml"&gt;this post about benchmarking markdown processors&lt;/a&gt; that first led me there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://blog.stevenlevithan.com/"&gt;Flagrant Badassery&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Steven Levithan co-wrote an O&amp;#8217;Reilly book on regular expressions, and his blog archives are filled with great articles about regex and javascript.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://freelanceswitch.com/"&gt;FreelanceSwitch&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A great blog with varied topics of interest to those running their own freelance business.  This site and their forums were of great help to me when I started out on my own.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://headius.blogspot.com/"&gt;Headius&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A core jruby developer, Charles makes some great posts about the ruby, the jvm, and other topics.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.thinkgeek.com/thinkgeek.rss"&gt;ThinkGeek - What&amp;#8217;s new&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Who doesn&amp;#8217;t want to know about all the cool new geekery to buy?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://kol.coldfront.net/devposts/devposts.xml"&gt;KoL Developer&amp;#8217;s Feed&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This one is a bit narcissistic, a feed of forum posts by the developers of KoL.  I like to see if I accidentally said something really stupid yesterday.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.eldergame.com/"&gt;Elder Game&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Eric regularly has great posts about games, game design and community management.  &lt;a href="http://www.eldergame.com/2008/06/taming-the-forum-tiger/"&gt;This post, Taming the Forum Tiger&lt;/a&gt;, is a great example.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://xkcd.com/"&gt;XKCD&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Great comic, great feed (full comic is in the feed.)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;</description><link>http://blog.inarow.net/post/5449402724</link><guid>http://blog.inarow.net/post/5449402724</guid><pubDate>Fri, 13 May 2011 09:28:00 -0400</pubDate></item><item><title>Fool's War - Book Review</title><description>&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=iar-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as4&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;ref=ss_til&amp;amp;asins=B0028MVGT2" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/B0028MVGT2/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=iar-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399349&amp;amp;creativeASIN=B0028MVGT2"&gt;Fool&amp;#8217;s War&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B0028MVGT2&amp;amp;camp=217145&amp;amp;creative=399349" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;"/&gt; by Sarah Zettel started off very strong for me, but I was left a bit disappointed.  Initially, I was captivated by the futuristic setting, and the initial main character, Katmer Al Shei.  The female muslim engineer, captain and shareholder in the tradeship Pasadena feels very solid, and provides for a unique perspective in a sci-fi novel.   When Dobbs, the real main character, a female Jester is brought on board to up the rating of the vessel&amp;#8217;s rating, things get interesting as things quickly start to go wrong aboard the vessel  (Entertainment is highly valued, to stave of the boredom of interstellar travel.)&lt;/p&gt;

&lt;p&gt;Unfortunately, as the realities of the situation are revealed, we quickly leave a hard-feeling sci-fi world and enter into a fluffy emotional-cyber-space world.  This is where things went a bit off for me.  Had this later portion of the novel kept more of a hard science feel, I&amp;#8217;d definitely recommend this book, but as it is, I&amp;#8217;d primarily recommend it for the unique point of view&amp;#8230; certainly worthwhile, but I feel it was weakened by the softening of the plot.&lt;/p&gt;</description><link>http://blog.inarow.net/post/5378152572</link><guid>http://blog.inarow.net/post/5378152572</guid><pubDate>Tue, 10 May 2011 21:28:28 -0400</pubDate></item><item><title>In Conquest Born - Book Review</title><description>&lt;iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;nou=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=iar-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as4&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;ref=ss_til&amp;amp;asins=0756400430" style="width:120px;height:240px; padding: 2em; float: right;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0756400430/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=iar-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399349&amp;amp;creativeASIN=0756400430"&gt;In Conquest Born&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0756400430&amp;amp;camp=217145&amp;amp;creative=399349" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;"/&gt;
 by C. S. Friedman is what I&amp;#8217;d call a hardcore space opera.  It&amp;#8217;s not a quick read.  It&amp;#8217;s not a simple read.  Complex names, concepts and characters fly fast and furious.  It also feels like a plot on two levels.&lt;/p&gt;

&lt;p&gt;First is the background, which is well enough developed to be a major part of the story.  This is the Azean-Braxian war that almost seems to have alway been in progress, and has no end in sight.  Azea and Braxi are both spacefaring civilizations of basically human form.  They have drastically different views on how to handle conquest, genetics, mating and leadership.  War is almost a defining characteristic for both civilizations, but often on the fringes of society&amp;#8230; the border zone is far enough in the galaxy that it rarely touches the lives of most.&lt;/p&gt;

&lt;p&gt;The other plot is of two people&amp;#8230; not surprisingly an Azean and a Braxian.  Anzha, born a genetic in Azea struggles to find her place.  Zatar, born to the ruling class of Braxia, quickly makes a name for himself, striking a deadly blow to the Azean war machine and getting elevated into the leadership council.&lt;/p&gt;

&lt;p&gt;As a far-reaching space opera, this is not your typical sci-fi novel, detailing a single journey or discovery.  The scope encompasses nearly a century of current events, and frequently segues off into historical background.  The unexpected (for me) ending still has me pondering, two weeks later&amp;#8230; always something I love in a book.  I was fascinated with the explorations of eugenics, phsycic ability, government and space combat.&lt;/p&gt;

&lt;p&gt;If you&amp;#8217;re ready for a sci-fi adventure that&amp;#8217;s not your average space romp, give this one a try.&lt;/p&gt;</description><link>http://blog.inarow.net/post/5193282652</link><guid>http://blog.inarow.net/post/5193282652</guid><pubDate>Thu, 28 Apr 2011 13:42:00 -0400</pubDate><category>books</category></item><item><title>Fun Presentation on 10 Golden Principles for Successful Web Apps</title><description>&lt;p&gt;Fun presentation that &lt;a href="http://www.avc.com/a_vc/2010/02/the-ten-golden-principals-for-successful-web-apps.html?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+AVc+%28A+VC%29"&gt;Fred Wilson&lt;/a&gt; is going to be giving at &lt;a href="http://events.carsonified.com/fowa/2010/miami/"&gt;The Future of Web Apps Conference&lt;/a&gt;.&lt;/p&gt;

&lt;div style="width:425px" id="__ss_3238116"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/fredwilson/the-10-golden-principles-for-successful-web-apps-3238116" title="The 10 Golden Principles for Successful Web Apps"&gt;The 10 Golden Principles for Successful Web Apps&lt;/a&gt;&lt;/strong&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tengoldenrules-100221091210-phpapp01&amp;amp;stripped_title=the-10-golden-principles-for-successful-web-apps-3238116"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tengoldenrules-100221091210-phpapp01&amp;amp;stripped_title=the-10-golden-principles-for-successful-web-apps-3238116" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/fredwilson"&gt;fredwilson&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;</description><link>http://blog.inarow.net/post/409243233</link><guid>http://blog.inarow.net/post/409243233</guid><pubDate>Wed, 24 Feb 2010 11:09:22 -0500</pubDate></item><item><title>GitHub has an API -- Adding your Repos to Your Site</title><description>&lt;p&gt;&lt;em&gt;(This post is pretty old, found it in my tumblr drafts folder, but the code still works.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So, I was showing &lt;a href="http://friendfeed.com/mfc5"&gt;Mike Canz&lt;/a&gt; my &lt;a href="http://inarow.new"&gt;shiny new homepage&lt;/a&gt;, and what was his reaction?  &amp;#8220;How come the list of github projects doesn&amp;#8217;t automatically update like twitter and the blog feed?&amp;#8221;&lt;/p&gt;

&lt;p&gt;&amp;#8220;I don&amp;#8217;t know,&amp;#8221; was my reply.&lt;/p&gt;

&lt;p&gt;A bit of reading about &lt;a href="http://develop.github.com/"&gt;the github API&lt;/a&gt; and a bit of hacking, and Voila!&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;script type="text/javascript"&amp;gt;
var nongithub_projects = [
    { "name": "jThrottle",
      "homepage": "http://inarow.net/static/jthrottle/",
      "description": "Throttled jQuery.each() to prevent locking the browser on huge loops",
      "fork": false }
];

var projects_to_skip = {"cdm-s-kol-greasemonkeys": true };

function github(user) {
    var repos = user.repositories
        .concat(nongithub_projects)
        .sort(function (a, b) { return a.name.toLowerCase() &amp;gt; b.name.toLowerCase(); });
        $('#projects .loading').replaceWith('&amp;amp;lt;ul/&amp;gt;'); 
        $ul = $('#projects ul:first');
        for (var i = 0; i &amp;lt; repos.length; i++) {
            var rep = repos[i];
             if (rep['fork'] == 1 || projects_to_skip[rep.name]) continue;
             var url = rep['homepage'] || rep['url'];
             $ul.append('&amp;amp;lt;li&amp;gt;&amp;amp;lt;a href="'+url+'"&amp;gt;'+rep['name']+'&amp;amp;lt;/a&amp;gt; - '+rep['description']+'&amp;lt;/li&amp;gt;');
        }
 }
 &amp;lt;/script&amp;gt;
  &lt;script src="http://github.com/api/v2/json/repos/show/cdmoyer?callback=pageapp.github" type="text/javascript"&gt;&lt;/script&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I&amp;#8217;m not going to claim that this code is beautiful, but it&amp;#8217;s a fun snippet for a few minutes work.&lt;/p&gt;</description><link>http://blog.inarow.net/post/397188032</link><guid>http://blog.inarow.net/post/397188032</guid><pubDate>Thu, 18 Feb 2010 16:40:56 -0500</pubDate></item><item><title>Postel's Law -- The Robustness Principle</title><description>&lt;a href="http://en.wikipedia.org/wiki/Robustness_principle"&gt;Postel's Law -- The Robustness Principle&lt;/a&gt;: &lt;blockquote&gt;
  &lt;p&gt;Be liberal in what you accept, and conservative in what you send&lt;/p&gt;
  
  &lt;p&gt;Software should be written to deal with every conceivable error, no matter how unlikely; sooner or later a packet will come in with that particular combination of errors and attributes, and unless the software is prepared, chaos can ensue. In general, it is best to assume that the network is filled with malevolent entities that will send in packets designed to have the worst possible effect. This assumption will lead to suitable protective design, although the most serious problems in the Internet have been caused by unenvisaged mechanisms triggered by low-probability events; mere human malice would never have taken so devious a course!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not sure why I’ve never seen this before.  I guess I never had a call to read the RFC relating to internet host communication layers.&lt;/p&gt;

&lt;p&gt;From &lt;a href="http://tools.ietf.org/html/rfc1122#page-12"&gt;RFC 1122 section 1.2.2&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.inarow.net/post/233564220</link><guid>http://blog.inarow.net/post/233564220</guid><pubDate>Wed, 04 Nov 2009 23:25:57 -0500</pubDate></item><item><title>RubyKnight Gem Released (v0.2.0)</title><description>&lt;p&gt;Well that was fun.  I made my first ruby gem, learned Jewelcutter and published my gem to gemcutter.&lt;/p&gt;

&lt;p&gt;What does this mean?  You can &lt;code&gt;gem install rubyknight&lt;/code&gt; and then play chess or write some code using a chess board model and engine.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;pre&gt;&lt;code&gt;&amp;gt; sudo gem install rubyknight
Successfully installed rubyknight-0.2.0
1 gem installed
Installing ri documentation for rubyknight-0.2.0...
Installing RDoc documentation for rubyknight-0.2.0...

&amp;gt; rubyknight

Enter a move such as e2e4, or a command.
Commands are prefixed with !
  !quit - quit
  !undo - revert a move
  !load &amp;lt;file&amp;gt; - load game state from a file
  !dump &amp;lt;file&amp;gt; - dump game state to a file
  !play - tell the computer to start playing the current color
  !reset - start a new game

rnbqkbnr
pppppppp
........
........
........
........
PPPPPPPP
RNBQKBNR

Score: 0
Enter move [White]&amp;gt; e2e4
rnbqkbnr
pppppppp
........
........
....P...
........
PPPP.PPP
RNBQKBNR

Score: -2
Enter move [Black]&amp;gt; !play
rnbqkbnr
.ppppppp
p.......
........
....P...
........
PPPP.PPP
RNBQKBNR

Score: -2
Enter move [White]&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;OR&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;require 'rubygems'
require 'rubyknight'
board = RubyKnight::Board.new

puts board.to_s
print "Enter move: "
$stdin.each do |move|
    move.strip!
    begin
        board.cnotation_move move
    rescue RubyKnight::IllegalMoveException
        print "Enter a real move! #{$!.to_s}\n"
    end 
    puts board.to_s
    print "Enter move: "
end
&lt;/code&gt;&lt;/pre&gt;</description><link>http://blog.inarow.net/post/231513919</link><guid>http://blog.inarow.net/post/231513919</guid><pubDate>Mon, 02 Nov 2009 23:51:00 -0500</pubDate></item><item><title>One Truth About Technology Architecture: Loose Coupling</title><description>&lt;a href="http://continuations.com/post/227973186/one-truth-about-technology-architecture-loose-coupling"&gt;One Truth About Technology Architecture: Loose Coupling&lt;/a&gt;: &lt;blockquote&gt;
  &lt;p&gt;I believe loose coupling is so critical that it should be a board level issue for web companies.  Whenever I now hear something like, “we can’t implement x until we have rewritten y” or “x is slow because y is overloaded” I start to dig in, because it suggests tight coupling is the culprit.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Great article by Albert Wenger of &lt;a href="http://www.unionsquareventures.com/"&gt;Union Square Ventures&lt;/a&gt;.  [via &lt;a href="http://rafer.tumblr.com/"&gt;Scott Rafer’s Blog&lt;/a&gt;].&lt;/p&gt;</description><link>http://blog.inarow.net/post/229127492</link><guid>http://blog.inarow.net/post/229127492</guid><pubDate>Sat, 31 Oct 2009 15:57:17 -0400</pubDate></item><item><title>Put Tumblr on Your Site via Javascript</title><description>&lt;p&gt;Tumblr has an easily accessible API which outputs XML, JSON and JSONP.  A bit of searching didn&amp;#8217;t drum up a cut-and-paste solution, but I was able to roll my own in a few minutes.  I&amp;#8217;m documenting it here, so perhaps Google will lead the next person who needs this to my solution.  Just post the appropriate parts of this script into various parts of your site, and it should just work.  See it in action on &lt;a href="http://inarow.net/"&gt;my site&lt;/a&gt;.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;script src="http://gist.github.com/222366.js"&gt;&lt;/script&gt;</description><link>http://blog.inarow.net/post/228072167</link><guid>http://blog.inarow.net/post/228072167</guid><pubDate>Fri, 30 Oct 2009 13:10:00 -0400</pubDate><category>javascript</category><category>tumblr</category><category>jquery</category></item><item><title>Ramblings Moved to Tumblr</title><description>&lt;p&gt;Not exactly sure why.   I decided to make the home page of &lt;a href="http://inarow.net/"&gt;inarow.net&lt;/a&gt; something else (which isn&amp;#8217;t done yet.)  So, I started shopping around for blogging options.  I see too much of wordpress on the clock, so I wrote that off.  I ended up on tumblr because I liked their API, flexibility and capabilities.&lt;/p&gt;

&lt;p&gt;Speaking of API, it was about an hour to import all my posts from bloxsom.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;ol&gt;&lt;li&gt;Install ruby-tumblr gem&lt;/li&gt;
&lt;li&gt;Install RedCloth gem&lt;/li&gt;
&lt;li&gt;Whip up a script
&lt;script src="http://gist.github.com/222114.js"&gt;&lt;/script&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run the script&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;find blog/entries/ -type f -name &amp;#8216;*.txt&amp;#8217; | grep -v &amp;#8216;draft/&amp;#8217; | ruby tumbleit.rb&lt;/p&gt;
&lt;/blockquote&gt;&lt;/li&gt;
&lt;/ol&gt;</description><link>http://blog.inarow.net/post/227658739</link><guid>http://blog.inarow.net/post/227658739</guid><pubDate>Fri, 30 Oct 2009 01:15:00 -0400</pubDate><category>development</category><category>ruby</category></item><item><title>Look at me, ma, I made a screencast.
What’s it About?
CouchDB is...</title><description>&lt;iframe width="504" height="424" frameborder="0" scrolling="no" src="http://www.screencast-o-matic.com/embed?sc=cQVOFPnMb&amp;w=500&amp;np=0&amp;v=2"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Look at me, ma, I made a screencast.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;What’s it About?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="%E2%80%9Dhttp://couchdb.apache.org/%E2%80%9D"&gt;CouchDB&lt;/a&gt; is a “distributed, fault-tolerant and schema-free document-oriented database.” It features a RESTful API, and a pretty slick way to host apps directly on top of it, without any middleware. A great overview of this concept, CouchDB hosted replicatable apps, can be found on JChris’s blog: &lt;a href="%E2%80%9Dhttp://jchris.mfdz.com/code/2008/11/my_couch_or_yours__shareable_ap%E2%80%9D"&gt;My Couch or Yours? Shareable Apps Are The Future&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The screencast walks you through the process of installing couchdb and couchapp (from git), running them, and creating your first app. It then steps through some very rudimentary changes to the default app. I hope it’s helpful to someone besides me. ;)&lt;/p&gt;</description><link>http://blog.inarow.net/post/227549533</link><guid>http://blog.inarow.net/post/227549533</guid><pubDate>Mon, 26 Jan 2009 22:42:00 -0500</pubDate><category>development</category><category>couchdb</category></item><item><title>AutoBlogger Update :: 0.9.4
</title><description>&lt;p&gt;Version &lt;strong&gt;0.9.4&lt;/strong&gt; of AutoBlogger is now available.&lt;/p&gt;
&lt;p&gt;This is another quick bugfix release, but includes a patch sent to me by Chris Lewis, who patched it to support sending “&amp;gt;date” attributes from the iPhone mail client.  Apparently the iPhone insists on adding whitespace before any line starting with “&amp;gt;”, assuming that it’s an indented reply.&lt;/p&gt;
&lt;p&gt;In other news, I’ve moved the main repository to &lt;a href="http://github.com/cdmoyer/autoblogger/tree/master"&gt;github&lt;/a&gt;, as I’m 100% addicted to git.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AutoBlogger Site:&lt;/strong&gt;  &lt;a href="http://www.inarow.net/entries/projects/one_evening/autoblogger/"&gt;&lt;a href="http://www.inarow.net/entries/projects/one_evening/autoblogger/"&gt;http://www.inarow.net/entries/projects/one_evening/autoblogger/&lt;/a&gt;&lt;/a&gt;&lt;br/&gt;&lt;strong&gt;Grab it:&lt;/strong&gt;  &lt;a href="http://www.inarow.net/static/downloads/autoblogger.tar.gz"&gt;Download Tarball&lt;/a&gt; or Git Clone (git clone git://github.com/cdmoyer/autoblogger.git)&lt;/p&gt;</description><link>http://blog.inarow.net/post/227529029</link><guid>http://blog.inarow.net/post/227529029</guid><pubDate>Fri, 23 Jan 2009 10:51:00 -0500</pubDate><category>autoblogger</category><category>projects</category><category>one evening</category><category>git</category></item><item><title>Google's AJAX APIs Playground
</title><description>&lt;div style="float:right; border: 1px solid black; margin-left: 1em;"&gt;
&lt;p&gt;&lt;img src="http://inarow.net/static/images/entries/googajaxapis.jpg" title="AJAX APIs Playground" alt="AJAX APIs Playground"/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://code.google.com/apis/ajax/playground/"&gt;Google’s &lt;span class="caps"&gt;AJAX&lt;/span&gt; APIs Playground&lt;/a&gt; is an awesome new tool recently released by Google.  It allows you to browse through their various APIs and view examples.  This is a great way to see what the Google APIs have to offer and get a quick example of each.&lt;/p&gt;
&lt;p&gt;Even better, each example can be executed, modified and re-executed right on the page.  The final source your create can be copy and pasted, and each &lt;span class="caps"&gt;API&lt;/span&gt; has a link to the documentation.&lt;/p&gt;
&lt;p&gt;Definitely head on over and check it out.  I follow various Google developer blogs, but I was quite suprised to see the breadth of their &lt;span class="caps"&gt;API&lt;/span&gt; offering.  Graphs, maps, search, blogging and more are all included, with great examples and an excellent interface.&lt;/p&gt;
&lt;p&gt;As an example, check out this incredily simple way to add a scrolling &lt;span class="caps"&gt;RSS&lt;/span&gt; ticker to a page.  This will grab the provided feed, and rotate the articles inside the #content div on the page.  You’ll want to check out &lt;a href="http://code.google.com/apis/ajax/playground/#dynamic_feed_control_-_vertical"&gt;the full example&lt;/a&gt; to see the needed javascript files and provided stylesheet.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;google.load('feeds', '1');&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;function OnLoad() {&lt;br/&gt;
    var feeds = [{&lt;br/&gt;
        title: ‘In A Row’,&lt;br/&gt;
        url: ‘http://inarow.net/index.rss’&lt;br/&gt;
    }];&lt;/p&gt;
var options = {horizontal: true};

new GFdynamicFeedControl(feeds, “content”, options);
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;google.setOnLoadCallback(OnLoad);&lt;/p&gt;
&lt;p&gt;&lt;br style="clear: left"/&gt;&lt;/p&gt;</description><link>http://blog.inarow.net/post/227534946</link><guid>http://blog.inarow.net/post/227534946</guid><pubDate>Thu, 22 Jan 2009 23:49:00 -0500</pubDate><category>javascript</category><category>development</category></item><item><title>Blog Action Day 2008 - Poverty
</title><description>&lt;p&gt;Many moons ago when I was blogging regularly, I signed up to participate in Blog Action Day.  It’s an even where blogger all agree to focus on a single issue for one day, to create awarness and drive conversation.  This year’s topic is Poverty.&lt;/p&gt;
&lt;p&gt;Unfortunately, I don’t have anything too profound to say, so I thought I’d point to a series of articles by one of my favorite bloggers, &lt;a href="http://www.reallivepreacher.com/rlparchive/taxonomy/term/118"&gt;real live preacher&lt;/a&gt;.  He’s a real live preacher (would you imagine?) with a great voice and an interesting point of view.  He also puts his time and money where his mouth is.  &lt;a href="http://www.reallivepreacher.com/rlparchive/taxonomy/term/118"&gt;This series&lt;/a&gt; of articles details his trip with &lt;a href="http://edgeoutreach.com/"&gt;Edge Outreach&lt;/a&gt;, an organization who works to provide safe drinking water in developing countries.  Gordon (his real name) took a trip with them, installing water purification systems in the Dominican Republic.  Amazingly, to me, they needed to install a system in a hospital of all places, which didn’t have pure water!&lt;/p&gt;
&lt;p&gt;It’s truly astonishing how many things can be so easily taken for granted.&lt;/p&gt;</description><link>http://blog.inarow.net/post/227535984</link><guid>http://blog.inarow.net/post/227535984</guid><pubDate>Wed, 15 Oct 2008 23:53:00 -0400</pubDate></item><item><title>Introduction to PEAR
</title><description>&lt;blockquote&gt;
&lt;p&gt;If you’re a &lt;span class="caps"&gt;PHP&lt;/span&gt; programmer, chances are you’ve either run across &lt;span class="caps"&gt;PEAR&lt;/span&gt; or could get some excellent use out of it. &lt;span class="caps"&gt;PEAR&lt;/span&gt; is an acronym for &lt;span class="caps"&gt;PHP&lt;/span&gt; Extension and Application Repository. The creators and maintainers of &lt;span class="caps"&gt;PEAR&lt;/span&gt; encourage you to pronounce it just like the fruit with the same spelling. But you’ll get more than fiber from &lt;span class="caps"&gt;PEAR&lt;/span&gt;, as you’ll learn when you read the rest of this article…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A snippet from my article at codewalkers: &lt;a href="http://www.codewalkers.com/c/a/PEAR-Articles/The-PEAR-Package-Tour-PEAR-Basics/"&gt;The &lt;span class="caps"&gt;PEAR&lt;/span&gt; Package Tour:  &lt;span class="caps"&gt;PEAR&lt;/span&gt; Basics&lt;/a&gt;.&lt;/p&gt;</description><link>http://blog.inarow.net/post/227533435</link><guid>http://blog.inarow.net/post/227533435</guid><pubDate>Fri, 11 Jul 2008 00:43:00 -0400</pubDate><category>php</category><category>articles</category></item><item><title>Link Attack III
</title><description>&lt;p&gt;&lt;a href="http://zenhabits.net/2008/06/how-to-get-a-lot-done-%E2%80%93-7-tips-to-achieve-more/"&gt;&lt;strong&gt;How to Get a Lot Done – 7 Tips to Achieve More&lt;/strong&gt;&lt;/a&gt;&lt;br/&gt;
This veers a bit from my normal posts, but was a great read.  If you have goals, big or small, and feel like you aren’t reaching them, give this a read.  The author certainly knows what he’s talking about, being a world-travelling, company-starting, web-designing entrepreneur extraordinaire.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://remysharp.com/2008/06/24/query-string-to-object-via-regex/"&gt;&lt;strong&gt;Query String to Object via regex&lt;/strong&gt;&lt;/a&gt;&lt;br/&gt;
This is from remy sharp’s blog.  This is a great example of the wonderful tidbits he doles out in helpful posts on this blog.  Lots of great jQuery, regex and Javascript “magic”.&lt;/p&gt;
&lt;div style="float:right"&gt;
&lt;p&gt;&lt;img src="http://inarow.net/static/images/entries/link_attack_iii.jpg" title="Sun T2000" alt="Sun T2000"/&gt;&lt;br/&gt;&lt;span style="font-size:80%"&gt;Sun T2000&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://ejohn.org/blog/deep-profiling-jquery-apps/"&gt;&lt;strong&gt;Deep Profiling jQuery Apps&lt;/strong&gt;&lt;/a&gt;&lt;br/&gt;
John Resig does it again, releasing another awesome project.  This adds profiling into the callstack of a page utilizing jQuery.  It goes much deeper that the profiling capabilities of firebug, and will be a great help if you have a heavy client-side app using jQuery.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.tbray.org/ongoing/When/200x/2008/05/01/Wide-Finder-2"&gt;&lt;strong&gt;Wide Finder 2&lt;/strong&gt;&lt;/a&gt;&lt;br/&gt;
Tim Bray is running a second edition of his Wide Finder project.  The basic premise is that taking advantage of the multiple processors available in modern day powerhouse boxes should be easier.  He provided a fairly trivial application in ruby (72 lines to process gigs of log files for counts and top visited pages).  He then ran it (in 23 hours) for a benchmark on an 8-core, 32-thread Sun T2000.&lt;/p&gt;
&lt;p&gt;He’s since given out accounts to a handful of others who had code to test on the box and provided some &lt;a href="http://wikis.sun.com/display/WideFinder/Results"&gt;preliminary results&lt;/a&gt;.  As you’ll see… OCaml apparently rocks, with results coming in at under 10 minutes and less than twice the code footprint of the original.  It’s certainly an interesting project to follow.&lt;/p&gt;</description><link>http://blog.inarow.net/post/227533326</link><guid>http://blog.inarow.net/post/227533326</guid><pubDate>Fri, 27 Jun 2008 01:08:00 -0400</pubDate><category>development</category><category>javascript</category><category>regex</category><category>productivity</category></item><item><title>A Programmer's Introduction to jQuery </title><description>&lt;p&gt;&lt;small&gt;I wrote this up a while ago, I don’t even remember why, but thought some people might enjoy it.&lt;/small&gt;&lt;/p&gt;

&lt;h2&gt;“JavaScript, Ugh.”&lt;/h2&gt;

&lt;p&gt;For many web developers, JavaScript is one of those subjects they’d rather avoid.  Five years ago, the landscape of client-side scripting was pretty bleak.  Browser inconsistencies, implementation bugs and numerous target platforms made developing client-side JavaScript a messy endeavor.&lt;/p&gt;

&lt;p&gt;And then, much to the chagrin of those developers, “Web 2.0” happened.  Overnight, every site on the internet began using &lt;span class="caps"&gt;AJAX&lt;/span&gt;, every feature request for a site involved something dynamic and client-side, and JavaScript development quickly became as important a skill as any server-side technology.&lt;/p&gt;

&lt;h2&gt;Enter the Libraries&lt;/h2&gt;

&lt;p&gt;As this trend continued, smart developers began longing for the level of abstraction found in most server-side environments.  Just as a &lt;span class="caps"&gt;PHP&lt;/span&gt; developer could call &lt;code&gt;mail()&lt;/code&gt; on nearly any platform and expect to have an email message sent, JavaScript developers craved this level of abstraction in their day to day work.&lt;/p&gt;

&lt;p&gt;In response to this need, several sharp developers have responded with JavaScript libraries to fill this gap.  These libraries seek to provide a uniform interface, across browser and operating system platforms, for the most common tasks that client-side scripting is called on to perform:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;span class="caps"&gt;DOM&lt;/span&gt; Manipulation (moving page elements around, hiding and showing objects)&lt;/li&gt;
    &lt;li&gt;&lt;span class="caps"&gt;AJAX&lt;/span&gt; and other flavors of client-server interaction that avoid a page refresh&lt;/li&gt;
    &lt;li&gt;Animation&lt;/li&gt;
    &lt;li&gt;Rich Interfaces (drag and drop, windowing, tabs, events)&lt;/li&gt;
    &lt;li&gt;Form manipulation&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Each of the popular libraries attempt to provide some or all of these capabilities, packaged in their own &lt;span class="caps"&gt;API&lt;/span&gt;.&lt;/p&gt;

&lt;h2&gt;On to jQuery&lt;/h2&gt;

&lt;p&gt;This article focuses on one of theses libraries, &lt;a href="http://jquery.com"&gt;jQuery&lt;/a&gt;.  jQuery design is focused on maintaining a small footprint, cross-browser compliance, and reducing the amount of code which must be written for applications.  It provides abstractions for &lt;span class="caps"&gt;AJAX&lt;/span&gt;, &lt;span class="caps"&gt;DOM&lt;/span&gt; manipulation, event handling and animated effects.&lt;/p&gt;

&lt;p&gt;Developing with jQuery depends on two basic concepts, &lt;span class="caps"&gt;CSS&lt;/span&gt; selectors and method chaining.&lt;/p&gt;

&lt;p&gt;In most vanilla JavaScript code (which does not make use of a library), you will find code like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;function toggle_element( element_id ) {
        var element = document.getElementById( element_id );
        if ( !element ) {
                return false;
        }
        var display = element.style.display;
        if ( !display || display == ‘block’ ) {
            element.style.display = ‘none’;
        }
       else {
            element.style.display = ‘block’;
           }

      return true;
}
window.onload = function () {
        var toggler = document.getElementById( ‘toggle_help’ );
        if ( toggler ) {
                toggler.onclick = function () { toggle_element( ‘help’ ) }
        }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The basic idea here, is that when the page is done loading, during the &lt;code&gt;window.onload&lt;/code&gt; event, we find the &lt;code&gt;toggle_help&lt;/code&gt; element and attach an &lt;code&gt;onclick&lt;/code&gt; event to it.  When that element is clicked, we find the &lt;span class="caps"&gt;DOM&lt;/span&gt; element with an id of “help”, examine its current display state (the &lt;span class="caps"&gt;CSS&lt;/span&gt; attribute which controls how it is presented in the flow of the page), determine if it is currently hidden or not, and toggle its display state.&lt;/p&gt;

&lt;p&gt;The same code, implemented with jQuery looks something like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; $(document).ready( function () {
        $('#toggle_help').click( function () { $('#help').toggle(); });
});&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;As you can see, the code is significantly shorter.  Admittedly, to try and compare based on the 22 versus three line count is a bit silly, as one could easily add or subtracts line from either implementation.  I think it is clear, though, which version is simpler.  jQuery strives to provide an appopriate level of abstraction, simplifying the developer’s task, but not obscuring it behind a heavy &lt;span class="caps"&gt;API&lt;/span&gt;.&lt;/p&gt;

&lt;p&gt;An important example of the abstraction jQuery provides is the &lt;code&gt;$(document).ready()&lt;/code&gt; construct.  This serves as an enhanced version of &lt;code&gt;window.onload&lt;/code&gt;.  The primary enhancement is that it acts in a cross-platform way, firing as soon as the &lt;span class="caps"&gt;DOM&lt;/span&gt; of the page is ready for manipulation.  This is in contrast to &lt;code&gt;window.onload&lt;/code&gt; which can be delayed indefinitely if objects on the page load slowly or improperly (images, iframes, scripts, etc.)&lt;/p&gt;

&lt;h2&gt;&lt;span class="caps"&gt;CSS&lt;/span&gt; Selectors&lt;/h2&gt;

&lt;p&gt;As shown in the previous example, one core features of jQuery is the use of &lt;span class="caps"&gt;CSS&lt;/span&gt; selectors to find elements within the page.  By now, I imagine that most web developers have had exposure to at least basic &lt;span class="caps"&gt;CSS&lt;/span&gt;, which is all you’ll generally need in order to develop very useful jQuery code.  The selector engine in jQuery implements CSS2 and CSS3 selectors, as well as adding a few useful extras.  The following examples, outline various selectors.&lt;/p&gt;

&lt;p&gt;Very concise selectors and code fragments are provided by the use of the $ symbol.  This is not a reserved character in JavaScript, and is used in jQuery as an alias for the main &lt;code&gt;jQuery&lt;/code&gt; object.  This will be seen throughout the examples.&lt;/p&gt;

&lt;p&gt;To start, here’s the page we’ll work against for these selector examples:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;html&amp;gt;
        &amp;lt;head&amp;gt;
                &amp;lt;title&amp;gt;Test Page&amp;lt;/title&amp;gt;
        &amp;lt;/head&amp;gt;
        &amp;lt;body&amp;gt;
                &amp;lt;div id="header"&amp;gt;
                        &amp;lt;h1&amp;gt;Test Page&amp;lt;/h1&amp;gt;
                &amp;lt;/div&amp;gt;
                &amp;lt;div class="instructions"&amp;gt;
                        &amp;lt;ul&amp;gt;
                                &amp;lt;li&amp;gt;Read Page&amp;lt;/li&amp;gt;
                                &amp;lt;li&amp;gt;Follow Examples&amp;lt;/li&amp;gt;
                        &amp;lt;/ul&amp;gt;
                &amp;lt;/div&amp;gt;
                &amp;lt;div id="mainform"&amp;gt;
                        &amp;lt;form&amp;gt;
                                &amp;lt;span class="instructions"&amp;gt;
                                        Fill out this form.
                                &amp;lt;/span&amp;gt;
                                &amp;lt;input type="text" name="first_name" /&amp;gt;
                                &amp;lt;select name="gender"&amp;gt;
                                        &amp;lt;option&amp;gt;Male&amp;lt;/option&amp;gt;
                                        &amp;lt;option&amp;gt;Female&amp;lt;/option&amp;gt;
                                &amp;lt;/select&amp;gt;
                        &amp;lt;/form&amp;gt;
                &amp;lt;/div&amp;gt;
        &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;A simple example, find the header and slide it out of view.  The # character, in front of a name is used to find an element by its id attribute.  An id should be unique in a pages structure.  &lt;code&gt;slideUp()&lt;/code&gt; is an animation method which decreases the height of an element over time, until it is hidden.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$('#header').slideUp('slow');&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Find the title heading of the page, and change its color.  In the selector, nested elements are found by simply following one selector with another.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$('#header h1').css('color', 'red');&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Remove the second element of a list.  The &lt;code&gt;:nth-child()&lt;/code&gt; selector is provided by jQuery to facilitate this.  &lt;code&gt;remove()&lt;/code&gt; takes matched elements out of the &lt;span class="caps"&gt;DOM&lt;/span&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$('#instructions ul li:nth-child(2)').remove()&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Where the &lt;span class="caps"&gt;CSS&lt;/span&gt; selector concept becomes very powerful, is when you want to operate on groups of items.  All methods of the jQuery object will operate across all the elements that match a given selector.&lt;/p&gt;

&lt;p&gt;Here, we’ll find all the instructions and add a class to them.  &lt;code&gt;addClass()&lt;/code&gt; is a method which adds a &lt;span class="caps"&gt;CSS&lt;/span&gt; class to the matched elements, useful to quickly change items to match a set style.  An important note, regarding &lt;code&gt;addClass()&lt;/code&gt; is that an &lt;span class="caps"&gt;HTML&lt;/span&gt; element may have more than once class, even though this is not seen very often.  To match all elements which have a given class, the classname is started with a period.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$('.instructions').addClass('warning');&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;These are some rather simple examples, but they touch on the main principles you’ll use when creating selectors for use with jQuery.  Details on all the selectors available are provided in the &lt;a href="http://docs.jquery.com/Selectors"&gt;jQuery Docs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Method Chaining and ‘this’&lt;/h2&gt;

&lt;p&gt;One possible disadvantage to using &lt;span class="caps"&gt;CSS&lt;/span&gt; selectors, as outlined above, is that very complex selectors can become a performance bottleneck.  They can also result in your code being cluttered with the same selector over and over, as you repeatedly manipulate the same elements.  Two facilities help alleviate these issues.&lt;/p&gt;

&lt;h3&gt;Method Chaining&lt;/h3&gt;

&lt;p&gt;All methods of the jQuery object return themselves.  This will be a familiar concept to many object-oriented programmers, but can look a bit foreign to others.  The basic idea being that you need only perform a given selection operation once, and then you perform all necessary operations on that set of results.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$('.intructions').fadeIn('fast')
        .css('border', '1px solid red')
        .addClass('warning');&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In this example, we find all the instructions.  We cause them to appear, give them a red border and add the warning class.  (Apparently, we really, really want our instructions followed)  It is important to remember that this is equivalent to the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$('.intructions').fadeIn('fast');
$('.intructions').css('border', '1px solid red');
$('.intructions').addClass('warning');&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Chaining methods in this manner allows for more concise code and snappier performance, as the selection operation need only be performed once.&lt;/p&gt;

&lt;h3&gt;‘this’&lt;/h3&gt;

&lt;p&gt;Another facility provided is the definition of &lt;code&gt;this&lt;/code&gt; inside each jQuery method context to reflect the current element being operated on.  This becomes important with more advanced concepts, as many of them rely of providing callback functions which are executed in the context of  each element matched by the selector.&lt;/p&gt;

&lt;p&gt;In this example, we find every element with the class “click_to_hide” and then attach an &lt;code&gt;onclick&lt;/code&gt; event to it.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$('.click_to_hide').click( function () {
        $(this).hide();
});&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;As you can see, we are creating an anonymous function for each element, and when the element is clicked, the element will be hidden.  In this instance, we wrap &lt;code&gt;this&lt;/code&gt; in the &lt;code&gt;jQuery/$&lt;/code&gt; method so we have access to the &lt;code&gt;hide()&lt;/code&gt; method.  Before wrapping, &lt;code&gt;this&lt;/code&gt; is simply a &lt;span class="caps"&gt;DOM&lt;/span&gt; Element.&lt;/p&gt;

&lt;h2&gt;&lt;span class="caps"&gt;AJAX&lt;/span&gt; and Event Handling&lt;/h2&gt;

&lt;p&gt;Two final topics I’ll touch on are &lt;span class="caps"&gt;AJAX&lt;/span&gt; and event handling.  jQuery provides nice abstractions for both of these, which are likely to prevent numerous bugs and speed development.&lt;/p&gt;

&lt;h3&gt;&lt;span class="caps"&gt;AJAX&lt;/span&gt;&lt;/h3&gt;

&lt;p&gt;The must-have feature for modern web sites, &lt;span class="caps"&gt;AJAX&lt;/span&gt;, is greatly simplified when using the jQuery library.  Without using a library, you would be writing complex code to first instantiate a browser-specific &lt;code&gt;XmlHttpRequest&lt;/code&gt; object, then initiating a request and writing a callback function to be triggered.&lt;/p&gt;

&lt;p&gt;With jQuery, for the most common cases of &lt;span class="caps"&gt;AJAX&lt;/span&gt; usage, you can accomplish this with one simple line:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Grab the content of url and inject it into #div_to_load_in
$('#div_to_load_in').load(url);&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;For a more complex case, where you want to manipulate or act on the result, you’ll need to add a bit more code.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var url = '/update_status.php';
$.get(url, {status: $('#status_field').val(}), function (data) {
        if ( data == 'OK' ) {
                alert('Status Updated');
        }
        else {
                alert('Sorry, Status Update Failed. (' + data + ')');
        }
});&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Here we’re assuming the existence of a server-side script, “update_status.php”, which takes a “status” &lt;span class="caps"&gt;GET&lt;/span&gt; parameter and returns either “OK” or an error message.  In this example, I also utilized the &lt;code&gt;val()&lt;/code&gt; jQuery method which abstracts the process of obtaining the value from any form element.  This includes finding the value attribute of the selected option in a &lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt; tag, value of a text field, or status of a checkbox.&lt;/p&gt;

&lt;h3&gt;Event Handling&lt;/h3&gt;

&lt;p&gt;Event handling in jQuery involves jQuery object methods which bind functions to events.  All of these binding methods are chainable, as with the previous examples.  Many of the browser-native events are simplified or enhanced, to make the script writer’s life easier.&lt;/p&gt;

&lt;p&gt;An example of this is &lt;code&gt;hover()&lt;/code&gt; which allows you to bind a function to the movement of the mouse cursor in and out of an element.  Here we add a faux caret to elements of a list as we hover over them, add a ‘selected’ class, and then remove these decorations when the user’s mouse moves on.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; $('li').hover(
        function () { $(this).prepend('&amp;lt;span&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt;').addClass('selected'); },
        function () { $(this).removeClass('selected').find('span:first').remove(); }
);&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In this example, we see use of &lt;code&gt;this&lt;/code&gt;, method chaining, and &lt;code&gt;find()&lt;/code&gt; which allows using selectors to dig down inside of an element.&lt;/p&gt;

&lt;h2&gt;Further Reading&lt;/h2&gt;

&lt;p&gt;Hopefully, you now have a feeling for what jQuery can do for your code.  This was simply the 10,000 foot introductory fly-by… jQuery packs a sizeable array of methods and functionality into its 14kb size, and it takes a while to familiarize yourself with most of them.  To continue you exploration, these sites may be of use:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://jquery.com"&gt;jQuery Site&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://docs.jquery.com/"&gt;jQuery Manual&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://docs.jquery.com/Tutorials:How_jQuery_Works"&gt;How jQuery Works by John Resig, Original jQuery Author&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><link>http://blog.inarow.net/post/227534819</link><guid>http://blog.inarow.net/post/227534819</guid><pubDate>Mon, 16 Jun 2008 10:31:00 -0400</pubDate><category>javascript</category><category>development</category><category>jquery</category></item><item><title>RubyKnight - Chess Engine in Ruby
</title><description>&lt;p&gt;I wrote this a while ago, while reading &lt;a href="http://astore.amazon.com/iar-20/detail/0691118183/002-5357856-1821657"&gt;Behind Deep Blue&lt;/a&gt; (which is a great book).  It’s a chess engine written in ruby.  The actual engine is implemented as a move generator, positional evaluator and a board class which handles the state as a set of bitboards and undoable move events.&lt;/p&gt;
&lt;p&gt;Included are a command-line client and an xboard interface.  The command-line interface accepts coordinate notation and a few commands:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;e2e4 – coordinate notation, move a pawn&lt;br/&gt;
!play – tell the engine to play as the current color&lt;br/&gt;
!undo – roll back a move&lt;br/&gt;
!dump filename – store the current board state&lt;br/&gt;
!load filename – load a stored board&lt;br/&gt;
!reset – start a new game&lt;br/&gt;
!quit – end the game&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You can cut the verbosity of the generator engine by editing line 121 of evaluator.rb:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;@@ -118,7 +118,7 @@ module RubyKnight
                def time_it label
                        start = Time.now
                        res = yield
-                       puts "TIMING( '#{label}=&amp;gt;#{res}'): #{Time.now - start} seconds"
+                       #puts "TIMING( '#{label}=&amp;gt;#{res}'): #{Time.now - start} seconds"
                        res
                end
        end&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The evaluator is very primitive, and only thinks one move ahead.  Some sort of breadth-first time thinking mode was next on the to-do list.&lt;/p&gt;
&lt;p&gt;You can grab the code via git:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone &lt;a href="http://darkwing.inarow.net/git/rubyknight.git"&gt;http://darkwing.inarow.net/git/rubyknight.git&lt;/a&gt;
&lt;/code&gt;&lt;/pre&gt;</description><link>http://blog.inarow.net/post/227535353</link><guid>http://blog.inarow.net/post/227535353</guid><pubDate>Mon, 09 Jun 2008 23:43:00 -0400</pubDate><category>ruby</category><category>development</category><category>chess</category></item><item><title>Debian OpenSSL Security Snafu
</title><description>&lt;p&gt;Darn, I thought I dealt with this.  So, a couple weeks back news broke about the terrible OpenSSL problem that had caused gobs of easily crackable ssl keys to generated on debian and its derivatives, and I read up on it.  Being that this is an ubuntu server, I was vulnerable, so I could have swarn I did an apt-get install openssl and got updated versions and regenerated my keys.&lt;/p&gt;
&lt;p&gt;Fast forward to yesterday evening.  I got an invite to &lt;a href="http://www.heroku.com/"&gt;Heroku&lt;/a&gt; and was playing with the git interface.  I uploaded by public key, and it told me that I had a blacklisted key and pointed me to the &lt;a href="http://www.ubuntu.com/usn/usn-612-2"&gt;ubuntu security warning&lt;/a&gt;.&lt;/p&gt;
&lt;div style="float:right"&gt;
&lt;p&gt;&lt;strong&gt;The removed lines:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;MD_Update(&amp;amp;m,buf,j);
[ .. ]
MD_Update(&amp;amp;m,buf,j); /* purify complains */&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;If you didn’t hear about the snafu, then you should look into it.  If you did, maybe you should look into it again.  Took me 10 minutes to fix up 3 bad keys and install the new openssl stuff via apt-get.&lt;/p&gt;
&lt;p&gt;(For those who didn’t hear:  Many moons ago, a line in an openssl file caused a warning in a tool the debian maintainers used.  The maintainer removed it, and the complaint went away and everything seemed to work fine.  Unfortunately, that line initialized the random number generator.  Without that line, every key on a debian system was generated with the random number generator initialized to the process id of the generating program… a tiny, easily bruteforceable set of seeds.)&lt;/p&gt;</description><link>http://blog.inarow.net/post/227528614</link><guid>http://blog.inarow.net/post/227528614</guid><pubDate>Thu, 05 Jun 2008 17:24:00 -0400</pubDate><category>linux</category><category>security</category></item></channel></rss>

