<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="text">Wynn Netherland</title>
  <generator uri="http://effectif.com/nesta">Nesta</generator>
  <id>tag:wynnnetherland.com,2009:/</id>
  <link href="http://wynnnetherland.com/feed" rel="self"/>
  <link href="http://wynnnetherland.com" rel="alternate"/>
  <subtitle type="text">Mashup of Design &amp; Development</subtitle>
  <author>
    <name>Wynn Netherland</name>
    <uri>http://wynnnetherland.com</uri>
    <email>wynn.netherland@gmail.com</email>
  </author>
  <entry>
    <title>Ten things we learned building TweetCongress.org</title>
    <link type="text/html" href="http://wynnnetherland.com/blog/ten-things-we-learned-building-tweetcongress-org" rel="alternate"/>
    <id>tag:wynnnetherland.com,2010-03-30:/blog/ten-things-we-learned-building-tweetcongress-org</id>
    <content type="html">&lt;p&gt;I had such a fun time at the &lt;a href="http://okccoco.com"&gt;OKCCoco&lt;/a&gt; at &lt;a href="http://openbeta.extendedbeta.com/openbeta4.html"&gt;OpenBeta4&lt;/a&gt;. &lt;a href="http://twitter.com/adamstac"&gt;Adam&lt;/a&gt; and I met a lot of super bright folks building some really cool apps. Here's the video and slides from my keynote.&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;&lt;embed src="http://blip.tv/play/hPMdgdGxRAI" type="application/x-shockwave-flash" width="550" height="304" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/p&gt;

&lt;div class="slides"&gt;
  &lt;object width="550" height="457"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tweetcongressopenbeta4-100330100731-phpapp01&amp;rel=0&amp;stripped_title=ten-things-we-learned-building-tweetcongressorg" /&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=tweetcongressopenbeta4-100330100731-phpapp01&amp;rel=0&amp;stripped_title=ten-things-we-learned-building-tweetcongressorg" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="550" height="457"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;

</content>
    <published>2010-03-30T08:11:18-05:00</published>
    <category term="blog"/>
  </entry>
  <entry>
    <title>Twitter gem hits 0.9.0</title>
    <link type="text/html" href="http://wynnnetherland.com/blog/twitter-gem-hits-0-9-0" rel="alternate"/>
    <id>tag:wynnnetherland.com,2010-03-20:/blog/twitter-gem-hits-0-9-0</id>
    <content type="html">&lt;p&gt;I don't normally do a post for new releases, but if you're using the &lt;a href="http://gemcutter.org/gems/twitter"&gt;Twitter gem&lt;/a&gt;, there are some new changes you might want to test before deploying.&lt;!--more--&gt;&lt;/p&gt;

&lt;h2&gt;New endpoint&lt;/h2&gt;

&lt;p&gt;The biggest change is the gem now fully supports the new Twitter versioned endpoint &lt;code&gt;api.twitter.com/&lt;version&gt;&lt;/code&gt; thanks to &lt;a href="http://twitter.com/sferik"&gt;Erik Michaels-Ober&lt;/a&gt;. Some methods have already been using the new endpoint but we've been waiting for Twitter to fully support (read OAuth) on this URL. What's this mean to you? Maybe not much unless you have to punch through a firewall to hit the Twitter API. Regardless, if your app uses OAuth to authenticate with Twitter, it's a good idea to put the new gem thru the paces before you deploy.&lt;/p&gt;

&lt;h2&gt;Search exclusions&lt;/h2&gt;

&lt;p&gt;Thanks to a patch from &lt;a href="http://github.com/abozanich"&gt;Adam Bozanich&lt;/a&gt;, search now includes exclusions:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# get all references to harmony app not from jnunemaker or to pengwynn
Twitter::Search.new('harmony app').from('jnunemaker', true).to('pengwynn', true).fetch
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We've also enhanced search to support the upcoming &lt;a href="http://groups.google.com/group/twitter-api-announce/browse_thread/thread/983086ae9935d50c"&gt;&lt;em&gt;popular&lt;/em&gt; query&lt;/a&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# default result type is mixed
Twitter::Search.new('whodat').fetch
# get most popular tweets about the Saints
Twitter::Search.new('whodat').result_type('popular').fetch
# get most recent tweets about the Saints
Twitter::Search.new('whodat').result_type('recent').fetch
&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Tweet and ReTweet sat on a log. Tweet jumps off. Who's left?&lt;/h4&gt;


&lt;p&gt;We also added support for two newly released API methods: &lt;a href="http://apiwiki.twitter.com/Twitter-REST-API-Method:-GET-statuses-id-retweeted_by"&gt;retweeted_by&lt;/a&gt; and &lt;a href="http://apiwiki.twitter.com/Twitter-REST-API-Method:-GET-statuses-id-retweeted_by-ids"&gt;retweeted_by_ids&lt;/a&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# create an authenticated client
base = Twitter::Base.new(Twitter::HTTPAuth.new('username', 'password'))
# get the users who retweeted a tweet
base.retweeters_of(10579279780)
# get just the user ids
base.retweeters_of(10579279780, :ids_only =&amp;gt; true)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That's it for now. Enjoy!&lt;/p&gt;
</content>
    <published>2010-03-20T10:35:06-05:00</published>
    <category term="blog"/>
  </entry>
  <entry>
    <title>Enhance your site search with OpenSearch</title>
    <link type="text/html" href="http://wynnnetherland.com/blog/enhance-your-site-search-with-opensearch" rel="alternate"/>
    <id>tag:wynnnetherland.com,2010-02-15:/blog/enhance-your-site-search-with-opensearch</id>
    <content type="html">&lt;p&gt;If your web site provides its own search function, set up &lt;a href="http://www.opensearch.org/Home"&gt;OpenSearch&lt;/a&gt; to let your users search from the browser search box.&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;With two simple steps you can let users hit your site's search page without forcing them to visit first.&lt;/p&gt;

&lt;p&gt;First, create an OpenSearch definition.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
                       xmlns:moz="http://www.mozilla.org/2006/browser/search/"&amp;gt;
&amp;lt;ShortName&amp;gt;Wynn Netherland&amp;lt;/ShortName&amp;gt;
&amp;lt;Description&amp;gt;Designer &amp;amp;amp; Developer&amp;lt;/Description&amp;gt;
&amp;lt;Contact&amp;gt;wynn@orrka.com&amp;lt;/Contact&amp;gt;
&amp;lt;Image height="16" width="16" type="image/x-icon"&amp;gt;http://wynnnetherland.com/favicon.ico&amp;lt;/Image&amp;gt;
&amp;lt;Url type="text/html" method="get" template="http://wynnnetherland.com/?s={searchTerms}"/&amp;gt;
&amp;lt;moz:SearchForm&amp;gt;http://wynnnetherland.com&amp;lt;/moz:SearchForm&amp;gt;
&amp;lt;/OpenSearchDescription&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Next, reference your search definition in your page layout.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;link rel="search" type="application/opensearchdescription+xml" href="http://wynnnetherland.com/opensearch.xml" title="Wynn Netherland" /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Here's a &lt;a href="http://screenr.com/AKx"&gt;quick video&lt;/a&gt; on how FireFox and Chrome handle OpenSearch and how your users will benefit:&lt;/p&gt;

&lt;p&gt;&lt;object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0' width='534' height='331'&gt;&lt;param name='movie' value='http://screenr.com/Content/assets/screenr_1116090935.swf' /&gt;&lt;param name='flashvars' value='i=47387' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;embed src='http://screenr.com/Content/assets/screenr_1116090935.swf' flashvars='i=47387' allowFullScreen='true' width='534' height='331' pluginspage='http://www.macromedia.com/go/getflashplayer'&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
</content>
    <published>2010-02-15T15:54:30-06:00</published>
    <category term="blog"/>
  </entry>
  <entry>
    <title>CSS Metaframeworks - King of all @media</title>
    <link type="text/html" href="http://wynnnetherland.com/blog/css-metaframeworks-king-of-all-media" rel="alternate"/>
    <id>tag:wynnnetherland.com,2010-02-10:/blog/css-metaframeworks-king-of-all-media</id>
    <content type="html">&lt;p&gt;I had the opportunity to give a presentation on CSS Metaframeworks at Dallas.rb last week. We discussed CSS, &lt;a href="http://sass-lang.com"&gt;Sass&lt;/a&gt;, &lt;a href="http://compass-style.org"&gt;Compass&lt;/a&gt;, &lt;a href="http://lesscss.org/"&gt;LessCSS&lt;/a&gt;, &lt;a href="http://xcss.antpaw.org/"&gt;xCSS&lt;/a&gt;, &lt;a href="http://www.blueprintcss.org/"&gt;Blueprint&lt;/a&gt;, and &lt;a href="http://960.gs"&gt;960.gs&lt;/a&gt;. Here are the video and slides.
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;&lt;object width="550" height="309"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=9348454&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=ffffff&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=9348454&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=ffffff&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="550" height="309"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;

&lt;p&gt;&lt;object style="margin:0px" width="550" height="500"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=metaframeworks-dallasrb-100203094700-phpapp01&amp;rel=0&amp;stripped_title=css-metaframeworks-king-of-all-media" /&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=metaframeworks-dallasrb-100203094700-phpapp01&amp;rel=0&amp;stripped_title=css-metaframeworks-king-of-all-media" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="550" height="500"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
</content>
    <published>2010-02-10T13:43:47-06:00</published>
    <category term="blog"/>
  </entry>
  <entry>
    <title>Sneak peek: tail -f thechangelog</title>
    <link type="text/html" href="http://wynnnetherland.com/blog/sneak-peek-tail-f-thechangelog" rel="alternate"/>
    <id>tag:wynnnetherland.com,2010-01-21:/blog/sneak-peek-tail-f-thechangelog</id>
    <content type="html">&lt;p&gt;I wanted to give you my readers (all five of you) a sneak peek at a little something &lt;a href="http://twitter.com/adamstac"&gt;Adam&lt;/a&gt; and I have been working on over at &lt;a href="http://thechangelog.com"&gt;The Changelog&lt;/a&gt;.
&lt;!--more--&gt;&lt;/p&gt;

&lt;h4&gt;Introducing tail.thechangelog.com&lt;/h4&gt;


&lt;p&gt;Adam and I are always looking for ways to discover what's fresh and new in open source so we built a little application that helps you drink from the &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt; firehose. Tail gives you a real-time view of all public GithHub events and lets you filter by event type and programming languages. It still has some rough spots but we'd love to get your feed back here or just send a tweet to &lt;a href="http://twitter.com/changelogshow"&gt;@changelogshow&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Visit: &lt;a href="http://tail.thechangelog.com"&gt;http://tail.thechangelog.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0' width='550' height='338'&gt;&lt;param name='movie' value='http://screenr.com/Content/assets/screenr_1116090935.swf' /&gt;&lt;param name='flashvars' value='i=41065' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;embed src='http://screenr.com/Content/assets/screenr_1116090935.swf' flashvars='i=41065' allowFullScreen='true' width='550' height='338' pluginspage='http://www.macromedia.com/go/getflashplayer'&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
</content>
    <published>2010-01-21T11:37:12-06:00</published>
    <category term="blog"/>
  </entry>
  <entry>
    <title>Quick tip: Use APIdock to hunt down missing methods</title>
    <link type="text/html" href="http://wynnnetherland.com/blog/quick-tip-find-missing-methods-with-apidock" rel="alternate"/>
    <id>tag:wynnnetherland.com,2009-12-22:/blog/quick-tip-find-missing-methods-with-apidock</id>
    <content type="html">&lt;p&gt;From time to time, we all to have step into older projects and add features. Suddenly that old standby method you'd come to love is giving you a &lt;code&gt;method_missing&lt;/code&gt;. How do you go about finding out which version of Rails introduced it so you can upgrade or monkey patch? APIdock has your back.
&lt;!--more--&gt;
I bring this up because all too many gems depend on Active Support from Rails and introducing a new gem into an older Rails project can lead to some headaches when Active Support versions collide.&lt;/p&gt;

&lt;h4&gt;A real world example&lt;/h4&gt;


&lt;p&gt;My &lt;a href="http://github.com/pengwynn/linkedin"&gt;LinkedIn gem&lt;/a&gt; depends on &lt;a href="http://github.com/Empact/roxml"&gt;ROXML&lt;/a&gt; which in turn depends on &lt;a href="http://gemcutter.org/gems/activesupport"&gt;Active Support&lt;/a&gt;, and more specifically &lt;code&gt;Object#present?&lt;/code&gt;. If you don't know &lt;code&gt;present?&lt;/code&gt; is just the opposite of &lt;code&gt;blank?&lt;/code&gt;. Never one to eschew the &lt;code&gt;unless&lt;/code&gt; conditional (I know, I'm a heretic) I've always used &lt;code&gt;unless foo.blank?&lt;/code&gt; and didn't notice when &lt;code&gt;present?&lt;/code&gt; was added.&lt;/p&gt;

&lt;p&gt;So when asked to debug my gem in an older project the error message was puzzling: &lt;code&gt;undefined method `present?' for "status":String&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;String&lt;/code&gt; in this case is just a red herring. How do I know that? (Pretend for a minute you don't use &lt;code&gt;present?&lt;/code&gt; all the time or that you're a noob). A quick search on &lt;a href="http://apidock.com/rails/Object/present%3F"&gt;APIdock&lt;/a&gt; tells us that Active Support added this method in version 2.2.1.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/wynnxp/4206575889/sizes/o/"&gt;&lt;img src='http://farm5.static.flickr.com/4009/4206575889_88c957ee2b.jpg' class='flickr'alt='present? (Object) - APIdock'/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I know this because the navigation is enabled for this method starting in 2.2.1. So, mystery solved. My friend can now monkey patch his way out of this one or upgrade to a later version of Active Support. Pick your poison.&lt;/p&gt;
</content>
    <published>2009-12-22T15:40:57-06:00</published>
    <category term="blog"/>
  </entry>
  <entry>
    <title>The Twitter gem now supports Tumblr</title>
    <link type="text/html" href="http://wynnnetherland.com/blog/the-twitter-gem-now-supports-tumblr" rel="alternate"/>
    <id>tag:wynnnetherland.com,2009-12-18:/blog/the-twitter-gem-now-supports-tumblr</id>
    <content type="html">&lt;p&gt;On the heels of the &lt;a href="http://staff.tumblr.com/post/287703110/api"&gt;announcement that Tumblr now supports the Twitter API&lt;/a&gt;, we're happy to say the &lt;a href="http://gemcutter.org/gems/twitter"&gt;Twitter gem&lt;/a&gt; now supports &lt;a href="http://tumblr.com"&gt;Tumblr&lt;/a&gt;!
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;Be sure and grab 0.8.0:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo gem install twitter
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To use the gem with Tumblr, pass a new argument when using &lt;code&gt;HTTPAuth&lt;/code&gt;. Also note your &lt;code&gt;username&lt;/code&gt; is your email address on Tumblr:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;httpauth = Twitter::HTTPAuth.new('email', 'password', :api_endpoint =&amp;gt; 'tumblr.com')
base = Twitter::Base.new(httpauth)

pp base.user_timeline
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Tumblr does not support all API methods and instead returns 404s. I'll look into a way to catch those and raise &lt;code&gt;NotImplemented&lt;/code&gt; instead.&lt;/p&gt;
</content>
    <published>2009-12-18T16:09:32-06:00</published>
    <category term="blog"/>
  </entry>
  <entry>
    <title>Use JavaScript to put GitHub info on your site</title>
    <link type="text/html" href="http://wynnnetherland.com/blog/use-javascript-to-put-github-info-on-your-site" rel="alternate"/>
    <id>tag:wynnnetherland.com,2009-12-15:/blog/use-javascript-to-put-github-info-on-your-site</id>
    <content type="html">&lt;p&gt;In case you missed it, &lt;a href="http://adamstacoviak.com"&gt;Adam&lt;/a&gt; and I launched a &lt;a href="http://thechangelog.com"&gt;new blog&lt;/a&gt; and are six episodes into a new podcast where we bring you what's fresh and new in open source software. Our goal is to scour the depths of &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt; (and other sources) to highlight the cool new and newly released open source projects. As the good folks at Github &lt;a href="http://github.com/blog/555-the-changelog"&gt;recently highlighted&lt;/a&gt;, one of my favorite features of the blog is the GitHub integration. Here's how to use JavaScript to put GitHub info on your site.
&lt;!--more--&gt;
For The Changelog, when we link to a GitHub repo, we wanted to display the number of times the repo has been forked or watched:
&lt;img src='http://farm3.static.flickr.com/2522/4188158734_a7c7260d40.jpg' class='flickr'alt='Changelog GitHub integration'/&gt;&lt;/p&gt;

&lt;p&gt;To do this, we call &lt;a href="http://develop.github.com"&gt;Version 2 of the GitHub API&lt;/a&gt;, which provides a great deal of info about GitHub users and repositories. To retrieve repo info, we call &lt;code&gt;repos/show&lt;/code&gt; method:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://github.com/api/v2/xml/repos/show/pengwynn/linkedin"&gt;http://github.com/api/v2/xml/repos/show/pengwynn/linkedin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The API supports JSON, YAML, and XML return types. From JavaScript, JSON is the simplest data format to work with. Simply replace the &lt;code&gt;xml&lt;/code&gt; segment with &lt;code&gt;json&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://github.com/api/v2/json/repos/show/pengwynn/linkedin"&gt;http://github.com/api/v2/json/repos/show/pengwynn/linkedin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most likely, hitting this URL from your browser will download the file. Open that up in your favorite text editor and you should see a JavaScript Object Notation representation of the same repo info:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
    "repository": {
        "url": "http://github.com/pengwynn/linkedin",
        "description": "Ruby wrapper for the LinkedIn API",
        "watchers": 43,
        "homepage": "http://bit.ly/ruby-linkedin",
        "fork": false,
        "forks": 1,
        "private": false,
        "name": "linkedin",
        "owner": "pengwynn",
        "open_issues": 1
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To put this info on the page, in our example, we'll use jQuery, but you can of course use another framework or plain vanilla JavaScript.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jQuery(document).ready(function($){

  $.each($('.post.link.github h3 a'), function() {
    var post = $(this).parents(".post");
    var url = $(this).attr('href');
    var segments = url.split('/');
    var repo = segments.pop();
    var username = segments.pop();
    $.getJSON("http://github.com/api/v2/json/repos/show/"+username+"/"+repo+"?callback=?", function(data){
      var repo_data = data.repository;
      if(repo_data) {
        var watchers_link = $('&amp;lt;a&amp;gt;').addClass('watchers').attr('href', url+'/watchers').text(repo_data.watchers);
        var forks_link = $('&amp;lt;a&amp;gt;').addClass('forks').attr('href', url+'/network').text(repo_data.forks);
        var comment_link = post.find('.meta .comment-count');
        comment_link.after(watchers_link);
        comment_link.after(forks_link);
      }
    });
  });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This code looks for any entries that have CSS classes of &lt;code&gt;link&lt;/code&gt; and &lt;code&gt;github&lt;/code&gt; (which come from the post's tags), and find the &lt;code&gt;href&lt;/code&gt; for the link. We then lop off the last two URL segments to get the repo name and user to pass to our API call.&lt;/p&gt;

&lt;p&gt;Note the &lt;code&gt;callback=?&lt;/code&gt; which is required for the dynamic &lt;code&gt;&lt;a href="http://ajaxian.com/archives/jsonp-json-with-padding"&gt;JSONP&lt;/a&gt;&lt;/code&gt; callback which jQuery wires up to our inline callback function. In this function, the &lt;code&gt;data&lt;/code&gt; parameter is that JSON we looked at earlier. In this case we just create a couple of links that point back to GitHub and append them to the &lt;code&gt;.meta&lt;/code&gt; div for the post.&lt;/p&gt;

&lt;p&gt;Easy peasy!&lt;/p&gt;
</content>
    <published>2009-12-15T10:24:57-06:00</published>
    <category term="blog"/>
  </entry>
  <entry>
    <title>Speed up your API development, sniff your network calls on OSX with HTTPScoop</title>
    <link type="text/html" href="http://wynnnetherland.com/blog/speed-up-your-api-development-sniff-your-network-calls-on-osx-with-httpscoop" rel="alternate"/>
    <id>tag:wynnnetherland.com,2009-12-07:/blog/speed-up-your-api-development-sniff-your-network-calls-on-osx-with-httpscoop</id>
    <content type="html">&lt;p&gt;HTTPScoop from &lt;a href="http://www.tuffcode.com/index.html"&gt;Tuffcode&lt;/a&gt; is a neat way to see what network calls are going on from all the applications in OS X. It's perfect for debugging API calls or creating fixtures for API wrapper tests.
&lt;!--more--&gt;
&lt;object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0' width='530' height='323'&gt;&lt;param name='movie' value='http://screenr.com/Content/assets/screenr_1116090935.swf' /&gt;&lt;param name='flashvars' value='i=31855' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;embed src='http://screenr.com/Content/assets/screenr_1116090935.swf' flashvars='i=31855' allowFullScreen='true' width='530' height='323' pluginspage='http://www.macromedia.com/go/getflashplayer'&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;

&lt;p&gt;Download the &lt;a href="http://www.tuffcode.com/download.html"&gt;free trial&lt;/a&gt;. Full version is &lt;a href="http://www.tuffcode.com/buy.html"&gt;only $15 + tax&lt;/a&gt;.&lt;/p&gt;
</content>
    <published>2009-12-07T15:26:39-06:00</published>
    <category term="blog"/>
  </entry>
  <entry>
    <title>Add a retweet button to your Rails app easily with the Backtweets helper</title>
    <link type="text/html" href="http://wynnnetherland.com/blog/add-a-retweet-button-to-your-rails-app-easily-with-the-backtweets-helper" rel="alternate"/>
    <id>tag:wynnnetherland.com,2009-12-02:/blog/add-a-retweet-button-to-your-rails-app-easily-with-the-backtweets-helper</id>
    <content type="html">&lt;p&gt;On this blog, I use the excellent &lt;a href="http://wordpress.org/extend/plugins/socialize/"&gt;Socialize plugin&lt;/a&gt; to easily add social sharing buttons to each post. For Twitter, I chose to configure Socialize to use &lt;a href='http://backtweets.com'&gt;Backtweets&lt;/a&gt; for displaying tweet counts mainly because it's more configurable than the TweetMeme widget.&lt;/p&gt;

&lt;p&gt;When I needed a Backtweets widget for a client Rails application, I whipped up a quick plugin that provides an easy helper for writing all those JavaScript options.
&lt;!--more--&gt;&lt;/p&gt;

&lt;h3&gt;Installation&lt;/h3&gt;

&lt;p&gt;You can install the plugin from the &lt;a href="http://github.com/pengwynn/backtweets_helper"&gt;GitHub repo&lt;/a&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;script/plugin install git://github.com/pengwynn/backtweets_helper.git
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Displaying a tweet count in your view&lt;/h3&gt;

&lt;p&gt;To display a count of tweets that reference the current page, simply call the helper:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;%= backtweets_count %&amp;gt;
&amp;lt;%= backtweets_count(:size =&amp;gt; :small) %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The full set of options include:&lt;/p&gt;

&lt;table cellspacing="5" class='zebra'&gt;
  &lt;tr&gt;
    &lt;th&gt;Parameter&lt;/th&gt;
    &lt;th&gt;Default value&lt;/th&gt;
    &lt;th&gt;Description&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;url&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;Current URL&lt;/td&gt;
    &lt;td&gt;The URL to measure tweets for&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;Title of the current page&lt;/td&gt;
    &lt;td&gt;The title of the page for retweets&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;src&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;Leading text for retweets&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;via&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;If tweets contain '(via @BackType)'&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;links&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;If links should be opened in new windows&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;size&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;&lt;code&gt;large&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;Size of button (&lt;code&gt;large&lt;/code&gt; or &lt;code&gt;small&lt;/code&gt;)&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;api_key&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;Awe.sm API Key for custom URL shortener&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;short_url&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;Generated (bt.io)&lt;/td&gt;
    &lt;td&gt;Specify the pre-shortened URL that you would like to use&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;background&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;Button background color (e.g. &lt;code&gt;FFFFFF&lt;/code&gt;)&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;border&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;Button border color (e.g. &lt;code&gt;CCCCCC&lt;/code&gt;)&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;text&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;Button text color (e.g. &lt;code&gt;000000&lt;/code&gt;)&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;




&lt;h3&gt;Displaying recent comments, blogroll and search&lt;/h3&gt;


&lt;p&gt;The plugin also includes three other helpers to render user comments and blogroll widgets as well as a comment search widget:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;%= backtweets_comments('pengwynn') -%&amp;gt;
&amp;lt;%= backtweets_blogroll('pengwynn') -%&amp;gt;
&amp;lt;%= backtweets_search('ruby') -%&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;script type="text/javascript" src="http://widgets.backtype.com/pengwynn"&gt;&lt;/script&gt;


&lt;script type="text/javascript" src="http://widgets.backtype.com/pengwynn/blogs"&gt;&lt;/script&gt;


&lt;script type="text/javascript" src="http://widgets.backtype.com/comments?q=ruby"&gt;&lt;/script&gt;




&lt;br style="clear:both"&gt;


&lt;p&gt;If you would like to hit the Backtweets API for more info on your links and counts, check out the &lt;a href='http://github.com/squeejee/twitterland'&gt;Twitterland gem&lt;/a&gt;.&lt;/p&gt;
</content>
    <published>2009-12-02T13:09:05-06:00</published>
    <category term="blog"/>
  </entry>
</feed>
