<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>techno.blog("Dion")</title><link>http://almaer.com/blog</link><description>blogging about life, the universe, and everything tech</description><language>en</language><lastBuildDate>Thu, 02 Sep 2010 15:12:41 PDT</lastBuildDate><generator>http://wordpress.org/?v=2.8.4</generator><sy:updatePeriod xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">hourly</sy:updatePeriod><sy:updateFrequency xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">1</sy:updateFrequency><feedburner:info uri="dion" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><image><link>http://creativecommons.org/licenses/by-nc-sa/2.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://almaer.com/blog/index.xml" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Falmaer.com%2Fblog%2Findex.xml" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Falmaer.com%2Fblog%2Findex.xml" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Falmaer.com%2Fblog%2Findex.xml" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://almaer.com/blog/index.xml" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Falmaer.com%2Fblog%2Findex.xml" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Falmaer.com%2Fblog%2Findex.xml" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Falmaer.com%2Fblog%2Findex.xml" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.</feedburner:browserFriendly><item><title>Onerous terms</title><link>http://feedproxy.google.com/~r/dion/~3/nHOk7ioF4LQ/onerous-terms</link><category>Apple</category><category>Facebook</category><category>Tech</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dion</dc:creator><pubDate>Thu, 02 Sep 2010 14:19:13 PDT</pubDate><guid isPermaLink="false">http://almaer.com/blog/?p=2760</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a href="http://news.cnet.com/8301-13579_3-20015402-37.html#ixzz0yPR6iZTR">Steve Jobs</a> on <a href="http://kara.allthingsd.com/20100902/facebook-blocked-api-access-to-ping-after-failure-to-strike-agreement-so-apple-removed-feature-after-launch/">Ping and Facebook</a>:</p>
<blockquote><p>
Facebook wanted &#8220;onerous terms that we could not agree to.&#8221;
</p></blockquote>
<p>but when I read this, in another time I was reading about other Onerous silly terms:</p>
<p><a href="http://twitter.com/ID_AA_Carmack/status/22739785428"><img src="http://almaer.com/blog/uploads/carmackterms.png" alt="carmack onerous terms" title="carmack onerous terms" width="460" class="alignnone size-full wp-image-2761"></a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dion?a=nHOk7ioF4LQ:caG7R3GXp6c:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/dion?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=nHOk7ioF4LQ:caG7R3GXp6c:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/dion?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=nHOk7ioF4LQ:caG7R3GXp6c:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/dion?i=nHOk7ioF4LQ:caG7R3GXp6c:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=nHOk7ioF4LQ:caG7R3GXp6c:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/dion?i=nHOk7ioF4LQ:caG7R3GXp6c:V_sGLiPBpWU" border="0"></img></a>
</div>]]></content:encoded><description>Steve Jobs on Ping and Facebook:

Facebook wanted &amp;#8220;onerous terms that we could not agree to.&amp;#8221;

but when I read this, in another time I was reading about other Onerous silly terms:</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://almaer.com/blog/onerous-terms/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://almaer.com/blog/onerous-terms</feedburner:origLink></item><item><title>Node is our turtle shell; Node.js now powers services on webOS</title><link>http://feedproxy.google.com/~r/dion/~3/eJe3lWpJDk8/node-is-our-turtle-shell-node-js-now-powers-services-on-webos</link><category>JavaScript</category><category>Mobile</category><category>Open Source</category><category>Palm</category><category>Tech</category><category>webOS</category><category>node</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dion</dc:creator><pubDate>Tue, 31 Aug 2010 11:25:14 PDT</pubDate><guid isPermaLink="false">http://almaer.com/blog/?p=2754</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a href="http://www.flickr.com/photos/lucbyhet/4758217409/"><img src="http://almaer.com/blog/uploads/ryannode.jpg" alt="ryannode" title="ryannode" width="500" height="281" class="alignnone size-full wp-image-2755"></a></p>
<p>At our last Palm Developer Day, Ben and I <a href="http://developer.palm.com/blog/2010/05/palm-developer-day-keynote-betting-on-the-web-and-looking-at-webos-futures/">discussed future APIs for webOS</a> including &#8220;JavaScript services&#8221; as a way to write code that runs on the other side of the device service bus using JavaScript.</p>
<p>If you think about it, node delivers a services platform for the cloud, so is there a way that we could work together? We got together with Ryan Dahl of Node to try this out, and it turns out that node works fantastically well on a mobile device! Major kudos should go to the V8 team for creating a great VM and to Ryan for writing efficient code that scaled down from the cloud to the device.</p>
<p>Today we announce that <a href="http://developer.palm.com/index.php?option=com_content&#038;view=article&#038;id=2109#services">node is part of webOS 2.0</a>:</p>
<blockquote><p>
The popular Node.js  runtime environment is built into webOS 2.0, which means that you can now develop not just webOS apps but also services in JavaScript. The active Node ecosystem is on hand to provide community support and a rapidly growing library of modules that you can use in your webOS services.</p>
<p>Besides powering the new Synergy APIs, JavaScript services strengthen webOS&#8217;s support for background processing and add new capabilities—like low-level networking, file system access, and binary data processing—to the web technology stack.</p>
</blockquote>
<p>I am really excited about this move for us. The node community is top class. I get to see this time and time again, most recently over the weekend and this week as I judge the <a href="http://nodeknockout.com/">node knockout</a>. There is magic in the air with Node. It feels like the Rails days. I remember being so happy to jump to Rails and get away from the heavy world of Enterprise Java. It was a breath of fresh air to not have to argue with folks about every piece of the stack. &#8220;What about JSF with HiveMind and Commons-Logging and &#8230;.&#8221; Argh! Too. Much. Choice. And, a logging abstraction above Log4J was hilarious :)</p>
<p>Node is low level, yet simple. It is more like Sinatra than Rails. The event-based opinions keep you in good stead, and with cloud solutions such as Heroku and <a href="http://no.de/">no.de</a> you have great deployment stories, unlike Rails back in the day.</p>
<p>If you <a href="http://github.com/ry/node/wiki/modules">check out the modules</a> that are growing daily, and <a href="http://nodeknockout.com/">the fun real-time hacks from the knockout</a> you will get a good feel for node.</p>
<p>It feels great to have webOS as the first mobile device that embeds node. With db8 we offer a JSON store than can sync to the cloud (e.g. sync with CouchDB). This stack is starting to look pretty great.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dion?a=eJe3lWpJDk8:RL2t2PZYMQ8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/dion?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=eJe3lWpJDk8:RL2t2PZYMQ8:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/dion?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=eJe3lWpJDk8:RL2t2PZYMQ8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/dion?i=eJe3lWpJDk8:RL2t2PZYMQ8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=eJe3lWpJDk8:RL2t2PZYMQ8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/dion?i=eJe3lWpJDk8:RL2t2PZYMQ8:V_sGLiPBpWU" border="0"></img></a>
</div>]]></content:encoded><description>At our last Palm Developer Day, Ben and I discussed future APIs for webOS including &amp;#8220;JavaScript services&amp;#8221; as a way to write code that runs on the other side of the device service bus using JavaScript.
If you think about it, node delivers a services platform for the cloud, so is there a way that we [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://almaer.com/blog/node-is-our-turtle-shell-node-js-now-powers-services-on-webos/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://almaer.com/blog/node-is-our-turtle-shell-node-js-now-powers-services-on-webos</feedburner:origLink></item><item><title>App Stores: Showing users the value of Farmers Markets compared to Wal-mart</title><link>http://feedproxy.google.com/~r/dion/~3/2epx2n-l8Mw/app-stores-showing-users-the-value-of-farmers-markets-compared-to-wal-mart</link><category>Mobile</category><category>Mozila</category><category>Open Source</category><category>Tech</category><category>apps</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dion</dc:creator><pubDate>Tue, 31 Aug 2010 09:08:02 PDT</pubDate><guid isPermaLink="false">http://almaer.com/blog/?p=2750</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a href="http://www.flickr.com/photos/yourdon/3822508715/"><img src="http://almaer.com/blog/uploads/applesfarmersmarket.jpg"; alt="applesfarmersmarket" title="applesfarmersmarket" width="500" height="330" class="alignnone size-full wp-image-2751" /></a></p>
<p>I remember growing up walking past grocers and butchers, and having my Mum stop by to get fresh meat and veg on a daily basis. I look back fondly on that experience, as I contrast it to the later years of mega-stores. When I came back to England for a year stint, a few years back, I was shocked to see that Tesco didn&#8217;t just sell food anymore, but had branched out to credit cards and gas and lots of crazy things.</p>
<p>The local stores have been wedged out.</p>
<p>On Sunday, I took my kids to the farmers market (happens most weekends), which is what had me think back to the local stores from my own childhood.</p>
<p>I worry about the food chain these days.</p>
<p>Another sector that I think about is app economies and app stores. I have <a href="http://almaer.com/blog/what-should-the-future-of-web-app-stores-be">talked about what an open marketplace could be</a> and Pascal Finette of Mozilla Labs has been <a href="http://blog.finette.co.uk/post/802465457/an-open-web-app-marketplace">doing a lot of thinking in this area</a>.</p>
<p>Fast forward a few months, and we see a new project in a very early stage. <a href="http://hg.mozilla.org/labs/vapour/">Vapour</a> (github repo has been removed) is the Mozilla Labs project that is &#8220;An experiment around an Open Web App Store.&#8221; I am excited about the project for two reasons:</p>
<ul>
<li>Mozilla is uniquely positioned to deliver a marketplace that focuses on very different values than other companies
<li>I see check-ins from two amazing people: Michael Hanson (who did the amazing work around &#8220;people&#8221;) and Lloyd Hilaiel (who <a href="http://trickyco.de/going-lizard-riding">recently joined Mozilla</a>. I tried to hire him there years back, and he waiting for me to leave. Hmm :)
</ul>
<p>Also, I got to hang with the <a href="http://www.openappmkt.com/">OpenAppMkt</a> chaps at the <a href="http://nodeknockout.com/">Node Knockout</a> get together last night. They have only just begun, and think they will do some great things.</p>
<p>I evangelize the farmers market. I market it. I try to sell it.</p>
<p>I think of the Mozilla effort as the farmers market of app stores. The values are different. It isn&#8217;t just about values though, it will be about product. Many folk go to the farmers market because the goods are better. It is incredibly hard to compete with the likes of Walmart. They squeeze the market and force their vendors in a race to the bottom around price. This is the trick that Walmart can play. They can hold on to: &#8220;Look, we are giving everyone cheap goods!&#8221; It doesn&#8217;t matter <a href="http://www.fastcompany.com/magazine/77/walmart.html">what they do with China</a>, or how they <a href="http://walmartwatch.com/pages/healthcare">treat workers</a>. Surely it is all for good if we can get things cheap right?</p>
<p>The same is happening with the major app stores. These platforms sell consumers with a fantastic user experience and looking after their users. No viruses. No &#8220;bad stuff&#8221;. Clean. They offer true value, but there is always a cost.</p>
<p>The app markets are as strong as wal-mart. I am excited to see new endeavors that change the game and deliver great user value, while also giving great freedom.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dion?a=2epx2n-l8Mw:n_Njji1Y1iI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/dion?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=2epx2n-l8Mw:n_Njji1Y1iI:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/dion?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=2epx2n-l8Mw:n_Njji1Y1iI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/dion?i=2epx2n-l8Mw:n_Njji1Y1iI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=2epx2n-l8Mw:n_Njji1Y1iI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/dion?i=2epx2n-l8Mw:n_Njji1Y1iI:V_sGLiPBpWU" border="0"></img></a>
</div>]]></content:encoded><description>I remember growing up walking past grocers and butchers, and having my Mum stop by to get fresh meat and veg on a daily basis. I look back fondly on that experience, as I contrast it to the later years of mega-stores. When I came back to England for a year stint, a few years [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://almaer.com/blog/app-stores-showing-users-the-value-of-farmers-markets-compared-to-wal-mart/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://almaer.com/blog/app-stores-showing-users-the-value-of-farmers-markets-compared-to-wal-mart</feedburner:origLink></item><item><title>Twitter, Relationships, and more</title><link>http://feedproxy.google.com/~r/dion/~3/6euQHL1EK8E/twitter-relationships-and-more</link><category>Tech</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dion</dc:creator><pubDate>Mon, 23 Aug 2010 15:35:21 PDT</pubDate><guid isPermaLink="false">http://almaer.com/blog/?p=2747</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a href="http://www.flickr.com/photos/myklroventine/2537309848/"><img src="http://almaer.com/blog/uploads/bittweeter.png" alt="Big Tweeter" title="Big Tweeter" width="530" height="398" class="alignnone size-full wp-image-2748" /></a></p>
<blockquote><p>
Twitter isn’t your audience. It’s your community. It’s easy to tell the difference: The guy on stage at the concert is in front of his audience. The people in the stands are in their community. When the concert is over the audience vanishes but the community continues; with or without the man on stage.
</p></blockquote>
<p>The above quote was from <a href="http://hiddenfrequency.com/post/999094726/twitter-isnt-your-audience-its-your-community">hidden frequency</a>, in a response to Leo Laporte&#8217;s <a href="http://leoville.com/buzz-kill">Buzz Kill</a> piece that discussed his feelings after he realized that his microblogging status updates weren&#8217;t getting through&#8230;. and no one had been telling him.</p>
<p>It is easy to see that. A lot of people are watching the river of updates in their Twitter client, and if someone stops throwing their own rocks in the river, you may not notice, and instead you will be checking out other rocks. As I often say if I find a bug in my code&#8230;. &#8220;no, that is a feature!&#8221;</p>
<p>I have created a balance with my followers so there is almost always something of value in my stream these days. I have found that I don&#8217;t use RSS readers anymore, as by the time I open them, I have already read the good stuff as friends have talked about it.</p>
<p>The HF considers my usage as a problem, but there isn&#8217;t one way to use Twitter or any social network. Users find crazy ways to surprise you with the ways they use their services. The beauty of Twitter (and other services) with lists, is that you can enjoy multiple usage patterns. I can watch the entire river hit me hard, or I can go off and read only close friends&#8230;.. or only updates from web devs, or whatever hat I want to wear right then. It is the beginning of <a href="http://almaer.com/blog/the-river-a-strange-dream-and-the-death-of-repeated-friend-requests">The River</a> (which is much more than Twitter).</p>
<p>With Twitter I definitely feel much more connected to the community. The fact that we are all equals on there is fantastic, and it is easy to jump from community to community. Someone new reaches out, and you instantly have a new friend. So, Leo, don&#8217;t run away&#8230;. the world is listening, they just also happen to have other people they are listening to, too.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dion?a=6euQHL1EK8E:qzX8J-FPegc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/dion?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=6euQHL1EK8E:qzX8J-FPegc:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/dion?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=6euQHL1EK8E:qzX8J-FPegc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/dion?i=6euQHL1EK8E:qzX8J-FPegc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=6euQHL1EK8E:qzX8J-FPegc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/dion?i=6euQHL1EK8E:qzX8J-FPegc:V_sGLiPBpWU" border="0"></img></a>
</div>]]></content:encoded><description>Twitter isn’t your audience. It’s your community. It’s easy to tell the difference: The guy on stage at the concert is in front of his audience. The people in the stands are in their community. When the concert is over the audience vanishes but the community continues; with or without the man on stage.

The above [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://almaer.com/blog/twitter-relationships-and-more/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://almaer.com/blog/twitter-relationships-and-more</feedburner:origLink></item><item><title>JavaScript! The Doctor Is In.</title><link>http://feedproxy.google.com/~r/dion/~3/pPAgmXcPMLE/javascript-the-doctor-is-in</link><category>Bespin</category><category>JavaScript</category><category>Mozila</category><category>Open Source</category><category>Tech</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dion</dc:creator><pubDate>Sat, 21 Aug 2010 22:20:34 PDT</pubDate><guid isPermaLink="false">http://almaer.com/blog/?p=2742</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><img src="http://almaer.com/blog/uploads/thedoctors.jpg" alt="thedoctors" title="thedoctors" width="480" height="270" class="alignnone size-full wp-image-2745"></p>
<p>Dimitris Vardoulakis has created a Doctor. A Doctor for JavaScript that does static analysis on your code to tease out the type information and more.</p>
<p>This is fantastic work, and is something that we were dreaming of when we first planned Bespin. What if the cloud was constantly analyzing your code and returning type metadata back to the clients that were accessing it? That metadata can be used for tasks such as code completion and documentation.</p>
<p>Give it <a href="http://doctorjs.org/try.html">a try</a> to see what comes out the other end. The samples show you a lot, such as polymorphism:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> id<span style="color: #009900;">&#40;</span>x<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000066; font-weight: bold;">return</span> x<span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
id<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">42</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
id<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'hello, doctor!'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// returns</span>
id <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">&lt;</span>number <span style="color: #339933;">|</span> string<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#41;</span> → <span style="color: #339933;">&lt;</span>number <span style="color: #339933;">|</span> string<span style="color: #339933;">&gt;</span></pre></div></div>

<p>and prototypes:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> Rectangle<span style="color: #009900;">&#40;</span>w<span style="color: #339933;">,</span> h<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">w</span> <span style="color: #339933;">=</span> w<span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">h</span> <span style="color: #339933;">=</span> h<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
Rectangle.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">area</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">w</span> <span style="color: #339933;">*</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">h</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> a <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> Rectangle<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">2</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">3</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">area</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// returns</span>
Rectangle <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>number<span style="color: #339933;">,</span> number<span style="color: #009900;">&#41;</span> → any
area <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> → number</pre></div></div>

<p>and exceptions:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> findLargest<span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>a.<span style="color: #660066;">length</span> <span style="color: #339933;">===</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">throw</span> <span style="color: #003366; font-weight: bold;">new</span> Error<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'empty array'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> max <span style="color: #339933;">=</span> a<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">,</span> l <span style="color: #339933;">=</span> a.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> l<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;</span> max<span style="color: #009900;">&#41;</span>
            max <span style="color: #339933;">=</span> a<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">return</span> max<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">function</span> foo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> a <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #339933;">,</span><span style="color: #CC0000;">2</span><span style="color: #339933;">,</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">return</span> findLargest<span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">return</span> e.<span style="color: #660066;">message</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
foo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// returns</span>
findLargest <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>Array<span style="color: #009900;">&#91;</span>number<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> → number
foo <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> → <span style="color: #339933;">&lt;</span>number <span style="color: #339933;">|</span> string<span style="color: #339933;">&gt;</span></pre></div></div>

<p>and callbacks:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> call<span style="color: #009900;">&#40;</span>f<span style="color: #339933;">,</span> x<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000066; font-weight: bold;">return</span> f<span style="color: #009900;">&#40;</span>x<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">function</span> add1<span style="color: #009900;">&#40;</span>n<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000066; font-weight: bold;">return</span> n <span style="color: #339933;">+</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">function</span> truncate<span style="color: #009900;">&#40;</span>s<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000066; font-weight: bold;">return</span> s.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> s.<span style="color: #660066;">length</span> <span style="color: #339933;">-</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">var</span> n <span style="color: #339933;">=</span> call<span style="color: #009900;">&#40;</span>add1<span style="color: #339933;">,</span> <span style="color: #CC0000;">41</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> s <span style="color: #339933;">=</span> call<span style="color: #009900;">&#40;</span>truncate<span style="color: #339933;">,</span> <span style="color: #3366CC;">'abcd'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// returns</span>
call <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">&lt;</span>function<span style="color: #009900;">&#40;</span>number<span style="color: #009900;">&#41;</span> → number <span style="color: #339933;">|</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span> → string<span style="color: #339933;">&gt;,</span> <span style="color: #339933;">&lt;</span>number <span style="color: #339933;">|</span> string<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#41;</span> → <span style="color: #339933;">&lt;</span>number <span style="color: #339933;">|</span> string<span style="color: #339933;">&gt;</span>
add1 <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>number<span style="color: #009900;">&#41;</span> → number
truncate <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span> → string</pre></div></div>

<p>Mike Shaver talked about the great work that is coming in JS land right now for Moz&#8230;. and it is showing. Can&#8217;t wait to see both Firefox and Bespin gain from this all!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dion?a=pPAgmXcPMLE:UgfPCeNjCiM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/dion?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=pPAgmXcPMLE:UgfPCeNjCiM:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/dion?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=pPAgmXcPMLE:UgfPCeNjCiM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/dion?i=pPAgmXcPMLE:UgfPCeNjCiM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=pPAgmXcPMLE:UgfPCeNjCiM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/dion?i=pPAgmXcPMLE:UgfPCeNjCiM:V_sGLiPBpWU" border="0"></img></a>
</div>]]></content:encoded><description>Dimitris Vardoulakis has created a Doctor. A Doctor for JavaScript that does static analysis on your code to tease out the type information and more.
This is fantastic work, and is something that we were dreaming of when we first planned Bespin. What if the cloud was constantly analyzing your code and returning type metadata back [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://almaer.com/blog/javascript-the-doctor-is-in/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://almaer.com/blog/javascript-the-doctor-is-in</feedburner:origLink></item><item><title>Your users are pinching and spreading!; vector graphics matter even more now?</title><link>http://feedproxy.google.com/~r/dion/~3/EjgECgLbfjs/users-pinching-you</link><category>Tech</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dion</dc:creator><pubDate>Mon, 16 Aug 2010 08:24:57 PDT</pubDate><guid isPermaLink="false">http://almaer.com/blog/?p=2739</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><img src="http://almaer.com/blog/uploads/fbvectorsample.png" alt="Facebook page as a vector example" title="Facebook page as a vector example" width="480" height="640" class="alignnone size-full wp-image-2740"></p>
<p>When you look at the image above, the rasterized graphics look like crap, and the type looks great. We now live in a world where pinch and zoom is changing how your Web application is viewed. In the past we had to deal with different screen sizes, and browsers started to get smarter with their &#8220;zoom&#8221; going beyond &#8220;font size++&#8221;, but it isn&#8217;t like todays feeling that your users are pinching you, and you don&#8217;t know how hard.</p>
<p>The folk behind SVG all cheer. Those who enjoy <a href="http://raphaeljs.com/">Raphael</a> as it gives you a nice API to that world, have also shown you this goodness for awhile. In <a href="http://www.inkscape.org/">Inkscape</a> we have even have a decent tool:</p>
<blockquote><p>
An Open Source vector graphics editor, with capabilities similar to Illustrator, CorelDraw, or Xara X, using the W3C standard Scalable Vector Graphics (SVG) file format.</p>
<p>Inkscape supports many advanced SVG features (markers, clones, alpha blending, etc.) and great care is taken in designing a streamlined interface. It is very easy to edit nodes, perform complex path operations, trace bitmaps and much more. We also aim to maintain a thriving user and developer community by using open, community-oriented development.
</p></blockquote>
<p>There is even a new tool. <a href="http://leonardosketch.org/news/">Leonardo</a> is a new vector drawing tool by <a href="http://twitter.com/joshmarinacci">Josh</a> (note: who works in Developer Relations with me at H/Palm):</p>
<blockquote><p>
Leonardo is an open source vector drawing program for the 21st century. It focuses on common tasks like mockups, sketches, and presentations with a clean and consistent user interface. It is designed to be augmented by internet webservices and plugins created in several scripting languages.</p>
<ul>
<li>vector drawing with bezier curves and geometric primitives</li>
<li>reusable symbols stored in a sidebar</li>
<li>integrated creative commons Flickr search</li>
<li>building simple multi-page presentations</li>
<li>export to PNG, HTML, SVG, Email, and Twitter.</li>
</ul>
</blockquote>
<p>Do you think about vectors more these days?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dion?a=EjgECgLbfjs:m4mKi-I5l5U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/dion?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=EjgECgLbfjs:m4mKi-I5l5U:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/dion?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=EjgECgLbfjs:m4mKi-I5l5U:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/dion?i=EjgECgLbfjs:m4mKi-I5l5U:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=EjgECgLbfjs:m4mKi-I5l5U:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/dion?i=EjgECgLbfjs:m4mKi-I5l5U:V_sGLiPBpWU" border="0"></img></a>
</div>]]></content:encoded><description>When you look at the image above, the rasterized graphics look like crap, and the type looks great. We now live in a world where pinch and zoom is changing how your Web application is viewed. In the past we had to deal with different screen sizes, and browsers started to get smarter with their [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://almaer.com/blog/users-pinching-you/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">6</slash:comments><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://almaer.com/blog/users-pinching-you</feedburner:origLink></item><item><title>Google Wave’s Goodbye</title><link>http://feedproxy.google.com/~r/dion/~3/Cia5uJt6m4U/google-waves-goodbye</link><category>Google</category><category>Tech</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dion</dc:creator><pubDate>Thu, 05 Aug 2010 08:49:31 PDT</pubDate><guid isPermaLink="false">http://almaer.com/blog/?p=2736</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a href="http://www.flickr.com/photos/29cm/131380698"><img src="http://almaer.com/blog/uploads/sydneywave.jpg" alt="sydneywave" title="sydneywave" width="500" height="330" class="alignnone size-full wp-image-2737" /></a></p>
<p>I remember talking to a friend who joined Google and the Wave (then Walkabout) teams in Sydney. He talked about how he was excited to push the Web in crazy new ways and that he was shocked at how far they had gone. He also said &#8220;but I have no idea if people will use this.&#8221;</p>
<p>Google-haters will make fun of the fact that <a href="http://googleblog.blogspot.com/2010/08/update-on-google-wave.html">Wave hasn&#8217;t been a commercial success</a>. &#8220;See! They are a 2 hit wonder! Search and Ads!&#8221; However, I think that Eric&#8217;s spin rings partly true. <a href="http://news.cnet.com/8301-13860_3-20012724-56.html">Google had the balls to do it</a>. They let Lars and an awesome set of engineers take a run and rethinking the way that we communicate.</p>
<p>This is an incredibly hard proposition. Many people live in their email (I know, I know, the kids live in FB mail right?). I find myself <a href="http://almaer.com/blog/rapportive-a-fantastic-social-email-service-with-fantastic-service">loving a Gmail plugin</a> whilst never getting into Wave. Incremental, evolutionary improvement often wins on the Web. The revolutions are hard, but that doesn&#8217;t mean that people should stop trying them&#8230; and Google has the $ and the need to scale their businesses.</p>
<p>Wave, as well as <a href="http://www.flickr.com/photos/quaelin/3574598412/">giving great demo</a>, has brought a lot of cool technology into the commons. Other projects like Novell Pulse and the like are using it. When I was working on Bespin I really wanted to see a world in which Bespin could run on top of the operational transform abilities of Wave. Good things will come of Wave. The engineers have learned a ton, and that will go throughout the company to their other products. Making Gmail incrementally better will be huge. There is the large Google Buzz team making a run for social (a touch play when competitors have massive mindshare and user bases).</p>
<p>I also wonder about Etherpad. That great team shipped off to Sydney to join Wave. I love Etherpad. I still use it at <a href="http://typewith.me/">typewith.me</a> and at other clones when that goes down. The vision of Etherpad was smaller than Wave, but incredibly useful. I hope those guys land well. The entire Wave team is top drawer. They were ahead of the game this time around &#8230;. and timing is everything.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dion?a=Cia5uJt6m4U:BY4D4Kg57CY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/dion?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=Cia5uJt6m4U:BY4D4Kg57CY:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/dion?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=Cia5uJt6m4U:BY4D4Kg57CY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/dion?i=Cia5uJt6m4U:BY4D4Kg57CY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=Cia5uJt6m4U:BY4D4Kg57CY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/dion?i=Cia5uJt6m4U:BY4D4Kg57CY:V_sGLiPBpWU" border="0"></img></a>
</div>]]></content:encoded><description>I remember talking to a friend who joined Google and the Wave (then Walkabout) teams in Sydney. He talked about how he was excited to push the Web in crazy new ways and that he was shocked at how far they had gone. He also said &amp;#8220;but I have no idea if people will use [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://almaer.com/blog/google-waves-goodbye/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://almaer.com/blog/google-waves-goodbye</feedburner:origLink></item><item><title>Rapportive: A fantastic social email service with fantastic service!</title><link>http://feedproxy.google.com/~r/dion/~3/xC_Ilmb9W-M/rapportive-a-fantastic-social-email-service-with-fantastic-service</link><category>Tech</category><category>email</category><category>extension</category><category>gmail</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dion</dc:creator><pubDate>Mon, 02 Aug 2010 09:23:35 PDT</pubDate><guid isPermaLink="false">http://almaer.com/blog/?p=2730</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><img src="http://almaer.com/blog/uploads/rapportive.png" alt="rapportive" title="rapportive" width="520" height="340" class="alignnone size-full wp-image-2731"></p>
<p>I can&#8217;t tell you how much I love <a href="http://rapportive.com/">Rapportive</a>, the service that makes Gmail better by taking away the ads, and adding in useful information about the sender (teh social).</p>
<p>I have played with &#8220;social email&#8221; type plugins before, but they always tried to do too much, and rarely anything useful. Email is important to people. You tend to live in it. So, if you have an &#8220;add-on&#8221; the best thing to do is to quietly whisper useful information into the email users ear as they go about their business.</p>
<p>Once you install Rapportive, your email life instantly changes for the better. When I get an email from someone new I suddenly get a face to the name (via the profile picture), a feel for who they are (from their social updates), and more.</p>
<p>There are other fun side effects. I have had a few spammers de-cloaked for example. In general I feel like I have a leg up in a new conversation. Email feels different to me. I would hate to have it taken away&#8230;. which is a great sign.</p>
<p>The <a href="http://rapportive.com/about">team behind Rapportive is equally awesome</a>. They came from the great hacker dojo of Y Combinator, and other investors have come in behind that&#8230;. including Mr. Gmail himself.</p>
<p>The reason that I am actually writing this email though, is <a href="https://rapportive.uservoice.com/">their service</a> on behalf of their service.</p>
<p>There are a series of emails that I get that come from the same email. A lot of them fall into my &#8220;notifications&#8221; tag: Follows from Twitter, messages from Facebook, comments from Wordpress, plans from Plancast, etc.</p>
<p><img src="http://almaer.com/blog/uploads/rapportivetwitterfollow.png" alt="rapportivetwitterfollow" title="rapportivetwitterfollow" width="520" height="226" class="alignnone size-full wp-image-2732"></p>
<p>Until recently, Rapportive hadn&#8217;t really done much for me there. Then, the team started to show  information from the website of some of the companies behind these messages. I then reached out and said, what I really wanted was more meat that could be gleaned from the email. My use case was Twitter. When someone follows me, the more info I have on them, the more likely I am to follow them back. Twitter improved their template email a few weeks back (although for some reason it seems to have reverted for me recently?) but they don&#8217;t put in recent tweets from the person. I can see why: spammers would LOOOOOVE that feature. However, I would love to see it as I decide if I should reciprocate the follow! Rapportive could dip into the email content, parse out the fact that @foo has followed me, and show me their Tweets.</p>
<p>I don&#8217;t even think it was a full 24 hours later, and <a href="http://twitter.com/rahulvohra">@rahulvohra</a> their CEO, let me know that the feature was in place. I tested it&#8230;. and it was.</p>
<p>How about that for service.</p>
<p>ps. I love that Rapportive is an extensible platform. You can write &#8220;Rapplets&#8221; which are plugins for that right bar. E.g. load in Crunchbase information. I do find that some of these bug me when they say &#8220;Bob not found on &#8230;&#8221; when I would rather just not see anything.</p>
<p>I have a bunch of ideas for Rapplets, and after the great response from the team, I have every incentive to writeup thoughts on how to make the service better too. If you use Gmail, you should get this plugin.</p>
<p>pps. It is great timing for someone to build this service. We have had good ole microformats for awhile, and now with Web Finger integration here and there, let alone various services that key off of email, it is coming together that you can actually get a lot of good info based on just an email address.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dion?a=xC_Ilmb9W-M:dBUPnuvbglY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/dion?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=xC_Ilmb9W-M:dBUPnuvbglY:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/dion?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=xC_Ilmb9W-M:dBUPnuvbglY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/dion?i=xC_Ilmb9W-M:dBUPnuvbglY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=xC_Ilmb9W-M:dBUPnuvbglY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/dion?i=xC_Ilmb9W-M:dBUPnuvbglY:V_sGLiPBpWU" border="0"></img></a>
</div>]]></content:encoded><description>I can&amp;#8217;t tell you how much I love Rapportive, the service that makes Gmail better by taking away the ads, and adding in useful information about the sender (teh social).
I have played with &amp;#8220;social email&amp;#8221; type plugins before, but they always tried to do too much, and rarely anything useful. Email is important to people. [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://almaer.com/blog/rapportive-a-fantastic-social-email-service-with-fantastic-service/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://almaer.com/blog/rapportive-a-fantastic-social-email-service-with-fantastic-service</feedburner:origLink></item><item><title>Capability based JavaScript loading; JS libraries catch up to GWT</title><link>http://feedproxy.google.com/~r/dion/~3/lkccyOUUMC4/capability-based-javascript-loading-js-libraries-catch-up-to-gwt</link><category>Ajax</category><category>JavaScript</category><category>Tech</category><category>performance</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dion</dc:creator><pubDate>Thu, 29 Jul 2010 09:07:33 PDT</pubDate><guid isPermaLink="false">http://almaer.com/blog/?p=2723</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a href="http://www.flickr.com/photos/justinshearer/172164624/"><img src="http://almaer.com/blog/uploads/ballandchain.jpg" alt="ballandchain" title="ballandchain" width="500" height="333" class="alignnone size-full wp-image-2724" /></a></p>
<p>Web developers have to walk around dragging a ball and chain. It is fantastic that we have a ridiculous install base (browsers, the Web runtimes) and a dynamic language in JavaScript.</p>
<p>The ball and chain though is the fact that we have to care so much about the payload of the application that we write. Less code means less bytes to download, and less for the JS runtime to load up.</p>
<p>This has bad consequences:</p>
<ul>
<li>You are tempted to write hard to understand code
<li>You have to balance functionality and code size much more than other environments
<li>You end up getting tricky and come up with ways to dynamically load modules on demand
<li>All of this time is time not spent on the app logic.
</ul>
<p>When you run into a problem like this in computer science what do you do? Build an abstraction!</p>
<p>GWT has done a great job here. It&#8217;s very nature requires a compilation step, and once you have to deal with that step&#8230;. you can do a lot at build time to change the above dynamics.</p>
<p>For example:</p>
<ul>
<li>You can write nice explicit source code, and trust that the compiler will output optimized JS (which can look as ugly as sin for all anyone cares)
<li>Your application can get faster with a new release of GWT, as the compiler gets better
<li>A lot of <a href="http://code.google.com/webtoolkit/doc/latest/DevGuideOptimizing.html">advanced techniques</a> such as code splitting, and deferred binding can be applied to allow logic to apply at build time as well as runtime.
</ul>
<p>Ignoring GWT, when you write a pure JS application for the Web, you are writing a cross platform application. Unlike clean portable C, you don&#8217;t have that compilation step to do clean up work for you on each platform, so you end up with a lot of runtime conditional logic.</p>
<p>You try to do object detection rather than user agent conditional, but still, you end up both downloading the code necessary to run in all environments, and you have the overhead of loading and executing that code.</p>
<p>Chances are you are smart and don&#8217;t do <code>if()</code> checks all the time, but maybe do so once when loading up. For large chunks of big differences, maybe you do something like:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> Foo <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>sometest<span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">// do it like this</span>
<span style="color: #009900;">&#125;</span> <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">// do it like that</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p>If you take a look at some parts of popular JavaScript frameworks, you see that they are abstractions or fixes for various browsers. As browsers have stepped up to the plate recently, they have fixed a lot, and suddenly you take a step back. A lot of frameworks have a chunk of code to give us the ability to do smart things with CSS querying. Modern browsers support <code>querySelectorAll</code> (even with some bugs) and <code>getElementsByClassName</code> so a lot of the code is un-needed&#8230;. unless you care about the old browsers.</p>
<p>We shouldn&#8217;t have to download all of that cruft on the other side of the <code>if()</code> statement when we don&#8217;t use it!</p>
<p>The GWT compiler can output versions of your application targeted to a given browser. Only the fastest, minimal code, will get sent down. Deferred binding goes far beyond just browser type (can deal w/ locales and much more) too.</p>
<p>GWT isn&#8217;t the only horse in this race though.</p>
<p>Alex Russell started to sprinkle in some directives to Dojo that would enable you to do a build that is WebKit targeted. A major use case for all of this is making sure that you are sending down lean code in the mobile space. It can matter everywhere, but when you are dealing with grown up walkie talkies&#8230;. you want to really optimize.</p>
<p>And this brings us to YUI. I was really excited to see some of the features in the <a href="http://www.yuiblog.com/blog/2010/07/26/3-2-0pr1/">YUI 3.2.0 preview release</a>. Great stuff for touch/gesture support, but what stood out for me was &#8220;YUI’s intrinsic Loader now supports capability-based loading&#8221;. A-ha!</p>
<p>I poked around <a href="http://github.com/yui/yui3/">the source</a> to see how it was used. Here is one fake example that shows how it works. When you boot up YUI you can add in &#8220;conditions&#8221; which are in charge of working out whether to load something. You can currently tie on to user agent, or write a test function:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">YUI<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    modules<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
        lib2<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
            requires<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'yui'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
            fullpath<span style="color: #339933;">:</span> <span style="color: #3366CC;">'js/lib2.js'</span><span style="color: #339933;">,</span>
            condition<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
                trigger<span style="color: #339933;">:</span> <span style="color: #3366CC;">'node-base'</span><span style="color: #339933;">,</span>
                ua<span style="color: #339933;">:</span> <span style="color: #3366CC;">'gecko'</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
&nbsp;
        lib3<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
            requires<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'yui'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
            fullpath<span style="color: #339933;">:</span> <span style="color: #3366CC;">'js/lib3.js'</span><span style="color: #339933;">,</span>
            condition<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
                trigger<span style="color: #339933;">:</span> <span style="color: #3366CC;">'event-base'</span><span style="color: #339933;">,</span>
                test<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>Y<span style="color: #339933;">,</span> req<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000066; font-weight: bold;">return</span> Y.<span style="color: #660066;">UA</span>.<span style="color: #660066;">gecko</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>.<span style="color: #003366; font-weight: bold;">use</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'node'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>Y<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> .... <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>The YUI team uses this themselves to only load certain ugly DOM stuff for IE6 when needed:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #3366CC;">&quot;dom-style-ie&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #3366CC;">&quot;condition&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #3366CC;">&quot;trigger&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;dom-style&quot;</span><span style="color: #339933;">,</span> 
        <span style="color: #3366CC;">&quot;ua&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;ie&quot;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> 
    <span style="color: #3366CC;">&quot;requires&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
        <span style="color: #3366CC;">&quot;dom-style&quot;</span>
    <span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
&nbsp;
YUI.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'dom-style-ie'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>Y<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">// ....</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>This makes a ton of sense, especially for the libraries themselves to do this work. They are the ones that do the heavy lifting of cross browser ugliness, all to allow us to write to an API that works. </p>
<p>Beyond that, we can then ourselves split out code if it becomes a performance issue.</p>
<p>Of course, the value of the <code>test()</code> function is that you can do capability based testing (not just user agent testing&#8230;. hence the name!). This means that you can do a test say for Canvas support (as Zach mentions in the comments) <code>document.createElement(’canvas’).getContext</code>, and load up excanvas or another shim library if it doesn&#8217;t exist.</p>
<p>Using modernizr and ilk, we could build out &#8220;plugins&#8221; for YUI that auto load based on common capabilities. You can imagine running a YUI build, having it detect that you are using a capability, and then automatically load up a plugin that has the condition all loaded up. What a great user experience as a developer!</p>
<p>Maybe it makes sense to come up with a common pattern and conventions for dealing with this issue. How do you name your CSS/JS? Do we setup server side hooks so we don&#8217;t even need loaders necessarily?</p>
<p>I can certainly see a day where you may be asking the Google Ajax Library service for jquery.js, but it is returning jquery.ie.js to you.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dion?a=lkccyOUUMC4:i0UaqLQ5Kic:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/dion?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=lkccyOUUMC4:i0UaqLQ5Kic:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/dion?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=lkccyOUUMC4:i0UaqLQ5Kic:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/dion?i=lkccyOUUMC4:i0UaqLQ5Kic:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=lkccyOUUMC4:i0UaqLQ5Kic:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/dion?i=lkccyOUUMC4:i0UaqLQ5Kic:V_sGLiPBpWU" border="0"></img></a>
</div>]]></content:encoded><description>Web developers have to walk around dragging a ball and chain. It is fantastic that we have a ridiculous install base (browsers, the Web runtimes) and a dynamic language in JavaScript.
The ball and chain though is the fact that we have to care so much about the payload of the application that we write. Less [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://almaer.com/blog/capability-based-javascript-loading-js-libraries-catch-up-to-gwt/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">5</slash:comments><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://almaer.com/blog/capability-based-javascript-loading-js-libraries-catch-up-to-gwt</feedburner:origLink></item><item><title>I = V / R; Ohm’s law explains Developer Advocacy</title><link>http://feedproxy.google.com/~r/dion/~3/fhRT2eX2eo4/ohms-law-explains-developer-advocacy</link><category>Tech</category><category>advocate</category><category>developer</category><category>evangelism</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dion</dc:creator><pubDate>Wed, 14 Jul 2010 10:55:59 PDT</pubDate><guid isPermaLink="false">http://almaer.com/blog/?p=2720</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><img src="http://almaer.com/blog/uploads/thestream.jpg" alt="thestream" title="On 'the loop' in Eldora, Colorado" width="480" height="720" class="alignnone size-full wp-image-2721"></p>
<p>I consider myself a developer who happens to love community, evangelism, and advocacy.</p>
<p>When I put on the developer relations hat, I am constantly asking myself what value these roles have, and how to add more value to the process.</p>
<p>When I was working at Google, a certain engineering manager made it very clear that he felt advocacy and evangelism added close to zero value. His position was that you if you build a great product, developers will come. Rather than lash out, I keep that in the back of my mind, and think about how to make that view incorrect.</p>
<p><img src="http://upload.wikimedia.org/math/f/9/a/f9ae53a99f2b2b6a74146fb04fb3ff73.png" style="float:left; padding:8px"></p>
<p>I keep coming back to <a href="http://en.wikipedia.org/wiki/Ohm's_law">Ohm&#8217;s law</a> which explains the relationship between current, potential difference, and resistance and the laws of electricity.</p>
<p>I still remember the crazy physics teacher that I had that would scream:</p>
<blockquote><p>
&#8220;It&#8217;s the volts that jolt but the amps will kill ya!&#8221;
</p></blockquote>
<p>He would then kindly put kids through an experiment to get close to showing the truth behind that statement.</p>
<p>If you think of this law as a pipe and water flowing through it, there is the radius of said pipe, how fast the water is being pushed through it, and the resistance of the pipe.</p>
<p><b>How does this relate to developers and developer advocacy?</b></p>
<p>To reference the afore mentioned engineering manager, he has some truth. I feel like developer evangelism can help with the &#8220;push&#8221; (the volts). However, if you take the best developer relations crew&#8230; a crew that can push hard&#8230; they won&#8217;t be able to reach any potential if the pipe is tiny small, and the friction of the tools, APIs, platform, or economics provide.</p>
<p>Thus, the most important thing that you can do for a developer oriented initiative is first create a fantastic pipe. The pipe should have as little friction as possible, and should be as large as possible. Probably the most important way to achieve those goals is to provide developers with:</p>
<ul>
<li>A fantastic economic opportunity. Let&#8217;s face it, if Apple restricted developers so they had to use punch cards to build iOS apps, we would still have a lot of apps :) Same goes for Facebook etc. Even though when you look at the numbers on even those platforms, success is a &#8220;hit based&#8221; economy, the hits do so well that many developers get in the water for their change</li>
<li>A chance to do something different. Create a platform with unique capabilities and the opportunity for developers to create something very different, and that itself will be a draw. New companies and products can be created where they didn&#8217;t exist. Nokia had (and has) a boatload of phones. At JavaOne for years a Sun exec would get up and say &#8220;developer a J2ME app and you can reach BILLLLLLLIONS of devices!&#8221; Few did in the scale that we see with so called &#8220;smartphones&#8221;. You just couldn&#8217;t create anything interesting or compelling (oh, and there are the carrier gateway issues of that time too)</li>
<li>Make your platform fun and generative. This is a sub-bullet of the last one in many ways. But, if you a developer can have a great time creating on top of your building blocks, great things will happen, and the network effect can flow.</li>
</ul>
<p>Now, evangelism comes in as a way to:</p>
<ul>
<li>Let developers KNOW about your fantastic economic opportunity, their chance to do something different, and how productive and fun it is to develop on.</li>
<li>With tools, samples, articles, conferences, and community in general&#8230;. help lower the friction for these things. Give developers a leg up.</li>
</ul>
<p>This push can have a huge effect. Good evangelism will also create external evangelists who share your excitement and vision ending up with a nice network effect.</p>
<p><b>Only half the story</b></p>
<p>But evangelism is only a piece of the story. The reason that I like the term &#8220;developer advocate&#8221; so much (and why I <a href="http://almaer.com/blog/developer-advocate-versus-technical-evangelist-when-names-change-the-tone">posted on this topic</a>) is because it shows the other side of the coin. You are the third party developers representative back at your platform company. You are letting the internal teams understand their needs. And, you get to be part of that community:</p>
<blockquote><p>
&#8220;I can advocate something, and part of that will hopefully be heavily listening, and participating in the open community. Of course, these are just words, and you have to make this happen. We could call ourselves evangelists and do a lot of listening, or become advocates and do none. The word choice though does make you think about what you should be doing.<br />
More importantly, in my opinion, is the word developer. Rather than talking just about technology, we are talking about humans who use it. This again makes you feel like you need to be more part of the community, working with developers on their level.&#8221;</p>
</blockquote>
<p>Every now and then I reflect on Ohm&#8217;s law (it helps to watch the current of a stream in the mountains as I have been able to do in Colorado this week!), and think about how me and my team can both relieve friction and push harder for developers on the platform.</p>
<p>I have been at HP for a week or so now, and thus it was a great opportunity to think about how we can come together as a team to do just this. I think that I will be personally changing what I do, and I can&#8217;t wait to work with the community, the internal engineers, and the product chaps as we take webOS to the next level.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dion?a=fhRT2eX2eo4:t1vk0ihlVCI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/dion?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=fhRT2eX2eo4:t1vk0ihlVCI:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/dion?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=fhRT2eX2eo4:t1vk0ihlVCI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/dion?i=fhRT2eX2eo4:t1vk0ihlVCI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dion?a=fhRT2eX2eo4:t1vk0ihlVCI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/dion?i=fhRT2eX2eo4:t1vk0ihlVCI:V_sGLiPBpWU" border="0"></img></a>
</div>]]></content:encoded><description>I consider myself a developer who happens to love community, evangelism, and advocacy.
When I put on the developer relations hat, I am constantly asking myself what value these roles have, and how to add more value to the process.
When I was working at Google, a certain engineering manager made it very clear that he felt [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://almaer.com/blog/ohms-law-explains-developer-advocacy/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">3</slash:comments><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://almaer.com/blog/ohms-law-explains-developer-advocacy</feedburner:origLink></item><item><title>Links for 2009-05-10 [del.icio.us]</title><link>http://feedproxy.google.com/~r/dion/~3/mDiihzciXoo/dion</link><pubDate>Mon, 11 May 2009 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/dion#2009-05-10</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://google-opensource.blogspot.com/2009/05/introducing-webdriver.html"&gt;Introducing WebDriver, a clean, fast framework for automated testing of webapps.&lt;/a&gt;&lt;br/&gt;
WebDriver takes a different approach to solve the same problem as Selenium. Rather than being a JavaScript application running within the browser, it uses whichever mechanism is most appropriate to control the browser. For Firefox, this means that WebDriver is implemented as an extension. For IE, WebDriver makes use of IE&amp;#039;s Automation controls. By changing the mechanism used to control the browser, we can circumvent the restrictions placed on the browser by the JavaScript security model. In those cases where automation through the browser isn&amp;#039;t enough, WebDriver can make use of facilities offered by the Operating System. For example, on Windows we simulate typing at the OS level, which means we are more closely modeling how the user interacts with the browser, and that we can type into &amp;quot;file&amp;quot; input elements.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2009-May/019681.html"&gt;HTML5 &amp;quot;property&amp;quot; &amp;quot;item&amp;quot; and &amp;quot;subject&amp;quot; gives interesting look at microformats&lt;/a&gt;&lt;br/&gt;
I&amp;#039;ve added to HTML5 a simple syntax (three new attributes) based on RDFa. It doesn&amp;#039;t have the full power of RDF, because that didn&amp;#039;t seem to be necessary to address the use cases. It doesn&amp;#039;t really have anything in common with Microformats; I didn&amp;#039;t find the Microformats syntax to be very convenient. (This was also the experience with eRDF.)&lt;/li&gt;
&lt;/ul&gt;</description><feedburner:origLink>http://del.icio.us/dion#2009-05-10</feedburner:origLink></item><item><title>Links for 2009-05-09 [del.icio.us]</title><link>http://feedproxy.google.com/~r/dion/~3/axaNbw2ajcQ/dion</link><pubDate>Sun, 10 May 2009 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/dion#2009-05-09</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://weston.ruter.net/2009/05/07/detecting-support-for-data-uris/"&gt;You need to degrade with data: uris, here is how to do it! Detecting Support for data: URIs&lt;/a&gt;&lt;br/&gt;
Using Image.onload/onerror + CSS tricks.&lt;/li&gt;
&lt;/ul&gt;</description><feedburner:origLink>http://del.icio.us/dion#2009-05-09</feedburner:origLink></item><item><title>Links for 2009-05-07 [del.icio.us]</title><link>http://feedproxy.google.com/~r/dion/~3/yYhLjAU0HCk/dion</link><pubDate>Fri, 08 May 2009 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/dion#2009-05-07</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://weblogs.mozillazine.org/asa/archives/2009/05/new_theora_hotn.html"&gt;new theora hotness! Open Video has a tough road ahead.... but glad to see people walking the road.&lt;/a&gt;&lt;br/&gt;
I wonder how the BBC&amp;#039;s Dirac is coming too.&lt;/li&gt;
&lt;/ul&gt;</description><feedburner:origLink>http://del.icio.us/dion#2009-05-07</feedburner:origLink></item><item><title>Links for 2009-05-05 [del.icio.us]</title><link>http://feedproxy.google.com/~r/dion/~3/SFFWbkaSvNY/dion</link><pubDate>Wed, 06 May 2009 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/dion#2009-05-05</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://alex.dojotoolkit.org/2009/05/perspective-is-not-a-liquid-asset/"&gt;Perspective Is Not A Liquid Asset&lt;/a&gt;&lt;br/&gt;
Alex talks about the autoupdate issue. I personally lean towards autoupdate myself. I would love to take it further and have the browser as a microkernel with many updates.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.nihilogic.dk/2009/05/games-round-up-for-april-2009.html"&gt;Canvas Web Games round-up for April 2009&lt;/a&gt;&lt;br/&gt;
More fun canvas games!&lt;/li&gt;
&lt;/ul&gt;</description><feedburner:origLink>http://del.icio.us/dion#2009-05-05</feedburner:origLink></item><item><title>Links for 2009-05-04 [del.icio.us]</title><link>http://feedproxy.google.com/~r/dion/~3/bWLZhOxo-AE/dion</link><pubDate>Tue, 05 May 2009 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/dion#2009-05-04</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://dowdybrown.com/dbprod/rico3/demo/"&gt;Rico 3.0: now run LiveGrid on Prototype, jQuery, MooTools, Dojo, or Ext!&lt;/a&gt;&lt;br/&gt;
It&amp;#039;s alive!&lt;/li&gt;
&lt;li&gt;&lt;a href="http://saveyourself.ca/articles/stretching.php"&gt;Stretching Research shows that it isn't doing what you think?&lt;/a&gt;&lt;br/&gt;
&amp;quot;Clear scientific evidence shows that a stretching habit isn’t good for warmup, injury prevention, preventing or treating muscle soreness, enhancing athletic performance, or even for flexibility&amp;quot;&lt;/li&gt;
&lt;/ul&gt;</description><feedburner:origLink>http://del.icio.us/dion#2009-05-04</feedburner:origLink></item><item><title>Links for 2009-05-03 [del.icio.us]</title><link>http://feedproxy.google.com/~r/dion/~3/9z7_yK6_UeU/dion</link><pubDate>Mon, 04 May 2009 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/dion#2009-05-03</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.schillmania.com/content/entries/2009/adblock-vs-noscript/"&gt;Extension Wars: Adblock Plus (yay!) vs. NoScript (boo)&lt;/a&gt;&lt;br/&gt;
&amp;quot;Where NoScript went &amp;quot;evil&amp;quot; and drew this storm of criticism was with a recent update where NoScript would effectively modify Adblock Plus&amp;quot;&lt;/li&gt;
&lt;/ul&gt;</description><feedburner:origLink>http://del.icio.us/dion#2009-05-03</feedburner:origLink></item><item><title>Links for 2009-05-01 [del.icio.us]</title><link>http://feedproxy.google.com/~r/dion/~3/rSQxLce1E50/dion</link><pubDate>Sat, 02 May 2009 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/dion#2009-05-01</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://lloyd.github.com/jsondb/"&gt;JSONDB: This page is a specification of a client side JSON database API&lt;/a&gt;&lt;br/&gt;
&amp;quot;JSONDB: This page is a specification of a client side JSON database API, that is largely based upon the work done by the couchdb project. The goal of this specification is to explore an alternative to SQL on the client.&amp;quot; Early stage.... but I am excited :)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dougt.wordpress.com/2009/04/30/geolocation-in-firefox-35-and-fennec/"&gt;Geolocation in Firefox 3.5 and Fennec&lt;/a&gt;&lt;br/&gt;
Doug talks about the location work he did getting Geolocation into FF&lt;/li&gt;
&lt;li&gt;&lt;a href="http://spyced.blogspot.com/2009/05/consistent-hashing-vs-order-preserving.html"&gt;Consistent hashing vs order-preserving partitioning in distributed databases&lt;/a&gt;&lt;br/&gt;
Jonathan explains the new order-preserving partitioning in Cassandra.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://softwareas.com/svg-and-vml-in-one-chameleon-file"&gt;SVG and VML in One Chameleon File&lt;/a&gt;&lt;br/&gt;
&amp;quot;a single file can look like VML to something that works with VML (IE) and look like SVG to something that works with SVG (Firefox et al). In the general case, I call this pattern &amp;quot;Chameleon File&amp;quot; and the particular kind of chameleon described here I call a &amp;quot;Vector Graphics Chameleon File&amp;quot;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.numenity.org/2009/04/30/spread-firefox-new-day-rising/"&gt;The third major redesign of Spread Firefox, Mozilla&amp;rsquo;s community marketing hub, just went live tonight.&lt;/a&gt;&lt;br/&gt;
&amp;quot;ig ups to the amazing team that made this happen, across our design, IT, marketing, web development, and QA communities: Jamey Boje, Paul Booker, Alex Buchanan, Mary Colvig, Lucy Connor, Akash Desai, Otto de Voogd, Stephen Donner, Alix Franquet, Aravind Gottipati, Neil Lee, Jeremy Orem, Jay Patel, Krupa Raj, Ken Saunders, Matthew Zeier, and The Royal Order.&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://snook.ca/archives/javascript/no-love-for-module-pattern"&gt;Why I don't love JavaScript's Module Pattern&lt;/a&gt;&lt;br/&gt;
&amp;quot;One of the features that attracts me to developing in JavaScript is the ability to manipulate objects so readily. As a result, the module pattern is something I try to avoid.&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/web-tech/2009/04/29/object-and-array-initializers-should-not-invoke-setters-when-evaluated/"&gt;Object and array initializers should not invoke setters when evaluated&lt;/a&gt;&lt;br/&gt;
&amp;quot;It’s a safe bet to say that when most developers write var x = { bar: 42 };, they expect to get back a plain old object with a bar property whose value is 42 and not call any functions while doing it. What if we made the implicit property sets in object and array initializers ignore setters? (Note, however, that evaluating the property’s value might still have side effects.) In fact this is what the next version of ECMAScript will specify — and it’s what Firefox 3.1 beta 3 and 3.5 beta 4 already do and what the eventual release of Firefox 3.5 will do. By making initializers ignore setters, Firefox 3.5 will make browsing sites that serve JSON in this matter just a little bit safer.&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.chromium.org/2009/04/chromium-tech-talks.html"&gt;Chromium Tech Talks: 5 Chromium experts gave mini tech talks on subjects ranging from the network stack to hacking on WebKit.&lt;/a&gt;&lt;br/&gt;
Darin Fisher talking about Chromium&amp;#039;s multi-process architecture
Brett Wilson talking about the various layers of Chromium
Dimitri Glazkov talking about hacking on WebKit
Ben Goodger talking about Views (and how to write good tests for them)
Wan-Teh Chang and Eric Roman talking about Chromium&amp;#039;s network stack (and its history)&lt;/li&gt;
&lt;/ul&gt;</description><feedburner:origLink>http://del.icio.us/dion#2009-05-01</feedburner:origLink></item></channel></rss>
