<?xml version="1.0" encoding="UTF-8"?>

<rss version='2.0'
     xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">
    <channel>
        <!-- This XML Feed shows details for the page Encytemedia -->
        <creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/
          </creativeCommons:license>
        <title>Encytemedia</title>
        <description>&lt;p&gt;Team Typo&amp;#8217;s designer.&lt;/p&gt;
</description>
        
        <pubDate>Wed, 10 Aug 2005 08:59:16 -0700</pubDate>
        <lastBuildDate>Fri, 10 Nov 2006 19:30:39 -0800</lastBuildDate>
            
        <item>
            <title>Programming Politics</title>
            <link>http://swik.net/Typo/Encytemedia/Programming+Politics/cg0fa</link>
            <description>
            &lt;p&gt;Could you imagine, for a moment, what the political scene would be like without the social media giants Memeorandum, Reddit, Twitter, Digg, and Youtube?  What about the old media websites that &lt;a href=&quot;http://en.wikipedia.org/wiki/Cnn.com#Online&quot;&gt;started as an experiment&lt;/a&gt;, required a registration and charged for access to  content?  Yes, it’s hard to imagine, but it was only four short years ago that none of these social websites existed and the old media websites were merely second class citizens to their broadcast counterparts.  Meanwhile, while we’ve been caught up in the infinite streams of information, there has been a small, but highly motivated community of hackers opening up government in a whole new way, providing APIs ripe for mashups and experimentation.&lt;/p&gt;
&lt;h3&gt;The Post-Bush vs. Kerry Boom&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Reddit&quot;&gt;Reddit&lt;/a&gt; - &lt;em&gt;Founded 2005&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Techmeme&quot;&gt;Memeorandum &amp;amp; Techmeme&lt;/a&gt; - Founded September 12, 2005&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Digg&quot;&gt;Digg&lt;/a&gt; - Launched December 5, 2004&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Youtube&quot;&gt;Youtube&lt;/a&gt; - Created February 2005&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Twitter&quot;&gt;Twitter&lt;/a&gt; - Officially launched October 2006&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s been a whirlwind of a political season.  In 2004, we might never have seen a &lt;a href=&quot;http://www.reddit.com/search?q=bailout&amp;amp;amp;x=0&amp;amp;amp;y=0&amp;amp;amp;sort=top&quot;&gt;hoard of angry Redditors opposing the bailout&lt;/a&gt;;  We’d have to do some real digging to find a video of &lt;a href=&quot;http://www.youtube.com/watch?v=nH5ixmT83JE&quot;&gt;Jeremiah Wright saying “God Damn America”&lt;/a&gt;;  We’d be hard pressed to find &lt;a href=&quot;http://www.youtube.com/watch?v=Fe751kMBwms&quot;&gt;the speech that was the tipping point for “YES WE CAN”&lt;/a&gt; and the &lt;a href=&quot;http://www.youtube.com/watch?v=jjXyqcx-mYY&quot;&gt;subsequent song and video inspired by that speech&lt;/a&gt; that went on to win an Emmy.  We may have never been able to see &lt;a href=&quot;http://www.c-spanarchives.org/library/index.php?main_page=product_video_info&amp;amp;amp;products_id=195195-1&quot;&gt;Sarah Palin in the Alaskan Gubernatorial Debate in 2006&lt;/a&gt;.  You can almost conclude that anything that has happened in the last four years of politics can be found online in some form or fashion if your Google skills are up to par.&lt;/p&gt;

&lt;p&gt;Unlike today’s modern, up-to-the-minute websites, in 2004, old media websites such as &lt;a href=&quot;http://cnn.com&quot;&gt;CNN&lt;/a&gt;, &lt;a href=&quot;http://msnbc.com&quot;&gt;MSNBC&lt;/a&gt;, &lt;a href=&quot;http://www.foxnews.com/&quot;&gt;Fox News&lt;/a&gt; were not so flattering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CNN - Nov 5, 2004&lt;/strong&gt;
&lt;img src=&quot;http://alternateidea.com/assets/2008/10/2/20081002-eckxh9s5k7nfnedpin1w1ssy97.jpg&quot; alt=&quot;CNN Nov 5, 2004&quot;/&gt;
&lt;br/&gt;&lt;span&gt;Kudos to those who spotted Obama winning the Illinois Senate&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MSNBC - Oct 27, 2004&lt;/strong&gt;
&lt;img src=&quot;http://alternateidea.com/assets/2008/10/2/msnbc-oct-27-2004-thumb.jpg&quot; alt=&quot;MSNBC - Oct 27, 2004&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FOX News - Oct 14, 2004&lt;/strong&gt;
&lt;img src=&quot;http://alternateidea.com/assets/2008/10/2/foxnews-oct-14-2004-thumb.jpg&quot; alt=&quot;FOX News - Oct 14, 2004&quot;/&gt;&lt;/p&gt;

&lt;h3&gt;Pioneering the way.  Open APIs and Open Source efforts&lt;/h3&gt;

&lt;p&gt;I must admit, when I started to research Open Source efforts in government, I was skeptical.  I haven’t heard of much in passing, even given my rationale that tech news will always be accompanied by political news.  But, I pressed on and I was soon exposed to a small, but extremely active and knowledgeable community of Open Source hackers and organizations committed to bringing transparency to our government.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Govtrack: The Granddaddy of them all&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;From my research, Govtrack is the data provider for an overwhelming majority of the websites I found.  Govtrack describes itself:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;blockquote&gt;
        &lt;blockquote&gt;
            &lt;p&gt;An independent, non-partisan, non-commercial website launched in September 2004, GovTrack.us was the first website whose primary goal was to provide comprehensive legislative tracking for everyday citizens and was the first congressional transparency website to embrace Web 2.0 and principles of open data. &lt;/p&gt;
        &lt;/blockquote&gt;
    &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Earlier this year, Joshua Tauberer, the creator and primary maintainer of Govtrack decided to &lt;a href=&quot;http://www.govtrack.us/source.xpd&quot;&gt;open source the Govtrack application&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sunlight Foundation: The Incubator&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sunlight Foundation is the YCombinator of the open government movement (in spirit).  They give &lt;a href=&quot;http://www.sunlightfoundation.com/grants/&quot;&gt;small grants to help fund websites&lt;/a&gt; whose mission is to open government and provide transparency in some fashion.&lt;/p&gt;

&lt;h3&gt;A List of Resources&lt;/h3&gt;

&lt;h4&gt;Open Data &amp;amp; APIs&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://govtrack.us/data&quot;&gt;Govtrack Congressional Data&lt;/a&gt;&lt;/strong&gt; &lt;span&gt;[XML]&lt;/span&gt; - Everything from votes to the full text of speeches.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://services.sunlightlabs.com/api/&quot;&gt;Sunlight Labs API&lt;/a&gt;&lt;/strong&gt; &lt;span&gt;[XML, JSON]&lt;/span&gt; - A meta API that links candidates to external services such as Eventful, Govtrack, VoteSmart, etc.   Also provides a short bio.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://www.votesmart.org/services_api.php&quot;&gt;Project Votesmart API&lt;/a&gt;&lt;/strong&gt; &lt;span&gt;[XML, JSON]&lt;/span&gt; - A wealth of information including votes grouped by issues, state, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://www.votesmart.org/services_api.php&quot;&gt;Watchdog&lt;/a&gt;&lt;/strong&gt; &lt;span&gt;[N3, XML, JSON]&lt;/span&gt; - Recently started by Reddit’s Cofounder, &lt;a href=&quot;http://www.aaronsw.com/&quot;&gt;Aaron Swartz&lt;/a&gt;, contains all types of information relative to a candidate such as Interest Group Alignment, Earmark data, and Money.  This project can also be &lt;a href=&quot;http://www.aaronsw.com/&quot;&gt;found on GitHub&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://metavid.org/wiki/Help:Advanced#APIs&quot;&gt;Metavid US Legislative Footage API&lt;/a&gt;&lt;/strong&gt; &lt;span&gt;[RSS, XML]&lt;/span&gt; - A nice search API for public domain legislative videos.  Find when John McCain mention’s “my friends” and when Barack Obama mentions “change”.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://www.opensecrets.org/action/apis.php&quot;&gt;Open Secrects&lt;/a&gt;&lt;/strong&gt; &lt;span&gt;[XML, JSON]&lt;/span&gt; - In depth tracking of campaign contributions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;ftp://ftp.fec.gov/FEC/&quot;&gt;FEC Data&lt;/a&gt;&lt;/strong&gt; &lt;span&gt;[TXT, CSV, ZIP]&lt;/span&gt; - FTP access to all the data collected by the Federal Election Commission.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://www.followthemoney.org/services/index.phtml&quot;&gt;Follow The Money&lt;/a&gt;&lt;/strong&gt; &lt;span&gt;[XML]&lt;/span&gt; - State-level campaign donor data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Mailing Lists&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://groups.yahoo.com/group/govtrack/&quot;&gt;Govtrack developers list&lt;/a&gt;&lt;/strong&gt; - Get help with Govtrack resources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://groups.google.com/group/openhouseproject&quot;&gt;Open House Project&lt;/a&gt;&lt;/strong&gt; -A non-partisan group working to enhance public access to Congressional information.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://groups.google.com/group/poliparse&quot;&gt;Open House Project&lt;/a&gt;&lt;/strong&gt; -Dedicated to those who are parsing political data&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://groups.google.com/group/watchdog-volunteers&quot;&gt;Watchdog Volunteers&lt;/a&gt;&lt;/strong&gt; - Volunteer collaboration for &lt;a href=&quot;http://watchdog.net&quot;&gt;watchdog.net&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Other Resources&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://www.sourcewatch.org/index.php?title=Members_of_Congress_who_Twitter&quot;&gt;Members of Congress who Twitter&lt;/a&gt;&lt;/strong&gt; - Group effort to track congress on twitter fostered by the Sunlight Foundation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://www.facebook.com/group.php?gid=45606565313&quot;&gt;oGosh Facebook Group&lt;/a&gt;&lt;/strong&gt; - Open Government Open Source Hacking&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://publicmarkup.org&quot;&gt;Public Markup&lt;/a&gt;&lt;/strong&gt; - Review and comment on proposed bills before they are even introduced—or while they are pending—in Congress.&lt;/li&gt;
&lt;/ul&gt;
          &lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=ARhHM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=ARhHM&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=Np9kM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=Np9kM&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            
            <pubDate>Tue, 07 Oct 2008 02:48:15 -0700</pubDate>
        </item>
            
        <item>
            <title>Track House And Senate Votes On Twitter</title>
            <link>http://swik.net/Typo/Encytemedia/Track+House+And+Senate+Votes+On+Twitter/cfwp5</link>
            <description>&lt;p&gt;&lt;a href=&quot;http://twitter.com/legislate&quot;&gt;Track House And Senate Votes On Twitter&lt;/a&gt;.  I’ve put together a small script that parses vote data collected by &lt;a href=&quot;http://govtrack.us&quot;&gt;Govtrack.us&lt;/a&gt; and posts to twitter.&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=qLG0L&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=qLG0L&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=GE3LL&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=GE3LL&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            
            <pubDate>Thu, 25 Sep 2008 21:10:18 -0700</pubDate>
        </item>
            
        <item>
            <title>Protip: Color grep searches in terminal</title>
            <link>http://swik.net/Typo/Encytemedia/Protip%3A+Color+grep+searches+in+terminal/cblgc</link>
            <description>&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;
alias grep=&#039;GREP_COLOR=&amp;quot;1;37;41&amp;quot; LANG=C grep --color=auto&#039;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Stash this away in your Z Shell (~/.zshenv) or Bash environment (~/.bashrc) and set your preferred ANSI code.&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=3T0kxJ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=3T0kxJ&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=2MPfvJ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=2MPfvJ&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            
            <pubDate>Mon, 28 Jul 2008 11:59:35 -0700</pubDate>
        </item>
            
        <item>
            <title>MacRuby: The Path Forward</title>
            <link>http://swik.net/Typo/Encytemedia/MacRuby%3A+The+Path+Forward/b7p0u</link>
            <description>
            &lt;p&gt;&lt;a href=&quot;http://ruby.macosforge.org/trac/wiki/MacRuby&quot;&gt;MacRuby&lt;/a&gt; is quietly making progress. Destined to replace &lt;a href=&quot;http://rubycocoa.sourceforge.net/HomePage&quot;&gt;RubyCocoa&lt;/a&gt; as the de facto standard for writing Cocoa applications in Ruby; it’s shaping up to become more than just a fun experiment, it’ll soon be a viable choice.  &lt;/p&gt;
&lt;h3&gt;Burn Baby Burn&lt;/h3&gt;

&lt;p&gt;Unlike RubyCocoa, MacRuby is based on Ruby 1.9, powered by the YARV bytecode interpreter, resulting in significantly faster execution times.  From the &lt;a href=&quot;http://ruby.macosforge.org/trac/wiki/WhyMacRuby&quot;&gt;“Why MacRuby”&lt;/a&gt; page:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;In MacRuby, all Ruby classes and objects are actually Objective-C classes and objects. There is no need to create costly proxies, convert objects and cache instances. A Ruby object can be toll-free casted at the C level as an Objective-C object, and the Ruby VM can also handle incoming Objective-C objects without conversion.&lt;/p&gt;
    
    &lt;p&gt;Also, the primitive Ruby classes, such as String, Array and Hash in MacRuby have been re-implemented on top of their Cocoa equivalents, respectively NSString, NSArray and NSDictionary. As an example, all strings in MacRuby are Cocoa strings, and can be passed to underlying C or Objective-C APIs that expect Cocoa strings without requiring a conversion. And it is possible to call any method of the String interface on any Cocoa string too.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s exciting news. MacRuby applications significantly outperform RubyCocoa applications and aim to enable the creation of full-fledged Mac OS X applications which do not sacrifice performance in order to enjoy the benefits of using Ruby. &lt;/p&gt;

&lt;h3&gt;Syntax&lt;/h3&gt;

&lt;p&gt;Considering String, Array, and Hash/Dictionary require no conversion, we get both the Ruby methods and the Objective-C methods without needing to cast back and forth.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
#MacRuby
components = &amp;quot;foo/bar/baz&amp;quot;.pathComponents

# RubyCocoa
components = &amp;quot;foo/bar/baz&amp;quot;.to_ns.pathComponents
# or...
components = OSX::NSString.stringWithString(&amp;quot;foo/bar/baz&amp;quot;).pathComponents

#Objective-C
NSArray *components = [@&amp;quot;foo/bar/baz&amp;quot; pathComponents];
# or...
NSArray *components = [[NSString stringWithString:@&amp;quot;foo/bar/baz&amp;quot;] pathComponents];
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And the biggest change is probably keyed arguments.  I’ve grown to like keyed arguments in Objective-C because of their descriptive nature.  Normally you can look at a method definition and determine what’s what.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
def fetch_url(url, timeout)
  ...
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;However, unless you look up the method definition in the source or documentation, you don’t fully understand what the second argument encompasses during invocation. &lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;obj.fetch_url(&amp;quot;http://foo.com&amp;quot;, 60)&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This is where keyed arguments come into play.  Take a look at how this method would be composed in Objective-C.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
- (void)fetchURL:(NSURL *)url timeout:(float)theTimeout {
  ...
}

[obj fetchURL:[NSURL URLWithString:@&amp;quot;http://foo.com&amp;quot;] timeout:60.0];
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And finally, we could write this method in MacRuby with the new keyed arguments syntax.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
def fetch_url(url, timeout:timeout)
...
end

obj.fetch_url(&amp;quot;http://foo.com&amp;quot;, timeout:60.0)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We get the added benefit of clarity at the cost of verbosity.  And finally, there is an additional nuance: CamelCase or under_score.  I think I’ve settled with camelCase for now, because it’s not possible (practical ATM) to use underscored Objective-C methods, however, I’ve been told it’s being considered.&lt;/p&gt;

&lt;h3&gt;The Big Macs: macruby, macrake, macirb, macgem&lt;/h3&gt;

&lt;p&gt;Once you’ve set yourself up with MacRuby, you should know your programs are given a prefix of &lt;strong&gt;mac&lt;/strong&gt; unless you specify a different prefix when compiling by hand.  This means we’ll need to use &lt;code&gt;macruby&lt;/code&gt; to invoke our Ruby scripts written for MacRuby.  &lt;/p&gt;

&lt;p&gt;In a completely convoluted example, lets grab the name of every application running on our machine; print it’s application name, and replace “Applications” in it’s path with “FOO”.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;
framework &#039;AppKit&#039;

NSWorkspace.sharedWorkspace.launchedApplications.each do |app|
  appname  = app[&amp;quot;NSApplicationName&amp;quot;]
  fullpath = app[&amp;quot;NSApplicationPath&amp;quot;]
  puts appname
  puts fullpath.stringByReplacingOccurrencesOfString(&amp;quot;Applications&amp;quot;, withString:&amp;quot;FOO&amp;quot;)
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Save this file and run with &lt;code&gt;macruby thisfile.rb&lt;/code&gt;.  You should see a list of applications running and their paths, with FOO replacing Applications.  Got it?  Schweet!&lt;/p&gt;

&lt;p&gt;&lt;code&gt;framework&lt;/code&gt; is a new method of Kernel that allows you to import any framework, including your custom frameworks.  In this example, we’re including the AppKit framework and iterating over the launched applications.&lt;/p&gt;

&lt;h4&gt;Gems: A ruby in the rough&lt;/h4&gt;

&lt;p&gt;At the time of writing this article, &lt;strong&gt;it’s not possible to use rubygems or macruby gems&lt;/strong&gt; in the traditional &lt;code&gt;require&lt;/code&gt; and run method.  However, you can vendor your gems and include them directly which should work perfectly fine.  This is a bug that will be addressed very soon.&lt;/p&gt;

&lt;h3&gt;Get Involved&lt;/h3&gt;

&lt;p&gt;MacRuby is an official effort by Apple to make Ruby a first class citizen in Cocoa.  It’s still very early in development and you’re definitely encouraged to start playing with it, writing about it, and &lt;a href=&quot;http://ruby.macosforge.org/trac/wiki/MacRuby&quot;&gt;getting involved in the project&lt;/a&gt;.  And one final note, you can join the very helpful #ruby-osx channel on freenode.net if you’re looking for assistance.&lt;/p&gt;
          &lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=uh79zI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=uh79zI&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=6556xI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=6556xI&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            
            <pubDate>Tue, 17 Jun 2008 14:14:09 -0700</pubDate>
        </item>
            
        <item>
            <title>ActiveRecord Ported To Objective-C</title>
            <link>http://swik.net/Typo/Encytemedia/ActiveRecord+Ported+To+Objective-C/b6wlo</link>
            <description>&lt;p&gt;&lt;a href=&quot;http://code.google.com/p/activerecord/&quot;&gt;ActiveRecord Ported To Objective-C&lt;/a&gt; brought to us by &lt;a href=&quot;http://ninjakitten.us&quot;&gt;Ninja Kitten&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=sODWcI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=sODWcI&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=HYvFEI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=HYvFEI&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            
            <pubDate>Sun, 08 Jun 2008 14:54:54 -0700</pubDate>
        </item>
            
        <item>
            <title>Browser-based Developer Tools Come Full Circle</title>
            <link>http://swik.net/Typo/Encytemedia/Browser-based+Developer+Tools+Come+Full+Circle/b4vpy</link>
            <description>&lt;p&gt;With the release of Opera’s &lt;a href=&quot;http://www.opera.com/products/dragonfly/&quot;&gt;DragonFly&lt;/a&gt;, IE 8’s &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/cc304131.aspx&quot;&gt;Developer tools&lt;/a&gt;, Safari’s/Webkit’s &lt;a href=&quot;http://webkit.org/blog/108/yet-another-one-more-thing-a-new-web-inspector/&quot;&gt;Web Inspector&lt;/a&gt; and &lt;a href=&quot;http://trac.webkit.org/wiki/Drosera&quot;&gt;Drosera&lt;/a&gt;; and the Grand Daddy of them all, &lt;a href=&quot;http://www.getfirebug.com/&quot;&gt;Firebug&lt;/a&gt; – we’ve now come full circle.&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=jGcoOH&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=jGcoOH&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=dZFi1H&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=dZFi1H&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            
            <pubDate>Tue, 06 May 2008 16:07:47 -0700</pubDate>
        </item>
            
        <item>
            <title>Automating Rick Rolls with launchd</title>
            <link>http://swik.net/Typo/Encytemedia/Automating+Rick+Rolls+with+launchd/b4sgf</link>
            <description>
            &lt;p&gt;Lets face it:  Your coworkers can be a real pain in the ass sometimes.  What better way 
to remind them of this than automated Rick rolls?  They’re likely to never know what hit them.&lt;/p&gt;
&lt;h3&gt;What is launchd?&lt;/h3&gt;

&lt;p&gt;According to the &lt;a href=&quot;http://developer.apple.com/macosx/launchd.html&quot;&gt;launchd guide on Apple’s website&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;The launchd daemon takes over many tasks from cron, xinetd, mach_init, and init, 
    which are UNIX programs that traditionally have handled system initialization, called 
    systems scripts, run startup items, and generally prepared the system for the user&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;launchd stores tasks in &lt;code&gt;plist&lt;/code&gt; format.  You can find your agents in ~/Library/LaunchAgents.
Here is a typical launcd file that will open iTunes every 60 seconds:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;html&quot;&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
  &amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;
  &amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;
  &amp;lt;dict&amp;gt;
    &amp;lt;key&amp;gt;Label&amp;lt;/key&amp;gt;
    &amp;lt;string&amp;gt;com.alternateidea.article.test&amp;lt;/string&amp;gt;
    &amp;lt;key&amp;gt;ProgramArguments&amp;lt;/key&amp;gt;
    &amp;lt;array&amp;gt;
        &amp;lt;string&amp;gt;/usr/bin/open&amp;lt;/string&amp;gt;
        &amp;lt;string&amp;gt;-b&amp;lt;/string&amp;gt;
    &amp;lt;string&amp;gt;com.apple.iTunes&amp;lt;/string&amp;gt;
    &amp;lt;/array&amp;gt;
    &amp;lt;key&amp;gt;RunAtLoad&amp;lt;/key&amp;gt;
    &amp;lt;false/&amp;gt;
    &amp;lt;key&amp;gt;StartInterval&amp;lt;/key&amp;gt;
    &amp;lt;integer&amp;gt;60&amp;lt;/integer&amp;gt;
  &amp;lt;/dict&amp;gt;
  &amp;lt;/plist&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Obviously this would be seriously annoying, but for the purpose of this demonstration, 
save this file as “com.alternateidea.article.test” in your ~/Library/LaunchAgents folder.&lt;/p&gt;

&lt;p&gt;This script won’t run automatically, so we need to load it up first using the &lt;code&gt;launchctl&lt;/code&gt; 
program:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;launchctl load ~/Library/LaunchAgents/com.alternateidea.article.test.plist&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Our agent is loaded up now.  After 60 seconds, you should see iTunes.app open.  Pretty nice, eh?&lt;/p&gt;

&lt;p&gt;Ok, so we don’t want to keep running this agent.  Lets unload it:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;launchctl unload ~/Library/LaunchAgents/com.alternateidea.article.test.plist&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Never gonna give you up.  Never gonna automate your Mac.&lt;/h3&gt;

&lt;p&gt;So, here’s the trick:  Wait until your coworker goes to lunch or you know they’ll be out of the 
office for 10 minutes or so.  Then, let the mischief begin. &lt;/p&gt;

&lt;p&gt;The first thing we need to do is create our agent:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;html&quot;&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
  &amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;
  &amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;
  &amp;lt;dict&amp;gt;
    &amp;lt;key&amp;gt;Label&amp;lt;/key&amp;gt;
    &amp;lt;string&amp;gt;com.youtube.rickroll&amp;lt;/string&amp;gt;
    &amp;lt;key&amp;gt;ProgramArguments&amp;lt;/key&amp;gt;
    &amp;lt;array&amp;gt;
        &amp;lt;string&amp;gt;/usr/bin/open&amp;lt;/string&amp;gt;
        &amp;lt;string&amp;gt;-b&amp;lt;/string&amp;gt;
            &amp;lt;string&amp;gt;com.apple.Safari&amp;lt;/string&amp;gt;
            &amp;lt;string&amp;gt;http://www.youtube.com/watch?v=eBGIQ7ZuuiU&amp;lt;/string&amp;gt;
    &amp;lt;/array&amp;gt;
    &amp;lt;key&amp;gt;RunAtLoad&amp;lt;/key&amp;gt;
    &amp;lt;false/&amp;gt;
    &amp;lt;key&amp;gt;StartInterval&amp;lt;/key&amp;gt;
    &amp;lt;integer&amp;gt;1800&amp;lt;/integer&amp;gt;
  &amp;lt;/dict&amp;gt;
  &amp;lt;/plist&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Everything should be pretty obvious in this plist.  The &lt;code&gt;StartInterval&lt;/code&gt; is in seconds.  I 
want to be an asshole every 30 minutes (1800) seconds.  If you want to be a bigger asshole 
(or &lt;a href=&quot;http://www.youtube.com/watch?v=9xhsKB0rvXg&quot;&gt;Son of a Bitch&lt;/a&gt;) you could set this to run in 
shorter intervals. &lt;/p&gt;

&lt;p&gt;Now, we need to save this and load it up on your coworkers computer.  Save this 
to &lt;code&gt;~/Library/USERNAME/LaunchAgents/com.youtube.rickroll&lt;/code&gt;.  And load it up:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
  launchctl load ~/Library/LaunchAgents/com.youtube.rickroll.plist
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you want to test and make sure everything is in working order, you can run:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;launchctl start com.youtube.rickroll&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; Did you just Rick Roll yourself?&lt;/p&gt;

&lt;p&gt;Now, if your test ran successfully slip back to your desk and wait in anticipation for that 
awesome intro.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclaimer:  If you destroy your coworkers computer or end up scrapping in the street, I’m not responsible.&lt;/strong&gt;&lt;/p&gt;
          &lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=MetDCH&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=MetDCH&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=E5AZ9H&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=E5AZ9H&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            
            <pubDate>Thu, 01 May 2008 16:07:01 -0700</pubDate>
        </item>
            
        <item>
            <title>A strftime for Prototype</title>
            <link>http://swik.net/Typo/Encytemedia/A+strftime+for+Prototype/b2ok6</link>
            <description>&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;
Object.extend(Date.prototype, {
  strftime: function(format) {
    var day = this.getUTCDay(), month = this.getUTCMonth();
    var hours = this.getUTCHours(), minutes = this.getUTCMinutes();
    function pad(num) { return num.toPaddedString(2); };

    return format.gsub(/\%([aAbBcdDHiImMpSwyY])/, function(part) {
      switch(part[1]) {
        case &#039;a&#039;: return $w(&amp;quot;Sun Mon Tue Wed Thu Fri Sat&amp;quot;)[day]; break;
        case &#039;A&#039;: return $w(&amp;quot;Sunday Monday Tuesday Wednesday Thursday Friday Saturday&amp;quot;)[day]; break;
        case &#039;b&#039;: return $w(&amp;quot;Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec&amp;quot;)[month]; break;
        case &#039;B&#039;: return $w(&amp;quot;January February March April May June July August September October November December&amp;quot;)[month]; break;
        case &#039;c&#039;: return this.toString(); break;
        case &#039;d&#039;: return this.getUTCDate(); break;
        case &#039;D&#039;: return pad(this.getUTCDate()); break;
        case &#039;H&#039;: return pad(hours); break;
        case &#039;i&#039;: return (hours === 12 || hours === 0) ? 12 : (hours + 12) % 12; break;
        case &#039;I&#039;: return pad((hours === 12 || hours === 0) ? 12 : (hours + 12) % 12); break;
        case &#039;m&#039;: return pad(month + 1); break;
        case &#039;M&#039;: return pad(minutes); break;
        case &#039;p&#039;: return hours &amp;gt; 11 ? &#039;PM&#039; : &#039;AM&#039;; break;
        case &#039;S&#039;: return pad(this.getUTCSeconds()); break;
        case &#039;w&#039;: return day; break;
        case &#039;y&#039;: return pad(this.getUTCFullYear() % 100); break;
        case &#039;Y&#039;: return this.getUTCFullYear().toString(); break;
      }
    }.bind(this));
  }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; Bugs fixed.  Thanks &lt;a href=&quot;http://andrewdupont.net/&quot;&gt;Andrew&lt;/a&gt; and &lt;a href=&quot;http://www.designkitchen.com/&quot;&gt;Stephen&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, some of my old and new code has been posted on &lt;a href=&quot;http://github.com/Caged/javascript-bits/&quot;&gt;GitHub&lt;/a&gt;.  You might find something useful.&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=mrCGDUE&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=mrCGDUE&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=PCScrXE&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=PCScrXE&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            
            <pubDate>Fri, 08 Feb 2008 15:37:45 -0800</pubDate>
        </item>
            
        <item>
            <title>DoubleClick and Define using Apple Dictionary</title>
            <link>http://swik.net/Typo/Encytemedia/DoubleClick+and+Define+using+Apple+Dictionary/b2ok5</link>
            <description>&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;
var selection;
if(window.getSelection)
  selection = window.getSelection();
else if(document.selection)
  selection = document.selection.createRange();

document.observe(&amp;quot;dblclick&amp;quot;, function() {
  if(navigator.userAgent.include(&amp;quot;Macintosh&amp;quot;)) {
      location.href = &amp;quot;dict://&amp;quot; + selection;
    }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;A quick (and probably dirty) Prototype-based hack allowing Mac users to get the definition of any word by double clicking it.&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=flJyL&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=flJyL&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=25kKL&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=25kKL&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            
            <pubDate>Fri, 08 Feb 2008 15:37:44 -0800</pubDate>
        </item>
            
        <item>
            <title>Processing in Action</title>
            <link>http://swik.net/Typo/Encytemedia/Processing+in+Action/b2f89</link>
            <description>&lt;p&gt;&amp;lt;object height=&quot;225&quot; width=&quot;400&quot;&gt; &amp;lt;param /&gt;   &amp;lt;param /&gt;   &amp;lt;param /&gt;  &amp;lt;param /&gt;&amp;lt;/object&gt;&lt;/p&gt;

&lt;p&gt;A beautiful, organic animation by &lt;a href=&quot;http://www.flight404.com/blog/&quot;&gt;Flight404&lt;/a&gt; created using &lt;a href=&quot;http://processing.org&quot;&gt;Processing&lt;/a&gt;.&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=M4UyL&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=M4UyL&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=jMmvL&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=jMmvL&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            
            <pubDate>Mon, 04 Feb 2008 14:35:09 -0800</pubDate>
        </item>
            
        <item>
            <title>Calling Ruby from JavaScript</title>
            <link>http://swik.net/Typo/Encytemedia/Calling+Ruby+from+JavaScript/bzycy</link>
            <description>&lt;p&gt;Aaron Patterson shows us how to &lt;a href=&quot;http://tenderlovemaking.com/2008/01/03/happy-new-year-rkelly-progress-report/&quot;&gt;define ruby methods which can be called from JavaScript&lt;/a&gt; using RKelly.&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=VJo7L&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=VJo7L&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=WvYTL&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=WvYTL&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            
            <pubDate>Tue, 08 Jan 2008 16:15:29 -0800</pubDate>
        </item>
            
        <item>
            <title>Pimp My JavaScript Skillz</title>
            <link>http://swik.net/Typo/Encytemedia/Pimp+My+JavaScript+Skillz/bzuu3</link>
            <description>&lt;p&gt;Dustin might not surprise you at your house with a book in hand, but he’ll damn sure send you his innermost fu in the form of a shiny yellow and black book.  It’s an excellent read if you’re looking to put more &lt;a href=&quot;http://www.rickjames.com/&quot;&gt;funk&lt;/a&gt; in your functions and class in your classes.  Check out &lt;a href=&quot;http://jsdesignpatterns.com&quot;&gt;“Pro JavaScript Design Patterns”&lt;/a&gt; by Dustin and Ross Harmes.&lt;/p&gt;

&lt;p&gt;&amp;mdash;I’m Justin Palmer and I approve this message.&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=kmFVZYD&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=kmFVZYD&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=svrkFQD&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=svrkFQD&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            
            <pubDate>Tue, 08 Jan 2008 10:57:46 -0800</pubDate>
        </item>
            
        <item>
            <title>Widgets the YUI Way</title>
            <link>http://swik.net/Typo/Encytemedia/Widgets+the+YUI+Way/bysbg</link>
            <description>
            &lt;p&gt;Why are there so many lightbox implementations?  Why are there numerous “versions” of widgets?  Do you know which fork is the latest and greatest?  Probably not, and for good reason.  The current system sucks.&lt;/p&gt;
&lt;p&gt;Over the past few days I’ve been studying the &lt;a href=&quot;http://developer.yahoo.com/yui/&quot;&gt;YUI library&lt;/a&gt; and it’s accompanying ecosystem.  It’s truly a well oiled machine.  But besides being developed by a web giant, what makes it tick?  There are numerous things I’ve come to conclude, and it shines a light on why widget efforts by Prototype developers et al have largely failed.&lt;/p&gt;

&lt;h3&gt;The public face&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Documentation:&lt;/strong&gt; This is the most obvious one, but the one we get wrong 90% of the time.  If you’ve written a widget, you have intimate knowledge of it’s inner workings and how to use it, knowledge your audience doesn’t have.  We make the assumption that consumers will understand our products on the same level we do.  This isn’t the case.  Even YUI beta code has full documentation and a host of examples.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Centralization:&lt;/strong&gt; If you want a YUI calendar control, where is the first place you look?  On the YUI site.  If you search Google for YUI, you get the official YUI calendar and also a collection of blog post showing some cool tricks and general usage of the &lt;em&gt;official&lt;/em&gt; control.  If you want to learn how to use the YUI Calendar control, where is the first place you look?  The YUI site.  It’s all organized and centralized.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standardization:&lt;/strong&gt; Everything is standardized.  Everything from how articles are written and structured to the release cycles and code conventions.  Take a look at the &lt;a href=&quot;http://developer.yahoo.com/yui/dragdrop/&quot;&gt;Drag and Drop&lt;/a&gt; landing page and then the &lt;a href=&quot;http://developer.yahoo.com/yui/dom/&quot;&gt;Dom Collection&lt;/a&gt; landing page.  Notice the clear and concise explanation of &lt;em&gt;what&lt;/em&gt; the component is.  Also note the bullet points for quickly navigating a page, the “Getting Started” headers, the cheat sheets and the examples—It’s extremely helpful. Don’t forget about &lt;a href=&quot;http://video.yahoo.com/video/group?gid=133414&quot;&gt;YUI Theatre&lt;/a&gt; either.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;The code&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Modularity:&lt;/strong&gt; The code is extremely well structured.  It’s not all or nothing.  I’ve not been a fan of deep namespacing (e.g. YAHOO.widget.Menu), but in this context I think it’s important.  It not only has utility, it creates a visual hierarchy with only small overhead.  I definitely prefer common utilities such as &lt;code&gt;$(&#039;foo)&lt;/code&gt; and baked in enumerations (augmenting native prototypes), but I’m fine with doing &lt;code&gt;var menu = new YAHOO.widget.Menu(&quot;mymenu&quot;);&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Event Driven:&lt;/strong&gt; This one was enlightening for me.  Most of YUI’s widgets &lt;a href=&quot;http://developer.yahoo.com/yui/docs/menu.js.html&quot;&gt;rely heavily on custom events&lt;/a&gt; to pass messages internally and externally.  Notice how all of the “interesting moments”, both private and public are handled through events setup in a Menu’s initialization routine.  None of them are directly invoked by another method.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Inline documentation:&lt;/strong&gt; I debated whether this was important enough to warrant a bullet point (it was encompassed with the public api docs), but as I continued to study the code the inline API comments were indispensable.  Whenever I wondered what an argument meant, I could see it documented a few lines above where I was scanning the code.  Check out this snippet from YUI’s &lt;code&gt;CustomEvent&lt;/code&gt; object.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;
    /**
     * Notifies the subscribers.  The callback functions will be executed
     * from the scope specified when the event was created, and with the 
     * following parameters:
     *   &amp;lt;ul&amp;gt;
     *   &amp;lt;li&amp;gt;The type of event&amp;lt;/li&amp;gt;
     *   &amp;lt;li&amp;gt;All of the arguments fire() was executed with as an array&amp;lt;/li&amp;gt;
     *   &amp;lt;li&amp;gt;The custom object (if any) that was passed into the subscribe() 
     *       method&amp;lt;/li&amp;gt;
     *   &amp;lt;/ul&amp;gt;
     * @method fire 
     * @param {Object*} arguments an arbitrary set of parameters to pass to 
     *                            the handler.
     * @return {boolean} false if one of the subscribers returned false, 
     *                   true otherwise
     */
    fire: function() {
     //...
   }
   //...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Notice the method signature for &lt;code&gt;fire&lt;/code&gt;.  At first glance it looks like it doesn’t take any arguments, but take a look at the signature in &lt;a href=&quot;http://developer.yahoo.com/yui/docs/YAHOO.util.CustomEvent.html#fire&quot;&gt;the documentation&lt;/a&gt;.  Pretty nifty trick.  Notice this line in the comments: &lt;code&gt;@param {Object*} arguments&lt;/code&gt;.  The * tells &lt;a href=&quot;http://code.google.com/p/jsdoc-toolkit/&quot;&gt;JsDoc Toolkit&lt;/a&gt; to treat the following word as an argument for the method.  JsDoc Toolkit can do some &lt;a href=&quot;http://code.google.com/p/jsdoc-toolkit/wiki/DocExamples&quot;&gt;really cool stuff&lt;/a&gt; and has made vast improvements since it’s inception as &lt;a href=&quot;http://jsdoc.sourceforge.net/&quot;&gt;JSDoc&lt;/a&gt;.  It also now speaks Prototype.&lt;/p&gt;

&lt;h3&gt;Summing up&lt;/h3&gt;

&lt;p&gt;We can learn a lot from YUI, it has some of the &lt;a href=&quot;http://www.crockford.com/&quot;&gt;smartest&lt;/a&gt; &lt;a href=&quot;http://nate.koechley.com/blog/&quot;&gt;minds&lt;/a&gt; in the industry working on it.  I encourage you to have a look yourself, study it, and take note of their practices and apply them to your own ventures in the world of widgets.&lt;/p&gt;
          &lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=PpVoL&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=PpVoL&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=wNTZL&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=wNTZL&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            
            <pubDate>Thu, 27 Dec 2007 17:45:03 -0800</pubDate>
        </item>
            
        <item>
            <title>IE 8 Passes Acid 2</title>
            <link>http://swik.net/Typo/Encytemedia/IE+8+Passes+Acid+2/byeql</link>
            <description>&lt;p&gt;&lt;a href=&quot;http://blogs.msdn.com/ie/archive/2007/12/19/internet-explorer-8-and-acid2-a-milestone.aspx&quot;&gt;IE 8 PAsses the Acid 2 Test&lt;/a&gt; for those not keeping tabs on things.&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=GymVQZC&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=GymVQZC&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=UGmIlpC&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=UGmIlpC&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            
            <pubDate>Sun, 23 Dec 2007 15:44:47 -0800</pubDate>
        </item>
            
        <item>
            <title>I&#039;m Officially a Portland Local</title>
            <link>http://swik.net/Typo/Encytemedia/I%27m+Officially+a+Portland+Local/bvxqi</link>
            <description>
            &lt;p&gt;2,300+ miles, 3 1/2 days and 10 states later, we’ve completed our move from Memphis, TN to Portland, OR.&lt;/p&gt;
&lt;p&gt;Wow, &lt;a href=&quot;http://flickr.com/photos/encyte/&quot;&gt;what a drive&lt;/a&gt;!  The Oregon countryside is breathtaking.  Wyoming and Utah were also beautiful, but the drive alongside the Columbia River in Oregon made the trip that much more enjoyable. &lt;/p&gt;

&lt;p&gt;My wife and I, along with a long-time friend of ours, took one of the most amazing cross-country drives you could take.  We’ve been planning the move to Portland for some time, and now we’re officially here.  &lt;/p&gt;

&lt;p&gt;One of the primary reasons for moving to Portland was to consolidate &lt;a href=&quot;http://activereload.net&quot;&gt;Active Reload&lt;/a&gt; into one city.  We’ll be sharing an office with the talented guys over at &lt;a href=&quot;http://kongregate.com&quot;&gt;Kongregate&lt;/a&gt; and couple people from &lt;a href=&quot;http://caboo.se&quot;&gt;Caboo.se&lt;/a&gt;.  I expect some exciting things to happen as a result of this.&lt;/p&gt;

&lt;p&gt;In addition to the Active Reload news, Portland is just a great city full of talented people, not to mention the excellent food and topnotch beer.  If you’re in Portland, maybe we’ll get together and experience some of that great food and beer. &lt;/p&gt;
          &lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=uwDEYxC&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=uwDEYxC&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=rr46zeC&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=rr46zeC&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            
            <pubDate>Mon, 03 Dec 2007 14:17:22 -0800</pubDate>
        </item>
            
        <item>
            <title>Your Momma&#039;s So Fat...Prototype vs. JQuery Edition</title>
            <link>http://swik.net/Typo/Encytemedia/Your+Momma%27s+So+Fat...Prototype+vs.+JQuery+Edition/btfj7</link>
            <description>
            &lt;p&gt;The time has come once again to clear the air of fallacious statements by the &lt;a href=&quot;http://www.google.com/search?&amp;amp;amp;q=prototype+vs.+jquery&quot;&gt;myriad of people&lt;/a&gt; comparing Prototype to JQuery.  I’m all for comparison; I believe it’s healthy to have choices in life.  The problem usually isn’t Prototype or JQuery, it’s the article comparing them.&lt;/p&gt;
&lt;h3&gt;Fair and balanced&lt;/h3&gt;

&lt;p&gt;If you’ve spent your nights watching Fox News, you probably have an ill-advised definition of “Fair and Balanced”.  Hell, we can’t have a decent discussion about Prototype, JQuery, Mootools, etc, without the zombie loyalist coming along and flooding the comments with “JQuery is Better”, “You should use Prototype”, etc.  Stop it!  Please, for the love of the web, stop doing this!  It’s reminds me of the Ron Paul minions  during a political discussion on the web.  How are you forwarding the cause or providing anything relevant to the discussion by spouting off one-liners?  We all have the same goals in mind.  We all want to improve the web for developers using a language we love.  &lt;/p&gt;

&lt;h3&gt;How not to write a comparison&lt;/h3&gt;

&lt;p&gt;I stumbled upon &lt;a href=&quot;http://www.quarkruby.com/2007/11/6/why-i-moved-from-prototype-to-jquery&quot;&gt;this post&lt;/a&gt; today.  This is not fair, nor balanced.  It’s a one sided argument that makes very little or no effort to define &lt;em&gt;why&lt;/em&gt;.  It basically shows how you can perform some tasks in JQuery and implies that it’s not possible or harder to do in Prototype.  If you know better, they both perform fairly well doing the tasks shown in the article.  Lets examine the article’s claims.&lt;/p&gt;

&lt;h4&gt;Behavior Driven Development&lt;/h4&gt;

&lt;p&gt;This has absolutely nothing to do with Behavior Driven Development.  Behavior Driven Development is a form of testing.  Please see Dave Astels paper titled &lt;a href=&quot;http://blog.daveastels.com/files/BDD_Intro.pdf&quot;&gt;“A New Look at Test-Driven Development”&lt;/a&gt;(PDF) if you want an overview of BDD.&lt;/p&gt;

&lt;p&gt;If this isn’t BDD, then what is it?  What I believe the author intended to say was that you can have a “Behavior Layer”, which is something completely different.  A Behavior layer is basically a way to define behaviors separate of your content, structure and style.  But the article states that as a reason for swapping, passively implying that this isn’t possible with Prototype.   It is, here’s how:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;
$(element).observe(&#039;click&#039;, function() { });
// Or custom events
$(element).observe(&#039;article:updated&#039;, function() { });
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I could go on to write a JQuery example of custom events, but I don’t know enough JQuery to make a comparison.  If you provide one in the comments, I’ll gladly post it.&lt;/p&gt;

&lt;h4&gt;A Complex Example&lt;/h4&gt;

&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;
//JQuery
$(&amp;quot;div.speciallinks&amp;quot;).attr(&amp;quot;href&amp;quot;,&amp;quot;javascript:void(0)&amp;quot;)
    .click(function() {console.log(&amp;quot;div.speciallinks clicked&amp;quot;);})
    .hover(function(){$(this).addClass(&amp;quot;hovered&amp;quot;);}, 
             function(){$(this).removeClass(&amp;quot;hovered&amp;quot;);});
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&quot;http://alternateidea.com/assets/2007/11/7/duct-tape-man.jpg&quot; alt=&quot;Duct Tape Man&quot;/&gt;
I can’t even begin to describe how bad this is.  You should never write code like this.  There is no beauty in this example, and at best it’s barley legible. This is what I like to call a “Duct Tape” example.  Duct Tape is great, but you wouldn’t use it to fix a leaky roof. &lt;/p&gt;

&lt;p&gt;While at RubyConf, &lt;a href=&quot;http://relevancellc.com/blog&quot;&gt;Stuart Holloway&lt;/a&gt; talked about code that &lt;em&gt;”just doesn’t look right”&lt;/em&gt;.  If you balled this up into a function, I believe he would have called this a &lt;em&gt;”poorly hung method”&lt;/em&gt;.  There is no beauty in this example.  I’d love to go on to explain what code beauty means, but Marcel Molina has already done this much better than a common man like myself can.  I highly encourage you to check out Marcel’s talk &lt;a href=&quot;http://rubyhoedown2007.confreaks.com/session09.html&quot;&gt;“What Makes Code Beautiful?”&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The firs thing I can’t understand is if &lt;code&gt;div.speciallinks&lt;/code&gt; is an element, or a collection of elements because JQuery uses &lt;code&gt;$&lt;/code&gt; for both and from my understanding can either return an collection of elements or a single element (Array or JQuery object).  I’ll write this in Prototype, assuming &lt;code&gt;div.speciallinks&lt;/code&gt; is a collection.  Also, &lt;code&gt;javascript:void(0)&lt;/code&gt; is just &lt;a href=&quot;http://www.wait-till-i.com/2005/06/21/six-javascript-features-we-do-not-need-any-longer/&quot;&gt;bad practice&lt;/a&gt;.  I could write this a few other ways, but to keep consistent with the example above, here is a condensed version.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;
//Prototype
$$(&#039;div.speciallinks&#039;).each(function(link) {
  link.observe(&#039;click&#039;, function(event) { event.stop(); console.log(&#039;div.speciallinks clicked&#039;); }
  link.observe(&#039;mouseover&#039;, function() { this.addClassName(&#039;hovered&#039;); }
  link.observe(&#039;mouseout&#039;, function() { this.removeClassName(&#039;hovered&#039;); }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Chaining everything together is a nice trick, works well up until a certain point–the point where no one can comprehend what you’re doing.  Choosing LOC over legibility is a sure fire way to end up with a child only a mother could love.&lt;/p&gt;

&lt;h4&gt;MVC+J&lt;/h4&gt;

&lt;p&gt;Really?  Come on, this is fairly convoluted.  Prototype has little to do with Rails other than the fact it’s included by default, and you &lt;em&gt;can&lt;/em&gt; use the Ruby helpers.  For those of you who want to use JQuery with Rails and want Ruby helpers yourself, there is &lt;a href=&quot;http://rubyforge.org/projects/jq4r/&quot;&gt;jq4r&lt;/a&gt;.  You don’t have to use the helpers—I don’t.  I prefer to write my JavaScript using JavaScript.  I also keep my JavaScript where it belongs.  Hell, if you still want to use the Rails helpers unobtrusively, use &lt;a href=&quot;http://www.ujs4rails.com/&quot;&gt;UJS&lt;/a&gt;.  JavaScript isn’t a component of MVC—it’s a language.  And once again, the explanation has nothing to do with BDD.&lt;/p&gt;

&lt;h4&gt;Chaining of Actions&lt;/h4&gt;

&lt;p&gt;Haven’t &lt;a href=&quot;http://alternateidea.com/blog/articles/2006/8/23/jquery-mis-leading-the-pack&quot;&gt;we been over this&lt;/a&gt; before? This is possible with Prototype, but I use it conservatively. I personally find it hard to read and hard to debug.  A few chains, great, but once you get beyond that it’s cumbersome.   &lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;
$(element).show().insert(&amp;quot;&amp;lt;p&amp;gt;Action has been executed successfully&amp;quot;&amp;lt;/p&amp;gt;&amp;quot;).addClassName(&#039;flash&#039;);
&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;CSS Selectors&lt;/h4&gt;

&lt;p&gt;We have great support for CSS Selectors.  The author states: &lt;em&gt;”Prototype does supports CSS Selectors via $$ function, but it doesn’t fully leverages the power of CSS Selectors. “&lt;/em&gt;  What the hell does that mean?  Please explain &lt;em&gt;fully leverage&lt;/em&gt;.  &lt;/p&gt;

&lt;h4&gt;No more checks for presence of an element&lt;/h4&gt;

&lt;p&gt;Again, this has a bad smell to me.  &lt;code&gt;If&lt;/code&gt; statements aren’t considered harmful.  It’s part of that clarity thing.  So, I check for the presence of an element once, and run the code within the conditional.  This leads me to believe there is a check every time you attempt to access an object in JQuery, and unless you chain methods, this check will be run with every method you attempt to call on the object.  Feel free to speak up if I’m wrong.&lt;/p&gt;

&lt;h4&gt;Aids development process&lt;/h4&gt;

&lt;p&gt;Great!  Thats the purpose of any library, those of us in Prototype land share the same luxury. &lt;/p&gt;

&lt;h3&gt;Which Library Should You Use?&lt;/h3&gt;

&lt;p&gt;Whatever makes you happy.  It’s that simple.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; &lt;a href=&quot;http://blog.rubyonrails.com/2007/11/7/prototype-1-6-0-and-script-aculo-us-1-8-0-released&quot;&gt;Case in point&lt;/a&gt;&lt;/p&gt;
          &lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=Hk3aU9B&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=Hk3aU9B&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=96gwCIB&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=96gwCIB&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            
            <pubDate>Fri, 09 Nov 2007 15:58:22 -0800</pubDate>
        </item>
            
        <item>
            <title>Upgrading Radiant to Prototype 1.6</title>
            <link>http://swik.net/Typo/Encytemedia/Upgrading+Radiant+to+Prototype+1.6/bq9yv</link>
            <description>&lt;p&gt;Mislav has written up an excellent overview on &lt;a href=&quot;http://mislav.caboo.se/js/upgrading-to-prototype-1-6-real-world-examples&quot;&gt;upgrading Radiant (which used 1.5) to Prototype 1.6&lt;/a&gt;.  The article does a great job of showing how 1.6 is superior to 1.5.&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=B23KL&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=B23KL&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=Ng2rL&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=Ng2rL&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            
            <pubDate>Wed, 24 Oct 2007 09:37:11 -0700</pubDate>
        </item>
            
        <item>
            <title>Daily Show Archives Online</title>
            <link>http://swik.net/Typo/Encytemedia/Daily+Show+Archives+Online/bqu2a</link>
            <description>&lt;p&gt;According to the &lt;a href=&quot;http://tvdecoder.blogs.nytimes.com/2007/10/18/daily-show-archives-online/index.html?ex=1350532800&amp;amp;amp;en=965a1ef6138b2102&amp;amp;amp;ei=5088&amp;amp;amp;partner=rssnyt&amp;amp;amp;emc=rss&quot;&gt;New York Times&lt;/a&gt;, the &lt;a href=&quot;http://www.thedailyshow.com/video/index.jhtml&quot;&gt;Daily Show Archives&lt;/a&gt;, with over 7,000 videos are online—free and searchable. &lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=eG4xDMA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=eG4xDMA&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=zilkBwA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=zilkBwA&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            
            <pubDate>Fri, 19 Oct 2007 08:40:58 -0700</pubDate>
        </item>
            
        <item>
            <title>Telemarketer gets owned</title>
            <link>http://swik.net/Typo/Encytemedia/Telemarketer+gets+owned/bp3lt</link>
            <description>&lt;p&gt;&lt;p&gt;
&amp;lt;object height=&quot;353&quot; width=&quot;425&quot;&gt;&amp;lt;param&gt;&amp;lt;/param&gt;&amp;lt;param&gt;&amp;lt;/param&gt;&amp;lt;embed src=&quot;http://www.youtube.com/v/un_PjRXV5l8&amp;amp;amp;rel=1&quot; height=&quot;353&quot; width=&quot;425&quot;&gt;&amp;lt;/embed&gt;&amp;lt;/object&gt;
&amp;lt;/o&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=lqJJ4AKx&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=lqJJ4AKx&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=2gcdVjNA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=2gcdVjNA&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            
            <pubDate>Thu, 11 Oct 2007 16:52:15 -0700</pubDate>
        </item>
            
        <item>
            <title>Making an iPhone app in about a minute</title>
            <link>http://swik.net/Typo/Encytemedia/Making+an+iPhone+app+in+about+a+minute/bpx1v</link>
            <description>&lt;p&gt;
&amp;lt;object height=&quot;301&quot; width=&quot;480&quot;&gt;   &amp;lt;param /&gt;   &amp;lt;param /&gt;   &amp;lt;param /&gt;  &amp;lt;param /&gt;&amp;lt;/object&gt;&lt;/p&gt;

&lt;p&gt;—&lt;a href=&quot;http://metaatem.net/&quot;&gt;Erik Kastner&lt;/a&gt; shows us how it’s done.&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=LUtll8Jr&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=LUtll8Jr&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=XGwAnh7w&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=XGwAnh7w&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            
            <pubDate>Wed, 10 Oct 2007 17:52:03 -0700</pubDate>
        </item>
            
        <item>
            <title>Prototype Inheritance Updates</title>
            <link>http://swik.net/Typo/Encytemedia/Prototype+Inheritance+Updates/bpta9</link>
            <description>&lt;p&gt;&lt;a href=&quot;http://prototypejs.org/learn/class-inheritance&quot;&gt;Defining classes and inheritance in Prototype&lt;/a&gt;–Incase you’ve missed it, Prototype 1.6 has a new inheritance model.&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=SgFqGcZT&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=SgFqGcZT&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/encytemedia?a=yLQGiPeF&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/encytemedia?i=yLQGiPeF&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            
            <pubDate>Tue, 09 Oct 2007 22:01:19 -0700</pubDate>
        </item>
            
    </channel>
</rss>
