<?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-14059280</id><updated>2012-01-11T12:20:08.784-08:00</updated><category term='mobile'/><category term='barcamp'/><category term='bigdata'/><category term='daytripr'/><category term='iphone'/><category term='engineering'/><category term='food'/><category term='startup'/><category term='drupal'/><category term='speech'/><category term='dallas'/><category term='nyc'/><category term='cohabitat'/><title type='text'>Architectonic</title><subtitle type='html'>The Art of Constructing Systems</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default?start-index=101&amp;max-results=100'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>101</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-14059280.post-5282332049599938749</id><published>2011-04-07T23:51:00.001-07:00</published><updated>2011-04-08T00:39:10.654-07:00</updated><title type='text'>Three Books</title><content type='html'>Too long for Twitter: Three books the people who actually build high tech products should read:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.amazon.com/gp/product/1841120634/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&amp;amp;tag=codeporn-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1841120634"&gt;Crossing the Chasm&lt;/a&gt; by &lt;a href="http://en.wikipedia.org/wiki/Geoffrey_Moore"&gt;Geoffrey Moore&lt;/a&gt;. Just read the whole thing cover-to-cover. Sure, it talks about ways to move from early to mainstream markets, but it also explains just what a market is, the difference between a cool technology and a "Whole Product" that's useful enough for somebody to actually pay for, and how to care for, feed and eventualy abandon early adopters. Moore didn't invent all (or even most of) the ideas in the book, but he took a bunch of esoteric information and turned it into a coherent, easy-to-read strategy for taking technology products to market.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.amazon.com/gp/product/0976470705/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&amp;amp;tag=codeporn-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0976470705"&gt;The Four Steps to the Epiphany&lt;/a&gt; by &lt;a href="http://en.wikipedia.org/wiki/Steven_Gary_Blank"&gt;Steven Gary Blank&lt;/a&gt;. Unlike Crossing, this one's a bit of a slog, but if you're selling to businesses rather than consumers resist the temptation to skim it or read one of the "lite" versions floating around. Blank takes a bunch of industry best practices, mixes in his own hard-won wisdom, and produces a plan for turning an idea into a workable business. Spend a day or two reading through Crossing to get some background, then spend as long as it takes to get through Four Steps. It's worth it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.amazon.com/gp/product/0786303158/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&amp;amp;tag=codeporn-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0786303158"&gt;Solution Selling&lt;/a&gt; by Michael T. Bosworth. There's "New Solution Selling" by Eades and "Spin Selling" by Rackham, but the takeaway should be the same no matter which you choose: selling is not a black art that only born salesmen can understand. Selling is a rational processing of matching customer needs to your solutions, and you (yes you, geek engineer) are fully capable of doing it. The key is that we're not talking hucksters selling vacuum cleaners door-to-door, we're talking selling expensive, complex, high-tech solutions in an ongoing relationship. And that means actually solving your customer's problem is important. And that firmly aligns the selling with the engineering. A good engineer is still going to need to put in some work to become a competent high-tech salesperson, but engineers have a huge advantage over non-engineers in this arena.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Four Steps has a great appendix with many more recommendations, but those three are the must-reads I'd want anyone I was working with (CEO to engineering intern) to have read and understood.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-5282332049599938749?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/5282332049599938749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=5282332049599938749' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5282332049599938749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5282332049599938749'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2011/04/three-books.html' title='Three Books'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-3359899999968835866</id><published>2011-03-05T11:45:00.000-08:00</published><updated>2011-03-05T12:50:12.424-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><category scheme='http://www.blogger.com/atom/ns#' term='cohabitat'/><category scheme='http://www.blogger.com/atom/ns#' term='bigdata'/><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='dallas'/><title type='text'>Dallas Big Data Micro Hackathon</title><content type='html'>&lt;a href="http://www.flickr.com/photos/doctorow/2711081060/" title="Tape library, CERN, Geneva 2 by gruntzooki, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3220/2711081060_ba91f69796.jpg" width="400" alt="Tape library, CERN, Geneva 2" /&gt;&lt;/a&gt;&lt;div&gt;Tuesday, March 22nd at &lt;a href="http://cohabitat.us/"&gt;Cohabitat&lt;/a&gt; in Dallas, Texas a group of geeks is getting together to write code to process &lt;a href="http://en.wikipedia.org/wiki/Big_data"&gt;Big Data&lt;/a&gt;. There will likely be a group getting &lt;a href="http://hadoop.apache.org/"&gt;Hadoop&lt;/a&gt; up and running on laptops ("Hello, World" level), and possibly a group working with &lt;a href="http://cassandra.apache.org/"&gt;Cassandra&lt;/a&gt; and MapReduce on EC2 ("I actually have a real-life problem to solve" level) but anyone who's serious about Big Data is invited. You can sign up at:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: center; "&gt;&lt;a href="http://dbdmh.eventbrite.com/"&gt;http://dbdmh.eventbrite.com&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;"Big Data" isn't a formally defined term, but the general idea is that if your data set could fit on a single disk or be easily hosted inside a normal relational database it's &lt;b&gt;not&lt;/b&gt; big data.  Google calculating &lt;a href="http://en.wikipedia.org/wiki/PageRank"&gt;PageRank&lt;/a&gt; for every site they index? LinkedIn doing a complete &lt;a href="http://blog.linkedin.com/2010/07/01/linkedin-apache-pig/"&gt;social graph analysis&lt;/a&gt; for every user? Those are definitely Big Data problems.  Technologies like &lt;a href="http://labs.google.com/papers/mapreduce.html"&gt;MapReduce&lt;/a&gt; (see &lt;a href="http://hadoop.apache.org/"&gt;Hadoop&lt;/a&gt;) and certain kinds of highly scalable NoSQL databases (see &lt;a href="http://cassandra.apache.org/"&gt;Cassandra&lt;/a&gt;) fall under the heading, but it's a big tent and there are many other possibilities.&lt;/div&gt;&lt;div&gt;The event is free, but the idea is to keep the group small and focused, so spaces are limited. Sign up at: &lt;a href="http://dbdmh.eventbrite.com/"&gt;http://dbdmh.eventbrite.com&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-3359899999968835866?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/3359899999968835866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=3359899999968835866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3359899999968835866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3359899999968835866'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2011/03/dallas-big-data-micro-hackathon.html' title='Dallas Big Data Micro Hackathon'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3220/2711081060_ba91f69796_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-3356966755591069710</id><published>2010-05-04T21:01:00.001-07:00</published><updated>2010-05-04T21:35:12.222-07:00</updated><title type='text'>Frustrated with Dallas</title><content type='html'>&lt;div&gt;&lt;a href="http://www.unionsquareventures.com/"&gt;Union Square Ventures&lt;/a&gt;, the New York-based venture capital firm famous for its Web 2.0 investments (&lt;a href="http://foursquare.com/"&gt;Foursquare&lt;/a&gt;, &lt;a href="http://meetup.com/"&gt;Meetup&lt;/a&gt;, &lt;a href="http://tumblr.com/"&gt;tumblr&lt;/a&gt;, &lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt;, &lt;a href="http://delicious.com/"&gt;delicious&lt;/a&gt;, &lt;a href="http://feedburner.com/"&gt;Feedburner&lt;/a&gt;, &lt;a href="http://etsy.com/"&gt;etc&lt;/a&gt;) recently &lt;a href="http://unionsquareventures.com/2010/04/usv-is-hiring.php"&gt;announced&lt;/a&gt; that they're hiring an investment analyst and a general manager. They invited anybody who was interested to send them links to their web presence, and the staff at USV would use that instead of a resume. Kinda cool.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;In a &lt;a href="http://www.unionsquareventures.com/2010/04/hiring-update-3.php"&gt;followup post&lt;/a&gt;, they mapped the applicants. Nobody from Dallas applied for the general manager position, and only a couple could stir themselves to apply for the analyst spot. &lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;img src="http://3.bp.blogspot.com/_2tLgOGpsEVE/S-Dy64bxnrI/AAAAAAAAAJI/EklYjTUMPCg/s400/usvd.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 150px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5467637041023000242" /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Anybody&lt;/i&gt; who wanted to could apply. No old-boy network, no experience absolutely required (although they did have some "ideal candidate" desiderata). And Dallas just couldn't be bothered.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm very frustrated with Dallas.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-3356966755591069710?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/3356966755591069710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=3356966755591069710' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3356966755591069710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3356966755591069710'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2010/05/frustrated-with-dallas.html' title='Frustrated with Dallas'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_2tLgOGpsEVE/S-Dy64bxnrI/AAAAAAAAAJI/EklYjTUMPCg/s72-c/usvd.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-1140844933191862232</id><published>2010-02-14T16:00:00.000-08:00</published><updated>2010-02-15T06:38:11.926-08:00</updated><title type='text'>Linked Data, Confidence Games and the Transitivity of Trust</title><content type='html'>Over the Christmas holidays I took my family on a five thousand mile roadtrip around the American West. It took a couple of weeks and I expected to spend a lot of time on my favorite user-generated travel review site.&lt;br /&gt;&lt;br /&gt;And I did spend a lot of time on the site, enough to eventually figure out that it had been comprehensively infiltrated by review spammers. Some of the spam reviews were obvious: "I loved this place! Five stars!" when all the rest of the reviews were negative. Some were more devious: "There were bedbugs! They spat in my soup! Zero stars!" when all the other reviews were stellar. In other cases it was much harder to tell, and in all cases the average rating was highly suspect.&lt;br /&gt;&lt;br /&gt;Turns out there are companies that specialize in vandalizing review sites[1]. The companies employ actual humans who spend actual creative effort to craft misleading reviews. They even set up realistic user profiles, and on some sites they add each other as friends. In other words, it's considered worthwhile to spend real time and effort on this stuff.&lt;br /&gt;&lt;br /&gt;It's been suggested that there's a technological solution: If the reviewers are part of a social network, it's possible to extract some useful statistics that might help determine if the user is real or fake.&lt;br /&gt;&lt;br /&gt;If the reviewer is a friend, that's obviously useful information. But there's very little chance that some random reviewer is your friend.&lt;br /&gt;&lt;br /&gt;But what if the reviewer is part of your extended social network? Surely the fact that somebody is a friend of a friend is some indication that they're trustworthy, or at least that they're a real person.&lt;br /&gt;&lt;br /&gt;Nope.&lt;br /&gt;&lt;br /&gt;First off, with a fan-out of 200 friends the 2nd-level extended social graph is around 40,000 people. Allowing for annoying people who friend everybody, an extended social graph could easily include a substantial portion of the entire population of the planet. All it takes is a couple of mistaken friend-adds to get you hooked up to a spammer-created sub-network. Even if you're careful, it's overwhelmingly likely that some friend-of-a-friend isn't.&lt;br /&gt;&lt;br /&gt;So, trust is clearly not transitive and the idea of a "web of trust" cannot be taken literally[2].&lt;br /&gt;&lt;br /&gt;In most cases, it's only possible to determine if the "shape" of the reviewer's social graph is reasonable. That is, are they friends with other plausible-looking people? Are many of their friends known fake profiles? Do they have a realistic number of friends? Etc.&lt;br /&gt;&lt;br /&gt;But that's trivial to game. Even if there are obstacles to a totally automated approach, the application of ultra-cheap human labor makes it easy to set up a fake social network on any given site.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://linkeddata.org/"&gt;Linked data&lt;/a&gt; and distributed social graphs (ala &lt;a href="http://esw.w3.org/topic/foaf+ssl"&gt;FOAF + SSL&lt;/a&gt;) make things worse, because while before it took some amount of human effort to solve the captchas and create new accounts on a social-graph silo like Facebook, with a distributed "&lt;a href="http://blogs.sun.com/bblfish/entry/more_on_authorization_in_foaf"&gt;web of trust&lt;/a&gt;" approach it can all be completely automated.&lt;br /&gt;&lt;br /&gt;That isn't to say FOAF + SSL isn't a neat &lt;a href="http://artofsystems.blogspot.com/2007/03/openid-and-foafhcard-live-from-sxswi.html"&gt;replacement for the monstrosity&lt;/a&gt; that &lt;a href="http://openid.net/"&gt;OpenID&lt;/a&gt; has become, but the "web of trust" part won't fly.&lt;br /&gt;&lt;br /&gt;That said, in some sense it doesn't really matter. I'm certainly not arguing that we should slow in our rush towards a semantic web. The benefits are too great. But given the experience with email spammers and review fraudsters, it might be a good idea to be open about the fact that we're also introducing new hazards.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1] So, honestly, I only have anecdotal evidence. But it doesn't seem like a very controversial assumption.&lt;br /&gt;&lt;br /&gt;[2] "Trust" is a complicated word. It's not that knowing a review is by a friend-of-a-friend-of-a-friend isn't useful information, it's that using it to make a binary yes/no trust decision is misguided. There's been some interesting academic research in this area,  Wikipedia has a rundown:  &lt;a href="http://en.wikipedia.org/wiki/Web_of_trust"&gt;http://en.wikipedia.org/wiki/Web_of_trust&lt;/a&gt; In what seems like a perfectly sensible approach, this paper:&lt;a href="http://www.mindswap.org/papers/Trust.pdf"&gt; http://www.mindswap.org/papers/Trust.pdf&lt;/a&gt; suggests using social graph information as just one input into a full spam handling system.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-1140844933191862232?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/1140844933191862232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=1140844933191862232' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/1140844933191862232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/1140844933191862232'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2010/02/linked-data-confidence-games-and.html' title='Linked Data, Confidence Games and the Transitivity of Trust'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-7724526770108724639</id><published>2009-07-10T20:31:00.001-07:00</published><updated>2009-07-11T08:01:20.356-07:00</updated><title type='text'>303 Madness and the Giant Global Graph</title><content type='html'>I had the opportunity to do a short talk at the latest &lt;a href="http://www.semanticuniverse.com/events-meetup-semantic-web-dallas-july-meetup.html"&gt;Semantic Web Dallas meetup&lt;/a&gt;. I decided on an overview of the 303-redirect dance that differentiates a URI that points to a web page from a URI that names a concept in the Semantic Web. Yes, there's a difference. Yes, it's an important difference. Probably. In any case, it's a good topic for a 10-minute talk because having to listen to stuff like this for more than ten minutes at a time can lead to bleeding from the ears. It's a complex issue with an, uhh, unexpected? solution, best approached with a sense of humor. Well, maybe not &lt;i&gt;best&lt;/i&gt; approached that way, but it seemed like a good idea at the time. And the list of references at the end is pretty good.&lt;br /&gt;&lt;br /&gt;&lt;iframe src='http://docs.google.com/present/embed?id=ah7sbx3c6vpn_117cgrsmrtm' frameborder='0' width='410' height='342'&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;If you read the references you'll learn that you can also use URLs with fragment identifiers in your RDF. But doing it that way doesn't involve a fundamental redefinition of part of HTTP so it's a lot less entertaining.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-7724526770108724639?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/7724526770108724639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=7724526770108724639' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/7724526770108724639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/7724526770108724639'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2009/07/303-madness-and-giant-global-graph.html' title='303 Madness and the Giant Global Graph'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-3067741228177506010</id><published>2009-07-02T23:05:00.000-07:00</published><updated>2009-07-03T00:15:17.334-07:00</updated><title type='text'>Popstat on Google App Engine</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_2tLgOGpsEVE/Sk2uWL4EDoI/AAAAAAAAAIE/2aa98SQM-rA/s1600-h/Popstat.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 152px;" src="http://4.bp.blogspot.com/_2tLgOGpsEVE/Sk2uWL4EDoI/AAAAAAAAAIE/2aa98SQM-rA/s200/Popstat.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5354127228181679746" /&gt;&lt;/a&gt;Popstat is the demo application from my &lt;a href="http://artofsystems.blogspot.com/2009/06/facebook-intrigue-betrayal-murder.html"&gt;Facebook Dev Garage Dallas&lt;/a&gt; presentation. It just posts a status message to Facebook and Twitter to demonstrate using both Facebook Connect and an external service. I developed it on my laptop and didn't have time to move it to a public host before the event. I wanted it out there live someplace and figured it was a good opportunity to try out &lt;a href="http://code.google.com/appengine/"&gt;Google App Engine&lt;/a&gt;'s Java support (Popstat uses &lt;a href="http://www.grails.org/"&gt;Grails&lt;/a&gt; with a mix of &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt; and Java)&lt;div&gt;&lt;br /&gt;&lt;div&gt;I got it all working, but it was a pain.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;I used the &lt;a href="http://grails.org/plugin/app-engine"&gt;Grails AppEngine plugin&lt;/a&gt;. I liked it.&lt;/li&gt;&lt;li&gt;App Engine provides storage, but not in the form of a relational database. It's close enough that JPA and JDO both work (but not Hibernate, yet). I chose JPA, but either way you'll need to annotate your domain classes (I expected the &lt;a href="http://grails.org/plugin/gorm-jpa"&gt;GORM-JPA&lt;/a&gt; plugin to do that for me, but it didn't)&lt;/li&gt;&lt;li&gt;You'll need to put your domain classes into named packages. Things (silently) don't go well if you leave them in the default package.&lt;/li&gt;&lt;li&gt;If you're using JPA, domain classes will need to explicitly declare an id field. Make it a Long, and add the @Id and @GeneratedValue annotations. Use GenerationType.IDENTITY.&lt;/li&gt;&lt;li&gt;I was able to use the dynamic save() method provided by GORM-JPA, but I had to wrap up the calls in a withTransaction block, and the semantics are slightly different (use merge() instead of save() for updates)&lt;/li&gt;&lt;li&gt;Depending on your version of Spring, you may get a message along the lines of "org.springframework. context.annotation. internalPersistenceAnnotationProcessor': Initialization of bean failed" with something about "java.lang.NoClassDefFoundError:  javax/naming/NamingException". The fix &lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=1240#c5"&gt;here&lt;/a&gt; worked for me.&lt;/li&gt;&lt;li&gt;Popstat uses the &lt;a href="http://code.google.com/p/facebook-java-api/"&gt;facebook-java-api&lt;/a&gt; library. Since App Engine forbids the use of JAXB, I had to switch to the JSON version of the client to avoid an error about JAXBContext.&lt;/li&gt;&lt;li&gt;To talk to Twitter, Popstat uses the &lt;a href="http://code.google.com/p/oauth-signpost/"&gt;oauth-signpost&lt;/a&gt; library. But Signpost depends on Apache HttpClient, and HttpClient uses low-level Socket calls forbidden by App Engine. I hacked Signpost to use URLConnection, but I wouldn't recommend that approach. If I had to do it again, I'd look around for an OAuth library that worked out of the box.&lt;/li&gt;&lt;li&gt;By default, the App Engine &lt;a href="http://code.google.com/appengine/docs/java/tools/devserver.html"&gt;Java Development Server&lt;/a&gt; (a version of the App Engine environment you can run on your local machine) binds to localhost only. The command line client has a "--address" option, but the "grails app-engine run" command doesn't. I hacked the scripts/AppEngine.groovy plugin and harcoded the address parameter into startDevServer().&lt;/li&gt;&lt;/ul&gt;There was some other stuff that I didn't take notes on, but (other than registration being turned off) Popstat is doing what it did before.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;Overall, though, it wasn't a great experience. Google &lt;a href="http://code.google.com/appengine/docs/java/jrewhitelist.html"&gt;turns off random bits of Java&lt;/a&gt; (for security and ease of management), which means that very few third-party libraries are going to work. You'll probably have to do some porting of your own code as well. That, combined with the admin service &lt;a href="http://groups.google.com/group/google-appengine-downtime-notify"&gt;being down all morning&lt;/a&gt;, left a bad taste. The free hosting thing is great for demo apps but I think I'll stick to something like Amazon EC2 for real work. I'm very curious to see how Microsoft Azure stacks up (it's much more of a direct competitor to App Engine than the roll-it-all-yourself EC2)&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-3067741228177506010?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/3067741228177506010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=3067741228177506010' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3067741228177506010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3067741228177506010'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2009/07/popstat-on-google-app-engine.html' title='Popstat on Google App Engine'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_2tLgOGpsEVE/Sk2uWL4EDoI/AAAAAAAAAIE/2aa98SQM-rA/s72-c/Popstat.png' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-3398836769101638395</id><published>2009-06-30T20:37:00.001-07:00</published><updated>2009-06-30T21:20:04.794-07:00</updated><title type='text'>The Semantic Web or The Generic at War with the Specific</title><content type='html'>It's easy to imagine an application that takes advantage of Linked Data by extracting just what it needs and dumping it into a local relational database. But that's clearly cheating. It's equally easy to imagine a completely generic low-level Linked Data browser, but there's something less than completely satisfying about that, too. The basic problem is that a rich user experience requires &lt;span style="font-style: italic;"&gt;specifics&lt;/span&gt;, while taking full advantage of the "anyone can say anything about anything" nature of the semantic web means that applications must be able to handle almost totally &lt;span style="font-style: italic;"&gt;generic&lt;/span&gt; data[1]. At least that was the theme of my presentation to the &lt;a href="http://ixda-dfw.ning.com/"&gt;Dallas chapter&lt;/a&gt; of the &lt;a href="http://www.ixda.org/"&gt;IxDA&lt;/a&gt; earlier tonight...&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://docs.google.com/EmbedSlideshow?id=ah7sbx3c6vpn_91ffnpwhdt" frameborder="0" height="342" width="410"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;I'm especially proud of the way I failed to force people to sit through a detailed explanation of graph structures, subject-predicate-object triples, the use of URIs as identifiers, or any of the other traditional cruft that obscures the capabilities of semantic web technology under a morass of unnecessary detail. (Imagine introducing relational databases by first forcing people to understand index paging mechanisms, or learning to cook via an explanation of organic chemistry). The audience seemed to appreciate it.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;[1] I struggled with this earlier over in &lt;a href="http://artofsystems.blogspot.com/2009/03/linked-data-end-user-applications.html"&gt;/2009/03/linked-data-end-user-applications.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[2] The translation from Keynote to Powerpoint to Google docs was not without problems. And you will definitely need to click through and get a larger version to read some of the screens. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-3398836769101638395?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/3398836769101638395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=3398836769101638395' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3398836769101638395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3398836769101638395'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2009/06/semantic-web-or-generic-at-war-with.html' title='The Semantic Web or The Generic at War with the Specific'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-343244204046516426</id><published>2009-06-28T22:03:00.001-07:00</published><updated>2009-06-28T22:51:48.931-07:00</updated><title type='text'>Facebook, Intrigue, Betrayal, Murder</title><content type='html'>A working understanding of authentication and authorization protocols is key to making use of modern web APIs. But protocols like the three-party delegated authc/authz[1] typical of modern web services can be difficult to follow. Role-playing protocol participants[2] is a fun way to make a very abstract process concrete, so I decided to write, produce and direct some geek theater at my recent &lt;a href="http://www.facebook.com/event.php?eid=93629945905"&gt;Facebook Developer Garage Dallas&lt;/a&gt; presentation. When you get to the script pages, imagine Alice played by about the least feminine guy you've ever seen and you'll have the right atmosphere (you might need to click through and view the presentation full-sized to read the text on some pages)&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://docs.google.com/EmbedSlideshow?id=ah7sbx3c6vpn_42dqc2v4cm" frameborder="0" height="342" width="410"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;I finished up with a quick review of some very traditional distributed programming topics. The questions "just how many test cases would you need to cover the possible states your program can be in?" and "what makes you think you can test these modules independently?" get people thinking along the right lines.&lt;br /&gt;&lt;br /&gt;Oh. In the end Alice runs off with Bob and all of Dave's money, leaving him on the hook with the Mafia for four guns and several bribes. Such is life in the high-stakes world of distributed programming.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;[1] Authc = authentication, or identifying a user, and authz = authorization, or determining what services a user is allowed to make use of once they're identified. Authentication says who you are, authorization says what you can do. In the presentation I talk specifically about delegated authc/authz, and ignore the more traditional single-process examples. People seem surprised to learn that OAuth, which is an authorization protocol, doesn't necessarily tell your application the userid of the user (although many implementations include the info along with the authorization tokens that are the primary purpose of the protocol) It doesn't help that the OAuth spec confuses the two.&lt;br /&gt;&lt;br /&gt;[2] So, admittedly, the examples aren't usually acted out in front of an audience, but the role-playing does have a long and honored history. The script actually simplifies the real protocol considerably, but it should give the correct flavor:&lt;a href="http://www.networkworld.com/news/2005/020705widernetaliceandbob.html"&gt; http://www.networkworld.com/news/2005/020705widernetaliceandbob.html&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-343244204046516426?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/343244204046516426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=343244204046516426' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/343244204046516426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/343244204046516426'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2009/06/facebook-intrigue-betrayal-murder.html' title='Facebook, Intrigue, Betrayal, Murder'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-3917743130786759458</id><published>2009-03-29T14:41:00.001-07:00</published><updated>2009-03-29T14:57:47.629-07:00</updated><title type='text'>Talis Connected Commons</title><content type='html'>&lt;blockquote&gt;&lt;/blockquote&gt;I've got a &lt;a href="http://www.talis.com/platform/"&gt;Talis Platform&lt;/a&gt; developer instance that I've been using to host a tiny subset of the information from the National Register of Historic Places database. I spent some time this weekend at &lt;a href="http://vocamp.org/wiki/VoCampAustin2009"&gt;VoCampAustin&lt;/a&gt; trying to get the rest ontologized, and I was wondering what I was going to do when it came time to host the entire data set. Luckily for me Talis just &lt;a href="http://blogs.talis.com/nodalities/2009/03/announcing-the-talis-connected-commons.php"&gt;announced&lt;/a&gt; the &lt;a href="http://blogs.talis.com/n2/cc"&gt;Talis Connected Commons&lt;/a&gt;:&lt;blockquote&gt;...if you own, or are creating, a public domain dataset then you can store that data in the Platform as RDF, for free. We’re setting an initial cap of 50 million triples on each dataset, but thats should be plenty of space in which to collect some really interesting data.&lt;/blockquote&gt;While Amazon will "host" your public data set, that just means they provide some free disk space you can use from within your EC2 instance: you've still got to pay for bandwidth. With the Connected Commons, Talis takes care of those pesky bandwidth charges. I'm sure there are "within reason" disclaimers in there somewhere, but for anyone considering RDF-izing and publishing public data sets, the Talis offer is definitely worth checking out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-3917743130786759458?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/3917743130786759458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=3917743130786759458' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3917743130786759458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3917743130786759458'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2009/03/talis-connected-commons.html' title='Talis Connected Commons'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-2730657313180857611</id><published>2009-03-25T12:27:00.000-07:00</published><updated>2009-03-25T15:29:21.389-07:00</updated><title type='text'>Facebook Redirects : The URL is not my son</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_2tLgOGpsEVE/ScqmWd6ErXI/AAAAAAAAAHs/EDaKeRTqtIg/s1600-h/bad_url_error.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 110px;" src="http://2.bp.blogspot.com/_2tLgOGpsEVE/ScqmWd6ErXI/AAAAAAAAAHs/EDaKeRTqtIg/s320/bad_url_error.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5317245214979829106" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#666666;"&gt;If you didn't get here via a very specific Google search[1] you probably want to stop reading now, otherwise...&lt;/span&gt; Those who eschew the standard Facebook PHP libraries are rewarded with a fuller, richer understanding of the intricacies of the API. I.e. they have to deal with obscure crud that normal people get to ignore. This particular cruddy bit recently managed to eat more time than it had any right to consume:&lt;blockquote&gt;The URL http://www.new.facebook.com/login.php?v=1.0&amp;amp;canvas&amp;amp;next=http%3A%2F%2Fapps.facebook.com&lt;br /&gt;%2Fhistoryradar%2F&amp;amp;api_key=643f14fgg7294eff is not valid.&lt;/blockquote&gt;That error message was in response to a redirect to force authorization if there was no session information on a canvas page request. I knew that the URL was in fact valid since not only was it &lt;a href="http://wiki.developers.facebook.com/index.php/Authorizing_Applications#How_Users_Can_Authorize_an_Application"&gt;straight out of the Facebook API documentation&lt;/a&gt;, I could cut and paste it into a browser and get the correct response.  At first I thought it was an encoding issue (the "next" value needs to be encoded since it's a URL inside a parameter) but it took digging into the standard PHP library to find the real problem:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;span class="Apple-style-span"  style="color:#999999;"&gt;public function redirect($url) {&lt;br /&gt;if ($this-&gt;in_fb_canvas()) {&lt;/span&gt;&lt;br /&gt;&lt;b&gt;echo '&amp;lt;fb:redirect url="' . $url . '"&gt;';&lt;/b&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#999999;"&gt;  } else if (preg_match('/^https?:\/\/([^\/]*\.)?facebook\.com(:\d+)?/i', $url)) {&lt;br /&gt;// make sure facebook.com url's load in the full frame so that we don't&lt;br /&gt;// get a frame within a frame.&lt;br /&gt;echo "&amp;lt;script type="\"text/javascript\""&gt;\ntop.location.href = \"$url\";\n";&lt;br /&gt;} else {&lt;br /&gt;header('Location: ' . $url);&lt;br /&gt;}&lt;br /&gt;exit;&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;code&gt;&lt;/code&gt;Right. You don't need a "real" &lt;a href="http://tools.ietf.org/html/rfc2616#section-10.3.3"&gt;HTTP 302&lt;/a&gt; redirect, you need to send a special snippet of FBML. It's easy to forget that Facebook is its own little &lt;a href="http://en.wikipedia.org/wiki/Bizarro_World"&gt;Bizarro World&lt;/a&gt; until you step just a little outside the approved way of doing things.&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;[1] No, not "the url is not my son." I mean one with "login.php" and "url" and "not valid" in it somewhere.&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/14059280-2730657313180857611?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/2730657313180857611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=2730657313180857611' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/2730657313180857611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/2730657313180857611'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2009/03/facebook-redirects-url-is-not-my-son.html' title='Facebook Redirects : The URL is not my son'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2tLgOGpsEVE/ScqmWd6ErXI/AAAAAAAAAHs/EDaKeRTqtIg/s72-c/bad_url_error.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-3402941241270346853</id><published>2009-03-11T14:13:00.000-07:00</published><updated>2009-03-11T19:30:59.111-07:00</updated><title type='text'>Linked Data: End-User Applications?</title><content type='html'>&lt;a href="http://linkeddata.org"&gt;Linked Data&lt;/a&gt; is a common-sense set of rules on how to use big-S Semantic Web technology to publish data on the Web. More or less[1]:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Publish your data as RDF[2].&lt;/li&gt;&lt;li&gt;Use HTTP URIs to name resources in your RDF.&lt;/li&gt;&lt;li&gt;Make the URIs dereferencable and contain more RDF.&lt;/li&gt;&lt;li&gt;Use a standard schema language (probably OWL[3]).&lt;/li&gt;&lt;/ul&gt;It's also probably safe to assume that the RDF used in Linked Data is "informal" and that there's a lot of it[4].&lt;br /&gt;&lt;br /&gt;Linked Data has been gaining momentum lately as sort of a down-to-earth version of the Semantic Web. The fact that it's relatively low-effort[5] means that there is quite of bit of data being published, despite the fact that very few applications outside the laboratory make use of it.&lt;br /&gt;&lt;br /&gt;Linked Data has obvious uses inside the enterprise. The BBC has done &lt;a href="http://blogs.talis.com/nodalities/2009/01/building-coherence-at-bbccouk.php"&gt;some great work&lt;/a&gt; using web development techniques based on a combination of hard-core enterprise integration and brand-spanking-new semantic web technology. Linked Data behind (and just in front of) the firewall is an exciting area, and I believe that is where it will find its first widespread commercial acceptance. But that's another blog post.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;This&lt;/span&gt; post is about is real end-user applications that take advantage of Linked Data. By "real" I mean something that sits on your desktop (or in your phone, or maybe even web browser) with a rich user interface tailored for a particular task. I don't mean generic browsers or infrastructure components.&lt;br /&gt;&lt;br /&gt;Since I had no clue what such an app would look like, I decided to take a generate-and-test approach: list the defining properties of Linked Data, come up with some consequences of those properties, then take the Cartesian product. Somewhere in there there must be a pony or two.&lt;br /&gt;&lt;br /&gt;After some trial and error, I picked the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Is the application meant to handle more than a fixed set of data? For example, a browser like &lt;a href="http://dbpedia.org/Marbles"&gt;Marbles&lt;/a&gt;[5] is meant to navigate across all possible Linked Data, while a other systems limit themselves to, say, social network graphs as expressed by FOAF, or even a fixed set of in-house data sources.&lt;/li&gt;&lt;li&gt;Is the linking visible to the user? For example, in a generic browser the user sees the links and chooses which ones to navigate across. The links are central. On the other hand, a social network browser might automatically choose how to spider a FOAF network, and present the user with a summarized view containing data from many sources.&lt;/li&gt;&lt;li&gt;Is reasoning important? That is, is the raw data presented to the user, or will new triples be generated (or filtered) using formal (or informal) reasoning?&lt;/li&gt;&lt;/ul&gt;For reasoning, it's pretty much yes or no:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;  Synthesizes new triples? { Yes, No }&lt;/li&gt;&lt;/ul&gt;The same goes for linking: either the program makes the underlying low-level links visible and primary, or it covers them up somehow:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Navigation? { User-visible Links, Invisible Links }&lt;/li&gt;&lt;/ul&gt;The extensibility question turns out to be a little more complicated than a simple Yes/No. While there are clearly some programs that are totally generic and others that are totally fixed, there are interesting cases in the middle. I added another possibility: applications that try to do something with data they don't totally understand (maybe by understanding ontology fragments like parts of FOAF or geodata)&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Extensible? { Yes, Somewhat, No }&lt;/li&gt;&lt;/ul&gt;There's an interesting tradeoff, where the more specific the knowledge an application has about the data it works with, the better crafted the user experience can be.&lt;br /&gt;&lt;br /&gt;I am not happy with the list above. It leaves out some important characteristics, conflates others and is generally unsatisfactory. I originally had closer to a dozen characteristics, but the resulting combinatorial explosion made things awkward. But the list is just for inspiration, and so I'm willing to live with it.&lt;br /&gt;&lt;br /&gt;And the &lt;a href="http://spreadsheets.google.com/ccc?key=pGC--TTsQhL0c6FpHHqrhCA"&gt;results&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://spreadsheets.google.com/pub?key=pGC--TTsQhL0c6FpHHqrhCA&amp;amp;output=html&amp;amp;widget=true" frameborder="0" height="355" width="400"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Linked Data applications like browsers and analysis tools show up with their own categories. That's not surprising since that's how the categories were chosen.&lt;br /&gt;&lt;br /&gt;I especially like the look of the "hybrid" applications: the ones that combine hardcoded knowledge of the data with the ability to process new data discovered through following links. If there's a pony to be found, I suspect it's in one of those rows.&lt;br /&gt;&lt;br /&gt;I'm currently working on an iPhone application called "National Register Radar" that uses geolocation and a Linked Data version of the U.S. National Register of Historic Places database to help users maintain "situational awareness" of the history of the places around them. Right now it would be a first-row application: it has hardcoded knowledge of specific kinds of Linked Data, it hides the low-level linking and provides a summary view, and it presents the data as it finds it, with no logical reasoning.&lt;br /&gt;&lt;br /&gt;Although it's a relatively immature use of Linked Data, hardcoding makes developing the initial version of the application much easier. It means that few external libraries are required (an important consideration on a mobile device wiht an non-x86 processor and no Java). It also means that traditional application development techniques apply: I don't need to mess around with an on-phone triple store and SPARQL queries.&lt;br /&gt;&lt;br /&gt;I think, though, that I'd like to turn it into a row 6 "enhanced special-purpose browser" that's not restricted to just a few hardcoded data sets. It's unclear how all the technology would fit together (how can the application make use of DBpedia data without hardcoding? Can Fresnel fit on a phone? Can Fresnel be adapted for voice output?) but it's worth a try (and probably a follow-up blog post).&lt;br /&gt;&lt;br /&gt;Ultimately, I suspect Linked Data will be more at home deep inside enterprise infrastructure than at the end-user level, but I'm going to give National Register Radar another couple iteration and see where it ends up.&lt;br /&gt;&lt;br /&gt;I'll be demoing an alpha version at &lt;a href="http://barcamp.org/BarCampAustin4"&gt;BarCampAustin4&lt;/a&gt;, if you're interested in Linked Data (or &lt;a href="http://artofsystems.blogspot.com/2009/02/speech-synthesis-on-iphone-with-flite.html"&gt;speech synthesis&lt;/a&gt;) on the iPhone and are going to be in Austin, ping me and maybe we can get a BOF together...&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;[1] The "official" list is here: &lt;a href="http://www.w3.org/DesignIssues/LinkedData.html"&gt;http://www.w3.org/DesignIssues/LinkedData.html,&lt;/a&gt; or even better, here: &lt;a href="http://www4.wiwiss.fu-berlin.de/bizer/pub/LinkedDataTutorial/"&gt;http://www4.wiwiss.fu-berlin.de/bizer/pub/LinkedDataTutorial/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[2] RDF is the data model for the semantic web. Think of it as an ultra-hyper-normalized database where everything has been reduced to three columns: &amp;lt;subject&gt; &amp;lt;predicate&gt; &amp;lt;object&gt;. Database keys are in the form or URIs. Don't let incredibly over-elaborate explanations fool you: it really is that simple.&lt;br /&gt;&lt;br /&gt;[3] OWL is a popular schema language for RDF. Since reducing everything to triples removes pretty much all the type data, you need a schema language to add it back in. It's a little like a much more powerful version of XML Schema that lets you bake in the kind of semantics that would normally go into the comments. The documentation for it is uniformly awful.&lt;br /&gt;&lt;br /&gt;[4] There's this really great article on just this topic that I can't seem to find a reference to right now. I'll edit it in later. Hey, it's a blog post, not a journal article, whadaya expect?&lt;br /&gt;&lt;br /&gt;[5] It's relatively low effort because some pioneers have put in tons of effort developing some slick tools to help out.&lt;br /&gt;&lt;br /&gt;[6] If it's up and running. Few of the commonly referenced Linked Data browsers worked reliably for me.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-3402941241270346853?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/3402941241270346853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=3402941241270346853' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3402941241270346853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3402941241270346853'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2009/03/linked-data-end-user-applications.html' title='Linked Data: End-User Applications?'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-1077562050528253885</id><published>2009-02-22T08:30:00.000-08:00</published><updated>2009-02-22T13:13:02.756-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='speech'/><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>Speech Synthesis on the iPhone with Flite</title><content type='html'>&lt;object height="310" width="411"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3322716&amp;amp;server=vimeo.com&amp;amp;show_title=0&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=ff9933&amp;amp;fullscreen=1"&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=3322716&amp;amp;server=vimeo.com&amp;amp;show_title=0&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=ff9933&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="310" width="411"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;I was planning to use the Cocoa &lt;a href="http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/ApplicationKit/Classes/NSSpeechSynthesizer_Class/Reference/Reference.html"&gt;NSSpeechSynthesizer&lt;/a&gt; class to do &lt;a href="http://en.wikipedia.org/wiki/Speech_synthesis"&gt;text-to-speech&lt;/a&gt; (TTS) in a &lt;a href="http://linkeddata.org/"&gt;Linked Data&lt;/a&gt; based iPhone application, but Apple evidently isn't interested in my pitiful wants: the very slick &lt;a href="http://developer.apple.com/documentation/userexperience/SpeechTechnologies-date.html#//apple_ref/doc/uid/TP30000440-TP30000437-TP30000576"&gt;OS X speech synthesis capabilities&lt;/a&gt; don't appear to be supported in iPhone OS. Not to be deterred, I managed to get the &lt;a href="http://www.speech.cs.cmu.edu/flite/"&gt;Flite&lt;/a&gt; speech synthesizer up and running on the phone.  It had already been ported (multiple times) to the ARM architecture[1], so all I had to do was import the source files into Xcode.&lt;br /&gt;&lt;br /&gt;Well, pretty much. Other than the tedium of importing all the files, there were a couple of things that needed figuring out:&lt;br /&gt;&lt;br /&gt;I added the User-Defined Setting CST_AUDIO_NONE to turn off Flite's ability to play audio directly[2]. Alternatively, you could probably add a new implementation of the sound playing functions that used the iPhone audio framework, but that's too much work for a quick hack.&lt;br /&gt;&lt;br /&gt;Since I just wanted a simple proof-of-concept I called the main routine[3] of the command-line "flite" utility directly from my application code:&lt;br /&gt;&lt;pre&gt;int play_message( char* msg_file, char* msg ) {&lt;br /&gt; char* argv[5];&lt;br /&gt; argv[0] = "flite";&lt;br /&gt; argv[1] = "-t";&lt;br /&gt; argv[2] = msg;&lt;br /&gt; argv[3] = "-o";&lt;br /&gt; argv[4] = msg_file;&lt;br /&gt; return flite_main( 5, argv );&lt;br /&gt;}&lt;/pre&gt;I was torn over whether to set up an in-memory buffer for the sound data or write it to a file then play the file back immediately. Since flite_main() was already set up to write to a file I took the easy way out. The only mildly tricky thing was finding someplace where I could write the temporary file. Some cut and paste from the SpeakHere[4] sample application, and:&lt;br /&gt;&lt;pre&gt;NSArray *filePaths = NSSearchPathForDirectoriesInDomains (&lt;br /&gt; NSDocumentDirectory,&lt;br /&gt; NSUserDomainMask,&lt;br /&gt; YES);&lt;br /&gt;NSString *recordingDirectory = [filePaths objectAtIndex: 0];    &lt;br /&gt;NSString *tempFilePath = [NSString&lt;br /&gt; stringWithFormat: @"%@/%s",&lt;br /&gt; recordingDirectory, "recording.wav"];&lt;br /&gt;char *path = [ tempFilePath UTF8String]; &lt;br /&gt;play_message( path,&lt;br /&gt; "mister watson, come here, i need you." );&lt;br /&gt;&lt;/pre&gt;That got the sound file written out. To play it back I pointed AVAudioPlayer[5] at the newly generated sound file:&lt;br /&gt;&lt;pre&gt;NSError *err;&lt;br /&gt;AVAudioPlayer* audioPlayer =  [[AVAudioPlayer alloc]&lt;br /&gt; initWithContentsOfURL:[NSURL fileURLWithPath:tempFilePath]&lt;br /&gt; error:&amp;amp;err];&lt;br /&gt;[audioPlayer setDelegate:self];&lt;br /&gt;[audioPlayer prepareToPlay];&lt;br /&gt;BOOL plays = [audioPlayer play];&lt;/pre&gt;I couldn't get AVAudioPlayer working without manually copying over the AVFoundation framework from /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.1.sdk/System/Library/Frameworks/AVFoundation.framework. I'm not sure that's the right thing to do, but it worked, and my iPhone now says "mister watson, come here, i need you" with an old-school Cylon accent.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;[1] And to at least one framework useful on jailbroken phones. &lt;a href="http://www.ipodtouchfans.com/forums/showthread.php?t=70996"&gt;This&lt;/a&gt; thread seemed useful if you want to go that direction. I suspect other people must have gotten Flite working in Xcode as above, but I wasn't seeing anything on the first dozen pages of search results.&lt;br /&gt;[2] CST_AUDIO_NONE is a standard Flite build flag. In Xcode, defining CST_AUDIO_NONE as a User-Defined Setting for a Target adds -DCST_AUDIO_NONE to the command line of the compiler. I prefer a good textual Makefile to the annoying graphical interface, but you take the bad with the good.&lt;br /&gt;[3] After re-naming it to "flite_main()" to avoid a clash with the main routine of the iPhone application. There were actually a bunch of little fiddly bits along those lines, but I didn't document them as I went along and you'll have to figure them out on your own.&lt;br /&gt;[4] SpeakHere is at &lt;a href="http://developer.apple.com/iphone/library/samplecode/SpeakHere/index.html"&gt;http://developer.apple.com/iphone/library/samplecode/SpeakHere/index.html&lt;/a&gt;, but you probably need to be logged in to the iPhone Dev Center to see it.&lt;br /&gt;[5] Again with heavy cut and paste from the SpeakHere sample code.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-1077562050528253885?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/1077562050528253885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=1077562050528253885' title='31 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/1077562050528253885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/1077562050528253885'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2009/02/speech-synthesis-on-iphone-with-flite.html' title='Speech Synthesis on the iPhone with Flite'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>31</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-1111966382616887199</id><published>2009-02-03T17:29:00.000-08:00</published><updated>2009-02-04T08:19:15.917-08:00</updated><title type='text'>OpenSocial: Behind the Corporate Firewall</title><content type='html'>&lt;a href="http://code.google.com/apis/opensocial/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;OpenSocial&lt;/span&gt;&lt;/a&gt; is an &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;API&lt;/span&gt; for consumer social network sites like &lt;a href="http://www.linkedin.com/static?key=developers_widgets"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;LinkedIn&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://code.google.com/apis/orkut/docs/orkutdevguide/orkutdevguide-0.8.html"&gt;Orkut&lt;/a&gt; and &lt;a href="http://www.hi5networks.com/developer/"&gt;Hi5&lt;/a&gt;, but its greatest value may come from use behind the corporate firewall.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;OpenSocial&lt;/span&gt; is really two separate things: &lt;a href="http://code.google.com/apis/opensocial/docs/0.8/reference/gadgets/#core"&gt;a portal framework&lt;/a&gt; that describes how embedded content can interact with a page, and a glued-on &lt;a href="http://code.google.com/apis/opensocial/docs/0.8/reference/#opensocial"&gt;social network &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;API&lt;/span&gt;&lt;/a&gt; that provides a way to access things like profile and friend data.&lt;br /&gt;&lt;br /&gt;The portal framework is just &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Google's&lt;/span&gt; &lt;a href="http://en.wikipedia.org/wiki/IGoogle"&gt;iGoogle framework&lt;/a&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;rebranded&lt;/span&gt;, and the social-network &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;API&lt;/span&gt; is a least-common denominator &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;mashup&lt;/span&gt; of the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;APIs&lt;/span&gt; from a selection of big commercial social networks combined a dash of influence from the &lt;a href="http://developers.facebook.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;Facebook&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;API&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Both the portal framework and the social &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;API&lt;/span&gt; are &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;ok&lt;/span&gt;, but neither one is really best-of-breed. There are many widely deployed, battle tested portal &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;APIs&lt;/span&gt; available (&lt;a href="http://en.wikipedia.org/wiki/JSR_168"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;JSR&lt;/span&gt; 168&lt;/a&gt; and &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=05E0DD12-8394-402B-8936-A07FE8AFAFFD&amp;amp;displaylang=en"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;Sharepoint&lt;/span&gt;&lt;/a&gt; spring to mind), and on the social side &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;Facebook's&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;API&lt;/span&gt; is (at least for the moment) superior.&lt;br /&gt;&lt;br /&gt;But in this case, I'd argue &lt;a href="http://en.wikipedia.org/wiki/Worse_is_Better"&gt;worse is better&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;OpenSocial&lt;/span&gt; gadget &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;API&lt;/span&gt; was designed to be used by web developers rather than corporate IT drones. Authoring a simple &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;OpenSocial&lt;/span&gt; gadget is no harder than writing a web page, and the technology is nearly identical. It is much faster to get started with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;OpenSocial&lt;/span&gt; than to learn to program for a traditional corporate portal[1].&lt;br /&gt;&lt;br /&gt;The social &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;API&lt;/span&gt; is important, too. &lt;a href="http://en.wikipedia.org/wiki/Enterprise_resource_planning"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;ERP&lt;/span&gt;&lt;/a&gt; systems (to optimize the use of your company's stuff) and &lt;a href="http://en.wikipedia.org/wiki/Customer_relationship_management"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;CRM&lt;/span&gt;&lt;/a&gt; systems (to optimize the use of your company's customers) are important, but most companies claim their people are their most important resource[2]. Anybody who's spent time on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;Facebook&lt;/span&gt; or Twitter probably buys that there are advantages to including social network features in enterprise applications[3]. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;OpenSocial&lt;/span&gt;, as a well-documented, free-to-implement standard is an obvious choice.&lt;br /&gt;&lt;br /&gt;I've been spouting some of this stuff whenever I got the chance, so it was encouraging to see &lt;a href="http://www.atlassian.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;Atlassian&lt;/span&gt;&lt;/a&gt; (darling of the developer tools world) &lt;a href="http://blogs.atlassian.com/news/2009/01/atlascamp_keyno.html"&gt;say something similar&lt;/a&gt; at their annual conference[4].&lt;br /&gt;&lt;br /&gt;I have a selfish reason for wanting &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;OpenSocial&lt;/span&gt; behind the corporate firewall: I'd like &lt;a href="http://praxisbridge.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;Praxis&lt;/span&gt; Bridge&lt;/a&gt; to have a way to keep in touch with students after the course is over, and I'd like the students to have a way to keep in touch with each other. A &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;silo'ed&lt;/span&gt; social network for a limited-time event is useful, but a way to hook into the user's everyday working social network is much more valuable. And since the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;OpenSocial&lt;/span&gt; architecture allows container administrators control over the information leaked to external gadgets, I think it would have a shot at getting past (justifiably) paranoid corporate gatekeepers. But that's a whole '&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;nother&lt;/span&gt; blog post.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1] Or, well, it &lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;font-size:85%;" &gt;seems&lt;/span&gt;&lt;span style="font-size:85%;"&gt; that way, which is the same. Isn't the whole "worse is better" thing annoying?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;[2] On a recruiting brochure you can probably assume a line like "people are our most important asset" is just the standard BS, but when a company's &lt;a href="http://en.wikipedia.org/wiki/10-Q"&gt;10-Q&lt;/a&gt; says it you can assume they're serious.&lt;br /&gt;&lt;br /&gt;[3] &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;ERP&lt;/span&gt; systems have human &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_35"&gt;resources&lt;/span&gt; modules, but that's not quite the same thing as being "social network enabled". On the other hand, the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;ERP&lt;/span&gt; vendors are going to start buying up "behind the firewall social network" vendors just as soon as the downturn ends, and at that point &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;OpenSocial&lt;/span&gt; becomes just another standard &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;ERP&lt;/span&gt; module.&lt;br /&gt;&lt;br /&gt;[4] &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;OpenSocial&lt;/span&gt; comes in in the keynote at about 9:45. There's a whole session about their new &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;plugin&lt;/span&gt; architecture at &lt;a href="http://blogs.atlassian.com/news/2009/01/atlascamp_video_1.html"&gt;http://blogs.atlassian.com/news/2009/01/atlascamp_video_1.html&lt;/a&gt;. Thanks to &lt;a href="http://dewpoint.snagdata.com/"&gt;Tracy Snell&lt;/a&gt; for the pointer.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-1111966382616887199?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/1111966382616887199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=1111966382616887199' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/1111966382616887199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/1111966382616887199'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2009/02/opensocial-behind-corporate-firewall.html' title='OpenSocial: Behind the Corporate Firewall'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-8872936348215269980</id><published>2009-01-23T20:55:00.000-08:00</published><updated>2009-01-23T21:06:37.732-08:00</updated><title type='text'>CoHabitat in 90 Seconds</title><content type='html'>Quick video from today's &lt;a href="http://workatjelly.com"&gt;Jelly&lt;/a&gt; at &lt;a href="http://cohabitat.us/"&gt;CoHabitat&lt;/a&gt;. I'm posting it as much to play around with Vimeo embedding as anything else, but it definitely gives the flavor of the place:&lt;br /&gt;&lt;br /&gt;&lt;object width="411" height="232"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=2936986&amp;amp;server=vimeo.com&amp;amp;show_title=0&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=ff9933&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=2936986&amp;amp;server=vimeo.com&amp;amp;show_title=0&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=ff9933&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="411" height="232"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-8872936348215269980?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/8872936348215269980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=8872936348215269980' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/8872936348215269980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/8872936348215269980'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2009/01/cohabitat-in-90-seconds.html' title='CoHabitat in 90 Seconds'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-1953006403975821167</id><published>2009-01-17T15:05:00.000-08:00</published><updated>2009-01-17T15:15:36.082-08:00</updated><title type='text'>OSDGD: Introduction to OpenSocial Presentation</title><content type='html'>OpenSocial Dev Garage Dallas is over, the mess has been cleaned up, and pretty much everyone has gone home. The pizza Traxo sponsored was delicious, the coffee Praxis Bridge provided helped get people going, and the CoHabitat venue rocked. There were a couple new faces, and I'm pretty sure we've added to the group of regulars who show up at this kind of stuff in Dallas.&lt;br /&gt;&lt;br /&gt;For reference, here's a copy of the presentation slides from the morning session:&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://docs.google.com/EmbedSlideshow?docid=ah7sbx3c6vpn_62gwg585n7" frameborder="0" height="342" width="410"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;The idea was to get people up and running with an OpenSocial application as quickly as possible, so I skipped over the normally obligatory history, motivation and background in favor of getting to the good stuff right away. I think it worked out well, although I suspect that for a couple of people in the audience the information was too basic. It's always hard to decide on a target level, and I'm happy enough overall. I think getting a more detailed agenda with a presentation outline posted in advance would have helped people judge better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-1953006403975821167?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/1953006403975821167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=1953006403975821167' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/1953006403975821167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/1953006403975821167'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2009/01/osdgd-introduction-to-opensocial.html' title='OSDGD: Introduction to OpenSocial Presentation'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-5488466896026672883</id><published>2008-12-26T12:02:00.000-08:00</published><updated>2009-01-06T13:35:04.512-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='barcamp'/><category scheme='http://www.blogger.com/atom/ns#' term='dallas'/><title type='text'>OpenSocial Dev Garage Dallas</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_2tLgOGpsEVE/SVU6TIjNhbI/AAAAAAAAAGE/9am6DQHvn_g/s1600-h/opensocial.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 225px; height: 225px;" src="http://1.bp.blogspot.com/_2tLgOGpsEVE/SVU6TIjNhbI/AAAAAAAAAGE/9am6DQHvn_g/s320/opensocial.jpg" alt="" id="BLOGGER_PHOTO_ID_5284193838176241074" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;=== UPDATE ===&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We've got a &lt;a href="http://wiki.opensocial.org/index.php?title=OpenSocial_Dev_Garage_Dallas"&gt;page&lt;/a&gt; on the opensocial.org wiki. This page is the canonical reference for all things OpenSocial Dev Garage Dallas (except the signups, which are still on &lt;a href="http://upcoming.yahoo.com/event/1460416/"&gt;Upcoming&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;If you're developing Facebook apps, it's inevitable that you'll eventually also be developing for the "everybody but Facebook" &lt;a href="http://code.google.com/apis/opensocial/"&gt;OpenSocial API&lt;/a&gt;. Over the past couple of months, the API has stabilized substantially, and it's probably about time to check it out.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://upcoming.yahoo.com/event/1460416/"&gt;OpenSocial Dev Garage Dallas&lt;/a&gt; is your chance to write your first "Hello Friends" application in a supportive group environment. If you're more into writing containers than the gadgets that populate them, we're also planning to have a breakout session on implementing the API so your application can be an OpenSocial gadget host.&lt;br /&gt;&lt;br /&gt;The event is planned for Sat, January 17th at the amazing new Cohabitat coworking space in Dallas's historic State-Thomas neighborhood. In the interest of keeping things focused we're capping attendance at 25 people:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://upcoming.yahoo.com/event/1460416/"&gt;http://upcoming.yahoo.com/event/1460416/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If there's enough demand, we may be able to open up some more space, but I'd recommend signing up now if you want to guarantee a spot!&lt;br /&gt;&lt;br /&gt;See you there!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-5488466896026672883?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/5488466896026672883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=5488466896026672883' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5488466896026672883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5488466896026672883'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2008/12/opensocial-dev-garage-dallas.html' title='OpenSocial Dev Garage Dallas'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_2tLgOGpsEVE/SVU6TIjNhbI/AAAAAAAAAGE/9am6DQHvn_g/s72-c/opensocial.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-5343022425359348234</id><published>2008-12-20T18:53:00.001-08:00</published><updated>2008-12-20T18:59:22.567-08:00</updated><title type='text'>Google Friend Connect</title><content type='html'>I'm experimenting with &lt;a href="http://www.google.com/friendconnect/"&gt;Google Friend Connect&lt;/a&gt; as you might notice from the new gadget over on the right. Feel free to join up, but as it's just an experiment there's a good chance I'll be removing the feature in a bit. I'm thinking that with the addition of a couple of &lt;a href="http://code.google.com/apis/opensocial/"&gt;OpenSocia&lt;/a&gt;l event management gadgets a Blogger blog might be a good, non-Facebook alternative for organizing an event, but we'll see.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-5343022425359348234?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/5343022425359348234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=5343022425359348234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5343022425359348234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5343022425359348234'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2008/12/google-friend-connect.html' title='Google Friend Connect'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-3149843627596920438</id><published>2008-11-23T12:29:00.001-08:00</published><updated>2008-11-23T13:02:03.147-08:00</updated><title type='text'>OAuth: Not a Silver Bullet</title><content type='html'>&lt;a href="http://oauth.net/"&gt;OAuth&lt;/a&gt;[1] provides a standard protocol for delegated authentication. That is, it lets a site like &lt;a href="http://twitterank.com/"&gt;Twitterank&lt;/a&gt;[2] get controlled access to your twitter account without your having to give Twitterank your username and password. Instead, there's a multi-step authentication process involving a "token" that grants temporary, limited access to a third party service.&lt;br /&gt;&lt;br /&gt;This sort of authentication system has been in use for many years in commercial and academic systems. OAuth just brings a cut-down version to the web 2.0 world.&lt;br /&gt;&lt;br /&gt;You may ask yourself: If it's so great and it's been around forever, why doesn't everybody use it? The short answer is that it's a major pain in the rear-end both for developers and users, and most of the time it's just not worth the bother.&lt;br /&gt;&lt;br /&gt;As a developer I actually like OAuth. I think it's wonderful for the times when the added complexity of delegated authentication makes sense. But the complexity is not without cost. For trivial, single-purpose services it is, at best, a very small win, and possibly even a net loss.&lt;br /&gt;&lt;br /&gt;Ignoring the implementation difficulties for now, let's take a quick look at the user experience via Twitter and the (hypothetical) Twitterevil service. Twitterevil operates by promising to calculate an amusing ranking number for your tweet history. It does in fact do that, but it also keeps your username and password and uses them to posts spam tweets. We'll look at scenarios both with and without OAuth.&lt;br /&gt;&lt;br /&gt;The first scenario, sans-OAuth, goes someething like this:&lt;br /&gt;&lt;ol&gt;&lt;li&gt; I surf to twitterevil.com and enter my Twitter username and password.&lt;/li&gt;&lt;li&gt; Twitterevil logs into Twitter as me, grabs some data, and uses it to calculate some statistics, which it tweets under my name. It also (contrary to what it says on the Twitterevil home page) keeps my username and password.&lt;/li&gt;&lt;li&gt;Later, Twitterevil starts using my Twitter account to post spam links.&lt;/li&gt;&lt;li&gt;I notice the spam links and use Twitter's password recovery feature to change my password.&lt;/li&gt;&lt;li&gt;Twitterevil can no longer use my account.&lt;/li&gt;&lt;/ol&gt;The OAuth scenario goes like this:&lt;br /&gt;&lt;ol&gt;&lt;li&gt; I surf to Twitterevil. Twitterevil has a login button button that redirects me to a special Twitter OAuth login page.&lt;/li&gt;&lt;li&gt;I enter my username and password on the Twitter OAuth login page, and hit the "OK, allow Twitterevil access" button.&lt;/li&gt;&lt;li&gt;I get redirected back to Twitterevil, which calculates my score, tweets it, and then starts posting spam links.&lt;/li&gt;&lt;li&gt;I notice the spam links, log into my twitter account, go to my OAuth delegated permissions page, find the twitterevil.com entry, and remove Twitterevil's permissions.&lt;/li&gt;&lt;li&gt;Twitterevil can no longer use my account.&lt;/li&gt;&lt;/ol&gt;So, conservatively, the OAuth scenario has more steps and involves the new concept of "delegated authentication". This concept existed implicitly before but is now (very) visible to the user in the form of a multi-step login process and a new "OAuth delegated credentials" page. All to get the same end result.&lt;br /&gt;&lt;br /&gt;Actually, as some of you may have noticed, I've lied by omission.  There's an alternate OAuth scenario that I'm leaving out. It's a change to step 2, and it goes like this:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;...&lt;/li&gt;&lt;li&gt; I enter my username and password on the Twitter OAuth login page, and then read through a paragraph of explanatory text about just what Twitterevil is asking permission to do: "twitterevil.com is asking permission to [Read through your posting history] and [Post tweets on your behalf]. Do you want to give twitterevil.com permission to do this (a) Once (b) For the next little while, or (c) Permanently. Note that you can always go back and revoke permission later."&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;No, I'm not kidding.&lt;br /&gt;&lt;br /&gt;Anybody who's looked at the problem of user security knows that nobody, even security experts, ever reads that crap. They just hit the default button automatically. So 2b is "cover your behind" security theater, it provides no real security in the vast majority of cases.&lt;br /&gt;&lt;br /&gt;Flickr, which uses a &lt;a href="http://www.flickr.com/services/api/auth.spec.html"&gt;pre-oauth delegated authentication scheme&lt;/a&gt;, does it like 2a. They don't expose out the permissions set during authentication, instead allowing the user to go in later and see just what they approved (if users ever cared to look, which they don't). I suspect this is the result of some user experience testing. It's certainly easier.&lt;br /&gt;&lt;br /&gt;A service like Twitter has a very limited number of possible actions, so the model presented in 2b is unusually simple. A more complex application could have dozens of possible permissions. Developers who care about the experience will probably layer a "user level" set of permissions on top of the real underlying implementation permissions, but most won't. And that's just nasty.&lt;br /&gt;&lt;br /&gt;So, depending on how exactly the service implements the OAuth user experience, the number of user actions is either slightly or significantly more complicated for the OAuth scenario. The conceptual complexity (how many different ideas the user must keep in mind) is a clear loss for OAuth, especially if the service exposes out it's internal security architecture in the OAuth security screen.&lt;br /&gt;&lt;br /&gt;But.&lt;br /&gt;&lt;br /&gt;I was just asked by a service I won't name to hand over my Google username and password so that it could access my Google Reader data[3]. And I said "no", because my Google account is not trivial or simple and there are real consequences to handing it over to somebody I don't fully trust.&lt;br /&gt;&lt;br /&gt;OAuth is a sledgehammer, and it does not make sense to use a sledgehammer when you can get away with something less. Developers should use their very limited time and money to go simplify their design, not add in significant new complexity where it's not needed.[4]&lt;br /&gt;&lt;br /&gt;But if, after serious reflection, you decided you do need a sledgehammer, OAuth appears to be shaping up into a good choice.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1] &lt;a href="http://oauth.net/"&gt;http://oauth.net&lt;/a&gt; and also &lt;a href="http://en.wikipedia.org/wiki/OAuth"&gt;http://en.wikipedia.org/wiki/OAuth&lt;/a&gt; (please help with the lame Wikipedia entry) I've always assumed it stood for Open Authentication, but I don't see that written down anywhere.&lt;br /&gt;&lt;br /&gt;[2] Twitterank is a fun example because &lt;a href="http://www.brianoberkirch.com/"&gt;Brian Oberkirch&lt;/a&gt; tweeted, as a joke with a point, that he set it up as an &lt;a href="http://twitter.com/brianoberkirch/status/1002723656"&gt;evil password collector&lt;/a&gt;. But it got picked up by and &lt;a href="http://blogs.zdnet.com/collaboration/?p=163"&gt;republished as a non-joke&lt;/a&gt; by ZDNet. I love ZDNet's lame attempt to substitute boilerplate "rumor has it" for fact checking.&lt;br /&gt;&lt;br /&gt;[3] Google is actually moving towards OAuth for all its services, but Reader doesn't have an "official" API yet, and OAuth doesn't work. Developers must use a sort of backdoor ClientLogin hack.&lt;br /&gt;&lt;br /&gt;[4] Note to complainers: There is some accidental complexity in OAuth that can be overcome via better libraries and documentation, but the base problem is the inherent complexity of exposing a more complex authentication scheme, and that exposure is at the heart of the claimed benefit of OAuth.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-3149843627596920438?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/3149843627596920438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=3149843627596920438' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3149843627596920438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3149843627596920438'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2008/11/oauth-not-silver-bullet.html' title='OAuth: Not a Silver Bullet'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-9143587473407349070</id><published>2008-10-15T16:04:00.001-07:00</published><updated>2008-10-15T23:27:54.075-07:00</updated><title type='text'>I built this great product, now what?</title><content type='html'>I've found that people who write great software generally do it because they can't help it. It's more fun than a barrel of monkeys and they'd do it even if they weren't getting paid. Nobody likes the final grinding detail steps of productization, but with a good team the development phase is generally a hoot.[1]&lt;br /&gt;&lt;br /&gt;But "build it and they will come" isn't really a business plan. At some point most companies will need to talk convincingly about their great idea, either to get funding or make a sale. Do you pitch an investor with a demo, or a slide deck? How do you talk to the press? Is something like Demo or TechCrunch 50 worthwhile?&lt;br /&gt;&lt;br /&gt;If you've been haunted by questions like the above, then show up this Saturday October 18th for a few hours and find out all the answers:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.texasstartupblog.com/2008/10/15/pitch-camp-dallas-this-saturday-10am-4pm/"&gt;http://www.texasstartupblog.com/2008/10/15/pitch-camp-dallas-this-saturday-10am-4pm/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1] In the same way a dog sled expedition to the South Pole is a hoot.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-9143587473407349070?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/9143587473407349070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=9143587473407349070' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/9143587473407349070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/9143587473407349070'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2008/10/i-build-this-great-product-now-what.html' title='I built this great product, now what?'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-4466511402309735677</id><published>2008-08-10T11:13:00.001-07:00</published><updated>2008-08-10T11:24:38.483-07:00</updated><title type='text'>{s,S}emantic Web Workshop</title><content type='html'>Big-S, little-s, whichever direction you're coming from, parts of the semantic web are here today. It's not the "Grand Vision"[1] of Tim Berners-Lee, but don't let that stop you from taking advantage of some very cool technology that can enhance your site or enable your application right away. The slide deck below is from my presentation at &lt;a href="http://barcamp.org/BarCampHouston3"&gt;BarCampHouston3&lt;/a&gt;. The idea was a quick intro then a workshop where attendees had the chance to actually experiment with the technology hands-on right then and there. No projector and no network access in the presentation room almost scuttled that, but we eventually borrowed the necessary infrastructure (thanks &lt;a href="http://www.gallucci.net/"&gt;Giovanni&lt;/a&gt;, &lt;a href="http://flickr.com/photos/michaelcummings/"&gt;Michael&lt;/a&gt; and &lt;a href="http://stor.me/"&gt;Stormy&lt;/a&gt;!) and got to the presentation part, at least:&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://docs.google.com/EmbedSlideshow?docid=ah7sbx3c6vpn_26fswqwhcr" frameborder="0" height="342" width="410"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1] http://www.w3.org/DesignIssues/Semantic.html In post-singularity world, the Semantic Web understands you.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-4466511402309735677?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/4466511402309735677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=4466511402309735677' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/4466511402309735677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/4466511402309735677'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2008/08/ssemantic-web-workshop.html' title='{s,S}emantic Web Workshop'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-3835130112442559635</id><published>2008-07-20T10:16:00.000-07:00</published><updated>2008-07-20T10:36:27.570-07:00</updated><title type='text'>MySQL, PostgreSQL and BLOB Streaming</title><content type='html'>You can store surprisingly large binary objects in your relational database[1], but even if your chosen system is perfectly &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;OK&lt;/span&gt; with a 100 megabyte BLOB, you're going to have to handle all that data on its way to and from storage.&lt;br /&gt;&lt;br /&gt;With a 2 MB image file you can get away with reading the data fully into memory on each access. With a 100 MB file it's a little trickier. Not only is that a pretty big byte array, you may end up with multiple copies of it (your application's copy, the driver's copy, the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;database's&lt;/span&gt; copy, etc)&lt;br /&gt;&lt;br /&gt;The obvious answer is to stream the data. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;JDBC's&lt;/span&gt; BLOB interface has the convenient-looking "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;getBinaryStream&lt;/span&gt;" and "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;setBinaryStream&lt;/span&gt;" calls[2]. But if you actually try to use the calls you may get a nasty (and database-specific) surprise.&lt;br /&gt;&lt;br /&gt;MySQL, for instance, implements &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;getBinaryStream&lt;/span&gt; in their &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;JDBC&lt;/span&gt; driver as[3]:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;return new &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;ByteArrayInputStream&lt;/span&gt;(&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;getBinaryData&lt;/span&gt;());&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;You see the problem. There's no point in streaming the data when the driver is just going to read it all into memory anyway. There are some workarounds[4], but ultimately there are server-side limitations that you can only be avoided via a brand-new database engine[5].&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;PostgreSQL&lt;/span&gt; has a reputation for being more mature than MySQL, and that's the case with handling large binary objects. Of course, another part of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;PostgresSQL's&lt;/span&gt; reputation is a Perl-like "multiple ways to do everything" approach, and there are a couple of different ways to handle &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;BLOBs&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;There are two basic &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;API&lt;/span&gt; approaches for this sort of thing: either pretend the huge bolus of binary gunk is just another column value stored along with all the other data for the row (whether it's really stored that way or not), or put a pointer ("&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;locator&lt;/span&gt;") to the data in the relational row, and provide some other interface for actually working with the data.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;PostgreSQL&lt;/span&gt; does both, both at the database level (it has two different low-level mechanisms[6]) and the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;API&lt;/span&gt; level (it has several different &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;APIs&lt;/span&gt; that expose out the underlying mechanism in various ways). Annoyingly, you can sort of mix and match the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;APIs&lt;/span&gt; and underlying implementations.&lt;br /&gt;&lt;br /&gt;The following discussion assumes the use of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;oid's&lt;/span&gt; (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;locators&lt;/span&gt;), not &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;bytea's&lt;/span&gt; (in-row blobs, see the footnote above), which means at the database level we're going to expose out the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;locator&lt;/span&gt; (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;oid&lt;/span&gt;) in the column. In &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_23"&gt;other&lt;/span&gt; words, if you do a "SELECT" on the column, it's going to give you a bunch of integer pointers, not a bunch of binary content.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;CREATE TABLE resource_record&lt;br /&gt;(&lt;br /&gt;id serial NOT NULL,&lt;br /&gt;content &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;oid&lt;/span&gt;,&lt;br /&gt;...&lt;br /&gt;)&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Luckily, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;PostgreSQL's&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;JDBC&lt;/span&gt; driver will (mostly) allow you to treat the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;locator&lt;/span&gt; column like it really holds the BLOB directly:&lt;br /&gt;&lt;br /&gt;&lt;code&gt; Blob content = ....&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;InputStream&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;bodyStream&lt;/span&gt; = body.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;getBinaryStream&lt;/span&gt;();&lt;br /&gt;...&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Well, assuming you're inside a database transaction, which is generally the only time you can stream to or from a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;JDBC&lt;/span&gt; BLOB[8]&lt;br /&gt;&lt;br /&gt;But it's not quite perfect. The lower-level &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;Postgres&lt;/span&gt; calls[9] allow &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;BLOBs&lt;/span&gt; to be shared, so deleting a row doesn't necessarily delete the corresponding blob. That conflicts with normal &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;JDBC&lt;/span&gt; semantics that assume the the BLOB is part of the row and should be deleted when the row is deleted. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;Postgres'&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;JDBC&lt;/span&gt; driver should probably implement those semantics, but it doesn't, so you have to run out and delete it yourself. One solution is to add the semantics back in via a trigger or rule:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;CREATE OR REPLACE FUNCTION on_resource_delete() RETURNS trigger&lt;br /&gt;AS $on_resource_delete$&lt;br /&gt;BEGIN&lt;br /&gt;  PERFORM lo_unlink( old.content );&lt;br /&gt;  RETURN null;&lt;br /&gt;END;&lt;br /&gt;$on_resource_delete$&lt;br /&gt;LANGUAGE &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;plpgsql&lt;/span&gt;&lt;br /&gt;IMMUTABLE&lt;br /&gt;RETURNS NULL ON NULL INPUT&lt;br /&gt;&lt;br /&gt;CREATE TRIGGER resource_delete_trigger&lt;br /&gt;AFTER DELETE&lt;br /&gt;ON resource_record&lt;br /&gt;FOR EACH ROW EXECUTE PROCEDURE on_resource_delete()&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;If you're interested, the data is stored over in the system table "pg_&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;largeobject&lt;/span&gt;"[10]&lt;br /&gt;&lt;br /&gt;Since this is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;PostgreSQL&lt;/span&gt;, the discussion wouldn't be complete without a mention of vacuum. Vacuum is the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;PostgreSQL&lt;/span&gt; "garbage collector". If you don't run it, the disk space associated with deleted &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;BLOBs&lt;/span&gt; won't be recovered. In production that may or may not matter, but during development it can a pain to lose the disk space.&lt;br /&gt;&lt;br /&gt;On my OS X machine, the file associated with the pg_&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;largeobject&lt;/span&gt; table turned out to be:&lt;br /&gt;&lt;br /&gt;/Library/PostgresPlus/8.3/data/base/17456/2613&lt;br /&gt;&lt;br /&gt;If you load up a couple of fairly large &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;BLOBs&lt;/span&gt;, you can probably figure out what file is being used on your system. It's comforting to watch it grow and shrink.&lt;br /&gt;&lt;br /&gt;So, although there are other options, it definitely works to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Make the column an &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_44"&gt;oid&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Add the trigger if you want your BLOB deleted with its row&lt;/li&gt;&lt;li&gt;Use normal &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_45"&gt;JDBC&lt;/span&gt; BLOB interface and stream away&lt;/li&gt;&lt;li&gt;Run a full vacuum occasionally if you need to recover disk space&lt;/li&gt;&lt;li&gt;Use a cache (like Squid) if you're serving the data back out over HTTP&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;[1] If you've chosen the right database, have some time to spend tuning, and are willing to install something like Squid if you're serving the data back out over HTTP, then single blobs of 100's of MB are not &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;undoable&lt;/span&gt;. Whether it's good or evil is a different question.&lt;br /&gt;[2] &lt;a href="http://java.sun.com/javase/6/docs/api/java/sql/Blob.html"&gt;http://java.sun.com/javase/6/docs/api/java/sql/Blob.html&lt;/a&gt;&lt;br /&gt;[3] mysql-connector-java-5.1.6/com/mysql/jdbc/Blob.java:108&lt;br /&gt;[4] MySQL also has a (seriously crippled) &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47"&gt;locator&lt;/span&gt;-based version: &lt;a href="http://dev.mysql.com/doc/refman/6.0/en/connector-j-reference-implementation-notes.html"&gt;http://dev.mysql.com/doc/refman/6.0/en/connector-j-reference-implementation-notes.html&lt;/a&gt;, see [5] for why it's problematic.&lt;br /&gt;[5] &lt;a href="http://www.blobstreaming.org/"&gt;http://www.blobstreaming.org/&lt;/a&gt; Even if you fix the client side to not read the entire BLOB into memory, the server side still does, and insists and transferring the entire thing every time, even if the client only wants a tiny piece. Which is why you need the whole new engine.&lt;br /&gt;[6] &lt;a href="http://jdbc.postgresql.org/documentation/80/binary-data.html"&gt;http://jdbc.postgresql.org/documentation/80/binary-data.html&lt;/a&gt; gives an overview of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_48"&gt;PostgreSQL&lt;/span&gt; BLOB support, and how there are a lot of options.&lt;br /&gt;[8] Which is painful, because it means you may have to keep the transaction open a very long time if you're, say, streaming 80 MB of data in over http from a client on a slow network connection. That's the sort of thing that drives people to stream to a temporary file first, then from the temp file to the database.&lt;br /&gt;[9] The lo_* routines, see &lt;a href="http://www.postgresql.org/docs/8.3/interactive/largeobjects.html"&gt;http://www.postgresql.org/docs/8.3/interactive/largeobjects.html&lt;/a&gt;&lt;br /&gt;[10] The data is stored as very many 2k chunks: &lt;a href="http://www.postgresql.org/docs/7.4/interactive/catalog-pg-largeobject.html"&gt;http://www.postgresql.org/docs/7.4/interactive/catalog-pg-largeobject.html&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-3835130112442559635?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/3835130112442559635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=3835130112442559635' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3835130112442559635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3835130112442559635'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2008/07/mysql-postgresql-and-blob-streaming.html' title='MySQL, PostgreSQL and BLOB Streaming'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-5888508805341090656</id><published>2008-06-16T21:07:00.000-07:00</published><updated>2008-06-17T05:49:41.843-07:00</updated><title type='text'>Tessera at the Semantic Web Austin Launch Party</title><content type='html'>Ever tried to write an application that sits on top of a fine mist of questionably accurate factoids spread in varyingly dense clumps across the whole Internet? It's a pain. The {s,S}emantic Web is a &lt;span style="font-style: italic;"&gt;terrible&lt;/span&gt; platform for applications. Developers need real APIs.&lt;br /&gt;&lt;br /&gt;I'll be at the &lt;a href="http://geekaustin.org/2008/05/29/semantic-web-austin-launch-party/"&gt;Semantic Web Austin Launch Party&lt;/a&gt; (Tue, June 17th) talking about Tessera, an experiment in wrapping the distributed social web (XFN, FOAF, hCard, etc) with &lt;a href="http://en.wikipedia.org/wiki/OpenSocial"&gt;OpenSocial&lt;/a&gt;, the API everybody-but-Facebook is using to expose out their social networking platform.&lt;br /&gt;&lt;br /&gt;Tessera is nowhere near complete, but it's far enough along to run simple OpenSocial gadgets, and I hope to have the OpenSocial version of &lt;a href="http://artofsystems.blogspot.com/2008/06/some-experiments-with-future-of-social.html"&gt;Popcitation&lt;/a&gt; up and running by tonight. Or not. But there's certainly enough there to make for some interesting discussion. Hope to see you in Austin!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-5888508805341090656?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/5888508805341090656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=5888508805341090656' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5888508805341090656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5888508805341090656'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2008/06/tessera-at-semantic-web-austin-launch.html' title='Tessera at the Semantic Web Austin Launch Party'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-1912658783817338782</id><published>2008-06-04T17:30:00.000-07:00</published><updated>2008-06-04T19:51:18.537-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='dallas'/><title type='text'>Some Experiments with the Future of Social Network Technology</title><content type='html'>I gave a presentation at the recent &lt;a href="http://www.facebook.com/home.php#/event.php?eid=16975616668"&gt;Dallas Social Network Technology event&lt;/a&gt; (yes, we're still trying to come up with a good name. Pictures &lt;a href="http://www.flickr.com/photos/cks/sets/72157605437855332/"&gt;here&lt;/a&gt;.). We ended up with something just over twenty people, but it was exactly the crowd we were hoping for: developers, startup-istas, entrepreneurs and business people actually "doing something" with social network technology. A quick canvas of the attendees indicated that a get-together maybe once a quarter or so, with a meetup for beers slightly more often, might be about right. There was some talk from the general direction of &lt;a href="http://www.alamofire.com/"&gt;Alamofire &lt;/a&gt;about a game-focused event sometime in the fall, and I suspect there will be another general event between now and then.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://docs.google.com/EmbedSlideshow?docid=ah7sbx3c6vpn_24spnf3n95" frameborder="0" height="342" width="410"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;The presentation was combined with a live demonstration of the &lt;a href="http://apps.facebook.com/popcitation/"&gt;Popcitation Facebook application&lt;/a&gt;, and both a Google and Facebook login to the &lt;a href="http://popcitation.com/"&gt;Popciation destination site&lt;/a&gt;. (All of it, but especially popcitation.com, is a development spike to test out new technology, there's a good chance it won't work quite right for you.) I got about 10% of an &lt;a href="http://code.google.com/apis/opensocial/"&gt;OpenSocial&lt;/a&gt; version done, I'll try to finish that up in the near future.&lt;br /&gt;&lt;br /&gt;Closing thought: it would be cool to have an OpenSocial container with &lt;a href="http://code.google.com/p/diso/"&gt;DISO&lt;/a&gt; as the backend, huh? Need to do some more research along those lines, for all I know that's the standard assumption...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-1912658783817338782?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/1912658783817338782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=1912658783817338782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/1912658783817338782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/1912658783817338782'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2008/06/some-experiments-with-future-of-social.html' title='Some Experiments with the Future of Social Network Technology'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-7195072170229242082</id><published>2008-05-22T06:31:00.000-07:00</published><updated>2008-05-22T07:30:49.546-07:00</updated><title type='text'>Coding and Comments</title><content type='html'>Some recent Twitter posts by Adam Keys got me thinking about the role of comments in code. Good and consistent coding style that reflects a solid development philosophy helps eliminate the need for many kinds of comments. Capturing requirements in a formal-ish way (through the use of techniques like Behavior and Domain Driven Design) eliminates even more. If important requirements can be captured formally in a "live"[1] way, they generally should be.&lt;br /&gt;&lt;br /&gt;But (a) you're not always in a situation where formal-ish requirements capture is possible and (b) there is some information that can't be captured formally.&lt;br /&gt;&lt;br /&gt;It's clear what needs to be done in the long term about (a), but in the mean time if you're going to have static text, it's good to have it as close to the code as possible. Comments let you do that.&lt;br /&gt;&lt;br /&gt;It's not so clear what can be done about (b). Even if you've read the code and grok it 100%, there are situations ("Although it's irrational, as of Oct. 18 2005, the accounting department insists we use HTTP basic auth without SSL") in which the code is not enough. Anything to do with people and their motivations, really.&lt;br /&gt;&lt;br /&gt;So, imagine yourself as a slightly-less-clever-than-you-think-you-are future reader of your own code. Imagine that you're generally familiar with the application, have read the code in some detail, and understand the development philosophy (hopefully) baked in throughout the system. If you're still thinking "WTF?!" then put in a comment. If it takes a full paragraph to explain the awful circumstances that led you write something impenetrable, then do it. Your future self will thank you.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1] In post-Singularity world, code executes you. Until then, you can't really refactor, trace, test or formally analyze static natural-language text like comments or (shudder) external requirements docs. Natural language isn't "live".&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-7195072170229242082?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/7195072170229242082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=7195072170229242082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/7195072170229242082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/7195072170229242082'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2008/05/coding-and-comments.html' title='Coding and Comments'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-3270245473218182037</id><published>2008-05-15T14:57:00.000-07:00</published><updated>2008-05-20T06:54:32.218-07:00</updated><title type='text'>Dallas Social Network Technology Event</title><content type='html'>Based in or around Dallas? Serious about developing an application based on social network technology? Was Facebook Dev Garage too Facebook specific for you? We're planning a get-together in early June you might be interested in. It's looking like the evening of &lt;span style="font-weight:bold;"&gt;Tuesday, June 3rd starting at 7:00&lt;/span&gt; and going till about 9:00 &lt;span style="font-weight:bold;"&gt;at the ritzy Sabre campus&lt;/span&gt; in scenic Southlake, TX:&lt;br /&gt;&lt;br /&gt; &lt;a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;q=3150+Sabre+Dr.+Southlake,+TX+76092&amp;ie=UTF8&amp;om=1&amp;z=17&amp;ll=32.982478,-97.160393&amp;spn=0.004806,0.011759&amp;t=h"&gt;Sabre Holdings&lt;/a&gt;&lt;br /&gt; 3150 Sabre Dr. Southlake, TX 76092&lt;br /&gt; (Campus Directions: &lt;a href="http://barcamp.pbwiki.com/f/DevCamp1.jpg"&gt;Gate&lt;/a&gt; , &lt;a href="http://barcamp.pbwiki.com/f/Directions1.jpg"&gt;Parking&lt;/a&gt; , &lt;a href="http://barcamp.pbwiki.com/f/Directions2.jpg"&gt;Entrance&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;When you get to the security gate, tell the guard you're with the Social Network Technology event, and you're in like Flynn.&lt;br /&gt;&lt;br /&gt;Wiki at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://socialdevthing.pbwiki.com"&gt;http://socialdevthing.pbwiki.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Facebook event page at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.facebook.com/event.php?eid=16975616668"&gt;http://www.facebook.com/event.php?eid=16975616668&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Current agenda is a quick round of introductions at 7:00, some demos, some discussion, and a followup at a local tasty beverage establishment. Leave a message on the Facebook event wall if you're interested in demoing or have a particular topic you'd like to focus on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-3270245473218182037?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/3270245473218182037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=3270245473218182037' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3270245473218182037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3270245473218182037'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2008/05/dallas-social-network-technology-event.html' title='Dallas Social Network Technology Event'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-621802860254560128</id><published>2008-04-01T15:12:00.000-07:00</published><updated>2008-04-01T15:48:37.313-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><title type='text'>Twasker : A Desktop Twitter Client in Haskell</title><content type='html'>A long time ago I wrote lots of code in impure functional languages. Pure functional, not so much. I'd start a Haskell tutorial then get bored and wander off. I recently got the bug again, and needed some sort of project to keep me interested when I got bogged down[1]. I sort of always assumed that pure functional languages should be hidden behind an interface while all the nitty-gritty stuff like GUIs got implemented imperatively, and I was thinking of maybe some sort of web service in Ruby that called over to a Haskell process for calculations.&lt;br /&gt;&lt;br /&gt;But that would be boring.[2] I wanted something fun.[3] So...&lt;br /&gt;&lt;br /&gt;Twasker is about implementing a production quality desktop Twitter client using only Haskell. The self-imposed rules say I'm allowed to call out to libraries for stuff like the OS X keychain service, but all the meat of the thing has got to be in Haskell. Oh, yeah, and it has to be pretty. Web 2.0 is all about style over substance, and Twasker has got to look good. Or at least plausible.&lt;br /&gt;&lt;br /&gt;So far, it's mostly been about learning a whole new set of libraries (no DOM here) and some heavy duty monad abuse[4], but I figure that counts (it is technically Haskell, after all). I've set up a google code project and am planning on eventually uploading the source. Some day. Probably[5].&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/twasker"&gt;http://code.google.com/p/twasker&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1] Bogged down? Whatever could bog a person down when learning Haskell?&lt;br /&gt;[2] Easy.&lt;br /&gt;[3] Stupidly hard.&lt;br /&gt;[4] What's the opposite of point free?&lt;br /&gt;[5] Yeah, I'm using up one of my ten lifetime google code projects on this. I must be serious.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-621802860254560128?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/621802860254560128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=621802860254560128' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/621802860254560128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/621802860254560128'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2008/04/twasker-desktop-twitter-client-in.html' title='Twasker : A Desktop Twitter Client in Haskell'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-5951291704642919593</id><published>2008-03-06T09:56:00.000-08:00</published><updated>2008-12-12T20:45:01.100-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='barcamp'/><title type='text'>Bar Camp Austin III : The (Practical) Semantic Web</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_2tLgOGpsEVE/R9A0ckd7EgI/AAAAAAAAAEA/usxYcvsKXEM/s1600-h/bca3_banner_728x90_special.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_2tLgOGpsEVE/R9A0ckd7EgI/AAAAAAAAAEA/usxYcvsKXEM/s400/bca3_banner_728x90_special.png" alt="" id="BLOGGER_PHOTO_ID_5174693637278863874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Whether you buy into the &lt;a href="http://www.w3.org/DesignIssues/Semantic.html"&gt;big-V Vision&lt;/a&gt; or not, the &lt;a href="http://www.w3.org/2001/sw/"&gt;big-S Semantic Web&lt;/a&gt; folks have built a ton of cool technology. Join &lt;a href="http://www.google.com/search?q=%22taylor+cowan%22"&gt;Taylor Cowan&lt;/a&gt;, &lt;a href="http://www.w3.org/People/Connolly/"&gt;Dan Connolly&lt;/a&gt; and me at &lt;a href="http://barcamp.org/BarCampAustinIII"&gt;BarCampAustinIII&lt;/a&gt; and find out how you can put that technology to work, today.&lt;br /&gt;&lt;br /&gt;Want more details? Check out this &lt;a href="http://geekaustin.org/2008/03/06/christopher-stjohn-semantic-web-barcampaustin/"&gt;interview&lt;/a&gt; by &lt;a href="http://linearb.livejournal.com/"&gt;Lynn Bender&lt;/a&gt; at &lt;a href="http://geekaustin.org/"&gt;geek austin.&lt;/a&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://geekaustin.org/2008/03/06/christopher-stjohn-semantic-web-barcampaustin/"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-5951291704642919593?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/5951291704642919593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=5951291704642919593' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5951291704642919593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5951291704642919593'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2008/03/bar-camp-austin-iii-semantic-web-for.html' title='Bar Camp Austin III : The (Practical) Semantic Web'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_2tLgOGpsEVE/R9A0ckd7EgI/AAAAAAAAAEA/usxYcvsKXEM/s72-c/bca3_banner_728x90_special.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-6335613850618693956</id><published>2008-03-04T09:58:00.001-08:00</published><updated>2008-03-04T10:25:23.599-08:00</updated><title type='text'>Giannibicego Hoa Tran for President</title><content type='html'>Normally I stay away from politics in this blog, but the Texas presidential primaries are such a hoot I couldn't help myself. The Democratic hybrid-primary is good for a laugh, but &lt;a href="http://www.texasstartupblog.com/about/"&gt;Alex Muse&lt;/a&gt;'s blog post on &lt;a href="http://www.texasstartupblog.com/2008/03/04/voting-with-ethan/"&gt;voting with his son&lt;/a&gt; had one small reference ("Who is Hoa Tran?") that really caught my eye. Who &lt;span style="font-style: italic;"&gt;is&lt;/span&gt; Hoa Tran?&lt;br /&gt;&lt;br /&gt;Dr. Giannibicego Hoa Tran is a Republican presidential candidate. She is from Houston, and she is amazing. She is amazing because: (a) there is virtually no information on the Internet about her (how is that possible? a plot by the liberal media?) and (b) she invented cures for bird flu and anthrax.&lt;br /&gt;&lt;br /&gt;Did any other candidate cure bird flu and anthrax? No, they did not. Clinton has a plan for curing bird flu and anthrax some day, Obama will make you feel better about bird flu and anthrax in a sort of non-specific way, McCain will invade bird flu and anthrax and occupy them for 100 years, but only Hoa Tran has &lt;span style="font-style: italic;"&gt;cured&lt;/span&gt; bird flu and anthrax.&lt;br /&gt;&lt;br /&gt;As the links below reveal, she is foreign-born, but that hasn't stopped other foreign-born Republican candidates like John McCain (Panama), Rudy Giuliani (NYC), Alan Keyes (Mars) and Ron Paul (Planet-of-the- compelling-ideas-that-dissolve-into-a-nutty-tasting-peanut-&lt;br /&gt;butter-like-substance- when-looked-at-too-closely), so I really don't see that as a barrier.&lt;br /&gt;&lt;br /&gt;Vote Hoa Tran!&lt;br /&gt;&lt;br /&gt;More info (what little there is):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.votesmart.org/bio.php?can_id=69300"&gt;http://www.votesmart.org/bio.php?can_id=69300&lt;/a&gt;&lt;br /&gt;&lt;a href="http://lifedistilled.com/?p=338"&gt; http://lifedistilled.com/?p=338&lt;/a&gt;&lt;br /&gt;&lt;a href="http://viewfrom22.blogspot.com/2006/10/giannibicego-hoa-tran-another-cd22.html"&gt; http://viewfrom22.blogspot.com/2006/10/giannibicego-hoa-tran-another-cd22.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-6335613850618693956?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/6335613850618693956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=6335613850618693956' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/6335613850618693956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/6335613850618693956'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2008/03/giannibicego-hoa-tran-for-president.html' title='Giannibicego Hoa Tran for President'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-8353469143101474899</id><published>2008-02-24T16:29:00.000-08:00</published><updated>2008-02-27T20:19:14.087-08:00</updated><title type='text'>Microformats, Water Skis, Shark Tanks...</title><content type='html'>The way I swallowed some of the &lt;a href="http://microformats.org/wiki/namespaces"&gt;sillier parts of microformats dogma&lt;/a&gt; was to say to myself:&lt;br /&gt;&lt;blockquote&gt;"The big-S semantic web is failing to gain traction. The microformats group is saying 'radically simplify and see what happens'. Having a background in&lt;a href="http://en.wikipedia.org/wiki/Knowledge_representation"&gt; Knowledge Representation&lt;/a&gt;, I know the problems they're going to hit with those simplifications, but maybe they'll take it the 20% (or 10%, or 5%) of the way forward so that the underlying ideas gain traction before they hit the inevitable wall"&lt;br /&gt;&lt;/blockquote&gt;So, we're maybe 2% of the way in, and the uf group hits the predicted problems with combining different formats. This is stuff worked out about 20 years ago, and there are some well understood solutions, but they conflict with microformats dogma (and, honestly, they do make things very slightly tougher for beginners in some ways.)&lt;br /&gt;&lt;br /&gt;Now, I was hoping the self-appointed leadership would say something along these lines:&lt;br /&gt;&lt;blockquote&gt;"Oh, look, our radical dogma has made things simpler but led us into a &lt;a href="http://sethgodin.typepad.com/seths_blog/2005/11/understanding_l.html"&gt;local maximum&lt;/a&gt;. Perhaps we should re-examine the dogma and see if there is a way forward that preserves the good things we've observed while avoiding the bad things"&lt;/blockquote&gt;Instead, in response to any questioning of orthodoxy, they're saying:&lt;br /&gt;&lt;blockquote&gt;"YOU HAVE BLASPHEMED AGAINST DECISIONS MADE LONG AGO, THIS WILL NOT BE ALLOWED"&lt;/blockquote&gt;I find this sad. Doesn't meant microformats aren't worth continuing with, but it does suggest it's about time for the big-S semantic web to step up with a little guidance and maybe ramp up the publicity on "microformats all grown up" stuff like RDFa.&lt;br /&gt;&lt;br /&gt;Maybe a little outreach at SXSWi? I'm skipping the official conference but heading down for &lt;a href="http://barcamp.org/BarCampAustinIII"&gt;BarCampAustinIII&lt;/a&gt; and some parties. In advance of that, I'd like to get together for a &lt;a href="http://en.wikipedia.org/wiki/RDFa"&gt;RDFa&lt;/a&gt;-outreach dinner here in Dallas sometime over the next week or so The topic's something along the lines of "learning some publicity lessons from microformats and is there anybody doing anything RDFa-related at south-by this year." Email me of leave a blog comment if you're interested.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-8353469143101474899?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/8353469143101474899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=8353469143101474899' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/8353469143101474899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/8353469143101474899'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2008/02/microformats-water-skis-shark-tanks.html' title='Microformats, Water Skis, Shark Tanks...'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-5416291961851007748</id><published>2008-02-15T16:03:00.000-08:00</published><updated>2008-02-15T16:12:46.621-08:00</updated><title type='text'>Not the Office : Coffee and WiFi around Dallas</title><content type='html'>Continuing my recent trend of largely content free announcements:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://maps.google.com/maps/ms?ie=UTF8&amp;amp;hl=en&amp;amp;msa=0&amp;amp;msid=106902710261487289009.00044558ab207d29fce57&amp;amp;z=11"&gt;Coffee and WiFi in Dallas&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;is a collaborative Google map of places that have tasty treats (such as coffee), free WiFi, and don't mind if you camp out for extended periods. Feel free to add places, but the rule is you have to have actually worked there, and I reserve the right to edit entries at my whim.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-5416291961851007748?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/5416291961851007748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=5416291961851007748' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5416291961851007748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5416291961851007748'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2008/02/not-office-coffee-and-wifi-around.html' title='Not the Office : Coffee and WiFi around Dallas'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-5017279687547983452</id><published>2008-02-12T17:50:00.000-08:00</published><updated>2008-02-12T18:07:55.606-08:00</updated><title type='text'>Demo Camp Dallas 3</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://barcamp.org/f/democamp_dallas_colour_rgb.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://barcamp.org/f/democamp_dallas_colour_rgb.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I think it's about time for another Demo Camp. People seemed to enjoy the first couple, and I think there's time to fit one in before everyone heads off to SXSWi next month. There's a page up at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://barcamp.org/DemoCampDallas3"&gt;http://barcamp.org/DemoCampDallas3&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For those not familiar, a DemoCamp is geek show and tell. A small number of presenters (I'm thinking four) get a chance to demo their application in front of an audience of their peers. The demoistas get a chance to show off their work (anything from a pre-alpha to almost-ready-for-release is fair game) and the audience gets a peek at some cool software put together by North Texans. The focus is on camaraderie and fun rather than fund-raising or sales opportunities, but everyone's welcome to show up for whatever reason.&lt;br /&gt;&lt;br /&gt;The exact date, time and venue are TBD, but I'm thinking the last week in February might be a good target. Feedback on the date or time or venue very welcome...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-5017279687547983452?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/5017279687547983452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=5017279687547983452' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5017279687547983452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5017279687547983452'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2008/02/demo-camp-dallas-3.html' title='Demo Camp Dallas 3'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-3515250514818872544</id><published>2007-09-28T11:13:00.000-07:00</published><updated>2008-12-12T20:45:01.336-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='barcamp'/><category scheme='http://www.blogger.com/atom/ns#' term='dallas'/><title type='text'>Bar Camp Dallas 4</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_2tLgOGpsEVE/Rv1FwGCzHUI/AAAAAAAAADI/VhcRI9yhQHA/s1600-h/dallas2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_2tLgOGpsEVE/Rv1FwGCzHUI/AAAAAAAAADI/VhcRI9yhQHA/s400/dallas2.png" alt="" id="BLOGGER_PHOTO_ID_5115321444321140034" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://barcamp.org/BarCampDallas4"&gt;BarCampDallas4&lt;/a&gt; is tomorrow. I didn't help out this time, but I plan to be there talking about using Amazon EC2 for load testing when you just don't have the bandwidth and CPU to do it in-house. Or maybe something different, it depends on the audience. You can just sort of show up, but be kind and register at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://barcamp.org/BarCampDallas4"&gt;http://barcamp.org/BarCampDallas4&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;See you there!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-3515250514818872544?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/3515250514818872544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=3515250514818872544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3515250514818872544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3515250514818872544'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2007/09/bar-camp-dallas-4.html' title='Bar Camp Dallas 4'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_2tLgOGpsEVE/Rv1FwGCzHUI/AAAAAAAAADI/VhcRI9yhQHA/s72-c/dallas2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-6316843485485739620</id><published>2007-09-04T19:09:00.000-07:00</published><updated>2007-09-04T19:31:25.474-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='barcamp'/><category scheme='http://www.blogger.com/atom/ns#' term='daytripr'/><category scheme='http://www.blogger.com/atom/ns#' term='dallas'/><title type='text'>MobileDevCamp Geek Lunch : Portable, Distributed and Parasitic Social Networks</title><content type='html'>Based on some interest at &lt;a href="http://barcamp.org/MobileDevCamp"&gt;MobileDevCamp&lt;/a&gt; a few of us decided to get together for a geek lunch. You know those unofficial birds-of-a-feather lunches at SXSWi? Yeah, like that. Although it depends on who exactly shows up, the topic will probably involve some practical aspects of building a web service that depends in some way on a social network. Is it better to try to import Facebook (or GMail or whatever) contacts, or chuck your private implementation and just use the Facebook API? How about distributed social networks implemented via OpenID and  FOAF/XFN? Too early to depend on for anything except an experiment?&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.facebook.com/event.php?eid=5791526435"&gt;facebook event page&lt;/a&gt; has the details, but right now it looks like this coming Thursday starting around 11:30 at an as-yet-undetermined venue somewhere north of Uptown and south of Addison. In Dallas. Texas. The assumption is that if you're serious about this sort of thing you've probably got a Facebook account. It's probably going to be a small-to-medium-sized group, but anyone actively working in the space is welcome. An RSVP is appreciated since we may need to reserve space.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-6316843485485739620?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/6316843485485739620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=6316843485485739620' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/6316843485485739620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/6316843485485739620'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2007/09/mobiledevcamp-geek-lunch-portable.html' title='MobileDevCamp Geek Lunch : Portable, Distributed and Parasitic Social Networks'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-1793320667820026039</id><published>2007-08-18T10:39:00.000-07:00</published><updated>2008-12-12T20:45:01.556-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='barcamp'/><category scheme='http://www.blogger.com/atom/ns#' term='dallas'/><title type='text'>MobileDevCamp Dallas</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_2tLgOGpsEVE/Rsc4ewOg_NI/AAAAAAAAADA/ZnN2dXYKPnU/s1600-h/moviledevcampdallas.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_2tLgOGpsEVE/Rsc4ewOg_NI/AAAAAAAAADA/ZnN2dXYKPnU/s400/moviledevcampdallas.png" alt="" id="BLOGGER_PHOTO_ID_5100107204013391058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://barcamp.org/MobileDevCamp"&gt;MobileDevCamp&lt;/a&gt; comes to Dallas next Saturday, August 25th. The idea is that you show up in the morning with either the burning desire to create a mobile application, or mad development/design skilz you want to share. You leave in the evening having contributed to getting a real, live mobile application up and running.  Check it out and sign up at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://barcamp.org/MobileDevCamp"&gt;http://barcamp.org/MobileDevCamp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The event is being run by developers and designers, for developers and designers and there's no admission charge. Newbies and old hands are encouraged to show up and work on everything from iPhone targeted HTML sites to Symbian and Windows Mobile. Whatever you want, as long as it runs on something you can carry around in your pocket.&lt;br /&gt;&lt;br /&gt;The technology knowledge will be first rate, but I expect the most important result will be getting to know the best, most passionate developers and designers in Texas. Chris says check it out&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-1793320667820026039?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/1793320667820026039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=1793320667820026039' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/1793320667820026039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/1793320667820026039'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2007/08/mobiledevcamp-dallas.html' title='MobileDevCamp Dallas'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_2tLgOGpsEVE/Rsc4ewOg_NI/AAAAAAAAADA/ZnN2dXYKPnU/s72-c/moviledevcampdallas.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-4871514623228698990</id><published>2007-08-05T17:47:00.000-07:00</published><updated>2008-12-12T20:45:01.720-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><title type='text'>A Survey of User Profile Fields</title><content type='html'>Last month I did a &lt;a href="http://artofsystems.blogspot.com/2007/07/buddy-icons-avatars-and-profile-images.html"&gt;comparison&lt;/a&gt; of the various ways social networking sites handled user icons and profile images. This time, it's how they handle user attributes. It's the sort of tedious stuff that profile interchange mechanisms are made from. It's also useful if you're rolling your own social network and want to know what other people have done. The table I was using got to be too big for a blog posting, so I moved the spreadsheet over to Google Docs and linked to it from the image below. The chart is not quite complete, but then again it's &lt;i&gt;never&lt;/i&gt; going to be quite complete, so I've gone ahead and published it. I'll be updating the underlying spreadsheet occasionally, you can either check back here or subscribe to the RSS feed after the link. If you want edit access to the spreadsheet, just ask.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://spreadsheets.google.com/pub?key=pGC--TTsQhL1v3RviHgXoGA"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_2tLgOGpsEVE/RrpCkZ8xEiI/AAAAAAAAAC4/hMt10ztnkSI/s400/spi_cropped.png" alt="" id="BLOGGER_PHOTO_ID_5096459121531621922" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thoughts so far:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The "last name/first name" vs "full name" thing is going to be painful.&lt;/li&gt;&lt;li&gt;There are a wide variety of "genders" beyond the traditional male/female.&lt;/li&gt;&lt;li&gt;Same goes for "relationship status". This suggests interchange will be tricky.&lt;/li&gt;&lt;li&gt;Putting the GMT offset in timezones is ugly.&lt;/li&gt;&lt;li&gt;Not everybody has zip codes, or event state/regions. Fully handling that is a pain.&lt;/li&gt;&lt;li&gt;If you put your religions in a dropdown, do you leave off the Satanists?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The choices for "field/profession" in MySpace should include "fireman" and "astronaut".&lt;/li&gt;&lt;/ul&gt;Reading through the list, I was struck by how the choices offered the user defined a whole worldview. Reading through the mutliple-choice questions was especially enlightening. There's  a sort of diffuse, unfocused attempt to define what it means to be a person in our culture going on here, revealed through the ways we're allowed to define ourselves. But that's a whole different blog post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-4871514623228698990?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/4871514623228698990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=4871514623228698990' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/4871514623228698990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/4871514623228698990'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2007/08/survey-of-user-profile-fields.html' title='A Survey of User Profile Fields'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_2tLgOGpsEVE/RrpCkZ8xEiI/AAAAAAAAAC4/hMt10ztnkSI/s72-c/spi_cropped.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-8420311146026384032</id><published>2007-08-03T20:47:00.001-07:00</published><updated>2008-12-12T20:45:02.289-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><title type='text'>Invisible Doors and the Piquant Tang of Minor Humiliation</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_2tLgOGpsEVE/RrP5PJ8xEhI/AAAAAAAAACw/CTA8NVVRioA/s1600-h/IMG_0159.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_2tLgOGpsEVE/RrP5PJ8xEhI/AAAAAAAAACw/CTA8NVVRioA/s320/IMG_0159.jpg" alt="" id="BLOGGER_PHOTO_ID_5094689642250310162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Our pediatrician moved to an office in a fancy new building. The first time we took the kids for a checkup I was faced with the choice of trying to carry an infant car seat through a set of revolving doors or somehow managing to press, with full hands, the button to open the (rather narrow) powered swinging door to the right of them. You can see the doors in the picture above. I managed to use my elbow to press the button to open the swinging door, but I couldn't help wondering what the building designers were thinking in making it physically challenging to get into a medical center.&lt;br /&gt;&lt;br /&gt;Turns out there was a nice wide automatic sliding door that I could have used. It's there to the left of the revolving door. You can tell because there's a tiny little lock on the frame next to it, and a minuscule sticker (behind the tinted glass, visually blended with the metal frame) that says "AUTOMATIC DOOR". There's also a small black sensor over the door, but the way things are arranged you have to tilt your head back to see it so I've left it out of the picture.&lt;br /&gt;&lt;br /&gt;When I noticed the sliding door on our second visit, I felt a little silly. After all, if I would have been paying full attention I could, in fact, have worked out that there was a door there. Then I got annoyed. I knew how stupid it was to design invisible doors because I'd read Donald Norman's &lt;span style="font-style: italic;"&gt;Design of Everyday Things&lt;/span&gt; way back when, and I expected building designers to have at least the level of knowledge about doors that I have.&lt;br /&gt;&lt;br /&gt;It's not just doors, though. Any time you have a cover-your-behind feature in an application you're going to instill in your users that same feeling of guilt that the building architects caused me to feel. Those transient status messages, those tiny-fonted explanatory paragraphs embedded below text fields, that explanation buried in the online help, all of them make the person writing the application (or designing the door) feel better, but do little to prevent the user from making mistakes. The subject has been beaten to death over the past few years and I don't really have anything new to say except that it might be useful, the next time you encounter a situation like the above, to stop and briefly savor the feeling of minor humiliation. Drink it in. It adds a pleasant piquant note to those dry usability articles, and  the memory might give you that little bit of extra motivation to spend ten more minutes coming up with a good design rather than giving in to the urge to just &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;CYA&lt;/span&gt; and move on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-8420311146026384032?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/8420311146026384032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=8420311146026384032' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/8420311146026384032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/8420311146026384032'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2007/08/piquant-tang-of-minor-humiliation.html' title='Invisible Doors and the Piquant Tang of Minor Humiliation'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_2tLgOGpsEVE/RrP5PJ8xEhI/AAAAAAAAACw/CTA8NVVRioA/s72-c/IMG_0159.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-1314012790231539465</id><published>2007-07-24T14:07:00.001-07:00</published><updated>2008-12-12T20:45:02.458-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dallas'/><category scheme='http://www.blogger.com/atom/ns#' term='food'/><title type='text'>Buzzbrews : Dallas Diner Dining, 24x7</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_2tLgOGpsEVE/RqZz6p8xEfI/AAAAAAAAACg/YZ1QK8QqJn4/s1600-h/IMG_0107_2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_2tLgOGpsEVE/RqZz6p8xEfI/AAAAAAAAACg/YZ1QK8QqJn4/s320/IMG_0107_2.JPG" alt="" id="BLOGGER_PHOTO_ID_5090883880319259122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Dallas isn't really a diner kind of city[1]. Chain restaurants of every stripe, some really good high-end dining and good selection of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;tacquerias&lt;/span&gt;, but not so much on the diner front.  &lt;a href="http://buzzbrews.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Buzzbrews&lt;/span&gt;&lt;/a&gt;[2] is my current choice for diner-like dining with some Dallas flavor, and the only real choice after midnight[3]&lt;br /&gt;&lt;br /&gt;My favorite diner food is a fried egg sandwich and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Buzzbrews&lt;/span&gt; does up an excellent, if baroque, version with grilled tomato, fried eggs over hard and two strips of thick bacon on some hearty toasted bread. It comes with potatoes. They have a cute name I won't repeat here, but they're those small round ones done up with garlic. I didn't love them, but people who are into potatoes tell me they're good. I liked the coffee.&lt;br /&gt;&lt;br /&gt;The interior looks like a small traditional diner, with a row of booths along the windows facing the Central Expressway, a row of two-person tables down the middle, and a counter with stools facing the kitchen. While I was there there were a couple of random East Dallas types, a pair of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;NorthPark&lt;/span&gt; moms with small kids and what looked like a rock band[4] The restaurant has &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Wi&lt;/span&gt;-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Fi&lt;/span&gt;, but the place is just too small to camp out effectively. I'd say you could probably get away with an hour if it wasn't during a rush. The seating is communal (did I mention it was small?) but in the couple of times I've been there it wasn't an issue.&lt;br /&gt;&lt;br /&gt;It's too expensive to really be a diner ($6.50 for my fried egg sandwich) so it's really a 'diner' in quotes, but the quote marks are what makes it a &lt;span style="font-style: italic;"&gt;Dallas&lt;/span&gt; diner. Chris says check it out.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1] Notable exceptions for the traditionally inclined include the Metro Diner over by Baylor Hospital and the Pitt Grill on Davis in Oak Cliff. I hear the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Buzzbrews&lt;/span&gt; location used to be a Pitt Grill, which if true would be cool.&lt;br /&gt;&lt;br /&gt;[2] &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;BUZZBREWS&lt;/span&gt;? &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;BuzzBrews&lt;/span&gt;? Capitalization unclear. And no, it's not like they're new or anything, but I was out of town for a while.&lt;br /&gt;&lt;br /&gt;[3] Be honest, the only reason you go to Cafe Brazil is because it's open and you're too drunk to notice that the food is lousy. You know that nasty taste in your mouth the next morning? It's not from the booze, it's from the Cafe Brazil &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;quesadilla&lt;/span&gt; you don't remember eating.&lt;br /&gt;&lt;br /&gt;[4] Or what normal people dress up like on Halloween when they want to pretend they are a rock band. Black jeans, black t-shirts, dark glasses. You know the drill. They seemed suspiciously clean to be a rock band, though. Doesn't matter, the point is they were entertaining to look at. Oh, and when I say "East Dallas types" I mean people who look like they would really prefer to live in Austin.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-1314012790231539465?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/1314012790231539465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=1314012790231539465' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/1314012790231539465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/1314012790231539465'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2007/07/buzzbrews-dallas-diner-dining-24x7.html' title='Buzzbrews : Dallas Diner Dining, 24x7'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_2tLgOGpsEVE/RqZz6p8xEfI/AAAAAAAAACg/YZ1QK8QqJn4/s72-c/IMG_0107_2.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-2809121917248029191</id><published>2007-07-15T16:13:00.000-07:00</published><updated>2008-12-12T20:45:02.618-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><title type='text'>A Flash of Design Insight</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_2tLgOGpsEVE/RpqtVaTQIKI/AAAAAAAAACQ/PuJEwm05a5c/s1600-h/IMG_0057+copy.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_2tLgOGpsEVE/RpqtVaTQIKI/AAAAAAAAACQ/PuJEwm05a5c/s320/IMG_0057+copy.JPG" alt="" id="BLOGGER_PHOTO_ID_5087569312417325218" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I read POET[1] a while back, and I haven't been able to look at door with a "PULL" sign the same way since[2]. I've also acquired the (they tell me annoying) habit of (over) analyzing my environment. I recently came across the above weirdness at the Pizza Hut franchise inside our local Super Target. It's a little hard to see, but the bar stools facing the window have a board mounted vertically in front of them. It sticks out as an anomaly in an environment obviously designed to be efficiently churned out by the thousands and lacking any non-functional detail.&lt;br /&gt;&lt;br /&gt;I sat and stared at it for a good chunk of the 6.001 minutes it took to prepare my Personal Pan Pizza before finally realizing how it added to the usability of the space. Here's a hint: it has to do with the interaction between patrons on the stools and people outside. No? Ok, [3].&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1] &lt;a href="http://www.amazon.com/gp/product/0465067107?ie=UTF8&amp;tag=codeporn-20&amp;amp;linkCode=as2&amp;camp=1789&amp;amp;creative=9325&amp;creativeASIN=0465067107"&gt;The Design of Everyday Things.&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=codeporn-20&amp;amp;l=as2&amp;o=1&amp;amp;a=0465067107" alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1" /&gt;The name's changed (it was 'The Psychology of Everyday Things') but the song's the same. But you're read it, right?&lt;br /&gt;&lt;br /&gt;[2] Only very badly designed doors need signs telling you how to operate them. Good doors have &lt;a href="http://en.wikipedia.org/wiki/Affordance"&gt;affordances&lt;/a&gt; that tell you how to operate them without the need for written language.&lt;br /&gt;&lt;br /&gt;[3] Women in skirts. 'Flash' of insight? Puns are the highest form of humor.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-2809121917248029191?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/2809121917248029191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=2809121917248029191' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/2809121917248029191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/2809121917248029191'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2007/07/flash-of-design-insight.html' title='A Flash of Design Insight'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2tLgOGpsEVE/RpqtVaTQIKI/AAAAAAAAACQ/PuJEwm05a5c/s72-c/IMG_0057+copy.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-9138668321527560507</id><published>2007-07-06T20:04:00.000-07:00</published><updated>2007-08-11T09:36:07.219-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='daytripr'/><title type='text'>Buddy Icons, Avatars and Profile Images</title><content type='html'>&lt;p&gt;It seemed like a good idea at the time, but it ended up taking forever to put this chart together. Part of it was getting distracted by the sites themselves[1], both the interesting content and the sometimes frustrating implementations. The various sign-up processes are definitely worth a survey.&lt;/p&gt;&lt;p&gt;The list is pretty random, and consists of some sites I was researching anyway, plus most of Jeremy Keith's sites from his &lt;a href="http://adactio.com/"&gt;adactio&lt;/a&gt; article on &lt;a href="http://adactio.com/journal/1312/"&gt;social networks&lt;/a&gt;.[2] The table has the name of the site, the size(s) of the icons, how the icons are cropped and what terminology is used to refer to the images.&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://flickr.com/"&gt;flickr&lt;/a&gt;&lt;/td&gt;&lt;td&gt;48x48&lt;/td&gt;&lt;td&gt;cropping widget&lt;/td&gt;&lt;td&gt;buddy icon&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://twitter.com/"&gt;twitter&lt;/a&gt;&lt;/td&gt;&lt;td&gt;48x48, 24x24&lt;/td&gt;&lt;td&gt;center square&lt;/td&gt;&lt;td&gt;picture&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://dopplr.com/"&gt;dopplr&lt;/a&gt;&lt;/td&gt;&lt;td&gt;128x128, 32x32&lt;/td&gt;&lt;td&gt;top square&lt;/td&gt;&lt;td&gt;icon&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://last.fm/"&gt;last.fm&lt;/a&gt;&lt;/td&gt;&lt;td&gt;160x160, 50x50&lt;/td&gt;&lt;td&gt;aspect scaled&lt;/td&gt;&lt;td&gt;your picture&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://jaiku.com/"&gt;jaiku&lt;/a&gt;&lt;/td&gt;&lt;td&gt;75x75, 30x30&lt;/td&gt;&lt;td&gt;center square&lt;/td&gt;&lt;td&gt;your photo&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://anobii.com/"&gt;anobii&lt;/a&gt;&lt;/td&gt;&lt;td&gt;48x48&lt;/td&gt;&lt;td&gt;center square&lt;/td&gt;&lt;td&gt;buddy icon&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://corkd.com/"&gt;corkd&lt;/a&gt;&lt;/td&gt;&lt;td&gt;64x64&lt;/td&gt;&lt;td&gt;center square&lt;/td&gt;&lt;td&gt;buddy icon or picture&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://pownce.com/"&gt;pownce&lt;/a&gt;&lt;/td&gt;&lt;td&gt;140x140, 48x48&lt;/td&gt;&lt;td&gt;center square&lt;/td&gt;&lt;td&gt;photo&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://revish.com/"&gt;revish&lt;/a&gt;&lt;/td&gt;&lt;td&gt;48x48&lt;/td&gt;&lt;td&gt;scaled?&lt;/td&gt;&lt;td&gt;user icon&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://ficlets.com/"&gt;ficlets&lt;/a&gt;&lt;/td&gt;&lt;td&gt;48x48&lt;/td&gt;&lt;td&gt;none&lt;/td&gt;&lt;td&gt;buddy icon&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://newsvine.com/"&gt;newsvine&lt;/a&gt;&lt;/td&gt;&lt;td&gt;120x120&lt;/td&gt;&lt;td&gt;cropping widget&lt;/td&gt;&lt;td&gt;your photo&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://ma.gnolia.com/"&gt;ma.gnolia.com&lt;/a&gt;&lt;/td&gt;&lt;td&gt;75x75, 32x32&lt;/td&gt;&lt;td&gt;aspect scaled&lt;/td&gt;&lt;td&gt;avatar&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://xing.com/"&gt;xing&lt;/a&gt;&lt;/td&gt;&lt;td&gt;140x185&lt;/td&gt;&lt;td&gt;aspect scaled&lt;/td&gt;&lt;td&gt;your photo&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://digg.com/"&gt;digg&lt;/a&gt;&lt;/td&gt;&lt;td&gt;48x48, 32x32, 16x16&lt;/td&gt;&lt;td&gt;cropping widget&lt;/td&gt;&lt;td&gt;your image&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://librarything.com/"&gt;librarything&lt;/a&gt;&lt;/td&gt;&lt;td&gt;207x276&lt;/td&gt;&lt;td&gt;aspect scaled&lt;/td&gt;&lt;td&gt;picture&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://wishpot.com/"&gt;wishpot&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Nx75&lt;/td&gt;&lt;td&gt;aspect scaled&lt;/td&gt;&lt;td&gt;my picture&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://dreamcrowd.com/"&gt;dreamcrowd&lt;/a&gt;&lt;/td&gt;&lt;td&gt;80xN&lt;/td&gt;&lt;td&gt;aspect scaled&lt;/td&gt;&lt;td&gt;my icon&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;last.fm has a pointer to &lt;a href="http://mypictr.com/"&gt;mypictr&lt;/a&gt; if you want to get fancy with cropping. That's a good idea, since apart from Flickr the site-specific cropping widgets were uniformly hard to use.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;aNobii allows you to upload an image, or you can give it your Flickr name and it will use your flickr buddy icon. There's an an option to check Flickr for updates once a month. Cool.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;revish delights and disappoints. It looks like they make a wild guess that your revish login is the same as your Flickr login and speculatively download the matching buddy icon. It worked in my case. At first I though they were using the Flickr api's findByEmail call to match my email address to my Flickr account (which is a neat idea), but I used a email that isn't hooked to Flickr, so they must just be guessing. On the other hand, if you upload your own icon they scale it without cropping, which is just nasty.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;ficlets doesn't even bother with manual picture uploads. They're associated with AOL, so as expected you can use your AIM icon, but you can also point at your Flickr or twitter account (which are, conveniently, both 48x48)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Conclusions? If you're going to use a small image as your primary user icon, then make it 48x48 and give users the option to use their Flickr buddy icon. For extra credit, if you've got an email, use the Flickr API to grab the appropriate icon speculatively (without forcing them to enter their Flickr name). For extra extra credit, poll Flickr once a month for changes to the icon. Don't bother with a fancy cropping widget unless you can make one as good as Flickr, instead just crop the uploaded images to the largest centered square and scale to fit. Point users to &lt;a href="http://mypictr.com/"&gt;mypictr&lt;/a&gt; if you think they want to get fancy.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;On the other hand, if you want a portrait-style picture on the profile page, 48x48 is too small and the picture shouldn't be square. Give the user the option to upload a picture or let them give a URL that points to a profile picture they like.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;If you're not sure how your site will evolve, let people upload whatever they want, and then keep a relatively high resolution copy of it so you can re-scale or re-crop later on. Once you scale down, you can't scale up again.&lt;/p&gt;&lt;p&gt;If you want to leave a comment giving information on your favorite site, I'll try to keep the chart up-to-date. I suspect it will become more important as profile-exchange mechanisms start to proliferate.&lt;br /&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 0, 0); font-style: italic;"&gt;Update&lt;/span&gt;: If you liked this post, you'll love &lt;a href="http://artofsystems.blogspot.com/2007/08/survey-of-user-profile-fields.html"&gt;A Survey of User Profile Fields&lt;/a&gt;.&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;[1] Corkd was especially bad. I felt obliged to fully research my wine before entering it in. Le Cigare Volant led to some reading on &lt;a href="http://www.bonnydoonvineyard.com/"&gt;Bonny Doon&lt;/a&gt; and finally to &lt;a href="http://wine.appellationamerica.com/wine-review/136/Randall-Grahm-on-Terroir.html"&gt;The Phenomenology of Terroir: A Meditation&lt;/a&gt; by Randall Grahm. Some hours later, it was on to other, mostly less compelling, sites.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;[2] I was at adactio because of &lt;a href="http://brianoberkirch.com/"&gt;Brian Oberkirch&lt;/a&gt;'s excellent (if oddly stereo-mixed) &lt;a href="http://www.brianoberkirch.com/2007/01/17/edgework-jeremy-keith/"&gt;Edgework podcast interview&lt;/a&gt; with Jeremy. I drive with only one earbud in (under the possibly mistaken impression that it's legal) so I could only hear Jeremy's answers. It was frustrating at first, but I got to kind of like it.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags:&lt;a href="http://technorati.com/tag/daytripr" rel="tag"&gt;daytripr&lt;/a&gt;,&lt;a href="http://www.blogger.com/%5C%20//technorati.com/tag/icon" rel="tag"&gt;icon&lt;/a&gt;,&lt;a href="http://technorati.com/tag/socialnetwork" rel="tag"&gt;socialnetwork&lt;/a&gt;,&lt;a href="http://www.blogger.com/%5C%20/technorati.com/tag/design" rel="tag"&gt;design&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-9138668321527560507?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/9138668321527560507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=9138668321527560507' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/9138668321527560507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/9138668321527560507'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2007/07/buddy-icons-avatars-and-profile-images.html' title='Buddy Icons, Avatars and Profile Images'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-5766553013352161754</id><published>2007-06-01T19:57:00.000-07:00</published><updated>2007-06-01T20:11:31.104-07:00</updated><title type='text'>Trains, Twitter and MUDs</title><content type='html'>I worked for a company in Texas that got bought by a company in Virginia. We ended up with developers in both Dallas and Fairfax. Communication became a problem. Now, the underlying issue wasn't the geographical separation, but we didn't know that at the time and attempted a technological fix. We set up two computers, each with a webcam, microphone and speakers. We turned them on in the morning running Skype (which had excellent echo cancellation assuming you placed the speakers and microphone carefully) and Yahoo IM Video. And voila, we had a virtual window between the two offices.&lt;br /&gt;&lt;br /&gt;Turns out the video wasn't all that useful. The camera was never pointed the right way, the viewing angle wasn't wide enough, the picture was low-res, and, most importantly, you had to be looking at it for it to do you any good.&lt;br /&gt;&lt;br /&gt;The audio, on the other hand, was so effective it was eerie.&lt;br /&gt;&lt;br /&gt;The Fairfax kiosk was set up in an empty cubicle among the developers. It was sensitive enough so that you could, without looking up from what you were typing, raise your voice and yell across to the other office. "Hey dude, you broke the build!" (pause) "No way, my check-in was clean, the log says it was you." And so forth.&lt;br /&gt;&lt;br /&gt;There was a train track that ran behind the office building in Dallas. If the room in Virginia was quiet, you could hear the whistle as it passed over a crossing. I think that whistle was the most important part. It didn't really communicate anything important on the surface, but it provided an immediate, visceral connection from one office to another without taking up any particular amount of your conscious awareness. You just sort of felt connected when you heard that whistle.&lt;br /&gt;&lt;br /&gt;That's what Twitter does for distributed collections of friends. It provides a sort of continual background feeling of connectedness, even if the surface messages are often trivial. Of course, scanning over Twitterrific takes some of your valuable attention, but if you've ever "lived in" a text-based MUD you'll understand how the act of reading can become unconscious. You just sort of "hear" the messages in the background instead of attending to them in the way you'd read a blog posting or even an IM.&lt;br /&gt;&lt;br /&gt;Looking at Twitter from the outside, I can see how it seems strange to care about the minutia of other people's lives. But it's exactly the stuff you'd get if you worked in the same office with those people. The constant background hum of all sorts of information, from who's pregnant to who's on a business trip to Portland to who's broken the build.  Twitter sort of turns your life into a text-based MUD. I'm not sure if that's an entirely good thing, but if you've made the decision to have a geographically distributed set of friends, it seems like a very practical solution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-5766553013352161754?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/5766553013352161754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=5766553013352161754' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5766553013352161754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5766553013352161754'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2007/06/trains-twitter-and-muds.html' title='Trains, Twitter and MUDs'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-5768053115015820125</id><published>2007-04-03T16:06:00.000-07:00</published><updated>2008-12-12T20:45:03.132-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='barcamp'/><category scheme='http://www.blogger.com/atom/ns#' term='dallas'/><title type='text'>Demo Camp Dallas 2 : Geek Show and Tell</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_2tLgOGpsEVE/RhLiuir6SgI/AAAAAAAAABo/11uO89wcOSc/s1600-h/democamp_dallas_colour_rgb.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_2tLgOGpsEVE/RhLiuir6SgI/AAAAAAAAABo/11uO89wcOSc/s400/democamp_dallas_colour_rgb.png" alt="" id="BLOGGER_PHOTO_ID_5049347421448587778" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Remember how much fun grade-school show and tell was? Recapture those thrilling days of yesteryear with a visit to Demo Camp Dallas 2, Geek Show and Tell:&lt;br /&gt;&lt;br /&gt;&lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="http://barcamp.org/DemoCampDallas2" target="_blank"&gt;http://barcamp.org/DemoCampDallas2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's at Viewzi World Headquarters in Deep Ellum on Monday, April 23rd at 6:30 PM. Complete details and a signup sheet on the Wiki page linked above.&lt;br /&gt;&lt;br /&gt;For those not familiar: Five people get fifteen minutes apiece to demonstrate their technology-related project. Ten minutes to demo, five minutes for audience feedback. The project can be software (web services are popular), art (as long as it's technology-related somehow) or anything else you can drag up to the front of the room. NO POWERPOINT presentations, the focus has to be the thing itself[1] The pace is very fast, we aim for about 30 seconds downtime between demos, so demoistas are requested to show up 30 minutes in advance for a quick setup/runthrough.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;[1] As opposed to the &lt;a href="http://www.philosophypages.com/dy/t.htm#thing"&gt;thing-in-itself&lt;/a&gt;, which would be tough to demo. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-5768053115015820125?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/5768053115015820125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=5768053115015820125' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5768053115015820125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5768053115015820125'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2007/04/demo-camp-dallas-2-geek-show-and-tell.html' title='Demo Camp Dallas 2 : Geek Show and Tell'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_2tLgOGpsEVE/RhLiuir6SgI/AAAAAAAAABo/11uO89wcOSc/s72-c/democamp_dallas_colour_rgb.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-3838987703633146821</id><published>2007-03-20T21:22:00.000-07:00</published><updated>2008-12-12T20:45:03.279-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dallas'/><title type='text'>Dallas, Texas : Iconic &amp;&amp; !Ironic</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_2tLgOGpsEVE/RgC3Fy_EIII/AAAAAAAAABc/k4LgTQZKd1Q/s1600-h/local_rig.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_2tLgOGpsEVE/RgC3Fy_EIII/AAAAAAAAABc/k4LgTQZKd1Q/s400/local_rig.jpg" alt="" id="BLOGGER_PHOTO_ID_5044232892868468866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;My wife and I have moved back and forth from NYC to Dallas a couple of times. Culture shock is an accepted risk. NYC is iconic, but is aware of and amused by it. Dallas is iconic with a complete and total lack of irony. I took the picture above a couple days ago from a spot just down the block. My New York mind[1] is thinking something along the lines of "What a hoot, there's a frigging oil well in a suburban neighborhood[2], do these people even know they're parodies of themselves?" while my Texas mind is thinking, "Whoa, an exploratory rig, bet they're looking for &lt;a href="http://en.wikipedia.org/wiki/Barnett_Shale"&gt;Barnett Shale&lt;/a&gt; natural gas, better help my in-laws check their deed for mineral rights."&lt;br /&gt;&lt;br /&gt;No real point, other than to say I'm leaning toward the Texan view of things at the moment. It allows me to accept that the vast quantities of toxic &lt;a href="http://en.wikipedia.org/wiki/Drilling_fluid"&gt;drilling mud&lt;/a&gt; are somebody else's problem and just enjoy the view of the frigging oil well in a suburban neighborhood.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1] New York seems to dominate our family stories, although we didn't really live there that big a percentage of the time. Claiming a "New York state of mind" is maybe a might presumptuous, but makes the blog entry easier to write.&lt;br /&gt;&lt;br /&gt;[2] It's actually in a field right next to the neighborhood. The field previously held a small herd of cows, which was nicely, if quietly, doing its part to make Texas proud. Right before the rig went up, there was a sign indicating that a small evangelical sect was going to put up a church. Yes, the field will have held cows, rigs and fundies within the space of a year. If I weren't in Texan-mode, I might find that smirk-worthy, but I am so it's just normal.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-3838987703633146821?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/3838987703633146821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=3838987703633146821' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3838987703633146821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3838987703633146821'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2007/03/dallas-texas-iconic-ironic.html' title='Dallas, Texas : Iconic &amp;&amp; !Ironic'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2tLgOGpsEVE/RgC3Fy_EIII/AAAAAAAAABc/k4LgTQZKd1Q/s72-c/local_rig.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-9023158955268745374</id><published>2007-03-12T15:36:00.000-07:00</published><updated>2008-12-12T20:45:03.448-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><title type='text'>OpenID and FOAF/hCard : Live from SXSWi</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_2tLgOGpsEVE/RfXcFUwBzuI/AAAAAAAAABU/BcW5ZJkb1ME/s1600-h/halcyon.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_2tLgOGpsEVE/RfXcFUwBzuI/AAAAAAAAABU/BcW5ZJkb1ME/s400/halcyon.jpg" alt="" id="BLOGGER_PHOTO_ID_5041177341938749154" border="0" /&gt;&lt;/a&gt;I've escaped the SXSWi madness for a bit and am sitting in Halcyon, a ratty-couch-and-coffee-with-wifi cafe on 4th street in Austin, ruminating on &lt;a href="http://openid.net/"&gt;OpenID&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://factoryjoe.com/blog/"&gt;Chris Messina&lt;/a&gt; set up a great lunchtime get-together after an OpenID panel failed to materialize. It was a good scene. The discussion was wide-ranging, but I especially liked the bit about skipping the non-security-hole-related OpenID 2.0 complexity and using existing (pseudo) standards like &lt;a href="http://www.foaf-project.org/"&gt;FOAF&lt;/a&gt;/&lt;a href="http://gmpg.org/xfn/"&gt;XFN&lt;/a&gt; and &lt;a href="http://microformats.org/wiki/hcard"&gt;hCard&lt;/a&gt; for profile exchange. Among other cool things, it means the range of exchangeable things can expand without any changes to OpenID.&lt;br /&gt;&lt;br /&gt;It isn't glorious, it won't sell into the enterprise and it won't result in many patents, but keeping things as simple as possible and focusing on the smallest useful solution is the way to keep OpenID from turning into another WS-* debacle.&lt;br /&gt;&lt;br /&gt;I started a bit of a rant on the subject during lunch, but Chris shut me up by suggesting that demonstrating an implementation would probably be the most effective argument against the 2.0 complexification. I'd follow that up with a request: if you're at all interested in the subject, please read the &lt;a href="http://openid.net/specs.bml"&gt;current set of specs&lt;/a&gt;, sign up for the &lt;a href="http://openid.net/mailman/listinfo/specs"&gt;OpenID specs list&lt;/a&gt; and make your (informed) opinion known. There's enough time to head 'em off at the pass, but quick action is vital before the drafts calcify.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags:&lt;a href="http://technorati.com/tag/openid" rel="tag"&gt;openid&lt;/a&gt;,&lt;a href="http://technorati.com/tag/hcard" rel="tag"&gt;hcard&lt;/a&gt;,&lt;a href="http://technorati.com/tag/sxsw" rel="tag"&gt;sxsw&lt;/a&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-9023158955268745374?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/9023158955268745374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=9023158955268745374' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/9023158955268745374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/9023158955268745374'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2007/03/openid-and-foafhcard-live-from-sxswi.html' title='OpenID and FOAF/hCard : Live from SXSWi'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2tLgOGpsEVE/RfXcFUwBzuI/AAAAAAAAABU/BcW5ZJkb1ME/s72-c/halcyon.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-1772823808006394195</id><published>2007-02-07T22:36:00.000-08:00</published><updated>2008-12-12T20:45:03.712-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='daytripr'/><title type='text'>DayTripr and OpenID</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_2tLgOGpsEVE/RcrJNH_CAoI/AAAAAAAAABI/ftfRr2O5mDY/s1600-h/logo.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_2tLgOGpsEVE/RcrJNH_CAoI/AAAAAAAAABI/ftfRr2O5mDY/s400/logo.jpg" alt="" id="BLOGGER_PHOTO_ID_5029053161231483522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I'm frantically adding demoable stuff to &lt;a href="http://daytripr.com/"&gt;DayTripr&lt;/a&gt; in preparation for &lt;a href="http://barcamp.org/DemoCampDallas1"&gt;Demo Camp Dallas 1&lt;/a&gt; next week. I just finished up a really half-baked integration with &lt;a href="http://openid.net/"&gt;OpenID&lt;/a&gt;. OpenID is an important part of the "war against the portals"[1], but let's face it, no real user is going to log in via OpenID any time soon. But I couldn't help myself. The uncontrollable urge to implement is a hazard of being a technologist, I suppose.  Next up: A &lt;a href="http://tektacular.com/wiki/show/Public+Content+Sharing"&gt;Public Content Sharing&lt;/a&gt; proof of concept. Equally useless in the short term, equally fun to code. I am a weak person.&lt;br /&gt;&lt;br /&gt;[&lt;span style="font-size:85%;"&gt;1] Deportalization. Don't like that term, need a new one. Anybody remember Jefferson's Mosquito Fleet from American History class? Never mind, mustn't be negative.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags:&lt;a href="http://technorati.com/tag/daytripr" rel="tag"&gt;daytripr&lt;/a&gt;,&lt;a href="http://technorati.com/tag/democampdallas" rel="tag"&gt;democampdallas&lt;/a&gt;,&lt;a href="http://technorati.com/tag/openid" rel="tag"&gt;openid&lt;/a&gt;, &lt;a href="http://technorati.com/tag/democampdallas1" rel="tag"&gt;democampdallas1&lt;/a&gt;,&lt;a href="http://technorati.com/tag/deportalization" rel="tag"&gt;deportalization&lt;/a&gt;,&lt;a href="http://technorati.com/tag/publiccontentsharing" rel="tag"&gt;publiccontentsharing&lt;/a&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-1772823808006394195?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/1772823808006394195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=1772823808006394195' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/1772823808006394195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/1772823808006394195'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2007/02/daytripr-and-openid.html' title='DayTripr and OpenID'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_2tLgOGpsEVE/RcrJNH_CAoI/AAAAAAAAABI/ftfRr2O5mDY/s72-c/logo.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-784898409656985092</id><published>2007-02-05T08:22:00.000-08:00</published><updated>2008-12-12T20:45:03.961-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='barcamp'/><category scheme='http://www.blogger.com/atom/ns#' term='dallas'/><title type='text'>Demo Camp Dallas 1 : Geek Bread and Circus</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_2tLgOGpsEVE/RcdosX_CAnI/AAAAAAAAAA8/cYMosw5FVcc/s1600-h/democamp_dallas_colour_rgb.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_2tLgOGpsEVE/RcdosX_CAnI/AAAAAAAAAA8/cYMosw5FVcc/s400/democamp_dallas_colour_rgb.png" alt="" id="BLOGGER_PHOTO_ID_5028102620544369266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Well, just leaned another friend is thinking of moving to Portland. The exodus from Dallas must be stopped, the restive geeks need their bread and circus:&lt;br /&gt;&lt;br /&gt;&lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="http://barcamp.org/DemoCampDallas1" target="_blank"&gt;http://barcamp.org/DemoCampDallas1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Also, I need a deadline to get me motivated. We need people to help organize, demo, and just show up. It's looking like Feb 15th out in Southlake at Sabre labs. Probably a fairly small group this go-round (targeting 30), but some interesting people should be there.&lt;br /&gt;&lt;br /&gt;Thanks to Kevin Marvin and the group of geeks he got together at the Bar Belmont for inspiring this madness.  And sorry, Giovanni, for turning my email to you into a blog posting, I swear it wasn't a form letter.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags:&lt;a href="http://technorati.com/tag/democamp" rel="tag"&gt;democamp&lt;/a&gt;,&lt;a href="http://technorati.com/tag/democampdallas" rel="tag"&gt;democampdallas&lt;/a&gt;,&lt;a href="http://technorati.com/tag/democampdallas1" rel="tag"&gt;democampdallas1&lt;/a&gt;,&lt;a href="http://technorati.com/tag/dallas" rel="tag"&gt;dallas&lt;/a&gt;,&lt;a href="http://technorati.com/tag/barcampdallas" rel="tag"&gt;barcampdallas&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-784898409656985092?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/784898409656985092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=784898409656985092' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/784898409656985092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/784898409656985092'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2007/02/demo-camp-dallas-1-geek-bread-and.html' title='Demo Camp Dallas 1 : Geek Bread and Circus'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_2tLgOGpsEVE/RcdosX_CAnI/AAAAAAAAAA8/cYMosw5FVcc/s72-c/democamp_dallas_colour_rgb.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-7354907171299079142</id><published>2007-01-20T16:39:00.000-08:00</published><updated>2008-12-12T20:45:04.142-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='barcamp'/><category scheme='http://www.blogger.com/atom/ns#' term='dallas'/><title type='text'>HalfBaked.com - Entrepreneurial Improv</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_2tLgOGpsEVE/RbK-zhFC8QI/AAAAAAAAAAw/cdOGEXQkrLE/s1600-h/IMG_0687_2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_2tLgOGpsEVE/RbK-zhFC8QI/AAAAAAAAAAw/cdOGEXQkrLE/s320/IMG_0687_2.png" alt="" id="BLOGGER_PHOTO_ID_5022286326733664514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I stole the idea for my Bar Camp Dallas 3 session. It was a good decision. &lt;a href="http://www.amitgupta.com/blog/shoebox/2006/10/03/halfbakedcom-entrepreneurial-improv/"&gt;Amit Gupta&lt;/a&gt; and, indirectly, &lt;a href="http://500hats.typepad.com/500blogs/2006/08/foo_halfbaked_w.html"&gt;Dave McClure&lt;/a&gt;, &lt;a href="http://www.cs.unc.edu/%7Erademach/"&gt;James Levine&lt;/a&gt; and &lt;a href="http://www.simplyhired.com/"&gt;Paul Rademacher&lt;/a&gt; are excellent people to steal from.&lt;br /&gt;&lt;br /&gt;Here's the idea: Get a group of geeks in a room. Have them yell out thirty or forty random words. Divide everyone up into teams of five. Each team picks two of the words and adds ".com" to form a company name. Give each team fifteen minutes to come up with a business plan, and five minutes to present to a panel of judges. Hilarity ensues.&lt;br /&gt;&lt;br /&gt;For this go-round, the judges were Jim Young of &lt;a href="http://www.jambo.net/"&gt;Jambo&lt;/a&gt; and Giovanni Gallucci of &lt;a href="http://www.theagencyblog.com/"&gt;AgencyBlog&lt;/a&gt;. The teams were LatexRobot.com (don't ask), g.littr.com (dumpster diving social network), UpTownish.com (high end dating for Dallas posers) and ToothBling.com (electronics for the mouth). The unanimous winner was g.littr.com, the strangely compelling and unsettlingly probably tool for those who live by the dumpster.&lt;br /&gt;&lt;br /&gt;The key to running one of these things seems to be an absolutely ruthless approach to timing. Keep the pressure up, move things along, and you can get through four teams in an hour session with time to spare.&lt;br /&gt;&lt;br /&gt;It's a total blast to watch a group of relative strangers gel into a startup team. The energy is addictive. There may be a video, I'll link to it when it shows up.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags:&lt;a href="http://technorati.com/tag/barcamp" rel="tag"&gt;barcamp&lt;/a&gt;,&lt;a href="http://technorati.com/tag/barcampdallas" rel="tag"&gt;barcampdallas&lt;/a&gt;,&lt;a href="http://technorati.com/tag/barcampdallas3" rel="tag"&gt;barcampdallas3&lt;/a&gt;,&lt;a href="http://technorati.com/tag/halfbaked" rel="tag"&gt;halfbaked&lt;/a&gt;,&lt;a href="http://technorati.com/tag/halfbakeddotcom" rel="tag"&gt;halfbakeddotcom&lt;/a&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-7354907171299079142?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/7354907171299079142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=7354907171299079142' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/7354907171299079142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/7354907171299079142'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2007/01/halfbakedcom-entrepreneurial-improv.html' title='HalfBaked.com - Entrepreneurial Improv'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_2tLgOGpsEVE/RbK-zhFC8QI/AAAAAAAAAAw/cdOGEXQkrLE/s72-c/IMG_0687_2.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-8394854405843272614</id><published>2007-01-03T22:49:00.000-08:00</published><updated>2007-01-08T18:58:35.657-08:00</updated><title type='text'>Deportalization, Microformats and RSS</title><content type='html'>I recently had a long lunch discussion with &lt;a href="http://tektactic.com/"&gt;Kinan Sweidan&lt;/a&gt; of &lt;a href="http://ximda.com/"&gt;Ximda&lt;/a&gt;. I was going to try to convince him to share some &lt;a href="http://tagmycity.com/"&gt;TagMyCity&lt;/a&gt; content with &lt;a href="http://daytripr.com/"&gt;DayTripr&lt;/a&gt;, but about two seconds into my pitch I had a vision of every niche web service in the world trying to make a content sharing deal with every other niche web service in the world. The thought made me very tired.&lt;br /&gt;&lt;br /&gt;It's not so much the content itself. Most of the content on a site isn't strategic, and it there's no harm in sharing it. It's the need to sit down and talk about the terms and conditions, and the necessity to write integration code.&lt;br /&gt;&lt;br /&gt;What eventually emerged was that you need two things.&lt;br /&gt;&lt;br /&gt;You need a standard license, something Creative Commons-ish, that sets out just what the shared content can be used for, and what the obligations are. Maybe you have to link back to the original source in some particular way. Or something. Does such a license already exist? Can one of the existing Open Source licenses be adapted? Not sure, this is all in brainstorming territory&lt;br /&gt;&lt;br /&gt;And you need a simple, standard way to share the content. Something like a set of web pages containing all the content to be shared, marked up in microformatted HTML, with a live RSS feed of any new sharable content. The technology to do this is trivial, it's mostly a matter of deciding just what needs to be made available.&lt;br /&gt;&lt;br /&gt;You put up a page with the license, a link to the content and a link to the RSS feed. And you're done, or at least have a good solid start.&lt;br /&gt;&lt;br /&gt;The two things above don't begin to cover all the possible ways that two sites could cooperate, but I'm going to claim that they cover 80% of the first couple of steps. If it turns out a closer relationship is worthwhile, then the sites already have some experience with each other, if not, not too much time and energy has been wasted.&lt;br /&gt;&lt;br /&gt;I'm thinking it would be a fun to have a first pass working by &lt;a href="http://barcamp.org/BarCampDallas"&gt;BarCampDallasIII&lt;/a&gt;, but there's not much time between now and then, so it might be SXSWi before there's anything concrete to look at.&lt;br /&gt;&lt;br /&gt;Oh yeah, and the idea needs a catchy name and a cool logo. Anybody  have thoughts? Well, write 'em down and we can talk about them at Bar Camp.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags:&lt;a href="http://technorati.com/tag/deportalization" rel="tag"&gt;deportalization&lt;/a&gt;,&lt;a href="http://technorati.com/tag/rss" rel="tag"&gt;rss&lt;/a&gt;,&lt;a href="http://technorati.com/tag/microformats" rel="tag"&gt;microformats&lt;/a&gt;,&lt;a href="http://technorati.com/tag/barcamp" rel="tag"&gt;barcamp&lt;/a&gt;,&lt;a href="http://technorati.com/tag/barcampdallas3" rel="tag"&gt;barcampdallas3&lt;/a&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-8394854405843272614?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/8394854405843272614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=8394854405843272614' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/8394854405843272614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/8394854405843272614'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2007/01/deportalization-microformats-and-rss.html' title='Deportalization, Microformats and RSS'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-6588944132899452870</id><published>2007-01-01T15:44:00.000-08:00</published><updated>2008-12-12T20:45:04.425-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='barcamp'/><category scheme='http://www.blogger.com/atom/ns#' term='dallas'/><title type='text'>Bar Camp Dallas III</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_2tLgOGpsEVE/RZmfA7xh5FI/AAAAAAAAAAk/r4jB3ssZifg/s1600-h/bcd_smaller.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_2tLgOGpsEVE/RZmfA7xh5FI/AAAAAAAAAAk/r4jB3ssZifg/s320/bcd_smaller.jpg" alt="" id="BLOGGER_PHOTO_ID_5015214498448008274" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Well, we're back in Dallas full time now, just in time for Bar Camp Dallas III. Not quite sure what happened with number two (we were in NYC when it was scheduled) but I have great hopes for this, the third installment. Not being an organizer, I don't have any inside info to impart, but check out:&lt;br /&gt;&lt;p&gt;&lt;a href="http://barcamp.org/BarCampDallas"&gt;http://barcamp.org/BarCampDallas&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Running very, very tight on time but I'm hoping to arrange a "HalfBaked.com : Entrepreneurial Improv Theater" session like &lt;a href="http://www.amitgupta.com/blog/shoebox/2006/10/03/halfbakedcom-entrepreneurial-improv/"&gt;the one at Bar Camp NYC 2&lt;/a&gt; and possibly, maybe (probably not?) a mini-&lt;a href="http://barcamp.org/DemoCamp"&gt;DemoCamp&lt;/a&gt;. If you're interested in either one of those things, please contact me ASAP and we'll see what we can make happen.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/barcamp" rel="tag"&gt;barcamp&lt;/a&gt;, &lt;a href="http://technorati.com/tag/dallas" rel="tag"&gt;dallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/barcampdallas3" rel="tag"&gt;barcampdallas3&lt;/a&gt;, &lt;a href="http://technorati.com/tag/barcampdallas" rel="tag"&gt;barcampdallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/barcampdallasiii" rel="tag"&gt;barcampdallasiii&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-6588944132899452870?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/6588944132899452870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=6588944132899452870' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/6588944132899452870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/6588944132899452870'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2007/01/bar-camp-dallas-iii.html' title='Bar Camp Dallas III'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_2tLgOGpsEVE/RZmfA7xh5FI/AAAAAAAAAAk/r4jB3ssZifg/s72-c/bcd_smaller.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-8271779854984729757</id><published>2006-12-24T12:23:00.000-08:00</published><updated>2008-12-12T20:45:04.593-08:00</updated><title type='text'>Ego Surfing : Merry Christmas to Me</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_2tLgOGpsEVE/RY7lvwD9YTI/AAAAAAAAAAY/ARCtWfx1hgU/s1600-h/top-o-the-google-crop.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_2tLgOGpsEVE/RY7lvwD9YTI/AAAAAAAAAAY/ARCtWfx1hgU/s320/top-o-the-google-crop.png" alt="" id="BLOGGER_PHOTO_ID_5012196043828060466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I've been in a multi-year Google-fight with two other Christopher St. Johns, but as of yesterday I've beaten out the 70's B-Movie icon and am reigning champion. Go me!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-8271779854984729757?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/8271779854984729757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=8271779854984729757' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/8271779854984729757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/8271779854984729757'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/12/ego-surfing-merry-christmas-to-me.html' title='Ego Surfing : Merry Christmas to Me'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_2tLgOGpsEVE/RY7lvwD9YTI/AAAAAAAAAAY/ARCtWfx1hgU/s72-c/top-o-the-google-crop.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-7646637175578726547</id><published>2006-12-21T16:06:00.000-08:00</published><updated>2006-12-23T07:45:20.299-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><title type='text'>Web 2.0, Bootstrapping and those Evil VCs</title><content type='html'>I normally try to avoid jumping on the bandwagon with my blog postings, but I'm making an exception this time because of this post on &lt;a href="http://avc.blogs.com/a_vc/2006/12/web_20_is_a_gif.html"&gt;Web 2.0 and VCs&lt;/a&gt; in Fred Wilson's &lt;a href="http://avc.blogs.com/"&gt;A VC&lt;/a&gt; blog. Go ahead and read it now, it's a much more important post than this one...&lt;br /&gt;&lt;br /&gt;A little while back I had to do the numbers for a startup business plan. The decision had been made to go for funding, but being an engineer I just had to run the bootstrapping scenario as well. As the post above describes, we had a minuscule burn rate while we were building the product, but after that things got trickier. It came down to a surprisingly risky self-funded growth strategy or an infusion of fairly major cash at about the eighteen month mark.&lt;br /&gt;&lt;br /&gt;The slow-growth route turned out to be risky for several reasons[1]: The strategy required us to stay tiny, but that meant depending on just a few customers making up a major percentage of our business. We simply wouldn't be big enough to acquire or support more and we wouldn't have the cash to be hiring. To make the numbers work I had to assume that we got customers fast and kept them forever. Sales and support is shockingly expensive (at least it was to me at that point) If we lost customers we immediately went negative cash flow, which is a very ugly thing when there isn't much left in the bank. And there's that little matter of lag time between hiring salespeople and getting any benefit from them. Just a little bad luck and we were out of business.&lt;br /&gt;&lt;br /&gt;Competition was another risk. We knew of several other groups doing similar products. There was much brainstorming on niche strategies (make the slice small enough and you get your own piece of pie), but there are limits. It's hard to eliminate every last competitor without putting yourself in a unsurvivably small niche. You can do it for a while, but if you have any intention at all of growing you have to consider how long it takes to get your product to a larger market. The numbers had to assume we had a magically defensible series of larger and larger markets to play in as we (oh so slowly) grew.&lt;br /&gt;&lt;br /&gt;Finally, there was focus. The slow-growth strategy meant an awful lot of "doing this to survive long enough to do this other thing we really want to do." Not necessarily a business risk, but it's a big motivation risk. It can take a very long time to bootstrap your way into a "real" business. Why even do a startup unless you've got a passionate belief in your product idea and want to see it on the market sooner rather than later? Watching the spreadsheet extend out year after year off to the right before we were "there" was sobering.&lt;br /&gt;&lt;br /&gt;Of course, VCs are evil and must be avoided at all costs, but to anyone considering bootstrapping all the way up I recommend running the numbers both ways.[2] You might find the devil starts to have a certain appeal when you hit that high growth part of the curve.&lt;br /&gt;&lt;br /&gt;The end was, sort of like this post, anticlimactic: things stopped very suddenly and I never found out how accurate my numbers were. Maybe this time around I'll get to see...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1] All of which will be in any good business book or course on startups. But it's one thing to read it and another thing to live it :-)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[2] The &lt;a href="http://enterpriseforum.mit.edu/entrepreneurship/courses/"&gt;Sloan School OpenCourseWare&lt;/a&gt; site is good. Somewhere in there are lectures and notes that mention all of the above points and more, plus pre-filled-in business plans with actual numbers.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-7646637175578726547?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/7646637175578726547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=7646637175578726547' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/7646637175578726547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/7646637175578726547'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/12/web-20-bootstrapping-and-those-evil-vcs.html' title='Web 2.0, Bootstrapping and those Evil VCs'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-246045197554628862</id><published>2006-12-18T20:04:00.001-08:00</published><updated>2006-12-18T20:14:53.563-08:00</updated><title type='text'>Where's My Space Sled?</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt; &lt;a href="http://www.flickr.com/photos/cks/326787752/" title="photo sharing"&gt;&lt;img src="http://static.flickr.com/144/326787752_a621611829_m.jpg" alt="" style="border: 2px solid rgb(0, 0, 0);" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="margin-top: 0px;font-size:0;" &gt;  &lt;a href="http://www.flickr.com/photos/cks/326787752/"&gt;Where's My Space Sled?&lt;/a&gt; &lt;br /&gt; Originally uploaded by &lt;a href="http://www.flickr.com/people/cks/"&gt;cks&lt;/a&gt;. &lt;/span&gt;&lt;/div&gt;To heck with jetbelts and flying cars, I want a Marquardt Space Sled. This one (which you gotta figure is probably the only one) is in the Air Force Museum in Dayton. Up close it looks even more like a movie prop. It's a welcome note of whimsy in a section of the museum dedicated to ICBMs. &lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-246045197554628862?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/246045197554628862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=246045197554628862' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/246045197554628862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/246045197554628862'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/12/where-my-space-sled.html' title='Where&amp;#39;s My Space Sled?'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-890851371576263335</id><published>2006-12-13T17:14:00.000-08:00</published><updated>2007-08-04T16:24:04.733-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='daytripr'/><title type='text'>Amazon S3</title><content type='html'>It's about four months late, but this weekend I decided to try out Amazon's &lt;a href="http://aws.amazon.com/ec2"&gt;Elastic Compute Cloud&lt;/a&gt; with an eye towards moving off the hosted server I use for &lt;a href="http://daytripr.com/"&gt;DayTripr&lt;/a&gt;. For those living in a cave, EC2 lets you upload virtual machine images to Amazon, where they will be run on Amazon's massive compute farm. EC2 will revolutionize the world, is both a floor wax and dessert topping, and will render traditional hosting services obsolete any minute now.&lt;br /&gt;&lt;br /&gt;You'll notice that the title of this post is not "Amazon EC2", however. That's because the Beta program is currently full. Darnit. But to use EC2 effectively, you've got to understand Amazon's &lt;a href="http://aws.amazon.com/s3"&gt;Simple Storage System&lt;/a&gt; so I decided to spend a few hours playing with S3 as a consolation prize.&lt;br /&gt;&lt;br /&gt;I'm eventually do a full writeup over on &lt;a href="http://www.distributopia.com/"&gt;Distributopia&lt;/a&gt; but for now I've just got a few comments:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The S3 SOAP interface is largely worthless. Amazon made the extremely dubious decision to go with the long-abandonded Microsoft-only[1] DIME format for SOAP attachments. You can include data in the body of a request, but for big files it's best to use attachments. Admittedly, there's a gaping void in the SOAP world where attachments should go, but still, DIME? Sheesh. So use the REST interface.&lt;/li&gt;&lt;li&gt;The S3 protocol is conceptually simple, but uses a custom digital-signature setup that is a pain to get right. So unless you just want to play around a bit, use a toolkit. The Java-based toolkit Amazon provides is incomplete (no permissions API), so use a 3rd party library.  &lt;a href="https://jets3t.dev.java.net/"&gt;jets3t&lt;/a&gt; was the first one I tried and I was happy with it.&lt;/li&gt;&lt;li&gt;The EC2 instances are not persistent. You get some reasonably large amount of virtual disk space, but it's not absolutely guaranteed to always be there. The suggestion is to ship stuff you want to keep over to S3 (they're meant to work as a pair, and the EC2 to S3 bandwidth is free), but if you're using an RDBMS that presents  certain problems. Doing hourly backups and shipping those over is one solution, but a very much cooler one is to set up a distributed file system. The reason this is a totally cool solution it that it lets you finally make practical use of that stupid "Advanced File Systems" course you took back in college. Take that non-computer-science majors.&lt;/li&gt;&lt;/ul&gt;So, I wait patiently for my turn at the Beta trough so I can port over DayTripr and instantly be massively scalable[2]. I'm looking forward to it.&lt;br /&gt;&lt;br /&gt;[&lt;span style="font-size:85%;"&gt;1] Ok, so DIME isn't exactly MS-only. I know, I implemented DIME support for GLUE. But it might as well be. And besides, even MS has abandoned it. For those who like pain, here's &lt;a href="http://www.w3.org/TR/soap12-mtom/"&gt;MTOM&lt;/a&gt;, the latest in a long line of misbegotten specs from those lovable professional spec-writers at the W3C.&lt;br /&gt;&lt;br /&gt;[2] Not.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/daytripr" rel="tag"&gt;daytripr&lt;/a&gt;,&lt;a href="http://technorati.com/tag/amazon%20s3" rel="tag"&gt;amazon s3&lt;/a&gt;,&lt;a href="http://technorati.com/tag/amazon%20sc2" rel="tag"&gt;amazon sc2&lt;/a&gt;,&lt;a href="http://technorati.com/tag/grid" rel="tag"&gt;grid&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-890851371576263335?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/890851371576263335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=890851371576263335' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/890851371576263335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/890851371576263335'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/12/amazon-s3.html' title='Amazon S3'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-1704817415414294080</id><published>2006-12-11T18:13:00.000-08:00</published><updated>2006-12-11T19:18:57.795-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='daytripr'/><title type='text'>DayTripr :  Build Something You Want</title><content type='html'>I started &lt;a href="http://daytripr.com/"&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;DayTripr&lt;/span&gt;&lt;/a&gt; because I wanted to use it, and I have been.[1] The most surprising thing so far has been just how soon I forget most of my life. I'm talking trips from last month that it turns out I barely remember. (We went there? Oh yeah! And that other place, too. And I totally forgot that place we saw that we want to check out next time!)&lt;br /&gt;&lt;br /&gt;Another fun thing has been reading over pages from other family members (I roped my Dad into helping out with testing) It makes me feel like I'm participating even though we're living 1600 miles away.&lt;br /&gt;&lt;br /&gt;That's great and all, but just because I use it doesn't mean anyone else will. There are certainly sufficient technical glitches to be &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;off putting&lt;/span&gt; to all but the most dedicated user. So what makes &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;DayTripr&lt;/span&gt; special? Why should people use it in preference (or in addition to) the plethora of "Travel 2.0" sites out there? I'm still working out the full answer, but in the mean time, here's a couple quick things I'm pretty sure about:&lt;br /&gt;&lt;br /&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;DayTripr&lt;/span&gt; isn't about airlines and hotels. There's an easy stream of money from facilitating reservations, but &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;DayTripr&lt;/span&gt; is about day trips, &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;darnit&lt;/span&gt;. One day and one day only.[2] By removing about 90% of the focus of a normal travel site, &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;DayTripr&lt;/span&gt; is free to focus on other stuff.&lt;br /&gt;&lt;br /&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;DayTripr&lt;/span&gt; is evolving to be about people, not about places. Think of it as a personal travel planner/diary that you want to share with friends, not "please rank this hotel on a scale of one to five stars." I don't think the content on &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;DayTripr&lt;/span&gt; is going to compare to first class travel writing, but I want the technology to support the sort of personal storytelling that I like to read.&lt;br /&gt;&lt;br /&gt;Easy to say, potentially hard to do. I better get coding.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1] I just finished &lt;a href="http://www.kschroeder.com/"&gt;Karl Schroeder&lt;/a&gt;'s &lt;a href="http://www.amazon.com/gp/product/0765350785?ie=UTF8&amp;tag=codeporn-20&amp;amp;linkCode=as2&amp;camp=1789&amp;amp;creative=9325&amp;creativeASIN=0765350785"&gt;Lady of Mazes&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=codeporn-20&amp;amp;l=as2&amp;o=1&amp;amp;a=0765350785" alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1" /&gt;. The book involves how choice of technology affects culture, from the personal level to the experience of a whole civilization. Using &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;DayTripr&lt;/span&gt; isn't quite as extreme as total immersion virtual reality, but hey, you work with what you got.&lt;br /&gt;&lt;br /&gt;[2] &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;Ok&lt;/span&gt;, maybe a day and a half. Why not? But that's not what it's about.&lt;br /&gt;&lt;br /&gt;[3] I just made that up. But it sounds good, and for all I know it really is a truism. And if it isn't, it ought to be.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/daytripr" rel="tag"&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;daytripr&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/travel20" rel="tag"&gt;travel20&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-1704817415414294080?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/1704817415414294080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=1704817415414294080' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/1704817415414294080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/1704817415414294080'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/12/daytripr-build-something-you-want.html' title='DayTripr :  Build Something You Want'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-8731407002973249741</id><published>2006-12-08T19:08:00.000-08:00</published><updated>2008-12-12T20:45:04.781-08:00</updated><title type='text'>Je me souviens</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_2tLgOGpsEVE/RXoqkBJYSLI/AAAAAAAAAAM/xVBxnLt_WbM/s1600-h/Je_me_souviens.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_2tLgOGpsEVE/RXoqkBJYSLI/AAAAAAAAAAM/xVBxnLt_WbM/s400/Je_me_souviens.jpg" alt="" id="BLOGGER_PHOTO_ID_5006360734047160498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I like license plates with attitude. I had "&lt;a href="http://en.wikipedia.org/wiki/District_of_Columbia_voting_rights#.22Taxation_without_representation.22"&gt;Taxation Without Representation&lt;/a&gt;" plates when we lived in DC, and I always liked New Hampshire's "&lt;a href="http://en.wikipedia.org/wiki/Live_Free_or_Die"&gt;Live Free or Die&lt;/a&gt;." We drove to Montreal recently and I added a new one to the list: "&lt;a href="http://en.wikipedia.org/wiki/Je_me_souviens"&gt;Je me souviens&lt;/a&gt;," which is commonly interpreted as "I remember what the English did to the French." Heh.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-8731407002973249741?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/8731407002973249741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=8731407002973249741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/8731407002973249741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/8731407002973249741'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/12/mottos-with-attitude.html' title='Je me souviens'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_2tLgOGpsEVE/RXoqkBJYSLI/AAAAAAAAAAM/xVBxnLt_WbM/s72-c/Je_me_souviens.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-7628481642359668630</id><published>2006-11-13T18:46:00.000-08:00</published><updated>2006-12-11T19:27:51.791-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nyc'/><category scheme='http://www.blogger.com/atom/ns#' term='food'/><title type='text'>The Appropriate Food : Bamn!</title><content type='html'>&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://photos1.blogger.com/blogger2/1808/1716/320/bamn_small.jpg" alt="" border="0" /&gt;&lt;a href="http://en.wikipedia.org/wiki/Automat"&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Automats&lt;/span&gt;&lt;/a&gt; have not been kind to me. I still remember the disappointment I felt when I learned that the food was not, in fact, prepared by robots. I later forgave the &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;automat&lt;/span&gt;, and was fully prepared to dine at one when we moved to NYC in the mid 90's. But the last of the treacherous things had closed fives years earlier. My wife's gloating "Sure, I've been to one, haven't you?" didn't help. Seeing their dismembered remains in antique shops all over the city was a bittersweet reminder of things I'd never have.&lt;br /&gt;&lt;br /&gt;Until now. The &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;automat&lt;/span&gt; is back, in the form of &lt;a href="http://bamnfood.com/"&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Bamn&lt;/span&gt;!&lt;/a&gt;, an &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;asian&lt;/span&gt;-influenced hole-in-the-wall on St. Mark's Place[1] in the East Village of NYC. The food is a take on traditional diner fare: grilled cheese sandwiches, &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;teriyaki&lt;/span&gt; burgers, roasted pork buns (the best of the bunch) and &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;Belgian&lt;/span&gt;-style fries (thankfully served fresh from the counter). And other stuff I don't remember. All yours for a heaping handful of quarters.&lt;br /&gt;&lt;br /&gt;Being served (if not, sadly, prepared) by machines, I think you could argue that an &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;automat&lt;/span&gt; is the ultimate geek dining format. And the 24/7 availability doesn't hurt, either. Chris says check it out.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1] Think Austin's 6&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;th&lt;/span&gt; &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Steet&lt;/span&gt;, only grimier. Or maybe &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;DC's&lt;/span&gt; Adams Morgan, only more compact. Lots of NYU students, hipsters and panhandlers, generally indistinguishable.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/automat" rel="tag"&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;automat&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://technorati.com/tag/nyc" rel="tag"&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;nyc&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-7628481642359668630?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/7628481642359668630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=7628481642359668630' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/7628481642359668630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/7628481642359668630'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/11/appropriate-food-bamn.html' title='The Appropriate Food : Bamn!'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-5053121175128274935</id><published>2006-11-07T18:07:00.000-08:00</published><updated>2006-12-11T19:26:21.862-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='daytripr'/><title type='text'>DayTripr : Mobile Access Trials and Tribulations</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/1808/1716/1600/tablet.0.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger2/1808/1716/320/tablet.1.png" alt="" border="0" /&gt;&lt;/a&gt; Up until a few minutes ago I couldn't have defined "tribulation" without reference to the hackneyed phrase in the title of this post. Enough to get it right on a multiple-choice, but no real clue. Turns out it's your standard Latin "threshing sledge" to French to Middle English sort of thing[1].&lt;br /&gt;&lt;br /&gt;There's an early drawing of a threshing sledge there on the tablet[2] somewhere, along with, evidently, some numbers. The tablet was made in what is now Iraq, about 5500 years ago. I'd like to think it's some sort of threshing sledge FAQ.  Threshing sledges are still around, although I'm sure the FAQ entries are out of date.&lt;br /&gt;&lt;br /&gt;Speaking of ancient technology still in use today, developing a site for mobile phones is turning out to be a trial. The biggest pain so far is the software that takes HTML to phone-speak (there's a twisty maze of WAPish protocols in there.) It has a mind of its own.  Like choosing to resize certain images to fit on the phone screen, but only sometimes. (Resizing makes maps unreadable). Then there's the way it breaks pages up, sort of semi-randomly, or refuses to load some pages at all. And the screens are all tiny in different ways.&lt;br /&gt;&lt;br /&gt;Enough whining, back to work.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;[1] Thanks Merriam-Webster (&lt;a href="http://www.webster.com/cgi-bin/dictionary?sourceid=Mozilla-search&amp;va=tribulation"&gt;http://www.webster.com/cgi-bin/dictionary?sourceid=Mozilla-search&amp;amp;va=tribulation&lt;/a&gt;) and Bartleby/American Heritage (&lt;a href="http://www.bartleby.com/61/67/T0346700.html"&gt;http://www.bartleby.com/61/67/T0346700.html&lt;/a&gt;)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[2] Original image at &lt;a href="http://www.hp.uab.edu/image_archive/"&gt;http://www.hp.uab.edu/image_archive/&lt;/a&gt;, but it looks to have been taken from the Dept. Antiquities, Ashmolean Museum, Oxford, UK. The Ashmolean Museum was, according to Wikipedia, built in 1678 to house the cabinet of curiosities of Elias Ashmole. If that sounds cool, you should definitely check out the Museum of Jurassic Technology the next time you're in LA.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/daytripr" rel="tag"&gt;daytripr&lt;/a&gt;, &lt;a href="http://technorati.com/tag/mobile" rel="tag"&gt;mobile&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-5053121175128274935?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/5053121175128274935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=5053121175128274935' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5053121175128274935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5053121175128274935'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/11/daytripr-mobile-access-trials-and.html' title='DayTripr : Mobile Access Trials and Tribulations'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-5582680517689460709</id><published>2006-10-24T10:17:00.000-07:00</published><updated>2006-12-11T19:26:39.294-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='daytripr'/><title type='text'>DayTripr : Mobile Access</title><content type='html'>I've added mobile access to the DayTripr trip pages. You could get to the site over WAP before, but you couldn't see the Javascript-based maps. Now any request with a WAP header gets served a special page with a static map image and some link-based navigation controls. To try it out, just visit any of the &lt;a href="http://daytripr.com/node/5"&gt;trip page&lt;/a&gt;s using the browser that's built into your phone. Let me know how it goes. If you think it's hard supporting Firefox/IE/Safari/Opera, you should try supporting every kind of cell phone under heaven.&lt;br /&gt;&lt;br /&gt;Mobile access to the trip pages isn't really all that useful, but mobile access to the soon-to-be-implemented trip planning pages is going to be a hoot. No more carrying around bulging folders of notes and maps!&lt;br /&gt;&lt;br /&gt;So maybe you don't carry around tons of research on your day trip, but I'm thinking it's going to be nice to be able to get to all that info you came across when you were planning the trip during your lunch hour last Wednesday. (A three hour drive and the crab shack is closed for the winter! It totally didn't say that in the review. What about that other place we talked about, you know, the chowder place? Was that around here? What was it called?)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-5582680517689460709?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/5582680517689460709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=5582680517689460709' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5582680517689460709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5582680517689460709'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/10/daytripr-mobile-access.html' title='DayTripr : Mobile Access'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-1327974894803980837</id><published>2006-10-16T19:24:00.000-07:00</published><updated>2006-10-16T19:56:50.642-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='daytripr'/><title type='text'>DayTripr : Soft Launch</title><content type='html'>I "soft launched" DayTripr on Sunday. There's just enough there for friends and family to start helping with basic workflow testing and building up some initial content. Feel free. Fresh eyes have been spotting lots of problems I never noticed or had gotten used to. It's been a little depressing to find so many issues, but making something simple takes a lot of work.[1] I'm glad I resisted the urge to add more features before launch or I'd never have it all working right.&lt;br /&gt;&lt;br /&gt;Within a couple of hours DayTripr had it's first sign up from somebody I hadn't personally invited. I took some log perusal to figure out that they'd found the del.icio.us bookmark I'd added as a convenience for testing on different browser/machine combos.  Some further digging revealed this &lt;a href="http://betamuseum.blogspot.com/"&gt;little gem of site&lt;/a&gt;.[2]  At first I was appalled. You know that feeling you get when you look at your driver's license photo? Then again, I asked for it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt; [1] "I have only made this letter rather long because I have not had time to make it shorter." Pascal. Lettres provinciales, 16, Dec. 14, 1656.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[2] http://betamuseum.blogspot.com "Web2.0 Sites Museum". Is it meant as a subtle dig? The "museum" part seems sort of final. There's a cultural gap in there somewhere. On the upside, I've been getting a steady trickle of hits and I've enjoyed reading through the other, uh, exhibits. On balance, I'm flattered.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-1327974894803980837?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/1327974894803980837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=1327974894803980837' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/1327974894803980837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/1327974894803980837'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/10/daytripr-soft-launch.html' title='DayTripr : Soft Launch'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-8795563918979588369</id><published>2006-10-10T06:29:00.000-07:00</published><updated>2006-12-11T19:28:52.935-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='barcamp'/><title type='text'>Eight Things about Bar Camp NYC 2 Sponsorships</title><content type='html'>&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Amit&lt;/span&gt; asked me to write a few words about handling sponsorships at Bar Camp NYC 2. The first thing to say is that Courtney Pulitzer rocks. Things got extremely busy at my day job and I fell far behind in my Bar Camp duties. Courtney swooped in at the last minute and saved the day. Thanks Courtney!&lt;br /&gt;&lt;br /&gt;On the theory that it's better to have something imperfect now than something perfect later, I'm going to skip the slick writeup and just make a list:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;We went over budget. Not much, about $140 at last count, but one of our number got stuck unexpectedly with the bill. Although we worked it out, it was needlessly stressful.&lt;/li&gt;&lt;li&gt;Don't forget tips when budgeting, especially if the vendor delivers. Many things will turn out to be just slightly more expensive than expected and it adds up.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Google Spreadsheets was a lifesaver, both for &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;pre&lt;/span&gt;-event planning and for keeping track of the budget on the days of the event. Making a local backup before arriving at the venue is a very good idea, though.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If you can possibly manage it, have the sponsors purchase the food and handle the delivery. Not only do they get stuck with tips and other unexpected charges, it means they are more directly involved in the event.&lt;/li&gt;&lt;li&gt;Although one of last year's sponsors declined to re-up on the basis of "insufficient benefit", most of them didn't seem to care that much. They either already knew, or had fairly low expectations for return on their $200 donation.&lt;/li&gt;&lt;li&gt;On that note, lots more people knew what a Bar Camp was this time around. Part of that was hitting up the sponsors from the previous event, but part was a generally greater awareness.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Donations were mostly in the $100-$200 range, with a couple of standouts contributing more. Everybody got the same sized logo on the sponsor wall.&lt;/li&gt;&lt;li&gt;People promise things, but then forget. Expect to send at least one, maybe several reminders to sponsors, especially the ones you line up early.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-8795563918979588369?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/8795563918979588369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=8795563918979588369' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/8795563918979588369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/8795563918979588369'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/10/eight-things-about-bar-camp-nyc-2.html' title='Eight Things about Bar Camp NYC 2 Sponsorships'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-3576401692551129655</id><published>2006-10-05T08:52:00.000-07:00</published><updated>2006-11-28T18:05:22.784-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='daytripr'/><title type='text'>DayTripr : Monetizing Other People's Work</title><content type='html'>Guy Kawasaki's recent &lt;a href="http://blog.guykawasaki.com/2006/10/reality_check_f.html"&gt;blog post&lt;/a&gt; on &lt;a href="http://www.fanpop.com/"&gt;Fanpop&lt;/a&gt; hit a nerve with me. DayTripr is going to be a site that makes use of "user generated content," but I'm uncomfortably aware of the nasty power imbalance that that can imply. I've pretty much decided that the "we own and/or permanently-licence-for-free-forever everything you do" model is not the right way to go.&lt;br /&gt;&lt;br /&gt;Om Malik &lt;a href="http://gigaom.com/2005/10/18/web-20-the-community-the-commerce-conundrum/"&gt;sums it up nicely&lt;/a&gt;:&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;"...aren’t we seemingly commoditizing our most valuable asset - time. We become the outsourced workforce, the collective, though it is still unclear what is the pay-off. While we may (or may not) gain something from the collective efforts, the odds are whatever “the collective efforts” are, they are going to boost the economic value of those entities. Will they share in their upside? Not likely!"&lt;/blockquote&gt;The argument for a site like del.icio.us is that the minor effort required to bookmark a link is more than offset by the value the site provides. I'm not sure if that would be true for a site like DayTripr (writing up a day trip is harder than clicking a bookmark button) and I've been thinking a lot about what that implies.&lt;br /&gt;&lt;br /&gt;There is added value to be found in aggregation and analysis, but raw material needs to be paid for, and I think sites need to pay (not necessarily in money) for the content they're made of. It needs to be something more than &lt;a href="http://www.fanpop.com/faq#contribute1"&gt;gold stars,&lt;/a&gt; though.&lt;br /&gt;&lt;br /&gt;I'll be exploring some of my (mostly stolen) ideas on how exactly to go about that in upcoming blog postings.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-3576401692551129655?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/3576401692551129655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=3576401692551129655' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3576401692551129655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3576401692551129655'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/10/daytripr-monetizing-other-peoples-work.html' title='DayTripr : Monetizing Other People&apos;s Work'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-2154586720836611524</id><published>2006-10-03T20:05:00.000-07:00</published><updated>2006-12-11T19:27:32.193-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='daytripr'/><title type='text'>DayTripr</title><content type='html'>We go on lots of day trips. Before our daughter was born we went on bunches, and now that she's two, we go on even more. Planning is a pain. I generally spend as many hours planning as I do on the road.  There's a lot of good information out there on the Interweb, but it's spread out and hard to find. Traditional travel sites aren't much use, they concentrate on flights and hotels. Chamber of commerce sites have lots of information, but like those day trip books in the "Local" section of every chain bookstore, they're hit-or miss (often out of date and of questionable quality)&lt;br /&gt;&lt;br /&gt;I tend to use recommendations from friends and depend a great deal on serendipity (especially write ups in blogs), but I don't always get lucky, and sometimes it gets a little stressful.&lt;br /&gt;&lt;br /&gt;Day trips are just different than multi-day trips, and I feel like they've been neglected.&lt;br /&gt;&lt;br /&gt;Out of these frustrations (and some really good conversations at Bar Camp NYC 2) is born... DayTripr : The place to plan, record and share your favorite day trips. Well, technically, "will be born". I'm in the middle of coding right now. The site should premier sometime next week. I've got friends and relatives lined up to help with the initial content, but it's going to take a lot more than that to get the site up to speed. I may be asking some of you, dear readers, for a little help. For right now, any feedback on the idea itself is appreciated.&lt;br /&gt;&lt;br /&gt;More soon...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-2154586720836611524?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/2154586720836611524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=2154586720836611524' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/2154586720836611524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/2154586720836611524'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/10/daytripr.html' title='DayTripr'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-3193137231865443099</id><published>2006-09-14T09:13:00.000-07:00</published><updated>2006-12-11T19:28:33.327-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nyc'/><category scheme='http://www.blogger.com/atom/ns#' term='barcamp'/><title type='text'>Bar Camp NYC 2</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/1808/1716/1600/barcampnyc2.1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger2/1808/1716/400/barcampnyc2.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Yep, it's official. Actually, it's been official for a while and I've been too swamped to blog about it. September 30/October 1, 2006. Find out more: &lt;a href="http://barcamp.org/BarCampNYC2"&gt;http://barcamp.org/BarCampNYC2&lt;/a&gt; And here's the trippy part: Microsoft is hosting. Pictures of organizers and the venue on Flickr tagged &lt;a href="http://flickr.com/search/?w=all&amp;q=barcampnyc2&amp;amp;m=tags"&gt;barcampnyc2&lt;/a&gt;. Ought to be interesting. See you there!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-3193137231865443099?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/3193137231865443099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=3193137231865443099' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3193137231865443099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/3193137231865443099'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/09/bar-camp-nyc-2.html' title='Bar Camp NYC 2'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-5564717541196958581</id><published>2006-08-22T18:25:00.000-07:00</published><updated>2006-12-11T19:29:25.052-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nyc'/><category scheme='http://www.blogger.com/atom/ns#' term='food'/><title type='text'>The Appropriate Food : New Beef King Corporation</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://static.flickr.com/68/222480931_b9f6010a96_o.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://static.flickr.com/68/222480931_b9f6010a96_o.jpg" alt="" border="0" /&gt;&lt;/a&gt;One of the reasons I love NYC is that you're pretty much guaranteed to find cool stuff just by wandering around. In this case, I noticed the &lt;a href="http://www.newbeefking.com/"&gt;New Beef King Corp.&lt;/a&gt; on the way from a first course of dim sum at &lt;a href="http://www.newyorkmetro.com/listings/restaurant/pings-seafood/"&gt;Ping's Seafood&lt;/a&gt; to a second course of assorted breads and pastries at &lt;a href="http://www.lepainquotidien.com/"&gt;Le Pain Quotidian&lt;/a&gt; in Soho[1]&lt;br /&gt;&lt;br /&gt;Although it wasn't on the day's menu[2], I decided to wing it. Beef jerky holds a special place in the hearts of hackers. Code is more or less made of junk food. While Twix and Dr. Pepper[3] can give you a burst of energy to get you through a rough spot, there's nothing like some concentrated essence of cow or pig to give you the endurance you need for a thirty-six hour coding marathon.&lt;br /&gt;&lt;br /&gt;New Beef King is tiny, with room for only a few customers. Most of the space is taken up by two glass display cases, the kind normally used to show jewelry or high-end chocolates. As it was my first visit, I chose a quarter pound of the simplest item "Spicy Flavor Beef Jerky". The slices were very tender, with an underlying flavor that reminded me a little of the "Teriyaki Style" jerky you get at truck stops. I suspect comparisons to American-style jerky are apples-to-oranges, though, since the preparation processed described on the Beef King web site differs from traditional American-style jerky. No, never mind, that's stupid: there's no way to avoid comparing it to truck-stop jerky and New Beef King jerky is better. Totally better. Even better than the  handmade craft-jerky you get at your better class of truck stops. It rocks. I want more.&lt;br /&gt;&lt;br /&gt;Since they accept PayPal, I'm guessing you can mail-order, but I'm just going to mosey on down there in person next time I get the craving. Who knows what else I'll find?[4]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1] Some people go on pub crawls. We go on food crawls. The &lt;a href="http://www.chinatownicecreamfactory.com/"&gt;Chinatown Ice Cream Factory&lt;/a&gt; was in there somewhere, too. The next stop was the Lower East Side and a visit to &lt;a href="http://www.katzdeli.com/"&gt;Katz's&lt;/a&gt; for pastrami and beer (with a short moment of silence for the &lt;a href="http://en.wikipedia.org/wiki/2nd_Avenue_Deli"&gt;Second Avenue Deli&lt;/a&gt;), followed by  a quick hop up to the East Village for assorted appetizers at &lt;a href="http://newyork.citysearch.com/profile/41893028/"&gt;Tigerland&lt;/a&gt;. Tigerland is really good, you should go there. The last stop was to be the strangely Japanese east 9th street for for octopus balls at &lt;a href="http://local.yahoo.com/details?id=11036548"&gt;Otakfuku&lt;/a&gt;, but it was getting late and our daughter needed to get to bed.&lt;br /&gt;[2] Actually, there wasn't a day's menu, we constructed the whole "all day progressive dinner" thing &lt;span style="font-style: italic;"&gt;post &lt;/span&gt;hoc to justify our gluttony.&lt;br /&gt;[3] Or the more usual Twinkies and Coke.&lt;br /&gt;[4] Right, Chinatown, so rats the size of Great Danes, but I mean other than that.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-5564717541196958581?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/5564717541196958581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=5564717541196958581' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5564717541196958581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/5564717541196958581'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/08/appropriate-food-new-beef-king.html' title='The Appropriate Food : New Beef King Corporation'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-115501061507872726</id><published>2006-08-07T21:09:00.000-07:00</published><updated>2006-12-07T20:11:22.887-08:00</updated><title type='text'>A Space for Half-Formed Thoughts[1]</title><content type='html'>&lt;style type="text/css"&gt;.flickr-photo { border: solid 1px #000000; }.flickr-frame {  float: right; text-align: center; margin-left: 15px; margin-bottom: 15px; }.flickr-caption { font-size: 0.8em; margin-top: 0px; }&lt;/style&gt;&lt;div class="flickr-frame"&gt;     &lt;a href="http://memory.loc.gov/cgi-bin/ampage?collId=musdi&amp;fileName=211/musdi211.db&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;recNum=0012&amp;itemLink=/ammem/dihtml/diessay4.html@2110013&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;linkText=3" title="photo sharing"&gt;&lt;img src="http://photos2.flickr.com/2821936_94641245dc_t.jpg" class="flickr-photo" alt="diagram" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="flickr-caption"&gt; Recording dynamic systems is hard.&lt;/span&gt;&lt;/div&gt;I recently started learning the innards of a complex software system. Shortly thereafter, I found myself at Pearl looking for a 0.3mm drafting pencil. For those not familiar, an ordinary thin-lead mechanical pencil is 0.5mm. 0.3mm pencils are for drawing the kind of really insanely detailed pictures mentally disturbed people spend thirty years drawing in secret[2].&lt;br /&gt;&lt;br /&gt;My diagrams aren't software architecture diagrams. That is, they are, in that I do them when I'm doing architecture, but they aren't pictures of the system. They're pictures of the contents of my head. You either know what I mean, or you're a person that thinks those really huge auto-generated class diagrams are cool. Anyway, the diagrams are a shorthand, which means they leave bits out. A proper diagram of what I'm actually thinking would probably look more like the little picture at the top of this entry, which is just Tuftey and annoying. So my diagrams come out looking sort of like hybrid object/class diagrams with lots of little annotations and callouts.  (People who want to generate code from diagrams should be taken out and shot[3]).&lt;br /&gt;&lt;br /&gt;I learned about the difference between diagrams as a shorthand-notation-for-thoughts and diagrams-as-reality when I was working at a company that did geological mapping and modeling software. It took me a while to understand that geologists wanted to record their opinions, not record data. Maps are acts of creative interpretation. So are good software diagrams.&lt;br /&gt;&lt;br /&gt;So far, the best way to capture the kind of diagrams I make is paper and (very fine point) pencil. There ought to be a better way. I stole the title of this entry from [4], which seems relevant somehow.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;[1] Sure enough, another repost. I'm just pitiful.&lt;br /&gt;[2] &lt;a href="http://www.sfmoma.org/exhibitions/exhib_detail/98_exhib_ag_rizzoli.html"&gt; http://  www.sfmoma.org/exhibitions/exhib_detail/ 98_exhib_ag_rizzoli.html &lt;/a&gt;, although really he used large sheets of paper instead of tiny pencil leads ,  which if you think about it gets you the same effect. Or maybe in addition to, which is even better.&lt;br /&gt;[3] People who want to execute diagrams directly without the code generation step may be onto something. Or not. It's really hard to tell at this point. I'm hopeful.&lt;br /&gt;[4] &lt;a href="http://flow.doorsofperception.com/content/tabor_trans.html"&gt; http://flow.doorsofperception.com/ content/ tabor_trans.html &lt;/a&gt;, I have a sort of perverse fascination with Doors. And First Monday. That sort of vaguely socialist Euro-academic stuff is somehow very attractive.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-115501061507872726?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/115501061507872726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=115501061507872726' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/115501061507872726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/115501061507872726'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/08/space-for-half-formed-thoughts1.html' title='A Space for Half-Formed Thoughts[1]'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-115324422805954817</id><published>2006-07-18T10:34:00.000-07:00</published><updated>2006-07-18T13:57:52.480-07:00</updated><title type='text'>Breve is Way Cool[1]</title><content type='html'>&lt;style type="text/css"&gt;.flickr-frame { float: right; text-align: center; margin-left: 15 px; margin-bottom: 15px; }.flickr-photo { border: solid 1px #000000; } &lt;/style&gt; &lt;div class="flickr-frame"&gt;&lt;a href="http://www.spiderland.org/breve/"&gt;&lt;img src="http://www.spiderland.org/breve/images/breve_icon_light.gif" alt="cover" class="flickr-photo" border="0" hspace="3" vspace="3" /&gt;&lt;/a&gt;&lt;/div&gt;Breve[2] can turn water into wine, and sugar into cocaine[3]. It can walk on the water, and swim on the land. Or it could learn to, if you set up the appropriate Karl Sims[4] style simulation and let it run long enough.&lt;br /&gt;&lt;br /&gt;I think it's been too long since I checked up on the artificial life crowd. It seems pretty obvious that many existing commercial systems are already being developed through a very inefficient form of simulated evolution (hack on it for a while, push it into production, see what users think, rinse, repeat). Automating the process might not be a bad idea.&lt;br /&gt;&lt;br /&gt;One of the neat things about Karl Sims' work was that his simulated worlds had physics realistic enough to support unexpected behavior. I wonder if Breve's physics is good enough? I suspect so, but I haven't taken the time to try it out. The "Users" section of the Breve site has some interesting links along those lines, I think I'll check them out.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1] Yes, this is a repost. So sue me.&lt;br /&gt;[2] &lt;a href="http://www.spiderland.org/breve/"&gt;http://www.spiderland.org/breve/&lt;/a&gt;&lt;br /&gt;[3] With apologies to King Missile. Here, go buy &lt;a href="http://www.amazon.com/exec/obidos/ASIN/1887128158/codeporn-20"&gt;something&lt;/a&gt;.&lt;br /&gt;[4] Karl Sims is way cool. &lt;a href="http://www.genarts.com/karl/"&gt;http://www.genarts.com/karl/&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-115324422805954817?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/115324422805954817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=115324422805954817' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/115324422805954817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/115324422805954817'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/07/breve-is-way-cool1.html' title='Breve is Way Cool[1]'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-115288017476986641</id><published>2006-07-14T05:09:00.000-07:00</published><updated>2006-07-14T05:29:34.786-07:00</updated><title type='text'>The C1000K Problem</title><content type='html'>I've always liked &lt;a href="http://www.kegel.com"&gt;Dan Kegel&lt;/a&gt;'s C10K page[1], but 10,000 connections is now easily doable  on low-end hardware with minimal tuning. As a thought experiment (and maybe a real experiment, depending) I want to try for 1,000,000 connections.&lt;br /&gt;&lt;br /&gt;Massive numbers of TCP/IP connections are nice for a number of reasons: Web applications that do a "wait on an &lt;a href="http://en.wikipedia.org/wiki/XMLHttpRequest"&gt;XMLHttpRequest&lt;/a&gt;" loop need many idle connections, and I'm thinking that any solution to the RSS-polling problem[2] will involve something similiar.&lt;br /&gt;&lt;br /&gt;It's not exactly a new idea, so it's going to be as much a web-research thing as a coding thing. Last time[3] I played around with server scalability was  loads-o'-fun, I suspect this time will be even more educational. I'll probably end up documenting the results over on &lt;a href="http://www.distributopia.com/"&gt;Distributopia&lt;/a&gt;, it seems more appropriate for longer-form articles.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1] &lt;a href="http://www.kegel.com/c10k.html"&gt;http://www.kegel.com/c10k.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.distributopia.com/rotd3_archive.html"&gt;&lt;/a&gt;[2] Have all the readers connect, then wait. It's push all over again. Wait, it _is_ push all over again. I feel ill.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[3] &lt;a href="http://www.distributopia.com/rotd3_archive.html"&gt;http://www.distributopia.com/rotd3_archive.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/c10k" rel="tag"&gt;c10k&lt;/a&gt;, &lt;a href="http://technorati.com/tag/dankegel" rel="tag"&gt;dankegel&lt;/a&gt;, &lt;a href="http://technorati.com/tag/tcpip" rel="tag"&gt;tcp/ip&lt;/a&gt;, &lt;a href="http://technorati.com/tag/scalabiltiy" rel="tag"&gt;scalability&lt;/a&gt;, &lt;a href="http://technorati.com/tag/c1000k" rel="tag"&gt;c1000k&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-115288017476986641?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/115288017476986641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=115288017476986641' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/115288017476986641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/115288017476986641'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/07/c1000k-problem.html' title='The C1000K Problem'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-115137364167804687</id><published>2006-06-26T18:53:00.000-07:00</published><updated>2006-06-26T19:41:44.850-07:00</updated><title type='text'>Mobile Monday NYC</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4115/533/1600/momonyc.0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/4115/533/320/momonyc.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I just got home from &lt;a href="http://mobilemonday-ny.com"&gt;Mobile Monday NYC&lt;/a&gt;. I went in a little dubious. Last month they had Adam Greenfield of &lt;a href="http://www.amazon.com/exec/obidos/redirect?link_code=as2&amp;path=ASIN/0321384016&amp;amp;amp;amp;amp;amp;amp;tag=codeporn-20&amp;camp=1789&amp;amp;creative=9325"&gt;Everyware&lt;/a&gt; fame. I heard him at SXSWi, and he's an amazing speaker. This month, they had no scheduled speaker at all. It was "open mic night." But the Samsung Experience showroom in the Time Warner center is an impressive backdrop for a user group meeting, and there was the promise of free food and drink. I decided to go anyway.&lt;br /&gt;&lt;br /&gt;I was glad I did.&lt;br /&gt;&lt;br /&gt;The audience more than made up for the lack of a scheduled speaker. I learned, for example, that although getting people initial access to your application over WAP is easy, it can be a little trickier to actually scale it. But not for technical reasons. "Wonder what an Internet without net neutrality would look like? Mobile is just that." I probably got the wording wrong on the quote, but the theme was consistent: the carriers own the space, and it can get ugly out there.&lt;br /&gt;&lt;br /&gt;Is it actually true? I don't know, but I certainly have more confidence in information I get from talking directly to people deeply involved in the industry than in random surfing on the Interweb. I'll definitely be back next month.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/momo" rel="tag"&gt;momo&lt;/a&gt;, &lt;a href="http://technorati.com/tag/momonyc" rel="tag"&gt;momonyc&lt;/a&gt;, &lt;a href="http://technorati.com/tag/nyc" rel="tag"&gt;nyc&lt;/a&gt;, &lt;a href="http://technorati.com/tag/mobile" rel="tag"&gt;mobile&lt;/a&gt;, &lt;a href="http://technorati.com/tag/geekevent" rel="tag"&gt;geekevent&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-115137364167804687?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/115137364167804687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=115137364167804687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/115137364167804687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/115137364167804687'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/06/mobile-monday-nyc.html' title='Mobile Monday NYC'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-115025682039459327</id><published>2006-06-13T20:42:00.000-07:00</published><updated>2006-06-13T20:51:36.106-07:00</updated><title type='text'>Bar Camp NYC 2</title><content type='html'>Why? Because BarCampNYCII with roman numerals looks strange. Add your name to: &lt;a href="http://barcamp.org/BarCampNYC2"&gt;http://barcamp.org/BarCampNYC2 &lt;/a&gt;and wonderful things will happen.  Unless Amit already has a venue in mind (and I wouldn't put it past him) I'm thinking that the geeks over at &lt;a href="http://research.eyebeam.org/"&gt;Eyebeam Open Lab&lt;/a&gt; would have to be friends of Bar Camp. Anybody know someone over there?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/barcamp" rel="tag"&gt;barcamp&lt;/a&gt;, &lt;a href="http://technorati.com/tag/nyc" rel="tag"&gt;nyc&lt;/a&gt;, &lt;a href="http://technorati.com/tag/barcampnyc2" rel="tag"&gt;barcampnyc2&lt;/a&gt;, &lt;a href="http://technorati.com/tag/eyebeam" rel="tag"&gt;eyebeam&lt;/a&gt;, &lt;a href="http://technorati.com/tag/openlab" rel="tag"&gt;openlab&lt;/a&gt;, &lt;a href="http://technorati.com/tag/barcampnyc" rel="tag"&gt;barcampnyc&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-115025682039459327?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/115025682039459327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=115025682039459327' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/115025682039459327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/115025682039459327'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/06/bar-camp-nyc-2.html' title='Bar Camp NYC 2'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-114995466414333542</id><published>2006-06-10T08:35:00.000-07:00</published><updated>2006-06-10T09:14:50.746-07:00</updated><title type='text'>Bar Camp Houston</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://barcamp.org/f/barcamp_houston-1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://barcamp.org/f/barcamp_houston-1.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://barcamp.org/BarCampHouston"&gt;Bar Camp Houston&lt;/a&gt; is going on right now. I'm disappointed I didn't get to go, especially since I got to talk with &lt;a href="http://flickr.com/photos/quadmod/152747334/"&gt;Erica O'Grady&lt;/a&gt; at SXSWi and saw her enthusiasm and energy first hand. I have a suspicion this is going to be a pretty good Bar Camp. Not too many pictures up on &lt;a href="http://flickr.com/photos/tags/barcamphouston"&gt;flickr&lt;/a&gt; yet, but I'm looking forward to participating vicariously as things heat up.&lt;br /&gt;&lt;br /&gt;I'm in NYC for the summer (thus my absence from the Houston event) and I'm hoping I can convince Bar Camp NYC organizer emeritus Amit Gupta to step up to the plate again for a Bar Camp NYC II timed to coincide with the Bar Camp Earth extravaganza. I suppose depending on somebody else for a Bar Camp is not keeping with the spirit of the thing, but Amit set the bar intimidatingly high with the first NYC camp, and I'm hoping he'll take the lead on this one. The summer is going fast, though, and there's really not that much time left till August...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/barcamp" rel="tag"&gt;barcamp&lt;/a&gt;, &lt;a href="http://technorati.com/tag/houston" rel="tag"&gt;houston&lt;/a&gt;, &lt;a href="http://technorati.com/tag/texas" rel="tag"&gt;texas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/barcamphouston" rel="tag"&gt;barcamphouston&lt;/a&gt;, &lt;a href="http://technorati.com/tag/barcampnyc" rel="tag"&gt;barcampnyc&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-114995466414333542?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/114995466414333542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=114995466414333542' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/114995466414333542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/114995466414333542'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/06/bar-camp-houston.html' title='Bar Camp Houston'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-114961383408849271</id><published>2006-06-06T09:51:00.000-07:00</published><updated>2006-06-06T10:27:14.053-07:00</updated><title type='text'>Non-Convergence</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://static.flickr.com/77/161780622_3e2f812227_o.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://static.flickr.com/77/161780622_3e2f812227_o.jpg" alt="" border="0" /&gt;&lt;/a&gt;I just got a new cell phone. A Samsung T-509. I knew it wouldn't work as a cell phone nearly as well as my venerable Nokia, but at long last I would have a phone that made me a complete person. And it was true, I &lt;i&gt;did&lt;/i&gt; feel better about myself ... until I called voicemail.&lt;br /&gt;&lt;br /&gt;I held the phone (pausing briefly to appreciate its beauty) and used the (slightly awkward, but never mind) navigation pad to maneuver over to "Call Voice Mail." I hit the button. "Voice Mail" said the screen, and gave the number, while an animation of swooping ribbons of light played in the background. Connected! I typed my access code on the tiny keyboard. And then, nothing. I waited, starting down at the screen on the phone in my hand. Still nothing. Was it broken? Where was the menu? I tried the navigation pad. Left, then right. No. Where were the prompts, and the graphics, and the swirling ribbons of light dancing behind the list of my messages? There was nothing, nothing but a faint buzzing coming from the phone. I held it to my ear. "Hit 1 to review messages" the little voice began.&lt;br /&gt;&lt;br /&gt;There was to be no menu. No animations of voice mail messages romping across a field of swirling color. My beautiful new fully-digitally-enabled phone was running 1980's vintage software accessing (at best) 1990's vintage POTS voice mail. I wept softly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-114961383408849271?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/114961383408849271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=114961383408849271' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/114961383408849271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/114961383408849271'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/06/non-convergence.html' title='Non-Convergence'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-114652616347177117</id><published>2006-05-01T16:25:00.000-07:00</published><updated>2006-05-02T07:02:59.453-07:00</updated><title type='text'>First Monday, GroupWare and Latent Semantic Analysis</title><content type='html'>&lt;p&gt;For hard core geeks, it's fun to play the "follow the definition" game with academic papers, looking up references (hopefully canonical, often not) and following them backwards (or across) until you either arrive at the tenuous source of an idea, or are totally lost, your metaphorical canoe all tangled up in the mangroves.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I burned some cycles over the past couple of days following references from an article in the most recent issue of First Monday[1]:&lt;br /&gt;&lt;/p&gt;&lt;span style="font-weight: bold;"&gt;Beyond binary choices: Understanding and exploiting trade-offs to enhance creativity&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;Gerhard Fischer&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;Center for LifeLong Learning &amp; Design (L3D) , University of Colorado&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.firstmonday.org/issues/issue11_4/fischer/index.html"&gt;http://www.firstmonday.org/issues/issue11_4/fischer/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;First Monday is right up there with Citeseer[2] on my list of fun stuff for the academically oriented practitioner. The articles that aren't actually good are often unintentionally funny[3] so I get some enjoyment regardless.&lt;br /&gt;&lt;br /&gt;The "Binary Choices" article discusses the tradeoffs and advantages in creating end-user extensible systems, with a focus on collaboration. It hooked me with this quoted quote from the list of research objectives:&lt;br /&gt;&lt;blockquote&gt;... empowering users rather than replacing or deskilling them by emphasizing knowledge based support environments from an intelligence augmentation perspective (Bobrow, 1991; Fischer and Nakakoji, 1992)&lt;/blockquote&gt;Very Engelbart-ish[4],  and a refreshing change from the "Thanks for writing this great collaboration tool! Now I can outsource your job!" attitude that seems to have replaced much of the original vision behind the modern workstation.&lt;br /&gt;&lt;br /&gt;The article was fun, but I was tantalized by hints of a computer scientist hiding beneath the humanities-slanted verbage and decided to follow the trail back a level to one of the author's previous First Monday articles.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Beyond "Couch Potatoes" : From Consumers to Designers and Active Contributors&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Gerhard Fischer&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;Center for LifeLong Learning &amp; Design (L3D) , University of Colorado&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.firstmonday.org/issues/issue7_12/fischer/#f6"&gt;http://www.firstmonday.org/issues/issue7_12/fischer/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm a skeptic when it comes to turning couch potatoes into active participants. Sometimes I like being a couch potato and I resent attempts to convince me that sitting down for the occasional MythBusters marathon is somehow wrong. But there was an undercurrent of practicality in the the article, including this very nifty quote:&lt;blockquote&gt;Environments inviting informed participation are created with many good intentions at design time but the participation and contributions that actually occur often do not live up to the expectations, a finding which can be characterized by "build it and and they will not come" (Smith and Farquhar, 2000). Analyses of these failures of adoption and sustained use of systems can be seen in many domains, including groupware applications, organizational memories, and knowledge management systems.&lt;/blockquote&gt;Which made me think about nazi-ware and failure. "&lt;a href="http://www.jwz.org/doc/groupware.html"&gt;Nazi-ware&lt;/a&gt;" was how users fondly referred to early-90's group collaboration applications. Much as the Semantic Web is rehashing the failures of the mid-80's Knowlede Representation fad, the Social Networking craze seems to want to repeat the horror-that-was-GroupWare (but this time they're asking for volunteers). Fischer offers a measuring stick for how bad things are:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Utility = Value/Effort&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Putting numbers to the equation would make for an interesting exercise, but the article doesn't attempt it.  I surfed on over to the author's home page (not strictly keeping with the rules of the game) and found:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Articulating the Task at Hand and Making Information Relevant to It&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;Gerhard Fischer&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;Center for LifeLong Learning &amp; Design (L3D) , University of Colorado&lt;/span&gt; Human-Computer Interaction Journal, Special Issue on Context-Aware Computing, 2001 Volume 16, pp. 243-256&lt;a href="http://l3d.cs.colorado.edu/%7Egerhard/papers/hci2001.pdf"&gt; http://l3d.cs.colorado.edu/~gerhard/papers/hci2001.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Which was worth reading, but is mainly relevant because it mentioned LSA (Latent Semantic Analysis), which sent me off on a tangent to figure out why that buzzphrase was popping up in my life so often. I'd been vaguely interested in it since Bar Camp Dallas[5] so I slid across to:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;A Solution to Plato's Problem: The Latent Semantic Analysis Theory of Acquisition, Induction and Representation of Knowledge&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;Landauer, T. K. &amp; Dumais, S. T. (1997)&lt;/span&gt;&lt;br /&gt;&lt;a href="http://lsa.colorado.edu/papers/plato/plato.annote.html"&gt;http://lsa.colorado.edu/papers/plato/plato.annote.html&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;I don't care if LSA is linguistically realistic, or even if it works, I just think it's cool that somebody managed to mix singular value decomposition and semantic search. Linear algebra, what &lt;i&gt;can't&lt;/i&gt; it do?&lt;br /&gt;&lt;br /&gt;So I think I may need to sprinkle a little LSA on Event Mirror and see what happens. Two things are becoming obvious: (a) Time as an axis isn't quite enough and (b) Starting out with a first-pass organization method, then allowing refinement, is better than requiring the user to do everything from scratch.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1] &lt;a href="http://firstmonday.org/"&gt;http://firstmonday.org/&lt;/a&gt;&lt;br /&gt;[2] &lt;a href="http://citeseer.ist.psu.edu"&gt;http://citeseer.ist.psu.edu&lt;/a&gt;&lt;br /&gt;[3] Ninety percent of everything is crap, so don't take it too seriously. One of the articles in the current First Mondy issue explains negative feedback on a groupware application by blaming "the rampant ideology of capitalism and competition".&lt;br /&gt;[4] &lt;a href="http://sloan.stanford.edu/mousesite/1968Demo.html"&gt;http://sloan.stanford.edu/mousesite/1968Demo.html&lt;/a&gt; is the best demo, of anything, ever. Stop reading this and go watch it.&lt;br /&gt;[5] Latent Semantic Analysis/Search, David Hagar, &lt;a href="http://www.purediscovery.com"&gt;Pure Discovery&lt;/a&gt;.&lt;/span&gt;&lt;span style="text-decoration: underline;font-size:85%;" &gt; &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://barcamp.org/Dallas2006Schedule"&gt;http://barcamp.org/Dallas2006Schedule&lt;/a&gt;, 3:30-4:00 in the Mash Pit room. Unfortunately not recorded.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/semantic" rel="tag"&gt;semantic&lt;/a&gt;, &lt;a href="http://technorati.com/tag/lsa" rel="tag"&gt;lsa&lt;/a&gt;, &lt;a href="http://technorati.com/tag/citeseer" rel="tag"&gt;citeseer&lt;/a&gt;, &lt;a href="http://technorati.com/tag/engelbart" rel="tag"&gt;engelbart&lt;/a&gt;, &lt;a href="http://technorati.com/tag/groupware" rel="tag"&gt;groupware&lt;/a&gt;, &lt;a href="http://technorati.com/tag/purediscovery" rel="tag"&gt;purediscovery&lt;/a&gt;, &lt;a href="http://technorati.com/tag/firstmonday" rel="tag"&gt;firstmonday&lt;/a&gt;, &lt;a href="http://technorati.com/tag/gerhardfischer" rel="tag"&gt;gerhardfischer&lt;/a&gt;, &lt;a href="http://technorati.com/tag/couchpotato" rel="tag"&gt;couchpotato&lt;/a&gt;, &lt;a href="http://technorati.com/tag/osx" rel="tag"&gt;osx&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-114652616347177117?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/114652616347177117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=114652616347177117' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/114652616347177117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/114652616347177117'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/05/first-monday-groupware-and-latent.html' title='First Monday, GroupWare and Latent Semantic Analysis'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-114430040073676978</id><published>2006-04-05T21:48:00.000-07:00</published><updated>2006-04-06T20:57:59.250-07:00</updated><title type='text'>Dallas Bootstrap Network</title><content type='html'>The resurgent Dallas chapter of the Bootstrap Network had its first meeting tonight at the Tipperary Inn. Although the conversation drifted off into tech-geekiness several times (we were heavy on the software side) we ended up with some good, business-related discussion. The topics included finding a good lawyer (special-purpose Texas legal code and general startup),  marketing and other biz-stuff for software geeks, and the pros and cons of selling to the enterprise versus consumers. And, uh, Kevin Marvin was looking for a time-warping device to add more hours to his day. There was general agreement that Mondays are a better bet for meetings, and, I think, sufficient enthusiasm that a meeting next month is in order. We kept it to about an hour for the official part of the proceedings, with another hour's worth of general drinking and (mild) carousing.&lt;br /&gt;&lt;br /&gt;Ok, so it makes for a boring blog entry. I guess you had to be there. Pictures under the "&lt;a href="http://www.flickr.com/photos/tags/bootstrapdallas/"&gt;bootstrapdallas&lt;/a&gt;" tag on Flickr.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/dallas" rel="tag"&gt;dallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/bootstrap" rel="tag"&gt;bootstrap&lt;/a&gt;, &lt;a href="http://technorati.com/tag/startup" rel="tag"&gt;startup&lt;/a&gt;, &lt;a href="http://technorati.com/tag/tipperary" rel="tag"&gt;tipperary&lt;/a&gt;, &lt;a href="http://technorati.com/tag/bootstrapddallas" rel="tag"&gt;bootstrapdallas&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-114430040073676978?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/114430040073676978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=114430040073676978' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/114430040073676978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/114430040073676978'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/04/dallas-bootstrap-network.html' title='Dallas Bootstrap Network'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-114266352320343370</id><published>2006-03-17T22:22:00.000-08:00</published><updated>2006-03-17T22:38:14.156-08:00</updated><title type='text'>Mapable : Dallas Does Tech Startups</title><content type='html'>Finally, I get to mention &lt;a href="http://mapable.com"&gt;Mapable&lt;/a&gt;, a very cool new Dallas-based startup that's been in super-stealth mode for a while now. Not being able to talk about them was driving me up the wall, because they've got some neat stuff. Their mission is to "take common social activities on the Internet and put them on a map." The team behind Mapable were responsible for the digg-champion chat/maps mashup from back in November 2005, and they've taken the idea to its logical conclusion with a whole range of cool stuff, starting with the aforementioned chat application. One of the coolest things is the ability to add mapable chat to blogs and sites, check out the link below for a live demonstration.&lt;br /&gt;&lt;br /&gt;&lt;a class="comment-link" href="http://www.mapable.com/cks?title=Architectonic"&gt;Chat!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/dallas" rel="tag"&gt;dallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/startup" rel="tag"&gt;startup&lt;/a&gt;, &lt;a href="http://technorati.com/tag/mashup" rel="tag"&gt;mashup&lt;/a&gt;, &lt;a href="http://technorati.com/tag/mapable" rel="tag"&gt;mapable&lt;/a&gt;, &lt;a href="http://technorati.com/tag/web2.0" rel="tag"&gt;web2.0&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-114266352320343370?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/114266352320343370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=114266352320343370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/114266352320343370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/114266352320343370'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/03/mapable-dallas-does-tech-startups.html' title='Mapable : Dallas Does Tech Startups'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-114219699046204753</id><published>2006-03-12T12:51:00.000-08:00</published><updated>2006-03-12T12:56:30.480-08:00</updated><title type='text'>Time, Memory and the Web</title><content type='html'>Geolocation and mapping have gone from cute hacks of interest to geographers and direction seekers to an inextricable part of the way we view the web. But what about time? Almost every action we take or piece of content we create on the web is timestamped, but the time axis is rarely the primary organizing principle. Attention/Intention streams are related, but don’t represent a truly general view. Or maybe I’m wrong. If you’re at SXSWi and interested in talking about the issues involved in moving along, warping, annotating, correlating and interpreting events on the time axis, then comment on this post, email cks@eventmirror.com or catch me on the #sxsw irc channel or on iChat.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-114219699046204753?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/114219699046204753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=114219699046204753' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/114219699046204753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/114219699046204753'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/03/time-memory-and-web.html' title='Time, Memory and the Web'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-114204392990859347</id><published>2006-03-10T18:21:00.001-08:00</published><updated>2006-03-10T21:56:31.916-08:00</updated><title type='text'>Bar Camp Austin Pre-Party</title><content type='html'>I've been posting way too much about Bar Camp, but I'm here at the pre-party with live streaming video set up, and nobody to watch it. For now, the URL is:&lt;br /&gt;&lt;br /&gt;&lt;a href="rtsp://eventmirror.com:554/untitled"&gt;rtsp://eventmirror.com:554/untitled&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'll come up with a better name for the stream tomorrow :-)&lt;br /&gt;&lt;br /&gt;Ok, that's it for the night. Tomorrow there will be an "official" multimedia stream, plus my little pirate effort, check the &lt;a href="http://barcamp.org/BarCampAustin"&gt;Bar Camp Austin&lt;/a&gt; page for details.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-114204392990859347?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/114204392990859347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=114204392990859347' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/114204392990859347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/114204392990859347'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/03/bar-camp-austin-pre-party_10.html' title='Bar Camp Austin Pre-Party'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-114196117991076546</id><published>2006-03-09T19:17:00.000-08:00</published><updated>2006-03-09T19:32:45.206-08:00</updated><title type='text'>Bar Camp Austin</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://static.flickr.com/39/103711215_2b176e9782_d.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 186px; height: 288px;" src="http://static.flickr.com/39/103711215_2b176e9782_d.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Bar Camp Austin is this weekend. It's a Bar Camp. In Austin. "Yeah, yeah, yeah," you say, "I went to the one in Dallas, what more is there to be experienced?" Well, I'll tell ya, Whurley has one a heck of a shindig prepared for those SXSWi naysayers who choose to spend Saturday with the unconference crowd. I mean, just look at that poster. There's been some buzz that Austin is where Bar Camps go Hollywood (despite there having been one in LA last weekend), but I can tell you for sure that I'm going to be there. You should be there, too. Look me up and say "howdy." And no, I don't know why discussing Austin brings out the Texan in me while actually living in Dallas doesn't. Or maybe I do. We can discuss it further in Austin this weekend, after my presentation: "Event Mirror: What happened when and why"&lt;br /&gt;&lt;br /&gt;&lt;a href="http://barcamp.org/BarCampAustin"&gt;http://barcamp.org/BarCampAustin&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/barcampdallas" rel="tag"&gt;barcampdallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/barcampaustin" rel="tag"&gt;barcampaustin&lt;/a&gt;, &lt;a href="http://technorati.com/tag/austin" rel="tag"&gt;austin&lt;/a&gt;, &lt;a href="http://technorati.com/tag/dallas" rel="tag"&gt;dallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/sxsw" rel="tag"&gt;sxsw&lt;/a&gt;, &lt;a href="http://technorati.com/tag/2006" rel="tag"&gt;2006&lt;/a&gt;, &lt;a href="http://technorati.com/tag/architectonic" rel="tag"&gt;architectonic&lt;/a&gt;, &lt;a href="http://technorati.com/tag/web2.0" rel="tag"&gt;web2.0&lt;/a&gt;, &lt;a href="http://technorati.com/tag/unconference" rel="tag"&gt;unconference&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-114196117991076546?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/114196117991076546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=114196117991076546' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/114196117991076546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/114196117991076546'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/03/bar-camp-austin.html' title='Bar Camp Austin'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-114097783596139467</id><published>2006-02-26T10:07:00.000-08:00</published><updated>2006-02-26T10:36:57.400-08:00</updated><title type='text'>Cocoa Dev House March 4th</title><content type='html'>Look out, west coast, Dallas is in the geek event house: Blake Burris is throwing the first &lt;a href="http://cocoadevhouse.org"&gt;Cocoa Dev House&lt;/a&gt; right here in Dallas next weekend, March 4th.&lt;br /&gt;&lt;br /&gt;The emerging theme is "Time and Collaboration." The advantages of geolocation are obvious, but the full potential of time has not been anywhere near as fully exploited. The project ideas have centered around large-scale time-based collaboration (Event Mirror) and small-scale ad-hoc annotation and editing (Audipad).&lt;br /&gt;&lt;br /&gt;But you can show up and work on anything you darned well please, alone or in a group, open source or top-secret commercial, serious or frivolous: the point it to get together with a creative group of smart people to do some OS X hacking.&lt;br /&gt;&lt;br /&gt;The inspiration for the event was Super Happy Dev House (&lt;a href="http://superhappydevhouse.org/"&gt;SHDH&lt;/a&gt;), a serial hack-a-thon that has resulted in everything from a Slut-O-Meter to the now-commercial PBWiki system.&lt;br /&gt;&lt;br /&gt;If you're thinking about attending, drop by #cocoadevhouse on freenode, or check out the wiki at &lt;a href="http://cocoadevhouse.org"&gt;http://cocoadevhouse.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/barcampdallas" rel="tag"&gt;barcampdallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/cocoadevhouse" rel="tag"&gt;cocoadevhouse&lt;/a&gt;, &lt;a href="http://technorati.com/tag/dallas" rel="tag"&gt;dallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/2006" rel="tag"&gt;2006&lt;/a&gt;, &lt;a href="http://technorati.com/tag/architectonic" rel="tag"&gt;architectonic&lt;/a&gt;, &lt;a href="http://technorati.com/tag/blakeburris" rel="tag"&gt;blakeburris&lt;/a&gt;, &lt;a href="http://technorati.com/tag/cocoa" rel="tag"&gt;cocoa&lt;/a&gt;, &lt;a href="http://technorati.com/tag/osx" rel="tag"&gt;osx&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-114097783596139467?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/114097783596139467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=114097783596139467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/114097783596139467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/114097783596139467'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/02/cocoa-dev-house-march-4th.html' title='Cocoa Dev House March 4th'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-113889772168403571</id><published>2006-02-02T08:18:00.000-08:00</published><updated>2006-02-02T08:32:11.340-08:00</updated><title type='text'>Bar Camp Austin in March</title><content type='html'>And during SXSW. Heh. Bar Camps seem to be acquiring quite the reputation as rabble rousers and trouble makers. Yet did Sundance really arrive until Slamdance showed up? The focus on venues and events rather than on getting creative people together whicheverway is a symptom of the corporatization of creative life that I'd just as soon see fall by the wayside. That said, if it's going to happen, I'd rather see it happen in Dallas. But I'll be there anyway, you should probably go too:&lt;br /&gt;&lt;br /&gt; &lt;a href="http://barcamp.org/BarCampAustin"&gt;http://barcamp.org/BarCampAustin&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/barcampdallas" rel="tag"&gt;barcampdallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/barcampaustin" rel="tag"&gt;barcampaustin&lt;/a&gt;, &lt;a href="http://technorati.com/tag/austin" rel="tag"&gt;austin&lt;/a&gt;, &lt;a href="http://technorati.com/tag/dallas" rel="tag"&gt;dallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/sxsw" rel="tag"&gt;sxsw&lt;/a&gt;, &lt;a href="http://technorati.com/tag/2006" rel="tag"&gt;2006&lt;/a&gt;, &lt;a href="http://technorati.com/tag/architectonic" rel="tag"&gt;architectonic&lt;/a&gt;, &lt;a href="http://technorati.com/tag/web2.0" rel="tag"&gt;web2.0&lt;/a&gt;, &lt;a href="http://technorati.com/tag/unconference" rel="tag"&gt;unconference&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-113889772168403571?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/113889772168403571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=113889772168403571' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113889772168403571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113889772168403571'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/02/bar-camp-austin-in-march.html' title='Bar Camp Austin in March'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-113869050524947735</id><published>2006-01-30T22:09:00.000-08:00</published><updated>2006-01-30T23:13:04.960-08:00</updated><title type='text'>BarSpy</title><content type='html'>One of the ideas for &lt;a href="http://barcamp.org/MashPitDallas"&gt;Mashpit Dallas&lt;/a&gt; was BarSpy, a &lt;a href="http://www.digg.com/spy"&gt;DiggSpy&lt;/a&gt;-like real time view of an entire Bar Camp as it happens. The idea is that all the captured information in the session (and eventually the entire conference) is timestamped and geolocated and presented in a unified interface. The video stream, the irc chat log, user ratings, contributed links, the speaker bio, the current schedule, everything is marked with the room where it took place and a reasonably accurate timestamp. A sort of Bar Camp  &lt;a href="http://www.amazon.com/exec/obidos/redirect?link_code=as2&amp;path=ASIN/019507906X&amp;tag=codeporn-20&amp;camp=1789&amp;creative=9325"&gt;Mirror World&lt;/a&gt;. Not only does this give attendees (local and remote) a good overview of the conference, it also allows for some very cool "event playback" options.&lt;br /&gt;&lt;br /&gt;Imagine this: you're reviewing the video stream from a particular session two weeks after the event. You hit the "auto-fast-fwd" button and the video playback becomes synched to the density of comments in the irc chat log. Sections with few comments fly by, but 10 seconds before a burst of comments, the video slows down to normal speed. Evidently political analysts already do that sort of thing with focus groups, but it would certainly help in wading through 20 hours worth of conference sessions.&lt;br /&gt;&lt;br /&gt;But there's no reason to wait till after the event. Let's say the density of session backchannel chatter falls off (or people start hitting the "I'm bored button", whatever) Suddenly, the powerpoint on the projector changes to scenes from Monty Python, thus increasing the overall entertainment level of the presentation. Or let's say things are getting a little too exciting (A python-vs-ruby war breaks out) : calming &lt;a href="http://video.google.com/videoplay?docid=-5131361405633130885&amp;q=kittens"&gt;scenes of kittens&lt;/a&gt; appear[1], cooling the tempers of all involved with their cuteness.&lt;br /&gt;&lt;br /&gt;Of course, the idea is not to write an entire system from scratch, that's the kind of old-school thinking that gets you a team of 20 developers working for 2 years. There are enough cool tools out there already so that it might just be possible to get an 80% solution together very quickly, I'm thinking in time for a production debut at &lt;a href="http://barcamp.org/BarCampAustin"&gt;Bar Camp Austin&lt;/a&gt; in March. Or, heck, sooner.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1] Chris Messina though of the kittens, not me. I'm allergic. In fact, Chris may have thought of all of this, it's kinda blurry. I was exhausted from the day before and a little punchy. But that's the beauty of a Mash Pit. Maybe puppies? Focusing on details is missing the point, we're talking grand experiment in social control here.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/barcampdallas" rel="tag"&gt;barcampdallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/mashpitdallas" rel="tag"&gt;mashpitdallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/barspy" rel="tag"&gt;barspy&lt;/a&gt;, &lt;a href="http://technorati.com/tag/2006" rel="tag"&gt;2006&lt;/a&gt;, &lt;a href="http://technorati.com/tag/architectonic" rel="tag"&gt;architectonic&lt;/a&gt;, &lt;a href="http://technorati.com/tag/mashup" rel="tag"&gt;mashup&lt;/a&gt;, &lt;a href="http://technorati.com/tag/mirrorworld" rel="tag"&gt;mirrorworld&lt;/a&gt;, &lt;a href="http://technorati.com/tag/unconference" rel="tag"&gt;mashpit&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-113869050524947735?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/113869050524947735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=113869050524947735' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113869050524947735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113869050524947735'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/01/barspy.html' title='BarSpy'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-113855707277783399</id><published>2006-01-29T09:49:00.000-08:00</published><updated>2006-01-30T18:38:30.443-08:00</updated><title type='text'>Mashpit Dallas In Progress</title><content type='html'>The chosen topics: "Remote Participation in Events : EventInABox", and "Social Attitude Tracking". This is fun. My mind is mush from the events of the past couple weeks, and I'm doubting how much I'm going to contribute, but it's hard not to get enthusiatic about making events like Bar Camp accessible to more people. The streaming video rocked (thanks guys!), but getting a single remote participation endpoint would have made it easier for people. We'll see what we come up with...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/barcampdallas" rel="tag"&gt;barcampdallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/mashpitdallas" rel="tag"&gt;mashpitdallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/dallas" rel="tag"&gt;dallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/2006" rel="tag"&gt;2006&lt;/a&gt;, &lt;a href="http://technorati.com/tag/architectonic" rel="tag"&gt;architectonic&lt;/a&gt;, &lt;a href="http://technorati.com/tag/web2.0" rel="tag"&gt;web2.0&lt;/a&gt;, &lt;a href="http://technorati.com/tag/unconference" rel="tag"&gt;mashpit&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-113855707277783399?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/113855707277783399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=113855707277783399' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113855707277783399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113855707277783399'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/01/mashpit-dallas-in-progress.html' title='Mashpit Dallas In Progress'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-113848217557392132</id><published>2006-01-28T12:58:00.000-08:00</published><updated>2006-01-28T16:12:05.776-08:00</updated><title type='text'>Bar Camp Dallas is Here</title><content type='html'>Sitting here typing in the hallway at Bar Camp Dallas with 50 or 60 of the biggest geeks in Dallas. Putting up the blank schedule board this morning was very scary, but the gratification on seeing the first two presentation tracks fill up within minutes was worth the fear.&lt;br /&gt;&lt;br /&gt;For those unable to attend in person, check out the backchannel at #barcampdallas on freenode (and ask about the live streaming video)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/barcampdallas" rel="tag"&gt;barcampdallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/barcamp" rel="tag"&gt;barcamp&lt;/a&gt;, &lt;a href="http://technorati.com/tag/dallas" rel="tag"&gt;dallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/2006" rel="tag"&gt;2006&lt;/a&gt;, &lt;a href="http://technorati.com/tag/architectonic" rel="tag"&gt;architectonic&lt;/a&gt;, &lt;a href="http://technorati.com/tag/web2.0" rel="tag"&gt;web2.0&lt;/a&gt;, &lt;a href="http://technorati.com/tag/unconference" rel="tag"&gt;unconference&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-113848217557392132?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/113848217557392132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=113848217557392132' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113848217557392132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113848217557392132'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/01/bar-camp-dallas-is-here.html' title='Bar Camp Dallas is Here'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-113840146911008546</id><published>2006-01-27T14:35:00.000-08:00</published><updated>2006-01-27T14:40:22.056-08:00</updated><title type='text'>Bar Camp Dallas, 16 Hours and Counting</title><content type='html'>Bar Camp Dallas is set for tomorrow at the Infomart, check out &lt;a href="http://barcamp.org/BarCampDallas"&gt;http://barcamp.org/BarCampDallas&lt;/a&gt; for details. We've got three confirmed product unveilings, and are bumping up against the confirmed guest limit. It ought to be interesting :-)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/barcampdallas" rel="tag"&gt;barcampdallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/barcamp" rel="tag"&gt;barcamp&lt;/a&gt;, &lt;a href="http://technorati.com/tag/dallas" rel="tag"&gt;dallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/2006" rel="tag"&gt;2006&lt;/a&gt;, &lt;a href="http://technorati.com/tag/architectonic" rel="tag"&gt;architectonic&lt;/a&gt;, &lt;a href="http://technorati.com/tag/web2.0" rel="tag"&gt;web2.0&lt;/a&gt;, &lt;a href="http://technorati.com/tag/unconference" rel="tag"&gt;unconference&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-113840146911008546?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/113840146911008546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=113840146911008546' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113840146911008546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113840146911008546'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/01/bar-camp-dallas-16-hours-and-counting.html' title='Bar Camp Dallas, 16 Hours and Counting'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-113751570885373753</id><published>2006-01-17T08:16:00.000-08:00</published><updated>2006-01-17T09:34:30.813-08:00</updated><title type='text'>Bar Camp NYC, Bar Camp Dallas and Being a User</title><content type='html'>My focus has tended to be on creating technology rather than using it. Of course, crafting the user experience is part of the creation process, but when I use software I tend to analyze it rather than just sit back and enjoy it. That's changed since I became involved with Bar Camp. Using the Internet to organize people in the real world has put me on the other side of the looking glass, and I'm not always comfortable there. (I often have the urge to rewrite whatever software I happen to be using, which is a distraction)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://barcamp.org/index.cgi?BarCampNYC"&gt;Bar Camp NYC&lt;/a&gt;, though, got me excited about being a plain old user. I've got a dozen pages in my notebook filled with cool stuff to check out (Plus another few pages filled with ideas to develop, but that's a different blog posting)&lt;br /&gt;&lt;br /&gt;So far, I've used &lt;a href="http://suprglu.com"&gt;SuprGlu&lt;/a&gt; and &lt;a href="http://thumbstacks.com"&gt;ThumbStacks&lt;/a&gt;. Spending time describing SuprGlu would be a waste, just check out the Bar Camp Dallas SuperGlu page at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://barcampdallas.suprglu.com"&gt;http://barcampdallas.suprglu.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you want your stuff to appear on the page, tag it "barcampdallas" using technorati, del.icio.us or flickr and it will show up. If you know of another tag stream that ought to be included, let me know.&lt;br /&gt;&lt;br /&gt;Thumbstacks isn't as far along, but still doesn't need too much verbage: It's like &lt;a href="http://writely.com"&gt;Writely&lt;/a&gt; for PowerPoint. If you're a fellow Writely addict, you'll go check it out immediately, if you're not, I'd check out something like Writely first then get back to ThumbStacks as it matures.&lt;br /&gt;&lt;br /&gt;So, if all that cool stuff is going on in NYC, what might be going on in Dallas? I already found out that &lt;a href="http://www.firewheeldesign.com/"&gt;Firewheel Design&lt;/a&gt; (they of &lt;a href="http://www.blinksale.com/"&gt;BlinkSale&lt;/a&gt;, Web 2.0 Poster Child) is in the area, who else have I missed? What other cool stuff is going on? Come to &lt;a href="http://barcamp.org/index.cgi?BarCampDallas"&gt;Bar Camp Dallas&lt;/a&gt; and find out...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/barcampdallas" rel="tag"&gt;barcampdallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/barcamp" rel="tag"&gt;barcamp&lt;/a&gt;, &lt;a href="http://technorati.com/tag/dallas" rel="tag"&gt;dallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/2006" rel="tag"&gt;2006&lt;/a&gt;, &lt;a href="http://technorati.com/tag/architectonic" rel="tag"&gt;architectonic&lt;/a&gt;, &lt;a href="http://technorati.com/tag/writely" rel="tag"&gt;writely&lt;/a&gt;, &lt;a href="http://technorati.com/tag/suprglu" rel="tag"&gt;suprglu&lt;/a&gt;, &lt;a href="http://technorati.com/tag/thumbstacks" rel="tag"&gt;thumbstacks&lt;/a&gt;, &lt;a href="http://technorati.com/tag/aggregation" rel="tag"&gt;aggregation&lt;/a&gt;, &lt;a href="http://technorati.com/tag/web2.0" rel="tag"&gt;web2.0&lt;/a&gt;, &lt;a href="http://technorati.com/tag/powerpoint" rel="tag"&gt;powerpoint&lt;/a&gt;, &lt;a href="http://technorati.com/tag/barcampnyc" rel="tag"&gt;barcampnyc&lt;/a&gt;, &lt;a href="http://technorati.com/tag/nyc" rel="tag"&gt;nyc&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-113751570885373753?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/113751570885373753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=113751570885373753' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113751570885373753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113751570885373753'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2006/01/bar-camp-nyc-bar-camp-dallas-and-being.html' title='Bar Camp NYC, Bar Camp Dallas and Being a User'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-113571335869646970</id><published>2005-12-27T11:44:00.000-08:00</published><updated>2005-12-27T12:08:48.226-08:00</updated><title type='text'>MIT OpenCourseWare : Entrepreneuring Sloan School Style</title><content type='html'>A while back, MIT decided to put all its courses online. I knew it was great for techie stuff, but it hadn't occurred to me that the Sloan School of Management was included in the deal. The MIT Enterprise Forum has a list of the startup related courses and seminars at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://enterpriseforum.mit.edu/entrepreneurship/courses/"&gt;http://enterpriseforum.mit.edu/entrepreneurship/courses/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's an amazing resource.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags:&lt;a href="http://technorati.com/tag/blog"&gt;blog&lt;/a&gt;, &lt;a href="http://technorati.com/tag/december"&gt;december&lt;/a&gt;, &lt;a href="http://technorati.com/tag/2005"&gt;2005&lt;/a&gt;, &lt;a href="http://technorati.com/tag/mit"&gt;mit&lt;/a&gt;, &lt;a href="http://technorati.com/tag/sloan"&gt;sloan&lt;/a&gt;, &lt;a href="http://technorati.com/tag/opencourseware"&gt;opencourseware&lt;/a&gt;, &lt;a href="http://technorati.com/tag/startup"&gt;startup&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ocw"&gt;ocw&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-113571335869646970?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/113571335869646970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=113571335869646970' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113571335869646970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113571335869646970'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2005/12/mit-opencourseware-entrepreneuring.html' title='MIT OpenCourseWare : Entrepreneuring Sloan School Style'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-113462533922449332</id><published>2005-12-14T21:14:00.000-08:00</published><updated>2005-12-19T19:51:47.706-08:00</updated><title type='text'>Ruby on Rails : A pure-Ruby stack?</title><content type='html'>Apache httpd is a wonderful application, but I don't like being &lt;span style="font-style: italic;"&gt;forced&lt;/span&gt; to use it (or lighttpd) when I'm using Rails. A while back, people thought that you had to use httpd in front of production Servlet applications, and I found that equally annoying. I did some performance testing[2] of Java-based web servers with an eye towards getting rid of Apache. It was a good excuse to dig into just exactly where the bottlenecks were, and the results turned out to be interesting. I've decided to do the same sort of thing with Rails. I'll post the final results over on Distributopia, but I'll add blog entries here as I hit interesting issues.&lt;br /&gt;&lt;br /&gt;&lt;s&gt;The abrupt transition from 77 request/seconds to 5 requests/second is a little suprising[5]. I want my pure-Ruby web service stack, and that sort of thing makes me nervous. Updates as I find out more...&lt;/s&gt;&lt;br /&gt;&lt;br /&gt;Ok, all that stuff previously? Mark it "unable to reproduce." As soon as my laptop finishes drying out, I'll try again, but as of now it's going down as a glitch in the test setup.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-113462533922449332?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/113462533922449332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=113462533922449332' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113462533922449332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113462533922449332'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2005/12/ruby-on-rails-pure-ruby-stack.html' title='Ruby on Rails : A pure-Ruby stack?'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-113410145200689250</id><published>2005-12-08T19:56:00.000-08:00</published><updated>2005-12-08T20:15:41.463-08:00</updated><title type='text'>FDK, BarCamp, Miscellany</title><content type='html'>&lt;ul&gt;&lt;li&gt;There's a new &lt;a href="http://feeds.feedburner.com/FutureDevelopmentKit"&gt;Future Development Kit&lt;/a&gt; podcast out. I guess I really missed out not being in Dallas during the Internet Boom.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;BarCamp Dallas proceeds apace. If you haven't &lt;a href="http://barcamp.org/index.cgi?BarCampDallas"&gt;signed up&lt;/a&gt; yet, then what are you waiting for? There are many more people doing cool things here in Dallas than I thought. &lt;a href="http://www.icerocket.com/"&gt;Mark Cuban's Web 2.0-ish startup&lt;/a&gt;? &lt;a href="http://dunck.us/anabasis"&gt;Greasemonkey maintainers&lt;/a&gt;? &lt;a href="http://qotile.net/"&gt;Geek&lt;/a&gt; &lt;a href="http://www.deanterry.com/"&gt;artists&lt;/a&gt;? And many more...&lt;/li&gt;&lt;br /&gt;&lt;li&gt;What's the deal with multi-word tags? Do you just run them together ("BarCampDallas"), or escape a space in there ("Bar%20Camp%20Dallas"), or just have several one-word tags? ("Bar" "Camp" "Dallas") Is this where tagging starts to break down and microformats start to make sense?&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-113410145200689250?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/113410145200689250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=113410145200689250' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113410145200689250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113410145200689250'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2005/12/fdk-barcamp-miscellany.html' title='FDK, BarCamp, Miscellany'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-113085147583284287</id><published>2005-11-01T04:44:00.000-08:00</published><updated>2006-01-30T18:47:04.863-08:00</updated><title type='text'>BarCamp Dallas</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4115/533/1600/logo_blackbg.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4115/533/320/logo_blackbg.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've grown sick of my own whinging about the lack of a technology community here in Dallas and have decided to do start doing something about it. The first step was the &lt;a href="http://futuredevelopmentkit.blogspot.com/"&gt;Future Development Kit&lt;/a&gt; podcast, the second step is to see about getting us a &lt;a href="http://barcamp.org/"&gt;BarCamp&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now, you might say (as did several people on the #barcamp irc channel when I brought up the idea), Austin would be a much better place to have a BarCamp. It has a thriving technology community, and it's cooler. Which is true. But I live in Dallas, not Austin. That people think of Austin first is an indication that Dallas &lt;i&gt;needs&lt;/i&gt; a BarCamp more than Austin does. Plus, although we have fewer geeks-per-capita, we have a bigger population, and thus more geeks total.&lt;br /&gt;&lt;br /&gt;So how about it, North Texas geeks and geekettes? Volunteers? Attendees? Suggestions for venues? Suggestions I'm crazy? Respond here, or email &lt;span style="font-style: italic;"&gt;barcamp at distributopia.com&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Update: &lt;a href="http://barcamp.org/index.cgi?BarCampDallas"&gt;http://barcamp.org/index.cgi?BarCampDallas&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;tags:&lt;span style="font-style: italic;font-size:78%;" &gt;&lt;a href="http://technorati.com/tag/blog"&gt;blog&lt;/a&gt;, &lt;a href="http://technorati.com/tag/october"&gt;november&lt;/a&gt;, &lt;a href="http://technorati.com/tag/2005"&gt;2005&lt;/a&gt;, &lt;a href="http://technorati.com/tag/barcamp"&gt;barcamp&lt;/a&gt;, &lt;a href="http://technorati.com/tag/dallas"&gt;dallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/barcampdallas"&gt;barcampdallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/texas"&gt;texas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/conference"&gt;conference&lt;/a&gt;, &lt;a href="http://technorati.com/tag/community"&gt;community&lt;/a&gt;, &lt;a href="http://technorati.com/tag/unconference"&gt;unconference&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-113085147583284287?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/113085147583284287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=113085147583284287' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113085147583284287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113085147583284287'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2005/11/barcamp-dallas.html' title='BarCamp Dallas'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-113004640475902671</id><published>2005-10-22T22:37:00.000-07:00</published><updated>2005-10-22T22:46:44.763-07:00</updated><title type='text'>The Future Development Kit</title><content type='html'>Podcast's up over at &lt;a href="http://futuredevelopmentkit.blogspot.com"&gt;futuredevelopmentkit.blogspot.com&lt;/a&gt;, with an iTunes compatible RSS feed at &lt;a href="http://feeds.feedburner.com/FutureDevelopmentKit"&gt;feeds.feedburner.com/FutureDevelopmentKit&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In other news, I'm getting a little fed up with how primitive Blogger is. I'm really not enjoying hand-coding technorati tags. I'm considering a move to either Movable Type or WordPress (as recommended by FeedBurner) and would appreciate comments from anyone who's happily using those (or any other) blog hosting services (free or for-pay), especially ones that support tagging directly.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/blog"&gt;blog&lt;/a&gt;, &lt;a href="http://technorati.com/tag/october"&gt;october&lt;/a&gt;, &lt;a href="http://technorati.com/tag/2005"&gt;2005&lt;/a&gt;, &lt;a href="http://technorati.com/tag/podcast"&gt;podcast&lt;/a&gt;, &lt;a href="http://technorati.com/tag/futuredevelopmentkit"&gt;futuredevelopmentkit&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-113004640475902671?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/113004640475902671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=113004640475902671' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113004640475902671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/113004640475902671'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2005/10/future-development-kit.html' title='The Future Development Kit'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-112890442687870925</id><published>2005-10-09T17:04:00.000-07:00</published><updated>2005-10-09T20:41:14.763-07:00</updated><title type='text'>The Appropriate Food: Pho Ca Dao</title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger/4115/533/1600/phocadao3.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/4115/533/320/phocadao3.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Hackers love noodles. Not sure why, but it's a known fact. I particularly like Bun[1], the Vietnamese vermicelli noodle dish. I hadn't had any in a while, and Saturday night I was out with my wife and daughter looking for a fix. We were in Garland (a suburb just north of Dallas) and mildly lost, making our way through a maze of Vietnamese businesses, when my wife spotted the sign for Pho Ca Dao. It wasn't the place we were intending to go, but the sign called out to us and we decided to roll the dice and give it a try.&lt;br /&gt;&lt;br /&gt;The inside of the restaurant wasn't fancy. It had a sort of diner feel that went with the sign. I suspect it may have been a Kip's in a past life, but nothing remained of the former occupants but a vague sense of good food served without pretense.&lt;br /&gt;&lt;br /&gt;I ordered vermicelli noodles with beef, while my wife had my normal choice: charbroiled pork with miniature egg rolls. We got some spring rolls to start, and I couldn't resist a durian smoothie. While we were waiting, one of the staff brought my daughter a balloon.&lt;br /&gt;&lt;br /&gt;The food arrived promptly. Our spring rolls appeared freshly made, with crisp, firm shrimp and unwilted leafy bits. My beef was tasty and tender, with not a hint of the gristle you get when the chef is skimping on the meat. The little egg rolls in my wife's dish were crisp on the outside and tender on the inside, and the pork was perfectly carmelized without being overcooked. The durian[2] shake smelled of rot and turpentine and gave me brain freeze. Everything was delicious.&lt;br /&gt;&lt;br /&gt;There are probably other Vietnamese restaurants in Dallas that can match the food, but I doubt many can match the graphic design talent that went into the sign and menu, or the friendly and prompt service. We'll definitely be back.&lt;br /&gt;&lt;br /&gt;Pho Ca Dao is located near the corner of Walnut and Plano Road in Garland, TX, just north of Dallas. They have a website at &lt;a href="http://phocadaodallas.com/"&gt;http://phocadaodallas.com/.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[1] Bun Cha, for example, is &lt;a href="http://www.recipehound.com/Recipes/2324.html"&gt;vermicelli noodles with charbroiled candied meat&lt;/a&gt;. Mmm. Candied meat.&lt;br /&gt;[2] Everybody loves durian: &lt;a href="http://en.wikipedia.org/wiki/Durian"&gt;http://en.wikipedia.org/wiki/Durian&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;tags:&lt;span style="font-style: italic;font-size:78%;" &gt;&lt;a href="http://technorati.com/tag/blog"&gt;blog&lt;/a&gt;, &lt;a href="http://technorati.com/tag/october"&gt;october&lt;/a&gt;, &lt;a href="http://technorati.com/tag/2005"&gt;2005&lt;/a&gt;, &lt;a href="http://technorati.com/tag/food"&gt;food&lt;/a&gt;, &lt;a href="http://technorati.com/tag/restaurant"&gt;restaurant&lt;/a&gt;, &lt;a href="http://technorati.com/tag/review"&gt;review&lt;/a&gt;, &lt;a href="http://technorati.com/tag/bun"&gt;bun&lt;/a&gt;, &lt;a href="http://technorati.com/tag/vietnamese"&gt;vietnamese&lt;/a&gt;, &lt;a href="http://technorati.com/tag/dallas"&gt;dallas&lt;/a&gt;, &lt;a href="http://technorati.com/tag/tx"&gt;tx&lt;/a&gt;, &lt;a href="http://technorati.com/tag/garland"&gt;garland&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-112890442687870925?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/112890442687870925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=112890442687870925' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112890442687870925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112890442687870925'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2005/10/appropriate-food-pho-ca-dao.html' title='The Appropriate Food: Pho Ca Dao'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-112809776734807096</id><published>2005-09-30T09:16:00.000-07:00</published><updated>2005-10-01T18:22:52.973-07:00</updated><title type='text'>RDF, printf() Debugging, Testing</title><content type='html'>When the large distributed system going gets tough, the tough add printf calls. And when the tough can no longer keep track of all the printf calls, the tough start calling the printfs a "Trace System" and add it to the development schedule. We're using log4net instead of printf, but the principle is the same.&lt;br /&gt;&lt;br /&gt;Large program traces can get tough to read, so you generally end up writing little tools to help process them. It's enough of a problem that the supercomputing people (big fans of parallel programming) have come up with trace-file format standards and a slew of utilities for dealing with them.&lt;br /&gt;&lt;br /&gt;Sadly, what I needed (dumping application state as well as program trace info) didn't fit well into the existing standards, so I was stumbling along with ad-hoc log messages that I post-processed with awk. I was in the middle of writing a tiny app to graph the post-processed output and show object linkages when I realized I was being silly. There was already a perfect data format with tons of associated filtering tools and visualizers: RDF.&lt;br /&gt;&lt;br /&gt;Although I sometimes rant against the more extreme goals of the Semantic Web effort, I find some of the underlying technology useful. RDF can be a pretty nifty tool if you don't let it go to your head.&lt;br /&gt;&lt;br /&gt;It worked great. Using RDF doesn't allow anything I couldn't have in theory done before, but it means I can take advantage of tons of existing tools and expertise. (You can buy a book on RDF, but you're never going to buy a book on whatever internal debug format you come up with.) I've been processing the RDF with cwm and viewing it with IsaViz and Welkin, and there are many other tools I haven't had a chance to try yet.&lt;br /&gt;&lt;br /&gt;I'm certainly not the first person to think of this (it looks like the W3C uses RDF as the format for test results for conformance suites), but I haven't seen a lot of buzz about it. I think that's a shame.&lt;br /&gt;&lt;br /&gt;I've imposed a one-week moratorium on any further RDF research (it was getting a little out of hand), but I think when the time's up I'm going to investigatge using N3 rules to validate test output (dump state, do an operation, re-dump state, compare states with reasoning engine, etc).&lt;br /&gt;&lt;br /&gt;Has anybody out there heard of any existing efforts along these lines? Google turns up tons of references, but none seemed to match exactly...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;tags: &lt;a href="http://technorati.com/tag/printf" rel="tag"&gt;printf&lt;/a&gt;, &lt;a href="http://technorati.com/tag/debugging" rel="tag"&gt;debugging&lt;/a&gt;, &lt;a href="http://technorati.com/tag/trace" rel="tag"&gt;trace&lt;/a&gt;, &lt;a href="http://technorati.com/tag/parallel" rel="tag"&gt;parallel&lt;/a&gt;, &lt;a href="http://technorati.com/tag/distributed" rel="tag"&gt;distributed&lt;/a&gt;, &lt;a href="http://technorati.com/tag/software" rel="tag"&gt;software&lt;/a&gt;, &lt;a href="http://technorati.com/tag/development" rel="tag"&gt;development&lt;/a&gt;, &lt;a href="http://technorati.com/tag/rdf" rel="tag"&gt;rdf&lt;/a&gt;, &lt;a href="http://technorati.com/tag/semantic" rel="tag"&gt;semantic&lt;/a&gt;, &lt;a href="http://technorati.com/tag/web" rel="tag"&gt;web&lt;/a&gt;, &lt;a href="http://technorati.com/tag/september" rel="tag"&gt;september&lt;/a&gt;, &lt;a href="http://technorati.com/tag/2005" rel="tag"&gt;2005&lt;/a&gt;, &lt;a href="http://technorati.com/tag/n3" rel="tag"&gt;n3&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-112809776734807096?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/112809776734807096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=112809776734807096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112809776734807096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112809776734807096'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2005/09/rdf-printf-debugging-testing.html' title='RDF, printf() Debugging, Testing'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-112707332697745518</id><published>2005-09-18T12:39:00.000-07:00</published><updated>2005-09-30T11:35:29.420-07:00</updated><title type='text'>The '#region' Directive in C# : Chocolate Covered Rat Turds Not Actually a Good Idea</title><content type='html'>Those of us who suffered through C and C++ preprocessor nightmares were happy to leave them behind when programming in Java. I was less than thrilled to get them back again in C#, but I try to keep an open mind.&lt;br /&gt;&lt;br /&gt;One of the more interesting directives introduced with C# is '#region'. It's meant to make overlong source files filled with ugly methods look prettier to the casual browser. It comes in especially handy when hiding the large chunks of autogenerated code ('turds') produced when working with forms in Visual Studio.&lt;br /&gt;&lt;br /&gt;Browsing through code with #region is a little like biting into chocolates from the "Whizzo Quality Assortment"[1]. No matter how pretty it looks, it's still a thin chocolate coating around crunchy raw unboned real dead frog bits.&lt;br /&gt;&lt;br /&gt;If you sweep rotting pieces of implementation under the rug, then nobody is going to be cleaning them up, are they? If you make a 5000 line long source file look like it's 300 lines long by compressing up the view in outline mode, it's not actually 300 lines long, is it? If you shove your ugly method implementation under the couch cushions, then it doesn't magically become a good implementation, it's just a sticky surprise for the next person to reach under there looking for loose change.&lt;br /&gt;&lt;br /&gt;To put it another way, imagine this: a novel that comes with #region directives so that you can avoid reading the badly written parts. Is that the sort of book you want to write?&lt;br /&gt;&lt;br /&gt;Like preprocessor directives in C, there are legitimate uses for #region. Despite the title of this post, I was serious about covering up Visual Studio turds. It's not like you can do anything about them, and they're not meant to be hand-edited, so there's no deep harm in covering them up. And sometimes a badly written framework can force you to have dozens of boilerplate methods that nobody really needs to look at. But, overall, #region is a tool for people who'd rather hide their mistakes than clean them up. It should be avoided.&lt;br /&gt;&lt;br /&gt;[1] "Ah - now, that's our speciality - covered with darkest creamy chocolate. When you pop it in your mouth steel bolts spring out and plunge straight through-both cheeks." - &lt;a href="http://orangecow.org/pythonet/sketches/crunchy.htm"&gt;Monty Python "Crunchy Frog" sketch&lt;/a&gt;. After a couple of "Spring Surprises", people lean to avoid popping unfamiliar code into their mouth.&lt;br /&gt;&lt;br /&gt;tags:&lt;span style="font-style: italic;font-size:78%;" &gt;&lt;a href="http://technorati.com/tag/blog"&gt;blog&lt;/a&gt;, &lt;a href="http://technorati.com/tag/september"&gt;september&lt;/a&gt;, &lt;a href="http://technorati.com/tag/2005"&gt;2005&lt;/a&gt;, &lt;a href="http://technorati.com/tag/code"&gt;code&lt;/a&gt;, &lt;a href="http://technorati.com/tag/software"&gt;software&lt;/a&gt;, &lt;a href="http://technorati.com/tag/aesthetics"&gt;aesthetics&lt;/a&gt;, &lt;a href="http://technorati.com/tag/style"&gt;style&lt;/a&gt;, &lt;a href="http://technorati.com/tag/csharp"&gt;csharp&lt;/a&gt;, &lt;a href="http://technorati.com/tag/visualstuido"&gt;visualstudio&lt;/a&gt;, &lt;a href="http://technorati.com/tag/preprocessor"&gt;preprocessor&lt;/a&gt;, &lt;a href="http://technorati.com/tag/region"&gt;region&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-112707332697745518?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/112707332697745518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=112707332697745518' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112707332697745518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112707332697745518'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2005/09/region-directive-in-c-chocolate.html' title='The &apos;#region&apos; Directive in C# : Chocolate Covered Rat Turds Not Actually a Good Idea'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-112477168647178683</id><published>2005-08-22T21:27:00.000-07:00</published><updated>2005-08-22T21:47:59.166-07:00</updated><title type='text'>Katamari Damacy and Everything</title><content type='html'>Vegetables, Fruit, Food, Snacks, Japanese Food, Drinks, Cooking, Trash, Cleaning, Reading, Stationary, Fashion, Sound, Sports, Powerful, Playtime, Games, Containers, Decorations, Necessities, Rain, Electronics, Furniture, Post, Luggage, Gardening, Flowers, Communication, Tools, Summer, Police, Science, Rich, Lighting, Hot, Cold, Seating, Weapons, Danger, Measuring, Art, Control, Japan, Festival, Celebration, Evil, Heros, School, Playground, Energy, Farming, ?, Symbols, Houses, Stores, Facilities, Partitions, Entrances &amp; Exits, Roadways, Vending Machines, Advertising, Guidance, Plants, ?, Wheels, Transport, ?, Romance, Children, Teenagers, Adulsts, Workers, Professionals, ?, Cute, Livestock, Fierce, Aquarium, Wings, Animals.&lt;br /&gt;&lt;br /&gt;Celestial-Empire-ish taxonomy of everything in the world as presented to players of&lt;span style="text-decoration: underline;"&gt; &lt;/span&gt;&lt;a href="http://www.namco.com/games/katamari_damacy/"&gt;Katemari Damacy&lt;/a&gt;, an insanely addictive and bizarre game for the PS2 that I'm now wasting many hours playing. Question marks are as-yet unrevealed categories.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-112477168647178683?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/112477168647178683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=112477168647178683' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112477168647178683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112477168647178683'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2005/08/katamari-damacy-and-everything.html' title='Katamari Damacy and Everything'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-112347480608745389</id><published>2005-08-07T21:16:00.000-07:00</published><updated>2005-08-07T21:59:34.456-07:00</updated><title type='text'>Princeton Tec Impact II LED Flashlight</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4115/533/1600/impactiiflashlight.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4115/533/200/impactiiflashlight.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;You know those horror movies where the soon-to-be werewolf dreams of running effortlessly through a dark forest, the world a black and white special-effects blur? Well, that's kind of what it's like trail running under a full moon on clear night. Running with a flashlight is a distant second in terms of enjoyment, but flashlights are easier to arrange than a Hunter's moon. (Yes, running in daylight is also good, and in some ways more convenient than running in the dark, but daylight in Texas in August comes with some downsides)&lt;br /&gt;&lt;br /&gt;I've been running with my trusty Mag-Lite Mini for a while, but I recently succumbed to a fit of gear-envy and bought a fancy Princeton Tech Impact II LED flashlight.&lt;br /&gt;&lt;br /&gt;It was a mistake.&lt;br /&gt;&lt;br /&gt;More or less in order: The beam is too focused (I need to see 10 feet in front of me in a broad, evenly-lit swath, not 50 feet away in a tight circle), it's difficult to turn on and off (I prefer to use a light only on the darkest sections of trail), it's light is an intense blue-white (a dimmer reddish light might be better for preserving night vision) and it's a little too small to fit comfortably in my hand. The first three I should have known, the last one suprised me. I actually prefer holding the slightly larger Mini Mag, it's easier to keep a loose-but-secure grip.&lt;br /&gt;&lt;br /&gt;On the up side, it's waterproof to some absurd depth (I really only need water-resistent), it doesn't weigh much (but I'm used to carrying a pint water bottle, so a couple of ounces here or there isn't a big deal) and has a 75 hour battery life (which is pretty darned cool, battery life is a big downside to the Mini Mag) The case is a high-tech looking transparent plastic (which makes a nice change from the beat-the-perp black aluminum of Mag-Lites) and it is very bright (which would normally be a desirable thing in a flashlight, but see above under "night vision")&lt;br /&gt;&lt;br /&gt;The Princeton Tec Impact II is a good flashlight, it's just a poor choice for trail runnning. Even a small amount of thought would have told me that in advance, it's all there right on the box, but gear-envy knows no conscious and I bought it on impulse.&lt;br /&gt;&lt;br /&gt;I haven't given up on LED flashlights, but next time I'll do a little research.&lt;br /&gt;&lt;br /&gt;tags:&lt;span style="font-style: italic;font-size:78%;" &gt;&lt;a href="http://technorati.com/tag/princeton%20tec"&gt;princeton tec&lt;/a&gt;, &lt;a href="http://technorati.com/tag/impact"&gt;impact&lt;/a&gt;, &lt;a href="http://technorati.com/tag/impact%20ii"&gt;impact ii&lt;/a&gt;, &lt;a href="http://technorati.com/tag/2005"&gt;2005&lt;/a&gt;, &lt;a href="http://technorati.com/tag/blog"&gt;blog&lt;/a&gt;, &lt;a href="http://technorati.com/tag/flashlight"&gt;flashlight&lt;/a&gt;, &lt;a href="http://technorati.com/tag/trail"&gt;trail&lt;/a&gt;, &lt;a href="http://technorati.com/tag/running"&gt;running&lt;/a&gt;, &lt;a href="http://technorati.com/tag/night"&gt;night&lt;/a&gt;, &lt;a href="http://technorati.com/tag/gear"&gt;gear&lt;/a&gt;, &lt;a href="http://technorati.com/tag/review"&gt;review&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-112347480608745389?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/112347480608745389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=112347480608745389' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112347480608745389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112347480608745389'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2005/08/princeton-tec-impact-ii-led-flashlight.html' title='Princeton Tec Impact II LED Flashlight'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-112260746639866524</id><published>2005-07-28T20:11:00.000-07:00</published><updated>2005-09-18T17:05:20.876-07:00</updated><title type='text'>The Funnest Volume Knob in the Whole World</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4115/533/1600/powermate.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4115/533/200/powermate.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;My job description includes "knows how to create fun software." Some days this makes me happy, other days it stresses me out. Lately it's been stressing me out. As a consequence, I've been paying a lot of attention to what's fun. Of course, that pretty much sucks the fun right out of everything, but it's been educational.&lt;br /&gt;&lt;br /&gt;I've spent that last fifteen minutes or so trying to figure out what's so fun about my &lt;a href="http://www.griffintechnology.com/products/powermate/"&gt;Griffin PowerMate&lt;/a&gt;. The PowerMate is a USB controller that looks like a volume knob torn off the front of a 70's era stereo. I got mine a couple years ago to use with iTunes, and it's been quitely amusing me ever since. The controller is generic (the driver lets you assign the various rotation and pressing combinations to pretty much anything you want), but I just use mine as a volume knob.&lt;br /&gt;&lt;br /&gt;It's a fairly hefty block of machined aluminium, rotates smoothly with just enough drag to give it a feeling of quality, and does a serviceable job of controlling the volume. But that makes it "satisfying", which isn't exactly the same thing as "fun".&lt;br /&gt;&lt;br /&gt;It's a little surprising at first. You don't expect to see what is obviously a volume knob sitting on a desk attached to your computer. The incongruity is definitely part of fun, but the novelty wears off. On the other hand, when somebody new sees it, they generally comment, which briefly reactivates the novely aspect.&lt;br /&gt;&lt;br /&gt;Oh yeah, and it pulsates.&lt;br /&gt;&lt;br /&gt;The base is a translucent rubber substance, and there are a pair of blue LEDs inside, so the knob sits on a glowing blue base. The LEDs fade on and off in a three second cycle, and get brighter the higher the volume is set.&lt;br /&gt;&lt;br /&gt;The pulsing is suprisingly un-annoying. It turns out to be subtle enough to generally ignore, but obvious enough to notice if you're looking at it. And it's fun. I'm not quite sure why, but there's something entertaining about it. Sort of like watching a fire.&lt;br /&gt;&lt;br /&gt;So, we've got:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;  Functional (it does what it needs to do)&lt;/li&gt;   &lt;li&gt;  Satisfying (it does it with style)&lt;/li&gt;   &lt;li&gt;  Novel (reinforced by the comments of people who haven't seen it before)&lt;/li&gt;   &lt;li&gt;  Hypnotic (pulsing blue glow clouds the mind)&lt;/li&gt; &lt;/ul&gt;Which, in this case, adds up to the world's funnest volume knob. I'm not entirely satisfied with the "Hypnotic" attribute, I think it's worth a little more thought, but perhaps it should wait until I've picked apart more fun computer-related experiences.&lt;br /&gt;&lt;br /&gt;tags:&lt;span style="font-style: italic;font-size:78%;" &gt;&lt;a href="http://technorati.com/tag/fun"&gt;fun&lt;/a&gt;,&lt;a href="http://technorati.com/tag/funology"&gt;funology&lt;/a&gt;,&lt;a href="http://technorati.com/tag/hedonic"&gt;hedonic&lt;/a&gt;,&lt;a href="http://technorati.com/tag/2005"&gt;2005&lt;/a&gt;,&lt;a href="http://technorati.com/tag/blog"&gt;blog&lt;/a&gt;,&lt;a href="http://technorati.com/tag/griffin"&gt;griffin&lt;/a&gt;,&lt;a href="http://technorati.com/tag/powermate"&gt;powermate&lt;/a&gt;,&lt;a href="http://technorati.com/tag/july"&gt;july&lt;/a&gt;,&lt;a href="http://technorati.com/tag/study"&gt;study&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-112260746639866524?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/112260746639866524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=112260746639866524' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112260746639866524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112260746639866524'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2005/07/funnest-volume-knob-in-whole-world.html' title='The Funnest Volume Knob in the Whole World'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-112148308282204043</id><published>2005-07-15T19:57:00.000-07:00</published><updated>2005-07-16T20:18:08.820-07:00</updated><title type='text'>Drawn With A Very Fine Camelhair Brush</title><content type='html'>I was pleased to find that there were (as of 1993) exactly twenty five kinds of nouns, no more, no less. Here they are, after the fashion of "Celestial Empire of benevolent Knowledge"[1]&lt;br /&gt;&lt;br /&gt;&lt;table padding="0" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;i&gt;{act, action, activity}&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&lt;i&gt;{natural object}&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;i&gt;{animal, fauna}&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&lt;i&gt;{natural phenomenon}&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;i&gt;{artifact}&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&lt;i&gt;{person, human being}&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;i&gt;{attribute, property}&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&lt;i&gt;{plant, flora}&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;i&gt;{body, corpus}&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&lt;i&gt;{possession}&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;i&gt;{cognition, knowledge}&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&lt;i&gt;{process}&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;i&gt;{communication}&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&lt;i&gt;{quantity, amount}&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;i&gt;{event, happening}&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&lt;i&gt;{relation}&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;i&gt;{feeling, emotion}&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&lt;i&gt;{shape}&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;i&gt;{food}&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&lt;i&gt;{state, condition}&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;i&gt;{group, collection}&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&lt;i&gt;{substance}&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;i&gt;{location, place}&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&lt;i&gt;{time}&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;i&gt;{motive}&lt;/i&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;The list is from "Five Papers on WordNet"[2]. &lt;a href="http://wordnet.princeton.edu/"&gt;WordNet&lt;/a&gt; is a dictionary on steroids. Or maybe LSD. Instead of being the typical alphabetical list of definitions, it's a queriable database of word relationships organized according to psycholinguitic theories.&lt;br /&gt;&lt;br /&gt;The paper reminded me why I bothered to get a Linguistics degree. It's no doubt out of date with regard to the number twenty-five, but that's not really the point.&lt;br /&gt;&lt;br /&gt;The list is reminiscent of the kinds of things you get with &lt;i&gt;a priori&lt;/i&gt; philosophical languages. The search for the perfect philisophical language (one that reflects the nature of reality directly, and can be logically manipulated to find "truth"), has taken up a lot of time and effort over the past dozen or so centuries. I suspect that the semantic web is the latest link in this chain of well-meant silliness. Umberto Eco, in his book &lt;a href="http://www.amazon.com/exec/obidos/redirect?path=ASIN/0631205101&amp;link_code=as2&amp;amp;amp;amp;amp;amp;amp;amp;camp=1789&amp;a%5C%20mp;tag=codeporn-20&amp;creative=9325"&gt;The Search for the Perfect Language&lt;/a&gt;, goes into great detail on the subtle addictiveness of that sort of thing, and how the scientifically inclined mind is apt to get trapped in an obsessive investigation into Hermetic mysteries while claiming to be engaging in science. But what the heck, it got us the Dewey Decimal system. Perhaps RDF, shorn of the "Semantic Web", will amount to something similiarly flawed-but-useful.&lt;br /&gt;&lt;br /&gt;WordNet isn't a philisophical language, though on the surface it could be mistaken for one. WordNet isn't designed to reflect the perfection of the universe, but to reflect the imperfect view of the world as seen through human eyes and interpreted through words. It uses commonsensical and scientifically well founded theories of language. It records instead of imposes, and has no pretension of perfection. I really like WordNet.&lt;br /&gt;&lt;br /&gt;For the curious, the Celestial Empire list restricts itself to animals, which are divided as follows: (a) belonging to the emperor, (b) embalmed, (c) tame, (d) sucking pigs, (e) sirens, (f) fabulous, (g) stray dogs, (h) included in the present classification, (i) frenzied, (j) innumerable, (k) drawn with a very fine camelhair brush, (l) et cetera, (m) having just broken the water pitcher, (n) that from a long way off look like flies.&lt;br /&gt;&lt;br /&gt;[1] &lt;b&gt;The Analytical Language of John Wilkins&lt;/b&gt;&lt;br /&gt;&lt;i&gt;Jorge Luis Borges&lt;/i&gt;&lt;br /&gt;&lt;a href="http://www.alamut.com/subj/artiface/language/johnWilkins.html"&gt;http://www.alamut.com/subj/artiface/language/johnWilkins.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[2] &lt;b&gt;Five papers on WordNet&lt;/b&gt;&lt;br /&gt;&lt;i&gt;Miller, George A., Christiane Fellbaum, Katherine J. Miller.&lt;/i&gt;&lt;br /&gt;&lt;a href="ftp://ftp.cogsci.princeton.edu/pub/wordnet/5papers.ps"&gt;ftp://ftp.cogsci.princeton.edu/pub/wordnet/5papers.ps&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;tags:&lt;span style="font-style: italic;font-size:78%;" &gt;&lt;a href="http://technorati.com/tag/wordnet"&gt;wordnet&lt;/a&gt;,&lt;a href="http://technorati.com/tag/blog"&gt;blog&lt;/a&gt;,&lt;a href="http://technorati.com/tag/july"&gt;july&lt;/a&gt;,&lt;a href="http://technorati.com/tag/2005"&gt;2005&lt;/a&gt;,&lt;a href="http://technorati.com/tag/lexical"&gt;lexical&lt;/a&gt;,&lt;a href="http://technorati.com/tag/psycholinguistics"&gt;psycholinguistics&lt;/a&gt;,&lt;a href="http://technorati.com/tag/noun"&gt;noun&lt;/a&gt;,&lt;a href="http://technorati.com/tag/ai"&gt;ai&lt;/a&gt;,&lt;a href="http://technorati.com/tag/rdf"&gt;rdf&lt;/a&gt;,&lt;a href="http://technorati.com/tag/eco"&gt;eco&lt;/a&gt;,&lt;a href="http://technorati.com/tag/borges"&gt;borges&lt;/a&gt;,&lt;a href="http://technorati.com/tag/wilkins"&gt;wilkins&lt;/a&gt;,&lt;a href="http://technorati.com/tag/linguistics"&gt;linguistics&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-112148308282204043?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/112148308282204043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=112148308282204043' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112148308282204043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112148308282204043'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2005/07/drawn-with-very-fine-camelhair-brush.html' title='Drawn With A Very Fine Camelhair Brush'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-112114218150139137</id><published>2005-07-11T21:17:00.000-07:00</published><updated>2005-07-16T20:21:18.873-07:00</updated><title type='text'>Interface Melancholia</title><content type='html'>I'm a sucker for &lt;a href="http://en.wikipedia.org/wiki/Tangible_User_Interface"&gt;tangible interfaces&lt;/a&gt;. Tangible interfaces try to recouple the virtual and the real. An example would be outfitting a set of children's blocks with little sensors and using them, rather than a mouse or a keyboard, as an interface. It sounds kind of hokey, but in practice it can be pretty neat. I got hooked at the SIGGRAPH 98 art gallery by an installation that used a video projector to overlay words on a stream of water. You could hold out your hand and virtually "dam up" the stream, and the words would all swirl around as if you were holding them back. I finally looked up the info, you can find it here[1].&lt;br /&gt;&lt;br /&gt;This[2] tangible interface (courtesy of my new addiction future feeder[3]) uses sticks and stones and leaves for interaction:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos23.flickr.com/25376457_3570589b3c_o.jpg"/&gt;&lt;br /&gt;&lt;br /&gt;It evokes something, what exactly I'm not quite sure. It probably has something to do with &lt;a href="http://www.themodern.org/f_html/kiefer3.html"&gt;Anselm Kiefer&lt;/a&gt; or maybe the ephemeral environmental art of &lt;a href="http://en.wikipedia.org/wiki/Andy_Goldsworthy"&gt;Andy Goldsworthy&lt;/a&gt;. The movie of the installation isn't very clear, but I'm thinking it may be one of those things that's better in my imagination then in reality.&lt;br /&gt;&lt;br /&gt;If you're in the Dallas area, the Modern Art Museum of Fort Worth (please don't call it "the modern") has a couple of Anselm Kiefer pieces. I especially like the winged book:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos23.flickr.com/25376456_f047c48815_o.jpg"/&gt;&lt;br /&gt;&lt;br /&gt;The new MAMFW (please don't call it "the modern") has a steep admission charge, unlike the old and busted (but free) MAMFW. Somebody has got to pay for all that concrete. It is, admittedly, very nice concrete.&lt;br /&gt;&lt;br /&gt;Looking back over, I'm definitely thinking Andy Goldsworthy and not Anselm Kiefer, but I know Kiefer fits in there someplace. I suspect there's a unifying theme to all this buried somewhere, but I'm too tired to dig it out. Just look at the nice pictures and try to feel all evoked.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic; font-size:78%;"&gt;tags:&lt;a href="http://technorati.com/tag/kiefer" rel="tag"&gt;kiefer&lt;/a&gt;,&lt;a href="http://technorati.com/tag/goldsworthy" rel="tag"&gt;goldsworthy&lt;/a&gt;,&lt;a href="http://technorati.com/tag/tangible" rel="tag"&gt;tangible&lt;/a&gt;,&lt;a href="http://technorati.com/tag/2005" rel="tag"&gt;2005&lt;/a&gt;,&lt;a href="http://technorati.com/tag/july" rel="tag"&gt;july&lt;/a&gt;,&lt;a href="http://technorati.com/tag/blog" rel="tag"&gt;blog&lt;/a&gt;,&lt;a href="http://technorati.com/tag/water" rel="tag"&gt;water&lt;/a&gt;,&lt;a href="http://technorati.com/tag/siggraph" rel="tag"&gt;siggraph&lt;/a&gt;,&lt;a href="http://technorati.com/tag/1998" rel="tag"&gt;1998&lt;/a&gt;,&lt;a href="http://technorati.com/tag/orlando" rel="tag"&gt;orlando&lt;/a&gt;,&lt;a href="http://technorati.com/tag/dfw" rel="tag"&gt;dfw&lt;/a&gt;,&lt;a href="http://technorati.com/tag/ft.%20worth" rel="tag"&gt;ft. worth&lt;/a&gt;,&lt;a href="http://technorati.com/tag/museum" rel="tag"&gt;museum&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;[1] &lt;a href="http://acg.media.mit.edu/projects/stream/"&gt;http://acg.media.mit.edu/projects/stream/&lt;/a&gt;&lt;br /&gt;[2] &lt;a href="http://www.d-srupt.com/weblog/2005/02/natural-interfaces.html"&gt;http://www.d-srupt.com/weblog/2005/02/natural-interfaces.html&lt;/a&gt;&lt;br /&gt;[3] &lt;a href="http://futurefeeder.com"&gt;http://futurefeeder.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-112114218150139137?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/112114218150139137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=112114218150139137' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112114218150139137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112114218150139137'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2005/07/interface-melancholia.html' title='Interface Melancholia'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-112102131386153270</id><published>2005-07-10T11:43:00.000-07:00</published><updated>2005-07-10T19:37:15.710-07:00</updated><title type='text'>Developers Squared : Part 1</title><content type='html'>At work, we've been discussing the best time to add developers to a team. I'm of the "later but not too late" school. It's been suggested that if I'm going to run around saying things like "later but not too late", I'm obliged to explain myself. I'm planning to write up a couple of blog entries on this topic, I'll stick to the basics in this one.&lt;br /&gt;&lt;br /&gt;Fred Brooks in his legendary &lt;a href="http://www.amazon.com/exec/obidos/redirect?path=ASIN/0201835959&amp;amp;link_code=as2&amp;amp;camp=1789&amp;amp;tag=codeporn-20&amp;amp;creative=9325"&gt;The Mythical Man-Month: Essays on Software Engineering&lt;/a&gt; discusses the problem of staffing and the division of work. Brooks presents his discussion as a series of graphs showing the time to complete a project versus the number of workers assigned to the project.&lt;br /&gt;&lt;br /&gt;A "perfectly partionable task" is one where there is no communication between workers and no sequential constraints between subtasks. This is in all ways totally unlike a software project, and is presented for comparison only. The graph is log-log, so the 1/x relationship shows up as a straight line:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos23.flickr.com/25041516_babce0d29b_o.png"/&gt;&lt;br /&gt;&lt;br /&gt;An unpartionable task (the usual example is bearing a child) takes the same amount of time (nine months) no matter how many workers are assigned. Software projects aren't generally quite this bad:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos23.flickr.com/25041517_881136e637_o.png" /&gt;&lt;br /&gt;&lt;br /&gt;If a task is imperfectly partionable, costs associated with coordinating the subtasks have to be factored in. Communication costs vary, but Brooks models the worst case as rising with the square of the number of developers (if each worker has to spend a portion of their day talking to every other worker) Real-life software projects are generally of this variety, at least early on. Things can get ugly fast. The graph is again log-log, so it can be directly compared to the "perfectly partionable" case above:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos22.flickr.com/25041518_3c6337636b_o.png" /&gt;&lt;br /&gt;&lt;br /&gt;That upturn there at the end means that each additional worker actually delays the project by some amount. There is hope. The longer you wait to add people, the more mature the system framework becomes, and the more partionable the the system should be. So the "later" part in "later but not too late" has something to do with having a relatively mature system framework. I'll address the "too late" part, as well as as some other contributing factors, in upcoming postings.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic; font-size:78%;"&gt;tags:&lt;a href="http://technorati.com/tag/software" rel="tag"&gt;software&lt;/a&gt;,&lt;a href="http://technorati.com/tag/engineering" rel="tag"&gt;engineering&lt;/a&gt;,&lt;a href="http://technorati.com/tag/brooks" rel="tag"&gt;brooks&lt;/a&gt;,&lt;a href="http://technorati.com/tag/2005" rel="tag"&gt;2005&lt;/a&gt;,&lt;a href="http://technorati.com/tag/july" rel="tag"&gt;july&lt;/a&gt;,&lt;a href="http://technorati.com/tag/blog" rel="tag"&gt;blog&lt;/a&gt;,&lt;a href="http://technorati.com/tag/system" rel="tag"&gt;system&lt;/a&gt;,&lt;a href="http://technorati.com/tag/project" rel="tag"&gt;project&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-112102131386153270?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/112102131386153270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=112102131386153270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112102131386153270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112102131386153270'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2005/07/developers-squared-part-1.html' title='Developers Squared : Part 1'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-112052030937639972</id><published>2005-07-04T16:35:00.000-07:00</published><updated>2005-07-08T09:32:11.976-07:00</updated><title type='text'>Two More from CHI 2005</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4115/533/1600/tastescreen.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4115/533/320/tastescreen.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I'm working on technology that will go into people's homes, so I've been catching up on my reading in pervasive technologies and &lt;a href="http://www.ubiq.com/hypertext/weiser/UbiHome.html"&gt;ubiquitous computing&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Artful Systems in the Home&lt;/span&gt;&lt;br /&gt;Alex S. Taylor, &lt;span style="font-style: italic;"&gt;Microsoft Research (UK)&lt;/span&gt;, Laurel Swan, &lt;span style="font-style: italic;"&gt;Brunel University (UK)&lt;/span&gt;&lt;br /&gt;&lt;a style="font-style: italic;" href="http://research.microsoft.com/%7East/"&gt;http://research.microsoft.com/~ast/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I was reading "Artful Systems in the Home" and found myself nodding as I read it. What the authors say makes sense. Much current research seems to be about finding uses for cool technology, instead of finding cool uses for technology, and it was refreshing to see the needs of families taken as primary when discussing technology for the home.&lt;br /&gt;&lt;br /&gt;But the paper left me with a problem. As someone actually working on these sorts of systems, I can sympathise with the paper's aims, but it offers me very little I can use.&lt;br /&gt;&lt;br /&gt;It's an observation I wouldn't have made if I hadn't been trying to build a system for the home, and it pains me to make it. I like the idea of thinking through consequences, of studying how to actually help people with technology instead of helping technology by forcing it onto people.&lt;br /&gt;&lt;br /&gt;Ultimately, though, I have to build something, and the feedback of others trying to make real systems is more useful than ethnographic musings.&lt;br /&gt;&lt;br /&gt;It was a shock to realize that I was getting more practical use out of some very silly pure-geeky-technology papers than I was out of a paper based on the sort of approach I had come to respect.&lt;br /&gt;&lt;br /&gt;That was a bit of a downer, so here's something a little more fun. Excessive commentary would be inappropriate, just read it, it's short. And don't miss the bibliography, entry [9] pretty much says it all:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Edible Bits: Seamless Interfaces between People, Data and Food&lt;/span&gt;&lt;br /&gt;Dan Maynes-Aminzade, &lt;span style="font-style: italic;"&gt;Stanford University, USA&lt;/span&gt;&lt;br /&gt;&lt;a style="font-style: italic;" href="http://www.monzy.org/eui"&gt;http://www.monzy.org/eui&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-style: italic;"&gt;tags:&lt;/span&gt;&lt;a style="font-style: italic;" href="http://technorati.com/tag/design" rel="tag"&gt;design&lt;/a&gt;&lt;span style="font-style: italic;"&gt;,&lt;/span&gt;&lt;a style="font-style: italic;" href="http://technorati.com/tag/ubicomp" rel="tag"&gt;ubicomp&lt;/a&gt;&lt;span style="font-style: italic;"&gt;,&lt;/span&gt;&lt;a style="font-style: italic;" href="http://technorati.com/tag/homeconductor" rel="tag"&gt;homeconductor&lt;/a&gt;&lt;span style="font-style: italic;"&gt;,&lt;/span&gt;&lt;a style="font-style: italic;" href="http://technorati.com/tag/conference" rel="tag"&gt;conference&lt;/a&gt;&lt;span style="font-style: italic;"&gt;,&lt;/span&gt;&lt;a style="font-style: italic;" href="http://technorati.com/tag/sigchi" rel="tag"&gt;sigchi&lt;/a&gt;&lt;span style="font-style: italic;"&gt;,&lt;/span&gt;&lt;a style="font-style: italic;" href="http://technorati.com/tag/hci" rel="tag"&gt;hci&lt;/a&gt;,&lt;a style="font-style: italic;" href="http://technorati.com/tag/2005" rel="tag"&gt;2005&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-112052030937639972?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/112052030937639972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=112052030937639972' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112052030937639972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112052030937639972'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2005/07/two-more-from-chi-2005.html' title='Two More from CHI 2005'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-112035591633340829</id><published>2005-07-02T18:49:00.000-07:00</published><updated>2005-07-05T19:21:51.340-07:00</updated><title type='text'>Five from CHI 2005</title><content type='html'>I wanted to go to &lt;a href="http://chi2005.org/"&gt;CHI 2005&lt;/a&gt;, but things didn't work out. Second best is just reading the proceedings, but I'm too cheap to buy the proceedings. That leaves third best: reading the program online and googling the author names. You can find a good percentage of the papers that way without having to shell out major bucks. The only real downside is the inability to easily browse. You end up having to guess what might be interesting based on the titles. I decided to pick out five or so papers that had interesting or evocative or mysterious titles and see how they stacked up for:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Inspiration&lt;/li&gt;   &lt;li&gt;Practical Advice&lt;/li&gt;   &lt;li&gt;Fun&lt;/li&gt; &lt;/ul&gt;The fun part is important when you're reading outside your direct field of expertise, things get boring pretty fast if you're lost. My favorite papers have all three, but I'll settle for just one, especially if it's a real hoot. I figured anything that included a contribution from the MIT Media Lab was bound to have a couple of side-splitting hoots. I wasn't disappointed.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dishmaker: Personal Fabrication Interface&lt;/span&gt;&lt;br /&gt;Leonardo Bonanni, Sam Sarcia, Subodh Paudel, Ted Selker, &lt;span style="font-style: italic;"&gt;MIT Media Laboratory, USA&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Fun factor off the scale, and inspirational to boot. No totally new ideas here, but the fact that they actually went and built the thing gets them massive points. Yes, they built a machine that on-demand manufactures your plates, bowls and cups just-in-time for dinner, then recycles them for breakfast. The fact that the plates are only 6 inches across (and look amazingly like the bowls, which look pretty much exactly like the cups) may impact the practicality, but in no way detracts from the pure geeky joy of the thing. Here's what the MIT Media Lab is good for: amusing me.&lt;br /&gt;&lt;br /&gt;The paper is here somewhere:&lt;a style="font-style: italic;" href="http://web.media.mit.edu/%7Eamerigo/"&gt; http://web.media.mit.edu/~amerigo/&lt;/a&gt;, but you don't really get the full effect unless you look at the rest of the site.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Glimpse: a Novel Input Model for Multi-level Devices&lt;/span&gt;&lt;br /&gt;Clifton Forlines, Chia Shen, &lt;span style="font-style: italic;"&gt;Mitsubishi Electric Research Laboratories, USA&lt;/span&gt;; Bill Buxton, &lt;span style="font-style: italic;"&gt;Buxton Design, USA&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What's a Multi-level device, anyway? Well, now I know, it's a term you make up when you're trying very hard to come up with a use for pressure-sensitive touch pads/digitizing tablets. Not such a big deal in the past, when the main use was getting a better simulation of brush strokes in paint programs, but now that (evidently) every tablet PC comes with a pressure sensing surface, there's some (ehem) pressure to make use of it. The authors suggest a sort of tenative action, with a firm push to commit and a lift to undo, something like the way some digital camera shutter buttons have a "half-way-pushed" state. I'd have to try it out, it sounds a little hard to use, I know the camera shutter button thing takes some practice to get used to (I still occasionally take a picture when I'm just trying to lock the exposure). Fun factor gets a "meh," I was inspired to go try and figure out how to get the pressure data out of my tablet PC, so there's that, and I learned several things, so it was informative.&lt;br /&gt;&lt;br /&gt;&lt;a style="font-style: italic;" href="http://www.merl.com/publications/TR2005-024/"&gt;http://www.merl.com/publications/TR2005-024/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Making Space for Stories: Ambiguity in the Design of Personal Communication Systems&lt;/span&gt;&lt;br /&gt;Paul M. Aoki, &lt;span style="font-style: italic;"&gt;PARC (USA)&lt;/span&gt;, Allison Woodruff,&lt;span style="font-style: italic;"&gt; Intel Research (USA)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One of the "Best Paper" winners. I was interested enough when I thought I was going to learn about the effects of electronically mediated communication on face-saving strategies. (Think "I don't want to talk to/chat with this person, but I don't want to hurt their feelings and they don't want to think that I don't want to talk with them"), but then I found myself reading about how to apply Kerberos (kind of) to human interaction and I was hooked. Geeks do sociology. Fun (not Big Fun, but fun), inspirational, and interesting. And relatively short. It deserved the award.&lt;br /&gt;&lt;br /&gt;&lt;a style="font-style: italic;" href="http://www2.parc.com/csl/projects/audiospaces/pdf/Aoki-CHI2005-Ambiguity.pdf"&gt;http://www2.parc.com/csl/projects/audiospaces/pdf/Aoki-CHI2005-Ambiguity.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Designing the Spectator Experience&lt;/span&gt;&lt;br /&gt;Stuart Reeves, &lt;span style="font-style: italic;"&gt;University of Nottingham (UK)&lt;/span&gt;, Steve Benford, &lt;span style="font-style: italic;"&gt;University of Nottingham (UK),&lt;/span&gt; Clare O'Malley, &lt;span style="font-style: italic;"&gt;University of Nottingham (UK)&lt;/span&gt;, Mike Fraser, &lt;span style="font-style: italic;"&gt;University of Bristol (UK)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Another "Best Paper" winner. I was prepared to be bored, but was encouraged by the brevity of the thing and decided to read it. I was glad. The paper strings together activities (or, rather, performances) as diverse as Dance Dance Revolution, photo booths, and looking through a telescope. You've got your basic "see the results of actions, can't see the results of actions" axis, and your "can see the actions themselves, can't see the actions themselves" axis, and you put the two of them together and come up with something interesting and, evidently, useful. I kept on thinking of waiting in a virtual line to play online Quake deathmatches, and how half the fun was watching the people ahead in line fight it out.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mrl.nott.ac.uk/%7Estr/projects/perf_inter.html"&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="font-style: italic;"&gt;http://www.mrl.nott.ac.uk/%7Estr/projects/perf_inter.html&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Urban Probes: Encountering Our Emerging Urban Atmospheres &lt;/span&gt;Eric&lt;br /&gt;Paulos, &lt;span style="font-style: italic;"&gt;Intel Research (USA)&lt;/span&gt;, Tom Jenkins, &lt;span style="font-style: italic;"&gt;Royal College of Art (UK)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It's alt.chi (not that there's anything wrong with that), but even so, this one is a little silly. But it's too fun to resist, and for much the same reason as the Dishmaker: they actually went and built something instead of just theorizing. True, the thing they built is a trashcan that photographs and analyzes (then displays) each item of trash as it's thrown away, but that's not the point. The point is that they actually built something real. And I learned what a "probe" was. And I got to see Eric Paulos's web site:&lt;br /&gt;&lt;br /&gt;&lt;a style="font-style: italic;" href="http://berkeley.intel-research.net/paulos/"&gt;http://berkeley.intel-research.net/paulos/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;tags:&lt;a href="http://technorati.com/tag/design" rel="tag"&gt;design&lt;/a&gt;,&lt;a href="http://technorati.com/tag/interaction" rel="tag"&gt;interaction&lt;/a&gt;,&lt;a href="http://technorati.com/tag/sigchi" rel="tag"&gt;sigchi&lt;/a&gt;,&lt;a href="http://technorati.com/tag/conference" rel="tag"&gt;conference&lt;/a&gt;,&lt;a href="http://technorati.com/tag/acm" rel="tag"&gt;acm&lt;/a&gt;,&lt;a href="http://technorati.com/tag/2005" rel="tag"&gt;2005&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-112035591633340829?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/112035591633340829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=112035591633340829' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112035591633340829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112035591633340829'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2005/07/five-from-chi-2005.html' title='Five from CHI 2005'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14059280.post-112008139581558617</id><published>2005-06-29T18:33:00.000-07:00</published><updated>2005-07-05T19:24:23.963-07:00</updated><title type='text'>The Appropriate Location</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4115/533/1600/Gachet.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4115/533/320/Gachet.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In order to write, you have to have a place to write. Novels or software, technical documentation or short stories, even when your mind is floating free your body has to be sitting somewhere. Work is the default, but a good coffeehouse is indispensable. Dallas isn't exactly a coffeehouse sort of town (trendy bars are more the style here) so I was happy to find &lt;a href="http://www.gachetcoffee.com/"&gt;Gachet&lt;/a&gt; , a cozy little wi-fi-enabled spot about a mile from my house. It reminds me a little of &lt;a href="http://trystdc.com/"&gt;Tryst &lt;/a&gt;in DC, but with a more Eurotrash/Dallas vibe to it. Not that there's anything wrong with that. And the coffee's good. Recommended.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;tags:&lt;a href="http://technorati.com/tag/coffee" rel="tag"&gt;coffee&lt;/a&gt;,&lt;a href="http://technorati.com/tag/dallas" rel="tag"&gt;dallas&lt;/a&gt;,&lt;a href="http://technorati.com/tag/lakewood" rel="tag"&gt;lakewood&lt;/a&gt;,&lt;a href="http://technorati.com/tag/coffeehouse" rel="tag"&gt;coffeehouse&lt;/a&gt;,&lt;a href="http://technorati.com/tag/cafe" rel="tag"&gt;cafe&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14059280-112008139581558617?l=artofsystems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artofsystems.blogspot.com/feeds/112008139581558617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14059280&amp;postID=112008139581558617' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112008139581558617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14059280/posts/default/112008139581558617'/><link rel='alternate' type='text/html' href='http://artofsystems.blogspot.com/2005/06/appropriate-location.html' title='The Appropriate Location'/><author><name>cks</name><uri>http://www.blogger.com/profile/11204008921771492577</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://farm1.static.flickr.com/39/88778450_c1a8190737_m_d.jpg'/></author><thr:total>1</thr:total></entry></feed>
