<?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-26260493</id><updated>2012-01-30T19:56:22.808-08:00</updated><category term='mobile'/><category term='right of first sale'/><category term='organizations'/><category term='futures'/><category term='tools'/><category term='SQL'/><category term='sms'/><category term='Prism'/><category term='cable'/><category term='bugs'/><category term='books'/><category term='compilers'/><category term='Amazon'/><category term='scifi'/><category term='Saas'/><category term='legacy systems'/><category term='strategy'/><category term='gwt'/><category term='Windows'/><category term='RIA'/><category term='Skyfire'/><category term='trends'/><category term='troubleshooting'/><category term='femtocell'/><category term='audio'/><category term='Flash'/><category term='travel'/><category term='webcast'/><category term='authenticated feed'/><category term='DSL'/><category term='web 2.0'/><category term='tips'/><category term='spam'/><category term='rss'/><category term='reliability'/><category term='DRM'/><category term='video'/><category term='IP'/><category term='email'/><category term='Flex'/><category term='coax'/><category term='WinForms'/><category term='office integration'/><category term='backup'/><category term='Adobe'/><category term='LINQ'/><category term='xml'/><category term='MySQL'/><category term='semantic'/><category term='java'/><category term='PDF'/><category term='refactoring'/><category term='thought leadership'/><category term='security'/><category term='Rails'/><category term='UML'/><category term='Adobe AIR'/><category term='smartphone'/><category term='self-employed'/><category term='IIS'/><category term='research in motion'/><category term='CASE'/><category term='hiring'/><category term='freemium'/><category term='microbogging'/><category term='housing'/><category term='PR'/><category term='iPhone'/><category term='Firefox'/><category term='integration'/><category term='presenting'/><category term='dynamic languages'/><category term='Django'/><category term='mac'/><category term='palm'/><category term='application model'/><category term='atom'/><category term='Mozy'/><category term='design'/><category term='trialware'/><category term='VNC'/><category term='Fowler'/><category term='ASP.Net'/><category term='architecture'/><category term='california'/><category term='blogging'/><category term='script#'/><category term='smart client'/><category term='conferences'/><category term='DirecTV'/><category term='google'/><category term='overengineering'/><category term='Python'/><category term='virtualization'/><category term='mail'/><category term='health insurance'/><category term='media'/><category term='Vista'/><category term='Microsoft'/><category term='javascript'/><category term='apple'/><category term='ACPI'/><category term='.Net'/><category term='ActionScript'/><category term='web applications'/><category term='SoundMAX'/><category term='reverse engineering'/><category term='os x'/><category term='foleo'/><category term='banking'/><category term='TiVo'/><category term='green'/><category term='augmented reality'/><category term='social networking'/><category term='frameworks'/><category term='deals'/><category term='agile'/><category term='Chrome'/><category term='ecommerce'/><category term='Bay Area region'/><category term='enterprise'/><category term='consulting'/><category term='functional'/><category term='hard projects'/><category term='llvm'/><category term='Sprint'/><category term='laptops'/><category term='open'/><category term='SSL'/><category term='lifecasting'/><category term='apollo'/><category term='Android'/><category term='Scheme'/><category term='Facebook'/><category term='Yahoo'/><category term='hardware'/><category term='database'/><category term='4GL'/><category term='rfid'/><category term='driver'/><category term='user groups'/><category term='user experience'/><category term='cloud computing'/><category term='law'/><category term='REST'/><category term='silverlight'/><category term='ajax'/><category term='process'/><category term='broadband'/><category term='culture'/><category term='transactional web'/><category term='startup'/><category term='web scraping'/><category term='S3'/><category term='web services'/><category term='hints'/><category term='networks'/><category term='seo'/><category term='C#'/><category term='SOAP'/><category term='comet'/><category term='perf'/><category term='outlook'/><category term='newspapers'/><category term='non-relational'/><category term='blackberry'/><category term='energy'/><category term='Ruby'/><category term='payments'/><category term='twitter'/><category term='languages'/><category term='investment'/><category term='search'/><category term='standards'/><category term='coffee'/><category term='project management'/><category term='WPF'/><category term='vc'/><category term='printers'/><category term='notebarn'/><category term='estimation'/><title type='text'>Here's the Deal: The Next Stack Frame</title><subtitle type='html'>Semicolons. Semiconductors. Semi-plausible theories.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default?start-index=101&amp;max-results=100'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>300</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-26260493.post-4028924781900900992</id><published>2009-09-17T21:55:00.001-07:00</published><updated>2009-09-17T21:55:08.554-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><category scheme='http://www.blogger.com/atom/ns#' term='Yahoo'/><title type='text'>Yahoo Mail Supports Free IMAP … But Only via Mobile</title><content type='html'>&lt;p&gt;It’s hard to know what to say about Yahoo at this point. They have a lot of page views, but their internal organs seem to have been liquified from the inside by some flesh-eating plague.&lt;/p&gt;  &lt;p&gt;Barely alive, they are of course responsible for their own continuing undoing. A great example is the failure to do something useful with the email user base. The purple crew has missed every opportunity to exploit the email product, from Google-style ads to Facebook-style social networking (back when they had a chance). And there’s the infamous CEO with her Napoleonic airs.&lt;/p&gt;  &lt;p&gt;But I digress.&lt;/p&gt;  &lt;p&gt;See, here’s the thing. On the Internet, unless you’re lucky enough to be a telco, you actually have to compete. Which means when Google gives away IMAP-enabled mail, and Windows Live gives away POP access and 25+ GB of online storage, you need to rethink your strategy of &lt;a href="http://skipmeamadeus.blogspot.com/2007/03/yahoo-mail-api-misses-point.html"&gt;making your mail product harder to use&lt;/a&gt; while praying that the nine people on earth who haven’t heard of Google will sign up for your deluxe mail service (now with undercoating!)&lt;/p&gt;  &lt;p&gt;But Yahoo has never been able to think one thing at a time. It’s not so much that they excel at multitasking than that they are schizophrenic. So while one group is committing ritual suicide with the email product, another realizes that to reach the mobile market, exposing mail via open protocols might help.&lt;/p&gt;  &lt;p&gt;And hence they offer endpoints called something like imap.mail.yahoo.com and smtp.mobile.yahoo.com. Before you get all excited and ask me to check the hostnames and port numbers, though, I’ll drop the punchline: it appears Yahoo filters access to these services based on IP, and opens the service to mobile carrier address blocks (and carrier proxy addresses).&lt;/p&gt;  &lt;p&gt;After seeing my phone successfully configure itself for these services, I couldn’t resist trying them from a desktop client. No joy. I guess if I were really hardy I could grab the public-net-facing IP address for my phone (by having it connect to my own server) and pretend to be that IP. But … really … is it worth it? No… with Yahoo still living in 2002, I’m afraid it’s just not.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-4028924781900900992?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/4028924781900900992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=4028924781900900992' title='28 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4028924781900900992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4028924781900900992'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/09/yahoo-mail-supports-free-imap-but-only.html' title='Yahoo Mail Supports Free IMAP … But Only via Mobile'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>28</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-9006689141259505143</id><published>2009-08-31T23:51:00.001-07:00</published><updated>2009-08-31T23:51:57.599-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Work 2 Different Logons (or Sessions) with Private Browsing Modes</title><content type='html'>&lt;p&gt;Here’s a trick that’s fairly obvious to web developers but probably not so for everyone else.&lt;/p&gt;  &lt;p&gt;Private browsing modes – such as Incognito (in Google Chrome) or InPrivate (IE 8) clear out locally stored browser cookies (snippets of tracking data) each time they are run, and do not share cookies with the main (non-private) browser tabs.&lt;/p&gt;  &lt;p&gt;Since these cookies are the core mechanism by which web sites associate independent browser tabs/windows with a single user session, the private browsing modes can be used to interact with multiple different logons or accounts at the same time.&lt;/p&gt;  &lt;p&gt;How does this work in practice?&lt;/p&gt;  &lt;p&gt;Let’s say you want to interact with two totally different accounts (logons) at, say, Gmail, Yahoo, eBay, Orbitz, or some other site. You’ve probably noticed that if you are logged in to, e.g., Yahoo with one browser tab, and you open another window or tab in the same browser, and go to Yahoo, it will “know” who you are and allow you to interact with the same account.&lt;/p&gt;  &lt;p&gt;In many cases, this is a desired behavior. But if you want to work with two different Yahoo accounts at the same time, it is quite tricky.&lt;/p&gt;  &lt;p&gt;Here’s where the private browsing mode comes in.&lt;/p&gt;  &lt;p&gt;Open a private browsing window/tab, and log on to Yahoo with the second account. Since the private tab doesn’t share cookies with the main tab, you now have two interactive sessions with the two different accounts, and they “stay separate.”&lt;/p&gt;  &lt;p&gt;There are three catches though:&lt;/p&gt;  &lt;p&gt;First, since the private browsing tabs are designed to discard cookies on shutdown, they will “forget” your logon when you close the browser even if you select “stay logged in” on a specific web site.&lt;/p&gt;  &lt;p&gt;Second, it is possible (though unlikely) that this mechanism could fail if the site uses “&lt;a href="http://www.scmagazineus.com/top-websites-using-flash-cookies-to-track-user-behavior/article/141486/"&gt;Flash cookies&lt;/a&gt;” apart from regular cookies.&lt;/p&gt;  &lt;p&gt;Third, while this trick works perfectly well, do &lt;em&gt;not&lt;/em&gt; assume that the service you are connected to has no idea what you are doing. They probably don’t care. But if they &lt;em&gt;do&lt;/em&gt; care, assume that they could guess that the same user was on both sessions (through IP addresses, NAT port assignment patterns, etc.) at the same time.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-9006689141259505143?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/9006689141259505143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=9006689141259505143' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/9006689141259505143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/9006689141259505143'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/08/work-2-different-logons-or-sessions.html' title='Work 2 Different Logons (or Sessions) with Private Browsing Modes'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-3643182595049194115</id><published>2009-08-24T17:10:00.001-07:00</published><updated>2009-08-24T17:10:54.234-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IP'/><category scheme='http://www.blogger.com/atom/ns#' term='media'/><title type='text'>Two More Small Tales from the IP Front</title><content type='html'>&lt;p&gt;There are a small number of areas in which I am an expert, and intellectual property is not one of them. For expertise, I like to refer folks to &lt;a href="http://en.wikipedia.org/wiki/Mike_Masnick"&gt;Mike Masnick&lt;/a&gt; and &lt;a href="http://techdirt.com/"&gt;Techdirt&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Nonetheless, it’s hard to move through the technology world and not get bonked on the head by IP absurdities and incongruities calling out for some solution aside from lawsuits and &lt;a href="http://en.wikipedia.org/wiki/Just_Say_No"&gt;Nancy-Reagan-style&lt;/a&gt; denials.&lt;/p&gt;  &lt;p&gt;First up is the tale of two Comcasts, and two identical HD streams of Battlestar Galactica. One of these streams comes in via the HD DVR, and the other comes in via Bittorrent.&lt;/p&gt;  &lt;p&gt;Actually, I’m leaving a bit of information out in the setup. See, the two HD streams from SciFi channel &lt;em&gt;should&lt;/em&gt; be more or less identical modulo commercials. But they’re not. &lt;/p&gt;  &lt;p&gt;Due to bandwidth allocation and network management issues, the “legitimate,” paid-for SciFi channel stream is full of bitrate-spike artifacts reminiscent of late ‘90s web video. So the HD channel, the HD DVR, the HDTV gets you … a pretty awful picture the second characters start fighting, running, or blowing things up.&lt;/p&gt;  &lt;p&gt;Then you have the Bittorrent stream, ripped from SciFi, and carried in via the same Comcast coax line. This stream looks great, and makes a customer glad to have Comcast and a HDTV. In some strange respect, this latter stream may represent a problem in the “industry’s” opinion, even though it’s clearly what the customer wants and is paying to view, and even though the bandwidth (both instant and aggregate) is a small fraction of that required for the “broadcast” stream.&lt;/p&gt;  &lt;p&gt;Next strangeness is &lt;a href="http://listen.grooveshark.com/"&gt;Grooveshark&lt;/a&gt;, a free, crowdsourced, on-demand streaming service that appears to live on the razor-thin edge of legality if it has a claim on legality at all.&lt;/p&gt;  &lt;p&gt;That said, the ability to send (or post/tweet/blog/…) a link that goes &lt;a href="http://listen.grooveshark.com/#/song/That_Spells_DNA/600121"&gt;directly to a particular song&lt;/a&gt; is an extremely potent way to virally spread the music you like. And more music loved by more fans is the core asset base for any music industry, whether it resembles the 20th-century “legacy” record industry or not.&lt;/p&gt;  &lt;p&gt;Without Grooveshark, there is always YouTube for sharing instant, no-membership, no-login-required tracks. But unlike YouTube, Grooveshark is structured in a way that encourages more exploration of an artist, album, etc.&lt;/p&gt;  &lt;p&gt;So anyone wanna throw into a pool for how long ‘til this service gets shuttered? Wait, that’s not quite legal either. We’ll “just say no” and it’ll all just go away.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-3643182595049194115?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/3643182595049194115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=3643182595049194115' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/3643182595049194115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/3643182595049194115'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/08/two-more-small-tales-from-ip-front.html' title='Two More Small Tales from the IP Front'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-7669090169597653017</id><published>2009-08-18T21:23:00.000-07:00</published><updated>2009-08-18T21:46:50.241-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='non-relational'/><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Suck Us All Into the Machine: Build FluidDB on Twitter and #Hashtags</title><content type='html'>I was reading today about a fairly amorphous, tag-based, public "database" concept called &lt;a href="http://doc.fluidinfo.com/fluidDB/index.html"&gt;FluidDB&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To avoid the usual distractions, I will assume my audience knows all about relational and non-relational datastores, implications of tag-oriented metadata, etc. In fact, since my friends know about this stuff and they are most of my audience, I think I'm not too far afield making this assumption.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One reason I found the FluidDB concept interesting is vanity: about four weeks ago, I spent some time considering building just this kind of database ... on top of Twitter.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Why would one want to do that?&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Precisely because Twitter already has a lot of meaningful data curated by humans and tagged with a well-known metadata scheme (hashtags).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In exchange for having very small or hypernormalized data records (since each atomic entry is limited to 140 characters minus the tags and any indexed keys), we get a strange merging of human- and machine-readable data. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Humans could read (and follow, search, etc.) data entities of interest.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And clearly the "goal" of automated (machine) participants (clients) would be to understand as much of the human content as possible, treating it as objects, tuples, logical inferences, or knowledge base "facts."&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Moreover, the originator of a tweet, as well as any @-referenced recipients, are critical metadata. They are, actually, tags themselves in way which is linearly independent of the hashtags. That is, a from-@adbreind tweet (entity) marked #database is different from a to/ref-@adbreind tweet marked #database, while #database must be considered to (possibly) have a different sense than it does in, say, a from-@headius tweet. However, the same tools and semantic analyzers can be applied, essentially treating the writer and target of a tweet as special tags.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In  this way, our twitter discourse, short enough to make machine understanding tempting even when the packed cultural references make such understanding impractical, merges us into the database and makes us "just another part of the machine."&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-7669090169597653017?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/7669090169597653017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=7669090169597653017' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7669090169597653017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7669090169597653017'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/08/suck-us-all-into-machine-build-fluiddb.html' title='Suck Us All Into the Machine: Build FluidDB on Twitter and #Hashtags'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-8650502676959616047</id><published>2009-08-06T20:48:00.001-07:00</published><updated>2009-08-06T20:48:35.306-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><title type='text'>AT&amp;T “Fixes” My Phone by Downgrading It</title><content type='html'>&lt;p&gt;I don’t want to be another corpse in the AT&amp;amp;T pile-on. AT&amp;amp;T has many problems, and they impact me, but let’s look at another technical clue about the network trouble:&lt;/p&gt;  &lt;p&gt;I stopped in Tuesday at an AT&amp;amp;T store to see if they had any advice or fixes for the network issues plaguing my phone. The only thing the service rep said he knew of was to replace the SIM card. Sure, why not? Can’t hurt anything, can it?&lt;/p&gt;  &lt;p&gt;Well the answer to that question apparently depends on whether ditching 3G access counts as “hurting.”&lt;/p&gt;  &lt;p&gt;Since I got the new SIM, the phone spends most of its time on the EDGE and GPRS service, and only rarely gets a fix on the 3G service even when I’m in known-good 3G areas.&lt;/p&gt;  &lt;p&gt;For a fleeting moment, I thought about taking the phone back and asking AT&amp;amp;T to do something to restore my 3G goodness.&lt;/p&gt;  &lt;p&gt;But I quickly realized that the network’s inability to keep the phone on 3G was a big part of the problem. In other words, as so many iPhone users have discovered, staying on EDGE is better than flitting between EDGE and 3G and getting nowhere. Likewise in the case of EDGE and GPRS.&lt;/p&gt;  &lt;p&gt;So for now, I’ll take my retro GPRS and its 50kbps or so of throughput. Since the setup and teardown of the data connection, as well as the latency in repeating a request, are the slowest part of the process, I’d rather use dependable 50kbps connection over an unstable, unusable 500kbps one.&lt;/p&gt;  &lt;p&gt;Until I get a network that actually works, that is.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-8650502676959616047?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/8650502676959616047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=8650502676959616047' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8650502676959616047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8650502676959616047'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/08/at-fixes-my-phone-by-downgrading-it.html' title='AT&amp;amp;T “Fixes” My Phone by Downgrading It'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-2777886855034390419</id><published>2009-08-06T20:37:00.001-07:00</published><updated>2009-08-06T20:37:49.093-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='augmented reality'/><title type='text'>Link: An Illustrated Brief History of Augmented Reality</title><content type='html'>&lt;p&gt;&lt;a href="https://www.icg.tugraz.at/~daniel/HistoryOfMobileAR/"&gt;Check it out&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Plus who knew that Philippe Kahn invented the camera phone?&lt;/p&gt;  &lt;p&gt;Apparently, a lot of people, just not me. The guy is so awesome.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-2777886855034390419?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/2777886855034390419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=2777886855034390419' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2777886855034390419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2777886855034390419'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/08/link-illustrated-brief-history-of.html' title='Link: An Illustrated Brief History of Augmented Reality'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-3579839688351042409</id><published>2009-07-13T16:58:00.001-07:00</published><updated>2009-07-13T16:58:45.180-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Microsoft’s Real Punishment is Having to Fight with the Gloves On</title><content type='html'>&lt;p&gt;By the time the Microsoft anti-trust cases wound down, it could be argued that the alleged damage was long since done to the industry.&lt;/p&gt;  &lt;p&gt;In a curious reversal, it appears that Microsoft’s direct penalties from the case were only a tiny beginning.&lt;/p&gt;  &lt;p&gt;The real penalties Microsoft pays are not in money, nor in shipping &lt;a href="http://windowsitpro.com/article/articleid/93280/microsoft-to-begin-selling-windows-xp-k-and-kn-editions-in-south-korea-this-week.html"&gt;“K” and “N” SKUs&lt;/a&gt;. They are in product strategies unpursued because they would be too provocative. In other hands, such strategies&amp;#160; might be reasonable if aggressive, but for Microsoft they might look like “&lt;a href="http://books.google.com/books?id=jK38znRyAJcC&amp;amp;lpg=PA55&amp;amp;ots=saz7hVfKev&amp;amp;dq='relevant%20conduct'%20antitrust&amp;amp;pg=PA56"&gt;relevant conduct&lt;/a&gt;.”&lt;/p&gt;  &lt;p&gt;Today’s announcements about Office 2010 (“14”) were … well … let’s just say if you didn’t read about it, the most interesting thing you missed was seeing critics point out that Microsoft, inventor of AJAX (literally, for the Outlook web client), is only bringing other apps online 10+ years later.&lt;/p&gt;  &lt;p&gt;The reasoning here is not about selling client OS licenses. Microsoft could have moved to the cloud richer and faster and more profitable if it could take the gloves off.&lt;/p&gt;  &lt;p&gt;Need to get Silverlight penetration up from its abysmally low numbers to where it can really compete with Flash and become a meaningful platform? Just ship it with Windows and make it a priority update to every Windows box in the world. Problem solved. Now we can get down to the real work writing apps. Or at least Adobe could actually face some competition. But Microsoft doesn’t dare do this.&lt;/p&gt;  &lt;p&gt;Why not stitch cloud storage directly into the OS? I hate leaving files “on the other machine.” Right out of the box, &lt;strong&gt;&lt;em&gt;anytime&lt;/em&gt;&lt;/strong&gt; I see an “Open…” or a “Save As…” dialog box on Windows 7, I would like the default destination to be a secure folder on Windows Live &lt;a href="http://skydrive.live.com/"&gt;SkyDrive&lt;/a&gt;. Using the provider pattern, other vendors could offer a similar service, and the end user could choose. But Microsoft doesn’t dare with this either.&lt;/p&gt;  &lt;p&gt;It is quite possible that the long-term benefit to the industry of having Microsoft thus restrained far outweighs the “lost” value we could have had from Redmond. But let no one fool himself into believing that what we see from Microsoft these days is everything they have to offer.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-3579839688351042409?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/3579839688351042409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=3579839688351042409' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/3579839688351042409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/3579839688351042409'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/07/microsofts-real-punishment-is-having-to.html' title='Microsoft’s Real Punishment is Having to Fight with the Gloves On'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-3219979824105694693</id><published>2009-07-09T15:59:00.001-07:00</published><updated>2009-07-09T15:59:35.291-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VNC'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>VncSharp Rocks for Programmatic and Interactive Remote Access from .NET</title><content type='html'>&lt;p&gt;&lt;a href="http://cdot.senecac.on.ca/projects/vncsharp/index.html"&gt;VncSharp&lt;/a&gt; is a C# implementation of the VNC protocol together with a handy visual Remote Desktop .Net widget.&lt;/p&gt;  &lt;p&gt;At first, the open-source VNC remote-access solution might seem like a surprising item to need in a Microsoft-based solution. &lt;/p&gt;  &lt;p&gt;But once he gets you in the little room, VNC starts telling you that, in exchange for lower performance (than Microsoft’s own RDP), he can get you more flexibility, more features, no licensing issues, and access to remote Macs or *nix hosts. After these arguments (or is it the heat?) VNC looks a lot more persuasive.&lt;/p&gt;  &lt;p&gt;Throw in the fact that you can run your VncSharp-enabled apps on Mono, and … well, it would be cool if that bought you a lot. But actually if you aren’t already focused on a Linux solution then the Mono angle is just another bullet.&lt;/p&gt;  &lt;p&gt;VncSharp itself, though, works extremely well straight out of the gate.&lt;/p&gt;  &lt;p&gt;When you see the documentation page – where the author essentially invites you to read the source to figure out how to drive it – you may be concerned. Or even start to form silent curse words with your lips.&lt;/p&gt;  &lt;p&gt;Do not let that stop you. There are demo/sample apps that will show you what you need for basic use cases (e.g., popping open a “remote help” window will only require a line or two). And the source, if you need it, is elegant and straightforward to navigate.&lt;/p&gt;  &lt;p&gt;A programmable VNC client is, perhaps, a niche product. VNC on Windows maybe more so. So it’s gratifying to see such a mature and streamlined OSS effort.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-3219979824105694693?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/3219979824105694693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=3219979824105694693' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/3219979824105694693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/3219979824105694693'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/07/vncsharp-rocks-for-programmatic-and.html' title='VncSharp Rocks for Programmatic and Interactive Remote Access from .NET'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-9152005648918220639</id><published>2009-07-07T20:47:00.001-07:00</published><updated>2009-07-07T20:50:10.277-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='augmented reality'/><title type='text'>Can iPhone et al Drag Augmented Reality Into Non-Augmented Reality?</title><content type='html'>&lt;p&gt;I’ve been pitching &lt;a href="http://www.howstuffworks.com/augmented-reality.htm"&gt;augmented reality&lt;/a&gt; apps in startup circles for a few years now, so it was exciting to see the AR startup crop grab some press coverage this week (&lt;a href="http://digital.venturebeat.com/2009/07/03/startups-push-augmented-reality-apps-to-market/"&gt;VentureBeat&lt;/a&gt; and &lt;a href="http://venturebeat.com/2009/07/06/augmented-reality-finds-you-organic-food-london-tube-stops/"&gt;more VentureBeat&lt;/a&gt; and …even SF &lt;a href="http://abclocal.go.com/kgo/story?section=news/drive_to_discover&amp;amp;id=6900269"&gt;ABC 7&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;With the iPhone hardware suite (and comparable devices like the Android and Pre), there’s no shortage of hardware for the core AR tasks: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;capture decent-resolution images &lt;/li&gt;    &lt;li&gt;recognize “target” areas in images &lt;/li&gt;    &lt;li&gt;contextualize the targets if necessary, by adding GPS data, solid-state compass data, and/or accelerometer (angle) data &lt;/li&gt;    &lt;li&gt;lookup augmentation data suitable to the target and the end-user via suitable web services&lt;/li&gt;    &lt;li&gt;employ “billboarding” or 3D rendering to composite a representation of the augmentation data on top of the target&lt;/li&gt;    &lt;li&gt;repeat as fast as possible without draining the battery (yeah, right) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Now for part two of the plan: this facility needs to run through a cool looking visor (a.k.a. "head-mounted display” or HMD). And neither the $6,000+ price tag nor the Silence-of-the-Lambs-night-vision look is appealing on &lt;a href="http://www.inition.co.uk/inition/product.php?URL_=product_hmd_trivisio_hmd_seethrough&amp;amp;SubCatID_=16&amp;amp;cur=USD"&gt;these traditional high-tech units&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Happily, there are &lt;a href="http://www.i-glassesstore.com/hmds.html"&gt;mass-market headsets&lt;/a&gt; designed for the gaming or personal entertainment market which are &lt;em&gt;almost &lt;/em&gt;ready to go. A &lt;a href="http://www.vuzix.com/iwear/products_wrap920av.html"&gt;couple are even within striking distance of cool factor&lt;/a&gt;. Maybe an Apple logo would be enough to do it, at least for the Bay Area.&lt;/p&gt;  &lt;p&gt;Even better, leaders such as Vuzix recognize the need to provide video and accelerometer data from the POV of the headset (vastly reducing the amount of computation needed contextualize the image). They appear to be planning these capabilities as optional clip-on modules to their newest “Fall ‘09” model visor.&lt;/p&gt;  &lt;p&gt;Note the word “planning.”&lt;/p&gt;  &lt;p&gt;Like smartphones themselves, we’ve been here before … a lot of times. The iPhone was easily the industry’s 10th attempt at a commodity handheld computer, so it’s not like the writing is on the wall. Unless it’s AR writing:&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://docs.google.com/File?id=drqkxqg_61gb4bv74p_b"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width:379px; height:214px;" src="http://docs.google.com/File?id=drqkxqg_61gb4bv74p_b" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-9152005648918220639?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/9152005648918220639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=9152005648918220639' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/9152005648918220639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/9152005648918220639'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/07/can-iphone-et-al-drag-augmented-reality.html' title='Can iPhone et al Drag Augmented Reality Into Non-Augmented Reality?'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-7667797116454139365</id><published>2009-06-13T20:34:00.001-07:00</published><updated>2009-06-13T20:34:59.872-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Workaround for Some Instances of Win 7 WiFi Problem</title><content type='html'>&lt;p&gt;One of the very few real broken bits in the Win 7 RC is a &lt;a href="http://skipmeamadeus.blogspot.com/2009/06/windows-7-rc-one-month-in.html"&gt;WiFi problem&lt;/a&gt;. The current thread on Microsoft TechNet is &lt;a href="http://social.technet.microsoft.com/Forums/en/w7itpronetworking/thread/5098a34c-1f38-4dbc-a723-eda56578eea8"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;On at least a few laptops, the following is a dependable if annoying workaround.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Turn off the WiFi with the laptop hardware switch (“airplane mode”)&lt;/li&gt;    &lt;li&gt;Open Start –&amp;gt; Computer –&amp;gt; Manage –&amp;gt; Device Manager –&amp;gt; Network Adapters&lt;/li&gt;    &lt;li&gt;Right-click and disable the wireless adapter&lt;/li&gt;    &lt;li&gt;Wait a bit and verify the OS has completely lost the wireless adapter (by watching the icon in the tray)&lt;/li&gt;    &lt;li&gt;Turn on the WiFi with that hardware switch&lt;/li&gt;    &lt;li&gt;Right-click and re-enable the wireless adapter&lt;/li&gt;    &lt;li&gt;Wait … potentially a couple of minutes for Windows to find the appropriate network, connect, and recognize the route (if applicable) to the Internet&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;This maneuver is a hassle, to be sure. But it seems to work 100% of the time on some laptops (including mine) and it is much more convenient than rebooting, which is the only other dependable solution.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-7667797116454139365?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/7667797116454139365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=7667797116454139365' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7667797116454139365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7667797116454139365'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/06/workaround-for-some-instances-of-win-7.html' title='Workaround for Some Instances of Win 7 WiFi Problem'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-1144264390486194790</id><published>2009-06-10T20:40:00.001-07:00</published><updated>2009-06-10T20:40:04.941-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='palm'/><title type='text'>iPhone and Palm Pre – the Obligatory Post</title><content type='html'>&lt;p&gt;I’ve had my paws on the Pre, and while I have not, of course, gotten hold of a 3GS, it doesn’t really matter.&lt;/p&gt;  &lt;p&gt;See, getting my hands on a 3GS might convince me it has a better hardware/software experience. And since the 3G already has a better hardware/software experience than the Pre, I’m going to call it a “gimme” for the new 3GS.&lt;/p&gt;  &lt;p&gt;The Pre, for all of its clever conceits compared to most phones, is still clunky, hiccup-y, and jittery next to even the current iPhone model. The graphics aren’t as smooth, the UI is harder to use, the physical keyboard is marginal, and on and on.&lt;/p&gt;  &lt;p&gt;On top of that, it is hard to overstate how important the app ecosystem is to this “competition,” and Palm doesn’t even seem to be trying (they’re still saying “real soon now” on the SDK).&lt;/p&gt;  &lt;p&gt;No matter how many apps in the App Store are just fart apps, and no matter how beautiful the bundled apps on the Pre are, there is no contest because these guys are playing different games.&lt;/p&gt;  &lt;p&gt;Apple has succeeded in making the phone a general computing platform in the mind of the public – something I &lt;a href="http://skipmeamadeus.blogspot.com/2006/05/time-for-platform-mvno.html"&gt;argued for&lt;/a&gt; 3 years ago – and &lt;em&gt;you judge a platform not by its internal specs but by what you can run on it&lt;/em&gt;. Palm doesn’t seem to get that. They’ve got a decent bundle of specs but there’s nothing to run on it and there may never be much.&lt;/p&gt;  &lt;p&gt;So with Apple still killing in the UX department, and Palm leaving their A-game at home (if they ever had one) as far as the app/platform/dev community goes … is there anything positive to be said for Pre in this contest?&lt;/p&gt;  &lt;p&gt;Only this: AT&amp;amp;T’s network is so egregiously ill-behaved in so many prime metro areas that Sprint could actually pull a few people across the line.&lt;/p&gt;  &lt;p&gt;I am one these last folks: I would much rather replace my current phone with an iPhone, but the thought of another two years of dropped calls, missed calls, bars-but-no-coverage, data connection unusable half the time … and I’m seriously considering the Pre. &lt;/p&gt;  &lt;p&gt;Say what you will about Sprint (I’ve used every major carrier and none is perfect), where they have coverage, the devices just work. You can make or take a phone call. Which, ironically given that smartphones are bordering on augmented reality nowadays, is still the &lt;em&gt;sine qua non&lt;/em&gt; for a phone.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-1144264390486194790?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/1144264390486194790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=1144264390486194790' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1144264390486194790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1144264390486194790'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/06/iphone-and-palm-pre-obligatory-post.html' title='iPhone and Palm Pre – the Obligatory Post'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-8228654263464271328</id><published>2009-06-09T17:35:00.001-07:00</published><updated>2009-06-09T17:35:33.637-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Windows 7 RC, One Month In</title><content type='html'>&lt;p&gt;A month ago, not long after the RC was released, I wiped my ol’ Server 2003R2 notebook (yes), and installed Win7 x64. Time to try a consumer OS on the machine again, finally go 64-bit, and jump without a net (I had a big client demo coming up and decided it would be sink-or-swim with 7).&lt;/p&gt;  &lt;p&gt;First, a word about this laptop. Bought in the holiday sale period of ‘07 just for client demos and occasional web surfing, it would take a whole new, um, “lower end” category of Microsoft “Shopper” commercials to capture the spirit of this baby: for $299 I got a mobile Celeron (1.6 GHz, one core, no HT) and 512MB of RAM. Billed as “Vista Basic Ready,” it was being discontinued due to … not really being Vista Basic Ready. Well, duh. I had given up on Vista after my 3.6GHz desktop choked on it, so I put another GB in the laptop and loaded Server 2003R2 (using unofficial XP drivers I grabbed off the net).&lt;/p&gt;  &lt;p&gt;So … Windows 7.&lt;/p&gt;  &lt;p&gt;Upon install, all of the hardware was supported perfectly, which isn’t a huge surprise since 7 uses Vista-era drivers and this hardware ensemble was originally targeted for Vista.&lt;/p&gt;  &lt;p&gt;Except for a compatibility issue with AVG Anti-Virus (which I’ve written about before), it has worked almost perfectly with everything I’ve thrown at it – ranging from Office and Visual Studio 2008 to Alfresco Enterprise (yes, a Java server app), Google Earth, and Ruby. Overall performance has been excellent and better than I would have expected. No, I wouldn’t play games on this machine, and the 5400-rpm hard drive can be a drag just as it is on most laptops.&lt;/p&gt;  &lt;p&gt;The two big negatives I’ve seen are as follows and will hopefully be fixed by RTM time.&lt;/p&gt;  &lt;p&gt;First, there is a well-documented issue with WiFi. On a cold boot, Windows does just what you want it to do with the WiFi. But, after waking from sleep or hibernate, or trying to switch networks a few times, it just cannot seem to sort itself out. Most of the time you are forced to reboot to get a working connection. This bug is all over Microsoft’s Win 7 feedback forums, I’m just too lazy to look up a link right now. So hopefully it will get a fix.&lt;/p&gt;  &lt;p&gt;Second, the integration with other default browsers (I use Chrome) is broken in a bunch of places. Many of the cases where the shell is called to supply a browser to a specific URL do not work (e.g., menu options in twhirl, connections to the web from Office Live). In addition, Windows doesn’t want to associate local .html (or .htm) files with Chrome. Sometimes I can get these things fixed, but then they revert (perhaps partly a result of Chrome’s auto-updates). &lt;/p&gt;  &lt;p&gt;These cases all work fine on XP and don’t require in-process loading (suggesting it’s not a x86/x64 issue). It’s inconvenient, and the anti-trust folks will be back after Microsoft if they don’t make other browsers first-class citizens soon. So this bug should get squashed.&lt;/p&gt;  &lt;p&gt;Aside from those two admittedly very annoying issues, this is a really solid, fast, and elegant operating system. How serious is the “Microsoft tax” issue on OEM PCs? I don’t know, but if I do pay such an implicit tax on a new machine, I’ll be a heck of a lot happier if I can get a Win 7 license out of the deal and not a Vista license for my trouble.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-8228654263464271328?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/8228654263464271328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=8228654263464271328' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8228654263464271328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8228654263464271328'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/06/windows-7-rc-one-month-in.html' title='Windows 7 RC, One Month In'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-7574827708466760929</id><published>2009-05-29T10:35:00.000-07:00</published><updated>2009-05-29T10:42:24.100-07:00</updated><title type='text'>Mark Process for x86 to Use Skype API or Topaz SigPlus API</title><content type='html'>If you happen to be integrating your Windows app with Skype's COM bridge, or with Topaz' SigPlus API for their biometric digitizing signature pads, those libraries won't play nice if loaded from an x64 process.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The easy fix -- assuming you don't have dependencies that mean you need x64 -- is to create a build configuration for your main app that specifies a target platform of x86 (instead of "Any CPU"). The resulting app will run in WoW (the 32-bit shim for 64-bit Windows) and works fine with these libraries.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The hard fix would appear to be using IPC to coordinate two different processes: your main app in x64, and a proxy/helper 32-bit process running in WoW that works these DLLs for you.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-7574827708466760929?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/7574827708466760929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=7574827708466760929' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7574827708466760929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7574827708466760929'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/05/mark-process-for-x86-to-use-skype-api.html' title='Mark Process for x86 to Use Skype API or Topaz SigPlus API'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-161828943678784868</id><published>2009-05-29T10:02:00.001-07:00</published><updated>2009-05-29T10:31:44.335-07:00</updated><title type='text'>Those Little Shape Widgets in VS2008 Require Deployment</title><content type='html'>The Visual Studio 2008 SP1 control palette has a few "shape" widgets -- Rectangle, Oval, Line ... which come from a "Visual Basic PowerPack" library: Microsoft.VisualBasic.PowerPacks.Vs.dll&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you use these, you need to deploy the library manually with your application. That is, an up-to-date .Net 3.5+ machine will &lt;i&gt;not&lt;/i&gt; have the library available globally, and Visual Studio will not mark this DLL to be copied into your output folder. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I haven't checked to see whether the VS Installer project will determine the dependency and include it -- I'm guessing it will. But if you are doing xcopy deploy, or just testing, you will need to bring this library along.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There is also an earlier version of this same library, that shipped on VS2008 but will not work (it is missing some components that were added to the namespace later). So if you need to build against the current version (e.g. if you are working on code that uses the shape components), make sure you update to VS2008 SP1, which updates this library.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-161828943678784868?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/161828943678784868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=161828943678784868' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/161828943678784868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/161828943678784868'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/05/those-little-shape-widgets-in-vs2008.html' title='Those Little Shape Widgets in VS2008 Require Deployment'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-4108738777202189277</id><published>2009-05-14T16:12:00.000-07:00</published><updated>2009-05-14T16:23:52.033-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='laptops'/><title type='text'>Windows 7 and AVG == Unhappy CPU Usage</title><content type='html'>The title pretty much says it all.&lt;div&gt;&lt;br /&gt;&lt;div&gt;Backstory is that I ran Windows 7 in a VM without any anti-virus while doing some evaluation, and I was impressed by how sparing it was of resources.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then I installed the RC on my (underpowered old) laptop, figuring it would be a good replacement for Server 2003 (which is resource efficient but not exactly designed for laptops).&lt;/div&gt;&lt;div&gt;The RC used somewhat more memory -- it appears to be able to adjust its memory footprint depending on the host hardware, which is cool -- and a &lt;span class="Apple-style-span" style="font-style: italic;"&gt;ton &lt;/span&gt;more CPU.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The CPU usage was suspicious because it's rare to find software that consistently pins a CPU with actual work, and because the usage was high priority -- coming from kernel space or a library tied tightly to kernel hooks. It was also suspicious because Microsoft plans to sell a version of 7 on netbooks, which are even more underpowered than my two-year-old bargain-o-matic laptop.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Turns out AVG, generally a fine anti-virus product, struggles with Windows 7 and often insists on every available CPU cycle, while the end user sits there wondering why context menus won't even open anymore.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After a bit of Googling, I removed AVG and installed Avast, and 7 is screaming along on the laptop now.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Note the retroactive Windows 7 hardware subsidy: this laptop was discontinued by the manufacturer in '07 because it shipped with Vista Basic but proved so slow as to be completely unusable in that configuration. The new OS basically injects value into the old machine.&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/26260493-4108738777202189277?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/4108738777202189277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=4108738777202189277' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4108738777202189277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4108738777202189277'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/05/windows-7-and-avg-unhappy-cpu-usage.html' title='Windows 7 and AVG == Unhappy CPU Usage'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-6611121203778795451</id><published>2009-04-25T11:10:00.001-07:00</published><updated>2009-04-25T11:10:44.186-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Bonus Security Credit for Google Chrome’s Strange Install</title><content type='html'>&lt;p&gt;Last fall, many folks including myself &lt;a href="http://skipmeamadeus.blogspot.com/2008/09/chrome-unusual-installation-location.html"&gt;commented&lt;/a&gt; about Google Chrome’s unusual install behavior. Our best guess at the time was that it represented an attempt to accelerate adoption, by allowing non-administrative users to install Chrome.&lt;/p&gt;  &lt;p&gt;It also allowed lower-privileged domain users in corporate environments to install and use Chrome unless their IT specifically blocked it.&lt;/p&gt;  &lt;p&gt;With this &lt;a href="http://news.zdnet.co.uk/security/0,1000000189,39644412,00.htm"&gt;recent Chrome vulnerability and rapid patch cycle&lt;/a&gt;, though, I’ve come to see the install in a new light.&lt;/p&gt;  &lt;p&gt;Firefox requires an admin to initialize an update. This can be done through programmatic remote admin or right on the console, but still requires intervention. IE can be updated via Windows auto-update, but if auto-update isn’t set to run or if a specific patch needs to be applied, it requires intervention. Chrome, on the other hand, will update itself on the fly for each user’s install (it does require a restart, but only of the Chrome app) unless the installer is cracked to remove the GoogleUpdater component.&lt;/p&gt;  &lt;p&gt;Given the cost of having an out-of-date browser version versus the risk of having Chrome updated without admin knowledge … I have to say I like this approach.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-6611121203778795451?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/6611121203778795451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=6611121203778795451' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6611121203778795451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6611121203778795451'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/04/bonus-security-credit-for-google.html' title='Bonus Security Credit for Google Chrome’s Strange Install'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-2886558140838556756</id><published>2009-04-25T10:46:00.001-07:00</published><updated>2009-04-25T10:46:11.148-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='notebarn'/><title type='text'>Notebarn Update</title><content type='html'>&lt;p&gt;Notebarn, my Windows Mobile / Exchange sync notes app, definitely looks like an archaeological relic these days. Dating from early ‘07, before the iPhone era, and being a simple text utility, it is almost comic how it doesn’t resemble modern mobile apps.&lt;/p&gt;  &lt;p&gt;That said, I still use it, and it turns out a lot of other people have been using it too. So when a user helped me reproduce a tricky timing bug that could cause data loss under certain circumstances on app initialization, I hopped back into the old (and quite small) codebase to fix it.&lt;/p&gt;  &lt;p&gt;There is a little more info on the &lt;a href="http://www.selfmummy.com/notebarn"&gt;notebarn project page&lt;/a&gt;. Or if you just want to install the app you can install it over-the-air &lt;a href="http://tinyurl.com/37bd79"&gt;from here&lt;/a&gt;. If you already have the app it will automatically install in-place over your existing version. And since the “notes” are actually stored in an Outlook/Exchange Task, the install won’t affect existing data.&lt;/p&gt;  &lt;p&gt;A word about backups: notebarn doesn’t have its own data backup mechanism. There are two main approaches to backing up and recovering data if you should lose it for any reason (e.g. problem with notebarn, problem with ActiveSync, accidentally deleting a note you needed, etc.) &lt;/p&gt;  &lt;p&gt;One is to lean on whatever backup solution protects all of your Outlook/Exchange data, since notebarn data is really Outlook data. If you can go back to a backup snapshot of this data, even temporarily, you can simply grab the notes data from there. If that’s not practical, you can either manually or via a script back up the “My Notes” item from Outlook tasks, into another place in Outlook, the filesystem, etc.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-2886558140838556756?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/2886558140838556756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=2886558140838556756' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2886558140838556756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2886558140838556756'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/04/notebarn-update.html' title='Notebarn Update'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-6679305400500754600</id><published>2009-04-20T15:57:00.001-07:00</published><updated>2009-04-20T15:57:27.295-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='search'/><title type='text'>Google “Similar Images” Roadmap</title><content type='html'>&lt;p&gt;Ok, it’s not their roadmap, it’s my roadmap.&lt;/p&gt;  &lt;p&gt;I was psyched to see the &lt;a href="http://googleblog.blogspot.com/2009/04/hard-at-play-in-google-labs-with.html"&gt;Similar Images&lt;/a&gt; announcement today, but I was underwhelmed by the results. That’s ok, it’s helpful, it’s free, and &lt;a href="http://skipmeamadeus.blogspot.com/2009/04/visual-and-context-cued-semiotic-search.html"&gt;here is the post&lt;/a&gt; where I explained how to build the rest of it.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-6679305400500754600?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/6679305400500754600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=6679305400500754600' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6679305400500754600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6679305400500754600'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/04/google-similar-images-roadmap.html' title='Google “Similar Images” Roadmap'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-6533611692048074699</id><published>2009-04-20T15:53:00.001-07:00</published><updated>2009-04-20T15:53:41.725-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Oracle and Sun: Cui Bono?</title><content type='html'>&lt;p&gt;Well, here’s a hint: it’s not &lt;a href="http://news.cnet.com/8301-13505_3-10223090-16.html"&gt;Oracle, “Sun&lt;/a&gt;,” Java, or MySQL in the long run.&lt;/p&gt;  &lt;p&gt;I’m thinking the Ruby, Python, and PostgreSQL worlds just got a shot in the arm, as this is minor calamity (at least) for Java, and a major one for MySQL. Ironic, since Java maturing like a fine wine and recovering from early-decade blunders; MySQL was already in trouble thanks to Sun.&lt;/p&gt;  &lt;p&gt;As for benefits, it’s also not Google, who relies heavily on Java but could eventually find itself in an adversarial relationship with Oracle as enterprise computing moves to the cloud. Google does have enough sheer wo/manpower to exploit the OSS licensing on Java to take it in its own direction if necessary … but is that really a desirable way to go? or one the investors can live with?&lt;/p&gt;  &lt;p&gt;I don’t think Microsoft minds this one bit either … since there was nothing that that Java, Oracle, and their communities (and users) couldn’t do before that they can now, while a number of scenarios (Java and open source databases/appservers in the enterprise) suddenly become just a bit murkier.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-6533611692048074699?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/6533611692048074699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=6533611692048074699' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6533611692048074699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6533611692048074699'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/04/oracle-and-sun-cui-bono.html' title='Oracle and Sun: Cui Bono?'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-1617554952730782261</id><published>2009-04-15T20:43:00.001-07:00</published><updated>2009-04-15T20:43:41.237-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DRM'/><category scheme='http://www.blogger.com/atom/ns#' term='integration'/><title type='text'>Atalasoft: Another Example of Gnarly DRM == Lost Sale</title><content type='html'>&lt;p&gt;I’m working on a project that involves semi-automated document imaging. Scan, deskew, crop, re-arrange …&lt;/p&gt;  &lt;p&gt;It’s on Windows, where every modern scanner hooks into both &lt;a href="http://www.twain.org/"&gt;TWAIN&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/ms630368(VS.85).aspx"&gt;WIA&lt;/a&gt; out of the box, often without even needing a vendor driver, so I just needed a library/toolkit to do the lifting on the app logic side.&lt;/p&gt;  &lt;p&gt;Enter &lt;a href="http://www.atalasoft.com/products/dotimage/documentimaging/default.aspx"&gt;Atalasoft DotImage&lt;/a&gt; imaging libraries. Does everything you need, works fairly well. Established presence in the market. We start heading in that direction. The Atalasoft bits we needed turn out to be pricey as components go, and we would need a runtime license as well as the development license – but this is a commercial project the success of which would not be diminished by the software costs. So we didn’t blink at the price.&lt;/p&gt;  &lt;p&gt;We downloaded the dev SDK, implemented a few features … and we needed to show them to customers. In other cities on other machines. Well, the dev SDK is crippled and doesn’t allow that.&lt;/p&gt;  &lt;p&gt;Atalasoft’s sales department generated a 30-day license for me, and sent me the instructions to install and deploy it. And … it half worked. Some machines could run the deployed app. Other machines, the app would crash when the relevant DLLs tried to load, despite deployment of the magic binaries, license files, and other DRM voodoo.&lt;/p&gt;  &lt;p&gt;For a brief moment, I thought maybe my app is just broken … but, upon attaching a debugger, I saw that all of these crashes threw the same error. And, since it was .Net, the error was in plain English: Atalasoft’s licensing module was barfing and taking the whole app down.&lt;/p&gt;  &lt;p&gt;At that point I could have spend more critical hours trying to navigate around these problems (I’m guessing their pre-sales tech support would have tried) … but … wouldn’t you know it, here is another company offering a similar library, much more agreeable terms, 30-day trial and a seemingly foolproof license key mechanism.&lt;/p&gt;  &lt;p&gt;Download, type type build deploy. Success. Haven’t looked back.&lt;/p&gt;  &lt;p&gt;Now it’s also convenient that this other product seems to work a little better, has more agreeable legal terms and costs less. But those were not dealbreaker criteria at this stage.&lt;/p&gt;  &lt;p&gt;I would never have even gone down the list to this other vendor if Atalasoft’s DRM hadn’t broken my tight-deadline customer demos.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-1617554952730782261?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/1617554952730782261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=1617554952730782261' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1617554952730782261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1617554952730782261'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/04/atalasoft-another-example-of-gnarly-drm.html' title='Atalasoft: Another Example of Gnarly DRM == Lost Sale'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-2134960018197390571</id><published>2009-04-14T22:32:00.001-07:00</published><updated>2009-04-14T22:32:45.627-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='rss'/><title type='text'>Facebook “Private” RSS Feeds Probably Don’t Leach Data…</title><content type='html'>&lt;p&gt;Last year I experimented with private group microblogging systems via authenticated feeds. Didn’t go anywhere, because many of the biggest newsreaders don’t properly support authenticated feeds. And “obscure but public” feeds get indexed by aggregators like Bloglines, by design, making sensitive content much less obscure.&lt;/p&gt;  &lt;p&gt;Enter &lt;em&gt;feed access control&lt;/em&gt;, a several- (3-?) year-old RSS/ATOM extension that tells Bloglines, and anyone else who is listening, that this feed should be treated as private, even though it’s public.&lt;/p&gt;  &lt;p&gt;Facebook’s feeds are intended to support this protocol:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_migKasxdsD8/SeVxe5Vlr0I/AAAAAAAAAJY/UqyuLq_mOaE/s1600-h/fb%5B7%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="fb" border="0" alt="fb" src="http://lh5.ggpht.com/_migKasxdsD8/SeVxfPyPDmI/AAAAAAAAAJc/KHzVZElQNJs/fb_thumb%5B8%5D.png?imgmax=800" width="433" height="288" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Which seems reasonable enough. &lt;/p&gt;  &lt;p&gt;There are a couple of issues though. First, this approach is based on a third-party’s positive action to prevent or “opt-out” of publishing and indexing, in a system that normally defaults to syndication, indexing, etc. &lt;a href="http://mashable.com/2007/09/24/facebook-feeds-security/"&gt;So it’s easier for a glitch to expose data&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Second, the whole “fac” extension is a gentlemen’s agreement among parties that couldn’t even agree on making authenticated feeds work well. Perhaps they all make a best effort to isolate the marked content. But tomorrow, a startup with a rocking aggregator could simply ignore “fac” and expose all of the feeds it has.&lt;/p&gt;  &lt;p&gt;In some sense, the same vulnerability exists with other systems – if you signed up with some random webmail provider, who’s to say they don’t expose your mail. But because RSS is public by nature, almost all feeds live utterly unprotected, and this extension is one vendor’s hack, it’s not quite the same.&lt;/p&gt;  &lt;p&gt;All in all, probably not a big reason for concern. But when people tell me how private things can be on facebook (where you can sneeze and end up revealing your data because the IxD is tilted so heavily toward sharing everything) it always seems worth noting how your data (via your friends’ feed subscriptions) can slowly leach out into the open ocean of the indexed net.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-2134960018197390571?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/2134960018197390571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=2134960018197390571' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2134960018197390571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2134960018197390571'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/04/facebook-private-rss-feeds-probably.html' title='Facebook “Private” RSS Feeds Probably Don’t Leach Data…'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_migKasxdsD8/SeVxfPyPDmI/AAAAAAAAAJc/KHzVZElQNJs/s72-c/fb_thumb%5B8%5D.png?imgmax=800' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-2388327187366950548</id><published>2009-04-13T10:26:00.001-07:00</published><updated>2009-04-13T10:26:02.936-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Random Bit: Sysprep Re-Writes Boot.ini … Not Always Correctly</title><content type='html'>&lt;p&gt;I discovered the hard way that Microsoft’s sysprep tool (for configuring machine images) re-writes (at least some of the time) the boot.ini file, the file which tells the Windows initial bootloader which OSes are installed on which devices and partitions.&lt;/p&gt;  &lt;p&gt;The new boot.ini contains the same OSes as the old one, but it specifies a different default, and a zero timeout for the user to choose what to boot.&lt;/p&gt;  &lt;p&gt;I can imagine some reasons why sysprep might want to do this, based on speculating how I might deploy enterprise images.&lt;/p&gt;  &lt;p&gt;Only the thing is, if I were going to re-write boot.ini, I would at least check to see which OS was currently running and maybe make that the default. As it is, sysprep made a different OS the default – it picked the “first” OS in the device tree even though that is not the OS I was trying to sysprep. This behavior seems more like a bug than a feature.&lt;/p&gt;  &lt;p&gt;In any case, if this happens to you, there was no long-term damage done -- you can just reconfigure the boot.ini file by hand and restart.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-2388327187366950548?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/2388327187366950548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=2388327187366950548' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2388327187366950548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2388327187366950548'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/04/random-bit-sysprep-re-writes-bootini.html' title='Random Bit: Sysprep Re-Writes Boot.ini … Not Always Correctly'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-1289884539125184741</id><published>2009-04-06T16:19:00.001-07:00</published><updated>2009-04-06T16:19:35.975-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='WinForms'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Enable “Modern” (Themed) Common Controls in Hybrid WPF/WinForms Apps</title><content type='html'>&lt;p&gt;Here is a quick hint to save someone from a bunch of Googling:&lt;/p&gt;  &lt;p&gt;If you are building a WPF app, you may find that you need or want to also use some Windows Forms windows. In my case, I was adding a form just to host a WinForms control, so there was no point in creating a WPF form just to host the WinForms Host container in order to add the control. A more common scenario is you want to invoke a built-in Windows dialog box, which is not natively a WPF object.&lt;/p&gt;  &lt;p&gt;If you do this, it will work, but you will notice that some controls are rendering their old-fashioned look and behavior – you’ll be zapped back to the era of Win 2000 or the earliest .Net apps that lacked the benefit of &lt;a href="http://msdn.microsoft.com/en-us/library/ms997646.aspx"&gt;comctl32.dll version 6&lt;/a&gt;. Square edges, no mouse-hover behaviors, etc.&lt;/p&gt;  &lt;p&gt;The short answer for how to fix this is that you need to add a call to System.Windows.Forms.Application.EnableVisualStyles(). &lt;/p&gt;  &lt;p&gt;Add it once, somewhere early on. It’s ideal (though not always necessary) to do this before you start instantiating the WinForms objects.&lt;/p&gt;  &lt;p&gt;Apparently the template code for WinForms projects contains this line, and depending on your POV, that’s either “low level boilerplate that an app developer shouldn’t have to care about” or “the kind of thing that kids nowadays just take fer granted with their magical IDEs and WYSI-whatnot, virtual memory and lazy programming habits.”&lt;/p&gt;  &lt;p&gt;I was also particularly motivated to write this post because the most accurate (and earliest) Google hit I found on this topic was to one of those scam programmer support boards, where they wanted me to sign up for a trial &lt;strong&gt;with a credit card&lt;/strong&gt; just to see the discussion thread on this issue. &lt;/p&gt;  &lt;p&gt;Which is half insane if they could persuade me that had the right answer inside, but 100% insane since there was no way for me to know that their “answers” weren’t way off topic from clueless n00b who thinks a HWND is what you pull to keep the rain out of your office.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-1289884539125184741?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/1289884539125184741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=1289884539125184741' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1289884539125184741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1289884539125184741'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/04/enable-modern-themed-common-controls-in.html' title='Enable “Modern” (Themed) Common Controls in Hybrid WPF/WinForms Apps'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-216630846391823603</id><published>2009-04-03T13:26:00.001-07:00</published><updated>2009-04-03T13:26:03.084-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='search'/><title type='text'>Visual and Context-Cued Semiotic Search Opportunity</title><content type='html'>&lt;p&gt;Want a hardcore problem to work on? to fund? to stay-up-nights-only-to-see-Google-do-it? or maybe get-bought-by-Google?&lt;/p&gt;  &lt;p&gt;We need a search engine that searches based on visual and contextual clues about the appearance of objects -- especially of signs and symbols -- rather than just based on words that (perhaps) describe them.&lt;/p&gt;  &lt;p&gt;For example, if I see a bumper sticker around town, with a green star on a blue field, I might want to see if this represents some well known organization or cause. I could search for “green star&amp;quot; and “bumper sticker” or something similar. But I probably won’t find anything. &lt;/p&gt;  &lt;p&gt;Moreover, when the elements of the design don’t have names (“star”, “stripe,” “field”), properly describing a complex design in a single search gets difficult. Imagine you saw the new Pepsi logo:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img src="http://farm4.static.flickr.com/3003/2969469986_58df961085.jpg?v=0" width="87" height="72" /&gt; &lt;/p&gt;  &lt;p&gt;You don’t know what it is; for the sake of the argument, imagine you don’t have any cultural Pepsi associations to work from either. What do you type in to the search box? Circle? red? stripe?&lt;/p&gt;  &lt;p&gt;Good luck.&lt;/p&gt;  &lt;p&gt;How do we solve this problem?&lt;/p&gt;  &lt;p&gt;I envision a search that consists of several stages. At the first stage, you can add descriptive words, or you can import a similar image, or even draw/sketch some cues right on the page. That may sound unlikely for less design-oriented folks, but many unknown visual designs consist of largely straight lines, simple geometry, etc. So it’s not unreasonable that I could sketch in a simple design, or even take a swing at the Pepsi logo above, with just a circle and 3 straight lines using an AJAX or Flash inline drawing tool.&lt;/p&gt;  &lt;p&gt;From these inputs, the search engine draws a set of possible results – but it also generates a set of context-narrowing options that I can use.&lt;/p&gt;  &lt;p&gt;It presents options to choose where I saw this design: web, billboard, tv, clothing, museum, public building (e.g., a capitol or courthouse), manhole cover, etc.&lt;/p&gt;  &lt;p&gt;Perhaps knowing material is useful: was this printed? embroidered? leather? denim? engraved metal?&lt;/p&gt;  &lt;p&gt;This is a challenging but eminently creatable piece of software.&lt;/p&gt;  &lt;p&gt;I’ve actually had a lot of instances where I would have liked to use something like this – but, if it’s never happened to you, consider: when computer vision progresses beyond working with the local environment, objects and known patterns (people), the machine will need to take the next step. It will want to dereference symbols to find data and meanings in order to solve problems. And, in order to do this, it will need benefit from this kind of visual-semiotic search heuristic, which starts with a visual-context search like the one we are discussing.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-216630846391823603?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/216630846391823603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=216630846391823603' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/216630846391823603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/216630846391823603'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/04/visual-and-context-cued-semiotic-search.html' title='Visual and Context-Cued Semiotic Search Opportunity'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-6953578804255532627</id><published>2009-03-31T16:59:00.001-07:00</published><updated>2009-03-31T16:59:37.445-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='networks'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Good Results So Far For Google RAM</title><content type='html'>&lt;p&gt;A week ago I had 4GB of RAM die (well, part of matched pair anyway) in my main desktop PC.&lt;/p&gt;  &lt;p&gt;I’m currently awaiting replacement under warranty from Corsair, but meantime it’s hard to run dev tools and big virtual machines with the measly amount of memory I have left. So I thought it was time to give the new Google network-attached RAM a try.&lt;/p&gt;  &lt;p&gt;I had to flash the motherboard BIOS of course and upgrade the chipset driver and the on-board network controller firmware. Google RAM, just like &lt;a href="http://lifehacker.com/348197/access-your-computer-anytime-and-save-energy-with-wake+on+lan"&gt;wake-on-LAN&lt;/a&gt;, has to interact with the network card at a hardware/BIOS level. In this case, the purpose is to ensure that any OS I boot sees the new space just like local memory.&lt;/p&gt;  &lt;p&gt;Then I rebooted and … nothing. &lt;/p&gt;  &lt;p&gt;Where is my free 4GB of storage?&lt;/p&gt;  &lt;p&gt;Then I remembered that Google’s revenue model for this product requires you to run a Windows service that in turn interacts with a Google-provided kernel patch for PAE. &lt;/p&gt;  &lt;p&gt;In addition to providing checks in real time – as my machine accesses RAM – for any security threats, this service displays Google ads as 5 new icons on my desktop.&lt;/p&gt;  &lt;p&gt;Apparently they are context-based, and determined by Google’s analysis of what I have in RAM at the time.&lt;/p&gt;  &lt;p&gt;And they are surprisingly accurate. I had a picture of a Corvette open in Photoshop, and the G-RAM icons turned into links to car dealerships, new-car financing, and a discount oil change.&lt;/p&gt;  &lt;p&gt;Google’s FAQ insists that it does not look at my clicks or the image file metadata – instead, its server analyzed the image in real time (since the network RAM is in their datacenter) and determined I was looking at a new Corvette.&lt;/p&gt;  &lt;p&gt;The only downside was that my cable modem signal dropped out for a couple of minutes, and the local service warned me not to touch any processes using G-RAM until it could sync back up, or those apps would immediately crash.&lt;/p&gt;  &lt;p&gt;No matter, overall it’s great technology, and I think my RAM replacement will arrive from Corsair tomorrow.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-6953578804255532627?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/6953578804255532627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=6953578804255532627' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6953578804255532627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6953578804255532627'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/03/good-results-so-far-for-google-ram.html' title='Good Results So Far For Google RAM'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-5172119442903936555</id><published>2009-03-29T10:18:00.001-07:00</published><updated>2009-03-29T10:18:27.579-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social networking'/><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><title type='text'>Quick Hit and a Deep Hit on Social Nets and Identity</title><content type='html'>&lt;p&gt;This &lt;a href="http://online.wsj.com/article/SB123819495915561237.html"&gt;article from the WSJ&lt;/a&gt; is neither deep nor particularly novel, but I like it because if focuses a laser on propagation of identities and the history of identities in popular social networks. This is the most important metatopic for social networks.&lt;/p&gt;  &lt;p&gt;If you have a few more minutes, &lt;a href="http://jcmc.indiana.edu/vol13/issue1/donath.html"&gt;this article&lt;/a&gt; by MIT Media Lab prof Judith Donath gets a lot clearer on the signals that make up identities online, and how the mechanics of those signals can function.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-5172119442903936555?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/5172119442903936555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=5172119442903936555' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/5172119442903936555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/5172119442903936555'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/03/quick-hit-and-deep-hit-on-social-nets.html' title='Quick Hit and a Deep Hit on Social Nets and Identity'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-1655276257779443631</id><published>2009-03-27T17:02:00.001-07:00</published><updated>2009-03-27T17:02:49.890-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Harm Reduction in Windows 7</title><content type='html'>&lt;p&gt;&lt;a href="http://lifehacker.com/5176876/windows-7-guest-mode-creates-bomb+proof-accounts-for-kids-friends"&gt;Guest mode&lt;/a&gt; … kid mode … whatever you want to call it, is brilliant.&lt;/p&gt;  &lt;p&gt;But more than that, it’s an interesting admission that (1) you can’t fight the power of the darknet and (2) you might as well empower people to behave in a way that &lt;a href="http://en.wikipedia.org/wiki/Harm_reduction"&gt;minimizes the damage&lt;/a&gt;, whether or not you approve of what they’re doing.&lt;/p&gt;  &lt;p&gt;If I had a dollar for every individual who ever swore they never go near warez or pr0n or questionable media downloads, and ended up with a mucked up machine … or worse, a machine that transmits their passwords and SSN to a bad guy …&lt;/p&gt;  &lt;p&gt;Even with an older OS, like XP, one can achieve a fair degree of isolation and protection by using a patched up Firefox or Chrome on top of a plain user (not admin) account. There are still holes by design; e.g., a user could fill up the hard drive or install software that persists in certain places. And I’m sure there are serious security flaws that allow code downloaded as user to escalate itself to admin … perhaps even coming from a “drive-by” Javascript source via Firefox/Chrome … but such threats seem to be pretty darned rare if everything is patched up and prophylactic protections are applied (e.g. Spyware S&amp;amp;D’s “immunization”).&lt;/p&gt;  &lt;p&gt;Guest mode (and IE 8 “In Private” browsing) appears to close many of the remaining holes.&lt;/p&gt;  &lt;p&gt;What we need now is an education campaign to convince people to segregate their online activities. But besides not knowing how to create these low-privilege accounts, a lot of people I know refuse to admit they ever visit the darknet. Or the visits are rare and they “hope for the best.”&lt;/p&gt;  &lt;p&gt;Let’s pre-configure – by default -- a second account for ever power user (or admin) on a machine. At login time, offer the guest (more protected) account along with some description of when it might be a good idea to use it.&lt;/p&gt;  &lt;p&gt;I’m not sure the best way to label the buttons, because it’s a bit hard to explain how the more secure, more protected mode is paradoxically for the more anonymous, more dangerous behavior; while the “less protected” mode is for normal operation which might involve vital personal data. I’ll let the UX wizards sort this part out.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-1655276257779443631?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/1655276257779443631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=1655276257779443631' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1655276257779443631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1655276257779443631'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/03/harm-reduction-in-windows-7.html' title='Harm Reduction in Windows 7'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-1557967203836981952</id><published>2009-03-23T22:52:00.001-07:00</published><updated>2009-03-23T22:52:47.478-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='comet'/><title type='text'>(Semi) Portable Comet Framework</title><content type='html'>&lt;p&gt;I meant to reblog this at the time of the announcement: &lt;a href="http://weblogs.java.net/blog/jfarcand/archive/2009/03/atmosphere_01al_1.html"&gt;Sun has released a first alpha of their atmosphere project.&lt;/a&gt; The project was about extracting useful comet-y bits from Grizzly and making a standalone pluggable kit for comet.&lt;/p&gt;  &lt;p&gt;It is its own small framework, and autodetects where you drop it.&lt;/p&gt;  &lt;p&gt;Here’s a nice &lt;a href="http://www.infoq.com/news/2009/03/atmosphere-alpha"&gt;article&lt;/a&gt;. It looks to be Jean-Francois Arcand’s project – follow his &lt;a href="http://weblogs.java.net/blog/jfarcand/"&gt;blog&lt;/a&gt; and the project’s &lt;a href="http://twitter.com/atmosphere_java"&gt;twitter&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-1557967203836981952?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/1557967203836981952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=1557967203836981952' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1557967203836981952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1557967203836981952'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/03/semi-portable-comet-framework.html' title='(Semi) Portable Comet Framework'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-7633824393820518103</id><published>2009-03-23T17:58:00.001-07:00</published><updated>2009-03-23T22:53:55.611-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='newspapers'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><category scheme='http://www.blogger.com/atom/ns#' term='PR'/><title type='text'>How Much Would You Pay to “Learn to Pitch Big [Failing] Newspapers”</title><content type='html'>&lt;p&gt;If you’re in SF next week, and you don’t mind paying $15-20 for the privilege, you can come hear some people from the SF Chronicle and NY Times talk about &lt;a href="http://www.meetup.com/SF-Coworking/calendar/9892098/"&gt;how to pitch your (probably tech) company&lt;/a&gt; to them. &lt;/p&gt;  &lt;p&gt;So they’ll write a glowing and informed article about you. &lt;/p&gt;  &lt;p&gt;Wait, wait, wait … this is all wrong.&lt;/p&gt;  &lt;p&gt;First, these are “reputable” newspapers, meaning they won’t necessarily write anything good about you. At most, they’ll theoretically assemble a balanced story, interviewing your competitors, talking to customers, maybe even your employees … or ex-employees. &lt;/p&gt;  &lt;p&gt;Oh, wait, I’ve got this wrong again. &lt;/p&gt;  &lt;p&gt;They aren’t going to anything like that … unless, maybe, you were already a big news-section story already. Else they will write something that’s like a watered-down blog post, without any specific expertise or authority, but with a couple of quotes. Newspapers like to quote because they can’t link. They’ll also mention twitter in the story, they can’t help themselves.&lt;/p&gt;  &lt;p&gt;These papers do have a big circulation though, maybe that’s the appeal. &lt;/p&gt;  &lt;p&gt;But it’s hard to tell their attention reach, or the “effective circulation” of your story buried in the tech or lifestyle section. How many people really read that? Are they influencers? Customers? Relevant at all to you?&lt;/p&gt;  &lt;p&gt;It’s hard to tell. I &lt;em&gt;can&lt;/em&gt; tell you that the people who are really interested might find the story … when it comes to them through the backdoor via some RSS feed or Google alert. But if they care enough to do the RSS thing and find you, then they’ll also have all the other, better, material about you that comes from all of the experts in your field who blog about you and also turn up in RSS and Google alerts. Ironic.&lt;/p&gt;  &lt;p&gt;Next, these two newspapers are in dire financial straits. At this point, $20 probably keeps the Chron publishing for another couple of days. And why are they in trouble? Not just because people can read their content online for free – rather, it’s because in most areas of reporting, the big organs have no specific interest, capability, or credibility, and so no one cares what they write. The one thing they can do is send a foreign correspondent to Iraq or the White House, and maybe the correspondent has some credibility…&lt;/p&gt;  &lt;p&gt;Wait, there I go again, the Times sold out on Iraq years ago, by their own admission, and so did most of the rest of the traditional press.&lt;/p&gt;  &lt;p&gt;Ok, I give up.&lt;/p&gt;  &lt;p&gt;I’m going to sponsor a meetup where newspapers can send people, who will each pay me $15-20, buying my attention long enough to tell me why I should care.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-7633824393820518103?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/7633824393820518103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=7633824393820518103' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7633824393820518103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7633824393820518103'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/03/how-much-would-you-pay-to-learn-to.html' title='How Much Would You Pay to “Learn to Pitch Big [Failing] Newspapers”'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-7087156643362410484</id><published>2009-03-20T18:34:00.001-07:00</published><updated>2009-03-20T18:34:18.548-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Silverlight Sound And Fury (You Know the Rest)</title><content type='html'>&lt;p&gt;So as not to bore regular readers, I’ll &lt;a href="http://skipmeamadeus.blogspot.com/2008/12/approaches-to-silverlight-dilemma.html"&gt;skip&lt;/a&gt; the &lt;a href="http://skipmeamadeus.blogspot.com/2009/02/adobe-and-microsoft-get-into-it-like.html"&gt;jeremiad&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Bottom line: despite the hoopla at MIX over Silverlight 3 – which is an incredible platform – there were still no meaningful penetration numbers presented.&lt;/p&gt;  &lt;p&gt;And while it’s great to see the platform revving and maturing, the various version make a development decision that much harder. If you have a new idea for a Silverlight app, and you imagine your target audience will have the plugin or is able to install it, do you aim for v3? v2? v1?&lt;/p&gt;  &lt;p&gt;I also haven’t heard a word about any explicit program to drive Silverlight client installs.&lt;/p&gt;  &lt;p&gt;According &lt;a href="http://www.riastats.com/"&gt;RIAStats.com&lt;/a&gt; – perhaps not the best source of detected install info, but … wait, I guess if it’s the only source of information, that automatically makes it the best – Silverlight is on 22.3% of their observed clients.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-7087156643362410484?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/7087156643362410484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=7087156643362410484' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7087156643362410484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7087156643362410484'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/03/silverlight-sound-and-fury-you-know.html' title='Silverlight Sound And Fury (You Know the Rest)'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-2760243056633330555</id><published>2009-03-16T13:00:00.001-07:00</published><updated>2009-03-16T13:00:41.197-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Microsoft SDS Change Eerily Reminiscent of WinFS Fate</title><content type='html'>&lt;p&gt;Last week Microsoft &lt;a href="http://blogs.msdn.com/ssds/archive/2009/03/10/9469228.aspx"&gt;announced&lt;/a&gt; that they would be abandoning the ACE and dynamic entity (“property bag”) model for the SQL Server Data Services cloud data storage system. They would also switch from their REST data API (used in ADO.Net Data Services) to the old-school “&lt;a href="http://msdn.microsoft.com/en-us/library/aa174503(SQL.80).aspx#"&gt;Tabular Data Stream&lt;/a&gt;” wire protocol.&lt;/p&gt;  &lt;p&gt;While Microsoft’s promise of more relational support was always a distinguishing feature of their cloud DB service, and while they tried to &lt;a href="http://blogs.technet.com/dataplatforminsider/archive/2009/03/10/what-s-next-for-sql-data-services.aspx"&gt;spin the news in that direction&lt;/a&gt;, it feels a lot more like when they abandoned WinFS and announced that, really, everything you could do with WinFS would work fine using NTFS and a whole heck of a lot of indexing. Maybe sorta true … but feels like a big step back.&lt;/p&gt;  &lt;p&gt;Of course, big customers – large enterprises with SQL Server databases and lots of SQL code – would not want to see a change in their data layer and would prefer this move. But accommodating them is assuming that they are ready to become first-version customers of the data cloud at all. And I doubt this for two reasons.&lt;/p&gt;  &lt;p&gt;First, any move to the cloud involves a trade-off of control which some companies are loath to make even if they are confident the system will work. Which is problematic because:&lt;/p&gt;  &lt;p&gt;Second, anyone who has dealt with big databases knows that there is no magic. Despite the quest for automagic autoscaling self-tuning databases, no one, so far as I know, has made one that does all of this for really large enterprise applications. There are just too many application specific variables, not to mention poorly written app code that can cause trouble in proportion to the amount of resources you give it access to.&lt;/p&gt;  &lt;p&gt;I do believe Microsoft has the engineering brainpower to try the problem, and are as likely as anyone to succeed. It’s just that I haven’t seen any evidence of a specific strategy or technology. Maybe if I were a bigger customer … but seriously, if Redmond had this problem solved (and it’s one of the biggest out there), they would either patent it or publish lots of white papers. Either way, it would be publicized and reviewed. A trade secret? maybe, but which Fortune 500 CIO is going to jump on that bandwagon &lt;em&gt;and&lt;/em&gt; the cloud &lt;em&gt;and&lt;/em&gt; the outsourced data stuff all at the same time?&lt;/p&gt;  &lt;p&gt;To the extent that these large database apps could be made to behave without human intervention, there is likely to be a tradeoff in resources, and when you’re paying per GB or per compute-cycle, that equals a side order of more cost to go along with the entree of new greater risk.&lt;/p&gt;  &lt;p&gt;The point is that the ACE/dynamic entity/REST model is well understood, performs, utilizes resources in a known manner. Not appropriate for every app. Not relational in the formal sense if at all. Not easy to migrate to. But it goes like the devil. So you’re getting something concrete in exchange for your risk and your dollars. Unlike a magical SQL Server instance in the sky.&lt;/p&gt;  &lt;p&gt;Maybe there is magic in there, and I’ll be proven wrong. Or maybe 99% of the customers’ database needs are so small that it’s a non-issue, and Microsoft is really just competing with the thousands of hosting providers that will host actual individual SQL Server instances for you on a large server. But this change still seems to raise more questions than it answers.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-2760243056633330555?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/2760243056633330555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=2760243056633330555' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2760243056633330555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2760243056633330555'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/03/microsoft-sds-change-eerily-reminiscent.html' title='Microsoft SDS Change Eerily Reminiscent of WinFS Fate'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-6635302566658285326</id><published>2009-03-12T16:47:00.001-07:00</published><updated>2009-03-12T16:47:59.499-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Way to Compete, Guys…</title><content type='html'>&lt;p&gt;&lt;a href="http://news.cnet.com/8301-13860_3-10193205-56.html"&gt;Microsoft’s app store&lt;/a&gt; … sure, why not? But that’s not the bit they need to take on Apple.&lt;/p&gt;  &lt;p&gt;Microsoft and the smartphone is really a funny/ironic/sad story depending on who you are.&lt;/p&gt;  &lt;p&gt;They had a true next-generation mobile OS starting back in ‘01 … It was really easy to code for – like GUI-builder, point-and-click web services, run-your-regular-.Net-code easy. And they were outselling pretty much everyone in total device count a couple of years later. By ‘06 they even had consumer friendly devices, in the Moto Q series and then the Samsung Blackjack. They were poised to challenge RIM for the big shiny belt.&lt;/p&gt;  &lt;p&gt;And then Apple came along and wiped the smirk off everyone’s faces. What’s surprising is that no ‘softie seems to have circulated an “Internet Tidal Wave” memo about mobile. Or, if they did, no one paid any attention.&lt;/p&gt;  &lt;p&gt;In the last two years, we’ve seen a continuing proliferation of Windows Mobile devices, but no fundamental change – or even speed-up – on platform evolution. If anything, we’ve seen a slowdown, as Mobile 7 devices seem to be at least a year away, and the “app store” is going to launch on Mobile 6.5&lt;/p&gt;  &lt;p&gt;In case anyone didn’t already notice, v 6.5 is a great OS if it’s 2005, but a non-entity in the iPhone era. An app store? well, maybe … but a store by itself has never been the magic sauce in mobile (remember Verizon’s “vending machine”).&lt;/p&gt;  &lt;p&gt;And with a “logo validation” scheme for each app? Developers violating the logo cert guidelines is not the problem. The problem is that there are too many different form factors for Win Mo devices. Used to be, practically anything could run the OS. Around the 5.0 era, they reduced the number of supported screen configurations, and a few other things. &lt;/p&gt;  &lt;p&gt;But there appears to be little escape from the compromise Microsoft made to be successful on the enterprise side: it’s really easy to code a simple utility/productivity/line-of-business app that will run great on almost any Windows Mobile device. And it’s equally hard to write anything really cutting edge, because there is simply too much variation in device capability and performance, and that genie's not going back in the bottle.&lt;/p&gt;  &lt;p&gt;Perhaps Microsoft’s best chance lies in forking a “consumer” mobile OS, with stricter controls over the handsets. On the other hand, Apple is clawing into the enterprise, so an artificial separation of consumer vs. enterprise offerings may be hopeless at this point.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-6635302566658285326?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/6635302566658285326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=6635302566658285326' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6635302566658285326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6635302566658285326'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/03/way-to-compete-guys.html' title='Way to Compete, Guys…'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-8605764008259687134</id><published>2009-02-27T22:49:00.001-08:00</published><updated>2009-03-01T12:15:19.705-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='RIA'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Adobe Time-Warps Half a Decade Back, Will Still Probably Defeat MSFT</title><content type='html'>&lt;p&gt;Earlier this week, I went to see a couple of folks from Adobe present their latest progress on &lt;a href="http://labs.adobe.com/technologies/flashcatalyst/"&gt;Flash Catalyst&lt;/a&gt;, Flex "&lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Gumbo"&gt;Gumbo&lt;/a&gt;," and the "&lt;a href="http://www.adobe.com/newsletters/edge/february2009/articles/article6/index.html"&gt;Spark&lt;/a&gt;" UI component framework.&lt;/p&gt;  &lt;p&gt;As someone who does a bunch of Flex work, I liked everything I saw.&lt;/p&gt;  &lt;p&gt;Especially since it was the second time around.&lt;/p&gt;  &lt;p&gt;No, I didn't see this stuff at MAX, I saw it at Microsoft PDC in 2003 and 2005.&lt;/p&gt;  &lt;p&gt;It was shocking how pleased Adobe seems with itself now that it's almost ready to release a design tool that generates XML and RIA code... since everything they showed -- and more -- was part of the earliest Microsoft Expression Blend alphas that I saw years ago. &lt;/p&gt;  &lt;p&gt;The Microsoft product was code-named "Sparkle." But we won't get this confused with Adobe's "Spark" because (1) "Spark" refers to a different bit, Adobe's re-invention of &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163662.aspx"&gt;lookless, templated controls, which Microsoft implemented in WPF and shared with the world at the time (around '04 or '05)&lt;/a&gt;, and (2) because Expression Blend is already out in a 2.0 version, so unlike the Adobe products, it doesn't need a codename anymore.&lt;/p&gt;  &lt;p&gt;Adobe even has yet another XML dialect to facilitate moving design assets through the workflow -- it's called "&lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/FXG+1.0+Specification"&gt;FXG&lt;/a&gt;." And it appears to supplement &lt;a href="http://www.adobe.com/devnet/flex/articles/paradigm.html"&gt;MXML&lt;/a&gt; quite well in specific areas, so that if you take MXML and add FXG, you get XAML. Not that XAML was &lt;em&gt;de novo&lt;/em&gt; or anything -- the XUL and Java folks (desperate to stop writing Swing code) had been creating similar XML formats for a while. The Java community was especially fond of XML with tons of imperative programming constructs mixed in alongside data objects and calling it "simple and declarative." What XAML did was provide all the necessary power, while keeping it declarative.&lt;/p&gt;  &lt;p&gt;Anyway ... Adobe should get credit for recognizing the right way to do this when they saw it. Namely, they realized which workflow tools were needed, embraced the idea of export from Photoshop and Illustrator to a vector markup with a visual editor with timelimes, and thence to an RIA build tool with a code-oriented IDE. &lt;/p&gt;  &lt;p&gt;Now that they're finally getting this on track, Adobe is even more likely to trounce Microsoft in the RIA world. They have penetration numbers that MSFT can only dream of, and for a company that doesn't build real developer tools they're giving it the college try.&lt;/p&gt;  &lt;p&gt;Which is kind of sad, since I believe Silverlight is a better technology with better &lt;a href="http://silverlight.net/learn/dynamiclanguages.aspx"&gt;language&lt;/a&gt; and tool support ... and &lt;del&gt;not any less&lt;/del&gt; &lt;a href="http://www.mono-project.com/MoonlightRoadmap"&gt;rather more&lt;/a&gt; open than Flash.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-8605764008259687134?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/8605764008259687134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=8605764008259687134' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8605764008259687134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8605764008259687134'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/02/adobe-time-warps-half-decade-back-will.html' title='Adobe Time-Warps Half a Decade Back, Will Still Probably Defeat MSFT'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-1072261314679370989</id><published>2009-02-17T10:30:00.001-08:00</published><updated>2009-02-17T10:30:02.797-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='strategy'/><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><title type='text'>Want Help With Your Startup? Let It All Hang Out on Craigslist</title><content type='html'>&lt;p&gt;It's awfully easy to go looking for folks doing stuff the wrong way ... and to find it. So it's nice to be surprised by someone doing something amazingly, shockingly, frighteningly ... right!&lt;/p&gt;  &lt;p&gt;I was greeted by a craigslist ad in my RSS reader today, one of many startups looking for folks to, essentially, work for free. I've written about &lt;a href="http://skipmeamadeus.blogspot.com/2009/02/think-about-it-do-you-really-want-your.html"&gt;why this is a bad idea&lt;/a&gt; before, and it's still a bad idea.&lt;/p&gt;  &lt;p&gt;But there's a little more to this ... the poster (the company's founder presumably) posts a link to a wiki. Maybe it's genius, maybe a trainwreck -- either way I had to look.&lt;/p&gt;  &lt;p&gt;On the other side of this link is a company wiki. An explanation of what the company is building; where they are in the process; their calendar; UI mockups with notes and the comment stream by the creators; and other items.&lt;/p&gt;  &lt;p&gt;This is absolute genius, and it's so rare. Plus it shows the guts that most entrepreneurs fancy themselves to have, but lack when tested. I'm not commenting on their specific business/tech idea, I haven't thought much about that to be honest.&lt;/p&gt;  &lt;p&gt;But it is so refreshing to see someone out there on the beach letting it all hang out as it were.&lt;/p&gt;  &lt;p&gt;I work with a lot of entrepreneurs and most of them think that they're the first ones to think up some genius idea, and the best way to be successful is to either keep it stealthy and secret, or to sign reams of NDAs and non-competes with you before disclosing (&lt;em&gt;cue music&lt;/em&gt;) their subtle and delicate brilliance.&lt;/p&gt;  &lt;p&gt;Just writing that last paragraph, it's a struggle to keep a professional tone. These folks are usually (97%, there are a couple of specific exceptions) complete fools. &lt;a href="http://skipmeamadeus.blogspot.com/2007/12/no-uber-soft-launches-and-no-stealth.html"&gt;And truly, they are fooling themselves, unconsciously trying to avoid exposing their idea to someone who might not think it's so good, or who might point them to the dozen other people doing the same thing.&lt;/a&gt; Generally speaking, the secrecy ends up being a contributing factor to their failure. Which, since startups are highly failure-prone anyway, they will deny anyway.&lt;/p&gt;  &lt;p&gt;That's why I was so thrilled to see this post. The founder is saying, &amp;quot;If you want to try and 'steal' my idea, you go ahead. But if you really believe there's a bunch of money in it, wouldn't you want to work with other people who believe the same thing and who have the will to execute? And if you go off with it and succeed anyway ... you're still helping me because you're establishing the category, while I plan to work nights and sweat blood to execute better and faster than you.&amp;quot;&lt;/p&gt;  &lt;p&gt;The ad is reproduced below. I was going to link it, but interestingly it has been 'flagged' for removal from craigslist. It's hard to imagine why -- the whole scenario seems rather &lt;em&gt;more&lt;/em&gt; legitimate than the typical ad in the category. Perhaps the allusion to potential full-time work disqualifies it from the free &amp;quot;gig&amp;quot; listing ... but I think a startup seeking essentially non-paid volunteers in whatever capacity they can afford qualifies as a part-time or temporary arrangement.&lt;/p&gt;  &lt;blockquote&gt;   &lt;table cellspacing="0" cellpadding="2" width="400" border="1"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="400"&gt;           &lt;p&gt;&lt;a href="http://sfbay.craigslist.org/sby/cpg/1037928917.html"&gt;Technical Wizard / Web Developer Wanted | Internet Startup (sunnyvale) &lt;/a&gt;&lt;/p&gt;           &lt;a href="http://sfbay.craigslist.org/sby/cpg/1037928917.html"&gt;&lt;/a&gt;            &lt;p&gt;An internet startup is seeking a highly talented web developer&lt;/p&gt;            &lt;p&gt;If you have experience with either: PHP/MySQL, Python, or Ruby we would love to talk with you. This a very exciting startup opportunity with massive potential. At this stage, we are looking to bring aboard those who are seeking equity share in the company. We simply do not have the capital to fund salaries.&lt;/p&gt;            &lt;p&gt;For more information, please have a look at: &lt;a href="http://wiki.kunsoom.com"&gt;http://wiki.kunsoom.com&lt;/a&gt;&lt;/p&gt;            &lt;p&gt;All of the pertinent information will be included in the wiki page. Thanks for your interest in the project! We look forward to hearing from you.&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-1072261314679370989?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/1072261314679370989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=1072261314679370989' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1072261314679370989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1072261314679370989'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/02/want-help-with-your-startup-let-it-all.html' title='Want Help With Your Startup? Let It All Hang Out on Craigslist'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-8975701440830488568</id><published>2009-02-16T19:45:00.001-08:00</published><updated>2009-02-16T19:45:34.632-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Adobe and Microsoft Get Into It Like Children on the Playground</title><content type='html'>&lt;p&gt;A week or so back, Adobe exec Mark Garrett got a bunch of attention for insisting that Microsoft's Silverlight effort has &amp;quot;fizzled.&amp;quot;&lt;/p&gt;  &lt;p&gt;Microsoft promptly screamed back that it wasn't so, pointing to the inauguration video stream, and a few other factoids.&lt;/p&gt;  &lt;p&gt;What makes this truly schoolyard funny though is what happened today when Adobe &amp;quot;announced&amp;quot; it was bringing Flash 10 to phones. This seems just as dubious as Microsoft's oft-repeated plan (since as far back as '05, when it was WPF/e) to get Silverlight onto mobile phones ... by last year ... which obviously didn't happen. &lt;/p&gt;  &lt;p&gt;Meanwhile, for years, Adobe has been pushing a &lt;a href="http://skipmeamadeus.blogspot.com/2007/04/mobile-rias-with-flashlite-evaluation.html"&gt;weak&lt;/a&gt; technology called FlashLite for mobile ... and for a variety of reasons it has never been a usable option for content providers to deploy Flash content or apps.&lt;/p&gt;  &lt;p&gt;For both Microsoft and Adobe, for both PC and phone applications, the critical metric is current &amp;quot;content-ready&amp;quot; penetration. How many devices are ready to run new Flash/Silverlight content off of the web today.&lt;/p&gt;  &lt;p&gt;In this 2x2, the only square that's solidly covered is Adobe's Flash on the PC. &amp;quot;Ready&amp;quot; penetration of Flash 9+ is near 100%.&lt;/p&gt;  &lt;p&gt;On PCs, existing install base is critical because of locked-down corporate networks that won't allow end-user installs. Microsoft needs to stop talking about download numbers, or numbers of people who &amp;quot;can access a PC with Silverlight,&amp;quot; and start doing anything it can to get these ready penetration numbers up.&lt;/p&gt;  &lt;p&gt;On mobile, the barrier is user confusion over configuration. Vendors could push the updates to phones, but in nearly 10 years of smartphones, only Apple has done much of this. Windows Mobile 6 has an updater ... and in over a year I don't recall it ever updating a darned thing. &lt;/p&gt;  &lt;p&gt;Flash Lite trumpets a large &amp;quot;installed base,&amp;quot; but these are strange installs, where the runtime (but not browser integration) is baked into the phone, and there's no reasonable way to get new Flash content onto the phone, either via web pages or download.&lt;/p&gt;  &lt;p&gt;Both of these players are big on bluster and have been for a long time. Meanwhile, developers are left with few options for all of the smartphones in the world that don't an apple on the back.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-8975701440830488568?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/8975701440830488568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=8975701440830488568' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8975701440830488568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8975701440830488568'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/02/adobe-and-microsoft-get-into-it-like.html' title='Adobe and Microsoft Get Into It Like Children on the Playground'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-8767623706549116646</id><published>2009-02-13T11:39:00.001-08:00</published><updated>2009-02-13T11:39:20.744-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='process'/><category scheme='http://www.blogger.com/atom/ns#' term='RIA'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Is It Too Early or Too Late for an Open RIA Design/Dev Toolchain?</title><content type='html'>&lt;p&gt;I was playing with the &lt;a href="http://raphaeljs.com/"&gt;Raphael JavaScript graphics library&lt;/a&gt; (a sort of script-based, cross-browser, implementation of SVG) and started thinking how helpful this library would be in creating a browser-based (as opposed to plug-in based) RIA.&lt;/p&gt;  &lt;p&gt;That lasted for about 15 seconds before I remembered that creating large, non-trivial RIAs generally involves designers, and most designers don't like creating vector art by coding a set of &amp;quot;path&amp;quot; statements, or animations as a collection of key-value pairs and millisecond-based transition times.&lt;/p&gt;  &lt;p&gt;That's why tools like Microsoft Expression, and Adobe Illustrator, Catalyst, and Flash exist.&lt;/p&gt;  &lt;p&gt;And why Adobe and Microsoft are investing so heavily in the designer-developer workflow: the ability of designers to turn graphics and animations into app skins and interaction which are immediately available to coders.&lt;/p&gt;  &lt;p&gt;In order for an open RIA solution to be competitive and realistic -- whether it's open in the pure-browser sense, using JS via dojo.gfx, or Rapael, etc., or whether it's via an open plug-in (Java/JavaFX seems like the closest, though it's not 100% open yet and may never be) -- this full toolchain needs to exist.&lt;/p&gt;  &lt;p&gt;We need to be able to export vector art from mainstream design programs such that they can be incorporated as assets into the RIA. It doesn't matter if this is via SVG, XAML, AI/EPS, or something else entirely. What does matter is that the import/export is robust enough that designers -- whose jobs, after all, include making stuff look just right -- are confident that what they design is what end-users will see. The Microsoft and Adobe tools can do this. To date most OSS attempts cannot.&lt;/p&gt;  &lt;p&gt;Next up, we need a truly usable, designer-friendly authoring tool for animations and interactions. It is often argued that some standard tools (*cough* Illustrator *cough*) are not paragons of usability themselves. No matter -- it's hard enough to get converts.&lt;/p&gt;  &lt;p&gt;Happily, there seems to be emerging some consensus among the big vendors about how these tools should work (both on-screen and in terms of in intermediate data formats). That blueprint lowers the risk and challenge for an open source contender.&lt;/p&gt;  &lt;p&gt;The biggest obstacle remaining is a classic open-source triangle-of-trouble: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;The toolchain/workflow will not be viable until it is quite solid, since the commercial alternatives (Flash, mainly) are so entrenched.&lt;/li&gt;    &lt;li&gt;It's hard to get enough contributor man-hours against such a huge project without an active user base.&lt;/li&gt;    &lt;li&gt;Since the user base is &lt;em&gt;not&lt;/em&gt; developers, the bootstrapping for #2 that makes many OSS projects work (devs are tolerant -- even excited -- about getting up on an 0.1 release) is unlikely.&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/26260493-8767623706549116646?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/8767623706549116646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=8767623706549116646' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8767623706549116646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8767623706549116646'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/02/is-it-too-early-or-too-late-for-open.html' title='Is It Too Early or Too Late for an Open RIA Design/Dev Toolchain?'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-7853557780230271419</id><published>2009-02-11T16:32:00.001-08:00</published><updated>2009-02-11T16:32:00.287-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='process'/><title type='text'>The Second Law of Thermo-Specifications</title><content type='html'>&lt;p&gt;A couple of days ago, Adam Milligan &lt;a href="http://pivotallabs.com/users/amilligan/blog/articles/691-milligan-s-law"&gt;posted an eponymous &amp;quot;law&amp;quot;&lt;/a&gt; on the Pivotal Labs blog.&lt;/p&gt;  &lt;p&gt;It includes a corollary stating, &amp;quot;The full definition of correct behavior of code exists in the tests for that code.&amp;quot;&lt;/p&gt;  &lt;p&gt;Now, there seemed to be something fundamentally off about this proposition ... and I wanted to figure out what that was. &lt;/p&gt;  &lt;p&gt;Surely Mr. Milligan doesn't mean this in the trivial, tautological sense (define the spec to be no more than what test cases happen to exist at a point in time) ... even though Agile dogma often borders on that view, pretending it's some kind of paradoxical path to enlightenment like a Zen koan.&lt;/p&gt;  &lt;p&gt;The comments to his post start to touch on &amp;quot;spec&amp;quot; vs. &amp;quot;test,&amp;quot; and whether 100% test coverage is practical, desirable, or conclusive. &lt;/p&gt;  &lt;p&gt;Of course even 100% code coverage, with a missing code path and a matching missing test and behavior spec equals ... test success, and wrong functionality.&lt;/p&gt;  &lt;p&gt;In such a case, though, the problem has been externalized from the Agile context and put onto a faceless &amp;quot;business person&amp;quot; who &amp;quot;doesn't get&amp;quot; Agile because he or she actually wants to plan ahead and describe some certain specs that persist over time.&lt;/p&gt;  &lt;p&gt;This is a neat trick. In physics, all sorts of magical things can happen if you look only inside of one context (or frame of reference) without looking at what's happening outside, or at what's happening to the frame itself. In finance, there can certainly be a free lunch ... if you can make its cost into an externality and remove it from your model.&lt;/p&gt;  &lt;p&gt;Once you make the tests and code-based behavior spec a part of the application you're building -- and clearly, once it's a real cost center as well as a critical deliverable part of the project, you have done so -- then you are in a sense simply externalizing that troublesome human interaction (specification, functional analysis, planning). Yes, the tests match the code under test. But seen at a different level of abstraction, it's just another flavor of interface-driven development, or debugging. &lt;/p&gt;  &lt;p&gt;Most engineers would love to realize the dream of self-describing, self-verifying code, whether that description be some kind of formal model, or a textual DSL (as with Microsoft's Oslo), or a set of tests and code-based behavior specs. And, indeed, these systems all improve the &lt;em&gt;transparency&lt;/em&gt; of the code, propagating requirements from the outside in, and revealing when they are not met.&lt;/p&gt;  &lt;p&gt;But even with the most &amp;quot;bought-in&amp;quot; business stakeholders, it is impossible to escape the the outermost specification layer, the one with the humans in it.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-7853557780230271419?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/7853557780230271419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=7853557780230271419' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7853557780230271419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7853557780230271419'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/02/second-law-of-thermo-specifications.html' title='The Second Law of Thermo-Specifications'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-6123520560114099335</id><published>2009-02-06T15:26:00.001-08:00</published><updated>2009-02-06T15:26:08.212-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Windows 7 Keeps Suspending in VMWare? Change Your Power Settings</title><content type='html'>&lt;p&gt;I'll admit, I fell right into this one.&lt;/p&gt;  &lt;p&gt;My Win 7 VMs kept suspending while I was off working on another machine. I'd come back to the host machine and see VMWare Workstation idling with the Win 7 instance frozen in suspend.&lt;/p&gt;  &lt;p&gt;Hmmm... Doh!&lt;/p&gt;  &lt;p&gt;The default power configuration for Win 7 -- even when on the machine is &amp;quot;plugged in&amp;quot; -- includes dropping into sleep mode after half an hour.&lt;/p&gt;  &lt;p&gt;This, thanks to VMWare, translates into a &amp;quot;Suspend Guest&amp;quot; operation.&lt;/p&gt;  &lt;p&gt;Maybe Vista shipped a default power configuration like this. I don't remember it being the case, but, to paraphrase &lt;em&gt;&lt;a href="http://www.imdb.com/title/tt0110912/quotes"&gt;Pulp Fiction&lt;/a&gt;&lt;/em&gt;, &amp;quot;[Vista] may [save power] like pumpkin pie, but I'd never know 'cause I wouldn't [run] the filthy mother****&amp;quot;&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-6123520560114099335?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/6123520560114099335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=6123520560114099335' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6123520560114099335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6123520560114099335'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/02/windows-7-keeps-suspending-in-vmware.html' title='Windows 7 Keeps Suspending in VMWare? Change Your Power Settings'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-2504503162282800899</id><published>2009-02-04T16:46:00.001-08:00</published><updated>2009-02-04T16:46:01.520-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><title type='text'>Think About It: Do You Really Want Your Engineering Done "For Free"?</title><content type='html'>&lt;p&gt;I enjoy reading the posts on craigslist, wherein naive entrepreneurs go looking for free software engineering talent. I know this sort of ad (no pay / equity only) bothers some people -- as though it somehow has real impact on the real jobs and pay in the industry -- but I think it's just fine. I mean, if you want a service for free, there's nothing wrong with asking. And if you are in the mood to work for free, it's nice to know where to find opportunities ... &lt;/p&gt;  &lt;p&gt;Of course I am not referring to recruiters for genuine charity / volunteer work, where the goal is to provide services to a population that isn't served by the normal market mechanisms. Rather I'm talking about real for-profit, we're-gonna-be-the-1-in-100-successful-startup-and-make-a-boatload-of-cash kinda company.&lt;/p&gt;  &lt;p&gt;The funny thing is that it's hard to imagine these wantrepreneurs looking for any other kind of professional services for free. Not because they feel coerced by social norms to offer money, but simply because they know better than to want what the &amp;quot;free professionals&amp;quot; have to offer.&lt;/p&gt;  &lt;p&gt;I don't see these guys saying:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;I need heart surgery and I'm looking for a doctor who wants to keep their resume fresh. No compensation, but I'll thank you if I wake up.&lt;/li&gt;    &lt;li&gt;Going through a brutal divorce. Looking for a sharp lawyer to keep me from losing my shirt -- no pay, but I'll buy you a drink if we come out ok.&lt;/li&gt;    &lt;li&gt;Need a corporate lawyer and patent attorney. Equity only.&lt;/li&gt;    &lt;li&gt;Startup needs business travel on the cheap. Seeking a pilot and aircraft, not so concerned with FAA licenses or airworthiness.&lt;/li&gt;    &lt;li&gt;Building a new facility -- need architect, structural engineers, environmental compliance, project managers, and laborers. If we make a bunch of money, we'll pay you at some point in the future.&lt;/li&gt;    &lt;li&gt;Love my new car, but it needs engine work -- looking for a mechanic who'll work for free. Someone with little or no experience seeking to build up a resume is ideal.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Now, it is true that in the late 90s, during the dot-com bubble, landlords, attorneys and other did take equity. But they did so in addition to -- not instead of -- cash payment. And the odds of making bank on equity back then, while still long, were stunningly better than they are today.&lt;/p&gt;  &lt;p&gt;I know what these guys &lt;em&gt;are&lt;/em&gt; thinking. They're thinking &amp;quot;I just don't have a budget to pay for real development, and anything I can get for free is better than the nothing I can afford otherwise.&amp;quot;&lt;/p&gt;  &lt;p&gt;Well, in some cases, perhaps. But that's setting an awfully low bar. Likely too low to allow for a real chance of success. That is, the entrepreneur is theoretically pouring all his time, money, heart and soul into starting this business. But he's willing to gamble the whole thing on the questionable code he'll get out of someone who has nothing better to do to pad a resume while unemployed? Doesn't quite add up.&lt;/p&gt;  &lt;p&gt;Or maybe he really wants a &amp;quot;partner&amp;quot; ... only it's unlikely this developer is going to see 50% equity. And anything less likely means the developer is along for the ride while the entrepreneur follows the same hare-brained decision process that led him to advertise the non-paid gig in the first place. In any case, the developer has no real clout when push comes to shove. He's a silent partner, just along for the ride.&lt;/p&gt;  &lt;p&gt;True, there are a few brilliant technologists out there who simply don't need any (more) money. They have cashed out of a startup, or they run another business on the side that covers their expenses. And if you can hire one of these guys, then bully for you. But I think they are more likely to spend their time where they can make an impact on a real business, product, open-source project, or non-profit.&lt;/p&gt;  &lt;p&gt;As for the entrepreneurs who get someone to bite ... they don't know what they're in for: a few months or more down the line, they have (perhaps) some kind of a half-baked system. They need the loyalty of that unpaid assistant to modify and improve the code, while the assistant has now seen through all the &amp;quot;about to receive funding&amp;quot; promises presented at the outset. And as the limitations of the half-baked system slowly become clear, the founder may wish to replace the developer, or throw the whole thing out and start over with a new iteration. &lt;/p&gt;  &lt;p&gt;But unless the original developer was a real sucker, all that equity means unrecoverable dilution in the cap structure. The more equity involved and the earlier the start (meaning smaller valuation), the worse this situation turns out to be. It could even come to pass that a potential investor one day passes on the deal because of these problems in the cap structure.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-2504503162282800899?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/2504503162282800899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=2504503162282800899' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2504503162282800899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2504503162282800899'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/02/think-about-it-do-you-really-want-your.html' title='Think About It: Do You Really Want Your Engineering Done &amp;quot;For Free&amp;quot;?'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-2853288230939956425</id><published>2009-01-26T11:26:00.001-08:00</published><updated>2009-01-26T11:26:16.159-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='non-relational'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Is that Service Really a Scalable Cloud or Just Full-Service Web Hosting?</title><content type='html'>&lt;p&gt;A lot of cloud stacks, or cloud app platforms promise scalability for your app, &amp;quot;With a little EC2 in every box!&amp;quot; (TM). There is a big catch and a little catch, though, and if your app gets big, then either or both of these may be a deal-breaker.&lt;/p&gt;  &lt;p&gt;First, and most important: &lt;em&gt;&lt;strong&gt;Running a vanilla RDBMS (e.g. MySQL) in a VM somewhere does not make it magically scalable&lt;/strong&gt;&lt;/em&gt;. Read that sentence one more time.&lt;/p&gt;  &lt;p&gt;Some cloud offerings integrate tightly to the traditional sort of DB instance you might attach to your web app on a single server. Examples include Heroku, which applies your Rails migrations to a PostgreSQL instance, and Stax, which offers MySQL.&lt;/p&gt;  &lt;p&gt;The great thing about these environments is that they don't require significant changes to your standard app built on their supported platforms (mostly Rails and Java variants). &lt;em&gt;Upload, minimal admin, and IJW&lt;/em&gt; (it just works).&lt;/p&gt;  &lt;p&gt;That's turn-key, full-service web hosting, right there. It's beautiful -- in fact, in an OO and Rails course I wrote, I chose Heroku for deployment as a way to let students get something up and running on the web without getting into the operations/deployment/tuning aspects of Rails which deserve their own course.&lt;/p&gt;  &lt;p&gt;But if your app gets large -- or just uses large datasets -- the database is rapidly going to be a bottleneck. Scaling out an app logic tier to a dozen EC2 instances automatically may sound good, but it won't do a thing for a DB-bound app (it may make it worse). And these databases don't scale out without a little architecture, planning, configuration -- all of the things which these cloud platforms are designed to avoid. And which, on some platforms, you cannot do at all. &lt;/p&gt;  &lt;p&gt;For example, so far as I can tell on Heroku or Stax, there is no way to even configure multiple servers and replication, which is just a minimum starting point for scaling a DB to multiple machines. Stax may allow for a logical sharding setup, but it's not clear how one would control which VMs and disks the databases run on. Rightscale seems like the kind of firm which would specialize in the management scripts / meta-API that one would need to automate sharding, but the sharding option doesn't appear in any of the models on their website. With replication, which Rightscale &lt;em&gt;does&lt;/em&gt; offer (though they're not exactly an app platform, more an infrastructure play), you get to this, still limited, picture:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.rightscale.com/images/site_diagram.gif" /&gt;&lt;/p&gt;  &lt;p&gt;Other cloud platforms offer datastores specifically designed to scale out, including Google App Engine, 10gen, and others. These platforms offer a non-relational or pseudo-relational datastore, with different data access APIs and a variety of restrictions relative to what you may be used to. These datastores are architected to scale easily, but there are &lt;a href="http://www.ryanpark.org/2008/04/top-10-avoid-the-simpledb-hype.html"&gt;real tradeoffs that must be considered&lt;/a&gt;. In fact, if you don't know these tradeoffs cold, you are not the right person to be making this platform decision. Get on craigslist and hire (or borrow) someone who knows the stuff.&lt;/p&gt;  &lt;p&gt;The other catch is that whichever approach you choose, these vendors are offering you convenience, some outsourced operations management, and (in some tiers) elasticity and scalability ... but they are not offering cheap compute cycles. That is, if you know you'll need a large, predictable amount of raw compute time, then know also that you're paying a premium to do that computation in one of these environments.&lt;/p&gt;  &lt;p&gt;A friend who has designed, built and operated feature film renderfarms for a number of studios confirmed that he has, on a semi-regular basis, analyzed the costs of remote VM-based datacenters (e,g. EC2) compared to their physical ones. Because the studios use these machines intensely, and are consistently consuming raw compute power, the local physical servers have always made more sense.&lt;/p&gt;  &lt;p&gt;What does this have to do with your web app and datastore? Well, suppose you have designed your app to leverage a scalable datastore. These may not be tunable, may not perform fast, and may require you to do certain operations in code which traditionally are done in the DB. You may never see these slow queries or operations ... until they show up in your bill. That is, if the system is truly elastic and scalable, it will apply resources as needed to handle your work. If your query or sort or filter takes a lot of CPU cycles, the cycles will be made (almost) instantly available, so the user always sees your app perform well. And then you'll pay for all those cycles or instances at the end of the month.&lt;/p&gt;  &lt;p&gt;Either way, there is no free lunch on the data persistence side. Which is not in itself a reason to avoid cloud environments. But it should be a bigger part of the conversation than it is today. And it absolutely must be part of the conversation, if larger businesses are going to move their services into the cloud.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-2853288230939956425?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/2853288230939956425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=2853288230939956425' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2853288230939956425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2853288230939956425'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/01/is-that-service-really-scalable-cloud.html' title='Is that Service Really a Scalable Cloud or Just Full-Service Web Hosting?'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-8052982127411808</id><published>2009-01-21T19:24:00.001-08:00</published><updated>2009-01-21T19:24:49.711-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='integration'/><category scheme='http://www.blogger.com/atom/ns#' term='non-relational'/><category scheme='http://www.blogger.com/atom/ns#' term='legacy systems'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Using AppEngine -- Or Similar Datastore -- To Integrate Complex Legacy Data Formats</title><content type='html'>&lt;p&gt;I gave a lightning talk last night at the &lt;a href="http://web.meetup.com/116/"&gt;SF Bay Area App Engine Developers&lt;/a&gt;, showing some work I've been doing to represent gnarly legacy records in AppEngine so as to maintain source fidelity, minimize upfront analysis, and make them easy to integrate with other systems.&lt;/p&gt;  &lt;p&gt;I had started with an XML record that I wanted to parse and represent in the &lt;a href="http://code.google.com/appengine/docs/python/datastore/"&gt;datastore&lt;/a&gt; -- without knowing which tags and structures would be present, since this format had, &lt;em&gt;ahem&lt;/em&gt;, evolved to obscurity over time, as often happens with real-world legacy records.&lt;/p&gt;  &lt;p&gt;Before I talk about my approach, here's why I thought this effort might be interesting to the group: a lot of data structures have a tree structure in common with XML. From C structs and file blocks that include a header, telling which types to cast the next n bytes to (and so on inside of those) ... to mainframe &amp;quot;structured data&amp;quot; records I've encountered which consist of nested records, parsed recursively, with their meanings occasionally opaque, lost to history, or belonging to some partner company.&lt;/p&gt;  &lt;p&gt;My approach -- which is simply to create a mapping of how to assemble and disassemble the records -- enables a record to be stored in a single App Engine record. But not as a block (or blob) -- rather with fine-grained addressable fields that are easy to talk to using the GAE Datastore API.&lt;/p&gt;  &lt;p&gt;In my case, since my original was XML, I created a mechanism similar to a tiny subset of XPath describing the sequence of tags where a data element lived -- but with the characters changed so that it would be Python and GAE-friendly. That is, instead of &amp;quot;/foo/bar[2]/baz&amp;quot; I used _Foo_Bar__2_Baz.&lt;/p&gt;  &lt;p&gt;This let me &amp;quot;flatten&amp;quot; the XML into a set of key-value pairs, while allowing that the XML might contain arbitrary structures injected by others ... and that I might want to inject my own extra structures. This arrangement is perfect for the &lt;a href="http://code.google.com/appengine/docs/python/datastore/expandoclass.html"&gt;Expando&lt;/a&gt; models in App Engine Datastore, or any similar store (e.g. Hypertable, which is modeled after &lt;a href="http://labs.google.com/papers/bigtable.html"&gt;BigTable&lt;/a&gt;, or Microsoft SQL Data Services which uses SQL 2008's sparse tables to &lt;a href="http://msdn.microsoft.com/en-us/library/cc512402.aspx"&gt;similar effect&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;So now I can store and retrieve my records. Any fields/subrecords which I understand and care about, I can easily work with from other systems, by mapping to the appropriate &amp;quot;key&amp;quot; in the stored record. &lt;/p&gt;  &lt;p&gt;For example, if I'm storing a bunch of catalog data, and another system just cares about enumerating each &amp;quot;Product&amp;quot; with &amp;quot;Name&amp;quot; and &amp;quot;Price,&amp;quot; then I can create a facade or wrapper in GAE that maps, say, Price to _Strange_Old_Way_To_Represent_Current_Price, and we're all set.&lt;/p&gt;  &lt;p&gt;To be sure, there could be performance issues if you tried to use this to create arbitrary queries and reports against the data. That's not really the purpose and, in my experience, if there are no &amp;quot;shortcuts&amp;quot; to processing these legacy records, then the business folks are not used to being able to make an OLAP cube out of them either. (They probably have a batch or offline extraction process.)&lt;/p&gt;  &lt;p&gt;Nonetheless, it's another tool in our chest when we need to work with systems and data that have been out in enough real-world battles to come home scarred with lots of cruft.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-8052982127411808?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/8052982127411808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=8052982127411808' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8052982127411808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8052982127411808'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/01/using-appengine-or-similar-datastore-to.html' title='Using AppEngine -- Or Similar Datastore -- To Integrate Complex Legacy Data Formats'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-4156954150517073578</id><published>2009-01-19T13:22:00.001-08:00</published><updated>2009-01-19T13:22:53.771-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perf'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>Twitter's Underwherlming (Former?) Architecture Problem</title><content type='html'>&lt;p&gt;I recently came across &lt;a href="http://blog.pasker.net/2008/05/06/twitter-versus-the-stock-market/"&gt;this post&lt;/a&gt; from May 2008 comparing Twitter traffic and the Options Price Reporting Authority data feed. Needless to say, the stock market feed is many orders of magnitude larger, at 700,000+ messages per second(!)&lt;/p&gt;  &lt;p&gt;It's also not the fairest comparison in the world on its face, for a variety of reasons: the OPRA data system was planned (Twitter met success more or less by accident), Twitter is minimally funded, etc.&lt;/p&gt;  &lt;p&gt;A more relevant comparison, in my opinion, is that provided by newzwag, which presented its performance challenges, triumphs, and secrets at a recent SF Ruby meetup.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://newzwag.com/"&gt;newzwag&lt;/a&gt;'s site and trivia game is built on Rails, started small, and had to grow to meet traffic driven by Yahoo and the Beijing Olympics to 9 million pageviews per hour (using a total of a half-dozen machines or so). And lest you think this is a content site served out of a cache, most of the traffic consists of &lt;em&gt;data writes&lt;/em&gt; by game players that then need to be ranked, published, etc.&lt;/p&gt;  &lt;p&gt;As far as I can tell, that's somewhat larger than Twitter, even considering that Twitter has grown 3-4x since last May's stats.&lt;/p&gt;  &lt;p&gt;newzwag's solutions, &lt;a href="http://blog.newzwag.com/2008/11/scaling-rails.html"&gt;which they share here&lt;/a&gt;, are a study in sanity, reasoned problem solving, and smart efficient architecture.&lt;/p&gt;  &lt;p&gt;Without the timelines or resources of a stock-market app, newzwag produced a nice solution that -- at least in hindsight -- appears drama-free.&lt;/p&gt;  &lt;p&gt;Interestingly, a newzwag - Twitter comparison can be enlisted to support a variety of different startup social narratives.&lt;/p&gt;  &lt;p&gt;One narrative is that an amateur-hour effort yields amateur-hour results, and aspiring startups shouldn't fool themselves into thinking that they won't need old-time Architecture and Sophistication to scale.&lt;/p&gt;  &lt;p&gt;A different narrative says it doesn't matter -- if Twitter's success is your worst-case scenario, you still win. That is, build it fast, get it out there where people can try it, and you should be so lucky as to need a real re-arch to fix your scaling problems. In this model, both Twitter and newzwag played it right -- newzwag because they knew the Olympics would provide a narrower time window to showcase their system, so they managed risk against that stricter goal.&lt;/p&gt;  &lt;p&gt;And yet another narrative says if you accept these two stories, you still wouldn't want your brokerage transaction flowing through a system built to &amp;quot;see what sticks,&amp;quot; and hence Web 2.0 startup methodologies stare at mission-critical business apps from across a huge chasm.&lt;/p&gt;  &lt;p&gt;I see this last story as persuasive but also as a big opportunity: there is a chasm, to be sure, but it needn't be quite so big. There are legacy mainframe apps that can speak webservices. Every manager in a big company wants their product to be &amp;quot;100% critical&amp;quot; even if they could create more value by admitting that a lot of nice-to-have two-nines business apps are the real bricks in the wall. If enterprises can get better at separating their Twitters from their OPRAs, they can make more money and have both.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-4156954150517073578?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/4156954150517073578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=4156954150517073578' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4156954150517073578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4156954150517073578'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/01/twitter-underwherlming-former.html' title='Twitter&amp;#39;s Underwherlming (Former?) Architecture Problem'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-4076888384992758157</id><published>2009-01-14T18:22:00.001-08:00</published><updated>2009-01-14T18:22:42.677-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='languages'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>New iPhone App Store Rules Take a Step Closer to Scriptable Apps</title><content type='html'>&lt;p&gt;A lot of folks commented today on newly-approved web browsers appearing in the App Store. Or, more precisely, a &lt;a href="http://www.macrumors.com/2009/01/13/apple-allows-3rd-party-web-browsers-in-app-store/"&gt;handful of apps using the existing web browser widget to offer a slightly tweaked browser experience&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;While iPhone apps could include the &lt;em&gt;UIWebView&lt;/em&gt; component before -- and indeed this has proven a &lt;a href="http://dominiek.com/articles/2008/7/19/iphone-app-development-for-web-hackers"&gt;popular route to getting hybrid native/web apps up and running quickly&lt;/a&gt; -- today's change is about allowing apps that &amp;quot;duplicate&amp;quot; a built-in feature of the phone. And one of the fundamental characteristics of any web browser nowadays is that it is thoroughly scriptable.&lt;/p&gt;  &lt;p&gt;If you build an app this way, it already includes a scripting environment ... so the question (since scripting and dynamic apps are &lt;em&gt;verboten&lt;/em&gt; on un-jailbroken iPhones) is how far one can let the scripting go and still pass muster with the App Store overlords.&lt;/p&gt;  &lt;p&gt;Using &lt;em&gt;stringByEvaluatingJavaScriptFromString&lt;/em&gt; we can inject script into the browser ... including script that pulls data back out. &lt;/p&gt;  &lt;p&gt;And &lt;a href="http://drnicwilliams.com/2008/11/10/to-webkit-or-not-to-webkit-within-your-iphone-app/"&gt;although the JavaScript bridge is &amp;quot;one directional&amp;quot; compared to the OSX desktop API, there are workarounds such as registering a protocol handler to receive scripted &amp;quot;requests&amp;quot; from inside the page&lt;/a&gt; ... or by &lt;em&gt;&lt;a href="http://www.cocoadev.com/index.pl?WebKit"&gt;hooking decidePolicyForNavigationAction&lt;/a&gt;&lt;/em&gt; with a script-initiated navigation request (disclaimer: I haven't checked to see if this is in the phone API, but it seems plausible) to signal the availability of data.&lt;/p&gt;  &lt;p&gt;So native code becomes effectively scriptable. Or, for an even less controversial but perhaps equally powerful route: just inject a bunch of JavaScript API libraries into the browser and keep the scripting (and more of your app) in Safari. That's not too different from pointing a browser at a web site (where the page loads various scripting libraries) ... except that underneath it all we are in native-caps mode ...&lt;/p&gt;  &lt;p&gt;Unless I'm missing something here, a somewhat ambiguous situation has gotten thornier with the admission of this new class of general purpose browser apps.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-4076888384992758157?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/4076888384992758157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=4076888384992758157' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4076888384992758157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4076888384992758157'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/01/new-iphone-app-store-rules-take-step.html' title='New iPhone App Store Rules Take a Step Closer to Scriptable Apps'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-1358744600474659603</id><published>2009-01-12T20:15:00.001-08:00</published><updated>2009-01-12T20:15:43.831-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Windows 7 Product Name is Missing a Feature</title><content type='html'>&lt;p&gt;I didn't feel strongly one way or the other about the Windows 7 product name (i.e. &amp;quot;Windows 7&amp;quot;) ... until recently when I wanted to troubleshoot the Azure SDK on Windows 7. (Apparently Azure on 7 has worked with the M3 build for at least one intrepid forum poster, but it's not behaving with the beta build for me at the moment.)&lt;/p&gt;  &lt;p&gt;I started searching newsgroups, forums, blogs, etc., and realized that &amp;quot;Windows 7&amp;quot; is not a great search term. &lt;/p&gt;  &lt;p&gt;On an engine like Google you can put quotes around it, specifying &lt;em&gt;exact phrase&lt;/em&gt;, but some other full-text search systems don't seem to want to keep the Windows and the 7 together. Or perhaps they have an index by single words, and they link the results together to match your phrase later, but once you throw in other terms like SDK and Azure, the matching engine becomes a little more promiscuous, offering you a &amp;quot;promising&amp;quot; combo of Azure, SDK, and Windows ... or SDK and 7 ... as a higher-ranked match. Making it, in any case, rather harder to find what you want.&lt;/p&gt;  &lt;p&gt;One-word product names, like &amp;quot;Silverlight,&amp;quot; &amp;quot;Vista,&amp;quot; and &amp;quot;XP&amp;quot; work a lot better for this kind of search. &lt;/p&gt;  &lt;p&gt;Which is perhaps a reason that folks include the release name with the version number on products such as Ubuntu (Hardy Heron, Intrepid Ibex, etc.)&lt;/p&gt;  &lt;p&gt;So ... what would be a good nickname to put next to Window 7?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-1358744600474659603?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/1358744600474659603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=1358744600474659603' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1358744600474659603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1358744600474659603'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/01/windows-7-product-name-is-missing.html' title='Windows 7 Product Name is Missing a Feature'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-5559203089312935380</id><published>2009-01-12T09:46:00.001-08:00</published><updated>2009-01-12T09:46:01.196-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Ruby and Python as Cloud Lingue Franche; Ruby/Rails on 10gen</title><content type='html'>&lt;p&gt;Not sure how this one slipped past me, but 10gen announced support for the Ruby language and most of the Rails framework APIs on their open-source cloud service last month.&lt;/p&gt;  &lt;p&gt;This addition is great news for 10gen and for cloud computing (the hosted-application-platform flavor, not the hosted-hardware/datacenter flavor).&lt;/p&gt;  &lt;p&gt;For 10gen, support for a well-known API and app model is a huge bonus, which makes it easy for people to move an app into the cloud without learning and coding to new APIs, and also lowers the perceived &amp;quot;lock-in&amp;quot; involved, should the move not work out.&lt;/p&gt;  &lt;p&gt;Their original JavaScript platform approach, as I've written before, is problematic not only because folks are unlikely to have meaningful (for their business) apps lying around to try mounting in the cloud, but more so because there is no standard server-side JS API set. A half-dozen companies offer a JS app server or cloud and they all have different platform APIs for even the simplest things, such as reading HTTP request variables, or deleting a session.&lt;/p&gt;  &lt;p&gt;10gen takes a big step forward, joining Stax, Heroku, and morph labs in supporting Ruby on Rails in the cloud.&lt;/p&gt;  &lt;p&gt;This move also reinforces another emerging trend: Ruby and Python serving as lingue franche for cloud app stacks. While many cloud offerings support JavaScript or other languages, Ruby and Python seem to be emerging as the ones with broadest support: 10gen will support both; AppEngine supports Python and a language-to-be-named-later; Stax supports both; Azure will likely support IronRuby and IronPython (some Python apps can already work in Azure).&lt;/p&gt;  &lt;p&gt;Of course, the language is only half of the battle -- there are the APIs to deal with as well, and issues will typically arise where the impedance mismatch is highest with cloud-related infrastructure. E.g., cloud databases are mostly non-relational and don't support SQL ... so an ActiveRecord or SQLAlchemy API won't work on 10gen's 'grid database' (a reasonable tradeoff for simpler scalability.)&lt;/p&gt;  &lt;p&gt;Even so, it is starting to appear as though one could write a lot of core business logic using, say, Python, and expect it to run unmodified on most vendors' clouds. Not a bad position to be in for the Python folks.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-5559203089312935380?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/5559203089312935380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=5559203089312935380' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/5559203089312935380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/5559203089312935380'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/01/ruby-and-python-as-cloud-lingue-franche.html' title='Ruby and Python as Cloud Lingue Franche; Ruby/Rails on 10gen'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-4513918182860068607</id><published>2009-01-11T12:56:00.001-08:00</published><updated>2009-01-11T12:56:07.025-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ACPI'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='laptops'/><title type='text'>Another Windows 7 Milestone: Bounce vs. Hibernate vs. VM Suspend Times</title><content type='html'>&lt;p&gt;Lately I've started running the Windows 7 Beta for some development experiments, using VMWare's fantastic dual-screen support. As I've written before, the general experience is great, even under virtualization with 1GB of RAM, and having it wall-to-wall on multiple displays makes the illusion more convincing.&lt;/p&gt;  &lt;p&gt;An interesting thing I've noticed is that my old habit, when I want to stop working in a VM and free up the resources, is to suspend the VM. This action is roughly (but not exactly, depending on the VM you're using) equivalent to &amp;quot;hibernating&amp;quot; a laptop (S4 power state) -- memory is mapped out to a file and the device is powered off.&lt;/p&gt;  &lt;p&gt;I usually do this because this hibernate/wake is faster than a shutdown/boot-up, not because I'm trying to save my actual work state (open apps, etc.) Especially with Windows server, but even with XP and Linux, this approach is the faster way to hop in and out of a work session. On the laptop, it's a way to save the battery power involved in a longish hard boot.&lt;/p&gt;  &lt;p&gt;In Windows 7, &lt;em&gt;VM suspend/resume (==hibernate/wake) seems to be slower than shutdown/boot&lt;/em&gt;. That is, even with no user apps running (which could take up an arbitrary amount of memory and thus lengthen the map-out / map-in time), boot seems faster. I say &amp;quot;seems&amp;quot; because I have only 2 machines to play with, and they are not clean images just for this test, so I won't pretend they represent absolute objective truth.&lt;/p&gt;  &lt;p&gt;What does this mean?&lt;/p&gt;  &lt;p&gt;It would appear that the boot process has been cleverly streamlined so that a cold machine gets to a running, usable state before all of the additional services and apps have fully loaded and gotten running, and that this is orchestrated using knowledge that a white-box VM player doesn't have.&lt;/p&gt;  &lt;p&gt;Some folks may point out that having to reboot an OS is itself questionable ... and indeed the boot is optional -- I only reboot my XP desktop every couple of months when some security patch or other requires a restart.&lt;/p&gt;  &lt;p&gt;But in the world of laptops and netbooks, things are different: every minute of juice is valuable, so there's always the consideration of the cost of a hibernate/wake vs. sleep vs. leaving it on with the LCD off. And that equation has just gotten a little more interesting: for Win 7 on a laptop, if you're not going to be using the machine for a while, it may turn out to be faster and use less power to do a shutdown, and just reboot later.&lt;/p&gt;  &lt;p&gt;While this may seem like a fairly inconsequential gimmick about boot times, it is a step in the right direction as we look at the huge array of gadgets we all use and which eat a ton of phantom power. The Windows PC is kind of the holy grail for a fully-off / instant-on experience, and Win 7 appears to take a measurable step in that direction.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-4513918182860068607?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/4513918182860068607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=4513918182860068607' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4513918182860068607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4513918182860068607'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/01/another-windows-7-milestone-bounce-vs.html' title='Another Windows 7 Milestone: Bounce vs. Hibernate vs. VM Suspend Times'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-7324974411358013465</id><published>2009-01-07T22:57:00.001-08:00</published><updated>2009-01-07T22:57:26.376-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='user groups'/><category scheme='http://www.blogger.com/atom/ns#' term='presenting'/><title type='text'>Embarrassment of Meetup Riches and a Suggestion for Compelling Talks</title><content type='html'>&lt;p&gt;In the Bay Area, we are fortunate enough to have so many great tech meetup groups that there are frequent collisions, and it's always a bummer to pass on what promises to be a great presentation.&lt;/p&gt;  &lt;p&gt;On January 20, the SF Java group has &lt;a href="http://www.meetup.com/sfjava/calendar/9348575/"&gt;three sharp guys presenting on Scala&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Meanwhile, down in Mountain View, the Google App Engine group has a &lt;a href="http://web.meetup.com/116/calendar/9332524/"&gt;&amp;quot;hacking...&amp;quot; talk that with a handful of presentations&lt;/a&gt; including an update from Google AppEngine Product Manager Pete Koomen.&lt;/p&gt;  &lt;p&gt;What to do? Hmmmm...&lt;/p&gt;  &lt;p&gt;Ultimately, I decided on AppEngine.&lt;/p&gt;  &lt;p&gt;Principally, it appeared that more new, not-readily-available-today-on-the-net material would be presented at the AppEngine group. Lightning talks give a forum to quirky thinkers, very early startups, and other interesting folks, while representation from the mothership might be able to offer a little detail or timeline on &lt;a href="http://code.google.com/appengine/docs/roadmap.html"&gt;upcoming features, like large BLOB support and the next language&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The Scala talk just seems less likely to include info that I can't get from existing resources.&lt;/p&gt;  &lt;p&gt;Which leads to the following conclusion about what makes for more compelling talks, at least for an audience of me:&lt;/p&gt;  &lt;p&gt;A focus on information that is not readily available, and which gains from the presence and experience of the speaker.&lt;/p&gt;  &lt;p&gt;So, for example, I've seen many talks on &amp;quot;my cool [insert language] library that does [insert function].&amp;quot;&lt;/p&gt;  &lt;p&gt;A fine topic. Now in the execution, perhaps best to talk about the problem being solved, how you solved it, what tradeoffs were made, constraints dealt with, any magic foo inside ... rather that a bunch of examples showing how clever/elegant the external API is and examples of what one can do with it. &lt;/p&gt;  &lt;p&gt;Not that the latter is unimportant, but that the latter is (should?!) be readily available from the online docs/examples or the presentation notes; whereas the former represents the specialized knowledge and experience of the library's creator.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-7324974411358013465?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/7324974411358013465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=7324974411358013465' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7324974411358013465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7324974411358013465'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2009/01/embarrassment-of-meetup-riches-and.html' title='Embarrassment of Meetup Riches and a Suggestion for Compelling Talks'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-7328333730741322513</id><published>2008-12-30T15:23:00.001-08:00</published><updated>2008-12-30T15:23:40.625-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><category scheme='http://www.blogger.com/atom/ns#' term='4GL'/><title type='text'>On the Wide Range of Ruby Talent: Rails as a 4GL(?)</title><content type='html'>&lt;p&gt;For a long time, I was puzzled by the extremely wide range of talent level among Ruby talent: more than any other language I could think of, &amp;quot;Ruby Programmers&amp;quot; seemed to range from the truly clueless to hardcore accomplished engineering veterans.&lt;/p&gt;  &lt;p&gt;I had more or less chalked this observation up to the language and APIs themselves -- easy to get running with, highly intuitive ... and yet packing deep and powerful features that would attract the more sophisticated (easy C integration, metaprogramming, continuations, etc.)&lt;/p&gt;  &lt;p&gt;On top of this was Rails with its famous screencasts showing database-backed websites automagically constructing themselves, a feat that got novices very excited, and reminded experts that they should be asking harder questions of any other framework they were using for the same kind of app.&lt;/p&gt;  &lt;p&gt;But lately I've come up with another -- or perhaps stronger variant -- hypothesis.&lt;/p&gt;  &lt;p&gt;Rails itself aspires to be a 4GL -- a DSL together with a framework, specializing in database-backed, RESTful web application development.&lt;/p&gt;  &lt;p&gt;It appears that some programmers see (or want to see) just the 4GL parts (the DSL, the declarative bits, the &amp;quot;conventions&amp;quot; and the &amp;quot;magic&amp;quot;) while others see a 4GL in close symbiosis with a 3[+]GL (Ruby) for doing procedural work.&lt;/p&gt;  &lt;p&gt;In some sense, both groups are seeing accurately -- for certain problems. That is, apps that truly hit the &amp;quot;sweet spot&amp;quot; for which Rails was designed, and which do nothing else, can be treated as compositions of 4GL bits much of the time. Highest productivity, get your check, go home, watch a movie.&lt;/p&gt;  &lt;p&gt;For other problems, additional logic and/or integration is required.&lt;/p&gt;  &lt;p&gt;And here's where the two groups of programmers part company. The pure-4GL-ers want to search high and low for a plug-in, gem, or other black-box component to solve the problem. Even if the black-box component is harder to use, poorly documented or maintained, does not include a test suite verifying it does what it claims, this group of coders wants the plug-in. They'll search and argue and try different ones even if the functionality is 15 lines of Ruby code. But they won't write the functionality themselves.&lt;/p&gt;  &lt;p&gt;The other group just writes the code. Perhaps they even bundle it into a plug-in and throw it on github. They also do things like submit patches to Rails itself.&lt;/p&gt;  &lt;p&gt;Depending on the situation, either approach might be fine ... &lt;strong&gt;&lt;em&gt;but:&lt;/em&gt;&lt;/strong&gt; when something doesn't go right, in terms of logic or process or performance or data integrity or something else ... the first group hits the wall. All of a sudden it's a &amp;quot;Big Problem&amp;quot; ... whether or not it's really a big problem. That is the Achilles heel of all 4GLs: if you view them as &amp;quot;closed&amp;quot; systems that require pluggable components then anything outside their bounds becomes a &amp;quot;Big Problem.&amp;quot;&lt;/p&gt;  &lt;p&gt;And lately I've watched as some participants in the Rails community systematically leap tall buildings in a single bound when they encounter them, while others literally sit on their hands waiting for a plug-in to appear (with no track record or test cases), which they then gratefully throw into their app and hope for the best.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-7328333730741322513?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/7328333730741322513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=7328333730741322513' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7328333730741322513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7328333730741322513'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/12/on-wide-range-of-ruby-talent-rails-as.html' title='On the Wide Range of Ruby Talent: Rails as a 4GL(?)'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-2471827646580727070</id><published>2008-12-29T22:20:00.001-08:00</published><updated>2008-12-29T22:20:22.710-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='driver'/><title type='text'>Fear of the Driver Disk</title><content type='html'>&lt;p&gt;The problem of bloatware/crapware on retail PCs is well known -- to the extent that Apple makes fun of it, pointing out the absence of such software on new Macs, while PC tools exist &lt;a href="http://lifehacker.com/385741/the-pc-decrapifier-detects-more-bloatware"&gt;just to clean it&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;But bloatware has a less-famous, equally annoying sibling: all the garbage that brand-name hardware devices install off their driver or utility disk.&lt;/p&gt;  &lt;p&gt;Pick up a peripheral -- printer, web cam, DVD drive -- from a major brand, and if you follow the automagical installer on the drive disk, you'll get a half-dozen apps that you may not need or like. In some cases, they're just bad apps (that have a habit of arranging to start at boot), while in other cases they can destabilize a perfectly-running system.&lt;/p&gt;  &lt;p&gt;The problems are that&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;in some cases you do need these apps, because some hardware features require &amp;quot;support software&amp;quot; to be present, and don't fully leverage the many built-in drivers and control panels available for free in Windows ... &lt;/li&gt;    &lt;li&gt;most hardware companies internally view the driver/utility software as an afterthought, writing it hastily, testing it inadequately, and staffing it with ... well ... whomever they can find.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;There are two main remedies.&lt;/p&gt;  &lt;p&gt;In many cases, getting an unbranded or &amp;quot;strange-branded&amp;quot; device is a smart idea (provided you know what you're getting). I've found these devices have straight-forward, minimalist support apps, make great use of built-in Windows drivers, and don't put any garbage on your system -- for the simple reason that they don't have the resources to write a bunch of half-baked apps, or to form &amp;quot;distribution partnerships&amp;quot; with people who do.&lt;/p&gt;  &lt;p&gt;If I do have a brand-name product, I generally attempt to install it without its own driver disk, no matter what the instructions say. In many cases, the device is fully supported by Windows out of the box; in other cases, some features may not be available -- but I may not need them. (E.g., If I wanted to use my digital camera as a webcam, that would have required the vendor driver disk... but I have never wanted to use that feature of the device.)&lt;/p&gt;  &lt;p&gt;And if that latter approach fails, it's pretty easy to uninstall the device or otherwise convince the PC it's never seen the device before -- so that you can go the RTFM route and use the supplied disk.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-2471827646580727070?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/2471827646580727070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=2471827646580727070' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2471827646580727070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2471827646580727070'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/12/fear-of-driver-disk.html' title='Fear of the Driver Disk'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-8776337779199573305</id><published>2008-12-23T15:25:00.001-08:00</published><updated>2008-12-23T15:25:18.579-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='application model'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Stax Brings more Standard App Models to the Cloud, Marginalizes Custom Platform Further</title><content type='html'>&lt;p&gt;&lt;a href="http://www.stax.net/"&gt;Stax&lt;/a&gt;, which recently launched in private beta, is a cloud hosting/deployment/ops platform based on Java appservers. The coolest thing about Stax is that it offers many flavors of JavaEE-deployable applications, including Python apps (via Jython) and Rails (via JRuby) with ready-to-roll built-in templates.&lt;/p&gt;  &lt;p&gt;Stax has a very AppEngine-y feel, not just on the website, but in terms of the SDK interactions, local development, etc.&lt;/p&gt;  &lt;p&gt;This is good news for all of the popular platforms ... and bad news for those rattling around the corners with non-standard APIs. As the app-hosting industry continues to mature, the emphasis will clearly be on established players like Rails, ASP.Net, JavaEE, Pylons, et al. at the expense of guys like AppJet.&lt;/p&gt;  &lt;p&gt;It's not about the language (JavaScript) but the about learning a set of APIs, patterns/practices, and sustaining a community ... based on a roll-your-own platform.&lt;/p&gt;  &lt;p&gt;It is true that some of these built-for-the-cloud platforms were designed from the start to default to hash-style or big-table style storage -- popular for content-oriented cloud apps because of its easy horizontal scaling -- where the &amp;quot;traditional&amp;quot; platforms focus on relational stores and have a variety of bolt-on APIs for cloud DBs.&lt;/p&gt;  &lt;p&gt;But now that there are so many standard alternatives, it is unlikely developers will pay any custom-platform-tax no matter how elegant that platform might be.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-8776337779199573305?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/8776337779199573305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=8776337779199573305' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8776337779199573305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8776337779199573305'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/12/stax-brings-more-standard-app-models-to.html' title='Stax Brings more Standard App Models to the Cloud, Marginalizes Custom Platform Further'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-6401231943899162746</id><published>2008-12-18T13:26:00.001-08:00</published><updated>2008-12-18T13:26:47.318-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='process'/><category scheme='http://www.blogger.com/atom/ns#' term='hard projects'/><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='estimation'/><title type='text'>We May Look Back Fondly on Our 68% Project Failure Rate</title><content type='html'>&lt;p&gt;The report [&lt;a href="http://www.iag.biz/images/resources/iag%20business%20analysis%20benchmark%20-%20full%20report.pdf"&gt;PDF&lt;/a&gt;] referenced &lt;a href="http://blogs.zdnet.com/projectfailures/?p=1175"&gt;here&lt;/a&gt; -- focusing on failure originating in the business requirements realm and offering a &amp;quot;68% project 'failure'&amp;quot; headline -- inspired two thoughts.&lt;/p&gt;  &lt;p&gt;First, it remains a head-scratcher why nearly every project, despite talk of risk analysis and mitigation, expects to be in the 32% success area. Even if a company has the best resources (and generally it will not), many causes of project failure originate in organizational factors -- friction, process, politics -- and externalities (e.g., no budget this quarter for the tools in the original plan). &lt;/p&gt;  &lt;p&gt;Since these issues are rarely known -- and, I would argue, actively denied in the sense that whistle-blowers and problem-spotter are systematically excluded from planning (at best) or forced down or out -- the average &amp;quot;expected value&amp;quot; of the d100 role is way less than a 68.&lt;/p&gt;  &lt;p&gt;In startups, I've heard the excuse that the whole company is a &amp;quot;long shot&amp;quot; -- as though that justifies taking on disproportionate risk in each project implementation. &lt;/p&gt;  &lt;p&gt;In enterprises, it seems as though management is so used to failure (in a timeline or budgetary sense), that they have simply redefined success to mean anything that they can pull off in their tenure -- and if that means a system that kinda works, but no one likes, shipped in 200% time and 400% budget, well, that's just the &amp;quot;reality&amp;quot; (which, to be sure, it &lt;em&gt;is&lt;/em&gt; once all other possible paths have been discarded).&lt;/p&gt;  &lt;p&gt;This redefinition of success also has the side effect of removing accountability and pretty much assuring a nice bonus and making strict accountability impossible.&lt;/p&gt;  &lt;p&gt;Another thought inspired by the report is how the gap between enterprise development and small / startup development is widening. On the one hand, large businesses could benefit from the high-productivity tools and agile approaches popular with startups; for a variety of reasons ranging from policies to personnel, they are not exploiting the latest wave of technology, and it's costing them.&lt;/p&gt;  &lt;p&gt;On the other hand, what they need regardless of tech is solid analysis and estimation capabilities. Analysis and estimation are possible, but hard, and the agile camp has moved mountains to try and reframe the problem so that they can advocate punting on all of the hard parts of these disciplines. That works great for the hourly agile consultants, but inside large businesses and large projects, it just doesn't cut it. A business needs to be able to attempt to estimate and plan months or even years of a project (hence the prevalence of &amp;quot;fake&amp;quot; agile in companies that purport to use it).&lt;/p&gt;  &lt;p&gt;The fact that the business does a horrible job with the estimation today does not mean that the organization (which, generally, is run by business people not developers) won't keep planning and targeting in the large.&lt;/p&gt;  &lt;p&gt;The result of these two pieces (different tech, different process) is that enterprise and small development are moving farther and farther apart, which is a damaging long-term trend. Ideally, these two groups should be learning from each other. They should spend more time moving in the same world.&lt;/p&gt;  &lt;p&gt;The enterprise learns that it probably doesn't need JavaEE and Oracle and a big planning process for myriad internal utility apps that could be done with Rails at a fraction of the cost and effort. The small company learns that relational integrity, transactions, estimation, and operations management are sometimes both necessary and profitable.&lt;/p&gt;  &lt;p&gt;Even more importantly, individual employees in the industry can cross-pollinate ideas as they move between these environments over their careers, sorting fact from fiction and getting better at determining what will work.&lt;/p&gt;  &lt;p&gt;The farther apart these groups are, the less appealing it will be for &amp;quot;startup guys&amp;quot; to work in an enterprise or a startup to hire on an &amp;quot;enterprise guy.&amp;quot;&lt;/p&gt;  &lt;p&gt;This trend -- since it keeps useful knowledge hidden -- can only help a 68% failure rate go up.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-6401231943899162746?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/6401231943899162746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=6401231943899162746' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6401231943899162746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6401231943899162746'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/12/we-may-look-back-fondly-on-our-68.html' title='We May Look Back Fondly on Our 68% Project Failure Rate'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-8320132727217975628</id><published>2008-12-12T15:45:00.001-08:00</published><updated>2008-12-12T15:45:01.989-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualization'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>How is Google Native Client Faster Than -- Or As Safe As -- JVM or x86 VM?</title><content type='html'>&lt;p&gt;When I saw Google's proposed &lt;a href="http://google-code-updates.blogspot.com/2008/12/native-client-technology-for-running.html"&gt;native-code execution plug-in&lt;/a&gt; earlier this week, my initial reaction was: &amp;quot;Don't we already have those, and they're called exploits?&amp;quot;&lt;/p&gt;  &lt;p&gt;I decided to mull it over a bit, and I still don't like it. While the idea of &lt;a href="http://googleonlinesecurity.blogspot.com/2008/12/native-client-technology-for-running.html"&gt;sandboxed native x86 execution based on real-time analysis of instruction sequences&lt;/a&gt; makes for a great Ph.D. thesis or &lt;a href="http://googleblog.blogspot.com/2006/05/googles-20-percent-time-in-action.html"&gt;20%-time&lt;/a&gt; project, it sounds like an awfully large attack surface for questionable benefit.&lt;/p&gt;  &lt;p&gt;Here's what I'd like to know from a practical nuts and bolts point-of-view: how many &amp;quot;compute-intensive&amp;quot; scenarios could not be implemented effectively using either (1) the Java VM or (2) a plug-in based on widely-available open-source machine virtualization, running a tiny Linux snapshot.&lt;/p&gt;  &lt;p&gt;While the JVM falls short of native code in some places, it can be as fast -- or even faster -- in other cases (faster because the runtime behavior provides opportunities for on-the-fly optimization beyond what is known at compile time). Yes, there are issue with clients not all having the latest Java version -- but that seems a small issue compared with the operational issue of deploying a brand-new plug-in or browser (Chrome).&lt;/p&gt;  &lt;p&gt;Another approach is to use a plug-in that runs a virtual machine, which in turn runs a small Linux (started from a static snapshot). User-mode code should run at approximately native speed in the VM, which should cover the pure computation cases. In a rare situation where someone wants to run an OLTP file-based db (which would behave badly in a VM environment) or get access to hardware-accelerated OpenGL facililties, specific well-defined services could be created on the host, which code could access via driver &amp;quot;ports&amp;quot; installed in the VM image.&lt;/p&gt;  &lt;p&gt;These approaches to the security boundary -- Java VM and x86 VM -- are well-known, long-tested and based essentially on a white-list approach to allowing access to the physical host. While Google's idea is intriguing, it sounds as though it's based on black-listing (albeit with dynamic discovery rather than a static list) of code. I'm not yet convinced it's necessary or safe.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-8320132727217975628?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/8320132727217975628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=8320132727217975628' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8320132727217975628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8320132727217975628'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/12/how-is-google-native-client-faster-than.html' title='How is Google Native Client Faster Than -- Or As Safe As -- JVM or x86 VM?'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-3748712874387850660</id><published>2008-12-09T14:34:00.001-08:00</published><updated>2008-12-09T14:34:20.906-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><category scheme='http://www.blogger.com/atom/ns#' term='vc'/><title type='text'>Yes, VC May Be Irrelevant if it Continues Focusing on Weekend Projects</title><content type='html'>&lt;p&gt;Where are Web 2.0's Amazon.com, PayPal, Google, or Travelocity? They were never funded.&lt;/p&gt;  &lt;p&gt;Paul &lt;a href="http://www.paulgraham.com/divergence.html"&gt;Graham&lt;/a&gt; and now Eric &lt;a href="http://www.techcrunch.com/2008/12/06/the-end-of-venture-capital-as-we-know-it/"&gt;Schonfeld&lt;/a&gt; are extending the several-year-old &amp;quot;VCs don't know what to do with Web 2.0's super-low-cost startups&amp;quot; meme. The extension has to do with the recession, arguing that it will accelerate the decline of VC relevance, as VCs become more reluctant to fund these shoestring startups, and more entrepreneurs pull a DIY anyway and ignore VC.&lt;/p&gt;  &lt;p&gt;Well... maybe. The VC problem with micro-cap micro-startups is real, in the sense that it's a real math problem where the VC fund size divided by the proposed investment size equals too many portfolio companies to interact with, and a kind of interaction that is a big break away from the old model.&lt;/p&gt;  &lt;p&gt;But the easiest fix is for VCs to simply invest in more expensive businesses. The current predicament is a classic chicken/egg: after the dot-com crash, VC money was hard or impossible to get, so the businesses people started were these undergraduate-level 1 man-year (or couple-of-weekends!) efforts.&lt;/p&gt;  &lt;p&gt;Small product, small team, small money. We got things like 'Remember the Milk.' Cute, sure. Useful, sure. But nothing too hard or too ambitious. Nothing a tiny shop -- or a bored college student -- couldn't hack out in their spare time. Indeed many &lt;em&gt;were&lt;/em&gt; spare time or side projects.&lt;/p&gt;  &lt;p&gt;Some of these apps got a lot of users, especially where network effects were involved, and eventually VC wanted nothing that wasn't viral, network-effect, social. Never mind that there was never big challenge or big value in those. Facebook is the biggest thing in Web 2.0 at the moment, and it's nothing but network effect and questionable monetization. &amp;quot;&lt;a href="http://www.seinfeldscripts.com/TheOuting.htm"&gt;Not that there's anything wrong with that...&lt;/a&gt;&amp;quot; It's a fine, useful application. &lt;a href="http://valleywag.com/5100552/temptress-of-silicon-valley-shuts-down-useless-site"&gt;But in the absence of any real substance the model became more Hollywoodesque, more personality- and connection-dominated than it should have.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So where is the Amazon? PayPal? Google? Travelocity? Ariba? Netflix? Danger (maker of the Sidekick devices)? Those big projects that take tens of man-years, maybe hundreds? The projects that can't &amp;quot;launch in beta&amp;quot; after a few months and acquire tens of thousands of fanatical users because they're more than a glossy AJAX UI on a local database?&lt;/p&gt;  &lt;p&gt;Where are the startups that drag whole industries whining and screaming into the 21st century and liberate billions in value, trapped in transactions that real people make every day?&lt;/p&gt;  &lt;p&gt;Those big projects haven't been A-round darlings for a long, long time. VCs, terrified of risk, moving in a tight pack, loved the new ethos: let the entrepreneur build a product, get it launched (&amp;quot;beta&amp;quot;), get customers, get mirror-hall PR (blogosphere), then later drop in a few bucks. Less risk. But not easy money. Count the exits.&amp;#xA0; And the ad-only valuation has no more magic today than it did in 1998.&lt;/p&gt;  &lt;p&gt;And no one even notices when hundreds or thousands of these little pownces and iwantsandys hit the deadpool. &lt;/p&gt;  &lt;p&gt;It's no coincidence that many of the step-by-step tutorials for new frameworks and tools teach you to clone a blogger, a flickr, or a wiki farm in a sitting. After all, those are trivial undertakings, lacking only for a network-effect mob signing on. And we'd all have a good laugh about widgets one day... if we weren't laughing so hard already.&lt;/p&gt;  &lt;p&gt;Can you imagine a tool vendor of the dot-com era giving an hour tutorial that produces a working Travelocity clone? a working PayPal clone? It's sketch comedy, or something sadder and more disturbing. Frankly, the most ambitious projects in all of web 2.0 are the tooling and infrastructure plays that are largely open source.&lt;/p&gt;  &lt;p&gt;Investors, entrepreneurs, engineers and end users might all do well by hunting some bigger game.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-3748712874387850660?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/3748712874387850660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=3748712874387850660' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/3748712874387850660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/3748712874387850660'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/12/yes-vc-may-be-irrelevant-if-it.html' title='Yes, VC May Be Irrelevant if it Continues Focusing on Weekend Projects'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-1249796951205675320</id><published>2008-12-04T18:26:00.001-08:00</published><updated>2008-12-04T18:26:02.678-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Approaches to the Silverlight Dilemma: Cashback? Vista SP? Win 7?</title><content type='html'>&lt;p&gt;The jury's still out on Windows Live Search &lt;a href="http://search.live.com/cashback"&gt;Cashback&lt;/a&gt; -- apparently there were some issues on Black Friday and, overall, things aren't up to goal ... but that could change.&lt;/p&gt;  &lt;p&gt;In light of this cashback program, though, my proposal from last year that Microsoft simply pay people to install Silverlight seems astonishingly realistic.&lt;/p&gt;  &lt;p&gt;The problem with Silverlight is that it &lt;a href="http://blog.mediawhole.com/2008/10/silverlight-penetration.html"&gt;doesn't have wide enough deployment&lt;/a&gt; -- so there is a chicken-and-egg problem deploying apps on the platform. Microsoft has released stats about how many people 'have access to a PC running Silverlight' -- but that's an odd definition of penetration (if a state university has 15,000 students, and 10 computers in a library lab have Silverlight, then presumably all 15,000 'have access to a PC with Silverlight'.)&lt;/p&gt;  &lt;p&gt;So ... why not just pay folks a small amount to install? Maybe a $2 coupon(Starbucks/Amazon/PayPal/etc.) to install the plug-in in the user's default browser.&lt;/p&gt;  &lt;p&gt;The WGA or XP key-checking components could be used to keep track of machines that have participated, making it impractical to game the system by performing extra installs. I'm sure a suitable equivalent could be used to verify installs on Macs and Linux boxes.&lt;/p&gt;  &lt;p&gt;Another approach is to wait for a future Vista SP or Windows 7 upgrade cycle. Since Silverlight will presumably be included for IE, the trick is to hook the default browser selection and attempt to install a suitable version of Silverlight into the target browser (Firefox, Chrome) when the user selects it. &lt;/p&gt;  &lt;p&gt;This move would surely be controversial -- even if there were a way to opt out -- and would bring back memories of the Microsoft of the 90s for some. But, since the web page itself decides what plug-ins to use, and no content is &amp;quot;forced&amp;quot; to render via Silverlight, it's only moderately different from making WMP or any other dynamically loadable object available.&lt;/p&gt;  &lt;p&gt;And for those &amp;quot;open web&amp;quot; advocates who have nothing good to say about proprietary plug-ins ... consider that Silverlight does not really compete with the open web, but rather with Flash, which otherwise has a &lt;em&gt;de facto&lt;/em&gt; monopoly on any RIA that cannot easily or cost-effectively be implemented in HTML/JavaScript. Breaking that monopoly could actually help the open web cause by creating a real platform debate in a space that doesn't really have any debate right now.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-1249796951205675320?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/1249796951205675320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=1249796951205675320' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1249796951205675320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1249796951205675320'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/12/approaches-to-silverlight-dilemma.html' title='Approaches to the Silverlight Dilemma: Cashback? Vista SP? Win 7?'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-2740935475920980122</id><published>2008-12-02T15:36:00.001-08:00</published><updated>2008-12-02T15:36:12.899-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='webcast'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Microsoft Begins Posting "Proceedings" Docs for PDC Sessions</title><content type='html'>&lt;p&gt;Microsoft has started posting an accompanying document for each 2008 PDC session, containing a detailed content summary, links, and indexes (into the video stream) for demos.&lt;/p&gt;  &lt;p&gt;These docs, called &amp;quot;proceedings,&amp;quot; had been part of the plan to publish the PDC content this year, and it's nice to see them showing up alongside the slide decks and full-length session video streams that had already been posted.&lt;/p&gt;  &lt;p&gt;While not full transcripts, or even detailed outlines, the information value of these docs is far higher than the full-length videos (per minute of attention investment), so I highly recommend them if you have interest in any of the newest Microsoft technology.&lt;/p&gt;  &lt;p&gt;Docs, transcripts, and outlines seem to be a more efficient way to present content for multicast consumption than live video. While full-length web video is cheap and easy to produce, it wastes an enormous amount of time on the viewer side. Instead of reading/scanning the content as fast as the reader likes, he or she must sit through the lower-information-density spoken content and -- what's worse -- is forced to do so in a linear fashion. The time loss is then multiplied by all of the viewers ...&lt;/p&gt;  &lt;p&gt;If an employer is paying for your time watching videos -- whether they be technical sessions, product demo videos (all the rage now), or so-called webinars -- then perhaps it's nice to sit back, have a cup of tea, and go into watcher mode.&lt;/p&gt;  &lt;p&gt;But if you're investing your own time/resource/productivity into acquiring some knowledge, it's nice to (1) be able to do it at your own reading pace and (2) be able to skim/scan sections of less value at high speed and pop out into 'careful reading mode' as necessary.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-2740935475920980122?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/2740935475920980122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=2740935475920980122' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2740935475920980122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2740935475920980122'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/12/microsoft-begins-posting-docs-for-pdc.html' title='Microsoft Begins Posting &amp;quot;Proceedings&amp;quot; Docs for PDC Sessions'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-4272210043893216059</id><published>2008-11-30T16:50:00.001-08:00</published><updated>2008-11-30T16:50:48.126-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='printers'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>Most Laser Printers are Razors, not Cars</title><content type='html'>&lt;p&gt;Once upon a time, buying a small or midrange laser printer was like buying a car. Big upfront expenditure, lots of sweating the details, and a moderate amount of thought about gas mileage and scheduled maintenance, er, toner and fusers and all that.&lt;/p&gt;  &lt;p&gt;Now, however, it's more like buying a razor. The core features are mostly reasonable, each &amp;quot;size&amp;quot; printer has a speed/duty cycle that determines its suitability for an installation, and the cost is so small that it's all about the consumables (blades).&lt;/p&gt;  &lt;p&gt;So why won't vendors -- or manufacturers -- print the cost-per-page of consumables right next to the dpi, ppm, idle power consumption, and time-to-first-page?&lt;/p&gt;  &lt;p&gt;It's easy to find 10x differences between otherwise similar printers in the cost-per-page based on the manufacturer's price for toner cartridges and their intended yield.&lt;/p&gt;  &lt;p&gt;Big companies, of course, have IT purchasing folks who perform these calculations, factor in the discount they get because the CIO plays golf with the right people, and order the gear. In the case of printers, large companies are typically buying high-volume printers that are among the cheapest per page anyway.&lt;/p&gt;  &lt;p&gt;But startups, professional practices (think doctors, accountants), small to midsize businesses -- they rarely calculate the TCO for each device. It would be helpful to have the consumables price per page listed right on the sticker, like MPG.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-4272210043893216059?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/4272210043893216059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=4272210043893216059' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4272210043893216059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4272210043893216059'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/11/most-laser-printers-are-razors-not-cars.html' title='Most Laser Printers are Razors, not Cars'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-2830778165573656301</id><published>2008-11-29T13:56:00.001-08:00</published><updated>2008-11-29T13:56:51.483-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='laptops'/><title type='text'>For Individuals, Top Laptop Values May Be At Low-End Prices</title><content type='html'>&lt;p&gt;About a year ago, when I started my latest stint doing 100% contracting, I realized I would need a laptop for meetings, client presentations, etc. Not for coding -- &lt;a href="http://skipmeamadeus.blogspot.com/2008/06/if-developers-love-speed-why-is-slow.html"&gt;I've written about my views on that&lt;/a&gt;, and I'll never trade away my nuclear aircraft carrier of a dev box for an inflatable dinghy just so I can hang with hipsters at the coffee shop.&lt;/p&gt;  &lt;p&gt;Since I wouldn't be using the laptop much, and historically the many company-provided laptops I've used have turned out to be poor performers, malfunction-prone, and costly to deal with, I resolved to get the cheapest new laptop I could find. (Laptops have a strange depreciation curve, with the result that a cheap new laptop is often a much better device than a used one at the same price.)&lt;/p&gt;  &lt;p&gt;In addition to the usual holiday sales (you can guess what prompted this article now), the whole &lt;a href="http://skipmeamadeus.blogspot.com/2007/11/want-real-cheap-real-usable-windows.html"&gt;Vista-Basic-capable-not-really thing was going on&lt;/a&gt;, with the result that many machines were being cleared out for good, considered illegitimate for Vista and not saleable.&lt;/p&gt;  &lt;p&gt;I snagged a Gateway floor model at BestBuy for under $300, put another gig of RAM in ($30?), snagged XP drivers, and installed Windows Server 2003 R2, since I had found that Server 2003 was very light on the hardware while offering more than all the benefits of XP.&lt;/p&gt;  &lt;p&gt;At this price point, I figured the laptop borders on disposable, and if I could prevent the TCO from getting high come what may.&lt;/p&gt;  &lt;p&gt;Well, a year or so on I have some results to report.&lt;/p&gt;  &lt;p&gt;It has performed far beyond my expectations (and as a developer my expectations tend be unreasonably high).&lt;/p&gt;  &lt;p&gt;The only negative is the comically poor build quality -- this is a machine that one must literally 'Handle With Care' as it's built about as well as those tiny toy cars out of a quarter-vending-machine. I think I could snap it in half if I tried, and a careless twist could rip the drive door off or crack the case right open. The keyboard rattles a bit on some keys.&lt;/p&gt;  &lt;p&gt;I have a padded briefcase and the machine was never intended for &amp;quot;heavy duty,&amp;quot; so that wasn't a big deal for me. And, in any case, it seems more of a reflection on Gateway than on the price point, since, e.g., Acer offers rock-bottom laptops with much higher build quality.&lt;/p&gt;  &lt;p&gt;That issue aside, the machine has performed flawlessly. No problems with any part of it, despite being a display model. And performance adequate to some real programming.&lt;/p&gt;  &lt;p&gt;The ergonomics are poor for programming (single monitor, low-ish resolution, etc.) -- but it snappily runs NetBeans/Ruby/Java; Eclipse/Java plus various mobile device emulators (e.g., Android) which I needed for a course I taught this summer; even Visual Studio 2008. I do run MySQL rather than SQLServer, in part to keep the load down. &lt;/p&gt;  &lt;p&gt;Let's see ... what else has run well on here? ... the Symbian S60 emulators (along with dev tools) ... Sun's VirtualBox virtualization software, with an OS inside. All the usual productivity stuff (Office 2007, MindManager 8) ... Microsoft's Expression design/UI tool suite ... video encoding software and high-bitrate x264 streams from hi-def rips ... often many of these at the same time. Everything I've asked it to do, it does seamlessly.&lt;/p&gt;  &lt;p&gt;My conclusions are that sturdier laptops may well be worth it, especially for corporate IT departments -- I'm thinking about products like the ThinkPad and Tecra lines, where the price doesn't just reflect the specs but also a sturdy enclosure, standard serviceable components, slow-evolution/multi-year-lifecycle per model etc.&lt;/p&gt;  &lt;p&gt;But for an individual, unless you have a very specific hard-to-fill need (e.g. you want to do hardcore 3D gaming on your laptop or capture DV, a bad idea with a 4200 RPM HDD), the top end of the value equation for laptops appears to be at or near the bottom of the price range. When one considers that higher-end peripherals (e.g., a BlueRay writer) can easily be plugged in via USB, and a faster hard drive will snap right into the standard slot, the value-price equation seems to get seriously out of whack for those $1200-$2500 machines.&lt;/p&gt;  &lt;p&gt;That's not to say these higher end machines are not great ... they just don't represent value at the pricepoint. Just as a Mercedes E-class is a fine car, but the radio commercials that try to make it out to be some kind of value purchase are downright funny, I think the same applies for the high-end VAIOs, MacBook Pros, etc. Those machines are a style and brand statement for people who care about making such a statement.&lt;/p&gt;  &lt;p&gt;This possibility is interesting because, in most products, the &amp;quot;optimum value&amp;quot; position is somewhat above the bottom end of the price range ... that is, the least expensive products are missing critical features, making them a poor value, while the high-end ones charge a &amp;quot;luxury premium.&amp;quot; If laptops are different, that seems worth noting.&lt;/p&gt;  &lt;p&gt;The usability of an ultra-cheap laptop also suggests a response to folks who commented on my earlier article, saying that companies are loath to buy a desktop and a laptop, so if an employee needs any mobility at all, they get a laptop. It appears a good solution might be to provide a high-end desktop and an ultra-cheap laptop. At these prices, the employee's time costs more than the laptop, and my experience suggests little productivity (given a remote scenarios such as a training class or client demo) is sacrificed.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-2830778165573656301?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/2830778165573656301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=2830778165573656301' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2830778165573656301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2830778165573656301'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/11/for-individuals-top-laptop-values-may.html' title='For Individuals, Top Laptop Values May Be At Low-End Prices'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-4678222728474965751</id><published>2008-11-25T21:27:00.001-08:00</published><updated>2008-11-25T21:27:06.487-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='compilers'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Do FlexBuilder and MXMLC Really Feature Incremental Compilation?</title><content type='html'>&lt;p&gt;I use FlexBuilder in my work, and, overall, it's a decent tool. Eclipse gets a lot of points for being free; Flex SDK gets a lot of points for being free. FlexBuilder doesn't get points because it's basically the above two items glued together along with a GUI builder, and it costs real cash.&lt;/p&gt;  &lt;p&gt;Wait, I'm off track already. The price isn't the issue for me. Rather, I want to know why FlexBuilder doesn't feature incremental compilation. &lt;/p&gt;  &lt;p&gt;Hold up again, actually, I guess I want to know how Adobe defines incremental compilation since they insist that it &lt;a href="http://livedocs.adobe.com/flex/3/html/help.html?content=compilers_20.html"&gt;is present and switched on by default in FlexBuilder&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Now, if I make any change (even spacing) to any code file -- or even a non-compiled file, like some html or JavaScript that happens to be hanging out in the html-template folder -- FlexBuilder rebuilds my entire project. And it's a big project, so, the job even on a 3.6GHz box means a chance to catch up on RSS or grab more coffee.&lt;/p&gt;  &lt;p&gt;Interesting take on incremental compilation. See, I thought the whole idea was to allow compilation of some, ah, compilation unit -- say a file, or a class -- into an intermediate format which would then be linked, stitched or, in the case of Java .class files, just ZIPped into a final form. &lt;/p&gt;  &lt;p&gt;Besides allowing compilation in parallel, this design allows for an easy way to only recompile the units that have changed: just compare the date on the intermediate output file to the date on the source file. If the source file has changed later, then recompile it. It does not appear that this is how the tool is behaving.&lt;/p&gt;  &lt;p&gt;Perhaps this logic is already built into FlexBuilder -- mxmlc, really, since that's the compiler -- and the minutes of build time are spent on linking everything into a SWF. Since Adobe revs Flash player regularly, and many movies are compiled with new features to target only the new player, it should be possible to update the SWF format a bit in the next go-around, so that linking doesn't take egregiously long.&lt;/p&gt;  &lt;p&gt;Apparently, at MAX this year, Adobe has started referring to the Flash &amp;quot;platform&amp;quot; -- meaning all of the related tools and tech involved around the runtime. Fair enough, it is a robust ecosystem. But &amp;quot;platform&amp;quot; kind of implies that the tools support writing real -- and big -- applications, not just a clone of Monkey Ball or another custom video player for MySpace pages.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-4678222728474965751?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/4678222728474965751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=4678222728474965751' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4678222728474965751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4678222728474965751'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/11/do-flexbuilder-and-mxmlc-really-feature.html' title='Do FlexBuilder and MXMLC Really Feature Incremental Compilation?'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-2581655423450677991</id><published>2008-11-23T14:31:00.001-08:00</published><updated>2008-11-23T14:31:43.242-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='process'/><category scheme='http://www.blogger.com/atom/ns#' term='culture'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><title type='text'>Software Discipline Tribalism</title><content type='html'>&lt;p&gt;Unfortunately, people seem rarely able to stop at a reasoned preference -- e.g., &amp;quot;I like X, since X may offer better outcomes than Y&amp;quot; ... and too often end up, at least whenever group persuasion is involved, somewhere more dramatic, personal, extreme, and narrow -- e.g., &amp;quot;I'm the X kind of person who rebels against Y, since Y can offer worse outcomes.&amp;quot;&lt;/p&gt;  &lt;p&gt;This is as true in cultures of software development as anywhere else.&lt;/p&gt;  &lt;p&gt;While many people have been guilty of this unproductive shift in attitudes, it seems many of the Agile development, dynamic languages, small-tools/small-process/small-companies crowd has long since fallen prey to it.&lt;/p&gt;  &lt;p&gt;To be sure, there was much temptation to rebel. &lt;/p&gt;  &lt;p&gt;At the start of the decade, proprietary Unix was strong; many processes came with expensive consultants, training, books, and tools ... and overwhelmed the projects they were meant to guide; many tools were expensive and proprietary. Web services were coming onto the scene and large players, with licenses and consulting hours to sell, created specs that were unwieldy for the small, agile, and less-deep-pocketed.&lt;/p&gt;  &lt;p&gt;When the post-dot-com nuclear winter set in, small companies had no money to pay for any of that, and we got LAMP, Agile, TDD, REST, etc. Opposition to OO, which had been strong in many quarters, suddenly faded as OO was no longer identified (rightly or not) with certain problematic processes. Ironically, many new OO &lt;em&gt;language&lt;/em&gt; fans had been ignoring the lightweight, free (speech and beer) &lt;em&gt;processes&lt;/em&gt; that some OO advocates had been producing for years.&lt;/p&gt;  &lt;p&gt;These have all proven to be useful tools and techniques and have created whole companies and enormous value ... but somewhere along the line, instead of being &lt;em&gt;in favor of these tools and techniques because in some cases they produced better outcomes,&lt;/em&gt; either the leaders or the converts started thinking &lt;em&gt;they were the rebels against anything enterprise, strongly typed, thoroughly analyzed, designed and well tooled.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;This shift in attitudes does not help the industry ... nor even the clever consultants who lead the charge, deprecating last year's trend for a new one which they just happen to have written a book about.&lt;/p&gt;  &lt;p&gt;We desperately need a broader perspective that integrates all of these pieces. There are things manually-written tests just won't do -- tools like &lt;a href="http://skipmeamadeus.blogspot.com/2008/11/microsoft-pex-moves-needle-bigtime-on.html"&gt;Pex&lt;/a&gt; can help immensely, even if (or because... )they are from a big company.&lt;/p&gt;  &lt;p&gt;Analysis and design are not bad words, while Agile can get dangerously close to simply surrendering to the pounding waves of change (and laughing at goals all the way to the bank) rather than building against the tide, and trying manage to a real outcome on a real budget.&lt;/p&gt;  &lt;p&gt;Static languages can get hideously verbose for cases with functor-like behavior (Java and C# [pre-3.0], I'm looking at you). At the same time, go talk to some ActionScript developers -- who have had dynamic and functional for years -- and you'll see an amazing appreciation for the optional strict typing and interfaces in AS3.&lt;/p&gt;  &lt;p&gt;REST is great, but in playing at dynamic, it turns out to be rather like C -- it's as dynamic as the strings you pipe into the compiler, and no more. Absent proper metadata, it cannot reflect and self-bind, so it sacrifices features that dynamic language developers love in their day-to-day coding.&lt;/p&gt;  &lt;p&gt;Ironically, most of the critical elements of this &amp;quot;movement&amp;quot; -- along with open source -- are being subsumed into the big enterprise software companies at a prodigious pace. Sun owns MySQL and halfway owns JRuby; Java servers may serve more Rails apps than Mongrel/Ebb/Thin/etc. soon, Microsoft is all over TDD, IronRuby, IronPython...&lt;/p&gt;  &lt;p&gt;I suppose the sort of tribalizing we see here is at least partly inevitable in any field. But it would serve the entire industry if that &amp;quot;part&amp;quot; could be made as small as reasonably possible. As a young industry with a poor track record and few rules, we ought to be more interested in better software outcomes than in being rebellious.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-2581655423450677991?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/2581655423450677991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=2581655423450677991' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2581655423450677991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2581655423450677991'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/11/software-discipline-tribalism.html' title='Software Discipline Tribalism'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-788068021273735290</id><published>2008-11-20T17:14:00.001-08:00</published><updated>2008-11-20T17:14:06.033-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='process'/><category scheme='http://www.blogger.com/atom/ns#' term='trends'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Microsoft Pex Moves the Needle Bigtime on Software Testing and Correctness</title><content type='html'>&lt;p&gt;Over two years ago, I wrote about how &lt;a href="http://skipmeamadeus.blogspot.com/2006/09/what-exactly-are-you-testing-anyway.html"&gt;neither the assurances of static compiler technology nor the ardent enthusiasm and discipline of TDD (and its offshoots) represent major headway&lt;/a&gt; against the difficulty and complexity of large software projects.&lt;/p&gt;  &lt;p&gt;At the time, this issue came up in the context of static languages versus dynamic languages. There still exists a political issue, although today it is more transparently about different organizations and their view of the computing business. I will revisit the successor debate in my next post. &lt;/p&gt;  &lt;p&gt;For now, however, I want to talk about a tool. In my post of two years ago, I suggested that significantly better analysis tools would be needed in order to make real progress, regardless of your opinion languages.&lt;/p&gt;  &lt;p&gt;So I've been excited to see the latest tools from Microsoft Research fast-tracking their way into product releases -- tools which can really move the ball downfield as far as software quality, testing, productivity, and economy.&lt;/p&gt;  &lt;p&gt;The most significant of these is called &lt;a href="http://research.microsoft.com/pex/wiki/book.html"&gt;Pex, short for Program Explorer&lt;/a&gt;. Pex is a tool that analyses code and automatically creates test suites with high code coverage. By high coverage, it attempts to cover &lt;em&gt;every branch&lt;/em&gt; in the code and -- since throwing exceptions or failing assertions or contracts count as branches -- it will automatically attempt to determine all of the conditions which can generate these occurrences.&lt;/p&gt;  &lt;p&gt;Let me say that again: Pex will attempt to construct a set of (real, code, editable) unit tests that cover every intentional logic flow in your methods, &lt;em&gt;as well as&lt;/em&gt; any exceptions, assertion failures, or contract failures, even ones you did not code in yourself (for example, any runtime-style error like Null Pointer or Division by Zero) or which seem like &amp;quot;impossible-to-break trivial sanity checks&amp;quot; (e.g. x = 1; AssertNotEqual(x, 0))&lt;/p&gt;  &lt;p&gt;Moreover, Pex does not randomly generate input values, cover all input ranges, or search just for generic edge cases (e.g., MAX_INT). Instead, it takes a complex theoretical approach called &amp;quot;&lt;a href="http://en.wikipedia.org/wiki/Abstract_interpretation"&gt;abstract interpretation&lt;/a&gt;&amp;quot; coupled with a SMT (&lt;a href="http://en.wikipedia.org/wiki/Satisfiability_Modulo_Theories"&gt;satisfiability modulo theories&lt;/a&gt;) constraint solver to explore the space of code routes as it runs the code and derives new, &lt;em&gt;significant&lt;/em&gt; inputs.&lt;/p&gt;  &lt;p&gt;In addition, &lt;em&gt;so far as I can understand from the materials I've seen, Pex's runtime-based (via IL) analysis means that it should work equally well on dynamic languages as on static ones&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;To get an idea of how this might work, have a look at &lt;a href="http://blogs.msdn.com/nikolait/archive/2008/06/04/fun-with-the-resourcereader.aspx"&gt;this article showing the use of Pex to analyze a method (in the .Net base class library) which takes an arbitrary stream as input&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;For those of you who are inherently skeptical of anything Microsoft -- or anything that sounds like a &amp;quot;big tool&amp;quot; or &amp;quot;big process&amp;quot; from a &amp;quot;big company&amp;quot; -- I'll have more for you in my next article. But for now keep in mind that if Microsoft can show that the approach can work and is productive, user friendly, and fun (it is), then certainly we will see similar open source tools. After all, it appears the same exact approach could work for any environment with a bytecode-based runtime.&lt;/p&gt;  &lt;p&gt;Last, I do recognize that even if this tool works beyond our wildest expectations, it still has significant limitations including &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;reaching its full potential requires clarity of business requirements in the code, which in turn require human decision making and input and &lt;/li&gt;    &lt;li&gt;for reasons of implementation and sheer complexity this tool operates at the module level, so you can't point it at one end of your giant SOA infrastructure, go home for the weekend, and expect it to produce a report of all the failure branches all over your company.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;That said, here are a couple more great links:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&amp;quot;&lt;a href="http://channel9.msdn.com/pdc2008/TL51/"&gt;Contract Checking and Automated Test Generation with Pex&lt;/a&gt;&amp;quot; from PDC 2008&lt;/li&gt;    &lt;li&gt;&amp;quot;&lt;a href="http://msdn.microsoft.com/en-us/devlabs/cc950525.aspx"&gt;Pex: Automated White Box Testing for .NET&lt;/a&gt;&amp;quot; on MS DevLabs&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/26260493-788068021273735290?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/788068021273735290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=788068021273735290' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/788068021273735290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/788068021273735290'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/11/microsoft-pex-moves-needle-bigtime-on.html' title='Microsoft Pex Moves the Needle Bigtime on Software Testing and Correctness'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-2566155592027949051</id><published>2008-11-12T21:39:00.000-08:00</published><updated>2008-11-12T22:01:36.325-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>BizSpark Shows Wider Microsoft View Around SaaS Innovation</title><content type='html'>Depsite a lot of reporting about Microsoft's new BizSpark program, one interesting bit wasn't featured in the coverage:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Microsoft's &lt;a href="http://www.empowerforisv.com/"&gt;existing nearly-free-licenses-to-help-developers-get-going-on-the-platform program&lt;/a&gt; has been around for a while and has always required that a company plan to distribute a "&lt;a href="http://www.empowerforisv.com/pages/qualify.aspx"&gt;packaged and resalable&lt;/a&gt;" application targeting a Microsoft platform. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It could be an app on Vista or Server, an Office add-in, a Windows Mobile app, or one of a few other options. But it had to be packaged, at least in the sense that it was digitally bundled into an installable set of files even if it never got put in a physical cardboard box.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This requirement made some sense as far as promoting the client OS ecosystem but it disqualified any online offering. An online service had to work around the restriction: for example, by offering a small Windows Mobile app that has some interaction with the service.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But the language makes a statement -- Empower was largely about helping ISVs new or old develop apps on the platform, thus making the client platform stronger. Nevermind that an online service that targets browsers and the iPhone might lead to Server license sales later.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;BizSpark, on the other hand, takes another approach. There is much talk of online solutions -- the program is meant to dovetail with &lt;a href="http://www.microsoftstartupzone.com/BizSpark/Pages/FAQ.aspx#q13"&gt;hosting providers&lt;/a&gt; (or Microsoft's Azure platform) to offer the server-side muscle a solution will need after its incubation period. The program is aimed exclusively at new companies -- if a firm has been in business 3 years or more, it does not qualify.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Both programs exist today and will presumably continue. So I'm not suggesting there is a big move from one view of the world to another. But there does seem to be a conscious broadening of horizons in terms of seeing where innovation is taking place and how Microsoft can be part of it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&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/26260493-2566155592027949051?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/2566155592027949051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=2566155592027949051' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2566155592027949051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2566155592027949051'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/11/bizspark-shows-wider-microsoft-view.html' title='BizSpark Shows Wider Microsoft View Around SaaS Innovation'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-8934951959444466798</id><published>2008-11-11T15:08:00.001-08:00</published><updated>2008-11-11T15:08:43.905-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><category scheme='http://www.blogger.com/atom/ns#' term='vc'/><title type='text'>On the Knocking at the Gate, VCs, and a Math Problem</title><content type='html'>&lt;p&gt;&lt;a href="http://www.gutenberg.org/catalog/world/readfile?pageno=2&amp;amp;fk_files=44839"&gt;Bang!&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This economy may be the wakeup to VCs (and CEOs alike) that their future isn't what they want. But the murder happened years ago, and the &amp;quot;I don't want yes men, but strangely I don't listen to much else'&amp;quot; hivemind has just woken up.&lt;/p&gt;  &lt;p&gt;The IPO window isn't shutting or recently shut -- it never re-opened after the dot-com meltdown. A handful of IPOs (including a Google) doesn't make a &amp;quot;window.&amp;quot; Whether you blame SarbOx, or a trend of investing in companies with a wink-wink style of sustainable competitive advantage, that could not produce high enough valuations to warrant a public offering, there were to be few IPOs.&lt;/p&gt;  &lt;p&gt;The startup and VC world started getting this idea a couple of years ago, when they realized that at the smaller exit values (for the exits that were to be had), in order to get a high multiple return, the initial investments would have to be so small that the venture fund couldn't afford to service the quantity of investments. That is, the investment would have to be too small to be worth the firm's time. Uh-oh. A few innovative programs came out of that realization. But for the most part everyone acted like this was just a bad dream.&lt;/p&gt;  &lt;p&gt;Moreover, the vaunted &amp;quot;get acquired&amp;quot; exit that appeared to be the next-best exit option, has been rather overrated. The real acquisition numbers for the most part are not what investors (or founders) would like. Not to mention the acquisition could well mean the end of the road for the business (Google is the most famous for this) which is the opposite of what founders should want, and so produces some strange incentives. Yes, &lt;em&gt;YouTube&lt;/em&gt; and &lt;em&gt;Skype&lt;/em&gt; ... but the curve falls off quickly.&lt;/p&gt;  &lt;p&gt;The bad news is that this pile of trouble has been sitting in the corner stinking up the room for years.&lt;/p&gt;  &lt;p&gt;The good news is that it's not a sudden crisis, and may well be correctable by VCs who are willing to, um, take some risk (this means getting out of their comfort zone in terms of rituals and assumptions, or expanding said zone) which is, ironically, what they are supposed to be doing for their investors.&lt;/p&gt;  &lt;p&gt;But what about all of that advertising? Isn't there money in all of those targeted ads? Or, at least, wasn't there supposed to be until the advertising market started downhill?&lt;/p&gt;  &lt;p&gt;In the short term, maybe ... but in the long term, the model doesn't work at the macro level and here is some math that suggests why.&lt;/p&gt;  &lt;p&gt;Showing ads is kind of like printing money. You can show as many as you like up to a function of your pageviews. In order for the ad-economy to grow, the attention economy has to grow. That is, the aggregate amount of attention-hours spent against ad-supported pages needs to grow. Ok, there's definitely evidence for that (GMail, etc.) &lt;/p&gt;  &lt;p&gt;But what about the ratio of the ad growth rates to attention growth? Attention growth has real-world limits (number of people, amount of time, ad-blockers, desensitization to ads) while theoretical ad supply does not. The limit on attention growth does not limit real-world ad growth. For example, if I view 50 GMail pages where I used to view 15, it's entirely possible that the same amount of attention is now divided across more ads -- or that the total spent attention is even smaller.&lt;/p&gt;  &lt;p&gt;In the long run, the ad-value growth is smaller than the application-value growth. So the deficit of uncaptured value for businesses relying on ad revenue grows larger over time.&lt;/p&gt;  &lt;p&gt;We can check this analysis by looking at the numbers from another point of view. Start with the raw resource itself -- a piece of a data center that includes a unit of compute power, storage, bandwidth, and hosting.&lt;/p&gt;  &lt;p&gt;Hosting and displaying ads is &lt;em&gt;relatively&lt;/em&gt; less expensive (in units of the resource) than hosting application functionality. So the very resource which makes the ad-supported model plausible will supports growth on the ad side that is at least as strong as growth in hosted functionality, which is the attention-harnessing product. That is, the resource availability supports growing the supply of units for spending attention as fast or faster than the supply of units for capturing attention. Again, over time, in the aggregate, more ads are powering less features. The value of each ad goes down.&lt;/p&gt;  &lt;p&gt;This has nothing to do with the overall economy, consumer spending, etc. It's simply a side-effect of the coupling between the monetization mechanism and the product.&lt;/p&gt;  &lt;p&gt;If, at the same time, the &amp;quot;real-world&amp;quot; spending that is driven by even successful ads is flat or in decline, you have an even bigger problem.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-8934951959444466798?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/8934951959444466798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=8934951959444466798' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8934951959444466798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8934951959444466798'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/11/on-knocking-at-gate-vcs-and-math.html' title='On the Knocking at the Gate, VCs, and a Math Problem'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-2165078864331342039</id><published>2008-11-06T15:00:00.001-08:00</published><updated>2008-11-06T15:00:40.205-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Windows 7 Puts on a Good Show</title><content type='html'>&lt;p&gt;I took Windows 7 for a quick test drive yesterday. My main goal was to see whether the performance would be so brutally bad as to make me relive my Vista experience. &lt;/p&gt;  &lt;p&gt;For those who haven't read my Vista posts, the short version is: early Microsoft developer releases had unbearably bad performance; Microsoft made excuses (&amp;quot;debug build&amp;quot; etc.); turns out the RTM was nearly as bad. I made an honest attempt to run Vista but, as a developer, I just couldn't bear the excruciating waiting, knowing that I could be screaming along in XP. I run XP (or Server) to this day for my development.&lt;/p&gt;  &lt;p&gt;Just the Vista-like look of the early Windows 7 bits made me anxious -- I wasn't expecting a lot. I set it up in a VMWare VM with 768 MB of RAM and no VMWare tools (= minimal video perf) in order to torture the OS. Naturally, things would be better running on the metal in a new machine designed for Win 7.&lt;/p&gt;  &lt;p&gt;Install was very fast and seamless. I could see a difference right away in perf: even the shell in Vista runs slow, and this one was snappy. I saw the new-and-removed UAC, and I liked.&lt;/p&gt;  &lt;p&gt;To add some more load, I installed Visual Studio 2008, which is a fairly heavy app. In addition, it was Visual Studio that had made me give up on Vista in 2007, so I thought it was fitting to try it again.&lt;/p&gt;  &lt;p&gt;Inside Visual Studio, I opened a WPF windows project. Mucked around with the GUI editors, built, debugged ... and it cruised along nicely in the VM. Next, I set up an ASP.Net web project, and got that going in debug mode with the integrated server. Finally I started to feel some minor slowdown -- but it appeared I was running out of RAM with my 768MB VM. This was not a huge shock, since my install of Win 7 was consuming about 450MB RAM at idle, with no user apps running.&lt;/p&gt;  &lt;p&gt;The 450MB RAM usage is a little disturbing, but, hey, even fast RAM is cheap. And my Server 2008 setup was idling at about 350MB with few services enabled, so I suppose this usage is to expected.&lt;/p&gt;  &lt;p&gt;Overall, I was very happy with my Win 7 preview. I could see myself actually using this as my OS and not cursing all the time, which was a pleasant surprise.&lt;/p&gt;  &lt;p&gt;The big unanswered, and unanswerable, question is: how similar will this experience be to the final RTM of Windows 7?&lt;/p&gt;  &lt;p&gt;On one hand, Microsoft might have released this preview &amp;quot;stripped down&amp;quot; -- either to make it run better on today's hardware, or just because the additional components with which it will ship are not yet ready for public consumption. In that case, future builds might be slower. &lt;/p&gt;  &lt;p&gt;On the other hand, still smarting from Vista, Microsoft might adjust the previews in the opposite direction -- a sort of &amp;quot;under-promise, over-deliver&amp;quot; thing -- lest anyone see a later build and say anything except &amp;quot;wow this is fast.&amp;quot;&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-2165078864331342039?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/2165078864331342039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=2165078864331342039' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2165078864331342039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2165078864331342039'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/11/windows-7-puts-on-good-show.html' title='Windows 7 Puts on a Good Show'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-5997702112841510613</id><published>2008-11-04T15:51:00.001-08:00</published><updated>2008-11-04T15:51:38.153-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='process'/><title type='text'>On BASIC and JavaScript and 25 Years of Coding</title><content type='html'>&lt;p&gt;I realized I've been putting programs together on a regular basis for 25 years now. I distinctly remember some of the earliest programs I worked on, around October 1983, and the fourth-grade teacher who let me get away with a lot more access to my school's computers than was the norm. When I somehow convinced may parents later that year to get me a machine ... things got even more out of control.&lt;/p&gt;  &lt;p&gt;I worked with a bunch of the classic 80s &amp;quot;home computers&amp;quot;: Tandy &lt;a href="http://en.wikipedia.org/wiki/Color_Computer"&gt;Color Computers&lt;/a&gt; (1, 2, and 3) and &lt;a href="http://en.wikipedia.org/wiki/Apple_ii"&gt;Apple II&lt;/a&gt; (and II+, IIe, IIc, IIgs, ...), and some not-so-classics like a CP/M machine that ran via an add-in board (with its own Z80) &lt;a href="http://www.mylinuxisp.com/~jdbaker/oldsite/SmallSys/AppleCPM.html"&gt;inside an Apple&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The languages and tools were primitive, performance was always a concern, most serious programs required at least some assembly-language component for speed and hardware access and, even if they didn't, compatibility across computer types was nearly impossible.&lt;/p&gt;  &lt;p&gt;A lot like programming in JavaScript nowadays (I guess replace assembly language and hardware with native browser plug-in [e.g., gears] and OS APIs).&lt;/p&gt;  &lt;p&gt;I could flog the 80s-BASIC / JavaScript analogy to death, but (1) if you read this blog, you likely can fill in the blanks yourself and (2) my goal isn't to bash JavaScript, which would be a side-effect of the drawn-out analogy.&lt;/p&gt;  &lt;p&gt;What I find interesting is the question of why these things seem similar, and I have a hypothesis.&lt;/p&gt;  &lt;p&gt;I have noticed that many members of my peer group, who started programming at a young age on these early microcomputers, have an affinity for tools, structured languages, and to a lesser extent models and processes. I wonder whether this affinity is not some kind of reaction against the difficulties of programming these early microcomputers in what can only be called a forced-agile approach, where debugging and testing took an inordinate proportion of the time, &amp;quot;releases&amp;quot; were frequent, and where the only evidence of working software was ... working software.&lt;/p&gt;  &lt;p&gt;I will be the first to admit I am quite conscious that my experiences in the years before the C/DOS/Windows/C++/Mac era make me appreciative of and (depending upon your perspective) perhaps overly-tolerant of -- process, tools, models, definitions, infrastructure, etc. as a kind of reaction.&lt;/p&gt;  &lt;p&gt;Let's stretch the hypothesis a little further: Gen-Y, who missed this era in computing (I would say it really ended between 1987 and 1989) will have typically had their first experience with coding in a structured, well documented, &amp;quot;standardized&amp;quot; ecosystem -- whether that was C on DOS, or Pascal on a Mac, or for those still younger perhaps C++ on Windows or even Java on Linux.&lt;/p&gt;  &lt;p&gt;Depending on their age today, and the age at which they first took up coding, this generation had compilation, linking, structured programming, OS APIs, perhaps even OO and/or some process from the beginning. For them, it is possible to imagine, the overhead of the structure and process was something to rebel against, or at least a headache worth questioning.&lt;/p&gt;  &lt;p&gt;Hence their enthusiasm for interpreted languages and agile approaches, and the general disdain for processes with formal artifacts, or extensive before-the-fact specs.&lt;/p&gt;  &lt;p&gt;That's the hypothesis.&lt;/p&gt;  &lt;p&gt;A simple study could validate at least the correlation -- by gathering data on age, age when someone started coding, the language/machine/environment they were using, perceived benefits or disadvantages in those years, and their interests today. And even the bare correlation data would be fascinating.&lt;/p&gt;  &lt;p&gt;Considering that these approaches are often &amp;quot;best fits&amp;quot; for rather different kinds of development projects, knowing what sort of prejudices (&amp;quot;everything looks like a nail&amp;quot;) individuals bring to the debate might add a lot of context to decisions about how to make software projects more successful, and how to compose the right teams and resources to execute them.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-5997702112841510613?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/5997702112841510613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=5997702112841510613' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/5997702112841510613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/5997702112841510613'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/11/on-basic-and-javascript-and-25-years-of.html' title='On BASIC and JavaScript and 25 Years of Coding'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-4234999309506619478</id><published>2008-10-31T16:34:00.001-07:00</published><updated>2008-10-31T16:34:54.776-07:00</updated><title type='text'>Great Business Model: Pseudo-Business, Pseudo-Freemium Online Software</title><content type='html'>&lt;p&gt;I can't come up with a better name for this model, but, not to worry, you'll recognize it right away. In this period of renewed discussion of &amp;quot;how to make money,&amp;quot; I'm trotting out my favorite -- perhaps the best one for a startup today.&lt;/p&gt;  &lt;p&gt;A couple of examples are &lt;a href="http://www.yousendit.com/"&gt;YouSendIt.com&lt;/a&gt; and &lt;a href="http://web.archive.org/web/20060106053455/www.jot.com/"&gt;JotSpot.com (prior to its acquisition by Google)&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Let's take the explanation in two parts. Pseudo-Business Software is software used to conduct business, but which is not necessarily sold directly to businesses. Put another way, it is priced and and offered in such a way that individuals and small work groups inside of businesses can buy and use the software directly, without larger purchasing approval and without IT department approval. It offers a businesslike function so that it is easy to justify on an individual expense report -- and it's cheap enough that some folks may happily pay for it themselves just to be more effective at work, the same way they might shell out $25 for a &lt;a href="http://www.dayrunner.com/webapp/wcs/stores/servlet/product3_10053_10004_125770_-1_false_10053"&gt;DayRunner&lt;/a&gt; or $50 for a nice portfolio without thinking twice.&lt;/p&gt;  &lt;p&gt;YouSendIt fits this model: it offers an oft-needed business function -- transferring large files. It lets employees bypass the tortuous and unwinnable debates with IT over why and whether attachments fail, how to share files with others, etc. Pay a few bucks and if you can get to the web at work, you're good to go. Easy to expense or even pay for on your own. It's enterprise software sold cheaply and one user at a time.&lt;/p&gt;  &lt;p&gt;JotSpot (now Google Sites) -- in its original freemium wiki form -- fits as well. Easy to justify as project groups scale and each monthly increment is a small charge. Instantly bypass all the broken collaboration infrastructure your company can't get right.&lt;/p&gt;  &lt;p&gt;At the same time, these products are Pseudo-Freemium software. If freemium is software that offers one level of functionality or resources for free, with more available for a price, then pseudo-freemium is like freemium &lt;em&gt;except that the free version is not terrifically usable as a business solution except to make the customer comfortable with the product&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;YouSendIt has, and JotSpot had, free versions. Unlike many consumer freemium use cases where many users happily use the free version and never need to upgrade, these pseudo-freemium products are were specified so as to be more like a mini-free-trial. &lt;/p&gt;  &lt;p&gt;IIRC, the JotSpot free account was limited to 5 users and 20 wiki pages, while YouSendIt free limits the file size to just shy of what I always seemed to need. There are countless other examples, ranging from single-user hosted source code services to online storage that offers only minimal free space.&lt;/p&gt;  &lt;p&gt;The free version gives you the &amp;quot;warm fuzzy&amp;quot; of a free never-goes-away account and lets you see that the product works as advertised and won't embarrass you with some crazy or unprofessional aspect when you're asking your boss to sign for it on your expense report. These have always been the easiest-sell, no-brainer for-pay services that I've subscribed to. In general, they appeal to that certain purchasing area in people's minds -- next to the planners, a beer in the airport restaurant, or a nice tie -- as modest costs of being a professional that are either expensable or should just be paid for oneself.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-4234999309506619478?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/4234999309506619478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=4234999309506619478' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4234999309506619478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4234999309506619478'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/10/great-business-model-pseudo-business.html' title='Great Business Model: Pseudo-Business, Pseudo-Freemium Online Software'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-2061885327761346376</id><published>2008-10-27T15:27:00.001-07:00</published><updated>2008-10-27T15:27:24.707-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Azure -- and the Other Clouds Players -- Should Lean Forward</title><content type='html'>&lt;p&gt;Since I covered Azure &lt;a href="http://skipmeamadeus.blogspot.com/2008/10/what-in-microsoft-cloud-os.html"&gt;pretty well two weeks ago&lt;/a&gt;, there's not much to add except the name and the open question of which parts of the platform can be run in-house, on AMIs, or anywhere outside of MSFT data centers (via a hosting partner). And Microsoft hasn't really addressed that either (I have questions in at PDC) so the answer appears to be &amp;quot;not yet, stay tuned.&amp;quot;&lt;/p&gt;  &lt;p&gt;Now that the semi-news is out of the way, I am a little disappointed that all the cloud players haven't leaned in more, in terms of providing added-value capabilities beyond scaling. Elastic scaling &lt;em&gt;is &lt;/em&gt;valuable, but it's a tradeoff. You are paying significantly more to be in the cloud than you would be to host equivalent compute power on own machines, or on VMs or app server instances at a consolidated host. &lt;/p&gt;  &lt;p&gt;If you have reasonable projections about your capacity, then you're wasting money on the elasticity premium. You do get some nice operations/management capabilities ... but for apps that really need them, you still need to bring a bunch of your own, and you're taking on someone else's ops risks too.&lt;/p&gt;  &lt;p&gt;For some businesses, these costs make sense. Here are some value-added features that would make the price persuasive for more people outside that core group:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Relational and transaction capabilities.&lt;/strong&gt; Microsoft does get the prize here, as they are the only ones &lt;a href="http://www.microsoft.com/azure/faq.mspx#sql"&gt;offering this right now&lt;/a&gt;. Distributed transactions and even joins are expensive. So charge as appropriate. It's a meaningful step beyond the $/VM-CPU-cycle model that dominates now.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Reverse AJAX (comet and friends).&lt;/strong&gt; Here is a feature that is easy to describe, tricky to get right &lt;em&gt;and&lt;/em&gt; multiplies the value of server resource elasticity. It's a perfect scenario for an established player to sell on-demand resources, and could be a differentiator in a field sorely lacking qualitative differentiation.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;XMPP and XMPP/BOSH (leveraging the reverse AJAX capability above).&lt;/strong&gt; XMPP is clearly not just for IM anymore, and may evolve into the next generation transport for &amp;quot;web&amp;quot; services. Not to mention, having a big opinionated player involved may help at the next layer in the stack, namely how a payload+operation gets represented over XMPP for interop.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Those are just a couple of ideas that spring to mind -- I'm sure there are much better ones out there. To make the cloud more of a &amp;quot;pain killer&amp;quot; than a &amp;quot;vitamin&amp;quot; for more people, some new hard-to-DIY features are the way to go.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-2061885327761346376?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/2061885327761346376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=2061885327761346376' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2061885327761346376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2061885327761346376'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/10/azure-and-other-clouds-players-should.html' title='Azure -- and the Other Clouds Players -- Should Lean Forward'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-1510867882464706578</id><published>2008-10-20T13:51:00.001-07:00</published><updated>2008-10-20T13:51:53.568-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='process'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='refactoring'/><category scheme='http://www.blogger.com/atom/ns#' term='web applications'/><title type='text'>hquery: Separate data from HTML ... without templates!</title><content type='html'>&lt;p&gt;Out of a bunch of cool presentation at least week's San Francisco &lt;a href="http://www.meetup.com/sfruby/"&gt;Ruby meetup&lt;/a&gt;, my favorite was Choon Keat's demo of a working implementation of his &lt;a href="http://blog.choonkeat.com/weblog/2008/10/hquery-an-unobtrusive-server-script-implementation.html"&gt;hquey project&lt;/a&gt; -- a lib that lets you use Ruby, CSS, and jQuery patterns to bind data to views ... in the DOM, on the server side.&lt;/p&gt;  &lt;p&gt;He had previously &lt;a href="http://blog.choonkeat.com/weblog/2008/03/no-template-is.html"&gt;blogged about the motivation&lt;/a&gt; -- the core idea is that 10-15 years into the web application era, we are largely using template languages for integrating data into HTML. We've come a long way toward avoiding procedural code in our templates, enforcing MVC, etc. But aside from collectively agreeing to avoid a set of 'worst practices,' we're still inserting data into HTML in a manner reminiscent of 1998.&lt;/p&gt;  &lt;p&gt;For well designed pages, with CSS classes and/or IDs, it should be possible to specify the data binding using CSS on the server, without any special binding tokens or markup. hquery does just that. So a designer can create full mockups with dummy data, and hquery can swap in the live data &lt;/p&gt;  &lt;p&gt;The current demos and syntax might be touch verbose, but this is just an intial proof-of-concept and Ruby lends itself to easy re-arrangement an API if you need to.&lt;/p&gt;  &lt;p&gt;This sort of radical division of dynamic data from HTML, while still using standards and &lt;em&gt;not&lt;/em&gt; introducing yet-another-meta-templating-scheme reminds me a little of the &lt;a href="http://www.rgagnon.com/javadetails/java-0407.html"&gt;old idea of using XML+XSLT to create pages&lt;/a&gt;. We all know how popular that ended up.&lt;/p&gt;  &lt;p&gt;The hquery approach seems about fifty times more accessible to the present community of developers ... so the question is: how do we make this more popular and build community interest?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-1510867882464706578?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/1510867882464706578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=1510867882464706578' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1510867882464706578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1510867882464706578'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/10/hquery-separate-data-from-html-without.html' title='hquery: Separate data from HTML ... without templates!'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-57362808274005369</id><published>2008-10-16T15:22:00.001-07:00</published><updated>2008-10-16T15:22:02.241-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Listen to Early Windows 7 Feedback, Even From Developers</title><content type='html'>&lt;p&gt;At the upcoming &lt;a href="http://microsoftpdc.com/"&gt;2008 Professional Developers Conference&lt;/a&gt;, Microsoft will be &lt;a href="http://blogs.msdn.com/pdc/archive/2008/09/24/unveiling-windows-7-to-the-world.aspx"&gt;showing Windows 7&lt;/a&gt; to developers. &lt;/p&gt;  &lt;p&gt;My bet is that the &lt;a href="http://channel9.msdn.com/posts/Dan/Countdown-to-PDC-2008-This-is-the-Software--Services-PDC-Plus-a-Hard-Drive-Chock-Full-oBits-is-a-PDC/"&gt;160GB portable hard drives&lt;/a&gt; they are handing out to distribute preview bits will actually contain Virtual PC images of Windows 7 in various states or configurations. Such a setup will be more convenient to try, even if it does narrow what aspects of the OS can be seen.&lt;/p&gt;  &lt;p&gt;In any case, Microsoft would do well to pay attention to the feedback it receives from these developers.&lt;/p&gt;  &lt;p&gt;We know all of the reasons why geeks can make poor proxies for &amp;quot;real end users.&amp;quot; Nonetheless, I recall the 2005 PDC, when Microsoft gave us the latest beta of Windows Vista. A chorus of complaints arose from many who tried the new OS. It's way too slow; it doesn't work with the hardware we have; we can't explain the 10-odd different SKUs to our customers. &lt;/p&gt;  &lt;p&gt;Do these sound familiar? They should, because they're uncannily similar to the problems &amp;quot;real end users&amp;quot; found -- and continue to find -- with Vista.&lt;/p&gt;  &lt;p&gt;At the time, the 'softies at the conference, who are generally open, approachable, and humble with regard to technical matters, didn't want to hear these complaints about Vista. I was rebuffed more than once: the SKUs haven't been ironed out yet; the beta build is a checked debug build, so of course it's slower. Well, maybe. But I found it to be little slower than the release build on the same hardware. Either way it was unusable.&lt;/p&gt;  &lt;p&gt;I think everyone's learned from the Vista experience -- and that includes Microsoft, ISVs, consumers, PC builders ... and Apple.&lt;/p&gt;  &lt;p&gt;Let's try it differently this time around, starting with feedback from PDC.&lt;/p&gt;  &lt;p&gt;One last thing: it would make sense to release the Windows 7 preview to the general public at the same time. Why? It'll be on the file-sharing networks instantly, where there is a greater chance of folks downloading a trojaned image, etc. So it will help everyone to have an official distro from Redmond instead.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-57362808274005369?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/57362808274005369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=57362808274005369' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/57362808274005369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/57362808274005369'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/10/listen-to-early-windows-7-feedback-even.html' title='Listen to Early Windows 7 Feedback, Even From Developers'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-2579482750609919225</id><published>2008-10-13T18:20:00.001-07:00</published><updated>2008-10-13T18:20:38.645-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='virtualization'/><category scheme='http://www.blogger.com/atom/ns#' term='web services'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>What's In Microsoft's "Strata"[?] Cloud OS</title><content type='html'>&lt;p&gt;(Probably)&lt;/p&gt;  &lt;p&gt;Just for fun, let's do a little educated speculation on Microsoft's &amp;quot;cloud os&amp;quot; initiative. It's not too hard to make some good guesses -- Microsoft's existing and unreleased products telegraph a lot about what they are likely assembling. For example, the semi-well-known &amp;quot;COOL&amp;quot; and Visual J++/WFC gave you most of what needed to know to imagine the real .Net platform.&lt;/p&gt;  &lt;p&gt;There are lots of pieces out there -- certainly enough to comprise a pretty interesting cloud stack and application model.&lt;/p&gt;  &lt;p&gt;Since Microsoft -- and platform vendors in general -- like to go all out, let's imagine this stack reaching from real hardware up through virtualized hardware up to application servers and then to client components and the end-user's browser or alternative on the other end.&lt;/p&gt;  &lt;p&gt;Let's start in the middle of this stack and work our way out.&lt;/p&gt;  &lt;p&gt;What would the &amp;quot;middle&amp;quot; look like? Well, what makes a hosted ASP.net account different from a cloud platform? Some answers: storage and bandwidth may not be elastic; clustering the app is neither automatic nor declarative, but requires programmatic and operational work; the database is typically a SQL Server instance (perhaps a mirrored failover cluster) with all of the usual capabilities and scaling constraints.&lt;/p&gt;  &lt;p&gt;So imagine a hosted ASP.net account with a few changes that address these limitations. &lt;/p&gt;  &lt;p&gt;First, swap in an alternative implementation of sessions, that supports clustering, proper caching, etc., with zero config. Add a lint-like tool to warn about code that isn't properly stateless. And an asynchronous worker service for any long-running, background, or scheduled tasks that could be &amp;quot;fudged&amp;quot; with threads or events in a controlled Windows Server environment, but won't work that way in the cloud. &lt;/p&gt;  &lt;p&gt;Next, replace the datastore with something like ... &lt;a href="http://www.microsoft.com/sql/dataservices/default.mspx"&gt;SSDS&lt;/a&gt;, and a LINQ provider so that in many cases code won't need to be changed at all. The interesting thing about SSDS, of course, is that unlike other non-relational cloud datastores, Microsoft has said the roadmap will offer more relational capability (subject to constraints, no pun intended). So ASP.net apps that need real relational behavior &lt;em&gt;might&lt;/em&gt; have an easier time moving to this new datastore.&lt;/p&gt;  &lt;p&gt;So, without much new, we have a flavor of ASP.net that is more cloud-centric and less server-centric. &lt;/p&gt;  &lt;p&gt;Now on the hardware and VM end of the stack, bear in mind also that -- to add value and sell the Server product, as well as to service enterprises which would like cloud architecture but need parts of the &amp;quot;cloud&amp;quot; to stay inside the firewall -- the whole enchilada is likely to be available as a service (or its own SKU) on Windows Server. &lt;/p&gt;  &lt;p&gt;In fact, a number of Microsoft products related to &lt;a href="http://msdn.microsoft.com/en-us/library/ms379567(VS.80).aspx"&gt;modeling data centers&lt;/a&gt;, &lt;a href="http://www.microsoft.com/windowsserver2008/en/us/hyperv-faq.aspx"&gt;virtualization&lt;/a&gt;, and automated migration of services and machine &lt;a href="http://blogs.zdnet.com/microsoft/?p=1182"&gt;images&lt;/a&gt; suggests that a key thrust of the &amp;quot;cloud os&amp;quot; might be that a customer can easily move services from individual servers up to a private cloud implementation and on to one (or more -- perhaps an opportunity for the hosting partners) public cloud data centers... provided they are coded to conform to the API.&lt;/p&gt;  &lt;p&gt;ADO.Net Data Services (aka Astoria) already supports AtomPub, the format Microsoft is using or moving to for all of its Live services, so minimal wrappers (not to say minimal effort in the API design) could turn this into a platform API. A simple &lt;strong&gt;using&lt;/strong&gt; directive brings in a File object and API that works with Skydrive instead of My Documents.&lt;/p&gt;  &lt;p&gt;Last, look at the client end of things. Right now, we have ASP.net serving web pages, and we have web services for Silverlight clients. There is also a project (named &amp;quot;&lt;a href="http://livelabs.com/blog/volta-offline/"&gt;Volta&lt;/a&gt;&amp;quot;, and which has just recently gone offline while a &amp;quot;new version&amp;quot; is in the works) aimed at dynamic tier splitting and retargeting apps in terms of the client runtime. Hmmm... Sounds like a critical part of the front end of the cloud os stack.&lt;/p&gt;  &lt;p&gt;In order to provide a RIA experience via Silverlight (or even desktop experience for a &lt;a href="http://www.networkworld.com/community/node/33559"&gt;cloud-os edition of office&lt;/a&gt;), promote the client os product by offering a best-of-breed experience on Windows clients, and at the same time offer a legitimate cross-platform web-browser-consumable app, a piece like Volta is critical, and makes complete sense.&lt;/p&gt;  &lt;p&gt;Microsoft tends to hunt big game, and I doubt they are interested in a me-too web app environment. They really intend to offer a cloud os, allowing developers to code libraries and GUIs that are outside of the web paradigm. These bits can run as .Net on Windows ... as .Net in Silverlight on Mac or (one day) Linux ... and as Javascript apps in non-.Net-capable browsers. &lt;/p&gt;  &lt;p&gt;The big question in my mind is timing -- how far along are they on the supportable, RTM version of this stuff. Whether this is relevant -- or even becomes a reality -- will depend on how fast they can get this out of beta. &lt;/p&gt;  &lt;p&gt;It seems that when Microsoft is quite close to production with a platform they can grab enormous mindshare (recall the release of the .Net platform). If this is an alpha look, with no promised timeline, things are a lot more tenuous. If there is a 1.0 planned before mid 2009, this could make things interesting.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-2579482750609919225?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/2579482750609919225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=2579482750609919225' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2579482750609919225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2579482750609919225'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/10/what-in-microsoft-cloud-os.html' title='What&amp;#39;s In Microsoft&amp;#39;s &amp;quot;Strata&amp;quot;[?] Cloud OS'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-6213272947467494400</id><published>2008-10-12T18:21:00.001-07:00</published><updated>2008-10-12T18:21:10.565-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><title type='text'>Time for a Wireless Coverage Map that Shows Utilization, Not Just "3G"</title><content type='html'>&lt;p&gt;It's easy to get distracted with mobile protocol (HSDPA vs. EVDO) or &amp;quot;generational&amp;quot; system (GSM-3G vs. EDGE) speed claims. In fact, that's the most common conversation that mobile operators, hardware manufacturers, and customers have.&lt;/p&gt;  &lt;p&gt;But it's only a piece of the puzzle. The other big ones include latency (the time required to establish a connection and get the packets flowing) and congestion (the instantaneous demand for bandwidth relative to the current capacity in a location).&lt;/p&gt;  &lt;p&gt;Not to downplay the value of 3G+ data speeds, it is still instructive how well a &amp;quot;slow&amp;quot; connection can work when congestion is low, and how badly 3G can work when congestion is high.&lt;/p&gt;  &lt;p&gt;Apple iPhone customers have complained about the high congestion experience. The other day I had an interesting low congestion experience.&lt;/p&gt;  &lt;p&gt;I was in a corner of San Rafael where my phone could only negotiate GPRS -- but I had the air to myself. Subjectively, the browsing experience was better than a typical EDGE connection on the same hardware, and similar (for modest amounts of data) to the 3G experience.&lt;/p&gt;  &lt;p&gt;Demand on the network changes constantly as users do different things, and the effective capacity changes due to everything from weather to RF interference to upstream network congestion. So it's not easy for an operator to make &lt;em&gt;a priori&lt;/em&gt; statements about actual speeds or actual congestion ... hence they talk about the protocols they offer and their &amp;quot;optimal throughput.&amp;quot;&lt;/p&gt;  &lt;p&gt;But congestion/capacity issues are a first-order concern in many areas, so I propose some mechanism be created so that customers and operators can have an informed negotiation about service.&lt;/p&gt;  &lt;p&gt;I'd like to see a coverage map, for example, that doesn't just show &amp;quot;3G&amp;quot; areas in a certain color -- but also color codes the average real utilization over the past 90 days. Sort of like shopping for an airline ticket and looking at that column that shows &amp;quot;on-time percentage.&amp;quot; It lets a customer separate the hypothetical performance from what can actually be expected.&lt;/p&gt;  &lt;p&gt;That information would also motivate operators to invest in capacity and infrastructure where the demand is, rather than trying to extend that &amp;quot;patch of orange&amp;quot; on their coverage map to one more town for sales purposes.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-6213272947467494400?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/6213272947467494400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=6213272947467494400' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6213272947467494400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6213272947467494400'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/10/time-for-wireless-coverage-map-that.html' title='Time for a Wireless Coverage Map that Shows Utilization, Not Just &amp;quot;3G&amp;quot;'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-3918759571700216862</id><published>2008-10-08T21:44:00.001-07:00</published><updated>2008-10-08T21:44:45.639-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='process'/><category scheme='http://www.blogger.com/atom/ns#' term='organizations'/><title type='text'>Engineering Departments Should Take Their Medicine Too</title><content type='html'>&lt;p&gt;Without getting into gloomy predictions, it's clear a lot of companies will be feeling some pain soon, if they aren't already feeling it.&lt;/p&gt;  &lt;p&gt;Software development groups at tech companies should take some medicine too -- cutting costs, becoming more competitive, improving morale, and attracting good talent at the same time.&lt;/p&gt;  &lt;p&gt;How is that possible? Here's one way:&lt;/p&gt;  &lt;p&gt;Unless your company is brand new, and you've got geniuses agile-ly coding your hot frog-sticker-collectors' social network, your project has a bunch of history, cruft, and mistakes in it.&lt;/p&gt;  &lt;p&gt;It's nothing to get upset about, that's just the way of the world when developing software over the course of years in an organizational setting.&lt;/p&gt;  &lt;p&gt;Yet many companies don't make any effort -- or actively resist any effort -- to identify those legacy problems and mitigate them. Perhaps it's fear of blame (&lt;em&gt;why didn't you see this before? why didn't you say something? aren't you guys supposed to be experts?&lt;/em&gt;) or fear of appearing backward-looking rather than forward-looking (&lt;em&gt;we'll make do with all that stuff; now can we shrink wrap and ship your latest proof-of-concept and call it next quarter's product?&lt;/em&gt;)&lt;/p&gt;  &lt;p&gt;Suppose that, instead, your development group listed all the crufty bits that bug them. Stuff that maybe made sense at the time, but just isn't right any more -- wrong code, wrong architecture, wrong network protocol, wrong database, wrong format, whatever. Suppose the team got to rank these in order of annoyance factor, and impediment to productivity. Then, picking the top handful, they got to decide how to use the latest and greatest (and in many cases less expensive) technology to refactor and fix those modules.&lt;/p&gt;  &lt;p&gt;A shortsighted manager might complain that 'if it ain't broke, don't fix it' -- it's a waste of resources.&lt;/p&gt;  &lt;p&gt;But we know better than that.&lt;/p&gt;  &lt;p&gt;In many projects a significant percentage of resources (up to two-thirds in extreme cases, based on my research and experience) can be spent wrestling with these &amp;quot;legacy cruft&amp;quot; issues. So, from a simple economics standpoint, it's definitely &amp;quot;broke&amp;quot; if you're spending $1 million per year on a dev group that could theoretically deliver the same functionality on $333,000, or 3x as much for the same $1 million.&lt;/p&gt;  &lt;p&gt;A project that removes these old bits becomes more competitive. Why? The competition, particularly if it's a newer company or on a newer platform, isn't running with these parking brakes holding them back. Why should your team? If you can release the brake, you can deny your competitors something they definitely view as an advantage against you.&lt;/p&gt;  &lt;p&gt;Moreover, these moves can boost morale and make your company more attractive to prospective employees in several different ways.&lt;/p&gt;  &lt;p&gt;Getting rid of old morale-busting code makes everyone feel good. &lt;/p&gt;  &lt;p&gt;Using a newer technology -- not as a novelty but because it's solving a real problem better than existing code -- is appealing to developers who want to learn new skills. &lt;/p&gt;  &lt;p&gt;Doing a refactor of critical code without breaking existing code, wrecking release schedules, or introducing excessive ops downtime is a challenging and rewarding skill, kind of like working on the engine while plane is flying -- and top developers relish this kind of &amp;quot;black-diamond&amp;quot; assignment. &lt;/p&gt;  &lt;p&gt;Finally, it tells everyone, inside the company and out, that this isn't Initech, where an engineer will have to work on 15-year-old tech for the next 15 years.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-3918759571700216862?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/3918759571700216862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=3918759571700216862' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/3918759571700216862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/3918759571700216862'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/10/engineering-departments-should-take.html' title='Engineering Departments Should Take Their Medicine Too'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-4884135522158488550</id><published>2008-10-07T22:29:00.001-07:00</published><updated>2008-10-07T22:29:36.755-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='sms'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>TextMarks and AppEngine Make Building SMS-Enabled Webapps Simple</title><content type='html'>&lt;p&gt;&lt;a href="http://www.textmarks.com/"&gt;TextMarks&lt;/a&gt; has been on my radar for a little while. It's a company offering free (ad-supported) access to SMS shortcode 41411, via a secondary keyword of your choice. They also have pro options with no ads, and shorter (or reserved) keywords.&lt;/p&gt;  &lt;p&gt;Not having a great idea for a SMS-based app (I think I'm biased from having web-enabled, push-email PDAs for too long), but wanting to kick the tires, I decided to build an iteration of the now-classic &amp;quot;to-do list&amp;quot; app.&lt;/p&gt;  &lt;p&gt;Meanwhile, I've been spending a little time with the Google AppEngine. When a hosting account came due for renewal, I decided to see if I could replicate it using AppEngine. AppEngine covers all the basics, and makes it easy to stream BLOBs out of the datastore as well. But if you host files (anything over 1MB), those are not allowed in AppEngine, either as static files or as datastore objects. Too great a magnet for bandwidth or data hogs I suppose. So those files live somewhere else.&lt;/p&gt;  &lt;p&gt;But AppEngine makes a fine place to put a small SMS-driven app (assuming you don't need the background processes or scheduled processes that AppEngine doesn't allow).&lt;/p&gt;  &lt;p&gt;Registering a TextMark is simple. Set the URL to the one you want called when 41411 receives your keyword, and add dynamic data from the SMS into the URL request GET params using &lt;a href="http://www.textmarks.com/info/help/#hlpsMobilizing"&gt;escape sequences&lt;/a&gt; (e.g., \0 means &amp;quot;the whole message after my keyword&amp;quot;). So your URL might look something like http://foo.appspot.com/sms?text=\0).&lt;/p&gt;  &lt;p&gt;Go into the &amp;quot;Manage&amp;quot; tab, pick &amp;quot;Configuration&amp;quot; and turn off the various options related to &amp;quot;posting messages&amp;quot; -- these aren't necessary for your app. If you aren't planning to asynchronously send messages out to your users (hard to do with AppEngine, as mentioned above), you can also turn off the subscription options.&lt;/p&gt;  &lt;p&gt;Now you just need a handler on AppEngine to receive those calls and do something. Whatever the handler renders will be truncated and sent back to the user as a reply SMS, so you get a semi-web-like mechanism for confirming that you're done an operation, or returning results.&lt;/p&gt;  &lt;p&gt;Create your AppEngine app, a handler, and yaml that ties 'em together, per the &lt;a href="http://code.google.com/appengine/docs/gettingstarted/"&gt;tutorial&lt;/a&gt;. Now you can just modify the basic HelloWorld to do your bidding instead.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://pastie.org/287260"&gt;Here is my little memo handler&lt;/a&gt; -- it files memos under the phone number of the person sending the text, and forwards a list of all the memos to an email address if it receives the command &amp;quot;export (email address).&amp;quot; Don't put anything private in there, since there's no PIN/authentication (although it would be easy enough to add) ... so anyone who knows your phone number and can build a URL by hand can just ask for all your notes :)&lt;/p&gt;  &lt;p&gt;Of course, it's easy to test out your handler with just the browser address bar, but TextMarks also provides a nice emulator so you can send messages to your handler -- and see what the response will look like with their 120 char (free account) limit and their ad tacked on. And there are a bunch of other neat things you can do, like create short term stateful contexts, where a user can just text back Y/N or a response to numbered &amp;quot;menu&amp;quot; and the messages will get to your app automagically.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-4884135522158488550?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/4884135522158488550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=4884135522158488550' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4884135522158488550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4884135522158488550'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/10/textmarks-and-appengine-make-building.html' title='TextMarks and AppEngine Make Building SMS-Enabled Webapps Simple'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-8532654516040401301</id><published>2008-10-03T15:44:00.001-07:00</published><updated>2008-10-03T15:44:56.537-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='femtocell'/><title type='text'>zBoost Cell Extender: Refinement Post</title><content type='html'>&lt;p&gt;This is a refinement, or follow-up, to my first post about cell &lt;a href="http://skipmeamadeus.blogspot.com/2008/08/extending-cell-signal-with-zboost.html"&gt;signal boosting with zBoost&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;While the base station allows decent communication over a specific area once a data or voice call is established, it seems to have little or no ability to propagate the signaling part of the GSM protocols when there is no connection established.&lt;/p&gt;  &lt;p&gt;This symptom means that the network is unaware of a handset, and a handset thinks there is no service. As a result, it often will not even try to make a call.&lt;/p&gt;  &lt;p&gt;Once the handset decides there's a network -- usually by picking up a very faint signal from a real tower -- it will attempt the call and then discovers a near-perfect connection.&lt;/p&gt;  &lt;p&gt;zBoost may not be responsible for this behavior -- the product docs specifically say that you have to have &lt;em&gt;some&lt;/em&gt; real signal level in order to use the repeater. I had imagined this restriction was solely due to the zBoost device needing a tower to talk to (it cannot bridge to another backhaul) -- but in fact it may also be due to zBoost's inability to simulate the idle signaling between the handset and the tower. That is, you need a tower to make or get a call, but the zBoost can boost the data &lt;em&gt;in&lt;/em&gt; the call stream.&lt;/p&gt;  &lt;p&gt;So what does this all mean?&lt;/p&gt;  &lt;p&gt;Well basically that if your RF visibility to a tower is marginal, as mine is, zBoost may still be able to help. But you don't want to rely on this to reach 911 or make any other kind of need it right now phone call, as it might take you a few minutes of moving around or monkeying with the phone to get it to realize there's any service. &lt;/p&gt;  &lt;p&gt;Likewise, if you absolutely positively cannot miss an incoming call, this may not be the solution for you, although, interestingly, incoming signaling (calls and SMS) seems to be stronger/prioritized traffic from the tower than idle updates, and so gets to the handset more frequently, without any kind of booster present.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-8532654516040401301?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/8532654516040401301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=8532654516040401301' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8532654516040401301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8532654516040401301'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/10/zboost-cell-extender-refinement-post.html' title='zBoost Cell Extender: Refinement Post'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-8777992048229657469</id><published>2008-09-30T22:35:00.001-07:00</published><updated>2008-09-30T22:35:42.927-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hiring'/><category scheme='http://www.blogger.com/atom/ns#' term='housing'/><category scheme='http://www.blogger.com/atom/ns#' term='Bay Area region'/><title type='text'>Credit Crisis: At Least One Great Thing Already Happening for Silicon Valley</title><content type='html'>&lt;p&gt;The unfolding credit crisis may have severe implications for the region -- or the world -- a bit down the line. But it is already helping chip away at one of the Bay Area's biggest long-term problems: housing (un)affordability.&lt;/p&gt;  &lt;p&gt;I'm going to keep with my narrow technology focus here and, fairly or not, make an analysis specifically of the region's viability as a technology and innovation hub, its ability to route investment into businesses that attract top engineers and churn out world-changing products.&lt;/p&gt;  &lt;p&gt;Every year when the region's large business leaders meet, &lt;a href="http://sanjose.bizjournals.com/sanjose/stories/2006/02/20/story4.html"&gt;housing is at or near the top of their list of concerns&lt;/a&gt;. It's hard to hire in a place people cannot afford to live. Especially when potential employees are talented and often mobile, with a lot of options in front of them.&lt;/p&gt;  &lt;p&gt;Owning a house in the Bay Area has been expensive for some time. But -- in the space of the last eight years or so -- it has crossed the line from &amp;quot;painful but affordable&amp;quot; to &amp;quot;not realistically affordable&amp;quot; for the technology professionals smart enough not to take one of those wild-'n'-wacky subprime loans with a handful of bogus low payments up front.&lt;/p&gt;  &lt;p&gt;I'm going to be concrete here, and use specific numbers... numbers which may leave you gasping or slapping your head if you live elsewhere in the world, but numbers which are real.&lt;/p&gt;  &lt;p&gt;In the wake of the dot-com crash, a large portion of the area's &amp;quot;starter house&amp;quot; stock was available for $350,000 to $500,000. These were often 2-bedroom tract homes, not always in the most desirable locations, but not in the worst either. They were no bargain, but they were affordable for the &amp;quot;senior software engineers&amp;quot; with a decent education, a half-dozen years of experience, and the willingness to save for a real down payment all that time instead of going wild with the Visa card. These engineers had seen their earning power top $100,000 (partly due to the dot-com boom), and if they avoided &lt;a href="http://www.aqua-sf.com/aqua/"&gt;Aqua&lt;/a&gt; when the company wasn't paying, they could sock away some serious cash.&lt;/p&gt;  &lt;p&gt;A widely held rule of thumb regarding housing affordability suggests that at most one-third -- perhaps a little more -- of gross income can go to housing. More than that, and the probability of the buyer experiencing financial hardship or outright defaulting goes up sharply.&lt;/p&gt;  &lt;p&gt;So the senior engineer, with say six or seven years of professional experience, making a little over $100,000 -- exactly the &amp;quot;heart of the batting order&amp;quot; in a growing tech company's talent pool -- could afford a $400,000-$500,000 house, at around 6%, with the traditional 20% down payment. If they had a significant other who was also earning money, they could afford a little more. But not too much more if they didn't want to be dependent on those full dual incomes indefinitely.&lt;/p&gt;  &lt;p&gt;Almost all of the folks in my &amp;quot;cohort&amp;quot; (say, within four years or so of my age) whom I know and who bought houses in the Bay Area did so in this way, at this time, and with this sort of cost.&lt;/p&gt;  &lt;p&gt;Fast forward three years.&lt;/p&gt;  &lt;p&gt;Easy money and bogus mortgages have caused prices to balloon. Those $400k-$500k houses become $700-$800k houses.&lt;/p&gt;  &lt;p&gt;Salaries have drifted up a touch as the worst &amp;quot;crash&amp;quot; years pass, but not much beyond the rate of inflation, maybe $5k-$10k per year for these mid-level positions. Certainly not enough to cover the change in housing prices.&lt;/p&gt;  &lt;p&gt;And -- just like that -- those engineers, the early-to-mid-career core of any tech company trying to scale, the folks who know enough to use a little process and not re-invent the wheel, while still working hard and willing to take chances to innovate and make something happen, have no access to the stock of starter homes.&lt;/p&gt;  &lt;p&gt;Beyond the larger down payment, they discover that making a &amp;quot;real&amp;quot; (i.e., based on traditional mortgage terms) monthly payment on this $750,000 house means making over $150,000. And that's well beyond the typical salary for a senior engineer or even a lead engineer / architect type role.&lt;/p&gt;  &lt;p&gt;And there's the story: that bubble cut off the up-and-coming generations of engineers from homeownership. Indefinitely if not permanently. If the Silicon Valley business leaders roundtable thought housing was an issue before, they are in a whole new landscape now.&lt;/p&gt;  &lt;p&gt;But this is exactly where the credit crisis is starting to help. It was never practical to build our way out of the housing shortage because not only is buildable land scarce here, but ready credit meant each housing unit gets bid up based on what lenders are in the mood to invest.&lt;/p&gt;  &lt;p&gt;Now that the brakes are on, we've already seen the median home price in the Bay Area drop by nearly a third from its high in '06. We need a couple more years of this -- together with lenders that want to see payments under that one-third of income mark, and a solid down payment.&lt;/p&gt;  &lt;p&gt;When it all shakes out, perhaps some of my friends who missed that narrow window early in the decade and so, despite working hard, excelling, and making serious incomes, missed a chance to own any kind of house, will get their opportunity. &lt;/p&gt;  &lt;p&gt;And, if it's too late for them -- after all, families grow, the kids get bigger, and that worn-down starter house won't look so attractive when we're all middle-aged -- at least the next generation of geeks and whiz kids will have a reason to work in Silicon Valley.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-8777992048229657469?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/8777992048229657469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=8777992048229657469' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8777992048229657469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8777992048229657469'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/09/credit-crisis-at-least-one-great-thing.html' title='Credit Crisis: At Least One Great Thing Already Happening for Silicon Valley'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-9015007186390147085</id><published>2008-09-20T21:53:00.001-07:00</published><updated>2008-09-20T21:53:56.303-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><title type='text'>Low-Hanging Fruit: a Server-Side JavaScript API (or Standards, or ...)</title><content type='html'>&lt;p&gt;There's a big chunk of &lt;strong&gt;&lt;em&gt;stuff&lt;/em&gt;&lt;/strong&gt; missing from JavaScript cloud-hosting platforms (like &lt;a href="http://www.10gen.com/"&gt;10gen&lt;/a&gt;) and as well as from JavaScript semi-app-servers (like &lt;a href="https://phobos.dev.java.net/"&gt;Phobos&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;It's called any kind of API or standard.&lt;/p&gt;  &lt;p&gt;Hard to believe, but after several years of growing JavaScript influence, and a whole web culture that is tilts towards openness and standards, all of the players -- Bungee Labs, AppJet, 10gen, Phobos, and many others -- are rolling their own little server-side platform APIs.&lt;/p&gt;  &lt;p&gt;Standards make a platform easier to learn, understand, debate, debunk, and fix. They allow a larger community to share code and ideas, and provide a small degree of lock-in-proofing and future-proofing. Standards also allow transparent competition on the basis of implementation quality, tooling, SLA, etc., rather than obscuring those things behind incompatible facades (APIs).&lt;/p&gt;  &lt;p&gt;New platforms on new technologies with no standards behind them can be a hard sell -- especially when they do not offer any new capabilities. &lt;/p&gt;  &lt;p&gt;According to Techcrunch, &lt;a href="http://www.techcrunch.com/2008/08/28/bungee-labs-in-a-freefall/"&gt;Bungee is in a &amp;quot;freefall.&amp;quot;&lt;/a&gt; And the interesting bit is that their CEO ascribed the recent round of layoffs to 'actual vs. anticipated rates of adoption.'&lt;/p&gt;  &lt;p&gt;Hello, if you are trying to sell the world on your server-side JavaScript programming and deployment environment, you're not helping your 'rates of adoption' by also asking people to learn and commit to your own home-brew platform API.&lt;/p&gt;  &lt;p&gt;Now to be fair, there aren't a lot of alternatives in the absence of a standard. But ... it would make a lot more sense for all these players to get together and create some standard APIs and commit to using them. The APIs would cover all the basics: e.g., persistence (of object, key-value and relational flavors), templates, request/response handling, calls out to other web services and processing of their responses, publishing SOAP services (which still remains critical in the enterprise world), and interop with other server-side environments (Java, Python, etc.)&lt;/p&gt;  &lt;p&gt;Overnight, there would be a single community (and acronym!) instead of a dozen fragments. Like any standard, it would generate books, conferences, training materials -- and controversy, which is never a bad thing when you need publicity. We would see real performance tests, and get a real debate over where the JavaScript-to-SomethingElse boundary should be and why.&lt;/p&gt;  &lt;p&gt;And these vendors would gain instant legitimacy by being founding contributors to a specific platform &amp;quot;trend,&amp;quot; rather than lone voices in the woods. That legitimacy (and, via the sad logic of large companies, the &amp;quot;legitimacy&amp;quot; of being printed on the top of some conference bag) would help them appear credible to customers big enough to pay them real money.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-9015007186390147085?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/9015007186390147085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=9015007186390147085' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/9015007186390147085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/9015007186390147085'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/09/low-hanging-fruit-server-side.html' title='Low-Hanging Fruit: a Server-Side JavaScript API (or Standards, or ...)'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-6791424001019806810</id><published>2008-09-11T10:01:00.001-07:00</published><updated>2008-09-11T10:01:56.602-07:00</updated><title type='text'>BYOA (Bring Your Own Analogies)</title><content type='html'>&lt;p&gt;I found this brilliant label on the side of an industrial-strength wood chipper/eater/pulverizer.&lt;/p&gt;  &lt;p&gt;There are so many other places -- especially in software development -- where a label like this (including both explicit content and implicit assumptions about the attitude of the reader) would be appropriate. &lt;/p&gt;  &lt;p&gt;I won't ruin your fun by babbling on about all the specific cases; instead I'll leave you the pleasure and satisfaction that will come as you begin thinking of them.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/adbreind/SMlO_52uBEI/AAAAAAAAAH8/2t56wyRUVBs/s1600-h/stop-to-think%5B6%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="450" alt="stop-to-think" src="http://lh4.ggpht.com/adbreind/SMlPAw9TBNI/AAAAAAAAAIA/-10SciBCcZU/stop-to-think_thumb%5B4%5D.jpg?imgmax=800" width="590" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-6791424001019806810?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/6791424001019806810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=6791424001019806810' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6791424001019806810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6791424001019806810'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/09/byoa-bring-your-own-analogies.html' title='BYOA (Bring Your Own Analogies)'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/adbreind/SMlPAw9TBNI/AAAAAAAAAIA/-10SciBCcZU/s72-c/stop-to-think_thumb%5B4%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-7720752017316771443</id><published>2008-09-09T20:55:00.001-07:00</published><updated>2008-09-09T20:55:41.975-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='process'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Presentations from SF Flash Hackers August '08</title><content type='html'>&lt;p&gt;A couple of weeks ago I gave two mini-presentations to the SF Flash Hackers group, on topics I've talked about here before ... but I figured I'd post the slides to &lt;em&gt;slideshare.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Here are slides about porting a large Windows app (Mindjet MindManager 7.2 with Connect) to run in the browser via Flash (developerd with Flex):&lt;/p&gt;  &lt;div id="__ss_590942" style="width: 425px; text-align: left"&gt;&lt;a title="Portingalargewindowsapptoflex" style="display: block; margin: 12px 0px 3px; font: 14px helvetica,arial,sans-serif; text-decoration: underline" href="http://www.slideshare.net/adbreind/portingalargewindowsapptoflex-presentation?type=powerpoint"&gt;Porting a large Windows app to Flex&lt;/a&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=portingalargewindowsapptoflex-1221018142292786-8&amp;amp;stripped_title=portingalargewindowsapptoflex-presentation" width="425" height="355" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" /&gt;     &lt;div style="font-size: 11px; padding-top: 2px; font-family: tahoma,arial; height: 26px"&gt;View SlideShare &lt;a title="View Portingalargewindowsapptoflex on SlideShare" style="text-decoration: underline" href="http://www.slideshare.net/adbreind/portingalargewindowsapptoflex-presentation?type=powerpoint"&gt;presentation&lt;/a&gt; or &lt;a style="text-decoration: underline" href="http://www.slideshare.net/upload?type=powerpoint"&gt;Upload&lt;/a&gt; your own.&lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;And here are slides on generating ActionScript 3 code from UML class diagrams using my VASGen tool -- which is really a contribution building on two existing tools, the Violet UML modeler, and the Metaas ActionScript 3 meta-library (in Java):&lt;/p&gt;  &lt;div id="__ss_590943" style="width: 425px; text-align: left"&gt;&lt;a title="As3 Code Gen From Uml" style="display: block; margin: 12px 0px 3px; font: 14px helvetica,arial,sans-serif; text-decoration: underline" href="http://www.slideshare.net/adbreind/as3-code-gen-from-uml-presentation?type=powerpoint"&gt;As3 Code Gen from Uml&lt;/a&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=as3codegenfromuml-1221018262418868-9&amp;amp;stripped_title=as3-code-gen-from-uml-presentation" width="425" height="355" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" /&gt;     &lt;div style="font-size: 11px; padding-top: 2px; font-family: tahoma,arial; height: 26px"&gt;View SlideShare &lt;a title="View As3 Code Gen From Uml on SlideShare" style="text-decoration: underline" href="http://www.slideshare.net/adbreind/as3-code-gen-from-uml-presentation?type=powerpoint"&gt;presentation&lt;/a&gt; or &lt;a style="text-decoration: underline" href="http://www.slideshare.net/upload?type=powerpoint"&gt;Upload&lt;/a&gt; your own.&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/26260493-7720752017316771443?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/7720752017316771443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=7720752017316771443' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7720752017316771443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7720752017316771443'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/09/presentations-from-sf-flash-hackers.html' title='Presentations from SF Flash Hackers August &amp;#39;08'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-6481487776915573344</id><published>2008-09-04T23:25:00.001-07:00</published><updated>2008-09-04T23:25:46.005-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='banking'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Citibank Needs to Get Their PKI Act Together</title><content type='html'>&lt;p&gt;While I'm thinking about security ... there has been plenty of debate over whether Firefox 3's hostility toward self-signed certs is a good idea.&lt;/p&gt;  &lt;p&gt;Either way, this should be a non-issue in the banking world, which ought to have proper certs on any public facing machines.&lt;/p&gt;  &lt;p&gt;So I was more than a little surprised when I went through a workflow with Citi, where a number of links, widgets, etc., triggered the Firefox self-signed-cert blockade/warning. The problem resources were loading from subdomains like foo.citibank.com or bar.citimortgage.com.&lt;/p&gt;  &lt;p&gt;When I did some work with [insert other extremely large bank here], everything was SSL, even internal web service and app communications, and usually (not for external customers) mutual authentication. The bank had an entire PKI department, which controlled numerous separate CAs corresponding to dev, test, production, different business units/functions, etc.&lt;/p&gt;  &lt;p&gt;Hooking up to most things meant sorting out the right kind of cert to present, and working the proper cert chain for whatever the server gave you. In some situations -- e.g., programmatically sorting this out in Java -- it was a major hassle. Not to mention that the PKI group was cooperative but busy, so there could be delays. And the certs were set to expire in not-so-long, so a whole mechanism was necessary to make sure you didn't have system failures in your department due to not getting a new cert placed in time.&lt;/p&gt;  &lt;p&gt;It would have been much easier to use self-signed certs all over the place, but the bank wanted some extra protection even against rogue calls from inside the network. The policy made sense and, even if it didn't to you, your alternative was to box up your stuff and leave the building.&lt;/p&gt;  &lt;p&gt;Of course intentionally deploying a production service to external customers with a bogus cert was so unimaginable it wouldn't have even been funny ... in order to be funny there would've had to have been some molecule of possibility in it, and there wasn't.&lt;/p&gt;  &lt;p&gt;Can Citibank really not have controls that prevent this?&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-6481487776915573344?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/6481487776915573344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=6481487776915573344' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6481487776915573344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6481487776915573344'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/09/citibank-needs-to-get-their-pki-act.html' title='Citibank Needs to Get Their PKI Act Together'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-7666126093527919112</id><published>2008-09-04T23:06:00.001-07:00</published><updated>2008-09-04T23:06:20.664-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Chrome's Unusual Installation Location: Good, Bad, or Ugly?</title><content type='html'>&lt;p&gt;I -- and many other folks -- have noticed that Google Chrome installs only for a single user, and does so in a way that does not require administrative privileges to run the installer.&lt;/p&gt;  &lt;p&gt;Basically, it just drops its files into a subdirectory of the user's home directory, places its shortcuts in the user's specific Start Menu folder, Desktop folder, etc., and arranges for its GoogleUpdate.exe helper app to launch from Windows/CurrentVersion/Run under HKEY_CURRENT_USER, rather than HKEY_LOCAL_MACHINE.&lt;/p&gt;  &lt;p&gt;This is an unusual pattern for a Windows installer, almost certainly rigged in order to allow minimal-privilege user accounts on corporate networks to install and run Chrome ... under the radar of IT or management policy, if need be.&lt;/p&gt;  &lt;p&gt;The question is whether this is inherently a security problem.&lt;/p&gt;  &lt;p&gt;On one hand, I've read posts pointing out that this setup leaves the executable vulnerable to other executables that run with the user's permissions. This means another app could replace Chrome with a compromised Chrome, and the user would never know. At the same time, if Chrome can install, then any other malware could install itself the same way -- set itself up to launch under HKCU/.../CurrentVersion/Run, and sit in the background doing anything it wanted (like listen to keystrokes for another HWND). Then again, being &lt;em&gt;in&lt;/em&gt; the user's browser might make snarfing credentials and scripting their use (or taking advantage of an auth cookie being present) a lot easier. The point is that a traditional executable under Program Files should be less vulnerable -- a nonprivileged user account can't rewrite those files.&lt;/p&gt;  &lt;p&gt;On the other hand ... this is not terribly unlike the install/run routine on *nix servers. If I'm a &amp;quot;regular&amp;quot; user, I'm not installing to /usr/bin, I'm just untarring in a local directory, possibly building, and then running the binary. Of course a user doing this is likely more sophisticated than general Windows users, and fewer *nix end users means less malware at the moment.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-7666126093527919112?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/7666126093527919112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=7666126093527919112' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7666126093527919112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7666126093527919112'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/09/chrome-unusual-installation-location.html' title='Chrome&amp;#39;s Unusual Installation Location: Good, Bad, or Ugly?'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-1566633730783515676</id><published>2008-09-03T16:25:00.001-07:00</published><updated>2008-09-03T16:25:11.913-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Always-On JavaScript Mildly Disturbing</title><content type='html'>&lt;p&gt;Google Chrome doesn't have a switch to turn off or restrict scripts. While this might be an upcoming feature, my guess is that Chrome is about &amp;quot;running&amp;quot; web 2.0 apps, and so JavaScript is considered essential.&lt;/p&gt;  &lt;p&gt;Well, maybe that's ok if the security model around JavaScript execution is as fantastic as &lt;a href="http://blogoscoped.com/google-chrome/26"&gt;the comic book suggests&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;On the other hand, the launch of this browser featuring a well-known security flaw (admittedly not a JavaScript flaw) makes me a less comfortable about always-100% script execution.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-1566633730783515676?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/1566633730783515676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=1566633730783515676' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1566633730783515676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1566633730783515676'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/09/always-on-javascript-mildly-disturbing.html' title='Always-On JavaScript Mildly Disturbing'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-8364417886266811612</id><published>2008-09-03T16:08:00.001-07:00</published><updated>2008-09-03T16:08:39.970-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='web services'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon'/><title type='text'>Amazon EC2 to Support Windows Server AMIs</title><content type='html'>&lt;p&gt;Jeff Barr, Amazon Web Services Senior Evangelist, just finished giving a talk at &amp;quot;&lt;strong&gt;The AWS Start-up Event &amp;#x2013; San Francisco&amp;quot;&lt;/strong&gt; in which he showed slides listing upcoming plans at AWS, including support for Windows Server.&lt;/p&gt;  &lt;p&gt;This is an exciting development, as Windows Server / ASP.Net make for a fantastic if potentially expensive platform. Now Microsoft has to step up to the plate and come up with a pay-as-you-go, per-cycle or per-cpu-hour licensing scheme.&lt;/p&gt;  &lt;p&gt;One of the things that makes ASP.Net interesting is that it lives in a nice middle ground between Java, which is extremely fast (in EC2, this means less expensive per transaction) and has great &amp;quot;enterprise&amp;quot; capabilities but is cumbersome to develop with, and, say, Rails, which is quite slow and has poor enterprise app cred but is very pleasant and lightweight to develop with. ASP.Net, especially with the &lt;a href="http://www.asp.net/mvc/"&gt;MVC&lt;/a&gt; framework and forthcoming support for Python and Ruby in addition to C# and the other .Net languages, seems to combine extreme performance, easy development, and access to as much &amp;quot;enterprise&amp;quot; as you need while offering lightweight alternatives like LINQ and &lt;a href="http://www.microsoft.com/sql/dataservices/default.mspx"&gt;SSDS&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;My point isn't to make a commercial for ASP.Net, but to point out that if Microsoft can get their licensing in order, they might catch up in the cloud world through fast, cheap development cycles plus faster (and hence cheaper) runtime operation on a given machine instance than some competing platforms.&lt;/p&gt;  &lt;p&gt;Just to be fair, cloud vendor &lt;a href="http://www.enomalism.com/"&gt;enomalism&lt;/a&gt; has run Windows Server on EC2 before, by virtue of the &lt;a href="http://bellard.org/qemu/about.html"&gt;Qemu&lt;/a&gt; emulation software (on top of Linux). But if we're talking about maximizing efficiency, wasting cycles on another layer of emulation (EC2 instances are of course virtual to begin with) doesn't sound like the way to go.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-8364417886266811612?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/8364417886266811612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=8364417886266811612' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8364417886266811612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8364417886266811612'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/09/amazon-ec2-to-support-windows-server.html' title='Amazon EC2 to Support Windows Server AMIs'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-2122926480686904865</id><published>2008-09-01T14:53:00.001-07:00</published><updated>2008-09-01T14:53:08.219-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='broadband'/><category scheme='http://www.blogger.com/atom/ns#' term='cable'/><category scheme='http://www.blogger.com/atom/ns#' term='networks'/><category scheme='http://www.blogger.com/atom/ns#' term='media'/><title type='text'>Om:Yes, Gillmor:No ... Comcast's Data Transfer Cap</title><content type='html'>&lt;p&gt;Om Malik nailed it at the end of &lt;a href="http://gigaom.com/2008/08/28/memo-to-comcast-show-me-the-meter-for-metered-broadband/"&gt;one his posts&lt;/a&gt; on the 250GB cap. He lists Comcast's stilted usage examples for email, music, etc., and asks &amp;quot;How many HD movies will fit under the cap?&amp;quot;&lt;/p&gt;  &lt;p&gt;That's the right question, but not because he is worried he'll bump the cap watching video.&lt;/p&gt;  &lt;p&gt;The reason it's the right question is that the cap has more to do with Comcast's long-term business plans -- and the cable/telco industry's plans -- than about slapping down a handful of network hogs.&lt;/p&gt;  &lt;p&gt;One fact before we continue. As I've written before, while everyone squabbled over BlueRay or HDDVD, the filesharing world settled on the x264 implementation and a container format for it. In that compressed format, a high-def film averages 10-15 GB.&lt;/p&gt;  &lt;p&gt;But here's the real deal:&lt;/p&gt;  &lt;p&gt;Comcast's cable TV and on-demand video business competes directly with Internet video (both legal and gray-market). By making the cap high enough that it won't immediately impact YouTube watchers but -- over time -- will put a serious dent in customers' ability to get HD video over the Internet, Comcast is simply crippling one product so that customers will have to buy another product from them. Don't even think about mentioning broadband competition -- if you define competition as more than one entity offering substitutable goods (i.e. similar bandwidth, QoS, etc), then most of the U.S. has zero competition. &lt;/p&gt;  &lt;p&gt;The 250GB cap is a way to push customers to buy the same content twice. To be specific, you'll pay to see a movie broadcast on cable TV in HD, and then pay again for some special plan that lets you watch the same &lt;a href="http://www.hulu.com/movies"&gt;content later on Hulu&lt;/a&gt;. Or you'll pay for Comcast &amp;quot;on-demand&amp;quot; to watch a show on your TV. But if you want to place-shift that show to your laptop or the gym (on your phone), you'll have to pay to get enough headroom to download the same video.&lt;/p&gt;  &lt;p&gt;This move is not just about trying to squeeze out more money. It's yet another attempt by network operators to neglect their core business and instead try to get into a content business, so they can do two things badly instead of just one.&lt;/p&gt;  &lt;p&gt;Meanwhile, Steve Gillmor &lt;a href="http://www.techcrunch.com/2008/08/29/goodbye-bittorrent-hello-streaming/"&gt;writes&lt;/a&gt; that bandwidth caps will mean the end of BitTorrent downloading and a shift to streaming. Steve's a smart guy, but streaming is one of those perennial non-trends like speech recognition and thin-client computing. It's only conceivable to someone who has a computer connected to their TV or who lives on their laptop.&lt;/p&gt;  &lt;p&gt;Having played a key role in several home-entertainment / media-tech startups, two of which have been successfully acquired, I feel confident saying streaming is only a little piece of a solution. For the foreseeable future, streaming will never be more than that. It neglects too many consumer needs and desires, is too inflexible, and is too warped by DRM and platform-lock-in issues. &lt;/p&gt;  &lt;p&gt;Moreover, the latest round of DRM around HDMI and high-def media playback in general means that even in-home &amp;quot;streaming&amp;quot; -- i.e., from a PC to a TV or from one PC to another -- is facing setbacks just as Joe tech-savvy consumer finally starts to realize how to use a home server or network attached hard drive to get and watch shows.&lt;/p&gt;  &lt;p&gt;And the set-top boxes, increasingly tied in tightly with content delivery (Comcast DVR, DirecTV TiVo expiring your pay-per-view movies, etc.) are more closed than ever. Instead of encouraging an ecosystem of streaming, they force customers into an ecosystem of downloading.&lt;/p&gt;  &lt;p&gt;I think we'll see more people gaming the 250GB cap ... using scheduling software so they can maximize the utility of the 250GB and hoard downloads. Not to mention leaving the torrent client running so that every time I visit someone else's network -- an office, a coffeeshop, etc. -- I'll keep the downloads slowly but surely coming in.&lt;/p&gt;  &lt;p&gt;One final note: the marginal cost of moving a kb of data around a big network -- that is, the cost of the power and cooling for the switches and the amortized cost of the cables and gear and ops guys divided over their lifetime data transfer -- is more or less zero when the network isn't already near peak bandwidth somewhere. So even if there is a problem, the volume-based cap is the answer to a &lt;em&gt;different &lt;/em&gt;problem.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-2122926480686904865?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/2122926480686904865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=2122926480686904865' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2122926480686904865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2122926480686904865'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/09/omyes-gillmorno-comcast-data-transfer.html' title='Om:Yes, Gillmor:No ... Comcast&amp;#39;s Data Transfer Cap'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-973341129711492573</id><published>2008-08-25T12:42:00.001-07:00</published><updated>2008-08-25T12:42:46.317-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='Sprint'/><category scheme='http://www.blogger.com/atom/ns#' term='femtocell'/><title type='text'>Extending a Cell Signal With zBoost</title><content type='html'>&lt;p&gt;Although I'm curious about the &lt;a href="http://skipmeamadeus.blogspot.com/2008/08/airave-and-network-sniffing-for-fun-and.html"&gt;AIRAVE&lt;/a&gt;, I'm not on Sprint and not convinced it's worth switching just for the AIRAVE capability.&lt;/p&gt;  &lt;p&gt;But I do have a signal problem at my house, and I'm currently testing out the &lt;a href="http://www.wi-ex.com/Page3187.aspx"&gt;zBoost Wi-Ex signal booster&lt;/a&gt; to see how much of a dent it can make.&lt;/p&gt;  &lt;p&gt;Unlike AIRAVE, which creates a local CDMA network and bridges it to another backhaul, the Wi-Ex is an RF repeater/amplifier. So you need to feed it a signal -- from somewhere nearby that has a signal -- and it extends the signal via a new base station and antenna.&lt;/p&gt;  &lt;p&gt;So far I'm inconclusive on the quantitative results. Certainly, in my house, the coverage area it creates is closer to 600 square feet than the 2500 square feet advertised. But as with any RF setup, there are so many variables that this doesn't prove a heck of a lot.&lt;/p&gt;  &lt;p&gt;I can report positive results on a qualitative measure.&lt;/p&gt;  &lt;p&gt;Normally, the signal is so weak inside my house that, without this unit, I can receive a call signal (e.g., ring or text message) but as soon as I press &amp;quot;talk&amp;quot; it drops. 100% of the time. Also, my Blackjack had never successfully retrieved a web page from inside the house. With the zBoost unit, there is&amp;#160; qualitative difference: The data connection can retrieve web pages -- sometimes slower, sometimes faster, but pretty much successfully. And if I receive a call, I can answer without the call dropping instantly. Again, depending on various things the call quality may be better or worse -- but there is always a call there, struggling to get through. Which despite being reminiscent of 1995 is a major improvement.&lt;/p&gt;  &lt;p&gt;What I'm wondering is ... if, as zBoost claims, the device is FCC legit and is designed not to create trouble for the existing cell network, why don't the cell carriers themselves sell this device? It seems like it could help them extend their reach geographically and satisfy a few more customers.&lt;/p&gt;  &lt;p&gt;And before you suggest that they don't offer it because doing so would be tantamount to admitting their existing network footprint isn't solid, note that both T-Mobile and Sprint are already selling personal femtocells and rumors are that AT&amp;amp;T isn't far behind. And anyway, spotty coverage inside buildings has never been any kind of secret.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-973341129711492573?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/973341129711492573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=973341129711492573' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/973341129711492573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/973341129711492573'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/08/extending-cell-signal-with-zboost.html' title='Extending a Cell Signal With zBoost'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-2568693675428471736</id><published>2008-08-23T08:31:00.001-07:00</published><updated>2008-08-23T08:31:30.961-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='Sprint'/><category scheme='http://www.blogger.com/atom/ns#' term='femtocell'/><title type='text'>Airave and Network Sniffing for Fun and Profit</title><content type='html'>&lt;p&gt;Sprint's &lt;a href="http://www.nextel.com/en/services/airave/index.shtml"&gt;AIRAVE&lt;/a&gt; BYOB (bring-your-own-backhaul) femtocell went on sale nationwide this week. Reviews seem &lt;a href="http://www.phonemag.com/sprint-airwave-review-084213.php"&gt;mildly positive&lt;/a&gt;; it kind of costs a bunch considering you're subsidizing Sprint's infrastructure, but it's marketed toward people who have little other choice.&lt;/p&gt;  &lt;p&gt;I don't have one (I'm not on Sprint at the moment). But if I did, the second thing I'd do with it is to start sniffing the traffic it sends back up the wire.&lt;/p&gt;  &lt;p&gt;But all that data would be encrypted, right? Well, maybe ... and maybe not. Since &lt;a href="http://www.multichannel.com/article/CA6587530.html"&gt;Excel&lt;/a&gt; files &lt;a href="http://www.informationweek.com/news/security/showArticle.jhtml?articleID=206100526"&gt;seem&lt;/a&gt; to be an enterprise &lt;a href="http://www.networkworld.com/news/2008/080508-missing-laptop-grounds-us-registered.html"&gt;data&lt;/a&gt; store of choice these days for companies handling sensitive personal information, and since telcos are not the science-fair winners of the class but more like that kid in the back that just giggles all day keeps getting his lollipop stuck in his own hair, it wouldn't surprise me if they think ADPCM &lt;em&gt;is &lt;/em&gt;encryption.&lt;/p&gt;  &lt;p&gt;Even if some or all of the call content is encrypted, though, one could probably learn a lot about the signaling layer of the system -- i.e., how the network identifies and talks to the phones to indicate presence or session initiation.&lt;/p&gt;  &lt;p&gt;Why would this be useful?&lt;/p&gt;  &lt;p&gt;Well, for one thing, it would be interesting to use the AIRAVE as a presence detection mechanism. Once I can determine that the base station has recognized a known cell phone ID, I can automate all sorts of things that are supposed to happen when I'm nearby.&lt;/p&gt;  &lt;p&gt;Applications include home automation (open locks, turn off the alarm); media (access and/or license to all of the media I own &amp;quot;appears&amp;quot; on any connected device when I'm nearby with my cell phone, and goes away when I leave); or for commerce: my hotel reservation, preferences at a restaurant, or online search history for a retailer can cue up automagically as I enter range.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-2568693675428471736?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/2568693675428471736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=2568693675428471736' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2568693675428471736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2568693675428471736'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/08/airave-and-network-sniffing-for-fun-and.html' title='Airave and Network Sniffing for Fun and Profit'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-62424396041811885</id><published>2008-08-15T13:52:00.000-07:00</published><updated>2008-08-15T13:52:00.958-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='legacy systems'/><category scheme='http://www.blogger.com/atom/ns#' term='travel'/><title type='text'>Tripeedo Brings Travel Search Full-Circle</title><content type='html'>&lt;p&gt;I couldn't help but crack up when I read a post about &lt;a href="http://www.tripeedo.com/go"&gt;Tripeedo&lt;/a&gt;, an AJAX-enabled "command line for travel," since of course all this reservation searching stuff was on a command line to begin with, on a terminal a &lt;em&gt;generation older&lt;/em&gt; than &lt;a href="http://www.vintagecomputing.com/wp-content/images/incoterm/incoterm_1_large.jpg"&gt;this hideous beast&lt;/a&gt;. And in fact while the hardware has mercifully been emulated away, the protocols are still in wide use under the hood in the travel industry.&lt;/p&gt;  &lt;p&gt;I had to use a command line like this as recently as 2006 for a project. Unlike tripeedo's version, I recall the search started with a strange lozenge character that doesn't seem to have a proper Unicode name, but was part of the 6-bit EBCDIC charset these terminals used when they were deployed in 1969. Then came a letter or a delimiter of some sort, and then a line like 15AUGSFODFW to look at flights on August 15th from SFO to DFW.&lt;/p&gt;  &lt;p&gt;I thought I'd try it in Tripeedo. The site prefers the month first, and it likes spaces. And, unlike the old system, it has lowercase letters too!&lt;/p&gt;  &lt;p&gt;So I type "15 aug sfo dfw" and get some flights to look at. In 1969, this was the future.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-62424396041811885?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/62424396041811885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=62424396041811885' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/62424396041811885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/62424396041811885'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/08/tripeedo-brings-travel-search-full.html' title='Tripeedo Brings Travel Search Full-Circle'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-648823992895072224</id><published>2008-08-14T15:31:00.001-07:00</published><updated>2008-08-14T16:06:17.921-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>iPhone Brings New Attention to AT&amp;T's Existing 3G Problem</title><content type='html'>&lt;p&gt;The wave has been building for a few days now, with consumers, Apple, and AT&amp;amp;T sparring over the problems with the iPhone 3G staying connected (and on 3G).&lt;/p&gt;  &lt;p&gt;Today seems to be a local &lt;a href="http://www.techmeme.com/080814/p23#a080814p23"&gt;maximum&lt;/a&gt; and the mainstream media are starting to look.&lt;/p&gt;  &lt;p&gt;If you read this blog regularly, you're probably expecting me to blame Apple for the problem, then blame Apple again for denying there's a problem, then blame Apple fanboys for putting up with it all for so long then suddenly acting betrayed.&lt;/p&gt;  &lt;p&gt;Surprise!&lt;/p&gt;  &lt;p&gt;As much as that might be a valid argument -- especially the part about Apple denying there's a problem -- this one is really not their fault.&lt;/p&gt;  &lt;p&gt;It's kind of AT&amp;amp;T's fault -- and kind of GSM's fault -- and kind of just mediocre engineering.&lt;/p&gt;  &lt;p&gt;A while back, &lt;a href="http://skipmeamadeus.blogspot.com/2008/02/using-google-location-to-troubleshoot.html"&gt;I wrote about similar experiences with my Samsung Blackjack on AT&amp;amp;T&lt;/a&gt;. I've also seen the same thing with the AT&amp;amp;T 8525 (Cingular 8525 / HTC TyTn), as this was one of the first multi-protocol, multi-band 3G devices on that network. &lt;/p&gt;  &lt;p&gt;Most people don't have any idea what this is all about, since their devices cannot experience this specific sort of problem because they don't support 3G, and so never have to resolve between 3G, EDGE, GPRS, etc.&lt;/p&gt;  &lt;p&gt;In this case, AT&amp;amp;T argues that one suspect, the &lt;a href="http://www.businessweek.com/technology/content/aug2008/tc20080813_430402.htm"&gt;Infineon chipset&lt;/a&gt;, is not to blame because it's the same one in Samsung devices, with which they have had little problem. I don't think that's their strongest argument: others &lt;a href="http://forums.wireless.att.com/cng/board/print?board.id=samsung&amp;amp;message.id=32555&amp;amp;page=7&amp;amp;format=page"&gt;appear to be having as much trouble&lt;/a&gt; as I do with the Blackjack/3G. We just never made as much noise as the iPhone folks.&lt;/p&gt;  &lt;p&gt;Perhaps a better argument would be that it affects all the EDGE/UMTS/HSDPA devices on the network and then maybe blame GSM for having such a funky data transport technology roadmap over the last 10 years.&lt;/p&gt;  &lt;p&gt;I'm not saying AT&amp;amp;T could easily do better -- maybe they need more capacity and a tune-up of switching algorithms. A &lt;a href="http://news.cnet.com/8301-13579_3-10015661-37.html"&gt;CNET article&lt;/a&gt; points to GSM carrier T-Mobile Netherlands having the same problem. And even though CDMA is worlds better as a technology, it's nice to have a little competition out there: two CDMA carriers for the U.S. out of four majors is enough.&lt;/p&gt;  &lt;p&gt;So what does all this mean?&lt;/p&gt;  &lt;p&gt;First, I'll tip my hat for once to the iPhonosphere and the obsessive media that love them: this is a real issue and we all know it takes a lot of volume to be heard talking to a telco.&lt;/p&gt;  &lt;p&gt;Second, even Steve Jobs' strong-arming of the carriers worldwide (and good for him on that one!) doesn't mean everything is &lt;em&gt;really&lt;/em&gt; under his control. According to this &lt;a href="http://www.smh.com.au/articles/2008/08/13/1218306957900.html"&gt;Sydney Morning Herald story&lt;/a&gt;, Apple didn't provide any test units to some carriers until the day before the product release, hoping it would all "just work." &lt;/p&gt;  &lt;p&gt;To paraphrase someone I used to work with, in technology "hope is not a strategy."&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-648823992895072224?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/648823992895072224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=648823992895072224' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/648823992895072224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/648823992895072224'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/08/iphone-brings-new-attention-to-at.html' title='iPhone Brings New Attention to AT&amp;amp;T&amp;#39;s Existing 3G Problem'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-4919292681379581891</id><published>2008-08-14T09:09:00.000-07:00</published><updated>2008-08-14T09:09:01.029-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='law'/><category scheme='http://www.blogger.com/atom/ns#' term='culture'/><title type='text'>Non-compete Ruling May Indirectly Help Broken Organizations</title><content type='html'>&lt;p&gt;Last week's California court &lt;a href="http://news.cnet.com/8301-1001_3-10010724-92.html"&gt;ruling&lt;/a&gt; against non-competes is interesting, not least because I've had one client who was more interested in a getting me to sign a specially crafted non-compete that he hoped to use in a lawsuit than in having me actually deliver work.&lt;/p&gt;  &lt;p&gt;Actually I'm not sure this ruling would even affect independent contractors like me; the view of employment law towards contractors (where it applies at all) is very different from that toward employees.&lt;/p&gt;  &lt;p&gt;This ruling may play a small role spurring innovation by making it easier for employees to quit and then &lt;a href="http://en.wikipedia.org/wiki/Shockley_Semiconductor_Laboratory"&gt;compete with their former employer&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I'm also hopeful that the newly prominent threat of such competition may encourage dysfunctional tech organizations to renew their efforts at achieving better group dynamics. (Is there such a thing as therapy for whole organizations? No, I don't mean those motivational or consulting clown-schools that involve offsites and create a distraction ... at least until the check is cashed.)&lt;/p&gt;  &lt;p&gt;In addition to the ominpresent threat that one's best employees might leave, there is now renewed emphasis on the fact that a group of them might well leave together and "do it right" if they can.&lt;/p&gt;  &lt;p&gt;While the ruling does not of course give anyone license to loot protected IP from the former company, history shows that's rarely the issue in Silicon Valley anyway.&lt;/p&gt;  &lt;p&gt;Every development manager should view this as a wake-up call to think about keeping the team on board.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-4919292681379581891?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/4919292681379581891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=4919292681379581891' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4919292681379581891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4919292681379581891'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/08/non-compete-ruling-may-indirectly-help.html' title='Non-compete Ruling May Indirectly Help Broken Organizations'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-492596666346830567</id><published>2008-08-13T20:17:00.000-07:00</published><updated>2008-08-13T20:17:00.607-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon'/><title type='text'>Format Shifting</title><content type='html'>&lt;p&gt;The dead-tree-publishing world is slowly starting to worry about online, possibly illegal, distribution of books. Not nearly enough to get smart about it though.&lt;/p&gt;  &lt;p&gt;To me, it seems brain-dead obvious that if I buy a paper copy of a book for anywhere from $20 to $50, I ought to be able to use an electronic copy. I don't know the law on this, but I don't have  pangs of conscience downloading a gray-market PDF of a book I've already bought, because the publisher wants to charge me again for an "&lt;a href="http://www.packtpub.com/article/eBook_bundle"&gt;e-book bundle&lt;/a&gt;" or because they make the content available in an annoying format.&lt;/p&gt;  &lt;p&gt;But that's just the tip of the blade. In a short while, things like Kindle &lt;a href="http://features.csmonitor.com/innovation/2008/08/12/kindle-e-book-beginning-to-catch-fire/"&gt;will take off&lt;/a&gt;, and the next generation -- motivated to leap in because of &lt;a href="http://www.boston.com/business/articles/2008/07/18/textbooks_free_and_illegal_online/"&gt;expensive textbooks&lt;/a&gt; -- will start assuming all books will be free.&lt;/p&gt;  &lt;p&gt;Publishers should be experimenting with their models right now in attempt to adapt.&lt;/p&gt;  &lt;p&gt;Here's one idea: the whole hardcover-softcover release cycle makes about as much sense as releasing a movie in the U.S. on Wednesday and not expecting it to be an xvid in homes in Thailand by Friday.&lt;/p&gt;  &lt;p&gt;I like paper books, but I don't like hardcover books for anything non-classic. They're overly large, awkward to carry, just plain silly. So what happens when a publisher releases a new book I want to read in hardcover? I'm not inclined to buy it -- heck if I wanted to carry the hardcover around I could just get it out of the library.&lt;/p&gt;  &lt;p&gt;I could download it as soon as someone puts it online, but I would want to print and bind it ... so I'd have to submit it as a print-on-demand job somewhere, hope they don't complain about the copyrighted material, and get it sent to me. I guess Kinko's is an option.&lt;/p&gt;  &lt;p&gt;Anyone else see the problem/opportunity here? &lt;/p&gt;  &lt;p&gt;For now, anyway, the hassle and cost of print-on-demand makes it a cost-neutral issue; I simply don't have the option getting a bound paper copy of the book for free. So given that I'm willing to -- and indeed must -- spend money to get the book, why won't the publisher sell it to me in the format I want?&lt;/p&gt;  &lt;p&gt;Publishers ought to be taking the risks and making the friends now, before e-book readers make a big dent in the marker. Otherwise, it will be game over soon enough. &lt;/p&gt;  &lt;p&gt;And before anyone suggests that the publishers play some critical role in blessing publications, I would point out that is just an artifact of the traditional physical distribution mechanism (paper, shelf space, etc.) ... the Internet already allows vastly more content than could be run through a press and tossed up at Borders. It's not all "good" ... but the net does a fine at creating search, moderation, and recommendation networks that allow one to find the good stuff, in a way that 3x5 "recommendation" cards tacked under a bookshelf at the local store cannot.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-492596666346830567?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/492596666346830567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=492596666346830567' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/492596666346830567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/492596666346830567'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/08/format-shifting.html' title='Format Shifting'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-3342104816357852058</id><published>2008-08-13T12:48:00.001-07:00</published><updated>2008-08-13T13:11:27.721-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='application model'/><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Rails and .Net Had One Thing in Common Before ASP.Net-MVC: Magic</title><content type='html'>&lt;p&gt;It's possible now to build a very Rails-like website via &lt;a href="http://www.asp.net/mvc/"&gt;ASP.Net MVC&lt;/a&gt;. And at RailsConf, John Lam showed IronRuby &lt;a href="http://www.iunknown.com/2008/05/ironruby-and-rails.html"&gt;starting to run&lt;/a&gt; Rails.&lt;/p&gt;  &lt;p&gt;But long before all this, these two very different platforms had one thing in common: "magic."&lt;/p&gt;  &lt;p&gt;By magic, I mean the sort of implicit, we-solve-problems-you-didn't-even-know-you-had kind of magic that makes it easy for people who don't know the details, don't want to know the details, or know but don't want to be bothered by the details to build an app.&lt;/p&gt;  &lt;p&gt;From ASP.Net's first iteration, where you could drop an item on a "web form," wire a server-side event handler, and talk to items on the page through a .Net server-side object interface, ASP.Net has been heavy on the magic. Rails has been the same way, from scaffolding up through ActiveRecord, you point Rails in the direction you want to go and it drives.&lt;/p&gt;  &lt;p&gt;Of course we all know about the leaky abstractions... in .Net, you used to get some funky HTML and Javascript, plus a server-based page lifecycle that didn't always match the model of what you wanted to do with the DOM. In Rails, we've seen perf issues, and discussions of the "worst practices" [&lt;a href="http://obiefernandez.com/presentations/obiefernandez-worstrailscode-railsconf2008_slides.pdf"&gt;pdf&lt;/a&gt;] that can result from letting the autopilot do too much and your brain too little when writing for Rails.&lt;/p&gt;  &lt;p&gt;But in any case -- as opposed to a framework like Django (which included a big feature push called &lt;a href="http://code.djangoproject.com/wiki/RemovingTheMagic"&gt;'removing the magic'&lt;/a&gt; to make functionality more explicit) -- Rails and .Net give you as much magic as they can.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-3342104816357852058?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/3342104816357852058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=3342104816357852058' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/3342104816357852058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/3342104816357852058'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/08/rails-and-net-had-one-thing-in-common.html' title='Rails and .Net Had One Thing in Common Before ASP.Net-MVC: Magic'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-1273455989797837675</id><published>2008-08-06T19:27:00.001-07:00</published><updated>2008-08-06T19:27:24.346-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>[How] Will Microsoft Weather a Perfect Storm?</title><content type='html'>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;Last week's article &lt;a href="http://abcnews.go.com/Business/IndustryInfo/story?id=5489335&amp;amp;page=1"&gt;What Is Microsoft So Afraid Of?&lt;/a&gt; is meant to be provocative ... but it is also real reporting. &lt;/p&gt;  &lt;p&gt;Thinking about the situation Microsoft is in, I believe the firm has, at a high level, quite a lot to be worried about ... a sort of perfect storm of high-level business trends, many of which transcend any individual product or feature. Big trends are harder to debug and then patch on Tuesdays.&lt;/p&gt;  &lt;p&gt;Here are the issues:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Declining importance of the desktop OS. As people spend more and more time in their browsers, the OS underneath it matters less. The trend is definitely toward more browser-based apps, even if they employ Flash or Silverlight or other acceleration &lt;a href="http://tech.slashdot.org/article.pl?sid=08/07/31/1752206"&gt;technologies&lt;/a&gt;. Offline support is moving slowly but together with cloud (&lt;a href="https://www.mesh.com/Welcome/Welcome.aspx"&gt;Mesh&lt;/a&gt;?) storage, will make the local filesystem less important. &lt;/li&gt;    &lt;li&gt;Rise of OS X as a real competitor -- between publicity, 'time to sink in,' and the decreasing premium that Apple charges for a Mac over a similarly equipped Dell/Acer/Toshiba laptop, OS X is a real and growing threat to Windows. &lt;/li&gt;    &lt;li&gt;Bill's off to &lt;a href="http://www.gatesfoundation.org/GlobalHealth/"&gt;save the world&lt;/a&gt;. For a while now, Bill has been the good cop (hey, stop laughing, I'm serious) to Steve Ballmer's bad cop. Now that Gates has retired to work on philanthropy, and Ballmer's the CEO, we're seeing more &lt;a href="http://wilshipley.com/blog/2008/07/mojave-experiment-bad-science-bad.html"&gt;dumb-ass bad-cop stuff like the Mojave experiment&lt;/a&gt;, and less brilliant product strategy. Microsoft needs a good cop to pair off with Steve. &lt;/li&gt;    &lt;li&gt;Vista failure. The .Net platform was one of the smartest, most successful things Microsoft has ever done, an enormous accomplishment that brought enterprise IT shops and other developers along. Following that up with Vista isn't just bad at the retail (license selling) level, it shakes enterprise confidence in MSFT, and ticks off developers. From a developer POV, most of the cool stuff in Vista was gutted, or moved somewhere else ... or never really worked very well (WPF), after years of build-up. Now MSFT desperately needs devs to buy into &amp;quot;the next thing,&amp;quot; and they're hesitant.&lt;/li&gt;    &lt;li&gt;Silverlight stuck in transition: Silverlight 2 is an awesome technology... but it has two problems: First, small penetration, unknown/unpublished penetration numbers, and no specific &lt;em&gt;numeric&lt;/em&gt; commitment by MSFT to create penetration on PCs. Second, folks are sceptical that Silverlight on Mac really has a future. If that's in doubt, it seriously impacts the choice to use Silverlight because of #2 above. I can say that I've already had more than one client interested in doing serious work on Silverlight 2, but they insist on installed base projections (not download numbers) to make the business decision, and I don't blame them. &lt;/li&gt;    &lt;li&gt;Rise of console gaming: PC gaming was always a key part of the &amp;quot;latest and greatest&amp;quot; PC/OS/component ecosystem, plus it helped press down Mac adoption. As consoles (including Microsoft's own Xbox 360) gain, this relative benefit of the Wintel client platform goes down... and yet MSFT still has to spend a ton on R&amp;amp;D if they intend to keep the PC gaming client (DirectX and hardware integration) decent. So less bang for the buck there. &lt;/li&gt;    &lt;li&gt;Rise of USB. Now that practically everything runs over USB, it's easier for device makers to offer &lt;a href="http://www.linux-usb.org/USB-guide/x173.html"&gt;Linux&lt;/a&gt;, &lt;a href="http://libusb.sourceforge.net/doc/intro-support.html"&gt;MacOS&lt;/a&gt;, etc. drivers (the upper layers can often be just user-space apps). So on the peripheral front there is less Windows differentiation in terms of hardware choices, and less lock-in. &lt;/li&gt;    &lt;li&gt;Reluctance to innovate with server licensing model. Most startups dream of going big, and they assume they'll do so on an open-source stack -- not because Windows Server isn't a killer product ... but because the current licensing for Server makes it a non-starter for cloud services or for architectures designed around cheap, flexible horizontal scaling. An easy fix is to add auditing to the core WMI counters and create a Windows Server SKU that costs $0 per CPU and $0 per client ... but to stay in compliance you average your ASP.net transaction count, or SQL size/complexity + operation count and then cut a license renewal check. Make it free (as in beer, with online-only support) for the first few thousand page views per month for a typical app, and it'll rapidly start taking over a big piece of the startup and cloud/on-demand computing world. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;All this said, big companies tend to have nine lives (even if Yahoo! seems intent on burning through all nine of them). So I'm not about to count Microsoft out, or suggest an &amp;quot;over-the-hill&amp;quot; tipping point is at hand. Just some big decisions, both strategic and tactical, that ought to be made well and soon.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-1273455989797837675?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/1273455989797837675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=1273455989797837675' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1273455989797837675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1273455989797837675'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/08/how-will-microsoft-weather-perfect.html' title='[How] Will Microsoft Weather a Perfect Storm?'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-223118144346580039</id><published>2008-08-02T15:43:00.001-07:00</published><updated>2008-08-02T15:43:57.396-07:00</updated><title type='text'>So What's the Deal With ... ?</title><content type='html'>&lt;ul&gt;   &lt;li&gt;... those tech videos where the topic sounds interesting but I have to watch 3 guys chat about it in real time for 45 minutes? Like I have nothing better to do than watch people talk? Give me the slide deck, the bullets, a transcript, something I can scan through and read, since I know it's going to take me 4 minutes max to sort through the content.&lt;/li&gt;    &lt;li&gt;... &lt;a href="http://www.10gen.com/"&gt;10gen&lt;/a&gt; and the folks that want to write yet another server computing platform ... in JavaScript, and then compete with Google using their $1.5 million in VC? Ever since Douglas Crockford schooled me in the true nature of JavaScript, I've had little bad to say about the language. But why yet another platform for server-side computing? 10gen's argument that Google's AppEngine is too closed and locks apps in seems like a stretch: you can run Python/Django apps on AppEngine ... or somewhere else. Yes, the Google data API is their own, but it's simpler than a relational database API -- if you really need to use Google's data API over your own data store, it won't be hard to set up. There's also Rails, which is open and has the advantage (over 10gen) of being well known already ... If you don't think Rails can work as a cloud platform, talk to &lt;a href="http://www.heroku.com"&gt;Heroku&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;... Symbian's S60 emulator triggering &lt;a href="http://en.wikipedia.org/wiki/Data_Execution_Prevention"&gt;DEP&lt;/a&gt; faults, so that Windows has to kill it? I can imagine how one might, when writing an emulator, run afoul of DEP ... But this is my first run-in with an app fatally triggering it, and I've already used Microsoft's device emulators, Palm's emulators, VMWare, and Sun's xVM VirtualBox (a VM is not the same as an emulator ... but some parts of the VM function via emulation) ... and had no problems. &lt;/li&gt;    &lt;li&gt;... all the enmity toward Windows from the Rails guys? First, Ruby and Rails run fine on Windows, there's no need for all the &amp;quot;we specifically won't say anything about working on Windows, I mean, if you're crazy enough to want to do that&amp;quot; stuff that &lt;em&gt;keeps&lt;/em&gt; popping up in otherwise respectable &lt;a href="http://www.amazon.com/gp/product/0321445619"&gt;books&lt;/a&gt;. Second, many (most?) of the top Rails hackers are so young, they probably don't even remember Microsoft's &lt;em&gt;real&lt;/em&gt; &amp;quot;bad old days.&amp;quot; Yes, Microsoft has done some shady things worth complaining about. The fact that IE 7 doesn't render your CSS the way you wanted is not one of them.&lt;/li&gt;    &lt;li&gt;... those posts where an unknown wantrepreneur with no valley connections or financing seeks a successful, experienced, genius hacker to build his mediocre but top secret idea for equity only? The posts crop up constantly on craigslist and all the SF tech meetup mailing lists. If this kind of post represents your thought process, why not just skip &lt;a href="http://en.wikipedia.org/wiki/Underpants_Gnomes"&gt;step 1 and 2&lt;/a&gt;, and post for people to send you a burlap sack full of cash?&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/26260493-223118144346580039?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/223118144346580039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=223118144346580039' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/223118144346580039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/223118144346580039'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/08/so-what-deal-with.html' title='So What&amp;#39;s the Deal With ... ?'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-4301330218972435006</id><published>2008-07-24T15:05:00.000-07:00</published><updated>2008-07-24T15:58:53.580-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><title type='text'>No, CherryPal Will Not be the First (or any) Mass-Market Cloud Computer</title><content type='html'>&lt;p&gt;Notwithstanding &lt;a href="http://venturebeat.com/2008/07/21/will-cherrypal-be-the-first-mass-market-cloud-computer/"&gt;this predictable VentureBeat article&lt;/a&gt; about a thin-client device with a somewhat anatomically &lt;a href="http://venturebeat.com/wp-content/uploads/2008/07/cherrypal.jpg"&gt;suggestive logo&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I've previously written about &lt;a href="http://skipmeamadeus.blogspot.com/2008/06/in-blue-trunks-skyfire-and-isps-in-red.html"&gt;why thin-client is a not-now and not-soon solution&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The $249 "CherryPal" box reminded me of another twist on the problem ... one that comes into play when the thin client isn't just software (like Skyfire's screen-scraping browser) but a new hardware device.&lt;/p&gt;  &lt;p&gt;See, here's the thing about building your own new hardware in smallish quantities: it's really expensive on a per-unit basis. Or, another way, you can't offer a fraction of the capability per dollar that a Dell or Sony can. Your $249 thingamabob is going up against other $249 devices that have way more stuff (e.g., entire laptops) because they are produced in high-volume orders of established designs/modules/parts.&lt;/p&gt;  &lt;p&gt;To be more precise, there is a spreadsheet you can put together that maps your bill of materials, plus any special physical design issues into a cost per fabricated unit. It includes multipliers that will make you sad, like your $2 can't-live-without-it chip might end up adding $20 to the finished product cost... depending on where it fits in, affects other parts, quantities, and other stuff.&lt;/p&gt;  &lt;p&gt;It's tempting though, especially since the last 5-10 years have brought the ability to fabricate in China for lower cost &lt;strong&gt;&lt;em&gt;and&lt;/em&gt;&lt;/strong&gt; in much smaller quantities than would have been practical before. (Of course the costs aren't really lower, they're just externalized into a bunch of other areas ... but those are politics/economics/policy areas more than tech, so I'll leave them be for now.)&lt;/p&gt;  &lt;p&gt;So, whereas before you might have needed to sell 700,000 units to break even on something, now 20,000 units will do it: increased temptation.&lt;/p&gt;  &lt;p&gt;But if you're CherryPal, you still need to convince someone that a $249 thin-client is more useful than a $299 laptop with 10x the horsepower, a screen, storage, and all the rest.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-4301330218972435006?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/4301330218972435006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=4301330218972435006' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4301330218972435006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4301330218972435006'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/07/no-cherrypal-will-not-be-first-or-any.html' title='No, CherryPal Will Not be the First (or any) Mass-Market Cloud Computer'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-6401027724252226633</id><published>2008-07-23T13:10:00.001-07:00</published><updated>2008-07-23T17:44:21.447-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Free Idea: AJAX Desktop Publishing App</title><content type='html'>&lt;p&gt;If you're hankering to join the web startup circus and have everything but an idea, here's one for you: a full-on desktop publishing app ... online. The ready acquisition market for decent online productivity apps can serve as inspiration, even as the insane complexity of the undertaking urges you on toward greater heights of caffeination and maybe some anti-depressants.&lt;/p&gt;  &lt;p&gt;Seriously, apps that can deal with complex page layouts and can produce a variety of press-ready output (&lt;a href="http://www.adobe.com/products/indesign/"&gt;InDesign&lt;/a&gt;, &lt;a href="http://8.quark.com/"&gt;QuarkXPress&lt;/a&gt;) are expensive and hard to learn, and the average person rarely needs them. It would be nice to be able to hop on a web page and do a quick design. Wizards or integrated help could go a long way. All the usual business models (adds, freemium, pay-per-storage, etc.) apply.&lt;/p&gt;  &lt;p&gt;Now, if you build this in Flash/Flex or in Silverlight (2.0), you merely have a ton of work ahead of you. While challenging, you may feel like you're not ... well ... proving just how wicked you really are, since those two platforms give you all of the technical infrastructure you need.&lt;/p&gt;  &lt;p&gt;So why not go all the way? Do it in JavaScript, in the browser. Yep, WYSIWYG, arbitrary page sizes and layouts, in the browser. Advanced typography too. Fun times.&lt;/p&gt;  &lt;p&gt;Here's a hint: one of the tricky bits is measuring text line layouts, since you'll need to make sure that the view matches the backing data (from which you will be generating other "views" or output formats).&lt;/p&gt;  &lt;p&gt;JavaScript (the browser APIs really) don't give you everything you'd like. For example, one standard thing you need is to find out how many characters will lay out into a column of a &lt;a href="http://java.sun.com/docs/books/tutorial/2d/text/measuringtext.html"&gt;particular width&lt;/a&gt;. Or simply &lt;a href="http://msdn.microsoft.com/en-us/library/system.drawing.graphics.measurestring.aspx"&gt;what size&lt;/a&gt; a run of text will turn out to be.&lt;/p&gt;  &lt;p&gt;While you can't ask these things directly, the &lt;a href="http://developer.mozilla.org/en/docs/DOM:element.clientHeight"&gt;clientHeight&lt;/a&gt; DOM element property can be useful: it shows the actual height that a DIV's content will lay out at ... so it will also signal when content has flowed from one line into a second line. By hiding the DIV, rigging up a while loop, and monkeying with the content (string), you can build a routine that measures text, so that you know exactly which characters are going to appear on a line.&lt;/p&gt;  &lt;p&gt;Completing the application is left as a (possibly lucrative) exercise for the reader.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-6401027724252226633?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/6401027724252226633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=6401027724252226633' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6401027724252226633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6401027724252226633'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/07/free-idea-ajax-desktop-publishing-app.html' title='Free Idea: AJAX Desktop Publishing App'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-4849250679854079773</id><published>2008-07-21T17:28:00.001-07:00</published><updated>2008-07-21T17:28:56.483-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='office integration'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Packaging Outlook Scripts in Word Documents</title><content type='html'>&lt;p&gt;Microsoft Office includes (unless you exclude it at install time) a flavor of &lt;a href="http://en.wikipedia.org/wiki/Visual_Basic_for_Applications"&gt;ye olde Visual Basic&lt;/a&gt; (i.e. VB-COM not VB.Net) that is designed to facilitate Office automation.&lt;/p&gt;  &lt;p&gt;If you're willing to put up with the VB syntax and conventions, you can put together mini-programs (including GUIs, menu options, toolbar buttons, etc. if you like) in even less time than it would take to boot up Visual Studio and run the Office add-in wizard or add some Office .Net assembly references.&lt;/p&gt;  &lt;p&gt;Interestingly, distributing the resultant &amp;quot;macros&amp;quot; can be tricky... &lt;a href="http://www.outlookcode.com/article.aspx?id=28"&gt;especially for Outlook&lt;/a&gt;. There are all sorts of suggestions depending on how widely you want to deploy your script, and how many &amp;quot;Are you really really sure you want to run this script?&amp;quot; dialogs you expect your end users to click through. Some of the approaches are quite hokey... for example copying over a client script file that will &lt;a href="http://www.outlookcode.com/threads.aspx?forumid=2&amp;amp;messageid=23426"&gt;delete&lt;/a&gt; any other macros your user has. Eeesh.&lt;/p&gt;  &lt;p&gt;It's possible that .vbs files and Windows Scripting Host are actually the &amp;quot;right&amp;quot; answer ... but here's another I used: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Write and debug your Outlook scripts in Outlook using the built-in VBS IDE. &lt;/li&gt;    &lt;li&gt;Copy the bits you need into the dev environment in Word (this assumes your user has Word, and I'm guessing if they run Outlook they probably run Word as well). &lt;/li&gt;    &lt;li&gt;Save the word document as a word-doc-with-executable-content (*.docm). Even if you haven't defined any GUI elements, any quick and dirty VB procedures you've written will show up as macros in the View-&amp;gt;Macro dialog. &lt;/li&gt;    &lt;li&gt;Bonus: write any instructions you'd like to pass along right in the word doc. &lt;/li&gt;    &lt;li&gt;Give the file to your users. &lt;/li&gt;    &lt;li&gt;COM-based scripting is COM-based scripting, so even though a user runs the macro in a Word doc, it can find and manipulate their Outlook items. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Not to worry, Word (and Outlook) prompt the heck out of the users when they open and try to run the code. And saying yes to your file will not require the user to grant access to any other script-bearing files.&lt;/p&gt;  &lt;p&gt;It's not the slickest procedure in the world, but it's wicked fast and it serves the basic scripting purpose: &lt;a href="http://www.box.net/shared/jybc9p544g"&gt;Here's&lt;/a&gt; a doc with a script I wrote to convert Outlook notes into a single Task item for syncing with my Windows Mobile notes app.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-4849250679854079773?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/4849250679854079773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=4849250679854079773' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4849250679854079773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/4849250679854079773'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/07/packaging-outlook-scripts-in-word.html' title='Packaging Outlook Scripts in Word Documents'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-1924048944070645956</id><published>2008-07-18T16:55:00.001-07:00</published><updated>2008-07-18T16:55:33.038-07:00</updated><title type='text'>Pardon the Glare: I Think My Tinfoil Hat is Catching the Sun</title><content type='html'>&lt;p&gt;Last week, it became clear that Kevin Martin and the FCC are &lt;a href="http://www.washingtonpost.com/wp-dyn/content/article/2008/07/11/AR2008071102917.html"&gt;getting closer to laying the smackdown&lt;/a&gt; on Comcast for the ISP's BitTorrent &amp;quot;management&amp;quot; policies (or was it because Comcast keeps &lt;a href="http://www.savetheinternet.com/blog/2008/07/09/what-comcast-wants/"&gt;lying&lt;/a&gt; about it? or because Comcast has tried to &lt;a href="http://www.guardian.co.uk/commentisfree/2008/jul/16/internet.cablewirelessbusiness?gusrc=rss&amp;amp;feed=networkfront"&gt;game the hearings&lt;/a&gt; about it? so hard to keep track of now).&lt;/p&gt;  &lt;p&gt;And now all of a sudden I'm getting 4x more BitTorrent throughput on my Comcast cable line than I ever did before.&lt;/p&gt;  &lt;p&gt;I'm tempted to imagine a connection.&lt;/p&gt;  &lt;p&gt;But I also suspect that positing a connection is tinfoilhattery on my part ... in particular because the bandwidth/connection patterns I see don't look like the &lt;a href="http://www.eff.org/wp/packet-forgery-isps-report-comcast-affair"&gt;TCP reset packet approach&lt;/a&gt; that Comcast had been using, and which &lt;a href="http://www.eff.org/wp/detecting-packet-injection"&gt;gave them away&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;I'm getting more throughput in the middle of transfers, where there had never been any resets. &lt;/p&gt;  &lt;p&gt;So maybe I should just be happy.&lt;/p&gt;  &lt;p&gt;Or maybe that's just how Comcast &lt;em&gt;wants me to feel&lt;/em&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-1924048944070645956?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/1924048944070645956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=1924048944070645956' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1924048944070645956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/1924048944070645956'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/07/pardon-glare-i-think-my-tinfoil-hat-is.html' title='Pardon the Glare: I Think My Tinfoil Hat is Catching the Sun'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-6814086091762321006</id><published>2008-07-17T12:57:00.001-07:00</published><updated>2008-07-17T12:57:04.955-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='open'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>On the Other Hand...</title><content type='html'>&lt;p&gt;Yesterday I &lt;a href="http://skipmeamadeus.blogspot.com/2008/07/iphone-app-store-let-hope-it-not-all.html"&gt;wrote&lt;/a&gt; about the potential of the iPhone to break the longstanding wireless app logjam in the U.S.&lt;/p&gt;  &lt;p&gt;Today the Free Software Foundation &lt;a href="http://www.fsf.org/blogs/community/5-reasons-to-avoid-iphone-3g"&gt;blogs about the other logjam&lt;/a&gt; we might be getting into with the device, namely that the app development and publishing community is just as locked down and controlled as the DRM on iTunes tracks. Wait, actually the app side is even more locked down (since there's a low-tech path to extract songs by way of audio CDs, whereas the app infrastructure requires jailbreak).&lt;/p&gt;  &lt;p&gt;I'm curious whether this passage from the FSF post will have the fanboys plugging their ears and whining &amp;quot;I can't hear you&amp;quot; or just shrugging their shoulders and saying &amp;quot;who cares&amp;quot;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;quot;Apple, through its marketing and visual design techniques, is manufacturing an illusion that merely buying an Apple makes you part of an alternative community. But the technology they use is explicitly chosen to divide people into separate digital cells, and to position Apple as sole warden. When your business depends on people paying for the privilege of being locked up, the prison better look and feel luxurious, and the bars better not be too visible.&amp;quot;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;If not a prison, it's still a walled garden. Like Verizon's mobile app vending machine (odd are you've never even hard of that one) or the old America Online. Maybe it can work, but there are better alternatives.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-6814086091762321006?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/6814086091762321006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=6814086091762321006' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6814086091762321006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/6814086091762321006'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/07/on-other-hand.html' title='On the Other Hand...'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-7468360271352669098</id><published>2008-07-16T15:44:00.001-07:00</published><updated>2008-07-16T18:35:49.535-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='smartphone'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>iPhone App Store: Let's Hope It's Not All Fun and Games</title><content type='html'>&lt;p&gt;The iPhone phenomenon seems to be a kind of Rorschach test, where you can find whatever you're looking for ... &lt;/p&gt;  &lt;p&gt;There are all sorts of posts on data from the App store, looking at, for example, &lt;a href="http://www.techcrunch.com/2008/07/15/free-apps-no-longer-dominating-iphone-app-store/"&gt;pricepoints in the app catalog&lt;/a&gt;, or the kinds of apps available.&lt;/p&gt;  &lt;p&gt;These data are far from perfect (though &lt;a href="http://www.medialets.com/app-store-metrics/"&gt;worth a look&lt;/a&gt;), and in any case I hope that &lt;a href="http://venturebeat.com/2008/07/16/fun-nearly-half-of-all-the-iphone-app-store-apps-are-games-or-entertainment/"&gt;VentureBeat's post on the prevalence of Game and Entertainment&lt;/a&gt; apps turns out to be wrong.&lt;/p&gt;  &lt;p&gt;Why? Mobile apps and mobile net usage have been waiting to "break out" in the U.S. for nearly 10 years. It's tempting to agree with the sentiment that mobile &lt;a href="http://searchengineland.com/080716-082633.php"&gt;net use is reaching critical mass&lt;/a&gt; thanks to iPhone, but everyone in the industry has made that mistake many times before.&lt;/p&gt;  &lt;p&gt;Successful off-deck software on phones in the U.S. has been more or less limited to games. So when I read the headline "Fun! Nearly half of all the iPhone App Store apps are games or entertainment," all I could think was "let's hope that it doesn't stay that way!"&lt;/p&gt;  &lt;p&gt;I have no problem with Super Monkey Ball per se. It's just that if all the top app activity is in games and entertainment, then the mass psychology around the iPhone / App Store ecosystem is in danger of slipping irretrievably in the direction of "diversion" and not the enormous opportunity it really is.&lt;/p&gt;  &lt;p&gt;Before you say I should just chill out about the Monkey Ball, consider:&lt;/p&gt;  &lt;p&gt;Blackberry, because of its email device pedigree, was pigeonholed as a "corporate email/organizer device" years ago, even though it could do many other things. Despite RIM's attempt to sex up the brand, boost the hardware, cut prices and improve the design, it looks now like the window is closing for RIM to make any big gains. The enormous deployed base of Blackberries never translated into a general platform for mobile net-based computing.&lt;/p&gt;  &lt;p&gt;At the moment, all of the top 10 -- and 18 of the top 20 -- paid App Store apps (over the last 24 hours) are Game/Entertainment apps. So right now, when the frenzy is at a peak, with mass media coverage of sold-out stores and consumers showing acquaintances their hot new gadget, the eyeballs are on the Super Monkey Balls.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;To a lot of people, who have never seen a 3rd-party app on a phone, and who don't totally get what this is all about, the demonstration is going to look more like a Nintendo DS than a handheld computer.&lt;/p&gt;  &lt;p&gt;Which raises a possibility: perhaps Apple was wise to restrict iPhone 1.0 to Safari-based apps, thus forcing consumers to view the device as a mini-web-tablet, rather than as a portable entertainment device.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-7468360271352669098?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/7468360271352669098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=7468360271352669098' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7468360271352669098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/7468360271352669098'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/07/iphone-app-store-let-hope-it-not-all.html' title='iPhone App Store: Let&amp;#39;s Hope It&amp;#39;s Not All Fun and Games'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-8158705611600772381</id><published>2008-07-16T10:48:00.001-07:00</published><updated>2008-07-16T12:04:48.887-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='process'/><category scheme='http://www.blogger.com/atom/ns#' term='culture'/><category scheme='http://www.blogger.com/atom/ns#' term='project management'/><category scheme='http://www.blogger.com/atom/ns#' term='refactoring'/><title type='text'>Refactoring: Bittersweet if it Could Easily Have Been Avoided</title><content type='html'>&lt;p&gt;I've been doing some refactoring on a decent sized app lately. Since there are lots of other people doing stuff and the app is close to a supported 1.0 release, it's like working on the engine of a car while it's cruising down the freeway. Not just tightening the cap on the coolant reservoir, more like converting the engine to run on hemp seed oil and corn cobs instead of gasoline.&lt;/p&gt;  &lt;p&gt;On one hand, it's fun: mundane tasks that might feel academic become a lot more interesting when the task is part of the Rubik's cube of after-the-fact architectural change.&lt;/p&gt;  &lt;p&gt;On the other hand, a lot of the refactor is an attempt to deal with unnecessary complexity in less complex way. The underlying complexity -- not mediocre code or an initial pass at red-green development -- is really the enemy.&lt;/p&gt;  &lt;p&gt;And here's the rub: this app has some network protocol requirements that are (1) outrageously baroque; (2) opaque and undocumented; and (3) completely unnecessary for the app to function for its users.&lt;/p&gt;  &lt;p&gt;As a result, it's already eaten over 120 man-months (and a staggering amount of money, let's just say over 8x what you're probably thinking the labor cost was).&lt;/p&gt;  &lt;p&gt;At least 2/3 of that time and money (maybe 75%) went to nothing the user will ever see or care about, and nothing that offers any inherent business value or competitive advantage for the owner. That 2/3 is all expended in dealing with the bizarro protocol requirements ... and the issues and complexity it spawns: the design compromises, the testing, the bug analysis and remediation, the refactoring. I'm not even counting the actual delays and feature cuts in this cost.&lt;/p&gt;  &lt;p&gt;Where did I get the 2/3 number? Well, the project was initially scoped without this network protocol issue. The estimates were written down. And, in the initial iteration -- about 30 man-months of work over 5 calendar months -- we tracked resource usage and found that core functionality and QA was reliably 1/3 and closely matched the estimates, while accommodating these "other" issues was 2/3. Week in, week out. No surprises. Things haven't changed since.&lt;/p&gt;  &lt;p&gt;It's ironic because this pattern is something that often comes up when developing against a true legacy system -- the formats, protocols, and systems in place simply cannot be changed right away for the convenience (or productivity) of a new team. And yet this initiative was green-field, not legacy. It could have used any protocol in the world. There was 0 (&lt;strong&gt;zero&lt;/strong&gt;) install base that needed compatibility with this particular system.&lt;/p&gt;  &lt;p&gt;I almost wish I didn't know this information ... It's the one thing that puts a real damper on the refactoring fun: knowing that with even a tiny bit of management planning and the willingness to deal with &lt;a href="http://skipmeamadeus.blogspot.com/2007/08/in-small-company-nih-is-just-paranoia.html"&gt;team issues&lt;/a&gt;, it would be unnecessary.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-8158705611600772381?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/8158705611600772381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=8158705611600772381' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8158705611600772381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/8158705611600772381'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/07/refactoring-bittersweet-if-it-could.html' title='Refactoring: Bittersweet if it Could Easily Have Been Avoided'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-3091931082664846867</id><published>2008-07-05T16:50:00.000-07:00</published><updated>2008-07-05T16:52:26.076-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='atom'/><category scheme='http://www.blogger.com/atom/ns#' term='microbogging'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><category scheme='http://www.blogger.com/atom/ns#' term='authenticated feed'/><category scheme='http://www.blogger.com/atom/ns#' term='rss'/><title type='text'>Yet Another Microblogging App ... With a Twist</title><content type='html'>&lt;p&gt;Fun as it is to argue about whether the latest Twitter outage will be the death of it, or whether identi.ca has legs, there's a whole other world of RSS/Microblogging possibilities that hasn't been exploited. Unfortunately, as I'll describe in a bit, there's a reason for that ... and an implicit call to action to fix it.&lt;/p&gt;  &lt;p&gt;Microblogging -- or, really, the feed-oriented delivery mechanism -- could be huge for all kinds of private-domain problems that are stuck in Web 1.0 mode of e-mail updates and web-page dashboards.&lt;/p&gt;  &lt;p&gt;Whether it's a group trip; a job search (that my good friends but not my coworkers know about); the latest status on project, issue, or change request; whether my cat is in or out (neighbor cats beware!); what my son is up to; a surprise party ... and on and on ... there are microblogging feeds I'd like to publish and consume, that are not public. They are not 1-1 either. They are published to a group. I trust members of that group, and they can bring in others. Perhaps many people can update or write to the feed as well.&lt;/p&gt;  &lt;p&gt;Seems awfully useful in personal and professional contexts. But there's no app that exactly does this right now. The closest things are Tumblr's "groups" -- which are cool, but don't offer feeds -- and FriendFeed's "rooms" -- which are also cool, but don't offer authenticated feeds.&lt;/p&gt;  &lt;p&gt;So I hacked together an app during a few spare hours one weekend to do what I wanted.&lt;/p&gt;  &lt;p&gt;You can try it if you like at &lt;a href="http://www.statusmonster.com/"&gt;http://www.statusmonster.com&lt;/a&gt; or its real location, &lt;a href="http://stat.heroku.com/"&gt;http://stat.heroku.com&lt;/a&gt; (have I mentioned how totally freaking awesome heroku is? well, that's a post for another day, but take me word for it, they are ninja rockstars those guys).&lt;/p&gt;  &lt;p&gt;This app makes it super easy to create a multitude of private RSS (atom, really) status feeds, and share them with people. It has a mini-dashboard to watch the latest on a bunch of feeds. But I'm thinking folks don't need Yet Another Web Page to visit all the time. They need authenticated feeds, which statusmonster offers.&lt;/p&gt;  &lt;p&gt;Wow, I'm gonna get rich and famous.&lt;/p&gt;  &lt;p&gt;No, I'm not.&lt;/p&gt;  &lt;p&gt;Here's the problem:&lt;/p&gt;  &lt;p&gt;If a feed is not authenticated (like the basic feeds from statusmonster, or the "room" feeds at FriendFeed) then midstream aggregators like Bloglines or NewsGator may index these feeds for search, and/or offer them to others for subscription. This is the essential difference between syndication and publication -- a.k.a. the answer to, "Hey, how is a blog different from a homepage?" This is great for my blog, but really bad for my candid job search notes.&lt;/p&gt;  &lt;p&gt;Ok, so we'll offer authenticated feeds. According the Bloglines FAQ, for example, authenticated feeds are not indexed for search or exposed to other users.&lt;/p&gt;  &lt;p&gt;I did that, and started trying it out with NewsGator's desktop and mobile products, Outlook's RSS reader, Bloglines, Google Reader, etc.&lt;/p&gt;  &lt;p&gt;The power of feeds lies in the fact that the end user gets to decide how to consume and/or process the content. That is, to get the full power/potential of feeds, they need to work with pretty much every major reader/aggregator service.&lt;/p&gt;  &lt;p&gt;And that's where the trouble starts. Reading authenticated feeds with readers is a completely hit-and-miss affair.&lt;/p&gt;  &lt;p&gt;The best behavior I found actually came from Outlook 2007, which not surprisingly treats the feed almost as an email account. It takes your credentials one time, and then when it polls -- or when you click "send/receive" -- it supplies them behind the scenes and updates the view of read/unread items. Pretty much exactly what you want.&lt;/p&gt;  &lt;p&gt;But it was all downhill from there.&lt;/p&gt;  &lt;p&gt;Bloglines processed my authenticated feed, but seemed to take forever to reflect updates (much longer than other feeds), and it eventually lost sync with the backing feed. The feed still exists, same location, same credentials, but eventually Bloglines started showing its little "[!]" marker meaning "problem with feed" and never updated again.&lt;/p&gt;  &lt;p&gt;NewsGator kind of half worked. Google reader doesn't do authenticated feeds. And so on down the line.&lt;/p&gt;  &lt;p&gt;So doing all this cool stuff on the existing infrastructure is not gonna happen. Big bummer because I'm convinced there's major value in these use cases, so we need to figure out how to make them a reality in a way people can actually use (and will want to use).&lt;/p&gt;  &lt;p&gt;What are the constraints?&lt;/p&gt;  &lt;p&gt;We don't need super end-to-end crypto any more than email does. Most folks do their email in the clear, figuring the content is not top secret, but also assuming that their employer/ISP/email provider is not gonna go and publish the email in a Google-able way.&lt;/p&gt;  &lt;p&gt;I think that's the standard we're aiming for -- basically a better way to do stuff that nowadays might be handled by a whole lot of one-to-many emails.&lt;/p&gt;  &lt;p&gt;A set of standards around handling authenticated feeds might be all we need. But how to enforce that, since anyone can cook up their own aggregator and ignore the standards?&lt;/p&gt;  &lt;p&gt;Force the user agent (browser or client app) to supply some kind of secret to decode the feed? Maybe, but this is only strong in proportion to the strength of the key material, and having lots of high-entropy key material per feed makes this cumbersome and hard to use.&lt;/p&gt;  &lt;p&gt;Something about confidential and syndication don't really mix. But we don't need another walled garden email/messaging system, and we don't need more web pages to visit (like Tumblr's groups).&lt;/p&gt;  &lt;p&gt;I'm working on it. Meantime, what do you think?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-3091931082664846867?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/3091931082664846867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=3091931082664846867' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/3091931082664846867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/3091931082664846867'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/07/yet-another-microblogging-app-with.html' title='Yet Another Microblogging App ... With a Twist'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26260493.post-2990820871561039719</id><published>2008-07-04T15:51:00.001-07:00</published><updated>2008-07-04T15:51:42.939-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='process'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>When Corner Cases Attack</title><content type='html'>&lt;p&gt;Notwithstanding the credit given to MTV's &lt;em&gt;Real World&lt;/em&gt;, I think reality TV took off with that Fox special that featured a deer knocking a hunter on his rear. That guy just never saw it coming.&lt;/p&gt;  &lt;p&gt;Same thing seems to happen too often when we start making architectural adjustments around a corner case in a software application. &lt;/p&gt;  &lt;p&gt;The real problem is how to tell when an exception to the initial model -- the corner case or edge case -- is truly a strange bird, versus when it is a big piece of the model that was missed the last time through. &lt;/p&gt;  &lt;p&gt;Sounds like something that &lt;em&gt;should be&lt;/em&gt; easy to resolve with proper analysis, whether of the thick-stack-of-paper variety, OO variety, or an agile story-based style.&lt;/p&gt;  &lt;p&gt;But it's not.&lt;/p&gt;  &lt;p&gt;I've recently been doing some work on a project where this mistake was made. At some point in the past, this team looked at an odd duck, thought hard, and realized it was a big piece of their world. Big enough that the underlying infrastructure -- database, network services, etc. -- should be designed with sufficient generality that this corner case would become a mainstream case.&lt;/p&gt;  &lt;p&gt;I understand how the analysis went, and why it made sense. &lt;/p&gt;  &lt;p&gt;Only problem is, with 20/20 hindsight we can now see it was wrong. Bringing this edge case into the tent made the system an order of magnitude more complex, and it should have been left as an odd hack in a dozen places ... but as development happened over time, on several different module teams, the problem of the added complexity wasn't clear until it was too late.&lt;/p&gt;  &lt;p&gt;To be a little more specific, I'll offer an analogy: you're writing a driving game or simulation. A big part of the fun is the spots where the players catch air, jumping their vehicles over obstacles to get ahead. But how to model the behavior of the cars as they fly through the air? A quick hack? or ... integrating elements of flight simulation or 3-D physics simulation?&lt;/p&gt;  &lt;p&gt;Well, this team went the equivalent of the flight simulator route, and their hard-enough-to-code 2-D driving game has become a brutal 3-D simulation. All for a few jumps that in retrospect should have been hacked.&lt;/p&gt;  &lt;p&gt;My point is not to complain about a historical decision that probably didn't seem bad given the info available at the time. It's to ask about how to avoid these problems in the future.&lt;/p&gt;  &lt;p&gt;If you grant my assertion that, in some cases, no straightforward analysis reveals the problem at the moment the &amp;quot;how do we handle this case?&amp;quot; question is asked, then it seems like we need a set of milestones for &lt;em&gt;a posteriori&lt;/em&gt; analysis. &lt;/p&gt;  &lt;p&gt;We make a design call when we need to make a call, and then we need some specific questions -- and times or situations to ask them -- that will tell us if we're on the right track.&lt;/p&gt;  &lt;p&gt;Specifically: What is the best and earliest way to ascertain if we're&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;monkeyhacking in an edge case that really demands a proper refactor     &lt;br /&gt;&lt;strong&gt;&lt;em&gt;OR&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;doing a refactor that &lt;em&gt;way&lt;/em&gt; overengineers a solution that really just needs a monkeyhack&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;What do you think?&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26260493-2990820871561039719?l=skipmeamadeus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skipmeamadeus.blogspot.com/feeds/2990820871561039719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26260493&amp;postID=2990820871561039719' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2990820871561039719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26260493/posts/default/2990820871561039719'/><link rel='alternate' type='text/html' href='http://skipmeamadeus.blogspot.com/2008/07/when-corner-cases-attack.html' title='When Corner Cases Attack'/><author><name>Adam</name><uri>http://www.blogger.com/profile/01882993823597457057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://farm2.static.flickr.com/1041/1000263670_f91c3e50d7_m_d.jpg'/></author><thr:total>1</thr:total></entry></feed>
