<?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-1477573986339144843</id><updated>2011-12-01T15:36:23.581-08:00</updated><category term='bummer'/><category term='csrf'/><category term='clear.com'/><category term='erlang'/><category term='wimax'/><category term='collaboration'/><category term='jive'/><category term='shouldbeeasier'/><category term='hosting'/><category term='ontology'/><category term='tagsaregoodmicrosoft'/><category term='agile'/><category term='gi'/><category term='jive collaboration wikis'/><category term='past'/><category term='rant'/><category term='future'/><category term='erlang badcs fud'/><category term='apache'/><category term='linux'/><category term='die_browsers_die'/><category term='tech'/><category term='xmpp'/><category term='air'/><category term='java'/><category term='gripes'/><category term='security'/><category term='programming'/><category term='flex ria'/><category term='rinda'/><category term='flex'/><category term='rest'/><category term='xorg'/><category term='jini'/><category term='dynamic_vs_static same_ole rant'/><category term='integration'/><category term='iPhone'/><category term='present'/><category term='maven java'/><category term='cap'/><category term='microserf'/><category term='portland'/><category term='pain'/><category term='atom'/><category term='sharepain'/><category term='career'/><category term='ubuntu'/><category term='vista'/><category term='haxe'/><title type='text'>/etc/init.d/hack start</title><subtitle type='html'>Starting Viking Blog...      [ Ok ]</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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>41</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1477573986339144843.post-4141546148760550952</id><published>2011-03-04T20:53:00.000-08:00</published><updated>2011-03-04T21:19:11.591-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maven java'/><title type='text'>Jersey and Maven Share (i.e. Über Jars)</title><content type='html'>For the past year or so, much of the work I've done with Java has used &lt;a href="http://maven.apache.org/plugins/maven-shade-plugin/"&gt;Maven's Shade plugin&lt;/a&gt;. This plugin does a really excellent job of mashing dozens to hundreds of Java dependencies into a single jar file. This not only makes deployment easier, but for things like Hadoop jobs makes dependency management in general much easier.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unfortunately, using the Shade plugin does occasionally have some negative side effects. Namely, on some occasions I've had jar files stomp on each with non-obvious outcomes. Today was one of those times.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;The issue in this case only appeared in the production environment but not in test and not when running from my IDE under a debugger. The core service would start fine, but on any request, the code streaming data would throw an exception similar to:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-size: small; "&gt;&lt;span&gt;&lt;b class="highlight" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 102); background-position: initial initial; background-repeat: initial initial; "&gt;javax&lt;/b&gt;.&lt;b class="highlight" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 102); background-position: initial initial; background-repeat: initial initial; "&gt;ws&lt;/b&gt;.&lt;b class="highlight" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 102); background-position: initial initial; background-repeat: initial initial; "&gt;rs&lt;/b&gt;.WebApplicationException&lt;/span&gt;&lt;br /&gt;&lt;span&gt;    at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:240)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:593)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:514)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:505)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-size: small; "&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;This particular exception was particularly difficult to diagnose because Jersey writes a critical piece of data to stdout and not to the conventional logging infrastructure:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-size: small; "&gt;SEVERE: A message body writer for Java type, class java.lang.String, and MIME media type, application/octet-stream, was not found&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-size: small; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;When I finally realized this was the case, a Google search turned up &lt;a href="http://jersey.576304.n2.nabble.com/Jersey-1-0-3-seems-broken-td2884340.html"&gt;this discussion&lt;/a&gt; where the difficult diagnostics had already been published by Gaëtan Sheridan . From there, it was a matter of excluding specific portions of the jersey-server plugin from the shade-generated artifact and all was well.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The relevant portion of the POM file looks like so:&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    &amp;lt;plugin&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;maven-shade-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.4&amp;lt;/version&amp;gt;&lt;br /&gt;      &amp;lt;executions&amp;gt;&lt;br /&gt;        &amp;lt;execution&amp;gt;&lt;br /&gt;          &amp;lt;phase&amp;gt;package&amp;lt;/phase&amp;gt;&lt;br /&gt;          &amp;lt;goals&amp;gt;&lt;br /&gt;            &amp;lt;goal&amp;gt;shade&amp;lt;/goal&amp;gt;&lt;br /&gt;          &amp;lt;/goals&amp;gt;&lt;br /&gt;          &amp;lt;configuration&amp;gt;&lt;br /&gt;            &amp;lt;filters&amp;gt;&lt;br /&gt;              &amp;lt;filter&amp;gt;&lt;br /&gt;                &amp;lt;artifact&amp;gt;com.sun.jersey:jersey-server&amp;lt;/artifact&amp;gt;&lt;br /&gt;                &amp;lt;excludes&amp;gt;&lt;br /&gt;                  &amp;lt;exclude&amp;gt;META-INF/services/javax.ws.rs.ext.MessageBodyWriter&amp;lt;/exclude&amp;gt;&lt;br /&gt;                &amp;lt;/excludes&amp;gt;&lt;br /&gt;              &amp;lt;/filter&amp;gt;&lt;br /&gt;            &amp;lt;/filters&amp;gt;&lt;br /&gt;          &amp;lt;/configuration&amp;gt;&lt;br /&gt;        &amp;lt;/execution&amp;gt;&lt;br /&gt;      &amp;lt;/executions&amp;gt;&lt;br /&gt;    &amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Making that change fixed the issue.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The other painful reminder from this exercise was that common tools such as mvn jetty:run and launching from the IDE are no substitute for testing with the exact binaries and classpath used in production. Because my IDE and maven's jerry:run command manually assembled the classpath, it turns out that they did not experience the issue. Only when running directly from the über jar did the problem surface.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-4141546148760550952?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/4141546148760550952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=4141546148760550952' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/4141546148760550952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/4141546148760550952'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2011/03/jersey-and-maven-share-ie-uber-jars.html' title='Jersey and Maven Share (i.e. Über Jars)'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-7905264933304131303</id><published>2009-03-10T23:02:00.001-07:00</published><updated>2009-03-10T23:04:27.389-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jive'/><title type='text'>Jive Product Launch Videos</title><content type='html'>Our product marketing team undertook a huge new push this week for Jive's 3.0 product launch, new web site included.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Most fun though are the YouTube videos the team and other &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Jivers&lt;/span&gt; created:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 10px; white-space: pre; "&gt;http://www.youtube.com/watch?v=0Y6aceiLzCI&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 10px; white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 10px; white-space: pre;"&gt;http://www.youtube.com/watch?v=RThcPOmVC9o&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-7905264933304131303?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/7905264933304131303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=7905264933304131303' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/7905264933304131303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/7905264933304131303'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2009/03/jive-product-launch-videos.html' title='Jive Product Launch Videos'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-6643003567665446684</id><published>2009-03-10T22:37:00.000-07:00</published><updated>2009-03-10T22:39:23.267-07:00</updated><title type='text'>Next on My Reading List - Against Intellectual Monopoly</title><content type='html'>&lt;a href="http://www.newswise.com/articles/view/549822/?sc=dwhn"&gt;http://www.newswise.com/articles/view/549822/?sc=dwhn&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What intrigues me most is that its an economist-driven view. Not the normal FOSS evangelist vs. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;IP&lt;/span&gt; lawyer-type rant, but a different perspective, hopefully with some quantitative backing behind their assertions. Always hard to argue with numbers.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-6643003567665446684?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/6643003567665446684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=6643003567665446684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/6643003567665446684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/6643003567665446684'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2009/03/next-on-my-reading-list-against.html' title='Next on My Reading List - Against Intellectual Monopoly'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-1748647649709108624</id><published>2009-01-13T22:48:00.000-08:00</published><updated>2009-01-13T23:01:57.843-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wimax'/><category scheme='http://www.blogger.com/atom/ns#' term='portland'/><category scheme='http://www.blogger.com/atom/ns#' term='clear.com'/><title type='text'>Portland's clear.com Not Up to the Task</title><content type='html'>I was excited to see WiMax coming to Portland via &lt;a href="http://www.clear.com"&gt;clear.com&lt;/a&gt; but that excitement has ended now that I've learned more and that the service has been rolled-out:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;My main interest was for mobile access. I love the 3G on my iPhone, but without a way to tether to my laptop, I'm still forced into situations where I want to get online but cannot or have to pay yet another provider for service. Unfortunately, clear.com does not support Macs for their USB devices which I find stunning considering I see more Macs in downtown PDX than practically anywhere else I've traveled in the last few years. I'm feeling like they didn't research that one at all.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Support reps for clear.com's online chat is uneducated on their actual products. I asked if they support Mac and if there were Linux drivers for the USB dongle and the support resource happily told me "yes" to both. In talking with two different reps at clear.com kiosks around town, both confirmed only Windows is currently supported (again, in a town where Windows probably has the least market share of any urban area in the US for personal devices).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I suspect that clear.com is blowing up my satellite radio signal. &lt;a href="http://xmfan.com/viewtopic.php?t=99292"&gt;Others in PDX seem to suspect the same&lt;/a&gt;. All I can say for sure is that since clear.com's service came on line, my satellite radio equipment that was previously working just fine stopped holding a signal. The same equipment did not move, just mysteriously stopped functioning with a similar experience in my car's unit.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;For home service, the speed isn't really that impressive. Its slower than Qwest's high-end DSL at roughly the same price point, and definitely slower than Verizon's FIOS if you're lucky enough to have access to it - I for one can only dream.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;In general, beware Portland WiMax and specifically clear.com.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-1748647649709108624?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/1748647649709108624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=1748647649709108624' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/1748647649709108624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/1748647649709108624'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2009/01/portlands-clearcom-not-up-to-task.html' title='Portland&apos;s clear.com Not Up to the Task'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-2637015718164991284</id><published>2008-10-03T00:45:00.000-07:00</published><updated>2008-10-03T01:13:22.945-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='past'/><category scheme='http://www.blogger.com/atom/ns#' term='present'/><category scheme='http://www.blogger.com/atom/ns#' term='future'/><title type='text'>Prog-iona</title><content type='html'>Some how the &lt;a href="http://newsroom.progress.com/phoenix.zhtml?c=86919&amp;amp;p=RssLanding&amp;amp;cat=news&amp;amp;id=1196729"&gt;Progress acquisition of IONA&lt;/a&gt; slipped under my radar. Funny, because that brings many things on my periphery full circle.&lt;br /&gt;&lt;br /&gt;I used to work for C-bridge Internet Solutions. &lt;a href="http://news.cnet.com/2100-1017-962784.html"&gt;eXcelon bought C-bridge&lt;/a&gt; after the bubble burst in 2002. Fast forward to 2005 and I'm in Portland working for a now-defunct company trying to break into the ESB space via an open model. That space leaned towards &lt;a href="http://en.wikipedia.org/wiki/Java_Business_Integration"&gt;JBI&lt;/a&gt;. I'd still argue that we bet correct and that JBI has done a whole lot of not much, offering "vendor independent" layers on top of things that people didn't care about vendor independence for, but in 2005 we gave it a serious look.&lt;br /&gt;&lt;br /&gt;LogicBlaze used to be one of the primary FOSS backers of JBI and from the looks of the mailing list, their core team continues to be heavily involved in the development of &lt;a href="http://activemq.apache.org/"&gt;ActiveMQ&lt;/a&gt; on which their JBI implementation was based.&lt;br /&gt;&lt;br /&gt;By April 2007, LogicBlaze was acquired by IONA. Around that time, &lt;a href="http://fuzzypanic.blogspot.com/"&gt;Mike&lt;/a&gt; started talking with &lt;a href="http://www.iona.com/info/aboutus/management/larry_alston.htm"&gt;Larry&lt;/a&gt; who was our boss in the latter part of the eXcelon days. Mike and I were both at LM, and we regularly worked with Stephen who doesn't blog (sorry no link) but formerly worked for IONA. Mike's talks with Larry didn't go anywhere, but the IONA/C-Bridge/eXcelon/Progress/LM circle was complete.&lt;br /&gt;&lt;br /&gt;Now, last month, Progress buys IONA and Larry again works for Progress. I'm also again doing a deep dive into ActiveMQ, whose IP is now I guess owned by Progress who I used to work for. So in some sense, the company who owned my butt as far back as 1999 is still influencing my role today.&lt;br /&gt;&lt;br /&gt;Add to that mix a couple of interactions via &lt;a href="http://www.theserverside.com/"&gt;TSS&lt;/a&gt;, &lt;a href="http://en.oreilly.com/oscon2008/public/content/home"&gt;OSCON&lt;/a&gt; and IRC with &lt;a href="http://hiramchirino.com/blog/index.html"&gt;Hiram&lt;/a&gt; and &lt;a href="http://macstrac.blogspot.com/"&gt;James&lt;/a&gt; (which they probably don't recall but did result in &lt;a href="http://activemq.apache.org/team.html"&gt;some attribution&lt;/a&gt;), and things get even more tangled.&lt;br /&gt;&lt;br /&gt;It never fails to amaze and amuse me how small this business is, despite being so big. The networks I started making 10 years ago still come into play even today in subtle ways and keep overlapping. Six degrees of separation is nothing, I have trouble keeping it to two.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-2637015718164991284?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/2637015718164991284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=2637015718164991284' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/2637015718164991284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/2637015718164991284'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2008/10/prog-iona.html' title='Prog-iona'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1477573986339144843.post-5622644835181622075</id><published>2008-08-08T23:20:00.001-07:00</published><updated>2008-08-09T00:21:13.644-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='tech'/><title type='text'>Classes of iPhone Users</title><content type='html'>I've had an iPhone for some time now. While it does bother me that Apple doesn't really give two shakes about contributing back to the open source community on whose shoulders they have built, I'm also pragmatic. The device is simply the best of its kind out there.&lt;br /&gt;&lt;br /&gt;I like to consider myself a student of other iPhone users. Any time I see someone with one, "classic" or 3G, I like to snoop on what they are doing. Over the last few months, I've noticed a few classes of iPhone user emerging. What follows is my untrained attempt at social anthropology mixed with humor.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;The Frustrated Designer&lt;/span&gt; - a Mac user through and through. They always buy 1st gen Apple hardware, even though rational people know better. Most easily identified by their propensity to verbally express a tangible frustration attempting to use 97 nested &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;DIVs&lt;/span&gt;, advanced &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;CSS&lt;/span&gt; selectors and 12578 lines of JavaScript to center an image in the iPhone Safari interface. Would write an &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;ObjectiveC&lt;/span&gt; native app, but doesn't know what a compiler or socket or &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;ObjectiveC&lt;/span&gt; or a native apps is.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;The Trophy&lt;/span&gt; - doesn't really know why they have an iPhone, just that their wealthy partner gave them one. Most easily identified by well-manicured nails attempting to tap out a text message with the sound at full volume for each key press. Never types faster than twelve keys per minute. Commonly sits next to me on airplanes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;The Showman &lt;/span&gt;- Doesn't really know why he needs an iPhone, just that he does. Identify the showman by his inability to do much other than talk on the iPhone, set it on the table during meetings so you know it's there, and by the fact that his emails still end with "Sent from my iPhone" despite having the device for nearly a year.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;The Tech Luminary&lt;/span&gt; - Installs every possible application from the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;iTunes&lt;/span&gt; store hoping to gain status as someone qualified to comment on the state of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;iTunes&lt;/span&gt; Store/iPhone technology while at the same time not knowing a thing about the underlying platform. The luminary mocks Windows users for arbitrarily installing shareware from .&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;ru&lt;/span&gt; domains, but never questions why he has installed 47 iPhone applications, 43 of which are never used.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;The Frustrated Developer&lt;/span&gt; - Has an iPhone application in the works, but can't talk about it due to an unenforceable &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;NDA&lt;/span&gt;. Identify these users by their regular and sanctimonious references to their &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;NDA&lt;/span&gt; despite never having really finished an application or by their smug looks at local user groups.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;The Marketing Director &lt;/span&gt;- Only knows that they should have an iPhone because their underlings said so. Loves the speaker phone, thinks it's the major advance of the device. Most easily identified by the fact they are still running the same firmware they bought the device with.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;The Commuter&lt;/span&gt; - Found in urban areas, this individual cannot stop &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;texting&lt;/span&gt;, browsing, or listening to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;podcasts&lt;/span&gt; long enough to exhibit any awareness of those around him/her and actually move out of the path of egress for everyone else on the transit device. Likely to accidentally enter altercation with local &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;meth&lt;/span&gt; addict while engrossed in something Twitter-related.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;The Power User &lt;/span&gt;- The most elusive of the iPhone users, understands device limitations (most &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;Bluetooth&lt;/span&gt; profiles lacking, no Copy/Paste, no Search, AT&amp;amp;T partnership) along with a healthy distrust of anything Steve Jobs claims. Generally refuses to tout the virtues of the device unless overhearing someone rant about how much better a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;Nokia&lt;/span&gt; or RIM device is. Understands there are no better alternatives and that using the device sticks it to "the man" by making consumer opinion matter again. Hopes Android kicks major ass and that people will take &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;Openmoko&lt;/span&gt; seriously.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;It's probably obvious that I associate myself mostly with the latter category, but there is plenty of commuter in me as well.&lt;br /&gt;&lt;br /&gt;There is a snobbery around having an iPhone. It's sort of like riding a fixed-gear bike in Portland; you feel like it makes you cool, you usually go out of your way to let people know you have one. Then you see all of the other &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;DBs&lt;/span&gt; using one and realize its way too much machine for them. Some of them even run into walls while using the device you admire. You can't give up your baby, so you're left trying to quietly blend back into the masses hoping nobody noticed and that you don't get associated with the new user population. I'm sure there's a Gartner graph to prove it all out somewhere...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-5622644835181622075?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/5622644835181622075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=5622644835181622075' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/5622644835181622075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/5622644835181622075'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2008/08/classes-of-iphone-users.html' title='Classes of iPhone Users'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-7175187558637152656</id><published>2008-04-16T22:01:00.000-07:00</published><updated>2008-08-09T00:17:07.816-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><category scheme='http://www.blogger.com/atom/ns#' term='xorg'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='pain'/><title type='text'>I Can Ride a Bike With No Handlebars</title><content type='html'>&lt;a href="http://linux.slashdot.org/linux/08/04/16/2132201.shtml"&gt;This post on slashdot&lt;/a&gt; blew me away. I'm typing this on a Hardy/Kubunty alpha (maybe beta by now?) installation and it has been more difficult to install than several of my Gentoo installations - that's saying something.&lt;br /&gt;&lt;br /&gt;Granted, I went with KDE4 which is simply asking for problems, but really, this was a doozie. Issues of note:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Now famed Ubuntu  "Black Screen of Death" - I attribute this to my having some slamming video cards, but seriously, the people's distro should *never* get itself into a place where you can't fall back to the kernel fb. When good ole' Ctl+Shift+Del can't save you from X+driver maddness, something is fundamentally wrong. For the interested, I had to drop to a recovery console and install nvidia-glx-new, then hack xorg.conf to use nv drivers, then "activate" properietary nvidia drviers. Not pleasant.&lt;/li&gt;&lt;li&gt;Java UIs fail - mouse-over for certain Eclipse SWT widgets cores java. That is generally difficult to do - SWT is one of the more stable Java UIs out there and it dies *hard*.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Probably most important, my shell gets into some wierd sound death-trap. Yes, that's right, I said shell and sound are problems. Alarm bells going off for anyone yet? Basically, the DCOP issues on the Ubuntu forums don't seem to be fixed for me anyway, my shell is trying to do something sound related (even with sould off) and hanging until I start a corresponding shell to recover the first. The scenario looks something like - start System -&gt; Konsole -- see DCOP error message, see Konsole hang. Start System -&gt; Konsole 3 -- watch Konsole work while Konsole 3 hangs. The two seem to be fighting for control of the KDM and one but not both work at a time. I spend ~40% of my compute time in a shell. When something that fundamental doesn't work, I freak out.&lt;/li&gt;&lt;li&gt;FF3 widgets look like crap. That's not really Hardy or KDE4's fault, but it's true. Tabs, drop-down decorations both look simply aweful.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;In all fariness, Gusty didn't install properly on this hardware. Still, I'm not seeing how things in XORG land have gotten any better, infact they may have gotten worse. Complain all you want about Windows, at least Vista on the same hardware displayed a UI without me dropping to a rescue console.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-7175187558637152656?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/7175187558637152656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=7175187558637152656' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/7175187558637152656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/7175187558637152656'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2008/04/i-can-ride-bike-with-no-handlbars.html' title='I Can Ride a Bike With No Handlebars'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-8680660042621447916</id><published>2008-03-16T23:28:00.001-07:00</published><updated>2008-03-16T23:52:53.670-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tagsaregoodmicrosoft'/><category scheme='http://www.blogger.com/atom/ns#' term='collaboration'/><category scheme='http://www.blogger.com/atom/ns#' term='microserf'/><category scheme='http://www.blogger.com/atom/ns#' term='sharepain'/><title type='text'>Stale Cake - With Frosting!</title><content type='html'>Funny comments by Microsoft product manager Lawrence Liu on &lt;a href="http://mikeg.typepad.com/perceptions/2008/03/of-bread-butter.html"&gt;Mike Gotta's blog&lt;/a&gt;. Removing some noise between the lines:&lt;br /&gt;&lt;br /&gt;"I am asking customers to step back and assess what business problem(s) they’re trying to solve... Jive and IBM are trying to wedge ... themselves into the SharePoint 'pie' by focusing on feature-to-feature comparisons while we’re working hard with our partners to provide the right frosting (or Cool Whip) to solve our customers’ problems."&lt;br /&gt;&lt;br /&gt;I'm confused by Lawrence's response here for a couple of reasons:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Bad metaphor is always difficult to read - Who puts frosting on pie? Who takes a "wedge" of pie? Good pie is best served hot by a knowledgeable baker, not after the original baker has stepped away from the pie and waited for six months to see what other pie makers are selling, then asking some other pie maker to fix the six-month-old, stale pie.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Certainly nobody is asking customers to *not* solve a business problem. That would be equally as insulting - Microsoft does not have a monopoly on fixing business problems. If anything, they have a monopoly for causing business problems (early EOLs for XP, patch practices requiring substantial outages and reboots, Vista protocol design that causes networking headaches all translate into BCP issues in my mind).&lt;/li&gt;&lt;li&gt;More comical, Lawrence is trying to convince customers that alternatives to *their* products are rash and that buyers are *safer* sticking with the platform and ignoring what other vendors are doing in the space. In my mind, this is akin to "only following orders", but why take orders from the used car salesman at the end of the block? Sure, eventually Microsoft will figure out what is important for their most profitable customers, or alternatively customers can buy a number of flexible solutions today that meet their needs.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;My translation: "We're Microsoft. You will do what we say is important, when we say it is important. Thank you, your next invoice is in the mail."&lt;br /&gt;&lt;br /&gt;The term "Microserf" comes to mind...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-8680660042621447916?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/8680660042621447916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=8680660042621447916' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/8680660042621447916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/8680660042621447916'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2008/03/stale-cake-with-frosting.html' title='Stale Cake - With Frosting!'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-699916532708482818</id><published>2008-03-13T23:46:00.000-07:00</published><updated>2008-03-14T16:32:46.856-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Erlang Musings</title><content type='html'>Completely bogged down buy our 2.0 release push at work, generally not a lot of time to blog these days. That combined with the Twitter micro-blog phenomena and I'm neglecting this blog. Sorry for the two people who read this :)&lt;br /&gt;&lt;br /&gt;I did want to capture some thoughts on the recent discussion on the Erlang mailing list around &lt;a href="http://damienkatz.net/2008/03/what_sucks_abou.html"&gt;Damien Katz's post&lt;/a&gt; about Erlang.&lt;br /&gt;&lt;br /&gt;To preface my comments, I've been using a decent bit of Erlang over the past few weeks and have been learning the language for several months now. My current endeavors are in the distributed load-testing arena (Tsung didn't meet my needs). I'm by no means an expert and have nowhere near the experience of Damien or the members of the Erlang mailing list, but I'm beginning to feel like I'm not a total n00b.&lt;br /&gt;&lt;br /&gt;Initial thoughts on Damien's post:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;I've also found refactoring a bit difficult.&lt;/span&gt; Over time, defining an entirely different function to elicit a slight behavior change generally results in some parameter munging then a call to an existing function. Problem is, in development, the behavior of that existing function often changes thereby affecting all the calling functions.&lt;/li&gt;&lt;li&gt;I was also intrigued by the response to Damien's post on the Erlang mailing list where I lurk but rarely post. Some highlights:&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;"&lt;span style="font-weight: bold;"&gt;sometimes giving a whining child a lollipop is a rational thing to do.&lt;/span&gt;" - Richard O'Keefe clarifies this comment in subsequent posts, but the condescending attitude towards other languages continues to discredit him IMO. I generally get this sense from the Erlang community - "we know functional and you don't, so don't bother us with your critique of our superior language." Not sure why early adopters of most languages feel a need to succumb to Napoleonic urges and lash out at successful platforms. Java bashing is so very original these days...&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Robert Raschke also jumps on the Java-bashing bandwagon&lt;/span&gt; but with less valuable critique other than that he doesn't want to write Java in Erlang - not sure who asked him to do so.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;As usual, &lt;span style="font-weight: bold;"&gt;Ulf comes through with solid, valuable feedback&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;My experience has been similar to NAR's&lt;/span&gt; and I related to his comments for the life of the thread. In particular, defining dozens of one-line functions has made flow control difficult to follow in some circumstances. Probably my lack of understanding towards the language idioms but building on Damien's points, there aren't consistent examples of those idioms so it's easy to lose your way. I stand by my claim that Wide Finder proved this for file I/O in Erlang. It shouldn't take a committee to help you write good file handling code.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;I found Alpár Jüttner's comment interesting&lt;/span&gt;: "I think, the major obstacle for newcomers is not the syntax, but the immutable data structures". As a newcomer, this was not an issue for me at all. In fact, having spent more time than I care to remember worrying about dirty reads of shared memory, this is a welcome addition to my programming routine. Rather, I struggled with multi-byte strings (referring people to ejabberd is not sufficient documentation for an entire language), function proliferation, syntax ( =:= ), and most importantly lack of libraries.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;Robert Raschke's clarifications as line endings was a huge help here.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;The fact that POST'ing a form with http:request remains an enigma (eh, where are my param encoding functions?) really makes me feel like the language is a DSL for networking gear. Yes, Erlang is more expressive and concise than Java, but that doesn't mean much to me when I can write a Scala function to make an HTTP POST in four lines of code and have it run screamingly fast where as the same Erlang takes two dozen lines (and based on the documentation is questionably not process safe). I have the sense that the Erlang community would happily provide me with 10 different functions to solve the parameter encoding issue, but that misses the point - I don't have to worry about such things in most other languages I work with.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;In summary, I actually agree with most of Damien's original post. Having written a good bit of C/C++/Java/Python/Ruby, his observations are generally representative of how I feel approaching Erlang from that perspective.&lt;br /&gt;&lt;br /&gt;Like Damien, I have a lot of issues with Erlang. I kind of hate Erlang. I hate it in the sense that I wish I had a better, more familiar solution to programming with actors. At the same time, it's immensely powerful and expressive. Every time I use it, I think "wow, I love functional programming" and "actors are so important, it will be amazing when the programming public realizes why we all need to do this".&lt;br /&gt;&lt;br /&gt;At the same time, the syntactical and idiomatic issues I have with Erlang constantly nag me. I'm sure these will ease over time, but I have yet to reach a point where I've stopped looking/hoping for alternatives. Given some of the attitude displayed on the mailing list, I won't really have a lot of community loyalty if given a comparable option.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-699916532708482818?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/699916532708482818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=699916532708482818' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/699916532708482818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/699916532708482818'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2008/03/erlang-musings.html' title='Erlang Musings'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1477573986339144843.post-3313940299822795628</id><published>2008-02-18T23:46:00.000-08:00</published><updated>2008-02-19T00:02:20.569-08:00</updated><title type='text'>S3 Outage</title><content type='html'>A bit surprised this didn't make more news, but I find the S3 outage (&lt;a href="http://www.tbray.org/ongoing/When/200x/2008/02/18/Online-Data"&gt;originally via Tim Bray&lt;/a&gt;) fascinating.  From what I can tell &lt;a href="http://www.roughtype.com/archives/2008/02/why_s3_failed.php"&gt;reading between the lines&lt;/a&gt;, it seems as though a handful of demanding clients ground the service down with bad authentication requests. Makes sense on some level, auth requests are computationally expensive and in this case, they came from within EC2. My guess is that Amazon treats EC2 as a more privileged network and ultimately allows a higher QoS level between EC2 nodes and S3 nodes. So, while it may be &lt;a href="http://fuzzypanic.blogspot.com/2008/02/on-architects.html"&gt;en vouge&lt;/a&gt; to diss "architects", it's also important to have people around who understand the fundamentals from TCP stacks through the crypto and application layers and who build reliable systems across all three.&lt;br /&gt;&lt;br /&gt;My prediction is that we'll see more of these incidents from EC2-hosted nodes, then growing out to bad S3 requests across the public network launched from various bot nets. It's not an easy problem Amazon is undertaking with EC2 or S3 to begin with, it's an even more difficult one to protect from DDoS and DoS attacks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-3313940299822795628?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/3313940299822795628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=3313940299822795628' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/3313940299822795628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/3313940299822795628'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2008/02/s3-outage.html' title='S3 Outage'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-2821209310745224850</id><published>2008-02-13T23:34:00.000-08:00</published><updated>2008-02-13T23:41:28.074-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jive collaboration wikis'/><title type='text'>The Power of Simple, Online Collaboration</title><content type='html'>I won't attempt to use any fancy market-speak or terminology. I've long been a believer in how blogs and wikis can drive collaboration inside a company. One of the things Jive is really good at is capturing ROI around open collaboration in quantitative terms and telling a compelling story. &lt;a href="http://www.jivesoftware.com/community/blogs/jivetalks/2008/02/13/proof-that-departments-can-become-porous"&gt;Sam's latest blog is a great example&lt;/a&gt;. In short, based on a self-organizing set of categorizations, we can track cross-departmental collaboration and interactions. Cool stuff, not the type of data you can see from Share Point, that's for sure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-2821209310745224850?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/2821209310745224850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=2821209310745224850' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/2821209310745224850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/2821209310745224850'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2008/02/power-of-simple-online-collaboration.html' title='The Power of Simple, Online Collaboration'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-2405286175374731668</id><published>2008-02-01T23:52:00.000-08:00</published><updated>2008-02-02T16:55:19.722-08:00</updated><title type='text'>Rhino with readline - Hurray for rlwrap</title><content type='html'>Stumbled across dr.bob's sweet post on getting a &lt;a href="http://workingrhino.blogspot.com/2007/10/getting-started.html"&gt;readline wrapper around rhino.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Prior to reading his post, I had no idea &lt;a href="http://utopia.knoware.nl/%7Ehlub/uck/rlwrap/"&gt;rlwrap&lt;/a&gt; even existed, I'm simply amazed.  GNU readline is IMO one of the most useful abstractions in all of *nix-dom. If I had known that I could use it even with tools that weren't readline-enabled, my previous lives would have been much easier. For example, looks like some foo-equipped DBAs (inspired by one of my heroes Tom Kyte) have found a way to &lt;a href="http://sysdba.wordpress.com/2006/10/08/how-to-use-rlwrap-to-get-a-command-history-in-sqlplus/"&gt;use rlwrap to get a command history for sqlplus&lt;/a&gt;. It's been ages since I've actually used sqlplus (most time these days is in psql thankfully which natively supports readline), but this would be step 0 in my Oracle client install.&lt;br /&gt;&lt;br /&gt;Anyway, back to Rhino. rlwrap + rhino is lethal. Gives me vi key bindings in rhino.&lt;br /&gt;&lt;br /&gt;My setup ended up like so:&lt;br /&gt;&lt;br /&gt;* Installed Rhino to ~/java/rhino&lt;br /&gt;* Created script in ~/bin which was already on the path&lt;br /&gt;* chmodded said script&lt;br /&gt;* Added vi editing mode to ~/.inputrc&lt;br /&gt;* Edited rhino commands with vi bindings&lt;br /&gt;* Lived the good life&lt;br /&gt;&lt;br /&gt;The various files looked like so:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;~/.inputrc &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;set editing-mode vi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;~/bin/rhino&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;#!/bin/bash&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;for jar in `find ~/java -type f -iname '*.jar'`; do&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    export CLASSPATH=$CLASSPATH:$jar;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;done&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;rlwrap /opt/java/current/bin/java -cp $CLASSPATH org.mozilla.javascript.tools.shell.Main -strict "$@"&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Drop an exploded rhino anywhere into ~/java, and you're good to go.&lt;br /&gt;&lt;br /&gt;Of course, GNU Readline supports hundreds of options including other bindings like emacs if your are so inclined.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-2405286175374731668?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/2405286175374731668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=2405286175374731668' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/2405286175374731668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/2405286175374731668'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2008/02/rhino-with-readline-hurray-for-rlwrap.html' title='Rhino with readline - Hurray for rlwrap'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-2681265796576781478</id><published>2008-01-31T23:54:00.000-08:00</published><updated>2008-02-01T00:10:22.477-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='xmpp'/><title type='text'>REST Sprinkled into my XMPP</title><content type='html'>Been doing some low-level IQ packet handling in XMPP lately and interestingly, RESTful philosophy seems to be influencing me from afar. We started out the packet design to send a list (roster, but not an XMPP roster) of users associated with an artifact to the remote replica. The initial protocol design had elaborate Add Document, Add User, Remove User, Delete Document packets with corresponding XMPP IQ responses and errors to each. It quickly became apparent that there wasn't really a need to actually have different packets for Add User, Remove User and even Delete Document. When we started envisioning the resource as a document, and simply hammering the list of users along with the document, much the way we would expect an idempotent PUT to work in REST, the entire protocol got much more simple - just send the list every time. When there are no users, send an empty document packet. Otherwise,  just send the authoritative list. That's much easier than the book-keeping  needed to track if I've delivered a notice for one user and if it's been acked - just send the whole thing every time.&lt;br /&gt;&lt;br /&gt;Even better, if the destination misses a packet, the sender doesn't care, it can just send the current one because the new packet is authoritative at the time it's sent.&lt;br /&gt;&lt;br /&gt;All said and done, this eliminated a ton of state maintenance on both ends of the protocol. The sender didn't have to remember what it had fired off to the recipient and if it was adding or removing someone, nor did it need to manage the corresponding ack/error packets in detail - if a packet failed, just resend current. Likewise, the receiver was able to simply take the incoming update and make it fact - the reconcile process would ultimately be far easier than the alternative which amounted to checking if a user existed on the document, removing if they did and erroring if they didn't. That level of detail was immaterial to the sender, the sender simply wanted to publish *the* authoritative list of users and nothing more.&lt;br /&gt;&lt;br /&gt;Too bad it took a practical implementation to realize most of the early protocol design wasn't needed :) Kind of reminds me of the recent SOAP vs. REST debates.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-2681265796576781478?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/2681265796576781478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=2681265796576781478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/2681265796576781478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/2681265796576781478'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2008/01/rest-sprinkled-into-my-xmpp.html' title='REST Sprinkled into my XMPP'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-7858913284697602313</id><published>2008-01-28T21:36:00.000-08:00</published><updated>2008-01-29T08:38:11.124-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dynamic_vs_static same_ole rant'/><title type='text'>Really Deep Dynamics</title><content type='html'>&lt;a href="http://patricklogan.blogspot.com/2008/01/deeper-dynamics.html"&gt;Patrick&lt;/a&gt; loses me with this statement:&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;Face it. The history of programming is one of gradual adoption of dynamic mechanisms.&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;I read the post as saying the equivalent of "automatics gradually replaced manual transmission". Sure, it's true depending on how you look at the problem, but I'm not convinced it is really a practical, applied endorsement of dynamically-typed languages. I'm not sure it makes the most sense if I'm worried about demonstrating a performant, maintainable, visually-appealing result to my customers. You may like that automatic for giving average Joe customer a test drive, but it's not what you take on the Autobahn and it's not what you use to haul a big load cross country. More likely, the automatic feature is what you sell the masses who can't use the more precise, focused machinery.&lt;br /&gt;&lt;br /&gt;Looking at some of Patrick's points:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;"&lt;span style="font-style: italic;"&gt;The problem is they are rarely asked by open-minded people.&lt;/span&gt;" - seems ad hoc and condescending from the beginning. Pot, kettle meet off-white. I'll try and ignore that tone for the rest of the response although it does resonate through the rest of the post.&lt;/li&gt;&lt;li&gt;"&lt;span style="font-style: italic;"&gt;I know large systems can be built statically. I've done it in more than one language. I've also done it dynamically in more than one dynamic language. Have you?&lt;/span&gt;" - I'm guessing Perl and Python meet this requirement on the dynamic side; pick your poison on the static side, C, C++, Java even C# or VB if you like to make me suffer. From my experience, in code bases of roughly 100 KLOC in size or more, having a compiler in place to check that you haven't made any stupid mistakes was actually helpful. Note that I said helpful, not &lt;span style="font-weight: bold;"&gt;sufficient&lt;/span&gt;.  The problem I have with relying on tests for code bases of size is that you assume programmers are capable (as a fallible piece of wetware) of writing near-perfect tests. This is simply not true and as the code grows larger, the chance that your tests are inaccurate increases - this is a function of human nature and deadlines, not any specific programming language, static, dynamic or otherwise. &lt;/li&gt;&lt;li&gt;As a counter point, I spent roughly $2000 of client consulting hours debugging an issue in a commercial product built on Python that looked like this:&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;[foo,bar] = getImage(file, iso_varriant): ... &lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;In normal circumstances, this returned a tuple of two items. However, in certain file system encodings, this returned a tuple of three items. Python, being its dynamic self, chose to ignore the third item in the return tuple under those conditions. In a full unit and integration test suite, the test for this method passed. In the runtime, it failed because the third argument was ignored. There was no good way to simulate the test because you could only reproduce the pain when you &lt;span style="font-weight: bold;"&gt;physically had a CD in the drive&lt;/span&gt; (due to the way the python interpreter handled the ioctls). In other words, having the world's most awesome, dynamic test suite failed but was still syntactically correct. Having a dynamic language made the failure pass silently where as a statically checked return type would have barked before the program made it to test or bailed with a stack trace in the runtime. Conversely, the Python interpreter quietly chugged along until the failure occurred &gt; 20 lines down in the stack making it even more difficult to diagnose. Not always the case to be sure, but I think you can make equally valid arguments on both sides of the fence if you've used both static and dynamic languages in the wild. Relying on tests for refactoring and coverage of codebases is a luxury of small to mid size code bases. Inevitably, if your code is big enough, it will touch enough edge cases that the tests do not cover all conditions and changing a method will result in &lt;span style="font-weight: bold;"&gt;runtime&lt;/span&gt; errors, not test failures. That is a function of our cognitive limits as humans, not any programming language.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;"&lt;span style="font-style: italic;"&gt;On the other hand nothing eases the pain of bad projects.&lt;/span&gt;" - absolutely. Personally I don't see anything about static languages that makes this more likely. From my experience, bad PM can railroad any initiative, static or dynamic.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;"&lt;span style="font-style: italic;"&gt;Face it. The history of programming is one of gradual adoption of dynamic mechanisms.&lt;/span&gt;" - so true. Except, it is true in the context of static languages becoming dynamic, not in the sense that dynamic languages are conquering the world. Consider the success of static languages since the 70's:&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;The browser I'm using to post this blog is written in C++. Cross-platform, dynamic C++ but statically-typed C++.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The system libraries this browser uses are built on C.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The windowing libraries this browser is using are built on C and C++.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The OS the windowing libraries and system libraries used by this browser are built on C and expose strongly-typed C APIs.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The iTouch I used to read the original post was written almost entirely on C.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Nearly every device, feed reader, web server and browser that parses this content will be written in C or C++.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The browser you are using to read this was almost certainly written in C or C++. It might use some JavaScript, but that is optionally typed (based on the current ECMAScript spec and is interpreted by a C-based interpreter).&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;Conversely, I'm not using a browser built on Smalltalk. My system libs are not built on Scheme. In fact, to be honest, none of the utilities I use on a daily basis are built on a dynamic language (ObjectiveC being the potential crossover and its intents are not to be dynamic). There may be a few Java applications on my MacBook Pro that I use regularly, but even those are heavily reliant on kqueue - a kernel facility - and native windowing libraries. Firefox is proud to announce new &lt;a href="http://tomayko.com/weblog/2008/01/28/firefox3-mac-theme-lands"&gt;Mac-native widgets&lt;/a&gt;, not new Smalltalk plugins.&lt;br /&gt;&lt;br /&gt;Are dynamic languages influencing all that native code? Well maybe. I can reload kernel modules and I can link to DLLs or SOs, but loading all that static, native code is done through more static native code. I don't use a Ruby linker, the linker that makes my OS do its dynamic magic is proudly compiled to a low-level set of assembly instructions and usually machine-specific instructions, coded by a handful of really smart people at Microsoft or the GNU Foundation.&lt;br /&gt;&lt;br /&gt;I'm hard-pressed to come up with any end-user applications that I find useful which do not directly depend on a statically-compiled something. Yes, some of the web applications I use leverage Ruby, Seaside, etc., but the browser or RESTful client library that access them is (for me anyway) immediately based on a statically-typed library (Firefox, libcurl, etc).&lt;br /&gt;&lt;br /&gt;So, I'm probably missing Patrick's point. Most of the innovative apps I use don't depend on dynamic programming languages. In fact, if you took away many of the languages Patrick sites - Scheme, Lisp and Smalltalk, I would be able to go about my day without a single glitch. Conversely, take away C, C++ or Java, and I'm pretty sure I'd notice (i.e. no OS, &gt; 75% http traffic, ~50% of http applications servers respectively).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-7858913284697602313?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/7858913284697602313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=7858913284697602313' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/7858913284697602313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/7858913284697602313'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2008/01/really-deep-dynamics.html' title='Really Deep Dynamics'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1477573986339144843.post-1928260491750723189</id><published>2008-01-25T07:23:00.000-08:00</published><updated>2008-01-25T07:41:01.727-08:00</updated><title type='text'>XMPP For Integration</title><content type='html'>&lt;a href="http://dehora.net/journal/2007/08/xmpp_matters.html"&gt;Integration&lt;/a&gt; &lt;a href="http://www.oreillynet.com/xml/blog/2006/10/tbraypushpull_on_atom_xmpp_and.html"&gt;bloggers&lt;/a&gt; have been talking about using XMPP for years now. The XMPP community has entire specifications dedicated to things like &lt;a href="http://www.xmpp.org/extensions/xep-0009.html"&gt;RPC&lt;/a&gt;, &lt;a href="http://www.xmpp.org/extensions/xep-0030.html"&gt;Service Discovery&lt;/a&gt; and &lt;a href="http://www.xmpp.org/extensions/xep-0060.html"&gt;PubSub&lt;/a&gt; that make weaving together distributed systems easier (I think the native presence information helps as well). Matt Tucker gives a solid overview of XMPP in the integration space with a &lt;a href="http://www.jivesoftware.com/community/blogs/jivetalks/2008/01/24/xmpp-aka-jabber-is-the-future-for-cloud-services"&gt;new post&lt;/a&gt; that is getting a lot of press coverage and shot to the top of Digg. I feel like XMPP's potential as an integration tool is finally starting to get the attention it deserves. Maybe a result of the imploding WS-Death-Star stacks and heavy-weight standards that have plagued integration developers for years? Maybe a natural gravitation towards a better technology stack - hopefully.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-1928260491750723189?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/1928260491750723189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=1928260491750723189' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/1928260491750723189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/1928260491750723189'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2008/01/xmpp-for-integration.html' title='XMPP For Integration'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-763122433257201971</id><published>2008-01-20T18:42:00.000-08:00</published><updated>2008-01-25T07:23:16.415-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rinda'/><category scheme='http://www.blogger.com/atom/ns#' term='jini'/><category scheme='http://www.blogger.com/atom/ns#' term='bummer'/><title type='text'>River Disappoints Again</title><content type='html'>I had a desire to see if I could get Jython or JRuby working with Apache River this weekend for some distributed monitoring and task execution I want to try. Need something quick, reliable and with code mobility and ideally can integrate easily with Java. I did see some new updates on the River site which was initially encouraging, but after digging, looks like little has changed. There were no source distributions which was concerning, but I'd used the older Sun distributions of Jini before, so I wasn't scared about building from source. I proceeded to SVN check-out. Sadly, &lt;a href="http://incubator.apache.org/river/RIVER/source-code.html"&gt;the listed SVN URL&lt;/a&gt; &lt;span style="font-weight:bold;"&gt;doesn't work - there is nothing there&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;Walking up the tree to the /asf/ root, there is no sign of the source or the river project. I'm sure it is around somewhere, but seriously, how much less approachable could this project be? This is no way to attract new users. I didn't think it could get worse from the old Sun site; I was wrong. What a shame.&lt;br /&gt;&lt;br /&gt;Looks like it's back to Rinda then. I've avoided Rinda in the past for &lt;span style="font-style:italic;"&gt;important&lt;/span&gt; data given that there is no reliable storage of tuples. At this point, probably easier to bolt that on to Rinda than to pull anything meaningful out of River. Alternatively, maybe a better approach would be to make smarter Rinda clients that can survive a failure of the master ring server with some local persistence and eventual consistency approach.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-763122433257201971?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/763122433257201971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=763122433257201971' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/763122433257201971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/763122433257201971'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2008/01/river-disappoints-again.html' title='River Disappoints Again'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-6334333666788970101</id><published>2008-01-17T23:55:00.000-08:00</published><updated>2008-01-18T06:06:37.035-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='csrf'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>CSRF is the new XSS</title><content type='html'>I've been looking at &lt;a href="http://shiflett.org/blog/2007/jul/csrf-redirector"&gt;Chris Shiflett's CSRF GET to POST converter&lt;/a&gt; and have to say that it's got me a bit freaked out. I don't normally do the annual prediction thing, but the more I look at it, the more I think we'll see 2008 as the year of the CSRF, particularly if social networking sites continue to grow in popularity among less-technical users.&lt;br /&gt;&lt;br /&gt;I've seen mention that the attack can be mitigated by using a nonce of sorts in the form and session data, a value that must be posted back with the form for a valid request. But as I look at how Chris executed his redirector (loading an iframe on click), I can't help but think that once I have an unprotected and confused security context on the browser, I'm able to work around such nonces when:&lt;br /&gt;&lt;br /&gt;1) I can make a reasonable guess that the user has an authenticated session. I don't always have to be right, just every couple of times will do fine.&lt;br /&gt;&lt;br /&gt;2) I can parse out a response from the server such that I can snag the nonce parameter. Not hard once I have a confused, unprotected scripting context in an iframe that the browser is mistakenly trusting.&lt;br /&gt;&lt;br /&gt;#1 is not a big deal. I can make some reasonable guesses, target my links appropriately using a bit of social engineering. Doesn't have to be terribly accurate, just moderately successful and I can grab some "seed" accounts from which to stage future attacks.&lt;br /&gt;&lt;br /&gt;#2 is easy - if I can execute script in an iframe (as Chris' demonstrates), then I can string together multiple XHRs. As long as the user has a session I can piggy-back on, extracting a form nonce is no more difficult than submitting the post in Chris' redirector.&lt;br /&gt;&lt;br /&gt;Would love to hear some thoughts on how others are dealing with the issue in the face of user-provided content.&lt;br /&gt;&lt;br /&gt;Oh, and if you're wondering how to execute one of those attacks, you have a Blogger account *and* you clicked on the link to Chris' account above, consider yourself vulnerable - that's about all it takes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-6334333666788970101?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/6334333666788970101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=6334333666788970101' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/6334333666788970101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/6334333666788970101'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2008/01/csrf-is-new-xss.html' title='CSRF is the new XSS'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-8615325971116600154</id><published>2008-01-13T01:07:00.000-08:00</published><updated>2008-01-13T01:33:00.039-08:00</updated><title type='text'>+1 To Yahoo! Games '08 Predictions</title><content type='html'>Yahoo! Games is spot-on for their &lt;a href="http://us.i1.yimg.com/videogames.yahoo.com/feature/eight-predictions-for-08/1178804"&gt;predictions of the upcoming gaming year&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In particular, I think we'll see the following:&lt;br /&gt;&lt;br /&gt;1) The Wii will jump the shark - I played the Wii for several hours over the holiday season and while it was fun, the novelty wore off quickly. I tried like mad to will Wii Sports into an online mode but to my dismay, that doesn't exist. You can only swing a virtual tennis racket in the confines of your own living room for so long while your neighbor is playing madden with friends across the country on a system two generations ahead of the Wii.&lt;br /&gt;&lt;br /&gt;2) In spite of being the worst-marketed, most technically advanced gaming platform ever devised, the PS3 will rebound. For $200 more than the cost of a Blue Ray player, you also get a multi-cell processor on a linux-driven beast of a gaming system that helps society by lending it's processing power to protein-folding analysis in the off hours. I have a ton of stories about how its setup was better than the Wii's or XBOX 360, but those will have to wait for another post. In short, PS3 continues to lag in online content, but eventually I still believe that the hard-core gamers who spend the most money will continue to gravitate towards the PS3 and away from the Wii and the developers will follow. The early adopters I know (including me) are moving towards the better platform, in spite of Sony's seemingly insane approach of delivering the platform. I'm convinced devs will follow, nobody wants to build on the gaming equivalent of Visual Basic when the most advanced 3D platform ever is growing it's install base.&lt;br /&gt;&lt;br /&gt;3) PC gaming will continue to deteriorate. I love my PC-only games. I think most games being developed today actually play better with a mouse and keyboard rather than two awkward analog sticks under-thumb. And while I've really loved playing WoW for the last few weeks, games like Crysis are simply making me miserable. By all accounts, I have plenty of hardware to play Crysis, but I still get Vista core dumps on a regular basis. As a result I'm rebuilding my awful NVRAID mirror on a regular basis (I'll never buy an NVidia RAID solution again, that monster of BIOS + Vista + Software RAID has cost me more time and pain than a decent hardware RAID solution ever would). Crysis is the best FPS I've ever played. It's immersive, well-designed and capable of making even the most modern GPUs sweat. None of that scares me, it's Vista's instability in 64-bit gaming and the resulting constant recovery exercise I'm forced to do that will push me closer and closer to purchasing console-only games.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-8615325971116600154?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/8615325971116600154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=8615325971116600154' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/8615325971116600154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/8615325971116600154'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2008/01/1-to-yahoo-games-08-predictions.html' title='+1 To Yahoo! Games &apos;08 Predictions'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-1505591078348039716</id><published>2007-12-21T21:54:00.001-08:00</published><updated>2007-12-21T23:26:14.618-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>Everybody Hates the Popular Kid</title><content type='html'>Via &lt;a href="http://patricklogan.blogspot.com/2007/12/patterns-of-change.html"&gt;Patrick&lt;/a&gt;, I just read Steve's latest blog post &lt;a href="http://steve-yegge.blogspot.com/2007/12/codes-worst-enemy.html"&gt;about code complexity&lt;/a&gt;. I think the vast majority of Steve's points are spot-on. Complexity in a codebase ultimately leads to disproportionate support and maintenance costs, complexity when on-boarding new developers, and a general productivity hit. When it takes me 30 minutes to get "in the zone", all it takes is one call from the boss to tear that down. That's a 60-minute productivity hit for a benign interruption and no tooling in the world will help you keep it all in programmer "RAM".&lt;br /&gt;&lt;br /&gt;I was talking with a colleague of mine about this (Alok Singh) and we both agree that certain levels of complexity simply extend beyond the limits of most people's cognitive skills, it's simple and complicated all in one.&lt;br /&gt;&lt;br /&gt;I agree with many of Steve's core assertions in this piece. But, I can't quite get past the Java-bashing and stereotyping that permeates the post and seems en vouge these days. Yes, there are bad java programmers out there, but is he really hitting on the limitations of the Java language and/or Java programmers in general?&lt;br /&gt;&lt;br /&gt;A couple of things that stuck out for me:&lt;br /&gt;&lt;blockquote&gt;"Design Patterns are programmers, and only programmers who use certain languages. Perl programmers were, by and large, not very impressed with Design Patterns."&lt;/blockquote&gt;I'm not sure I see this as an endorsement. I don't really know any non-Perl programmers who find another programmer's Perl easy to maintain. I've written a decent amount of it, and two of the top ten most miserable experiences in my programming career have been trying to decipher CPAN modules. Terse code does not make for manageable code and Perl programmers tend to pride themselves on brevity, readability be damned.&lt;br /&gt;&lt;blockquote&gt;"It's obvious now, though, isn't it? A design pattern isn't a feature. A Factory isn't a feature, nor is a Delegate nor a Proxy nor a Bridge."&lt;br /&gt;&lt;/blockquote&gt;I don't really know what Steve's background was prior to Google, but I can say that as someone who works on commercial software which is regularly extended, our customers do actually think that having a factory is a feature. If we swap out authentication mechanisms, customers extending or writing plugins want to use a factory - they want one way to access a single API &lt;span style="font-weight: bold;"&gt;in Java&lt;/span&gt;. Lots of them. We could say, "no, use the REST API" but that hasn't actually seen much uptake (although it's there) and quite simply doesn't scale for core functionality like authentication.&lt;br /&gt;&lt;br /&gt;Next is:&lt;br /&gt;&lt;blockquote&gt;"Dependency Injection is an amazingly elaborate infrastructure for making Java more dynamic in certain ways that are intrinsic to higher-level languages. And – you guessed it – DI makes your Java code base bigger."&lt;br /&gt;&lt;/blockquote&gt;Actually, I can't see how this could possibly be correct so I'd love to hear more detail. IoC approaches like Spring reduce my code because I'm not using those design patterns that Steve is so against. I don't really care about creational logic any more because the reference I need is injected for me. I don't see Singletons or Factories any more, just references. I may have more configuration files than I did before, but I certainly have less code. Mature libraries like Spring do other nice things for me like hiding unnecessary unchecked exception handling, transactions across multiple resources and making an object remote when it has no inherent remote-ness. For example, I can publish any interface across Hessian, Burlap, JMX or RMI using spring configuration, the code doesn't know the difference. IoC has its issues to be sure, but code bloat is not one of them.&lt;br /&gt;&lt;br /&gt;Moving on:&lt;br /&gt;&lt;blockquote&gt;"I recently had the opportunity to watch a self-professed Java programmer give a presentation in which one slide listed Problems... The #1 problem he listed was code size: his system has millions of lines of code."&lt;/blockquote&gt;Ok, so the guy is a bad programmer, or he is bad programmer by virtue of being a Java programmer? I don't see the correlation. If he were giving a talk on VB would this even make the blog rounds? There are lots of bad programmers out there, but I feel like there is a real tendency to use guilt by association against the Java community. At the end of the day, one thing that is generally not disputable is that aside from the core *nix and C library collection, Java is *the* most ubiquitous set of libraries available. Steve likely has the ability to write a native hook against a native C library, I quite simply don't have the time and the Java libraries are my second-best resource.&lt;br /&gt;&lt;br /&gt;As a counter-point, I looked at the amount of code in the mainline stable Linux kernel (2.6.23.12), which by count runs at 768119 in just the C - no headers, macros, etc. That's pretty big, and if you look at the committers, there are hundreds of people and companies (but not the almighty Google I might add) contributing towards that code base. But, for the life of me, I can't find a blog post slamming the amount of code in the Linux kernel or that it's too complex, or that it isn't contributing towards the greater good. Similarly, Apache HTTPD core seems to be running over 250K for just the HTTPD C code and surely requires a more skilled developer pool than your average Java developer would fill.&lt;br /&gt;&lt;br /&gt;At the end of the day, I don't think Java is a programming panacea. But, if I put on my agile hat, and see that customers want solutions that they can run in their existing environments without worrying abut low-level library dependencies, and reuse a crazy amount of existing code, and that they can hire decent programmers to fulfill, then Java meets those tests and might actually be the simplest solution that delivers business value. C might be faster, Perl more "cool", but neither necessarily makes the most business sense. Business value isn't just about what the technology Illuminati tip their hat to. It's grounded in accessibility and more importantly, can I hire people to implement and support it. In that sense, Java is a decent solution these days. I tend to think business viability is a decent measure of a language, regardless of how it got there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-1505591078348039716?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/1505591078348039716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=1505591078348039716' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/1505591078348039716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/1505591078348039716'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/12/everybody-hates-popular-kid.html' title='Everybody Hates the Popular Kid'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-3447688607128825847</id><published>2007-12-20T21:19:00.000-08:00</published><updated>2007-12-20T21:43:30.902-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cap'/><title type='text'>Socializing Eventual Consistency</title><content type='html'>I've followed Werner's blog for a while now and &lt;a href="http://www.allthingsdistributed.com/2007/12/eventually_consistent.html"&gt;his latest on eventual consistency&lt;/a&gt; is one of my favorite posts. I recently advocated for an eventual consistency approach for a service offering we're putting together and lost. Part of that I think was that the technology to build an eventually-consistent client could really use some improvement and I'll talk to that in a later post. More at play though was the general issue of pushing people's comfort zones with new concepts.&lt;br /&gt;&lt;br /&gt;I was somewhat conflicted after the discussion because the Agile part of my brain wanted to believe that the simplest thing we could do was flow with out skill set and just write to an SQL database. The systems experience in me was screaming the whole way at building a tightly-coupled, highly intertwined system when staring at a green field that didn't really have highly-structured relational data.&lt;br /&gt;&lt;br /&gt;As always, I could have done a better job in making my case, focusing more on the technical and less on the emotional, but I sure wish I would have had read Werner's blog before the discussion. Two things really stood out:&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;&lt;blockquote&gt;"Eventually consistency is not some esoteric property of extreme distributed systems. Many modern RDBMS systems that provide primary-backup reliability implement their replication techniques in both synchronous and asynchronous modes."&lt;/blockquote&gt;&lt;/span&gt;&lt;br /&gt;When I talk to people about things like eventual consistency, I generally get a response along the lines of "that's cool, but we're not Amazon". No, most companies aren't, but I'm not sure that we shouldn't leverage all the brain power and learning from Amazon to our benefit. You can only make buggy whips for so long while thought leaders speed ahead.&lt;br /&gt;&lt;br /&gt;The other piece that stood out was:&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;"Inconsistency can be tolerated for two reasons: for improving read and write performance under highly concurrent conditions and for handling partition cases where a majority model would render part of the system unavailable even though the nodes are up and running."&lt;/blockquote&gt;&lt;br /&gt;Customers are always going to want the C, A and P from commercial software, but experience tells us that they are not all possible. If you buy Werner's arguments, the P is impossible for distributed systems. Most business-focused users I've encountered, when really pressed, almost always choose the A over the C.&lt;br /&gt;&lt;br /&gt;When trying to socialize concepts like these, there is truly an art to helping people out of their comfort zones. I'm not as good at it as many people, posts like Werner's go a long way towards helping with that.&lt;br /&gt;&lt;br /&gt;Now, if they can just fix that SimpleDB API...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-3447688607128825847?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/3447688607128825847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=3447688607128825847' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/3447688607128825847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/3447688607128825847'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/12/socializing-eventual-consistency.html' title='Socializing Eventual Consistency'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-7387248006576938973</id><published>2007-12-13T21:53:00.000-08:00</published><updated>2007-12-13T22:01:41.125-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex ria'/><title type='text'>Cheers to Adobe</title><content type='html'>&lt;a href="http://labs.adobe.com/technologies/blazeds/"&gt;This&lt;/a&gt; is great news from Adobe and should really help them distance themselves from other Ria platforms by providing the middleware to help build better apps without the hefty price that used to come with LiveCycle DS. While I always liked LiveCycle DS, the price and proprietary nature always made recommending it difficult. No more! Now, if we can just get them to keep opening up and give the community the player :)&lt;br /&gt;&lt;br /&gt;I also read this announcement to mean that the AMF spec is fully open as well which is also great to hear. I was always unclear on exactly what was available surrounding AMF, no more ambiguity there is equally big news.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-7387248006576938973?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/7387248006576938973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=7387248006576938973' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/7387248006576938973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/7387248006576938973'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/12/cheers-to-adobe.html' title='Cheers to Adobe'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-5420451920963337335</id><published>2007-11-29T00:38:00.000-08:00</published><updated>2007-12-01T15:05:36.747-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='atom'/><category scheme='http://www.blogger.com/atom/ns#' term='integration'/><category scheme='http://www.blogger.com/atom/ns#' term='xmpp'/><title type='text'>Atom over XMPP</title><content type='html'>I'm currently experimenting with the idea of using Atom over XMPP, at a minimum to push out a pointer to an entry behind a firewall into a more public staging area.&lt;br /&gt;&lt;br /&gt;The thought would be that the Atom "pointer" to the entry is pushed into the public space, and when a client of that entry wants more detail, there is an XMPP service associated with the entry that can be used to retrieve the details.&lt;br /&gt;&lt;br /&gt;Exactly half of me thinks that this is what Atom was meant to do - get the notion of an entry out there with enough information to make a decision about weather you want the detail, and let the interested parties decided if they want to fetch the remainder. The other half thinks that this is just the geek in me wanting to use Atom when there really isn't a need for it and that XMPP and less-structured XML stanzas can work just fine, that I can demand pull the list of entries when needed as well as the details.&lt;br /&gt;&lt;br /&gt;There are some general rumblings out there on the interwebs, but no great success stories. Anyone care to share?&lt;br /&gt;&lt;br /&gt;St. Peter seems to be &lt;a href="http://www.xmpp.org/internet-drafts/attic/draft-saintandre-atompub-notify-00.txt"&gt;thinking along similar lines&lt;/a&gt;. I would love to hear some real-world usages before I'm sold on Atom in this context.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Update: ralphm points to a &lt;a href="http://www.xmpp.org/internet-drafts/draft-saintandre-atompub-notify-06.html"&gt;newer draft on xmpp.org&lt;/a&gt;. Thanks!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-5420451920963337335?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/5420451920963337335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=5420451920963337335' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/5420451920963337335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/5420451920963337335'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/11/atom-over-xmpp.html' title='Atom over XMPP'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-7065338256573542985</id><published>2007-11-27T01:15:00.000-08:00</published><updated>2007-11-28T22:24:39.469-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='gi'/><category scheme='http://www.blogger.com/atom/ns#' term='haxe'/><category scheme='http://www.blogger.com/atom/ns#' term='air'/><title type='text'>Having and Eating Cake</title><content type='html'>Fuzzy asks &lt;a href="http://fuzzypanic.blogspot.com/2007/11/disconnected-client-alternatives.html"&gt;about options for disconnected client alternatives&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I started a reply, but it got too long so I decided to post and link instead.&lt;br /&gt;&lt;br /&gt;I've now done this analysis a few times for a few different scenarios and as with most things, the devil is in the details. At the end of the day, although not quite so dogmatic, what usually matters most is ease of programming and that is generally driven by your server-side. It probably shouldn't be so, I'd love to say "Just put a set of RESTful services out there and I'll handle the client thanks", but in reality the separation is rarely that clean with more rich (i.e. offline) clients.&lt;br /&gt;&lt;br /&gt;Fuzzy asks about a couple of technologies that I've worked with and others are mentioned in the comments.&lt;br /&gt;&lt;br /&gt;I'd stay away from Tibco GI if you want to have any hope for advanced functionality like offline access, XMPP or direct socket manipulation. More rich APIs are available in XUL and AIR if you need to go there, and when I last worked with GI it was quite brutal (I.E. for development environment, no FF support, massive code base). Most of these have changed, but I feel like with something like GI, it almost doesn't matter that it's BSD licensed, you won't be able to grok or change the code anyway, it's too complicated and if you need what it does, you are almost certainly pounding a square peg into a round hole.&lt;br /&gt;&lt;br /&gt;In the comments, Brian advocates a combination of Gears and GI - that scares me to death. Two technologies that have no knowledge of each other using the browser as a binary integration bus via JavaScript - I've yet to see that work on any effort of size and it's bound to cause some serious headaches, especially when you can't control what a user does from either side of that integration. Doesn't pass my sniff test.&lt;br /&gt;&lt;br /&gt;Most importantly thought, I'd look at the community story there, it's not very compelling. GI strikes me as almost abandon-ware by Tibco and seeing as how they were so late to the OSS game, I have doubts about their commitment to sustain the community. Conversely, AIR has far more momentum and Adobe worked hard towards building community from the beginning.&lt;br /&gt;&lt;br /&gt;For what it's worth, when I was talking with Tibco about these concerns and pressing them to open the code, they laughed and told me it would be really expensive. Guess I was on to something. I'll continue hammering Adobe to do the same with the Flash Player with every opportunity I get.&lt;br /&gt;&lt;br /&gt;Having worked with XUL, I found it quite painful. The entire effort is under-documented to say the least. For Fuzzy's purpose, it obviously Mozilla-specific which may or may not be an issue. I can't say I've ever seen anyone build anything with any serious eye candy on XUL, just basic chrome and mostly tree views. If you have half an inkling that you might need some eye candy to sell your product, XUL probably isn't for you.&lt;br /&gt;&lt;br /&gt;More importantly though, If it doesn't meet your lower-level needs for things like images or networking, be prepared to write some cross-platform C++ and COM-like IDL. You will also need to deal with version differences (i.e. XUL on FF 1.5.x is not the same as in FF 2.x). That said, if made to choose between GI and XUL, I choose XUL.&lt;br /&gt;&lt;br /&gt;My personal bias is still for AIR. The community has good momentum, programming model is the most simple of the other options (including Sarge's Tcl comment - have fun with that return to DLL-hell). Not open though, so if you go that route make sure it's critical to your story and that open-ness is not.&lt;br /&gt;&lt;br /&gt;Lazlo can "compile" to Flash as Mike W. mentions in Fuzzy's comments, but can also remain in AJAX/DHTML land if you so choose - Flash simply performs better. In all the testing I've done, Lazlo will not perform consistently nor render consistently if you do not transform to FVM bytecode, so those are likely not options.&lt;br /&gt;&lt;br /&gt;One other potential option is &lt;a href="http://haxe.org/"&gt;haxe&lt;/a&gt;. Saw a presentation on it at OSCON a few years ago, seemed like a solid technology but hasn't really caught on in the states anyway.  It's been around for several years now and people who use Neko seem to love it. Can't speak from experience with that one, but I'd give it a look.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-7065338256573542985?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/7065338256573542985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=7065338256573542985' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/7065338256573542985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/7065338256573542985'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/11/having-and-eating-cake.html' title='Having and Eating Cake'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1477573986339144843.post-8369710404830859133</id><published>2007-10-26T22:02:00.000-07:00</published><updated>2007-10-29T19:09:17.726-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang badcs fud'/><title type='text'>Worst Measurement Ever</title><content type='html'>I've been resisting posting about it for some time, I think since &lt;a href="http://patricklogan.blogspot.com/"&gt;Patrick&lt;/a&gt; pointed me at the link almost six months ago. I've reached my breaking point. In my quest to learn Erlang, I've come across at least three &lt;a href="http://debasishg.blogspot.com/2006/11/threadless-concurrency-on-jvm-aka-scala.html"&gt;blogs&lt;/a&gt; and/or articles that actually site this "measurement" with attribution as if it were some sort of legitimate claim as to the scalability of Erlang.&lt;br /&gt;&lt;br /&gt;Given that I'm reading &lt;a href="http://www.pragprog.com/titles/jaerlang"&gt;his book&lt;/a&gt;, I would really expect more from Joe Armstrong and by attribution Ali Ghodsi.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.sics.se/%7Ejoe/apachevsyaws.html"&gt;Apache vs. Yaws measurement&lt;/a&gt; is one of the most useless pieces of information produced by the Erlang community, to the point that I'd argue it does a disservice to the Erlang community and the language.&lt;br /&gt;&lt;br /&gt;In any sort of quasi-scientific measurement (or primary school science experiment for that matter),  I would expect to see:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;the actual code used to test the server&lt;/li&gt;&lt;li&gt;the actual Linux kernel version&lt;/li&gt;&lt;li&gt;the actual yaws server code&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Instead, we see a graph of an under-documented experiment that creates conditions for a DoS test at best, not a web server scalability test.&lt;br /&gt;&lt;br /&gt;From the looks of it, this "measurement" is not:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;documented to any reasonable extent - what kernel was used? what was the exact Apache configuration? what was the Yaws code used to serve the files?&lt;/li&gt;&lt;li&gt;repeatable - no source, little documentation, little detail on the environment&lt;/li&gt;&lt;li&gt;peer reviewed - without the above, nobody else can discuss in detail or attempt to repeat the same results&lt;/li&gt;&lt;li&gt;valid - it simply does not repeat a real-world environment faced by any modern web server&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Allow me to support some of those assertions from real-world experience helping large web sites:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Not knowing what Linux kernel version was used, how Apache was configured (in detail) and how Apache was built, it's impossible to know if Apache "was configured for maximum performance". Seeing as they decided not to share any of that vital information, I consider the entire experiment invalid. These things matter, just like if I were to run BEAM on an SMP system without SMP, it's easy to misconfigure the runtime. For example, Apache started using epoll in 2.6.x kernels. Anything earlier than that would be an inappropriate kernel to use  with mpm_worker. We wouldn't know from the sparse detail if it is a valid configuration or not.&lt;/li&gt;&lt;li&gt;In a real-world environment, if I saw 100s of connections inactive for 10 seconds at a time, I would simply set the connection timeout to five seconds. Not sure how you would do the same on Yaws.&lt;/li&gt;&lt;li&gt;Most production web servers don't serve one byte files (the "load" requested by the  clients in the measurement). I can't actually recall the last time I saw a high-volume server dish out more than one or two one byte files. Instead, real web servers serve files that measure in the KB or even MB in size. In fact, given Erlang's &lt;a href="http://www.tbray.org/ongoing/When/200x/2007/09/22/Erlang"&gt;empirical difficulty&lt;/a&gt; &lt;a href="http://www.erlang.org/pipermail/erlang-questions/2007-October/030029.html"&gt;handling basic file I/O&lt;/a&gt;, I'm not surprised that they chose a one byte file to use in simulating "load". If the file were any larger, Yaws would likely have been swamped under it's own unbuffered I/O implementation and exhibited substantial latency per request.&lt;/li&gt;&lt;li&gt;A one byte file would be cached upstream of the server in a high-volume site, particularly if your clients were operating over latent connections where one character per ten seconds was realistic (i.e. dialup).&lt;/li&gt;&lt;li&gt;If this were a real DoS attempt, it would be choked off at the ISP router, well before the web server saw the intentionally slow request.&lt;/li&gt;&lt;li&gt;I can personally type an HTTP request faster than one character per ten seconds, this is simply not a realistic access pattern from a benign client.&lt;/li&gt;&lt;/ol&gt;I'm not going to say that Erlang does or doesn't scale. My point is that this diagram and the corresponding writeup are utterly useless and that to &lt;a href="http://bestfriendchris.com/blog/2007/05/11/apache-vs-yaws/"&gt;site&lt;/a&gt; it as a &lt;a href="http://lambda-the-ultimate.org/classic/message5763.html"&gt;valid study&lt;/a&gt; is &lt;a href="http://www.sics.se/%7Ejoe/thesis/armstrong_thesis_2003.pdf"&gt;irresponsible at best&lt;/a&gt; (especially when it's your own thesis).&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;br /&gt;I put this in the same category as Microsoft FUD - there is an agenda here, and people will read it and say "Oh, yea - told you we rock" without questioning the details. Most however, should dismiss it as pure FUD, and FUD served from an Apache 2.2.3 server no less (maybe Yaws wasn't up to the task).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-8369710404830859133?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/8369710404830859133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=8369710404830859133' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/8369710404830859133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/8369710404830859133'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/10/worst-measurement-ever.html' title='Worst Measurement Ever'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1477573986339144843.post-904141084421475197</id><published>2007-10-23T23:48:00.000-07:00</published><updated>2007-10-24T00:08:14.810-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shouldbeeasier'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='die_browsers_die'/><title type='text'>My Bow-Legged Master - Comment</title><content type='html'>I tried to comment directly on &lt;a href="http://www.dehora.net/journal/2007/10/my_bowlegged_master.html"&gt;Bill's Blog&lt;/a&gt; but comments were broken &lt;em&gt;again&lt;/em&gt;. What I wanted to say was:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I think the real tragedy of this legacy is that we currently have installed, in nearly every networked node in existance, the potential for a simple, iterative, resource-driven client that can't really speak the protocol it was designed to handle.  I repeatedly find myself grudgingly writing a curl wrapper to test a RESTful API in a pinch while my browser looks at me and laughs.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Oh, and the irony that your comments button says "Post" rather than "Put" is not lost.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hopefully comments will be fixed soon and I'll cross post, er cross PUT.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-904141084421475197?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/904141084421475197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=904141084421475197' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/904141084421475197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/904141084421475197'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/10/my-bow-legged-master-comment.html' title='My Bow-Legged Master - Comment'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1477573986339144843.post-2684065319997125119</id><published>2007-10-21T23:32:00.000-07:00</published><updated>2007-10-22T00:16:10.569-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ontology'/><category scheme='http://www.blogger.com/atom/ns#' term='collaboration'/><category scheme='http://www.blogger.com/atom/ns#' term='cap'/><title type='text'>Scale in an Ontology Vaccum</title><content type='html'>I had the pleasure today of reading Clay Shirky's &lt;a href="http://shirky.com/writings/ontology_overrated.html"&gt;Ontology is Overrated&lt;/a&gt;. Being in the collaboration software business, understanding how people classify artifacts is not just a science, it is vital to the evolution of the software we build.&lt;br /&gt;&lt;br /&gt;For our purposes, I think it's a dual-edged sword. Make things too wide open, and users won't evolve their own classifications and people will stray away from the true strengths of the tools. Make things too ontology-driven and users will naturally migrate away from the structure, save everything locally and keep emailing and searching with Google Desktop. We have to build a better mouse trap to survive.&lt;br /&gt;&lt;br /&gt;For me, a big take-away from Clay's piece was that any attempt to define classifications will fail. The Dewey 200 category is a fantastic example and one that really drives home our inability as simple humans to step out of context.&lt;br /&gt;&lt;br /&gt;So, to paraphrase Clay's hypothesis a bit, any attempt I make at trying to define an ontology will fail, mostly because there is no way I can out-think the masses. Ok, fair enough, so how to build software that better helps the masses? Not too difficult at face value, things like tag clouds work great. Unfortunately, the implementation problems grow exponentially under scale. As the volumes of information available electronically continue to grow, and as information compounds on top of itself through links, blogs, etc, the notion of aggregating tag clouds, and more importantly, doing things like suggesting similar clouds shifts from a usability problem into an architectural one.&lt;br /&gt;&lt;br /&gt;For collaboration software to innovate, it is faced with several interesting dilemmas. First, how do we expand beyond the bounds of our own control and pull in relevant data outside our domain? It's scary, but if you believe that collaboration software must go down that path, then we're faced with more integration concerns and less of the simplified workflow and text processing which is how most people think of their collaboration tools today.&lt;br /&gt;&lt;br /&gt;Assuming you can go that far, how do you actually make sense of all that data? You start to run into scale problems real fast. Customers want one node to run everything and at the same time roll-up data from five internal sources, and ten external sources with partial federated identity all while being responsive. That's a tall order, and one that starts to make the "C" in "CAP" increasingly difficult to archive.&lt;br /&gt;&lt;br /&gt;My gut tells me that Werner Vogels' and Amazon's approach to eventual consistency described in &lt;a href="http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html"&gt;Amazon's Dynamo&lt;/a&gt; will win out. When you're aggregating and analysing terabytes of data looking for relevance, you have to make sacrifices.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-2684065319997125119?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/2684065319997125119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=2684065319997125119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/2684065319997125119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/2684065319997125119'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/10/scale-in-ontology-vaccum.html' title='Scale in an Ontology Vaccum'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-2039879782948489985</id><published>2007-10-18T23:42:00.001-07:00</published><updated>2007-10-21T23:48:56.452-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gripes'/><category scheme='http://www.blogger.com/atom/ns#' term='hosting'/><title type='text'>plan for $display_id will be renewed for another year</title><content type='html'>I received an email from Yahoo! today with this in the subject line &lt;span style="font-style: italic;"&gt;"Your Yahoo! Custom Mailbox plan for $display_id will be renewed for another year&lt;/span&gt;". I've seen recently that Yahoo! has been hurting and that they have been losing customers, but I can't imagine why.&lt;br /&gt;&lt;br /&gt;I used to host all my small business domain registrations and email with Yahoo! Starting a year ago, I moved nearly all my paid services away from Yahoo!. It became clear to me over time that they didn't really intend to actually &lt;span style="font-weight: bold;"&gt;support&lt;/span&gt; their small business services. I challenge anyone to send an email to Yahoo! Small Business support, you can't. There is no means to contact them. At best, you can fill in a generic form that gets lost in the ether (I've tried that a few times too and nobody has ever responded).&lt;br /&gt;&lt;br /&gt;No thanks, I'll take my money somewhere that has staff capable of correctly generating a mail merge and that will actually respond to my emails when I have a hosting issue.&lt;br /&gt;&lt;br /&gt;Yahoo! is and will be my portal, but come on guys. Maybe Jerry can correct the course, I hope so.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-2039879782948489985?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/2039879782948489985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=2039879782948489985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/2039879782948489985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/2039879782948489985'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/10/plan-for-displayid-will-be-renewed-for.html' title='plan for $display_id will be renewed for another year'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-4022063814034575756</id><published>2007-10-08T22:22:00.000-07:00</published><updated>2007-10-22T00:15:34.973-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shouldbeeasier'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Mind the Gap</title><content type='html'>I was recently fortunate enough to actually be offered a choice for my hardware and operating system at my current job. It's unfortunate that such choices aren't more common for engineering-types these days. I'm a big believer in the best tool for the job mentality and for me that's clearly some derivative of Linux on the desktop (and likely x86 Solaris on the server, depending on what I'm doing with it).&lt;br /&gt;&lt;br /&gt;Faced with said choice, I went with Linux/x86 over Mac (that's another post all together). Having had good success in the past with Ubuntu, I decided to go with &lt;a href="https://wiki.ubuntu.com/GutsyGibbon"&gt;Gutsy Gibbon&lt;/a&gt; beta. Unfortunately, it was &lt;em&gt;more&lt;/em&gt; beta than I would have liked.&lt;br /&gt;&lt;br /&gt;First attempt at installation laid down the OS as normal. Being a sucker for eye candy, I wanted to get Compiz working ASAP in hopes of making the Windows users around me think twice. This turned out to be a big mistake. I ended up installing the binary ATI drivers and patching all in the same shot, and from there Gusty went into some sort of video card config hell. Despite my best attempts to hack /etc/X11/xorg.conf, I couldn't rescue my UI and had to start all over from scratch. Thankfully, I had a second hard drive available and copied all my userland tweaks there before rebuilding the whole rig.&lt;br /&gt;&lt;br /&gt;This time around, I did a normal install. After making sure that was stable, I went after the binary drivers and got them working. &lt;em&gt;Then&lt;/em&gt;, I allowed my updates to run, first system packages, then X11/Xde packages and binary drivers, backing-up my xorg.conf after each step so I could revert.&lt;br /&gt;&lt;br /&gt;At the end of the day, the whole thing still isn't all that stable. I could bail on the eye candy, but that would be to admit defeat and that's not how I roll. Still though, I expected more. This experience was not all that much better from my previous Gentoo encounters with multiple reboots to the live CD to bail myself out. I was hoping for more, and didn't get it.&lt;br /&gt;&lt;br /&gt;Finally, it's worth mentioning that Java UIs seem to struggle somewhat under my config with Compiz. IntelliJ's menus often don't show up and other Java-based UIs are also lacking.&lt;br /&gt;&lt;br /&gt;Speaking of IntelliJ on Linux, it could really use some work. Their reliance on Java's fonts is plain painful, especially with so many nice anti-aliased fonts out there in Linux land. It's a pity that what is generally such a mature product couldn't keep-up with Eclipse and at least match SWT's handling of fonts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-4022063814034575756?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/4022063814034575756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=4022063814034575756' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/4022063814034575756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/4022063814034575756'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/10/mind-gap.html' title='Mind the Gap'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-1319831943566782078</id><published>2007-10-01T21:24:00.000-07:00</published><updated>2007-10-22T00:16:43.781-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jive'/><category scheme='http://www.blogger.com/atom/ns#' term='career'/><title type='text'>Downsizing</title><content type='html'>I'm both happy and sad to announce that I'll be downsizing my career. I'm leaving behind my work as a Technologist for Liberty Mutual and assuming a core engineering position with &lt;a href="http://www.jivesoftware.com/"&gt;Jive Software&lt;/a&gt; here in Portland.&lt;br /&gt;&lt;br /&gt;I'm sad to be leaving the team at LM. They are immensely talented and capable of great things, I sincerely hope they are given an opportunity to act on that talent.&lt;br /&gt;&lt;br /&gt;That said, I'm looking forward to joining Jive, more so than most of my previous career moves. If you follow the news stories around Jive, they are doing good things and doing them well. They are building on open protocols and generally lean towards Open Source Software as well - both things I highly value.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-1319831943566782078?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/1319831943566782078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=1319831943566782078' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/1319831943566782078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/1319831943566782078'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/10/downsizing.html' title='Downsizing'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-3705081870650656906</id><published>2007-09-27T21:12:00.001-07:00</published><updated>2007-09-27T21:19:38.798-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><title type='text'>Have a Seat on the Couch</title><content type='html'>No idea why it took me so long to find &lt;a href="http://couchdb.com/CouchDB/CouchDBWeb.nsf/Home?OpenForm"&gt;CouchDB&lt;/a&gt;, but I will be watching its development closely and will start probing the source once I have a better handle on Erlang. Highlights include a RESTful API, a bevy of clients to talk with that RESTful API (Ruby, Python, Java, JavaScript), data replication for reliability, and off-line capabilities. I can't think of a much better use of Erlang on the server side and I love the use of SpiderMonkey for a Query language , that's plain brilliant and something people should use more of.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-3705081870650656906?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/3705081870650656906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=3705081870650656906' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/3705081870650656906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/3705081870650656906'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/09/have-seat-on-couch.html' title='Have a Seat on the Couch'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-2169542205885963124</id><published>2007-09-14T00:13:00.000-07:00</published><updated>2007-09-14T00:16:02.630-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><title type='text'>Flexy Flex</title><content type='html'>I will be speaking at one of the Portland &lt;a href="http://flexpdx.org/"&gt;Flex User's groups&lt;/a&gt; on Sep. 20. The topic will be integrating Flex with RESTful applications, something that really should be easier than it is.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-2169542205885963124?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/2169542205885963124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=2169542205885963124' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/2169542205885963124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/2169542205885963124'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/09/flexy-flex.html' title='Flexy Flex'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-7511261066529136383</id><published>2007-09-13T21:59:00.000-07:00</published><updated>2007-09-13T23:10:54.860-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='integration'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Apache Is My Service Hub</title><content type='html'>Ok, so I nicked the idea of this post from mnot's &lt;a href="http://www.mnot.net/blog/2007/04/29/squid"&gt;Squid is My Service Bus&lt;/a&gt; and tried to extend the concept based on ways I've used Apache HTTPD in the past.&lt;br /&gt;&lt;br /&gt;In general, I'm a big fan of &lt;a href="http://httpd.apache.org/"&gt;Apahce HTTPD&lt;/a&gt;. It's immensely powerful and has been my "Swiss Army Knife" of the web for some time now, proxying this, caching that, dynamically serving things all the while never once becoming the primary constraint in any distributed system.  That's saying a lot as a perimeter service responsible for all ingress traffic.&lt;br /&gt;&lt;br /&gt;It occurred to me in discussions with &lt;a href="http://fuzzypanic.blogspot.com/"&gt;Mike&lt;/a&gt; and &lt;a href="http://patricklogan.blogspot.com/"&gt;Patrick&lt;/a&gt; that Apache's utility makes it an ideal Service Bus of sorts. Service Hub might be a better term. Most of Apache's default functionality is geared towards moving resource requests around and not protocol mediation (a key criteria of a bus). However, nothing stops the Apache developer from making the server more bus like if the requirements so dictate.&lt;br /&gt;&lt;br /&gt;The idea goes like this&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Service consumers, RESTful preferably (although SOAP will work too), desire to perform operations on a resource. The consumer has a client that is smart - it knows that it can rely on finding one or more Service Hubs in the local vicinity, but doesn't care exactly where that hub is.&lt;/li&gt;&lt;li&gt;The client performs some measure of discovery, a DNS lookup backed by BIND zones, a Zeroconf search for the Service Hub, a broadcast search, something that lets the client discover, &lt;span style="font-weight: bold;"&gt;at runtime&lt;/span&gt;, it's friendly local Service Hub. The important part is that all clients search for their local Service Hub in the same way and in a manner that lets us have one or twenty hubs depending on our needs. We can scale up or down and the client behavior doesn't change.&lt;/li&gt;&lt;li&gt;When the service client finds &lt;em&gt;a&lt;/em&gt; hub, it makes a request of that hub. Next time around, it might use a different hub, or it might hold a keep-alive for the HTTP connection to that hub.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;So, what makes Apache particularly well suited for this role?&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;Apache HTTPD is ubiquitous&lt;/b&gt; - Apache is capable as acting as an origin, a proxy or a gateway for resources all in one set of configuration while being 99% HTTP 1.1 compliant. It runs on all Unixes I know of, Windows and other platforms. I generally don't think of Apache as middleware, but if you abstract Apache up a layer and treat it as a RESTful gateway, it does fill a role traditionally reserved for middleware.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Apache HTTPD can reverse proxy&lt;/b&gt; - Apache has an added advantage that it can perform crude load balancing in a reverse proxy configuration. This means, you can have service clients consume HTTP resources without knowing that they are talking with one or twenty back-end origin servers. Sure, F5s have been doing this for some time now, but try installing thirty F5s in a large integration, one for each broadcast domain and see what it does for your budget. Additionally, Apache can reverse proxy for loads of protocols out of the box, HTTP(S), FTP and AJP open worlds of opportunities for the systems integrator.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Performance&lt;/b&gt; - Apache HTTPD builds on Apache's portable runtime (APR) which is a fairly low-level abstraction on top of most OS system calls. This gives it tremendous performance benefits (like using scalable non-blocking I/O ala epoll on Linux) while still remaining relatively platform-agnostic.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Extensible&lt;/b&gt; - Not long ago, writing Apache modules was a poorly-documented black art. That is improving substantially with books and better reference documentation. But, writing a module isn't necessary at all. With dynamic language alternatives like Python and Ruby that can run in-process with Apache workers, you can extend Apache as a Service Hub however you like and without writing C.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;I don't expect to see wide adoption of this type of approach any time soon. If RESTful architectures catch on and people start to see the web as a series of resources, Apache HTTPD's role will continue to grow. It's high time we stopped looking at Apache HTTPD as just a web server and started viewing it as an HTTP Gateway.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-7511261066529136383?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/7511261066529136383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=7511261066529136383' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/7511261066529136383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/7511261066529136383'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/09/apache-is-my-service-hub.html' title='Apache Is My Service Hub'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-5820918445434393393</id><published>2007-09-06T18:17:00.000-07:00</published><updated>2007-09-06T20:41:53.349-07:00</updated><title type='text'>Async Beauty</title><content type='html'>Wow, came across &lt;a href="http://docs.safehaus.org/display/ASYNCWEB/Home"&gt;AsyncWeb&lt;/a&gt; today and have to say it's a thing of beauty. Excuse me while I tout my own greatness for a while but about two years ago I had an idea to write a NIO/async REST engine for wicked fast, non-servlet cruft, async REST implementation and AsyncWeb + &lt;a href="http://www.restlet.org/"&gt;RESTlet&lt;/a&gt; is headed in that exact direction. RESTlet is equally impressive and has come a long way over the last six months. Love the pluggable connector design for RESTlet, should really allow it to move in ways that the Servlet spec hasn't been able to.&lt;br /&gt;&lt;br /&gt;If you are trying to do things like COMET with traditional threaded servers, you're absolutely mad and need to look at this approach.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-5820918445434393393?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/5820918445434393393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=5820918445434393393' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/5820918445434393393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/5820918445434393393'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/09/async-beauty.html' title='Async Beauty'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-4752352427182087927</id><published>2007-08-27T20:02:00.000-07:00</published><updated>2007-08-27T20:30:32.626-07:00</updated><title type='text'>New Toy</title><content type='html'>I have a &lt;a href="http://www.archos.com/products/gen_5/archos_605wifi/features.html?country=global&amp;lang=en"&gt;new toy&lt;/a&gt; on back-order with Amazon.&lt;br /&gt;&lt;br /&gt;In short, I'm after most of the iPhone features without the phone part. I want:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;A Video Player (including DIVX)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A Music Player (including OGG)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A browser over WiFi in a pinch&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A small form factor with decent battery life&lt;/li&gt;&lt;br /&gt;&lt;li&gt;WiFi connectivity&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;It's not an ideal device, but it's a start. &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;I'd like to see an iPhone-like browser, but Opera will do - this isn't my main browser&lt;br /&gt;&lt;li&gt;If I need a full-power browser I'll bust out a laptop.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I wish I had a competitive device that would play iTunes content&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;As an additional plus, the Archos will allow me to play Flash content. In general, I'm not seeing a compelling reason to purchase an iPhone over the 605. At a minimum, until until Apple fixes the iPhone's Bluetooth stack to let me sync calendar and contact over Bluetooth, I'll be looking elsewhere.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-4752352427182087927?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/4752352427182087927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=4752352427182087927' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/4752352427182087927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/4752352427182087927'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/08/new-toy.html' title='New Toy'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-4300515165905765339</id><published>2007-08-25T21:59:00.001-07:00</published><updated>2007-08-25T22:12:37.080-07:00</updated><title type='text'>Enough with the Thai Already</title><content type='html'>I love living in Portland for &lt;a href="http://www.groundkontrol.com/"&gt;many&lt;/a&gt;,&lt;a href="http://www.mthood.org/"&gt;many&lt;/a&gt;, &lt;a href="http://www.laurelwoodbrewpub.com/"&gt;many&lt;/a&gt; reasons. But enough already with the lack of food diversity. A local sketchy Teriyaki place just closed down in my Hollywood neighborhood. What opens in it's place? Another Thai restaurant. I won't be going there, I already have a Thai rotation of some &lt;a href="http://www.sweetbasilor.com/"&gt;really&lt;/a&gt; good places, I don't need another. I can count at least ten in a three mile radius, Google says &lt;a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;geocode=&amp;q=Portland,+OR+Thai+Food&amp;ie=UTF8&amp;om=1&amp;ll=45.540864,-122.636604&amp;spn=0.081998,0.159302&amp;z=13"&gt;there are more&lt;/a&gt;. So, if you're opening a new restaurant in Stumptown, I submit:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;No more Thai&lt;/li&gt;&lt;br /&gt;&lt;li&gt;No more Pho&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A strong &lt;strong&gt;Indian&lt;/strong&gt; effort would make a killing&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-4300515165905765339?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/4300515165905765339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=4300515165905765339' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/4300515165905765339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/4300515165905765339'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/08/enough-with-thai-already.html' title='Enough with the Thai Already'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-8963203672187420454</id><published>2007-08-24T00:01:00.000-07:00</published><updated>2007-08-24T00:11:45.259-07:00</updated><title type='text'>OMG What Happened to My H3@d3r?</title><content type='html'>Wow, read &lt;a href="http://tech.groups.yahoo.com/group/rest-discuss/message/9610"&gt;this&lt;/a&gt; from Scott Chapman which got me down. Yet another attempt to do REST from a Flex app with significant hackery bolted on, fails. I've &lt;a href="http://mykakotopia.blogspot.com/2007/08/easy-peesy.html"&gt;said it before&lt;/a&gt;, when you are concerned with your HTTP headers, you are fighting the wrong problem. I don't spend much time thinking about my TCP window scaling, why should I have to constantly focus on HTTP protocol-level craps?&lt;br /&gt;&lt;br /&gt;I'll say it again, someone needs to step-up and write an ActionScript HTTP client. Until that happens, the browser and it's FVM cohorts are the wrong platform for RESTful requests.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-8963203672187420454?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/8963203672187420454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=8963203672187420454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/8963203672187420454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/8963203672187420454'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/08/omg-what-happened-to-my-h3d3r.html' title='OMG What Happened to My H3@d3r?'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-2413769642372418423</id><published>2007-08-23T23:35:00.000-07:00</published><updated>2007-08-23T23:46:36.965-07:00</updated><title type='text'>Toss the Bath Water and the Baby</title><content type='html'>Bill Bill de hÓra &lt;a href="http://www.dehora.net/journal/2007/08/old_and_busted_new_and_busted.html"&gt;picks up on the broken-ness&lt;/a&gt; of the Flash VM's ability or lack thereof to expose headers to the fault callback. He also pulls in &lt;a href="http://www.alistapart.com/stories/tohell/"&gt;to hell with bad web clients&lt;/a&gt;. As I read that, I'm convinced that Flex is actually my escape hatch from browser insanity. I'm heads down in &lt;a href="http://www.cssmastery.com/"&gt;CSS Mastery&lt;/a&gt; at the moment trying to make my nav bar behave sanely across browsers for some non-profit work I'm doing. It's sick the amount of work I'm doing to make sure A is left of B in IE 5.5 on Mac *and* IE 7 on XP x64. Comparatively, the time spent doing the same thing in Flex would have been 1/10th the effort if that. So, I actually agree with Bill on this, we should get rid of bad clients, those bad citizens of the web that break and hurt our beloved &lt;em&gt;web&lt;/em&gt;. &lt;br /&gt;&lt;br /&gt;That's right, we need to toss out the browser all together. Em, or even better, let's actually make our browsers behave as good citizens in the HTTP multiverse that is bearing-down on us like a freight-train made of UTF-8 printable characters (and none of those binary, non-readable ones either thank you very much). As an open message to FF, IE, OP, KQ, etc., I want DELETE. I want access to headers in my XHRs, I want full control. You want to hide it from me, the ignoramus developer because I'm not ready? Ok, wget, here I come!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-2413769642372418423?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/2413769642372418423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=2413769642372418423' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/2413769642372418423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/2413769642372418423'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/08/toss-bath-water-and-baby.html' title='Toss the Bath Water and the Baby'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-3496729250869521261</id><published>2007-08-22T23:36:00.000-07:00</published><updated>2007-08-22T23:49:24.916-07:00</updated><title type='text'>XMPP MIA?</title><content type='html'>I've been trying to hit-up &lt;a href="http://www.xmpp.org"&gt;xmpp.org&lt;/a&gt; for two days now and nothing, nada, zilch from their authoritative DNS server. My dig for the www looks like so:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;--&gt; dig www.xmpp.org&lt;br /&gt;&lt;br /&gt;; &lt;&lt;&gt;&gt; DiG 9.4.1-P1 &lt;&lt;&gt;&gt; www.xmpp.org&lt;br /&gt;;; global options:  printcmd&lt;br /&gt;;; Got answer:&lt;br /&gt;;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 54001&lt;br /&gt;;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 6, ADDITIONAL: 8&lt;br /&gt;;; WARNING: recursion requested but not available&lt;br /&gt;&lt;br /&gt;;; QUESTION SECTION:&lt;br /&gt;;www.xmpp.org.                  IN      A&lt;br /&gt;&lt;br /&gt;;; AUTHORITY SECTION:&lt;br /&gt;org.                    45762   IN      NS      TLD2.ULTRADNS.NET.&lt;br /&gt;org.                    45762   IN      NS      TLD5.ULTRADNS.INFO.&lt;br /&gt;org.                    45762   IN      NS      TLD4.ULTRADNS.org.&lt;br /&gt;org.                    45762   IN      NS      TLD6.ULTRADNS.CO.UK.&lt;br /&gt;org.                    45762   IN      NS      TLD3.ULTRADNS.org.&lt;br /&gt;org.                    45762   IN      NS      TLD1.ULTRADNS.NET.&lt;br /&gt;&lt;br /&gt;;; ADDITIONAL SECTION:&lt;br /&gt;TLD2.ULTRADNS.NET.      45863   IN      A       204.74.113.1&lt;br /&gt;TLD5.ULTRADNS.INFO.     1251    IN      A       192.100.59.11&lt;br /&gt;TLD4.ULTRADNS.org.      45762   IN      AAAA    2001:502:100e::1&lt;br /&gt;TLD4.ULTRADNS.org.      45902   IN      A       199.7.67.1&lt;br /&gt;TLD6.ULTRADNS.CO.UK.    477     IN      A       198.133.199.11&lt;br /&gt;TLD3.ULTRADNS.org.      45863   IN      A       199.7.66.1&lt;br /&gt;TLD1.ULTRADNS.NET.      45762   IN      AAAA    2001:502:d399::1&lt;br /&gt;TLD1.ULTRADNS.NET.      45863   IN      A       204.74.112.1&lt;br /&gt;&lt;br /&gt;;; Query time: 62 msec&lt;br /&gt;;; SERVER: 209.244.0.1#53(209.244.0.1)&lt;br /&gt;;; WHEN: Wed Aug 22 23:49:06 2007&lt;br /&gt;;; MSG SIZE  rcvd: 344&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I like XMPP, I do. But if *they* can't get their DNS right, I'm scared (XMPP depends heavily on DNS working properly).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-3496729250869521261?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/3496729250869521261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=3496729250869521261' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/3496729250869521261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/3496729250869521261'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/08/xmpp-mia.html' title='XMPP MIA?'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1477573986339144843.post-5025252953774023794</id><published>2007-08-22T09:33:00.000-07:00</published><updated>2007-08-22T09:41:05.774-07:00</updated><title type='text'>Easy Peesy</title><content type='html'>&lt;a href="http://patricklogan.blogspot.com/2007/08/ease-argument-again.html"&gt;Making it stick.: The "Ease" Argument Again?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've got Patrick's back on this one, I have a hard time believing that anything that starts with WSDL is going to make my life easier.&lt;br /&gt;&lt;br /&gt;I like Dan's project, I do. I think &lt;a href="http://xfire.codehaus.org/"&gt;XFire&lt;/a&gt; is &lt;em&gt;the&lt;/em&gt; way to go if you have a hard and fast requirement to expose a Java-based service via SOAP. But make sure you actually need to go there before you do. If your biggest customer says "we use SOAP and only SOAP" for integration with trading partners, hello XFire.&lt;br /&gt;&lt;br /&gt;Thus lies the path to Kakotopia! In my experience, you won't be pointing any tools at each other that actually grok that WSDL &lt;em&gt;and can talk to each other without serious intervention&lt;/em&gt; on your part. My last experience trying to do this very thing was a Java/.NET integration for a project was about two years ago, the experience went something like this:&lt;br /&gt;&lt;br /&gt;1) Expose XFire service by configuring Spring adapter booya&lt;br /&gt;2) Check WSDL - looks OK, not that I'd know without studying the spec&lt;br /&gt;3) Use VisualStudio .NET Stub generator wizard to create a C# class for invoking the service.&lt;br /&gt;4) Try and run the class from step 3&lt;br /&gt;5) Witness failure, something about unsupported binding&lt;br /&gt;6) Read &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/"&gt;this&lt;/a&gt;.&lt;br /&gt;7) Change API to XML-RPC.&lt;br /&gt;&lt;br /&gt;I have about eight of these stories, some of them end with me snooping HTTP Headers because of obscure server errors. Some, like a recent attempt to create a Flex service to consume Confluence's WSDL end with obtuse client-side schema errors. That's about all the CPU cycles I give to these types of things, after that I fall back to things I can control and see. Maybe some day it will work, but I haven't seen it materialize yet.&lt;br /&gt;&lt;br /&gt;Given &lt;a href="http://mykakotopia.blogspot.com/2007/08/restful-flex-angst.html"&gt;recent&lt;/a&gt; &lt;a href="http://mykakotopia.blogspot.com/2007/08/restful-rails-angst.html"&gt;episodes&lt;/a&gt; with REST, I'm not sure it's a clear winner from the browser either, because I again find myself looking at HTTP Headers to try and figure out what is broken. I don't want to spend my time doing that. Seriously, I'm done breaking out &lt;a href="http://www.wireshark.org/"&gt;Wireshark&lt;/a&gt; to troubleshoot protocols that work until people try and get cute with them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-5025252953774023794?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/5025252953774023794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=5025252953774023794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/5025252953774023794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/5025252953774023794'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/08/easy-peesy.html' title='Easy Peesy'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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-1477573986339144843.post-3654599800634630059</id><published>2007-08-16T22:07:00.000-07:00</published><updated>2007-08-16T22:29:27.380-07:00</updated><title type='text'>RESTful Flex Angst</title><content type='html'>Following on the previous post about issues encountered getting Rails and Flex to play together, we've now observed that certain popular browsers do not correctly interpret the HTTP specification for status codes on HTTP responses. Namely, IE 6 (haven't tested 7) treats any 200 status code other than 200 as an error.  Perform an overloaded POST to a RESTful service in IE and get a 201 back, IE exposes a status of error to interested applications.&lt;br /&gt;&lt;br /&gt;Why does this matter? When trying to do Flex integration with a Rails back-end, we are required to rely on Flex's callback mechanism to tell us if we get a result or a fault. Flex apparently, relies on the browser's plumbing to determine the success of the request. So, updating a RESTful resource via a Flex HTTPService for example appears as a failure at the Flex layer because IE tells the FVM that it got an error. This was the source of great angst for us  because most of us test our Flex applications in Firefox.&lt;br /&gt;&lt;br /&gt;The problem is further compounded by the fact that Flex doesn't expose any of the raw response data to us, simply a FaultEvent with little useful information (one of the dreaded stream errors actually). No headers, no body content, nothing. I've seen blog posts that hint at this being a limitation of the FVM's status as a lowest common denominator runtime, Flex included - some browsers don't expose headers to plug-ins so neither can the FVM.&lt;br /&gt;&lt;br /&gt;When I find some time, I'm going to fire up the ActionScript Socket API and write an HTTP client that doesn't require overloaded POST, that exposes plumbing of the HTTP, and that allows *me* to determine what is or is not an error.&lt;br /&gt;&lt;br /&gt;Alternatively, I've got a more simple tool in the works that will allow you to test HTTP methods of all sorts and status codes propagate back into the FVM.&lt;br /&gt;&lt;br /&gt;In a future post I'll dig into some of the interesting behaviors we found examining these behaviors from the stand-alone player and how it does it's networking.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-3654599800634630059?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/3654599800634630059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=3654599800634630059' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/3654599800634630059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/3654599800634630059'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/08/restful-flex-angst.html' title='RESTful Flex Angst'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1477573986339144843.post-6441613151935023514</id><published>2007-08-07T20:25:00.000-07:00</published><updated>2007-08-07T22:45:03.004-07:00</updated><title type='text'>RESTful Rails Angst</title><content type='html'>I've been working with Rails to provide RESTful services to a Flex application recently and a number of issues have come up that people need to know about dern it.&lt;br /&gt;&lt;br /&gt;Today's story entails a battle with Rails' scaffold_resource. The RESTful generator makes a noble effort to create RESTful controllers. However, a few minor issues pop-up that need repairing in the current incarnation of the generator.&lt;br /&gt;&lt;br /&gt;The most glaring issue is that the default code doesn't handle ActiveRecord find errors gracefully. For example, if I have a FoosController servicing requests to "/foos/1.xml" and that model :id=1 doesn't exist, the default FoosController will throw a RecordNotFound which up the call stack results in a 500 error being returned to the client. This, is unfortunately not "RESTful" as they say. The correct behavior would be to return a 404 indicating that the desired resource does not exist, not that the server could not handle the request. Adding this behavior is not difficult, but it's somewhat tedious in that each generated controller exposes four find calls that can fail in this way.&lt;br /&gt;&lt;br /&gt;Additionally, as Peter Armstrong's solid PDF-only book on Flexible Rails points out, the default implementation of to_xml used throughout the controller is quite painful for certain clients. Most programming languages don't allow "-" in member names and as such, mapping tools that attempt to make XML traversal easier by exposing the XML structure as a  choke on the default XML marshaling. As Peter points out,  you can change this behavior by adding the ":dasherize" option but again, this is all over RESTful Rails controllers.&lt;br /&gt;&lt;br /&gt;I could fix both of these through some hacking on the Rails distro, but then I have to remember to keep my changes across upgrades. Another option would likely entail injecting some app-specific base classes into the hierarchy, again not an idea I'm crazy about. If I come up with a better approach, I'll post it here. Or maybe back as a patch :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1477573986339144843-6441613151935023514?l=mykakotopia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mykakotopia.blogspot.com/feeds/6441613151935023514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1477573986339144843&amp;postID=6441613151935023514' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/6441613151935023514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1477573986339144843/posts/default/6441613151935023514'/><link rel='alternate' type='text/html' href='http://mykakotopia.blogspot.com/2007/08/restful-rails-angst.html' title='RESTful Rails Angst'/><author><name>Erik Onnen</name><uri>http://www.blogger.com/profile/14653098194183012398</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></feed>
