pageapp.tumblr({"tumblelog":{"title":"Chris Moyer's Ramblings","description":"","name":"cdmoyer","timezone":"US\/Eastern","cname":"blog.inarow.net","feeds":[]},"posts-start":0,"posts-total":"44","posts-type":false,"posts":[{"id":409243233,"url":"http:\/\/blog.inarow.net\/post\/409243233","url-with-slug":"http:\/\/blog.inarow.net\/post\/409243233\/fun-presentation-on-10-golden-principles-for-successful","type":"regular","date-gmt":"2010-02-24 16:09:22 GMT","date":"Wed, 24 Feb 2010 11:09:22","bookmarklet":0,"mobile":0,"feed-item":"","from-feed-id":0,"unix-timestamp":1267027762,"format":"markdown","reblog-key":"96Cb59dy","slug":"fun-presentation-on-10-golden-principles-for-successful","regular-title":"Fun Presentation on 10 Golden Principles for Successful Web Apps","regular-body":"<p>Fun presentation that <a href=\"http:\/\/www.avc.com\/a_vc\/2010\/02\/the-ten-golden-principals-for-successful-web-apps.html?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+AVc+%28A+VC%29\">Fred Wilson<\/a> is going to be giving at <a href=\"http:\/\/events.carsonified.com\/fowa\/2010\/miami\/\">The Future of Web Apps Conference<\/a>.<\/p>\n\n<div style=\"width:425px\" id=\"__ss_3238116\">\n<strong style=\"display:block;margin:12px 0 4px\"><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\">The 10 Golden Principles for Successful Web Apps<\/a><\/strong><object width=\"425\" height=\"355\"><param name=\"movie\" value=\"http:\/\/static.slidesharecdn.com\/swf\/ssplayer2.swf?doc=tengoldenrules-100221091210-phpapp01&amp;stripped_title=the-10-golden-principles-for-successful-web-apps-3238116\">\n<param name=\"allowFullScreen\" value=\"true\">\n<param name=\"allowScriptAccess\" value=\"always\">\n<embed src=\"http:\/\/static.slidesharecdn.com\/swf\/ssplayer2.swf?doc=tengoldenrules-100221091210-phpapp01&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\"><\/embed><\/object><div style=\"padding:5px 0 12px\">View more <a href=\"http:\/\/www.slideshare.net\/\">presentations<\/a> from <a href=\"http:\/\/www.slideshare.net\/fredwilson\">fredwilson<\/a>.<\/div>\n<\/div>"},{"id":397188032,"url":"http:\/\/blog.inarow.net\/post\/397188032","url-with-slug":"http:\/\/blog.inarow.net\/post\/397188032\/github-has-an-api-adding-your-repos-to-your-site","type":"regular","date-gmt":"2010-02-18 21:40:56 GMT","date":"Thu, 18 Feb 2010 16:40:56","bookmarklet":0,"mobile":0,"feed-item":"","from-feed-id":0,"unix-timestamp":1266529256,"format":"markdown","reblog-key":"jLFvx38b","slug":"github-has-an-api-adding-your-repos-to-your-site","regular-title":"GitHub has an API -- Adding your Repos to Your Site","regular-body":"<p><em>(This post is pretty old, found it in my tumblr drafts folder, but the code still works.)<\/em><\/p>\n\n<p>So, I was showing <a href=\"http:\/\/friendfeed.com\/mfc5\">Mike Canz<\/a> my <a href=\"http:\/\/inarow.new\">shiny new homepage<\/a>, and what was his reaction?  &#8220;How come the list of github projects doesn&#8217;t automatically update like twitter and the blog feed?&#8221;<\/p>\n\n<p>&#8220;I don&#8217;t know,&#8221; was my reply.<\/p>\n\n<p>A bit of reading about <a href=\"http:\/\/develop.github.com\/\">the github API<\/a> and a bit of hacking, and Voila!<\/p>\n\n<pre><code>&lt;script type=\"text\/javascript\"&gt;\nvar nongithub_projects = [\n    { \"name\": \"jThrottle\",\n      \"homepage\": \"http:\/\/inarow.net\/static\/jthrottle\/\",\n      \"description\": \"Throttled jQuery.each() to prevent locking the browser on huge loops\",\n      \"fork\": false }\n];\n\nvar projects_to_skip = {\"cdm-s-kol-greasemonkeys\": true };\n\nfunction github(user) {\n    var repos = user.repositories\n        .concat(nongithub_projects)\n        .sort(function (a, b) { return a.name.toLowerCase() &gt; b.name.toLowerCase(); });\n        $('#projects .loading').replaceWith('&amp;lt;ul\/&gt;'); \n        $ul = $('#projects ul:first');\n        for (var i = 0; i &lt; repos.length; i++) {\n            var rep = repos[i];\n             if (rep['fork'] == 1 || projects_to_skip[rep.name]) continue;\n             var url = rep['homepage'] || rep['url'];\n             $ul.append('&amp;lt;li&gt;&amp;lt;a href=\"'+url+'\"&gt;'+rep['name']+'&amp;lt;\/a&gt; - '+rep['description']+'&lt;\/li&gt;');\n        }\n }\n &lt;\/script&gt;\n  <script src=\"http:\/\/github.com\/api\/v2\/json\/repos\/show\/cdmoyer?callback=pageapp.github\" type=\"text\/javascript\"><\/script><\/code><\/pre>\n\n<p>I&#8217;m not going to claim that this code is beautiful, but it&#8217;s a fun snippet for a few minutes work.<\/p>"},{"id":233564220,"url":"http:\/\/blog.inarow.net\/post\/233564220","url-with-slug":"http:\/\/blog.inarow.net\/post\/233564220\/postels-law-the-robustness-principle","type":"link","date-gmt":"2009-11-05 04:25:57 GMT","date":"Wed, 04 Nov 2009 23:25:57","bookmarklet":0,"mobile":0,"feed-item":"","from-feed-id":0,"unix-timestamp":1257395157,"format":"markdown","reblog-key":"IcbcfYNQ","slug":"postels-law-the-robustness-principle","link-text":"Postel's Law -- The Robustness Principle","link-url":"http:\/\/en.wikipedia.org\/wiki\/Robustness_principle","link-description":"<blockquote>\n  <p>Be liberal in what you accept, and conservative in what you send<\/p>\n  \n  <p>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!<\/p>\n<\/blockquote>\n\n<p>Not sure why I&#8217;ve never seen this before.  I guess I never had a call to read the RFC relating to internet host communication layers.<\/p>\n\n<p>From <a href=\"http:\/\/tools.ietf.org\/html\/rfc1122#page-12\">RFC 1122 section 1.2.2<\/a><\/p>"},{"id":231513919,"url":"http:\/\/blog.inarow.net\/post\/231513919","url-with-slug":"http:\/\/blog.inarow.net\/post\/231513919\/rubyknight-gem-released-v0-2-0","type":"regular","date-gmt":"2009-11-03 04:51:00 GMT","date":"Mon, 02 Nov 2009 23:51:00","bookmarklet":0,"mobile":0,"feed-item":"","from-feed-id":0,"unix-timestamp":1257223860,"format":"markdown","reblog-key":"ejXE80My","slug":"rubyknight-gem-released-v0-2-0","regular-title":"RubyKnight Gem Released (v0.2.0)","regular-body":"<p>Well that was fun.  I made my first ruby gem, learned Jewelcutter and published my gem to gemcutter.<\/p>\n\n<p>What does this mean?  You can <code>gem install rubyknight<\/code> and then play chess or write some code using a chess board model and engine.<\/p>\n\n<!-- more -->\n\n<pre><code>&gt; sudo gem install rubyknight\nSuccessfully installed rubyknight-0.2.0\n1 gem installed\nInstalling ri documentation for rubyknight-0.2.0...\nInstalling RDoc documentation for rubyknight-0.2.0...\n\n&gt; rubyknight\n\nEnter a move such as e2e4, or a command.\nCommands are prefixed with !\n  !quit - quit\n  !undo - revert a move\n  !load &lt;file&gt; - load game state from a file\n  !dump &lt;file&gt; - dump game state to a file\n  !play - tell the computer to start playing the current color\n  !reset - start a new game\n\nrnbqkbnr\npppppppp\n........\n........\n........\n........\nPPPPPPPP\nRNBQKBNR\n\nScore: 0\nEnter move [White]&gt; e2e4\nrnbqkbnr\npppppppp\n........\n........\n....P...\n........\nPPPP.PPP\nRNBQKBNR\n\nScore: -2\nEnter move [Black]&gt; !play\nrnbqkbnr\n.ppppppp\np.......\n........\n....P...\n........\nPPPP.PPP\nRNBQKBNR\n\nScore: -2\nEnter move [White]&gt;\n<\/code><\/pre>\n\n<h3>OR<\/h3>\n\n<pre><code>require 'rubygems'\nrequire 'rubyknight'\nboard = RubyKnight::Board.new\n\nputs board.to_s\nprint \"Enter move: \"\n$stdin.each do |move|\n    move.strip!\n    begin\n        board.cnotation_move move\n    rescue RubyKnight::IllegalMoveException\n        print \"Enter a real move! #{$!.to_s}\\n\"\n    end \n    puts board.to_s\n    print \"Enter move: \"\nend\n<\/code><\/pre>"},{"id":229127492,"url":"http:\/\/blog.inarow.net\/post\/229127492","url-with-slug":"http:\/\/blog.inarow.net\/post\/229127492\/one-truth-about-technology-architecture-loose-coupling","type":"link","date-gmt":"2009-10-31 19:57:17 GMT","date":"Sat, 31 Oct 2009 15:57:17","bookmarklet":0,"mobile":0,"feed-item":"","from-feed-id":0,"unix-timestamp":1257019037,"format":"markdown","reblog-key":"8EQIBg8Z","slug":"one-truth-about-technology-architecture-loose-coupling","link-text":"One Truth About Technology Architecture: Loose Coupling","link-url":"http:\/\/continuations.com\/post\/227973186\/one-truth-about-technology-architecture-loose-coupling","link-description":"<blockquote>\n  <p>I believe loose coupling is so critical that it should be a board level issue for web companies.  Whenever I now hear something like, \u201cwe can\u2019t implement x until we have rewritten y\u201d or \u201cx is slow because y is overloaded\u201d I start to dig in, because it suggests tight coupling is the culprit.<\/p>\n<\/blockquote>\n\n<p>Great article by Albert Wenger of <a href=\"http:\/\/www.unionsquareventures.com\/\">Union Square Ventures<\/a>.  [via <a href=\"http:\/\/rafer.tumblr.com\/\">Scott Rafer&#8217;s Blog<\/a>].<\/p>"},{"id":228072167,"url":"http:\/\/blog.inarow.net\/post\/228072167","url-with-slug":"http:\/\/blog.inarow.net\/post\/228072167\/tumblr-javascript","type":"regular","date-gmt":"2009-10-30 17:10:00 GMT","date":"Fri, 30 Oct 2009 13:10:00","bookmarklet":0,"mobile":0,"feed-item":"","from-feed-id":0,"unix-timestamp":1256922600,"format":"markdown","reblog-key":"luJDUm5p","slug":"tumblr-javascript","regular-title":"Put Tumblr on Your Site via Javascript","regular-body":"<p>Tumblr has an easily accessible API which outputs XML, JSON and JSONP.  A bit of searching didn&#8217;t drum up a cut-and-paste solution, but I was able to roll my own in a few minutes.  I&#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 <a href=\"http:\/\/inarow.net\/\">my site<\/a>.<\/p>\n\n<!-- more -->\n\n<script src=\"http:\/\/gist.github.com\/222366.js\"><\/script>","tags":["javascript","tumblr","jquery"]},{"id":227658739,"url":"http:\/\/blog.inarow.net\/post\/227658739","url-with-slug":"http:\/\/blog.inarow.net\/post\/227658739\/ramblings-moved-to-tumblr","type":"regular","date-gmt":"2009-10-30 05:15:00 GMT","date":"Fri, 30 Oct 2009 01:15:00","bookmarklet":0,"mobile":0,"feed-item":"","from-feed-id":0,"unix-timestamp":1256879700,"format":"markdown","reblog-key":"09fxWwht","slug":"ramblings-moved-to-tumblr","regular-title":"Ramblings Moved to Tumblr","regular-body":"<p>Not exactly sure why.\u00a0\u00a0 I decided to make the home page of <a href=\"http:\/\/inarow.net\/\">inarow.net<\/a> something else (which isn&#8217;t done yet.)\u00a0 So, I started shopping around for blogging options.\u00a0 I see too much of wordpress on the clock, so I wrote that off.\u00a0 I ended up on tumblr because I liked their API, flexibility and capabilities.<\/p>\n\n<p>Speaking of API, it was about an hour to import all my posts from bloxsom.<\/p>\n\n<!-- more -->\n\n<ol>\n<li>Install ruby-tumblr gem<\/li>\n<li>Install RedCloth gem<\/li>\n<li>Whip up a script\n<script src=\"http:\/\/gist.github.com\/222114.js\"><\/script>\n<\/li>\n<li>\n<p>Run the script<\/p>\n\n<blockquote>\n  <p>find blog\/entries\/ -type f -name &#8216;*.txt&#8217; | grep -v &#8216;draft\/&#8217; | ruby tumbleit.rb<\/p>\n<\/blockquote>\n<\/li>\n<\/ol>","tags":["development","ruby"]},{"id":227549533,"url":"http:\/\/blog.inarow.net\/post\/227549533","url-with-slug":"http:\/\/blog.inarow.net\/post\/227549533\/look-at-me-ma-i-made-a-screencast-whats-it","type":"video","date-gmt":"2009-01-27 03:42:00 GMT","date":"Mon, 26 Jan 2009 22:42:00","bookmarklet":0,"mobile":0,"feed-item":"","from-feed-id":0,"unix-timestamp":1233027720,"format":"html","reblog-key":"2HOB9sbo","slug":"look-at-me-ma-i-made-a-screencast-whats-it","video-caption":"<p>Look at me, ma, I made a screencast.<\/p>\n<p><b>What\u2019s it About?<\/b><\/p>\n<p><a href=\"%E2%80%9Dhttp:\/\/couchdb.apache.org\/%E2%80%9D\">CouchDB<\/a> is a \u201cdistributed, fault-tolerant and schema-free document-oriented database.\u201d 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\u2019s blog: <a href=\"%E2%80%9Dhttp:\/\/jchris.mfdz.com\/code\/2008\/11\/my_couch_or_yours__shareable_ap%E2%80%9D\">My Couch or Yours? Shareable Apps Are The Future<\/a>.<\/p>\n<p>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\u2019s helpful to someone besides me. ;)<\/p>","video-source":"<iframe width=504 height=424 frameborder=\"0\" scrolling=\"no\" src=\"http:\/\/www.screencast-o-matic.com\/embed?sc=cQVOFPnMb&w=500&np=0&v=2\"><\/iframe>","video-player":"<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\"><\/iframe>","tags":["development","couchdb"]},{"id":227529029,"url":"http:\/\/blog.inarow.net\/post\/227529029","url-with-slug":"http:\/\/blog.inarow.net\/post\/227529029\/autoblogger-update-0-9-4","type":"regular","date-gmt":"2009-01-23 15:51:00 GMT","date":"Fri, 23 Jan 2009 10:51:00","bookmarklet":0,"mobile":0,"feed-item":"","from-feed-id":0,"unix-timestamp":1232725860,"format":"html","reblog-key":"kxpNw59f","slug":"autoblogger-update-0-9-4","regular-title":"AutoBlogger Update :: 0.9.4\n","regular-body":"<p>Version <strong>0.9.4<\/strong> of AutoBlogger is now available.<\/p>\n<p>This is another quick bugfix release, but includes a patch sent to me by Chris Lewis, who patched it to support sending \u201c&gt;date\u201d attributes from the iPhone mail client.  Apparently the iPhone insists on adding whitespace before any line starting with \u201c&gt;\u201d, assuming that it\u2019s an indented reply.<\/p>\n<p>In other news, I\u2019ve moved the main repository to <a href=\"http:\/\/github.com\/cdmoyer\/autoblogger\/tree\/master\">github<\/a>, as I\u2019m 100% addicted to git.<\/p>\n<p><strong>AutoBlogger Site:<\/strong>  <a href=\"http:\/\/www.inarow.net\/entries\/projects\/one_evening\/autoblogger\/\"><a href=\"http:\/\/www.inarow.net\/entries\/projects\/one_evening\/autoblogger\/\">http:\/\/www.inarow.net\/entries\/projects\/one_evening\/autoblogger\/<\/a><\/a><br\/><strong>Grab it:<\/strong>  <a href=\"http:\/\/www.inarow.net\/static\/downloads\/autoblogger.tar.gz\">Download Tarball<\/a> or Git Clone (git clone git:\/\/github.com\/cdmoyer\/autoblogger.git)<\/p>","tags":["autoblogger","projects","one evening","git"]},{"id":227534946,"url":"http:\/\/blog.inarow.net\/post\/227534946","url-with-slug":"http:\/\/blog.inarow.net\/post\/227534946\/googles-ajax-apis-playground","type":"regular","date-gmt":"2009-01-23 04:49:00 GMT","date":"Thu, 22 Jan 2009 23:49:00","bookmarklet":0,"mobile":0,"feed-item":"","from-feed-id":0,"unix-timestamp":1232686140,"format":"html","reblog-key":"QMB9X3Zh","slug":"googles-ajax-apis-playground","regular-title":"Google's AJAX APIs Playground\n","regular-body":"<div style=\"float:right; border: 1px solid black; margin-left: 1em;\">\n<p><img src=\"http:\/\/inarow.net\/static\/images\/entries\/googajaxapis.jpg\" title=\"AJAX APIs Playground\" alt=\"AJAX APIs Playground\"\/><br\/><\/p>\n<\/div>\n<p><a href=\"http:\/\/code.google.com\/apis\/ajax\/playground\/\">Google\u2019s <span class=\"caps\">AJAX<\/span> APIs Playground<\/a> 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.<\/p>\n<p>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 <span class=\"caps\">API<\/span> has a link to the documentation.<\/p>\n<p>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 <span class=\"caps\">API<\/span> offering.  Graphs, maps, search, blogging and more are all included, with great examples and an excellent interface.<\/p>\n<p>As an example, check out this incredily simple way to add a scrolling <span class=\"caps\">RSS<\/span> ticker to a page.  This will grab the provided feed, and rotate the articles inside the #content div on the page.  You\u2019ll want to check out <a href=\"http:\/\/code.google.com\/apis\/ajax\/playground\/#dynamic_feed_control_-_vertical\">the full example<\/a> to see the needed javascript files and provided stylesheet.<\/p>\n<p><br\/><\/p>\n<pre><code>google.load('feeds', '1');<\/code><\/pre>\n<p>function OnLoad() {<br\/>\n    var feeds = [{<br\/>\n        title: \u2018In A Row\u2019,<br\/>\n        url: \u2018http:\/\/inarow.net\/index.rss\u2019<br\/>\n    }];<\/p>\nvar options = {horizontal: true};\n\nnew GFdynamicFeedControl(feeds, \u201ccontent\u201d, options);\n<p>}<\/p>\n<p>google.setOnLoadCallback(OnLoad);<\/p>\n<p><br style=\"clear: left\"\/><\/p>","tags":["javascript","development"]}]});
