<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0" xml:base="http://alexkessinger.net/frontpage">
  <channel>
    <title>Alex Kessinger  - engineer, creator, collector</title>
    <link>http://alexkessinger.net/frontpage</link>
    <description />
    <language>en</language>
          <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ak_blog" /><feedburner:info uri="ak_blog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license><feedburner:emailServiceId>ak_blog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
    <title>Storing data from the Twitter streaming API within a django project</title>
    <link>http://feedproxy.google.com/~r/ak_blog/~3/P2gg1VY5hRE/storing-data-twitter-streaming-api-within-django-project</link>
    <description>&lt;p&gt;For some reason I was afraid of the &lt;a href="http://dev.twitter.com/pages/streaming_api"&gt;Twitter Streaming API&lt;/a&gt;, but it turns out the streaming API is super simple. If you have ever wanted to implement a twitter search bot, or just wanted to play around with a large amount of twitter search data, or statuses the streaming API is the way to go.&lt;/p&gt;

&lt;p&gt;The Streaming API is a little tricky, but ultimately easy. You are just issuing a request to twitter, which doesn't close for a long time. Over the length of the request Twitter will continue you pass data down the pipeline.&lt;/p&gt;

&lt;p&gt;This is a little tricky to understand at first, it's actually quite counter to how a lot of programing is done. It's event/loop based, versus sequential. If you are used to how things work in Javascript this actually might come in handy.&lt;/p&gt;

&lt;p&gt;As a matter of fact an environment like &lt;a href="http://nodejs.org/"&gt;NodeJS&lt;/a&gt; does a really great job at handling the streaming API. In less then 10 minutes I was able to understand how the streaming API works because of &lt;a href="http://github.com/technoweenie/twitter-node"&gt;twitter-node&lt;/a&gt;. With code like the following you get notified of every new status from group of people.
&lt;!--break--&gt;
var TwitterNode = require('twitter-node').TwitterNode, 
        sys         = require('sys')
        twit        = new TwitterNode({
            user: 'username', 
            password: 'password',
            follow: [8038312,40289924,68938254]
        });&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;twit.addListener(
    'tweet', 
    function(tweet) {
        sys.puts("@" + tweet.user.screen_name + ": " + tweet.text);
    }
);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Once you run this code, and then wait for a while, you will start to see tweets pop on the screen as they come down the pipeline.&lt;/p&gt;

&lt;p&gt;I am really interested in using Node more, but I had already created a project in &lt;a href="http://djangoproject.com"&gt;Django&lt;/a&gt; and I wasn't interested in writing SQL to talk to my mysql database to store all the new data I was going to get from the Streaming API. This is a lossy version of what I did, but it's close enough to give you a handle on whats going on. &lt;a href="http://github.com/joshthecoder/tweepy"&gt;Tweepy&lt;/a&gt; has support for the streaming API, but they don't have the docs yet so I had to dig through there code.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;from tweepy.streaming import StreamListener, Stream
import simplejson
from datetime import datetime
import time
import locale

# Parses twitter dates stored in json # from twitter-python
def parse_datetime(string):
    # Set locale for date parsing
    locale.setlocale(locale.LC_TIME, 'C')

    # We must parse datetime this way to work in python 2.4
    date = datetime(*(time.strptime(string, '%a %b %d %H:%M:%S +0000 %Y')[0:6]))

    # Reset locale back to the default setting
    locale.setlocale(locale.LC_TIME, '')
    return date


# You need to subclass the StreamListener
class MyStreamListener(StreamListener):
    """docstring for MyStreamListener"""

    def on_data(self, data):
        print "starting on data call"
        data = simplejson.loads(data)
        return True


    def on_timeout(self):
        print "we got a time out"

    def on_error(self, status_code):
        print "we got an error %s" % (status_code)
        return False

mylisten = MyStreamListener()
mystream = Stream("voidfiles","hacker",mylisten,timeout=30)
mystream.filter(follow=[])
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;With something like that code I was able to save tweets that were from a group of twitterers. Because it's python I was able use django's ORM to store the tweets as they came.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ak_blog?a=P2gg1VY5hRE:HPb0IiTZqvc:H68mShHoGB0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ak_blog?d=H68mShHoGB0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ak_blog/~4/P2gg1VY5hRE" height="1" width="1"/&gt;</description>
     <pubDate>Mon, 06 Sep 2010 06:39:21 +0000</pubDate>
 <dc:creator>alex</dc:creator>
 <guid isPermaLink="false">3134 at http://alexkessinger.net</guid>
  <feedburner:origLink>http://alexkessinger.net/story/storing-data-twitter-streaming-api-within-django-project</feedburner:origLink></item>
  <item>
    <title>I wrote a guest post for the DailyJS: The Future of Mobile Sync</title>
    <link>http://feedproxy.google.com/~r/ak_blog/~3/J-_zr_iColE/i-wrote-guest-post-dailyjs-future-mobile-sync</link>
    <description>&lt;p&gt;I have been really impressed with the coverage of the javascript community over at &lt;a href="http://dailyjs.com"&gt;DailyJS&lt;/a&gt;. So, when they were asking for guest bloggers I jumped at the chance. I chose to write about an idea that has started to surface which is mobile data sync. Sync can be tricky especially when you mix in the fact that mobile devices can be offline for long periods of time. I tried to find a solution, but couldn't find anything. That is why I wrote the article I wanted to see if  could kick up some dust and create a conversation. &lt;a href="http://dailyjs.com/2010/09/03/mobile-sync/"&gt;Check it out&lt;/a&gt;.
&lt;!--break--&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ak_blog?a=J-_zr_iColE:HOysUnaBSI8:H68mShHoGB0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ak_blog?d=H68mShHoGB0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ak_blog/~4/J-_zr_iColE" height="1" width="1"/&gt;</description>
     <pubDate>Fri, 03 Sep 2010 17:59:05 +0000</pubDate>
 <dc:creator>alex</dc:creator>
 <guid isPermaLink="false">3133 at http://alexkessinger.net</guid>
  <feedburner:origLink>http://alexkessinger.net/story/i-wrote-guest-post-dailyjs-future-mobile-sync</feedburner:origLink></item>
  <item>
    <title>git + fabric = awesome deploy team</title>
    <link>http://feedproxy.google.com/~r/ak_blog/~3/xEWtzh3VEoA/git-fabric-awesome-deploy-team</link>
    <description>&lt;p&gt;I just rewrote my web site &lt;a href="http://wacchen.com"&gt;Wacchen&lt;/a&gt; in python with &lt;a href="http://djangoproject.com"&gt;Django&lt;/a&gt;. I converted it from a rails project. It's easy to say something like rails sucks, but clearly people have been very successful while using rails, so I am not going to say that. I am going to say that I love Django, and the process of building my project from the ground up in Django was fun. But, rails ain't all bad, they do have a cousin called &lt;a href="http://www.capify.org/index.php/Capistrano"&gt;Capistrano&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Capistrano isn't actively developed anymore, but it still kicks ass. It helps you build a one line deployment script, which is really-really important. For years, I would start to build a script like that, and then at some point I was like, fuck it, I can do it later. What I didn't realize was that I was throwing one of the best getting shit done tools out of the window. Once you taste one line deploys, a lot of mental blockage fades away, and you can iterate faster. I had never realize how powerful the thought of trying to deploy was. It was actually stoping me from want to hack.
&lt;!--break--&gt;
Now though, I converted to python land, and I needed something like Capistrano. Django doesn't have as tight a relationship with &lt;a href="http://docs.fabfile.org/0.9.1/"&gt;Fabric&lt;/a&gt; as Rails does with Capistrano, but it's been mentioned in more then one place.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://morethanseven.net/2009/07/27/fabric-django-git-apache-mod_wsgi-virtualenv-and-p.html"&gt;Fabric, Django, Git, Apache, mod_wsgi, virtualenv and pip deployment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.thescoop.org/archives/2008/12/02/deploying-django-with-fabric/"&gt;Deploying Django with Fabric&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is what I chose. I started with the above, and an assortment of blogs posts, but fabric has changed a lot since many of these posts were written. For instance, it's not config anymore it's env. Also you can't use the fancy text replacer syntax any longer. This &lt;code&gt;run('cd $(path); mv releases/current releases/_previous;')&lt;/code&gt; now becomes this run('cd %(path)s; mv releases/current releases/_previous;' % env)`.&lt;/p&gt;

&lt;p&gt;I am glad to say that it works, and it's been quite plesant. I have learned a couple things along the way that I can share though.&lt;/p&gt;

&lt;h2&gt;There is no package deal&lt;/h2&gt;

&lt;p&gt;Borrow, cheat, look around, but you aren't going to be able to use someone elses script verbatim, deployment is personal. This was a huge stumbling block for my self in the beginning, but like I said capistrano was like crack, so I got myself over the hump.&lt;/p&gt;

&lt;h2&gt;Use git&lt;/h2&gt;

&lt;p&gt;The ability to have git just dump a tar of your current directory is super useful. Then all you need to do is take that tarball and &lt;code&gt;put&lt;/code&gt; it on the server. This was the extent of my putting.&lt;/p&gt;

&lt;p&gt;This get's me using git too, which is a nice added bonus. I use git, but I often forget at the very beginning to use it.&lt;/p&gt;

&lt;h2&gt;Use your fabfile as a scratch pad&lt;/h2&gt;

&lt;p&gt;Because there is no cannon for fab files, and you can't just use someone else's I found it best to create new deployment steps as I went. I would ssh to the server, mess with the command until it was right, and then immediately write it into my fabfile.&lt;/p&gt;

&lt;h2&gt;Chunk it up&lt;/h2&gt;

&lt;p&gt;Don't try and write big fab targets, use lot's of little ones, that way as your deployments get longer, you can start to target smaller portions of the deployment. I have an app server, and celery server, and I didn't want to deploy too both servers all the time.&lt;/p&gt;

&lt;p&gt;Those are my quick notes for now. I also ended up using a lot of other new tools like &lt;a href="http://gunicorn.org"&gt;gunicorn&lt;/a&gt;, &lt;a href="http://gunicorn.org/deploy.html"&gt;nginx&lt;/a&gt;, &lt;a href="http://dreamhostps.com"&gt;dreamhost ps&lt;/a&gt;, &lt;a href="http://ask.github.com/celery/getting-started/introduction.html"&gt;celery&lt;/a&gt;, and &lt;a href="http://www.rabbitmq.com/"&gt;rabbitMQ&lt;/a&gt;, all of which have their own set of notes.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ak_blog?a=xEWtzh3VEoA:YMKszzEF4Aw:H68mShHoGB0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ak_blog?d=H68mShHoGB0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ak_blog/~4/xEWtzh3VEoA" height="1" width="1"/&gt;</description>
     <pubDate>Wed, 01 Sep 2010 08:08:30 +0000</pubDate>
 <dc:creator>alex</dc:creator>
 <guid isPermaLink="false">3132 at http://alexkessinger.net</guid>
  <feedburner:origLink>http://alexkessinger.net/story/git-fabric-awesome-deploy-team</feedburner:origLink></item>
  <item>
    <title>@paul_irish has put together an awesome google reader bundle for frontend oriented blogs</title>
    <link>http://feedproxy.google.com/~r/ak_blog/~3/3Ri5mucfspg/paulirish-has-put-together-awesome-google-reader-bundle-frontend-oriented-blogs</link>
    <description>&lt;p&gt;Not much else to say then &lt;a href="http://www.google.com/reader/bundle/user%2F11165870484951445324%2Fbundle%2Ffrontend"&gt;click through to the bundle&lt;/a&gt;. I thought I would be up on at least a couple of these blogs, turns out I was only subscribed to like 2 out of 199 blogs. Awesome booster shot for my google reader reading.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ak_blog?a=3Ri5mucfspg:5z_9ZCrSocY:H68mShHoGB0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ak_blog?d=H68mShHoGB0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ak_blog/~4/3Ri5mucfspg" height="1" width="1"/&gt;</description>
     <pubDate>Thu, 19 Aug 2010 17:41:06 +0000</pubDate>
 <dc:creator>alex</dc:creator>
 <guid isPermaLink="false">3131 at http://alexkessinger.net</guid>
  <feedburner:origLink>http://alexkessinger.net/story/paulirish-has-put-together-awesome-google-reader-bundle-frontend-oriented-blogs</feedburner:origLink></item>
  <item>
    <title>RSS Feed for changes in Node Package Manager Registry</title>
    <link>http://feedproxy.google.com/~r/ak_blog/~3/MKWuZbKA9zE/rss-feed-changes-node-package-manager-registry</link>
    <description>&lt;p&gt;This is a quick &lt;a href="http://pipes.yahoo.com/pipes/pipe.info?_id=5b0da27aa93f45f401b5ab7be2a6553b"&gt;yahoo pipe&lt;/a&gt; I made to track the latest updated packages in the node package manager registry.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ak_blog?a=MKWuZbKA9zE:BthFex3d3qE:H68mShHoGB0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ak_blog?d=H68mShHoGB0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ak_blog/~4/MKWuZbKA9zE" height="1" width="1"/&gt;</description>
     <pubDate>Sat, 14 Aug 2010 07:48:33 +0000</pubDate>
 <dc:creator>alex</dc:creator>
 <guid isPermaLink="false">3130 at http://alexkessinger.net</guid>
  <feedburner:origLink>http://alexkessinger.net/story/rss-feed-changes-node-package-manager-registry</feedburner:origLink></item>
  <item>
    <title>Oh, so the package manager for node.js is called node package manager </title>
    <link>http://feedproxy.google.com/~r/ak_blog/~3/Q2LriURRKHE/oh-so-package-manager-nodejs-called-node-package-manager</link>
    <description>&lt;p&gt;I had a chance to meet &lt;a href="http://www.mikealrogers.com/"&gt;Mikeal&lt;/a&gt; today. I was talking about my escapades with kiwi, and seedJS when he informed me that they were dead, oh. So, what is the next package manager, &lt;a href="http://npmjs.org/"&gt;node package manager&lt;/a&gt;, of course. You can just as easily install it with homebrew.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;brew install npm 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;so, go get some. There is a very big list &lt;a href="http://npm.mape.me/"&gt;over here&lt;/a&gt; of all the packages, but I can't seem to find a RSS feed or anything to stay up on the latest.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ak_blog?a=Q2LriURRKHE:BwpLFHVbXCE:H68mShHoGB0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ak_blog?d=H68mShHoGB0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ak_blog/~4/Q2LriURRKHE" height="1" width="1"/&gt;</description>
     <pubDate>Sat, 14 Aug 2010 07:02:06 +0000</pubDate>
 <dc:creator>alex</dc:creator>
 <guid isPermaLink="false">3129 at http://alexkessinger.net</guid>
  <feedburner:origLink>http://alexkessinger.net/story/oh-so-package-manager-nodejs-called-node-package-manager</feedburner:origLink></item>
  <item>
    <title>A one-file remote console.log using node.js</title>
    <link>http://feedproxy.google.com/~r/ak_blog/~3/_VDyV2L_-qU/one-file-remote-consolelog-using-nodejs</link>
    <description>&lt;p&gt;I am slightly ashamed to admit this, but just the other day I realized that node.js was more then just a webserver. For some reason I had got it into my head that node.js was just for webservers, or network like things.&lt;/p&gt;

&lt;p&gt;But after I installed node.js, I realized that this was rockin javascript environment that works like python's interactive command line.&lt;/p&gt;

&lt;p&gt;The fact that it has http at it's core though makes is super simple to write one-off network handlers, and this got my mind churning. I created a one-file remote console.log. I have found some prior art &lt;a href="http://code.google.com/p/iphonedebug/"&gt;iphonedebug&lt;/a&gt;, and the one by &lt;a href="http://www.joehewitt.com/blog/firebug_for_iph.php"&gt;Jow Hewitt&lt;/a&gt;, both were a little more complicated then running one file, and inserting one JS include, so I wrote my own.
&lt;!--break--&gt;
Here is how it works. First &lt;a href="http://alexkessinger.net/story/quick-guide-getting-nodejs-mac-106"&gt;install node.js&lt;/a&gt;. I use homebrew.&lt;/p&gt;

&lt;p&gt;Next checkout the &lt;a href="http://github.com/voidfiles/Node.js-Remote-Console.log"&gt;github project&lt;/a&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git clone git://github.com/voidfiles/Node.js-Remote-Console.log.git remoteconsole;
cd remoteconsole;
node remote_console.js
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now you should have it running on http://127.0.0.1:8124/. Next you just insert this this script tag somewhere before you will want to use it&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;script src="http://127.0.0.1:8124/debug.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;There you are, now you can call log() from anywhere in your code, and your arguments will be serialized into JSON, and sent to the remote console.&lt;/p&gt;

&lt;p&gt;I stole this &lt;a href="http://paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/"&gt;console.log&lt;/a&gt; from &lt;a href="http://paulirish.com/"&gt;Paul Irish&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There is also a function called catchRemote, if you pass it a function, it will immediately execute that function, and catch the errors. Those errors will then be logged using log.&lt;/p&gt;

&lt;p&gt;One note, this only works in browsers with native JSON. If your browser does not have native JSON, then you can include &lt;a href="http://www.json.org/js.html"&gt;JSON2&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ak_blog?a=_VDyV2L_-qU:JW1aqb8d6Ys:H68mShHoGB0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ak_blog?d=H68mShHoGB0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ak_blog/~4/_VDyV2L_-qU" height="1" width="1"/&gt;</description>
     <pubDate>Fri, 13 Aug 2010 20:50:46 +0000</pubDate>
 <dc:creator>alex</dc:creator>
 <guid isPermaLink="false">3128 at http://alexkessinger.net</guid>
  <feedburner:origLink>http://alexkessinger.net/story/one-file-remote-consolelog-using-nodejs</feedburner:origLink></item>
  <item>
    <title>Quick Guide to getting node.js on mac 10.6</title>
    <link>http://feedproxy.google.com/~r/ak_blog/~3/To81f7AWP5M/quick-guide-getting-nodejs-mac-106</link>
    <description>&lt;p&gt;I have been searching for a full blown local JS enviroment to start playing around with different ideas about JS. Node seems to be that full fleshed environment, what I love is how easy it has been to install everything. It's nothing like what it took to get started with things like PHP back in the day, it's amazing to wonder how I ever made it over the learning hump in the beginning.&lt;/p&gt;

&lt;p&gt;First install &lt;a href="http://github.com/mxcl/homebrew"&gt;Homebrew&lt;/a&gt;, which is laughably easy, although make sure you understand what you are signing up for, then make sure you have XCode.
&lt;!--break--&gt;
XCode can be found on apples site, you need signup for there developer program.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Run this command to install Homebrew
ruby -e "$(curl -fsS http://gist.github.com/raw/323731/install_homebrew.rb)"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then do this&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;brew install node
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Yep I am really not kidding, its that simple.&lt;/p&gt;

&lt;p&gt;Now you have an awesome JS environment to play with. I would recommend installing some kind of node.js package manager. I first found &lt;a href="http://seedjs.org"&gt;Seed.js&lt;/a&gt;, but it seems like there servers are having problems. I then stumbled upon &lt;a href="http://kiwijs.com/"&gt;Kiwi&lt;/a&gt;. You can use Homebrew to install it.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;brew install kiwi
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Kiwi still seems a bit young, there are some rough edges. For instance I wanted to install the markdown parser so I could use it inside node, and I ran into an issue of Homebrew not putting libraries in normal places. So I had to install the &lt;a href="http://github.com/Orc/discount"&gt;Discount&lt;/a&gt; package using Homebrew.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;brew install discount
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then I was able to use Kiwi to install markdown&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;kiwi install markdown 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;But, for some reason the resulting markdown.node module wasn't getting put on my path, so I had to do that first.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ln -s /Users/alexkess/.kiwi/current/seeds/markdown/0.0.2/build/default/markdown.node /Users/alexkess/.node_libraries/markdown.node
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And that was it I was able to then use the markdown module inside node.js&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;node
node&amp;gt; var md = require("markdown");
node&amp;gt; md.parse('markdown is *awesome*')
'&amp;lt;p&amp;gt;markdown is &amp;lt;em&amp;gt;awesome&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;'
&lt;/code&gt;&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ak_blog?a=To81f7AWP5M:Mus_oPC7nNI:H68mShHoGB0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ak_blog?d=H68mShHoGB0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ak_blog/~4/To81f7AWP5M" height="1" width="1"/&gt;</description>
     <pubDate>Fri, 13 Aug 2010 19:25:26 +0000</pubDate>
 <dc:creator>alex</dc:creator>
 <guid isPermaLink="false">3127 at http://alexkessinger.net</guid>
  <feedburner:origLink>http://alexkessinger.net/story/quick-guide-getting-nodejs-mac-106</feedburner:origLink></item>
  <item>
    <title>Medium, Curators, and Jason Santa Maria</title>
    <link>http://feedproxy.google.com/~r/ak_blog/~3/9Cqg9_ce0Vc/medium-curators-and-jason-santa-maria</link>
    <description>&lt;p&gt;If you haven't checked out anything from &lt;a href="http://jasonsantamaria.com/"&gt;Jason Santa Maria&lt;/a&gt;, go check his blog out. He has been around for a long time, I think. The fact that I don't know much about him is what impresses me the most. I have read a few of his blog post, but each one has been incisive, and powerful so that they stand on their own. I don't need to know who he is to understand the he gets it. He understands the types of conversations that need to happen in order to advance the web as a medium.&lt;/p&gt;

&lt;p&gt;I loved watching this &lt;a href="http://wacchen.com/video/6262/sva-dot-dot-dot-lectures-jason-santa-maria-on-vimeo"&gt;video&lt;/a&gt; with him speaking in it, it's been sitting in my &lt;a href="http://wacchen.com"&gt;Wacchen&lt;/a&gt; queue for quite sometime, and finally tonight, screaming baby in tow, I took the time to watch it.&lt;/p&gt;

&lt;p&gt;Its quick like 12 minutes, but he breaks down an important discussion. Why isn't the visual design of print get translated online. He gave two good examples from Wired Magazine. He is right, the magazine layouts were beautiful, and the web versions were not. Not only that but they were robbed of there visual interesting-ness.
&lt;!--break--&gt;
He goes on to show how on his site he is attempting the ability to give each piece, I hazard to call them blog posts because they are so stunning, a distinct visual layout. He is succeeding in his goal to bring visual identity for individual pieces to the web.&lt;/p&gt;

&lt;p&gt;This is where the discussion divides. Websites, unlike print, can be consumed in so many different manners I think unfair to attempt to give the digital form style in the first place. It's worthwhile if it matters to yourself, but how can you translate the visual identity into a blog reader, or across twitter, or in pull quotes on other peoples websites. The web is in effect formless.&lt;/p&gt;

&lt;p&gt;Twitter is a great example, each tweet has a permalink, a webpage that displays just that tweet, but is that it's form? I don't think so, tweets are more often then not consumed someplace else. I believe this has the effect of disinter-mediating tweets from form.&lt;/p&gt;

&lt;p&gt;Medium as the thrust of the discussion, is why I am so excited about the video. In talking about webpages as a collection of information he contrasted them with physical collections of information. A magazine is a stack of articles. A magazine has a defined form, it's only as big as it. Our brains can look at that stack and gauage how much information is in there. All this is being lost in digital translation. There is an answer though.&lt;/p&gt;

&lt;p&gt;This being a medium discussion means that we can talk about how things can't be translated from one medium to another. The fact that the web is formless frees us from trying to form it physically, but that doesn't mean we can't collect it. We can still create windows into the massive amount of information, but it is all done through other people, through curators.&lt;/p&gt;

&lt;p&gt;&lt;a href="kottke.org"&gt;Jason Kottke&lt;/a&gt; is a curator. He has a website, which has it's own formless stream of content like all others, but I know this one. I know that I will get x number of posts a day, generally, I know what size it will be. I know that I will be delighted by a large amount of it. All these are starting to look like the very things we get from books, and magazines. The people around us will provide the form for our content, and the window in the massless, formless pile of content.&lt;/p&gt;

&lt;p&gt;Design will still be a huge part of the web though, we still need visually interesting stuff, and enjoy how layout can change the meaning of a story, I just don't see it being huge past helping people read the content better.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ak_blog?a=9Cqg9_ce0Vc:p7Lc1HYS_PU:H68mShHoGB0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ak_blog?d=H68mShHoGB0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ak_blog/~4/9Cqg9_ce0Vc" height="1" width="1"/&gt;</description>
     <pubDate>Thu, 12 Aug 2010 06:13:32 +0000</pubDate>
 <dc:creator>alex</dc:creator>
 <guid isPermaLink="false">3126 at http://alexkessinger.net</guid>
  <feedburner:origLink>http://alexkessinger.net/story/medium-curators-and-jason-santa-maria</feedburner:origLink></item>
  <item>
    <title>A bit about Kanye on my posterous</title>
    <link>http://feedproxy.google.com/~r/ak_blog/~3/K3_PcgGEVTI/bit-about-kanye-my-posterous</link>
    <description>&lt;p&gt;My site here is a lot about coding, and people may not enjoy Kanye as much as I do. My posterous is much less focused, and more of a stream of curated content. So if you want to see my mini &lt;a href="http://alexkessinger.posterous.com/i-love-kanye-west-i-love-his-work-his-controv"&gt;ode to Kanye&lt;/a&gt; its on my &lt;a href="http://alexkessinger.posterous.com" target="_blank"&gt;posterous&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ak_blog?a=K3_PcgGEVTI:-fbxKTUsbf8:H68mShHoGB0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ak_blog?d=H68mShHoGB0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ak_blog/~4/K3_PcgGEVTI" height="1" width="1"/&gt;</description>
     <pubDate>Tue, 10 Aug 2010 06:23:03 +0000</pubDate>
 <dc:creator>alex</dc:creator>
 <guid isPermaLink="false">3125 at http://alexkessinger.net</guid>
  <feedburner:origLink>http://alexkessinger.net/story/bit-about-kanye-my-posterous</feedburner:origLink></item>
  </channel>
</rss>
