<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-26881033</id><updated>2011-07-28T11:53:26.089-07:00</updated><category term='ruby'/><category term='apache'/><category term='open'/><category term='kaching'/><category term='oauth'/><category term='zookeeper'/><category term='api'/><category term='java'/><category term='http'/><category term='git'/><category term='web'/><category term='zk'/><title type='text'>Complexe mais pas compliqué</title><subtitle type='html'>"Complex, but not complicated"  --Ravel</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>56</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-26881033.post-7369596664429979229</id><published>2010-01-11T11:29:00.000-08:00</published><updated>2010-01-11T11:30:19.494-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zk'/><category scheme='http://www.blogger.com/atom/ns#' term='kaching'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='zookeeper'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Actually Implementing Group Management Using ZooKeeper</title><content type='html'>I wrote a post at the KaChing eng blog on &lt;a href="http://eng.kaching.com/2010/01/actually-implementing-group-management.html"&gt;Actually Implementing Group Management Using ZooKeeper&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-7369596664429979229?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/7369596664429979229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=7369596664429979229' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/7369596664429979229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/7369596664429979229'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2010/01/actually-implementing-group-management.html' title='Actually Implementing Group Management Using ZooKeeper'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-7395231078533554448</id><published>2009-05-09T11:00:00.000-07:00</published><updated>2009-05-09T11:01:18.163-07:00</updated><title type='text'>Van Gogh says</title><content type='html'>&lt;blockquote&gt;Looking at the stars always makes me dream, as simply as I dream over the black dots representing towns and villages on a map. Why? I ask myself, shouldn't the shining dots of the sky be as accessible as the black dots on the map of France? Just as we take a train to get to Tarascon or Rouen, we take death to reach a star. We cannot get to a star while we are alive any more than we can take the train when we are dead. So to me it seems possible that cholera, tuberculosis and cancer are the celestial means of locomotion. Just as steamboats, buses and railways are the terrestrial means. To die quietly of old age, would be to go there on foot.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-7395231078533554448?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/7395231078533554448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=7395231078533554448' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/7395231078533554448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/7395231078533554448'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2009/05/van-gogh-says.html' title='Van Gogh says'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-1090399994583861686</id><published>2009-03-09T22:33:00.000-07:00</published><updated>2009-03-09T22:38:04.852-07:00</updated><title type='text'>I believe the California DMV is screwing me</title><content type='html'>I guess I'm late registering, so I got this notice that my registration was due 12/31/2008. That makes me around 40 days late. My bill says my penalty fee is $147.&lt;br /&gt;&lt;br /&gt;Looking up the penalty rules at &lt;a href="http://dmv.ca.gov/vr/vr_info.htm"&gt;http://dmv.ca.gov/vr/vr_info.htm&lt;/a&gt; it says for 30 days to 1 year late the fee is 60% of the license fee and 60% of the weight fee. My numbers:&lt;br /&gt;&lt;br /&gt;License fee: $121&lt;br /&gt;Weight fee: $24&lt;br /&gt;&lt;br /&gt;60% of that sum is NOT $147. I'm going to have to call them, so please pray for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-1090399994583861686?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/1090399994583861686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=1090399994583861686' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/1090399994583861686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/1090399994583861686'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2009/03/i-believe-california-dmv-is-screwing-me.html' title='I believe the California DMV is screwing me'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-5721137347079863116</id><published>2008-07-24T18:01:00.000-07:00</published><updated>2008-07-24T18:04:07.335-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>git-rebase --onto master branch topic</title><content type='html'>is awesome!&lt;br /&gt;&lt;br /&gt;(where master is branch's parent, branch is topic's parent)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-5721137347079863116?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/5721137347079863116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=5721137347079863116' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/5721137347079863116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/5721137347079863116'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2008/07/git-rebase-onto-master-branch-topic.html' title='git-rebase --onto master branch topic'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-206332873452800535</id><published>2008-07-20T10:43:00.000-07:00</published><updated>2008-07-20T11:33:02.550-07:00</updated><title type='text'>Some favorite blog quotes</title><content type='html'>&lt;blockquote&gt;&lt;a href="http://teddziuba.com/2008/04/im-going-to-scale-my-foot-up-y.html"&gt;I'm going to scale my foot up your ass&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://www.oblomovka.com/entries/2008/07/16#1216246380"&gt;The Edge is Where the Innovation Happens&lt;br /&gt;The Edge is Where the Smarts are in a "Stupid Network"&lt;br /&gt;The Edge is What Gives The Internet its Ability to Scale&lt;br /&gt;The Edge is Who Gives U2 Its Distinctive Sound&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;a href="http://www.zedshaw.com/rants/i_want_the_mutt_of_feed_readers.html"&gt;I would believe in god if I found out he made screen.&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-206332873452800535?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/206332873452800535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=206332873452800535' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/206332873452800535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/206332873452800535'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2008/07/some-favorite-blog-quotes.html' title='Some favorite blog quotes'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-5567990231826669352</id><published>2008-07-05T15:16:00.000-07:00</published><updated>2008-07-11T11:18:29.191-07:00</updated><title type='text'>Good things learned the first month at Ning</title><content type='html'>&lt;li&gt;Asynchronous code reviews work well, though make sure that the software sends nasty-grams after no feedback for a few days.&lt;/li&gt;&lt;li&gt;JConsole is a decent tool.  I'm surprised I've never used it before.&lt;/li&gt;&lt;li&gt;We have a nice JMX idiom where you register a class and tag methods with a @Managed annotation. This avoids the need to create separate interfaces and implemenations for MBean classes.&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/google-guice/"&gt;Google Guice&lt;/a&gt; is nice for the static type checking and annotations. I've always hated XML files for configuration.&lt;/li&gt;&lt;li&gt;Try out &lt;a href="http://jdbi.org/"&gt;jDBI&lt;/a&gt; from Ning's Brian McCallister when you want to directly hook into your db.&lt;/li&gt;&lt;li&gt;&lt;a href="http://testng.org/doc/"&gt;TestNG&lt;/a&gt; is sweet.  Classifying tests to group them as fast, slow, etc., is really nice.&lt;/li&gt;&lt;li&gt;String.format(). Why haven't I been using this??&lt;br /&gt;&lt;/li&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-5567990231826669352?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/5567990231826669352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=5567990231826669352' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/5567990231826669352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/5567990231826669352'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2008/07/good-things-learned-first-month-at-ning.html' title='Good things learned the first month at Ning'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-4459184187062168576</id><published>2008-03-19T18:27:00.000-07:00</published><updated>2008-03-19T18:28:12.760-07:00</updated><title type='text'>SugarSync 1.0 is released</title><content type='html'>&lt;a href="http://sugarsync.com"&gt;http://sugarsync.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-4459184187062168576?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/4459184187062168576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=4459184187062168576' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/4459184187062168576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/4459184187062168576'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2008/03/sugarsync-10-is-released.html' title='SugarSync 1.0 is released'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-6261112874245614496</id><published>2008-03-14T17:40:00.000-07:00</published><updated>2008-03-14T17:41:01.466-07:00</updated><title type='text'>openfile.net now up</title><content type='html'>&lt;a href="http://openfile.net"&gt;openfile.net&lt;/a&gt; is up and has the latest about OpenFile!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-6261112874245614496?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/6261112874245614496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=6261112874245614496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/6261112874245614496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/6261112874245614496'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2008/03/openfilenet-now-up.html' title='openfile.net now up'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-6707639543838118706</id><published>2008-02-28T10:59:00.000-08:00</published><updated>2008-02-28T11:55:26.864-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='http'/><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='open'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='oauth'/><title type='text'>Announcing OpenFile</title><content type='html'>A small group of us at &lt;a href="http://sharpcast.com"&gt;work&lt;/a&gt; came up with an idea for a new web API that we are developing and would like as much community involvement as possible.  We're calling it "OpenFile" in the spirit of OpenID, OAuth, OpenSocial, etc.  From our in-progress spec:&lt;br /&gt;&lt;br /&gt;Users store more and more of their data in disparate services: photos on Flickr, SmugMug, Snapfish; files in Amazon S3, Box.net, Mozy; documents on Google Documents, Zoho, etc. At the same time there are more and more web web-enabled applications that would like access to these sets of data to offer additional value: online image editing, audio and video transcoding, remote access, etc. Often a client wants to perform relatively simple operations: open a file, save a file, but every service provider implements this in a different manner. For these basic operations there needs to be an easier way for clients to access the user's data from any kind of provider in a uniform way, and at the same time protecting the privacy and security of the data itself.&lt;br /&gt;&lt;br /&gt;The OpenFile API is a vendor-neutral protocol for desktop and web clients to be granted limited access to users' data that is managed by an external service provider. Its specific goals are to:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Provide clients the web equivalent of "Open File" and "Save As" dialogs that are managed by a user's service provider rather than the client, avoiding the exposure of private data to a requesting client, such as the user's folder structure. This also encourages the user to authorize the minimum amount of data to the client, rather than granting carte blanche access to all possible operations.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Allow authorized clients to then "Open" (read) and "Save" (write) authorized files.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Interoperate with open standards such as OAuth to avoid disclosing a user's credentials for a service provider to a client.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Intended audience&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This specification is intended for:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Data storage/backup providers who want to enable their users to access their data via numerous third-party clients in a standard and secure way.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Web services that want to simplify and extend their current methods of importing and exporting file data.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Community participation&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Please join the mailing list if you are interested in contributing, editing, or implementing this specification. We hope to emulate the process used by the OAuth mailing list in developing this spec: mailing list membership by application to avoid extraneous posts, quick discussions and voting on issues, rapid progress towards implementation and adoption.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Examples&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Photo editing web site&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Alice discovers a new web-based picture editing service picedit.com and wants to try it out on some of her pictures which are stored in the OpenFile-enabled myphotos.com site at the URL alice.myphotos.com.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;On picedit.com's Import page there is a textbox where Alice can enter her OpenFile provider URL (alice.myphotos.com) so that picedit.com can learn how to pull photos from it. Alice is then redirected to alice.myphotos.com, which asks her to login if she's not logged in already, and then to select what photos she wants to grant picedit.com access to.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Alice chooses just one photo of her cat and is redirected back to picedit.com, which then pulls the picture of her cat from alice.myphotos.com. Alice then starts editing the photo.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;When she's done she presses the "Save" button, causing picedit.com to push the updated image back to alice.myphotos.com where it will replace the previous version.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Online music store&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Joe just bought the final Daft Punk album missing from his collection on drm-free.com. He can download it directly into his computer, but he also wants it available from his online-streaming service stream-it.net, and he wants it backed up to his offsite-backup service back-it-up.com.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;On drm-free.com Joe enters the OpenFile endpoint URLs for both his services: stream-it.net and back-it-up.com.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;First he's redirected to stream-it.net's "Save As" dialog, where he is asked if he wishes to allow drm-free.com to write some files. Joe navigates his folder structure and sets up a new folder for the album data, then is redirected back to drm-free.com.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Next he's redirected to back-it-up.com where he goes through the same authorization process for drm-free.com.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Finally drm-free.com begins transferring the music files to both services, keeping Joe informed about the progress of the transfers.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-6707639543838118706?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/6707639543838118706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=6707639543838118706' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/6707639543838118706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/6707639543838118706'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2008/02/announcing-openfile.html' title='Announcing OpenFile'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-5868305723837318176</id><published>2008-01-20T21:38:00.000-08:00</published><updated>2008-01-20T21:49:00.589-08:00</updated><title type='text'>Notes on reading with an iPhone</title><content type='html'>1. Usually surfing on the notebook, then you have to go somewhere, the bathroom, the train, some meeting, wherever. Click a bookmarklet to add the current URL to del.icio.us with tag 'toread'.&lt;br /&gt;&lt;br /&gt;2. Bring up my del.icio.us 'toread' tag page on the iPhone. Tap the link, continue reading.&lt;br /&gt;&lt;br /&gt;3. Reading two-column PDFs in web browsers really, really sucks. You can't fit one column on the screen given the type size, and then you end up scrolling down the first column, scrolling up to the top of the page to the second column, then going back to the first column for the next page, etc. PDF reading programs, *please* rip these PDFs apart on the fly and make them single-column. You'll make us all a lot happier.&lt;br /&gt;&lt;br /&gt;4. iPhone can't tap-zoom when rendering PDFs. I assume they have some structure detection algorithms for HTML. Adding bitmap box/column detection for PDFs shouldn't be that hard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-5868305723837318176?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/5868305723837318176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=5868305723837318176' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/5868305723837318176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/5868305723837318176'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2008/01/notes-on-reading-with-iphone.html' title='Notes on reading with an iPhone'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-2833869859241170920</id><published>2008-01-17T09:14:00.000-08:00</published><updated>2008-01-17T09:16:06.161-08:00</updated><title type='text'>Review of our new Sharpcast SugarSync product</title><content type='html'>&lt;blockquote&gt;&lt;a href="http://www.readwriteweb.com/archives/sugarsync_sharpcast.php"&gt;The real beauty of SugarSync is that it's real-time - so when you update something on the cloud, it is automatically synced to your computer (and vice versa).&lt;/a&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-2833869859241170920?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/2833869859241170920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=2833869859241170920' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/2833869859241170920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/2833869859241170920'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2008/01/review-of-our-new-sharpcast-sugarsync.html' title='Review of our new Sharpcast SugarSync product'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-7001032682528697404</id><published>2008-01-08T09:30:00.000-08:00</published><updated>2008-01-08T09:31:40.885-08:00</updated><title type='text'>Complicated version number</title><content type='html'>&lt;blockquote&gt;&lt;a href="http://lucene.apache.org/solr/tutorial.html"&gt;This document is for Apache Solr version 1.2.2007.10.02.22.27.12. If you are using a different version of Solr, please consult the documentation that was distributed with the version you are using.&lt;/a&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-7001032682528697404?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/7001032682528697404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=7001032682528697404' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/7001032682528697404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/7001032682528697404'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2008/01/complicated-version-number.html' title='Complicated version number'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-6299199124691429959</id><published>2007-12-17T15:43:00.000-08:00</published><updated>2007-12-17T15:44:06.464-08:00</updated><title type='text'>I like this phrase</title><content type='html'>&lt;blockquote&gt;&lt;a href="http://mult.ifario.us/articles/2007/12/17/no-you-should-not-pay-your-investors-legal-fees"&gt;As an entrepreneur, you need to be a revenue animal and a cash bastard.&lt;/a&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-6299199124691429959?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/6299199124691429959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=6299199124691429959' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/6299199124691429959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/6299199124691429959'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2007/12/i-like-this-phrase.html' title='I like this phrase'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-5844129330922875271</id><published>2007-12-09T21:27:00.000-08:00</published><updated>2007-12-09T21:30:37.507-08:00</updated><title type='text'>Tailrank probe</title><content type='html'>&lt;a href="http://tailrank.com"&gt;tailrank.com&lt;/a&gt;, &lt;a href="http://rosien.net/resume.html"&gt;hiring&lt;/a&gt;?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-5844129330922875271?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/5844129330922875271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=5844129330922875271' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/5844129330922875271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/5844129330922875271'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2007/12/tailrank-probe.html' title='Tailrank probe'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-5518330517927790773</id><published>2007-10-03T10:20:00.000-07:00</published><updated>2007-10-03T10:21:40.680-07:00</updated><title type='text'>Paper on Amazon's Dynamo</title><content type='html'>I'm surprised that &lt;a href="http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html"&gt;their paper&lt;/a&gt; doesn't mention &lt;a href="http://www.danga.com/memcached/"&gt;Memcached&lt;/a&gt;.  It seems like a large oversight!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-5518330517927790773?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/5518330517927790773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=5518330517927790773' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/5518330517927790773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/5518330517927790773'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2007/10/paper-on-amazons-dynamo.html' title='Paper on Amazon&apos;s Dynamo'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-7070389238908940588</id><published>2007-09-26T22:50:00.000-07:00</published><updated>2007-09-27T12:08:31.677-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oauth'/><title type='text'>Helping out OAuth</title><content type='html'>I've offered to help write the Java implementation of the new &lt;a href="http://www.oauth.net"&gt;OAuth&lt;/a&gt; &lt;a href="http://oauth.net/documentation/spec"&gt;spec&lt;/a&gt;, and Sharpcast has let me take this on as a 10% project.  I hope to use it in our upcoming web apis.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-7070389238908940588?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/7070389238908940588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=7070389238908940588' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/7070389238908940588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/7070389238908940588'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2007/09/helping-out-oauth.html' title='Helping out OAuth'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-7974113138739238640</id><published>2007-09-18T08:55:00.000-07:00</published><updated>2007-09-18T09:04:30.328-07:00</updated><title type='text'>Adam Inside(tm)</title><content type='html'>Today &lt;a href="http://www.corel.com"&gt;Corel&lt;/a&gt; &lt;a href="http://www.corel.com/servlet/Satellite/us/en/Content/1153321430604?pressId=1189977223424"&gt;announced &lt;/a&gt; their new MediaOne product, which includes &lt;a href="http://www.sharpcast.com."&gt;Sharpcast&lt;/a&gt;.  This allows Corel customers to easily sync, backup and share their photo collections.  &lt;br /&gt;&lt;br /&gt;I'm especially proud because I was the principal author of the Sharpcast SDK that Corel used for the integration.  It's not easy to integrate with another company's software, so I'd like to especially thank the Corel team for their great work, and everyone at Sharpcast who helped, tested, vetted and sweated with me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-7974113138739238640?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/7974113138739238640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=7974113138739238640' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/7974113138739238640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/7974113138739238640'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2007/09/adam-insidetm.html' title='Adam Inside(tm)'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-2723345315092604167</id><published>2007-08-13T11:31:00.000-07:00</published><updated>2007-08-13T11:33:07.736-07:00</updated><title type='text'>More on threads</title><content type='html'>&lt;a href="http://blogs.sun.com/rvs/entry/the_problem_with_threads"&gt;&lt;blockquote&gt;To offer a third analogy, a folk definition of insanity is to do the same thing over and over again and to expect the results to be different. By this definition, we in fact require that programmers of multithreaded systems be insane. Were they sane, they could not understand their programs.&lt;/blockquote&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-2723345315092604167?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/2723345315092604167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=2723345315092604167' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/2723345315092604167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/2723345315092604167'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2007/08/more-on-threads.html' title='More on threads'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-8646919467577471408</id><published>2007-06-22T16:11:00.000-07:00</published><updated>2007-06-22T16:20:04.189-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><title type='text'>Increasing Ruby's Net::BufferedIO buffer size</title><content type='html'>Reading bytes from Net::HTTP seems really slow, around 1Mb/s for a close host.  Not many people seem to have complained about this, but I found &lt;a href="http://headius.blogspot.com/2006/06/bringing-rubygems-to-jruby-or-zen-of.html"&gt;some insight from Headius&lt;/a&gt; and monkey-patched Net::BufferedIO::rbuf_fill.  Changing the read buffer size from 1k to 32k brought the throughput up to 24Mb/s.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;module Net&lt;br /&gt;  class BufferedIO&lt;br /&gt;    def rbuf_fill&lt;br /&gt;      timeout(@read_timeout) { @rbuf &lt;&lt; @io.sysread(32768) }&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-8646919467577471408?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/8646919467577471408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=8646919467577471408' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/8646919467577471408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/8646919467577471408'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2007/06/increasing-rubys-netbufferedio-buffer.html' title='Increasing Ruby&apos;s Net::BufferedIO buffer size'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-2490867663390922060</id><published>2007-06-14T21:50:00.000-07:00</published><updated>2007-06-14T21:51:01.939-07:00</updated><title type='text'>Documenting code</title><content type='html'>&lt;blockquote&gt;&lt;a href="http://typicalprogrammer.com/programming/abject-oriented/"&gt;It’s said that code should be written for people to read, so it follows that documentation is written for no one to read.&lt;/a&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-2490867663390922060?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/2490867663390922060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=2490867663390922060' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/2490867663390922060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/2490867663390922060'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2007/06/documenting-code.html' title='Documenting code'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-5763966062274189031</id><published>2007-04-02T09:45:00.001-07:00</published><updated>2007-04-02T09:45:27.020-07:00</updated><title type='text'>State</title><content type='html'>&lt;a href="http://worrydream.com/MagicInk/"&gt;State is the primary reason people fear computers—stateful things can be &lt;em&gt;broken&lt;/em&gt;.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-5763966062274189031?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/5763966062274189031/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=5763966062274189031' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/5763966062274189031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/5763966062274189031'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2007/04/state.html' title='State'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-3075184300889377093</id><published>2007-03-29T09:06:00.000-07:00</published><updated>2007-03-29T09:08:30.213-07:00</updated><title type='text'>Yahoo, you suck</title><content type='html'>Wow Yahoo, if I don't log in for four months, you deactivate my account.  You suck.  To get it back I have to read your dumb upgrade-to-Mail-Plus message.&lt;br /&gt;&lt;br /&gt;But hey, I did reactivate my account, so you got a few ad impressions from me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-3075184300889377093?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/3075184300889377093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=3075184300889377093' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/3075184300889377093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/3075184300889377093'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2007/03/yahoo-you-suck.html' title='Yahoo, you suck'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-4276895083655637720</id><published>2007-03-14T10:26:00.000-07:00</published><updated>2007-03-14T10:29:09.113-07:00</updated><title type='text'>Funny Java quote</title><content type='html'>&lt;a href="http://blog.tmorris.net/refunctoring/"&gt;"Functional programming is Java version 42, seriously."&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-4276895083655637720?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/4276895083655637720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=4276895083655637720' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/4276895083655637720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/4276895083655637720'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2007/03/funny-java-quote.html' title='Funny Java quote'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-7289061480544654426</id><published>2006-12-26T22:27:00.000-08:00</published><updated>2006-12-26T22:31:13.671-08:00</updated><title type='text'>Dear Starbucks</title><content type='html'>I enjoyed the first cup of espresso but I was puzzled what a "personal cup" was when I asked for my second espresso.  I found out that what I guess is called an "unpersonal cup" is a to-go cup, and an actual cup made of ceramic material is a "personal cup".  I like the personal touch when I'm sitting there. &lt;br /&gt;&lt;br /&gt;Why don't you have silverware?  It's rather messy to eat your fairly delicious coffee cake from the strange half paper bag it comes in.  I can't really fold the edge over and take it with me, it's too small.  Sorry about the crumbs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-7289061480544654426?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/7289061480544654426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=7289061480544654426' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/7289061480544654426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/7289061480544654426'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/12/dear-starbucks.html' title='Dear Starbucks'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-115666647165378548</id><published>2006-08-27T01:13:00.000-07:00</published><updated>2006-08-27T01:14:31.653-07:00</updated><title type='text'>Bad Blogger error</title><content type='html'>"001 java.io.IOException: No space left on deviceblog/18/40/0/arosien/archives/2006_08_01_arosien_archive.html"&lt;br /&gt;&lt;br /&gt;Oops.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-115666647165378548?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/115666647165378548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=115666647165378548' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115666647165378548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115666647165378548'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/08/bad-blogger-error.html' title='Bad Blogger error'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-115666637675024055</id><published>2006-08-27T01:12:00.000-07:00</published><updated>2006-08-27T01:12:56.763-07:00</updated><title type='text'>Rails Blob</title><content type='html'>&lt;a href="http://railsblob.blogspot.com/"&gt;Rails Blob&lt;/a&gt; is a hilarious blog about Ruby and Rails.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-115666637675024055?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/115666637675024055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=115666637675024055' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115666637675024055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115666637675024055'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/08/rails-blob.html' title='Rails Blob'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-115618202236181946</id><published>2006-08-21T10:33:00.000-07:00</published><updated>2006-08-21T10:40:22.373-07:00</updated><title type='text'>Starfish: not yet MapReduce</title><content type='html'>Lucas Carlson &lt;a href="http://tech.rufy.com/2006/08/mapreduce-for-ruby-ridiculously-easy.html"&gt;writes&lt;/a&gt; about using his &lt;a href="http://rufy.com/starfish/doc/"&gt;Starfish&lt;/a&gt; library to do &lt;a href="http://labs.google.com/papers/mapreduce.html"&gt;MapReduce&lt;/a&gt;.  He's not really doing MapReduce, but I like his Starfish library.&lt;br /&gt;&lt;br /&gt;I mention this because I wrote a basic MapReduce library in Ruby at Sharpcast.  Perhaps I can use Starfish as a good distributed processing abstraction.&lt;br /&gt;&lt;br /&gt;Here's the ubiquitous word-frequency program using my MapReduce:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;worker :word_count do&lt;br /&gt;       # [filename,line] =&gt; list([word,1])&lt;br /&gt;       map :reads =&gt; :text, :writes =&gt; :yaml do |filename,string|&lt;br /&gt;               string.split.each {|w| emit_intermediate(w, 1)}&lt;br /&gt;       end&lt;br /&gt;&lt;br /&gt;       # [word,counts] =&gt; list([word,freq])&lt;br /&gt;       reduce :reads =&gt; :yaml, :writes =&gt; :yaml do |word,counts|&lt;br /&gt;               sum = counts.inject(0) {|sum,v| sum + v}&lt;br /&gt;               emit word, sum&lt;br /&gt;       end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;I'll see if I can open-source it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-115618202236181946?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/115618202236181946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=115618202236181946' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115618202236181946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115618202236181946'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/08/starfish-not-yet-mapreduce.html' title='Starfish: not yet MapReduce'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-115569280603377475</id><published>2006-08-15T18:39:00.000-07:00</published><updated>2006-08-15T18:46:46.043-07:00</updated><title type='text'>Facebook: you are not REST</title><content type='html'>Facebook claims their &lt;a href="http://developers.facebook.com/documentation.php"&gt;API&lt;/a&gt; is &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;REST&lt;/a&gt;... umm, no.  &lt;br /&gt;&lt;br /&gt;First, every request uses HTTP method POST.  -1 points.&lt;br /&gt;&lt;br /&gt;Second, every request has a method=something, where something is some operation.  REST is not RPC.  Have you heard of resources and representations?  -1 points.&lt;br /&gt;&lt;br /&gt;Sorry Facebook.  And flickr.  And all the rest of you.  Kudos to Google who somewhat understands this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-115569280603377475?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/115569280603377475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=115569280603377475' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115569280603377475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115569280603377475'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/08/facebook-you-are-not-rest.html' title='Facebook: you are not REST'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-115533699402683305</id><published>2006-08-11T15:53:00.000-07:00</published><updated>2006-08-11T15:56:34.066-07:00</updated><title type='text'>Ruby tutorial code</title><content type='html'>I gave a little talk about Ruby to folks here at Sharpcast and thought I'd share the handout I prepared.  It covers most of the basics of Ruby.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-family: courier new;"&gt;#!/bin/env ruby&lt;br /&gt;# Ruby basics by Adam S. Rosien.  2-Aug-2006.&lt;br /&gt;&lt;br /&gt;# Comments are prefixed by #&lt;br /&gt;&lt;br /&gt;# Everything is an object.  No primitives.  nil is even an object.&lt;br /&gt;#&lt;br /&gt;# Methods are modeled as messages.  This is known as "duck" typing:&lt;br /&gt;# "If it walks like a duck and quacks like a duck, it must be a duck."&lt;br /&gt;# Interfaces are kind of moot; you just send a message and see if it responds.&lt;br /&gt;# Method don't require parenthesis unless needed for an ambiguity.&lt;br /&gt;#&lt;br /&gt;# Some naming conventions:&lt;br /&gt;#   ClassNames&lt;br /&gt;#   method_names and variable_names&lt;br /&gt;#   methods_asking_question? return true or false&lt;br /&gt;#   slightly_dangerous_method! that might have side-effects&lt;br /&gt;1.to_s             # '1'&lt;br /&gt;'foo'.nil?         # false&lt;br /&gt;nil.nil?           # true&lt;br /&gt;' foo '.strip!     # modifies string in place, removing leading/trailing spaces&lt;br /&gt;&lt;br /&gt;# What's an object's class?&lt;br /&gt;'foo'.class              # String&lt;br /&gt;'foo'.class.class        # Class&lt;br /&gt;'foo'.class.class.class  # Class&lt;br /&gt;&lt;br /&gt;# Traverse the class hierarchy.&lt;br /&gt;String.superclass  # Object&lt;br /&gt;Object.superclass  # nil&lt;br /&gt;&lt;br /&gt;# Symbols: objects used to represent unique names in the intepreter.&lt;br /&gt;asym = :sym&lt;br /&gt;&lt;br /&gt;# Other reflection: You can query an object about messages and send them, i.e., make a method call.&lt;br /&gt;'foo'.respond_to? :asdf    # false&lt;br /&gt;'foo'.respond_to? :length  # true&lt;br /&gt;'foo'.send :length         # 3&lt;br /&gt;&lt;br /&gt;# Basic types&lt;br /&gt;i = 500&lt;br /&gt;f = 500.1&lt;br /&gt;s = 'I want my MTV on channel 9.'&lt;br /&gt;# Use double quotes and #{} to expand template.&lt;br /&gt;s = "I want my MTV on channel #{i}." # "I want my MTV on channel 500"&lt;br /&gt;&lt;br /&gt;# Arrays&lt;br /&gt;array = [1, 2, 3]&lt;br /&gt;array.size  # 3&lt;br /&gt;array[1]    # 2&lt;br /&gt;&lt;br /&gt;# Hashes, i.e., maps&lt;br /&gt;hash = { 'foo' =&gt; 'bar', 'baz' =&gt; 999 }&lt;br /&gt;hash['foo']  # 'bar'&lt;br /&gt;hash['baz']  # 999&lt;br /&gt;hash[1234]   # nil&lt;br /&gt;&lt;br /&gt;# Classes&lt;br /&gt;class Foo&lt;br /&gt;        # Define a class method.&lt;br /&gt;        def Foo.all_the_time&lt;br /&gt;                "Foo all the time!"&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;        # Called when object is created.&lt;br /&gt;        def initialize&lt;br /&gt;                # Instance variables are prefixed with '@'.&lt;br /&gt;                @bar = 'bar'&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;        # Define a method named bar that returns the value of the instance variable @bar.&lt;br /&gt;        def bar&lt;br /&gt;                # No 'return' needed.  Methods return the value of the last expression.&lt;br /&gt;                @bar&lt;br /&gt;        end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# Objects are created by calling 'new' on their class.&lt;br /&gt;foo = Foo.new&lt;br /&gt;&lt;br /&gt;# Instance method.&lt;br /&gt;foo.bar  # 'bar'&lt;br /&gt;&lt;br /&gt;# Class method.&lt;br /&gt;Foo.all_the_time  # 'Foo all the time!"&lt;br /&gt;&lt;br /&gt;# You can define a method on an individual object!  (Known as "singleton method")&lt;br /&gt;def foo.baz&lt;br /&gt;        'baz'&lt;br /&gt;end&lt;br /&gt;foo.baz  # 'baz'&lt;br /&gt;&lt;br /&gt;# You can even add or change methods on any other class!  (This can be a good thing.)&lt;br /&gt;class String&lt;br /&gt;        # self is equivalent to 'this' in Java or C++.&lt;br /&gt;        # to_s returns the string representation of an object.&lt;br /&gt;        def wiggly&lt;br /&gt;                "~~~#{self.to_s}~~~"&lt;br /&gt;        end&lt;br /&gt;end&lt;br /&gt;"ruby".wiggly  # '~~~ruby~~~'&lt;br /&gt;&lt;br /&gt;# If an object doesn't respond to a message, the 'method_missing' method is called.&lt;br /&gt;# You can override this method in your classes for magical behavior.&lt;br /&gt;class Foo&lt;br /&gt;        # sym is the name of the method called, args is an array of arguments.&lt;br /&gt;        def method_missing sym, *args&lt;br /&gt;                puts "I can't #{sym}!"&lt;br /&gt;        end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;Foo.new.throw_ninja_stars  # "I can't throw_ninja_stars!"&lt;br /&gt;&lt;br /&gt;# Inheritance&lt;br /&gt;class Bar &lt; Foo&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# Blocks: the most useful feature of Ruby.&lt;br /&gt;# A block is passed to a method which may 'yield' values to it.&lt;br /&gt;&lt;br /&gt;# The each method of an array takes a block, and yields each element of the array to it.&lt;br /&gt;# Using braces block syntax.&lt;br /&gt;array.each {|elem| puts elem }  # 1&lt;br /&gt;                                # 2&lt;br /&gt;                                # 3&lt;br /&gt;&lt;br /&gt;# Using do-end block syntax.&lt;br /&gt;array.each do |elem|&lt;br /&gt;        puts elem&lt;br /&gt;end  # 1&lt;br /&gt;     # 2&lt;br /&gt;     # 3&lt;br /&gt;&lt;br /&gt;# Defining a method that takes a block:&lt;br /&gt;class Foo&lt;br /&gt;        # Yield the value of @bar to the block three times.&lt;br /&gt;        def bar_three_times&lt;br /&gt;                yield @bar&lt;br /&gt;                yield @bar&lt;br /&gt;                yield @bar&lt;br /&gt;        end&lt;br /&gt;end&lt;br /&gt;Foo.new.bar_three_times {|bar| puts bar}  # bar&lt;br /&gt;                                          # bar&lt;br /&gt;                                          # bar&lt;br /&gt;&lt;br /&gt;# Useful methods that take blocks.&lt;br /&gt;[1,2,3].map {|elem| elem + 1}            # [2,3,4]&lt;br /&gt;[1,2,3].find_all {|elem| elem % 2 == 0}  # [2]&lt;br /&gt;[1,2,3].reject {|elem| elem % 2 == 0}    # [1,3]&lt;br /&gt;[3,1,6,3,6,4,8].sort.uniq                # [1,3,4,6,8]&lt;br /&gt;['foosieseses', 'barsieses', 'bazzies'].sort_by {|elem| elem.length} # ["bazzies", "barsieses", "foosieseses"]&lt;br /&gt;&lt;br /&gt;# Inject takes an initial value for an accumulator, passing the accumulator and element to the block.&lt;br /&gt;# The accumulator is set to the value the block returns.&lt;br /&gt;[1,2,3].inject(0) {|sum, elem| sum + elem}    # 6&lt;br /&gt;[2,3,4].inject(1) {|prod, elem| prod * elem}  # 24&lt;br /&gt;&lt;br /&gt;{'a' =&gt; 1, 'b' =&gt; 2}.each_pair {|k,v| puts "#{k} = #{v}"}  # a = 1&lt;br /&gt;                                                           # b = 2&lt;br /&gt;# Metaprogramming: powerful mojo.  Code that writes code.&lt;br /&gt;# Why?  So you don't have to.&lt;br /&gt;&lt;br /&gt;# It's a pain to have to write getters and setters for instance variables.&lt;br /&gt;# Ruby defines helper class methods to do this for you.&lt;br /&gt;class Foo&lt;br /&gt;        attr_reader :bar    # Defines method 'bar' that returns @bar.&lt;br /&gt;        attr_writer :bar    # Defines method 'bar=' that sets @bar to a value.&lt;br /&gt;        attr_accessor :bar  # Reader and writer.&lt;br /&gt;end&lt;br /&gt;f = Foo.new&lt;br /&gt;f.bar  # 'bar'&lt;br /&gt;f.bar = 'foo'&lt;br /&gt;f.bar  # 'foo'&lt;br /&gt;&lt;br /&gt;# How might these kinds of methods be written?&lt;br /&gt;class Bar&lt;br /&gt;        # The *syms says that there are a variable number of method arguments,&lt;br /&gt;        # so just turn them into an array.&lt;br /&gt;        def Bar.attr_reader *syms&lt;br /&gt;                syms.each do |sym|&lt;br /&gt;                        # Evaluate this string as ruby in the context of the current class.&lt;br /&gt;                        class_eval "def #{sym}; @#{sym}; end"&lt;br /&gt;                end&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;        def initialize&lt;br /&gt;                @asdf = 'asdf'&lt;br /&gt;                @ghij = 'ghij'&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;        attr_reader :asdf, :ghij&lt;br /&gt;end&lt;br /&gt;b = Bar.new&lt;br /&gt;b.asdf  # 'asdf'&lt;br /&gt;&lt;br /&gt;# You can also evaluate a string as ruby in the context of an instance, rather than a class.&lt;br /&gt;b.instance_eval "asdf"  # 'asdf'&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-115533699402683305?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/115533699402683305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=115533699402683305' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115533699402683305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115533699402683305'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/08/ruby-tutorial-code.html' title='Ruby tutorial code'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-115344694775369141</id><published>2006-07-20T18:53:00.000-07:00</published><updated>2006-07-24T11:20:51.796-07:00</updated><title type='text'>Roma or Gibu?</title><content type='html'>Who might win the share a picture contest?  You make the call.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sharpcast.com/blog/2006/07/20/sync-so-good-it-is-like-winning-a-free-motorola-q/"&gt;Gibu&lt;/a&gt; taunts.&lt;br /&gt;&lt;br /&gt;Roma's email is rj ha ve ri atttttt sharpcast dottt com if you want to share with her.&lt;br /&gt;&lt;br /&gt;Mine is adam@rosien.net of course!&lt;br /&gt;&lt;br /&gt;Share a picture with whomever you like.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-115344694775369141?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/115344694775369141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=115344694775369141' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115344694775369141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115344694775369141'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/07/roma-or-gibu_20.html' title='Roma or Gibu?'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-115333256925520227</id><published>2006-07-19T11:08:00.000-07:00</published><updated>2006-07-19T11:12:28.886-07:00</updated><title type='text'>We're, umm, cool!</title><content type='html'>Sharpcast is Komando.com's cool site of the day: &lt;a href="http://www.komando.com/toolbox.aspx?mode=print&amp;id=1943"&gt;http://www.komando.com/toolbox.aspx?mode=print&amp;amp;id=1943&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-115333256925520227?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/115333256925520227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=115333256925520227' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115333256925520227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115333256925520227'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/07/were-umm-cool.html' title='We&apos;re, umm, cool!'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-115318382669788799</id><published>2006-07-17T17:48:00.000-07:00</published><updated>2006-07-17T17:50:26.706-07:00</updated><title type='text'>Review Sharpcast Photos on Download.com</title><content type='html'>If you've tried &lt;a href="http://photos.sharpcast.com"&gt;Sharpcast Photos&lt;/a&gt;, you can review it on &lt;a href="http://www.download.com/Sharpcast-Photos/3000-2193_4-10560963.html?tag=lst-0-2"&gt;Download.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-115318382669788799?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/115318382669788799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=115318382669788799' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115318382669788799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115318382669788799'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/07/review-sharpcast-photos-on-downloadcom.html' title='Review Sharpcast Photos on Download.com'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-115275892432998731</id><published>2006-07-12T19:48:00.000-07:00</published><updated>2006-07-12T19:48:44.340-07:00</updated><title type='text'>Walt likes us, maybe you will too</title><content type='html'>&lt;a href="http://online.wsj.com/article_email/SB115275297896005247-lMyQjAxMDE2NTEyMjcxNTIyWj.html"&gt;http://online.wsj.com/article_email/SB115275297896005247-lMyQjAxMDE2NTEyMjcxNTIyWj.html &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-115275892432998731?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/115275892432998731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=115275892432998731' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115275892432998731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115275892432998731'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/07/walt-likes-us-maybe-you-will-too.html' title='Walt likes us, maybe you will too'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-115220362570904041</id><published>2006-07-06T09:32:00.000-07:00</published><updated>2006-07-06T09:33:45.720-07:00</updated><title type='text'>Sharpcast Beta</title><content type='html'>By the way, we're in &lt;a href="http://www.sharpcast.com/download"&gt;beta&lt;/a&gt;!  Desktop, web, and now mobile.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-115220362570904041?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/115220362570904041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=115220362570904041' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115220362570904041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115220362570904041'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/07/sharpcast-beta.html' title='Sharpcast Beta'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-115217037228386826</id><published>2006-07-06T00:11:00.000-07:00</published><updated>2006-07-06T00:19:32.293-07:00</updated><title type='text'>Finished the Aubrey/Maturin series</title><content type='html'>I finished &lt;a href="http://www.wwnorton.com/pob/pobhome.htm"&gt;Patrick O'Brian Aubrey/Maturin series&lt;/a&gt; this July 4th weekend, closed book number &lt;span style="font-weight: bold;"&gt;20&lt;/span&gt;(!) and felt a lump in my throat.  It was such a pleasure to read.  I highly recommend it. &lt;br /&gt;&lt;br /&gt;It's one thing where the characters age during the course of a book; it's another where they grow older slowly book after book, each continuing to face their own challenges and failures.  If anything, the books teach a lively persistence in the face of a changing life and world full of hard knocks.&lt;br /&gt;&lt;br /&gt;I'll try to slow down and just think now, take a break from reading.  I hope to have some Sharpcast API stuff out to the world this summer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-115217037228386826?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/115217037228386826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=115217037228386826' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115217037228386826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/115217037228386826'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/07/finished-aubreymaturin-series.html' title='Finished the Aubrey/Maturin series'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-114987028751172601</id><published>2006-06-09T09:23:00.000-07:00</published><updated>2006-06-09T09:24:47.520-07:00</updated><title type='text'>Splunk is cool</title><content type='html'>&lt;a href="http://www.splunk.com/"&gt;Splunk&lt;/a&gt; looks really cool.  We're doing a lot of operational work now that we've got real users, and everyone ends up doing something like they do anyway, but not as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-114987028751172601?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/114987028751172601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=114987028751172601' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114987028751172601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114987028751172601'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/06/splunk-is-cool.html' title='Splunk is cool'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-114980028757661892</id><published>2006-06-08T13:52:00.000-07:00</published><updated>2006-06-08T13:58:07.586-07:00</updated><title type='text'>Blogger response time is so slow!</title><content type='html'>WTF!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-114980028757661892?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/114980028757661892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=114980028757661892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114980028757661892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114980028757661892'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/06/blogger-response-time-is-so-slow.html' title='Blogger response time is so slow!'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-114857658104319130</id><published>2006-05-25T10:02:00.000-07:00</published><updated>2006-05-25T10:03:01.100-07:00</updated><title type='text'>We're in alpha!</title><content type='html'>&lt;a href="http://www.sharpcast.com"&gt;http://www.sharpcast.com &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-114857658104319130?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/114857658104319130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=114857658104319130' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114857658104319130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114857658104319130'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/05/were-in-alpha.html' title='We&apos;re in alpha!'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-114835795436028429</id><published>2006-05-22T21:15:00.000-07:00</published><updated>2006-05-22T21:19:14.370-07:00</updated><title type='text'>Hype and comments</title><content type='html'>A comment in &lt;a href="http://www.sharpcast.com/blog/2006/04/19/you-cant-staple-a-chicken-to-a-pig-and-call-it-breakfast/"&gt;Gibu's blog&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;Enought blogging and constant hyping, how about launching this product that is apparently no different than &lt;a href="http://www.vizrea.com/" rel="nofollow"&gt;www.vizrea.com&lt;/a&gt;?&lt;/blockquote&gt;&lt;br /&gt;Thanks for the criticism.  Really, we're working on it; it's difficult to pull off.  Come in for a demo and we'll try to change your mind.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-114835795436028429?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/114835795436028429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=114835795436028429' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114835795436028429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114835795436028429'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/05/hype-and-comments.html' title='Hype and comments'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-114791735477435977</id><published>2006-05-17T18:54:00.000-07:00</published><updated>2006-05-17T18:55:54.783-07:00</updated><title type='text'>Server configuration, #2</title><content type='html'>&lt;a href="http://manuals.rubyonrails.com/read/book/17"&gt;Capistrano&lt;/a&gt; looks good.  Simple, clean.  Perhaps I'll try it out when I have a bit more time.&lt;br /&gt;&lt;br /&gt;Is that the only URL?  The Rails wiki is rather empty about this tool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-114791735477435977?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/114791735477435977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=114791735477435977' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114791735477435977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114791735477435977'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/05/server-configuration-2.html' title='Server configuration, #2'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-114780583330020883</id><published>2006-05-16T11:38:00.000-07:00</published><updated>2006-05-16T11:57:13.696-07:00</updated><title type='text'>Server configuration</title><content type='html'>Server configuration is a pain, especially for distributed systems.  My problem?  I want n A processes running on m boxes talking to p B processes on q boxes, where a m-box can also be a q-box.  One issue is each process needs to use its own ports and other processes need to know those ports. &lt;br /&gt;&lt;br /&gt;There are so many ways to have one level of indirection, but all require a central bootstrap/lookup.&lt;br /&gt;&lt;br /&gt;I suppose something like zeroconf would help, as each process would broadcast its info to the others, but is that too heavyweight?&lt;br /&gt;&lt;br /&gt;I looked briefly at &lt;a href="http://reductivelabs.com/projects/puppet"&gt;Puppet&lt;/a&gt; &lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;since I'm on a Ruby kick, but it seems too abstract.  Why should I have to define a class/object system inside a domain-specific language inside Ruby, when I have Ruby itself?  What I mean is, I don't think systems configuration engineers think in terms of inheritance, they think in terms of processes and ports and configuration strings and policies.  I get a bad feeling whenever there is a keyword 'class' intended for downstream users.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-114780583330020883?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/114780583330020883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=114780583330020883' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114780583330020883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114780583330020883'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/05/server-configuration.html' title='Server configuration'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-114745622954491580</id><published>2006-05-12T10:44:00.000-07:00</published><updated>2006-05-12T10:50:29.550-07:00</updated><title type='text'>Too many things</title><content type='html'>Recompiling for 64-bit architecture.&lt;br /&gt;Performance testing.&lt;br /&gt;Installing application monitoring system at the data center.  (wishing centos had a newer Ruby; have to install via rpm ick)&lt;br /&gt;Bug-a-thon #2.&lt;br /&gt;Company going to MI-III.&lt;br /&gt;Going to Santa Cruz for birthday #31.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-114745622954491580?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/114745622954491580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=114745622954491580' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114745622954491580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114745622954491580'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/05/too-many-things.html' title='Too many things'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-114728308023639384</id><published>2006-05-10T10:39:00.000-07:00</published><updated>2006-05-10T10:44:40.246-07:00</updated><title type='text'>Lines of code</title><content type='html'>I wanted to know if I have been productive, so I looked at the lines of code I've been writing for the monitoring system.  Here it is:&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;   339 Metrics.rb&lt;br /&gt;   62 ScMetrics.rb&lt;br /&gt;   42 sc_poller.rb&lt;br /&gt;  194 webmetrics.rb&lt;br /&gt;  637 total&lt;br /&gt;&lt;br /&gt;The web site (using Camping) is still less than 200 lines.   sc_poller.rb gets metrics from machines. Metrics.rb is a little large, but contains the code generation code and generous comments in case I get hit by a bus and someone needs to read Ruby for the first time.  ScMetrics.rb is where I use the code generation and contains the graph definitions; it's the file that tells me how productive I am, since if I want to add a new kind of graph I should only have to add a new definition to this file.  62 lines isn't bad for 10 graph definitions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-114728308023639384?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/114728308023639384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=114728308023639384' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114728308023639384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114728308023639384'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/05/lines-of-code.html' title='Lines of code'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-114720987625762528</id><published>2006-05-09T14:23:00.000-07:00</published><updated>2006-05-09T14:28:03.053-07:00</updated><title type='text'>Today is Bug-a-thon day</title><content type='html'>Today is a Sharpcast Bug-a-thon day, where we take a release candidate and play with it, that is, we try to break it. &lt;br /&gt;&lt;br /&gt;I'm anxious to see how all the pieces--desktop, mobile, and web--fit together for this release, and of course what kind of graphs my monitoring system pumps out when we're using the app simultaneously.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-114720987625762528?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/114720987625762528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=114720987625762528' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114720987625762528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114720987625762528'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/05/today-is-bug-thon-day.html' title='Today is Bug-a-thon day'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-114713785045240369</id><published>2006-05-08T17:34:00.000-07:00</published><updated>2006-05-08T18:24:10.510-07:00</updated><title type='text'>Grokking Ruby metaprogramming</title><content type='html'>I finally grok metaprogramming in Ruby and am happily generating methods into my subclasses.  The trick I had to realize is that I need to view the generated methods as template methods available to "normal" methods.  For example, if I have a graph method, it can call a generated filter method to filter what to graph.  My monitoring system for the backend of Sharpcast is so much cleaner now.&lt;br /&gt;&lt;br /&gt;Another way of describing Ruby metaprogramming--one of many styles--is that you avoid the cost of overriding methods in subclasses by generating the methods you want from the base class into the subclass.&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-114713785045240369?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/114713785045240369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=114713785045240369' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114713785045240369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114713785045240369'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/05/grokking-ruby-metaprogramming.html' title='Grokking Ruby metaprogramming'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-114696927637986772</id><published>2006-05-06T19:25:00.000-07:00</published><updated>2006-05-06T19:34:36.386-07:00</updated><title type='text'>One reason I like my job</title><content type='html'>This week I've been writing monitoring and analysis tools in Ruby, adding features and fixing bugs in C++, and reviewing Java APIs.  Being able to code in the most appropriate language, using the features of those particular languages, is one reason I really like my job at Sharpcast.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-114696927637986772?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/114696927637986772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=114696927637986772' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114696927637986772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114696927637986772'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/05/one-reason-i-like-my-job.html' title='One reason I like my job'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-114676581294240820</id><published>2006-05-04T10:48:00.000-07:00</published><updated>2006-05-04T11:03:32.963-07:00</updated><title type='text'>Camping and microframeworks</title><content type='html'>I'm loving &lt;a href="http://camping.rubyforge.org/files/README.html"&gt;Camping&lt;/a&gt;, a web framework that's 4k in size written in Ruby.  I just learned it yesterday.  All I need is a simple dynamic web site and I can wrote the whole thing in--let me look--146 lines with comments.&lt;br /&gt;&lt;br /&gt;It's great because it's set up to be URL/controller-friendly.  What do I mean by that?  Most web frameworks force you into some limited URL scheme.  Especially Java servlet containers.  But I love the &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;REST&lt;/a&gt; style and want my URLs to name &lt;span style="font-weight: bold;"&gt;resources&lt;/span&gt;, not actions.  (Use HTTP people!)&lt;br /&gt;&lt;br /&gt;Boiled down to the actual program, this means that URLs need to map to model objects, the M in MVC.  In Camping, you do this:&lt;br /&gt;&lt;pre&gt;&lt;span style="font-family:courier new;"&gt;class Provider &lt; R(/(\d+)/)    &lt;br /&gt; def get provider_id        &lt;br /&gt;   provider = Provider.find provider_id        &lt;br /&gt;   # do something with provider object    &lt;br /&gt; end&lt;br /&gt;end  &lt;/span&gt;&lt;/pre&gt;This says the URL /3 maps to a Provider object with id 3.&lt;br /&gt;&lt;br /&gt;In Java I created an interface called ResourceMapping that mapped between URLs and a Map of objects.  I haven't found a Java web framework that provides this kind of emphasis on resources.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-114676581294240820?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/114676581294240820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=114676581294240820' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114676581294240820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114676581294240820'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/05/camping-and-microframeworks.html' title='Camping and microframeworks'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-114659531246780073</id><published>2006-05-02T11:40:00.000-07:00</published><updated>2006-05-02T11:41:52.476-07:00</updated><title type='text'>Yay, graphs!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6706/2818/1600/network-bytes-received.rrd.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/6706/2818/320/network-bytes-received.rrd.gif" alt="" border="0" /&gt;&lt;/a&gt;Sometimes it's those little syntax errors that really bite your butt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-114659531246780073?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/114659531246780073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=114659531246780073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114659531246780073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114659531246780073'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/05/yay-graphs.html' title='Yay, graphs!'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-114652549392957718</id><published>2006-05-01T16:17:00.000-07:00</published><updated>2006-05-01T16:18:13.936-07:00</updated><title type='text'>rrdtool</title><content type='html'>I love it.  I hate it.  If you are an rrdtool wizard, please email me.  COUNTERs are really f'd up with whatever parameters I'm using.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-114652549392957718?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/114652549392957718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=114652549392957718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114652549392957718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114652549392957718'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/05/rrdtool.html' title='rrdtool'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-114642539714691562</id><published>2006-04-30T12:24:00.000-07:00</published><updated>2006-04-30T12:29:57.153-07:00</updated><title type='text'>One-button easy</title><content type='html'>&lt;blockquote&gt;The secret to success is to make everything one-button easy, then get out of the way. If you think collaborative architecture matters more, click the charts: The same Alexa plots that show MySpace and YouTube obliterating top sites reveal that &lt;a href="http://www.alexa.com/data/details/traffic_details?&amp;range=6m&amp;amp;compare_sites=flickr.com&amp;url=http://www.youtube.com" target="_blank"&gt;Flickr&lt;/a&gt;, &lt;a href="http://www.alexa.com/data/details/traffic_details?&amp;amp;range=6m&amp;compare_sites=digg.com&amp;amp;url=http://www.youtube.com" target="_blank"&gt;Digg&lt;/a&gt; and &lt;a href="http://www.alexa.com/data/details/traffic_details?&amp;range=6m&amp;amp;compare_sites=icio.us&amp;url=http://www.youtube.com" target="_blank"&gt;del.icio.us&lt;/a&gt; have plateaued with audiences &lt;a href="http://www.alexa.com/data/details/traffic_details?&amp;amp;range=6m&amp;compare_sites=digg.com&amp;amp;url=http://www.slate.com" target="_blank"&gt;barely bigger than &lt;strong&gt;&lt;em&gt;Slate&lt;/em&gt;&lt;/strong&gt;'s&lt;/a&gt;. Photos, news, and other people's bookmarks just aren't as interesting as bootleg TV and checking out the hotties. The easier it gets to use, the less geeky the Net becomes, and the more it starts to look like real life. &lt;a href="http://www.slate.com/id/2140635/"&gt;http://www.slate.com/id/2140635/&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;Yes!  Real life!  Mom, here's a photo of us at the beach.  Friend, I'm so wasted right now.  Lady-friend, here's a kiss.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-114642539714691562?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/114642539714691562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=114642539714691562' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114642539714691562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114642539714691562'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/04/one-button-easy.html' title='One-button easy'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-114624516500610427</id><published>2006-04-28T10:18:00.000-07:00</published><updated>2006-04-28T10:26:05.013-07:00</updated><title type='text'>New pods</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6706/2818/1600/IMG_9141.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/6706/2818/320/IMG_9141.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The pods have arrived!  Soon the Sharpcast busy bees will move in from the old office next door.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-114624516500610427?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/114624516500610427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=114624516500610427' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114624516500610427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114624516500610427'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/04/new-pods.html' title='New pods'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-114615934572241731</id><published>2006-04-27T10:30:00.000-07:00</published><updated>2006-04-27T10:35:45.736-07:00</updated><title type='text'>Peter gets a demo</title><content type='html'>Friend-of-friend Peter came by Sharpcast the other day to see a demo and met a lot of the company.  He sent a nice email and I thought I'd share it.  He's planning on going to Microsoft when he finishes his master's, but we tried to convince him that Sharpcast might be a better choice... :P&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span style="font-family:Arial;"&gt;Hi Adam,&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;big&gt;&lt;big&gt; &lt;/big&gt;&lt;/big&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;"&gt;Thank you for the tour yesterday.  The demo was awesome --  you guys really got the interaction right -- and with such minimal latency.  It  must be a pretty tough problem to get all of that working with such good  responsiveness.  To me the whole thing just makes a lot of sense and the  platform definitely "feels" right.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;big&gt;&lt;big&gt; &lt;/big&gt;&lt;/big&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;"&gt;Thanks also for introducing me to everybody.  It was cool  to see what the Silicon Valley startup life is like.  It seemed like there was  lots of excitement everywhere and that people were really into making a cool  product.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;big&gt;&lt;big&gt; &lt;/big&gt;&lt;/big&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;"&gt;Okay, well I think you guys definitely have a great idea  and have just submitted my email for a beta request!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;big&gt;&lt;big&gt; &lt;/big&gt;&lt;/big&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;"&gt;-- Peter&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt; &lt;/div&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-114615934572241731?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/114615934572241731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=114615934572241731' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114615934572241731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114615934572241731'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/04/peter-gets-demo.html' title='Peter gets a demo'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-114615677091786948</id><published>2006-04-27T09:47:00.000-07:00</published><updated>2006-04-27T09:52:50.926-07:00</updated><title type='text'>Sync and Syck</title><content type='html'>Take a look at &lt;a href="http://whytheluckystiff.net/syck/"&gt;Syck&lt;/a&gt;, a YAML serializer/deserializer.  I love why the lucky stiff.  He sees Rails come out, so he writes his own framework that's 4k in size.  He's so awesome.  I want a chunky bacon t-shirt.&lt;br /&gt;&lt;br /&gt;I'd love to plug YAML into &lt;a href="http://www.sharpcast.com"&gt;Sharpcast&lt;/a&gt;'s object system.  Then any language could generate YAML and could be sync'd--is that the correct form of the verb?--via Sharpcast.  Maybe it's one level too indirect, but it might be a nice lowest common denominator.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-114615677091786948?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/114615677091786948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=114615677091786948' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114615677091786948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114615677091786948'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/04/sync-and-syck.html' title='Sync and Syck'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-114607061819089035</id><published>2006-04-26T09:45:00.000-07:00</published><updated>2006-04-26T09:56:58.200-07:00</updated><title type='text'>Event systems and journalism</title><content type='html'>I'm working on a better monitoring and event system for Sharpcast's underlying platform.  Per-machine metrics like the number of current connections are good, but we also want to record user events like someone creating an album or sharing a photo so we can better understand our users behavior and create a better product. &lt;br /&gt;&lt;br /&gt;It's easier in some ways to store events as they happen, rather than query the entire database for aggregate behavior.  So I need to define what an event is.  Generically, events are almost exactly the classic elements of piece of journalism: who, what, where, why, when and how.  For us, this translates to&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Who: user id&lt;/li&gt;&lt;li&gt;What: the action taken and any parameters&lt;/li&gt;&lt;li&gt;Where: IP address&lt;/li&gt;&lt;li&gt;Why: (very hard to compute a user's intentions)&lt;/li&gt;&lt;li&gt;When: timestamp&lt;/li&gt;&lt;li&gt;How: client (photos desktop, photos mobile, photos web)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I'll see how this turns out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-114607061819089035?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/114607061819089035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=114607061819089035' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114607061819089035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114607061819089035'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/04/event-systems-and-journalism.html' title='Event systems and journalism'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-114598436641049102</id><published>2006-04-25T09:47:00.000-07:00</published><updated>2006-04-25T09:59:26.423-07:00</updated><title type='text'>del.icio.us as a proxy for me</title><content type='html'>I'm giving myself 15 minutes to write an entry each day.  This morning I was pondering what to write about, so I looked at &lt;a href="http://del.icio.us/adam.rosien"&gt;my collected links&lt;/a&gt; in del.icio.us, presented in reverse chronological order, and was struck by the fact that it mirrors quite well what I'm working on at work, coupled with what I'm currently interested in. &lt;br /&gt;&lt;br /&gt;(This is simply because I often bookmark answers to my own work questions, probably a common practice among software engineers.)&lt;br /&gt;&lt;br /&gt;I think an excellent feature for del.icio.us would be a "tag stream", akin to David Galernter's Lifestreams, where your link tags would be clustered over time and you could get a sense of how your focus has shifted from topic to topic.&lt;br /&gt;&lt;br /&gt;It would also be an excellent proxy for a resum&amp;eacute;, or at least help you maintain one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-114598436641049102?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/114598436641049102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=114598436641049102' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114598436641049102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114598436641049102'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/04/delicious-as-proxy-for-me.html' title='del.icio.us as a proxy for me'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26881033.post-114591794073242336</id><published>2006-04-24T15:22:00.000-07:00</published><updated>2006-04-24T15:32:20.733-07:00</updated><title type='text'>Starting to blog for work</title><content type='html'>&lt;a href="http://redcouch.typepad.com/"&gt;Shel Israel&lt;/a&gt; has been educating our executives at &lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://www.sharpcast.com"&gt;Sharpcast&lt;/a&gt; about blogs and talked us last Friday as a company.  I liked his talk, mainly because I too hate marketing and blogs are a good way to market yourself and your company and be kept somewhat honest about it.  I volunteered to start a blog and won a copy of Shel's book for doing so.&lt;br /&gt;&lt;br /&gt;I want Sharpcast to succeed, so I thought I'd write short entries about my work and any other interesting things that come across my plate.  I have good blog mentors in &lt;a href="http://kwc.org/blog"&gt;kwc&lt;/a&gt; and &lt;a href="http://geekdom.net/blog"&gt;bp&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Maybe I'll read Shel's book too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26881033-114591794073242336?l=arosien.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arosien.blogspot.com/feeds/114591794073242336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26881033&amp;postID=114591794073242336' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114591794073242336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26881033/posts/default/114591794073242336'/><link rel='alternate' type='text/html' href='http://arosien.blogspot.com/2006/04/starting-to-blog-for-work.html' title='Starting to blog for work'/><author><name>Adam Rosien</name><uri>http://www.blogger.com/profile/06590504956582245789</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry></feed>
