tag:blogger.com,1999:blog-9865097934573200902024-03-12T16:01:38.401-07:00on QualityJohn Hammink on music, writing, language, and quality.John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.comBlogger25125tag:blogger.com,1999:blog-986509793457320090.post-78433281575276301512015-04-27T17:17:00.003-07:002015-04-27T17:17:39.472-07:00Press Photo<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJ8XwQzWYYlIirAEXwnSl4p1aFy1ltCDX478A75V93otC4op0tRMhLSpRIK_sIaRr9jj1SJWkEmE8YY-roB8gEWMQAjShcmLNPdJSH6dk6bAGCgV0-RM6CMxPxdgh1qsI_gM-gYyails6w/s1600/ATO5C3926.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJ8XwQzWYYlIirAEXwnSl4p1aFy1ltCDX478A75V93otC4op0tRMhLSpRIK_sIaRr9jj1SJWkEmE8YY-roB8gEWMQAjShcmLNPdJSH6dk6bAGCgV0-RM6CMxPxdgh1qsI_gM-gYyails6w/s1600/ATO5C3926.jpg" height="640" width="457" /></a></div>
<br /></div>
John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com1tag:blogger.com,1999:blog-986509793457320090.post-86454094117896691212013-02-24T00:25:00.001-08:002013-02-24T00:25:25.404-08:00Keynote on Firefox OS at Campus Party Recife!<div dir="ltr" style="text-align: left;" trbidi="on">
NOTE: I put this up on my blog almost 6 months ago - and never realized it didn't get published at the time! <br />
<br />
<a href="http://christianheilmann.com/" target="_blank">Chris Heilmann</a> and I just finished our keynote at <a href="http://recife.campus-party.org/2012/index.html" target="_blank">Campus Party Recife</a> in this lovely Brazillian coastal town. It's amazing to see the enthusiasm and momentum around <a href="http://en.wikipedia.org/wiki/Firefox_OS" target="_blank">Firefox OS</a> in the community.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMvBG77N3_t8ROdaADkgPauT0pBCuGS5dKrGtQCd2mj0IWmRRcj8lavBKQ13KMBOY8C0oe0UIogUIZ5OkDebx5knzLyUhW45jxmKt9Ha1pCuYEa7CpG-QilZ8W7ZWQ5F7ylCKP8_aMXPz-/s1600/keynote_campus_party.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMvBG77N3_t8ROdaADkgPauT0pBCuGS5dKrGtQCd2mj0IWmRRcj8lavBKQ13KMBOY8C0oe0UIogUIZ5OkDebx5knzLyUhW45jxmKt9Ha1pCuYEa7CpG-QilZ8W7ZWQ5F7ylCKP8_aMXPz-/s320/keynote_campus_party.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The boy in the picture is hearing for the first time.</td></tr>
</tbody></table>
Led by Chris (with some added points on the <a href="https://wiki.mozilla.org/WebAPI" target="_blank">APIs</a> themselves from me), the presentation started with a short bit about Mozilla's history and (open) values and traced the (very fast) evolution of our <a href="https://wiki.mozilla.org/WebAPI" target="_blank">Web APIs</a> toward a hardware-accessible web.<br />
<br />
In the same spirit as we did with the Browser Wars before, we (Mozilla) are taking on the Mobile OS lockout being faced currently in developing countries like Brazil.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBSiIsVMOcjCeLId0Ut5mSJJDNyaiVp-p2D4D2ma2X5tpYuVU0cB0UtLoDwAFCuDO5BoWB9OSB-6Z_a46bY45VKSx1eiu_T_U2NN9DBRuWO6HgDssC71qic3CNzUSl05HQdKOQjb3K88Yz/s1600/lock_out+.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBSiIsVMOcjCeLId0Ut5mSJJDNyaiVp-p2D4D2ma2X5tpYuVU0cB0UtLoDwAFCuDO5BoWB9OSB-6Z_a46bY45VKSx1eiu_T_U2NN9DBRuWO6HgDssC71qic3CNzUSl05HQdKOQjb3K88Yz/s320/lock_out+.png" width="320" /></a></div>
<br />
<br />
<br />
Simply put, if you can't afford it, you can't have it! And an Android phone is alot more expensive (relatively speaking) for a consumer in a developing country like Brazil than it is for us North Americans or Europeans.<br />
<br />
By enabling mobile application and content development in longtime-proven technologies like HTML5, CSS and JavaScript, Mozilla aims for critical mass in developer space (meaning there are much lower barriers to entry where any webpage can be an app!) It's "write once run anywhere" for real, and it's already been around a while. <br />
<br />
Already, with Telefonica on board (with their open web device initiative) and talks happening with several more phone and service providers, it's no wonder our audience more than doubled expected capacity!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWtDd4yWa6YvSETukpS2wFleEQfzAs6QPaluIYiyY_jnVS_wwf87YUI0g49L9eTVlIxkO-84zMIgBZRdBgfuTIoapa3qoL75_FNwvaawSCupnu_GchJPBJfvInlDo7MKUI7Cy_mTxTYuKT/s1600/IMG_4358.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWtDd4yWa6YvSETukpS2wFleEQfzAs6QPaluIYiyY_jnVS_wwf87YUI0g49L9eTVlIxkO-84zMIgBZRdBgfuTIoapa3qoL75_FNwvaawSCupnu_GchJPBJfvInlDo7MKUI7Cy_mTxTYuKT/s320/IMG_4358.JPG" width="320" /></a></div>
<br />
<br />
Typical questions centered around"How will this shake up the existing hegemony?" and "Will this run on my device?" While we're currently limited by the practical and proprietary limitations of porting hardware abstraction layers, we hope that, for starters, by driving a critical mass of developers toward Open Web Apps and Firefox OS, that we can affect the current of change in this space.<br />
<br />
As with all things Mozilla, this followed up with an appeal for community. Yes, we need YOU, to help us test, to help us develop, to help us translate, and to evangelize in your language.<br />
<br />
To this end, there was an appeal to the <a href="https://wiki.mozilla.org/ReMo/SIGs/Evangelism_Reps" target="_blank">Evangelism Reps</a> program (which yours truly is test driving at the moment!)<br />
<br />
Slides for our presentation are available here <a href="http://www.slideshare.net/cheilmann/mozilla-the-web-and-you" target="_blank">with notes</a> and <a href="http://www.slideshare.net/cheilmann/mozilla-the-web-and-you-no-notes" target="_blank">without notes</a>. More information and links can be found in the presentations themselves.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br /></div>
John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com27tag:blogger.com,1999:blog-986509793457320090.post-1174595315505486912013-02-23T22:45:00.001-08:002013-02-24T00:20:58.778-08:00Fractalland, my new short film<div dir="ltr" style="text-align: left;" trbidi="on">
Fractals, animation, math and music, you say? Check out my new short film, fractalland (2013) available on YouTube:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/stt58WNEdco?feature=player_embedded' frameborder='0'></iframe></div>
<br /></div>
John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com2tag:blogger.com,1999:blog-986509793457320090.post-37553969745336015182013-02-23T22:41:00.001-08:002013-02-24T00:24:24.155-08:00Fractals, window to another dimension?<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXuBL7Q_7O0w45MYh_JeqCTmk1ktdFXGaCoBvbrL4aHfcJi8J_Gwxdm8jZ4scGat1blkRWLgiAMBWqxzIH_id5jbSRJ_TFJ5BSVlfPmG-YH9JyjhrKrMbyLyYZ1I5Vd7hIYNkAt8Cu5CEZ/s1600/Stratum.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXuBL7Q_7O0w45MYh_JeqCTmk1ktdFXGaCoBvbrL4aHfcJi8J_Gwxdm8jZ4scGat1blkRWLgiAMBWqxzIH_id5jbSRJ_TFJ5BSVlfPmG-YH9JyjhrKrMbyLyYZ1I5Vd7hIYNkAt8Cu5CEZ/s320/Stratum.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzpeSiFJZWmEZPxgUCNLgB_lmsASEAxZUf1PLRASaLI_3vgquri6931UhGNVpBFoY-nyhYW-zvr7Bsq-KCVwMkVuqq5byr4vbhRbMAYhAEHJW5JWbjbSC9QDbmOC5vRriUNGuFIbPoQSxN/s1600/DucksandMMf3_smoothed_cycled7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzpeSiFJZWmEZPxgUCNLgB_lmsASEAxZUf1PLRASaLI_3vgquri6931UhGNVpBFoY-nyhYW-zvr7Bsq-KCVwMkVuqq5byr4vbhRbMAYhAEHJW5JWbjbSC9QDbmOC5vRriUNGuFIbPoQSxN/s320/DucksandMMf3_smoothed_cycled7.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEwhRGfSaPqqfVKkykDypIUVlW2YtjyAaAx8oSVk_UmJK0IqHaVWYtr3K12skkPjSJqLOuPyTtHE3mjLRm9SDKfFHow6lYm1TuRCYQUwPEPiMBbRUwJnJsxdcLs_NlRV9zaUEHyFSw9bm6/s1600/Thinginatube_inverted_rotated.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEwhRGfSaPqqfVKkykDypIUVlW2YtjyAaAx8oSVk_UmJK0IqHaVWYtr3K12skkPjSJqLOuPyTtHE3mjLRm9SDKfFHow6lYm1TuRCYQUwPEPiMBbRUwJnJsxdcLs_NlRV9zaUEHyFSw9bm6/s320/Thinginatube_inverted_rotated.png" width="320" /></a></div>
I've spent much of the last six months dabbling with fractal geometry, math, art and animation. Here are a few recent pieces. More commentary to come.</div>
John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com0tag:blogger.com,1999:blog-986509793457320090.post-32414751714191787422012-02-06T17:38:00.000-08:002012-02-06T17:38:30.893-08:00My new home: write up in Lion's club, Staffansdorp, Sweden<div dir="ltr" style="text-align: left;" trbidi="on">
Wicked! My new home in Mountain View got a nice write up on the Lion's club site: <a href="http://www.lionsstaffanstorp.se/loppis-i-staffanstorp/">http://www.lionsstaffanstorp.se/loppis-i-staffanstorp/</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.lionsstaffanstorp.se/wp-content/uploads/2012/02/329094_10150645464950775_503955774_11627991_471196836_o-300x225.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://www.lionsstaffanstorp.se/wp-content/uploads/2012/02/329094_10150645464950775_503955774_11627991_471196836_o-300x225.jpg" /></a></div>
<br />
<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.lionsstaffanstorp.se/wp-content/uploads/2012/02/334016_10150645461055775_503955774_11627977_1032222943_o-300x225.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://www.lionsstaffanstorp.se/wp-content/uploads/2012/02/334016_10150645461055775_503955774_11627977_1032222943_o-300x225.jpg" /></a></div>
<br />
</div>John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com8tag:blogger.com,1999:blog-986509793457320090.post-78451645272831275832012-02-02T18:03:00.000-08:002012-05-10T00:58:47.261-07:00Part 2: Setting up Marionette for automating WebAPI testing on B2G<div dir="ltr" style="text-align: left;" trbidi="on">
NOTE: This article is now available as a series of articles on <a href="https://developer.mozilla.org/en/Mozilla/Boot_to_Gecko/" target="_blank">MDN</a>: <a href="https://developer.mozilla.org/en/Mozilla/Boot_to_Gecko/">https://developer.mozilla.org/en/Mozilla/Boot_to_Gecko/</a> and will be maintained and updated there.<br />
</div>John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com1tag:blogger.com,1999:blog-986509793457320090.post-24514459484011730982012-01-23T13:54:00.000-08:002012-01-23T14:52:34.926-08:00<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrV-PO5KPK_PndghWHGNtDp-dLI2j55kqX_4XTxQHahVuKF0xCMJidqPFI4CfOA19q9G_N_YSKEWrzj5V8tNjhQajk2T6ttpYACiyFPDuPUaewXzzwsdVqSz7i9Qlh7pvdz7tzUI2Vvbz0/s1600/JH_Panama_Red_Concord_Jan_2012.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrV-PO5KPK_PndghWHGNtDp-dLI2j55kqX_4XTxQHahVuKF0xCMJidqPFI4CfOA19q9G_N_YSKEWrzj5V8tNjhQajk2T6ttpYACiyFPDuPUaewXzzwsdVqSz7i9Qlh7pvdz7tzUI2Vvbz0/s320/JH_Panama_Red_Concord_Jan_2012.jpg" width="320" /></a></div>
...a promo pic from a coffeehouse gig I did in Concord, CA (at the Panama Red Cafe), Sunday, January 22, 2012.<br />
<br />
I had been wanting to reconcile the "nerd" and the "artiste".... thus the "Ion Monkey" (it's Mozilla's new JIT compiler) t-shirt. The set had a host of short jazz pieces, mostly intros, some culled and influenced by one of my favorite jazz guitarists, Joe Pass. Which of course, sounded amazing on acoustic guitar.<br />
<br />
Links to some of the live stuff, to come. <br />
<br />
<br />
<br />
<br />
<br />
<br /></div>John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com1tag:blogger.com,1999:blog-986509793457320090.post-80423632594698344752011-12-27T17:17:00.000-08:002011-12-27T17:31:19.748-08:00Zippity - and automated performance tests for Firefox Mobile<div dir="ltr" style="text-align: left;" trbidi="on">
Many have wondered how we get the device coverage with our automated Performance tests. Here's one way:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/wIx5wLVaICs?feature=player_embedded' frameborder='0'></iframe></div>
<br />
<br />
What you see running here are the Zippity tests (a <a href="http://people.mozilla.com/%7Emfinkle/addons%20" target="_blank">plug in available</a> for <a href="http://nightly.mozilla.org/" target="_blank">Firefox mobile </a>), running the pageload tests on a number of different devices. I also have logcat attached and running, to catch any possible crashes.<br />
<br />
Pageload tests load a series of predefined webpages, to gauge pageload speed. There are also Startup tests (which start the application several times to measure startup speed); as well as SunSpider and V8 tests. Lastly, you can ping your memory metrics to Zippity. <br />
<br />
Having the crowd available to help run these tests (just install the plug in), helps us get the device coverage up and ensures we find things like native crashes, hopefully sooner, rather than later.<br />
<br />
Kudos to <a href="http://starkravingfinkle.org/blog/" target="_blank">Mark Finkle</a> for this great tool. <br />
<br />
<br /></div>John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com0tag:blogger.com,1999:blog-986509793457320090.post-29771893596957270692011-12-27T00:19:00.000-08:002011-12-27T00:21:17.010-08:00<div dir="ltr" style="text-align: left;" trbidi="on">
I made this video last winter, when I was still in Helsinki:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/kt9TfAYetlU?feature=player_embedded' frameborder='0'></iframe></div>
<br />
...and <a href="http://theutah.org/performance/johnhammink/20111219/againsttheglass" target="_blank">here</a> is one of my songs from my performance at Hotel Utah, San Francisco on December 19, 2011: <a href="http://theutah.org/performance/johnhammink/20111219/againsttheglass" original_target="http://theutah.org/performance/johnhammink/20111219/againsttheglass" rel="nofollow nofollow" saprocessedanchor="true" style="background-color: black; color: #3b5998; cursor: pointer; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 18px; text-decoration: none;" target="_blank" verdict_1d647md="OK">http://theutah.org/performance/johnhammink/20111219/againsttheglass</a></div>John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com0tag:blogger.com,1999:blog-986509793457320090.post-35365022644788282632011-12-11T15:55:00.001-08:002011-12-13T15:46:05.138-08:00A plug for the Fullscreen, Gamepad, and Mouse Lock gaming APIs<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="font-family: Arial,Helvetica,sans-serif; text-align: left;" trbidi="on">
<span style="font-size: small;">Sometimes, when things are moving as quickly as they generally do here at <a href="http://www.mozilla.org/" target="_blank">the Moz</a> (as in the open web generally), the best that one can do is channel the work of others to try and stay on track with everything. It certainly beats trying to do everything oneself, at the breakneck speed at which envisioning the new technology - and technology itself - unfolds.</span><br />
<span style="font-size: small;"><br /></span><br />
<span style="font-size: small;">On that note, kudos to <a href="http://vocamus.net/dave/" target="_blank">Dave Humphries</a>, <a href="http://rawkes.com/" target="_blank">Rob Hawkes</a> and <a href="http://blog.pearce.org.nz/" target="_blank">Chris Pearce</a> for their recent <a href="http://hacks.mozilla.org/2011/12/paving-the-way-for-open-games-on-the-web-with-the-gamepad-and-mouse-lock-apis/" target="_blank">blog</a> <a href="http://blog.pearce.org.nz/2011/11/firefoxs-html-full-screen-api-enabled.html" target="_blank">posts</a> on these brand new APIs. And so, by way of a rehash...</span><br />
<span style="font-size: small;"><br /></span><br />
<span style="font-size: small;"><as 12th,="" <b="" december="" of="" the="">Fullscreen, <b>Gamepad</b> and <b>Mouse Lock APIs</b> are available in a single experimental desktop <a href="http://people.mozilla.com/%7Etmielczarek/mouselock+gamepad/" target="_blank">build</a> of Firefox. There are also builds that support these features <a href="http://ftp.mozilla.org/pub/mozilla.org/firefox/try-builds/david.humphrey@senecac.on.ca-ec560c67351d/try-linux/" target="_blank">here</a>.<br />
<br />
These APIs are estimated to land soon in the nightly builds.</as></span><br />
<span style="font-size: small;"><as 12th,="" <b="" december="" of="" the=""><br />
</as></span><br />
<span style="font-size: small;"><b>The Fullscreen API:</b></span><br />
<span style="font-size: small;"><b><br /></b></span><br />
<span style="font-size: small;">Scheduled to ship in firefox 10 by the end of January, you can still try out some of the examples in the latest <a href="http://nightly.mozilla.org/" target="_blank">nightly builds</a>.</span><br />
<span style="font-size: small;"><br /></span><br />
<span style="font-size: small;">Based on the <a href="https://wiki.mozilla.org/RapidRelease/Calendar" target="_blank">W3C's draft spec</a>, this API enables any HTML element to be made "fullscreen", which hides the browsers UI and stretches the element to cover the entire screen area. </span><br />
<span style="font-size: small;"><br /></span><br />
<span style="font-size: small;">To use it, the developer calls void </span><span class="Apple-style-span" style="font-size: small;"><span style="font-family: "Courier New",Courier,monospace;">mozRequestFullScreen()</span>, which, if the request is granted (there are security implications here) gets a <span class="Apple-style-span" style="font-size: small;"><span style="font-family: "Courier New",Courier,monospace;">mozfullscreenchange</span> event back to the specifying element; otherwise a <span class="Apple-style-span" style="font-size: small;"><span style="font-family: "Courier New",Courier,monospace;">mozfullscreenerror</span> is dispatched.<br />
<br />
The user can ESC or F11 to exit full screen mode. As with YouTube or other fullscreen videos, navigating (ALT+TAB) will cause fullscreen mode to exit. <br />
</span></span></span><br />
<div style="text-align: center;">
<span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><br /></span></span></span><br />
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;">There is a cross-browser full-screen API example <a href="http://html5-demos.appspot.com/static/fullscreen.html" target="_blank">here.</a> </span></span></span></div>
<div style="text-align: left;">
<br />
<span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><b>The Gamepad API:</b></span></span></span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="background-color: white; font-size: small; line-height: 20px;"><b><br /></b></span></span></span></span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="line-height: 20px;">As directed by the <a href="http://dvcs.w3.org/hg/webevents/raw-file/default/gamepad.html" target="_blank">W3C spec</a>, Javascript and Firefox now gives developers the possibility to connect a gamepad directly to the computer (using USB or Bluetooth) - a domain previously only available to gaming consoles and native computer games. </span></span></span></span></span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="line-height: 20px;"><br /></span></span></span></span></span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="line-height: 20px;">You can <a href="https://bug604039.bugzilla.mozilla.org/attachment.cgi?id=565617" target="_blank">try it out</a> here; note that you''ll need that custom <a href="http://people.mozilla.com/%7Etmielczarek/mouselock+gamepad/" target="_blank">build</a><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="line-height: 20px;">. This <a href="https://wiki.mozilla.org/GamepadAPI" target="_blank">wiki page</a> contains more implementation specifics.</span></span></span></span></span></span></span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="background-color: white; font-size: small; line-height: 20px;"><b><br /></b></span></span></span></span></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="line-height: 20px;">Rob Hawkes made a great demo video:</span></span></span></span></span></div>
<div style="text-align: left;">
<div style="text-align: center;">
<span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="background-color: white; font-size: small; line-height: 20px;"><b><br /></b></span></span></span></span></div>
</div>
</div>
<span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;"><span class="Apple-style-span" style="font-size: small;">
</span></span></span></div>
<div style="font-family: Arial,Helvetica,sans-serif;">
<span style="font-size: small;"><iframe allowfullscreen="" frameborder="0" height="225" mozallowfullscreen="" src="http://player.vimeo.com/video/31906995" webkitallowfullscreen="" width="400"></iframe></span></div>
<div style="font-family: Arial,Helvetica,sans-serif;">
<span style="font-size: small;"><br /></span></div>
<div style="font-family: Arial,Helvetica,sans-serif;">
<span style="font-size: small;"><br /></span></div>
<div style="font-family: Arial,Helvetica,sans-serif;">
<span style="font-size: small;"><b>The Mouse Lock API:</b></span></div>
<div style="font-family: Arial,Helvetica,sans-serif;">
<span style="font-size: small;"><b><br /></b></span></div>
<div style="font-family: Arial,Helvetica,sans-serif;">
<span style="font-size: small;">This API hides the cursor and locks it to the center of the screen, thus enabling developers to make games and visualizations of a 3D world (otherwise the cursor would go off the side of the screen or hit the edge). With the cursor locked, the user can roam X, Y, Z axes without restrictions.</span></div>
<div style="font-family: Arial,Helvetica,sans-serif;">
<span style="font-size: small;"><b><br /></b></span></div>
<div style="font-family: Arial,Helvetica,sans-serif;">
<span style="font-size: small;"><a href="http://vocamus.net/dave/?p=1393" style="line-height: 19px;" target="_blank">David Humphrey and his students at Seneca College</a> are currently implementing this API based on the W3C <a href="http://dvcs.w3.org/hg/webevents/raw-file/default/mouse-lock.html" target="_blank">spec.</a></span></div>
<div style="font-family: Arial,Helvetica,sans-serif;">
<span style="font-size: small;"><br /></span></div>
<div style="font-family: Arial,Helvetica,sans-serif;">
<span style="font-size: small;">There are <a href="http://humphd.github.com/mozilla-central/mouselock/" target="_blank">demo files</a> available.</span></div>
<div style="font-family: Arial,Helvetica,sans-serif;">
<span style="font-size: small;"><br /></span></div>
<div class="separator" style="clear: both; font-family: Arial,Helvetica,sans-serif; text-align: center;">
<span style="font-size: small;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/0aF7qWMawJM?feature=player_embedded' frameborder='0'></iframe></span></div>
<div class="separator" style="clear: both; font-family: Arial,Helvetica,sans-serif; text-align: center;">
<span style="font-size: small;"><br /></span></div>
<div style="font-family: Arial,Helvetica,sans-serif;">
<span style="font-size: small;">We're tracking Mouse Lock API on <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=633602" target="_blank">Bugzilla</a>. You can also check out <a href="http://vocamus.net/dave/" target="_blank">David Humphrey’s series of posts</a> on the development of the Mouse Lock API.</span></div>
<div style="font-family: Arial,Helvetica,sans-serif;">
<span style="font-size: small;"><br /></span></div>
<div style="font-family: Arial,Helvetica,sans-serif;">
<span style="font-size: small;">I'm just now trying these out myself; of course, if you find any issues, please feel free to <a href="http://shrt.st/2b9i" target="_blank">file a bug</a>. </span></div>
</div>
John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com4tag:blogger.com,1999:blog-986509793457320090.post-57714446883134973482011-12-10T23:31:00.001-08:002011-12-22T22:52:52.684-08:00Fall tour of the Acoustic Circuit, S.F. Bay Area<div dir="ltr" style="text-align: left;" trbidi="on">
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZl33TQuRVqJt5cWfRmAKMU5CVfueQEQDmKfrKB6gtpT0dxBJyGaiSWuK1cjRnGCGZ-yJxXdaZL8BMTJK0MDibcpbqBylJIjYJLo2AflJWVBNclVjgI2ylinq9OL3tHbFsHj_Od2DpCha1/s1600/Freight+and+Salvage+Coffeehouse+Berkeley+November+22+2011.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZl33TQuRVqJt5cWfRmAKMU5CVfueQEQDmKfrKB6gtpT0dxBJyGaiSWuK1cjRnGCGZ-yJxXdaZL8BMTJK0MDibcpbqBylJIjYJLo2AflJWVBNclVjgI2ylinq9OL3tHbFsHj_Od2DpCha1/s320/Freight+and+Salvage+Coffeehouse+Berkeley+November+22+2011.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">From Freight & Salvage Coffeehouse, Berkeley, November 22, 2011</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
If I don't (yet) get to unleash the beast on my software evangelism (a quintessentially nerdy pursuit) the least I can do is hit the acoustic singer/songwriter music circuit around the Bay area (which I'm currently doing). It's only been a few short weeks since I've started touring regularly in addition to my awesome <a href="http://www.mozilla.org/" target="_blank">day job</a> (longer geographic swaths in the works on both the music and work fronts), but it's already been a hell of a ride.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8u8WuBOQWb2MQv35LLSP__Bizzx99jlLdq4jx3i_O3DlyBaT1C37YBlkjFY6DLJIKsSyd6OXkQfbMPVyaws-lQLbR58u0-ikV5BHV_mZjj7nPykzJH_h70W1V6mLyLkQSsa-KaqnDdLo1/s1600/St+Lukes+Church+San+Francisco+November+20+2011.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8u8WuBOQWb2MQv35LLSP__Bizzx99jlLdq4jx3i_O3DlyBaT1C37YBlkjFY6DLJIKsSyd6OXkQfbMPVyaws-lQLbR58u0-ikV5BHV_mZjj7nPykzJH_h70W1V6mLyLkQSsa-KaqnDdLo1/s320/St+Lukes+Church+San+Francisco+November+20+2011.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">From St. Lukes Church, San Francisco, November 20, 2011</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNay7xzUAVDYqdO5UMpbQe0WQkEFM-bTeyivpT9hkQiO4YXDQ6c_6aLGzrUIs0bCFOYZzLIJGSISRDMDX-3ig94I6QyJXldui-88dU_98OTQ2leCNoevFI-OFVgeGeRc0YqIQSvTuoh43A/s1600/ROcket+Room+San+Francisco+November+24+2011.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNay7xzUAVDYqdO5UMpbQe0WQkEFM-bTeyivpT9hkQiO4YXDQ6c_6aLGzrUIs0bCFOYZzLIJGSISRDMDX-3ig94I6QyJXldui-88dU_98OTQ2leCNoevFI-OFVgeGeRc0YqIQSvTuoh43A/s320/ROcket+Room+San+Francisco+November+24+2011.jpg" width="240" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">From Rockit Room, San Francisco, November 24, 2011</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvBEZ-MU2JwINys07iDg2s4KP6IVrsf7mR5s3KU-kt8622IGwz82bic4nVXfIDIRXzrR3e0yUFw2x2rgPQGrCTsNfuIvk-jL-XhFIPssUUkJBOgSZMhdnMifyg7o0GM1fyFeoNyQREUmJF/s1600/Panama+Red+Coffeehouse+Concord+CA+December+9+2011.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvBEZ-MU2JwINys07iDg2s4KP6IVrsf7mR5s3KU-kt8622IGwz82bic4nVXfIDIRXzrR3e0yUFw2x2rgPQGrCTsNfuIvk-jL-XhFIPssUUkJBOgSZMhdnMifyg7o0GM1fyFeoNyQREUmJF/s320/Panama+Red+Coffeehouse+Concord+CA+December+9+2011.jpg" width="240" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">From <a href="http://panamaredcoffee.com/concord.htm" target="_blank">Panama Red Coffeehouse</a>, Concord, December 9, 2011</td></tr>
</tbody></table>
<a href="https://fbcdn-sphotos-a.akamaihd.net/hphotos-ak-snc7/390218_10150523961510775_503955774_11185628_1433749794_n.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="240" src="https://fbcdn-sphotos-a.akamaihd.net/hphotos-ak-snc7/390218_10150523961510775_503955774_11185628_1433749794_n.jpg" width="320" /></a>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-tNX-7_M-RH6NCvpHu2Eq4uCprMDox2-MNHGXRICziTEPyBQN87wIOf9HjS3EVaR2joDznI948lmWBPmqF1OYnzb71CBtTqyvdxNszZD_jTXUBtf2gBsMKS6nmpcU23S5dD9RoKQzHWow/s1600/Berkeley+City+Club+Berkeley+November+17+2011.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-tNX-7_M-RH6NCvpHu2Eq4uCprMDox2-MNHGXRICziTEPyBQN87wIOf9HjS3EVaR2joDznI948lmWBPmqF1OYnzb71CBtTqyvdxNszZD_jTXUBtf2gBsMKS6nmpcU23S5dD9RoKQzHWow/s640/Berkeley+City+Club+Berkeley+November+17+2011.jpg" width="480" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">From <a href="http://berkeleycityclubhotel.com/" target="_blank">Berkeley City Club</a>, November 17, 2011<br />
<br />
<div style="text-align: left;">
<span style="font-size: small;"><a href="http://theutah.org/performance/johnhammink/20111219/againsttheglass" target="_blank">Here</a> is one of my songs from my performance at the <a href="http://theutah.org/" target="_blank">Hotel Utah</a>, San Francisco, from December 19, 2011.</span></div>
<br />
<div style="text-align: left;">
<br /></div>
</td></tr>
</tbody></table>
</div>John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com2tag:blogger.com,1999:blog-986509793457320090.post-91088913294306828712011-12-06T18:43:00.001-08:002011-12-07T02:55:11.582-08:00When going down is good<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://1.gvt0.com/vi/xNpsQokXx_E/0.jpg" height="266" width="320"><param name="movie" value="http://www.youtube.com/v/xNpsQokXx_E&fs=1&source=uds" />
<param name="bgcolor" value="#FFFFFF" />
<embed width="320" height="266" src="http://www.youtube.com/v/xNpsQokXx_E&fs=1&source=uds" type="application/x-shockwave-flash"></embed></object></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://24.media.tumblr.com/tumblr_lowp6n5ANg1qzqp61o1_500.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="http://24.media.tumblr.com/tumblr_lowp6n5ANg1qzqp61o1_500.gif" width="320" /></a></div>
I've often complained about how jumping out of an airplane with an experienced tandem guide is safer than <a href="http://cad.chp.ca.gov/" target="_blank">merging onto the 101</a>. It's certainly more fun.</div>John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com5tag:blogger.com,1999:blog-986509793457320090.post-51586195048779634762011-11-28T13:49:00.001-08:002011-12-12T14:58:24.419-08:00Let's have a look at some recently landed Web APIs for Firefox<div dir="ltr" style="text-align: left;" trbidi="on">
So, without further ado (as there's been too much "to do" about it) let's take a look at what we presently have (landed or about to land) regarding our latest (Firefox) Web APIs.<br />
<br />
You'll need the latest <a href="https://ftp.mozilla.org/pub/mozilla.org/mobile/nightly/latest-mozilla-central-android-xul/">xul fennec builds</a> to run these. Technically, these also run on the latest birch nightly, but that one is presently undergoing a major facelift due to rendering and related issues.<br />
<br />
I'd suggest using a tablet. (For the SMS app, you'll need a phone with simcard and a <a href="http://people.mozilla.org/%7Ejhammink/android_builds_4_testing_webapi/for_SMS_API/fennec-11.0a1.en-US.android-arm.apk%09">special build</a>, but we'll get to that presently).<br />
<br />
All example testpages to which we'll be referring are available under the directory at: <a href="http://people.mozilla.org/%7Ejhammink/webapi_test_pages/">http://people.mozilla.org/~jhammink/webapi_test_pages/</a><br />
<br />
If you find a bug with any of the demos and/or APIs themselves (and we hope you will:) please write them here:<br />
<a href="http://shrt.st/2adv">http://shrt.st/2adv</a><br />
<br />
Make sure to include your device model & Android version, as well as the nightly fennec version you are using, in the bug.<br />
<br />
<b>Battery API demo:</b><br />
<a href="http://people.mozilla.org/%7Ejhammink/webapi_test_pages/BatteryAPIdemo.html">http://people.mozilla.org/~jhammink/webapi_test_pages/BatteryAPIdemo.html</a><b> </b><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMayb9Gq4fi7DGEY7V5uXIKFdW8WOb089Ta7wjZ_nw3Nmvy0fftjFLRkOatMt-KS2azLTy_-ilc1jK3qB-FNscutDhV8wHBOsm28fb6x3TxOGGF6T5QHA-DGjqZ8YrQLBsPy7Gjvm4q6Uq/s1600/SC20111128-142031.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMayb9Gq4fi7DGEY7V5uXIKFdW8WOb089Ta7wjZ_nw3Nmvy0fftjFLRkOatMt-KS2azLTy_-ilc1jK3qB-FNscutDhV8wHBOsm28fb6x3TxOGGF6T5QHA-DGjqZ8YrQLBsPy7Gjvm4q6Uq/s320/SC20111128-142031.jpg" width="320" /></a>This API tests the different charging states of the battery, along with charging level and discharging time.<b> </b>Try launching the page with the device plugged in, and then unplugging (and/or vice versa). Note that the charging/discharging time presently shows <i>Infinity </i>until the battery has charged/discharged about 2% of its total capacity.<br />
<br />
Does the testpage show the correct battery state for the device? Does it correctly generate an alert when the charging state changes? Is the level correct (when compared against native battery app level)? Does it give a numerical discharging/charging time <b></b>after some time in the same charging state?<br />
<br />
<b>Camera API demo:</b><br />
<a href="http://people.mozilla.org/%7Ejhammink/webapi_test_pages/CameraAPIdemo.html">http://people.mozilla.org/~jhammink/webapi_test_pages/CameraAPIdemo.html</a><b> </b><br />
This API presently tests the browser's ability to directly capture pictures from the device camera. <br />
<br />
Point the device camera at the object you want to shoot<b> </b> and click capture.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj23Vtt3qHuaFiz-Cl4jSnuqrs4xx-LWbm1Ho08y1yXOU2VP8MS94hlHpg1cL5Wx9LLYvUdkidXiAO5VeJMqKxPVD4wIB_8s9mrcEIQVfUTanL-Lboi9zrsigXgrATmTr8-TXOjGozz8vT/s1600/SC20111128-143915.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj23Vtt3qHuaFiz-Cl4jSnuqrs4xx-LWbm1Ho08y1yXOU2VP8MS94hlHpg1cL5Wx9LLYvUdkidXiAO5VeJMqKxPVD4wIB_8s9mrcEIQVfUTanL-Lboi9zrsigXgrATmTr8-TXOjGozz8vT/s320/SC20111128-143915.jpg" width="320" /></a></div>
<br />
Is the picture rendered correctly (as opposed to upside down, or sideways) both in the pre-capture and the preview? Is the picture quality consistent with what your camera normally delivers? Are there any other issues? Please feel to play around with it a bit.<br />
<br />
<b>IndexedDB API demo:</b><br />
<a href="http://people.mozilla.org/%7Ejhammink/webapi_test_pages/IndexeddbAPIdemo.html">http://people.mozilla.org/~jhammink/webapi_test_pages/IndexeddbAPIdemo.html </a> <br />
<br />
Since accessing the native file system from the web introduces a huge risk, there needs to be a way to handle offline storage directly on a device. Enter IndexedDB. Actually, this api has been around since Firefox 4 (and subsequently for quite a few Chrome and other browser versions since) but the <a href="http://www.w3.org/TR/IndexedDB/">W3C spec</a> got a rewrite recently and it's been well overdue for an upgrade.<br />
<br />
When the browser first tries to create a local database, a prompt requests permission:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVLEMmSd_0mnju5dSIdiJ7Pp8syk4oPfEGexpbiuOCaAbpMq8nLTuz6WQz2iFnxqhPUapN3ZDHLGiXQ9Y_iHceBd3xbPVAO5aG6voIw7Ogeyo_VN_hSZVTVTyiORnLRP_Kx6bgwDFSnOu8/s1600/SC20111128-154911.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVLEMmSd_0mnju5dSIdiJ7Pp8syk4oPfEGexpbiuOCaAbpMq8nLTuz6WQz2iFnxqhPUapN3ZDHLGiXQ9Y_iHceBd3xbPVAO5aG6voIw7Ogeyo_VN_hSZVTVTyiORnLRP_Kx6bgwDFSnOu8/s320/SC20111128-154911.jpg" width="320" /></a></div>
<br />
Subsequently, once this is allowed, the db initializes, and after some time, reports back on the number of records:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQKWq9mX8EKhbyKwnDufsJNvQLiq97nVTBhMrBoyZvzjLtNVUjQz3-M75V0Tpj9WvVNK3tCuTm57239CFN3REpDfpEKIdLgDUkiltrlnRGbtFj2M3vd45sahFnNi6vvjeY6QTOVLCqGHy6/s1600/SC20111128-154913.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQKWq9mX8EKhbyKwnDufsJNvQLiq97nVTBhMrBoyZvzjLtNVUjQz3-M75V0Tpj9WvVNK3tCuTm57239CFN3REpDfpEKIdLgDUkiltrlnRGbtFj2M3vd45sahFnNi6vvjeY6QTOVLCqGHy6/s320/SC20111128-154913.jpg" width="320" /></a></div>
<br />
<br />
Our current demo matches a hash of zipcodes against a city (you must have zipcodes.csv present in same dir to work - this demo does), doing all the database access operations. (Note that we're presently missing the functionality to do the reverse!) Once the CSV is loaded into the device local database, the lookup should be instantaneous (note that all the steps are not depicted here):<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV3qNwdKHWR6U7xBYMAEMPljfhxPsLvLEKH7-HHPOI8GTq9iMe0a3ryzpmRHhVjHquig21ZzboE4QXEUxHZcx_OWeVqNBNR6h1fYFzRBqPCK6hh8CprF7zx4rG2YLPNzWMFRyuQ45cWydm/s1600/SC20111128-155321.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV3qNwdKHWR6U7xBYMAEMPljfhxPsLvLEKH7-HHPOI8GTq9iMe0a3ryzpmRHhVjHquig21ZzboE4QXEUxHZcx_OWeVqNBNR6h1fYFzRBqPCK6hh8CprF7zx4rG2YLPNzWMFRyuQ45cWydm/s320/SC20111128-155321.jpg" width="320" /></a></div>
Note that I've been getting dramatically different results from device to device. Sometimes it works, sometimes not. To be sure the feature is still a work in progress, so let me know what your experiences are.<br />
<br />
<b>Vibrator API demo:</b><br />
<a href="http://people.mozilla.org/%7Ejhammink/webapi_test_pages/VibratorAPIdemo.html">http://people.mozilla.org/~jhammink/webapi_test_pages/VibratorAPIdemo.html</a><b> </b><br />
<b> </b><br />
Web apps, just like native ones, need a way to send feedback to various sensors - including notification vibes. The W3C spec lays a foundation, which we've <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=679966">implemented</a>. Note that you'll need a device with a vibrator to test this one:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ8wmbuXpv49QoZJCHFWiHYdpEfhHS-rywYTpP-u1n2hhU4JP78WxnKBT-ee9dq-41Vcoa_DrX1RGLVUMjEbAo4PYCDoEphGoQ2T_WYVWCZXm0sW2E5aIKpOOEDhcUcledJ-yvoXm9udkl/s1600/SC20111128-161315.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ8wmbuXpv49QoZJCHFWiHYdpEfhHS-rywYTpP-u1n2hhU4JP78WxnKBT-ee9dq-41Vcoa_DrX1RGLVUMjEbAo4PYCDoEphGoQ2T_WYVWCZXm0sW2E5aIKpOOEDhcUcledJ-yvoXm9udkl/s320/SC20111128-161315.jpg" width="320" /></a></div>
<br />
You'll need a special <a href="http://people.mozilla.com/%7Ejhammink/android_builds_4_testing_webapi/for_vibrator_API/fennec-vibrator.apk" target="_blank">build</a> for this one also. Try out each of the scenarios and verify the result. Are we getting the correct number of buzzes, given the spec? As with any of our APIs here, you can check the implementation by typing the string "view-source:" (without the quotes) before the "http://....". Try it.<br />
<br />
<br />
<b>SMS API demo:</b><br />
Note that you'll need an android phone with a working SIM card to try these demos. Until this feature lands, you may also may also need a <a href="http://people.mozilla.org/%7Ejhammink/android_builds_4_testing_webapi/for_SMS_API/fennec-11.0a1.en-US.android-arm.apk">special build</a> with this feature.<br />
<b><br /></b><br />
<a href="http://people.mozilla.org/%7Ejhammink/webapi_test_pages/SMSAPI_simplesend.html">http://people.mozilla.org/~jhammink/webapi_test_pages/SMSAPI_simplesend.html</a><b><br /></b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_VA7ZD4LCJnFpnjawgOC9palEDH2gKRq3ezxZyHov9NSneMCA88UPSltVpLyL-Nqqj0uBmJ0MZyumVzZ0dYYXTDwe85EPq3oPi22-pTwMPNDvdSloZfA36amPMgIKxUpnDCilimhxeiH8/s1600/SC20111128-162229.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_VA7ZD4LCJnFpnjawgOC9palEDH2gKRq3ezxZyHov9NSneMCA88UPSltVpLyL-Nqqj0uBmJ0MZyumVzZ0dYYXTDwe85EPq3oPi22-pTwMPNDvdSloZfA36amPMgIKxUpnDCilimhxeiH8/s320/SC20111128-162229.jpg" width="320" /></a></div>
<br />
The simplesend is a page that lets you send SMS messages to any phone. Try it! Is your message able to get through? Any other issues? Note that, for testing purposes, you can also try sending the messages directly to the same phone from where they originate.<br />
<br />
This next example lets you do exactly that: send and receive SMS messages from the same webpage instance:<br />
<a href="http://people.mozilla.org/%7Ejhammink/webapi_test_pages/SMSAPI_send_receive.html">http://people.mozilla.org/~jhammink/webapi_test_pages/SMSAPI_send_receive.html</a><br />
<br />
This page is similar to the previous one, but also has an event handler for incoming messages.<br />
<br />
Don't forget to study the page source, for each of these pages, to understand how these APIs are implemented. <br />
<br />
And, once again, don't hesitate to <a href="http://shrt.st/2adv">file a bug</a> if something doesn't appear to be working correctly, or if you have an idea about some features you'd like to see. <br />
<br />
<b>Addendum: </b>The Web API test pages are now available in github: <a href="https://github.com/jhammink/WebAPI-test-pages">https://github.com/jhammink/WebAPI-test-pages</a></div>John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com38tag:blogger.com,1999:blog-986509793457320090.post-12039724603768898222011-11-21T00:20:00.001-08:002011-11-21T16:07:15.055-08:00Mozilla's Web API - on testing a framework.<div dir="ltr" style="text-align: left;" trbidi="on">
So, hello again to you all. It's been ages since I last posted at this space - but for good reason: I've taken my performance show on the road again, and, at the same time, begun my work at Mozilla. I find myself, once again, in the happy place of doing, on a daily basis, two different things that I love.<br />
<br />
Primarily, my work has been around our <a href="http://hacks.mozilla.org/2011/08/more-details-about-the-webapi-effort/">Web API</a>, and how we will write -and eventually automate - tests against it. But how will we do this?<br />
<br />
Our API is intended to "expand what the web can do". One of the most important implications is the ability to access - in a secure fashion - our device hardware from the web. To that end, there are such things as Vibrator API, Battery API, Settings API, Accelerometer and Sensor API, a new and improved Geolocation API, Sound API....from which we can work our device directly from the web!<br />
<br />
So, how does one test a bunch of APIs as a user would use them? Well, one thing (and I've been involved with such an effort before) is to build an Application Framework - essentially a series of mock-up and atomic apps that each demonstrate a single API. <br />
<br />
Over time, these atomic apps will be folded into more feature rich ones - to demonstrate the capabilities and (hopefully - we're QA after all) reveal any bugs that mixing and matching these APIs will uncover.<br />
<br />
Another aspect that is important - particularly where automation is concerned - is a way of getting "golden values". We will build a series of simple native applications for each OS that will help us to obtain these values for comparison.<br />
<br />
Watch this space - in the (very near) future we will demonstrate how many of the web apis work; how we will build HTML/JS test pages around them and test many of the features as a user would use them; build our golden apps in java and/or python (depending on our target platform), and, eventually, work the lot into an automation framework. All of the code will be freely available on github.<br />
<br />
I'm hoping for many outcomes; one of them being that you will learn (if you don't know already) how any of the technologies depicted here actually work, but also that you might jump in and help out - when the time is ready - by expanding what we've started here and our web api testpages, enriching our automation core apps, and really putting those apis through the paces, at their intended purpose.<br />
<br />
Stay tuned!</div>John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com27tag:blogger.com,1999:blog-986509793457320090.post-55141161134168317332011-10-12T00:12:00.000-07:002011-10-12T15:26:03.937-07:00Absence is the inverse of presence<div dir="ltr" style="text-align: left;" trbidi="on">
<blockquote>
<i>"When the changes come, hallelujah! When the changes come, there's nothing you can do."</i></blockquote>
- from a song by Matt Weidemann<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8HByEqVVBrTnOxMh1JpZkMBblrWCTVWTa81_uQmfK9bE0xVueNd_3LPZJ5q8qpRjc0BhMYpGXdiF1DMGgZeFdushdkjFjVPR805O6Vclk9V-7cbl820B_-uvOAAddNvrE8ZNbyz0HHimd/s1600/182285_10150150109740775_503955774_8650848_1310145_n.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8HByEqVVBrTnOxMh1JpZkMBblrWCTVWTa81_uQmfK9bE0xVueNd_3LPZJ5q8qpRjc0BhMYpGXdiF1DMGgZeFdushdkjFjVPR805O6Vclk9V-7cbl820B_-uvOAAddNvrE8ZNbyz0HHimd/s400/182285_10150150109740775_503955774_8650848_1310145_n.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Kisu. Helsinki, 2010</td></tr>
</tbody></table>
<table class="image" style="margin-left: 0px; margin-right: auto; text-align: left;">
<tbody>
<tr><td class="caption"><br /></td></tr>
</tbody></table>
<div style="text-align: left;">
Kisu, my buddy of 14 years, the "Itty-bitty-kitty" passed away Monday morning at the age of 15. I think the sense of loss and absence has only just begun.<br />
<br /></div>
<div style="text-align: left;">
We had planned for a veterinary visit already on Thursday, but the week went on as I became more focused on my new job.<br />
<br /></div>
<div style="text-align: left;">
So we changed our plans to Monday. I had some idea in the back of my mind that she wouldn't make it that far. She started failing already on Saturday; that was the last time she could make it to my lap; by Sunday, she could no longer get up on her own. I moved her from the window (it was the last beautiful day of the rainy California autumn), which was open, to the bed. I played her a little dulcimer for a few minutes and also sang her a few old songs she may remember from her earlier years. During the dulcimer part, she rallied around and with much shaky effort and managed to give me that loving look I've been blessed with so many times. During the night, she reached out with her paws to me a couple of times. By Monday morning, she had slipped away. I wonder, what, if anything, she's experiencing now?</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
We all have our legacies and journeys to tell about, but somehow the years with Kisu were extraordinary. She came into my life when a younger, more worried me was living with a girlfriend, anxiously unemployed in a tiny Soviet-looking apartment in Helsinki. Although the situation eventually resolved itself by the end of summer, having the one-year old Kisu around (who was left to us by a recent divorcee) was, in a pattern set for the rest of her life, an incredible reassurance. Her playful antics were the perfect (or as good as could be expected) distraction from the anxiety of a 27 year old, who doesn't know any better how things usually work out for the better; literally thousands of CVs later and I had found myself some pretty lucrative work, and had reached an island in the storm.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Over the years, Kisu was with me during the meteoric rise and riches accompanying the IPO of the company which gave me my first real job; she moved with me from the heights of Kallio, Helsinki, up to the forests of Espoo, and eventually across the Gulf of Finland to Tallinn, Estonia, where I set out on my own and eventually connected with another company that encountered even more meteoric success than the first one had. She patiently waited with friends during my jet-setting years, when I always seemed to be catching a flight to some remote corner of the world (sometimes she caught the flight with me!). Then she eventually reunited with me when we moved together to a huge house in the Swedish countryside. Eventually, she even moved with me back to my original homeland of Ohio, U.S.A.; enduring my irritating months with one not-too-happening nor well-advised startup, and finally made one last great journey of her amazing feline life: a trip, by car, from Cleveland, Ohio to Silicon Valley, California. Again, enduring the stresses of a dysfunctional contract (but one where I learned oodles), taking me, through another contract hunt, finally to my present job, one where I feel secure and appreciated for the first time in years.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Kisu lived in Finland, Estonia, Sweden, and the United States (including traveling across it) and visited Chile and Russia. She's been to homebrew robotics and programming nights, with gaggles of caffeinated pals, living room jam sessions, real commercial recording sessions, Christmases and Thanksgivings, hosted more guests than I can imagine and been the guest of at least five families that I can remember. She's been through the most excessive of good times and the leanest of lean times and everything in between. She's sat by the side of my computer as I've worked, in my lap when I've cried and across from me, watching eagerly, when I've sang. And we met in that tiny apartment on Alppikatu; she died in a motel. In some ways, it seems, we've taken a step back together. Just her and me. </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
I live alone, and have for some time now. Sometimes I have thought that cat is the only thing keeping me from going crazy.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
On the Monday evening following hear death, I removed all traces of her from the apartment (well, not exactly all, but the unused litterbox, food). I knew that I couldn't stand to have that stuff around, and that it would be difficult to deal with, the more time passed.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
I still sense her in the ways that she's not there: expectations of a soft padding up to the bed, of her watching me from the bed or chair when I came in the door everyday; of her sniffing the breeze out the window, and watching the activities, the seasons change, the rain, the sunshine. And then there are the intangibles of absence: the absolute dead quiet of the room, the sense that someone else is right out of earshot or just around the corner. Kisu is present in her absence.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Like a boat making its way through a calm stream, our legacy is as much about the ripples that remain after us. That which is present, and <i>of</i> us, in our absence. In this way, we persist. Although I have to give myself some credit, I feel that Kisu, in her lifetime, took me (well, she took the journey with me) from a place of anxiety, through some incredible moments and backdrops, to a much more hopeful place. If I make the best of this, now, will she, as she persists now, be ever intertwined with this new future?</div>
<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdoGD_lRegYc3_xMEqbs3pgK1PdUR6-LrWw7MONzsXgEnf9-fhGKA0Kz6uw7pmtDUJ3DpCM3bcS97le0GGcbLH_0gh23VPqX0FERVadpz90fP8rLo-dflH77HM28bm86VeMlrye_wW5OWE/s1600/Kisu+and+John%252C+Denver+2011.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="354" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdoGD_lRegYc3_xMEqbs3pgK1PdUR6-LrWw7MONzsXgEnf9-fhGKA0Kz6uw7pmtDUJ3DpCM3bcS97le0GGcbLH_0gh23VPqX0FERVadpz90fP8rLo-dflH77HM28bm86VeMlrye_wW5OWE/s400/Kisu+and+John%252C+Denver+2011.jpg" width="180" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Kisu and me. Denver Colorado, Summer 2011</td></tr>
</tbody></table>
</div>John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com3tag:blogger.com,1999:blog-986509793457320090.post-80937151429890161472010-12-05T17:44:00.000-08:002010-12-08T16:00:23.234-08:00Liet International 2010, playing bass with Jousnen Jarved<object height="170" width="320"><param name="movie" value="http://www.youtube.com/v/P1-9JE2fwwA?fs=1&hl=en_US&rel=0"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/P1-9JE2fwwA?fs=1&hl=en_US&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="170" width="320"></embed></object><br /><br />It's always been one of my big dreams to play bass for <span style="font-style: italic;">world music</span> and although, since having this dream in the early 90's when I was briefly a fill-in <a href="http://www.wcbn.org/">disk-jockey at an Ann Arbor, Michigan radio station</a> - I've recorded <a href="http://www.soundclick.com/rijksbandradio">fairly little</a> in this regard - and of extremely variable quality, in relation to where I've actually been over the last 10 years or so. Most of my recorded stuff is from Russia, <a href="http://soundclick.com/share.cfm?id=4216933">Siberia</a>, <a href="http://soundclick.com/share.cfm?id=4216117">China</a>, (I've recorded others from <a href="http://soundclick.com/share.cfm?id=4216968">Taiwan</a>), the <a href="http://soundclick.com/share.cfm?id=4045116">middle-east</a> (stylistically), or Fenno-Scania - and I can add both Americas and Greenland to the itinerary. Occasionally, however, I do something which represents a bit of a zenith.<br /><br />Ahh, but enter <a href="http://www.jousne.com/">Jousnen Jarved</a>, from Russia. I've been travelling to the Russian side of Karelia since the early 2000s and have worked with the project's creator, Peter Coon, for almost as long. Peter's quite the producer, having written, scored, and produced a few <a href="http://soundclick.com/share.cfm?id=4787803">hard-rocking</a> <a href="http://soundclick.com/share.cfm?id=4787718">singles</a> for me out of his own studio in Petrozavodsk, and being an honest-to-goodness music professional in his own right, something which I am most definitely not. And so, it was like the dream fairy came and dropped this thing in my lap, as I was sitting in Helsinki, bored to death with my musical prospects there, and about ready to give up on the whole damn thing. The <a href="http://www.liet.nl/">Liet International</a> festival in Lorient, France, was just the ticket.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirlGKxox2RFWXNh8vJ7xPpKQwT2u3SZgQdxV4vlGem-lf3E8xb_yGJMlsQGKVgzMyht8YvVQFlp4RvyRhxr_YqkVBLofYybOyhjvasHJhh_2V5bAmcnMhfNkAk0WtnNDwwY6rUuEvTK5YC/s1600/Jousne_Liet2010_1.jpg"><img id="BLOGGER_PHOTO_ID_5547390174861973570" style="width: 320px; cursor: pointer; height: 170px;" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirlGKxox2RFWXNh8vJ7xPpKQwT2u3SZgQdxV4vlGem-lf3E8xb_yGJMlsQGKVgzMyht8YvVQFlp4RvyRhxr_YqkVBLofYybOyhjvasHJhh_2V5bAmcnMhfNkAk0WtnNDwwY6rUuEvTK5YC/s320/Jousne_Liet2010_1.jpg" border="0" /></a><br /><br /><span style="font-style: italic;">TV Renne</span> in France, <span style="font-style: italic;">Fryslan T.V</span>. in the Netherlands and <span style="font-style: italic;">CNN</span> covered the event for a global audience. We're up for a spot (and hopefully rotation) on Radio St. Petersburg at some point, but I don't know the details yet.John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com0tag:blogger.com,1999:blog-986509793457320090.post-36246900616242920662010-11-15T01:46:00.000-08:002010-11-15T17:11:39.349-08:00Off the beaten path - Test Automation that can vary (and learn)...<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglmUTex49Gl1LNdJ1JjjPC4LNLT-gHgAmxgzEvh7CcEk9GnXp7el8t24voxO2Vg6Dhh1FSpxP-2CdSv2Oa5WmrDgPzQRT_qTuhbG1XXoWiA3GpJzZSKzPM6KkvA3TZ9f9LHUHOqGFz-ERg/s1600/classy_robot.jpg"><img id="BLOGGER_PHOTO_ID_5539713517132678674" style="float: left; margin: 0px 10px 10px 0px; width: 224px; height: 154px;" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglmUTex49Gl1LNdJ1JjjPC4LNLT-gHgAmxgzEvh7CcEk9GnXp7el8t24voxO2Vg6Dhh1FSpxP-2CdSv2Oa5WmrDgPzQRT_qTuhbG1XXoWiA3GpJzZSKzPM6KkvA3TZ9f9LHUHOqGFz-ERg/s320/classy_robot.jpg" border="0" /></a><br />The problems with most software test automation is essentially twofold: for the most part, it's only capable of following the same path, over and over again, and, it's incapable of ever learning. It's as dumb today as it was yesterday. That said, it's just not as classy as it could be.<br /><br />What, it can be asked, is such repetitive test automation actually useful for? Well, most importantly, for verifying that something doesn't get broken as new features get added to our software; we opt to run our tests to give us a sense of confidence in <em>what's already there. </em><br /><br />Of interesting note, though, is the fact that we nearly <em>always</em> need to pair our automated tests with hands-on exploratory testing. Except that it never really happens like that. The hands-on exploratory testing gradually gives way to the <em>Manual Monkey Test</em> as the testers and managers lose confidence in those unique skills of perception and hunches that make us human and instead seek something quantifiable, repeatable and reproducible.<br /><br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS4EG61iyxNcr4a_bzfyMsG03J-auCCfInD4kRsRHMdRoO4S4bA8K6WGdtqZ4EK3QllLu3OZhfczaIdTDaF5QRCE7Np3G-a7UtQ2-GAacLLqXT775f6jy_k8Hh3R-aIjmzY-CuijYeHUrX/s1600/trained_monkey.gif"><img id="BLOGGER_PHOTO_ID_5539745266081489890" style="display: block; margin: 0px auto 10px; width: 320px; height: 240px; text-align: center;" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS4EG61iyxNcr4a_bzfyMsG03J-auCCfInD4kRsRHMdRoO4S4bA8K6WGdtqZ4EK3QllLu3OZhfczaIdTDaF5QRCE7Np3G-a7UtQ2-GAacLLqXT775f6jy_k8Hh3R-aIjmzY-CuijYeHUrX/s320/trained_monkey.gif" border="0" /></a><br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbXUZ0GWprGeD5SDC5HuV-ZCs1rXNxdly2WYV-2jya6Q7N194V1EhpF93CfGfoDC47xixeSIR4lTXVhbfdcEkceFqL6x0DTj8ULXe7owiSkBNWQV9-YqdGNWnRF85XpG-9rnWXn4sIElL4/s1600/trained_monkey.gif"></a><br /><p>So how can we turn this around? Boredom with repetitive work begets automation; automation begets need to exploratory test which somehow though time pressures turns into more of the same....in the meantime, the defects to be found live "somewhere" off the path of this tedious nightmare.<br /></p><p>There are no complete solutions presented here, but I hope you might get some idea of the possibilities available.</p><p><br />Well, one thing to do is to make our test automation more intelligent. Exploratory testing essentially involves two skills, before thought to be uniquely the domain of homo-sapiens - 1.) the ability to <em>randomize</em> inputs and 2.) the ability to assess and <em>learn</em> if a given output is appropriate given a non-linear input. Let me elaborate.<br /><br />One of the great benefits of open-source software on test automation is (aside from not being bound to a proprietary language) the ability to leverage the wealth of extension libraries that come with the open source languages, and you're supported for free by a massive user community of volunteers. Tools like <em>Squish</em> and <em>Selenium</em> use <em>Python </em>(among others); Nokia's <em>TDriver</em> uses <em>Ruby</em>.<br /><br />Without going into too much low level detail ;-), both Python and Ruby have randomizer functions. In Python, one can use the <span style="font-family:courier new;">rand()</span>function with an integer as an argument, for example rand(7) returns any number between 0 and 6; Ruby has exactly the same thing. Here's a recipe in Ruby for a simple sort and shuffle of a deck of cards, producing <em>n log n</em> variable swaps:<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJxOxq4E3jd994ytTVege5YsujsYHVgCJDlQJCWFE7x7oIZzYCXHsCXiwVJcztlOaF7TcC7lflrXI5P6HG0jNBXc6vtfewTvI36KQwuGInA8WsAWSj4R8ol4IMhGrVqs178pgwe_y_6np_/s1600/rand_array.JPG"><img id="BLOGGER_PHOTO_ID_5539756155898213794" style="float: left; margin: 0px 10px 10px 0px; width: 320px; height: 106px;" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJxOxq4E3jd994ytTVege5YsujsYHVgCJDlQJCWFE7x7oIZzYCXHsCXiwVJcztlOaF7TcC7lflrXI5P6HG0jNBXc6vtfewTvI36KQwuGInA8WsAWSj4R8ol4IMhGrVqs178pgwe_y_6np_/s320/rand_array.JPG" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br />Now, this won't be the fastest way if you're dealing with a <em>very large </em>list, but for generating a small set to explore alternative paths, it could well suffice.<br /><br />Now this randomizing can apply to just about any input that comes as an index - so this means just about anything: selected items in a list, buttons in toolbars, parts of a string or a numerical sequence. Once we are randomizing, we are dealing with <em>inputs.<strong> </strong></em>But, how to know <em>when</em> to randomize?<br /><br />Most users out there are going to use a software application in a given or fairly static way - just enough steps to suit their purpose. Configure the music player, cue it up and play the song. But every ONCE in a while, they might deviate from that sequence. So knowing <em>when</em> to randomize, means knowing how often, based on probability, to do something completely different.<br /><br />By way of a practical example....<a href="http://www.cukes.info/">Cucumber</a> has become a popular way to express automatic tests in plain language. A cucumber test may read something like this:<br /><br /><span style="font-family:courier new;">Given the MusicPlayer application is started </span><br /><span style="font-family:courier new;">When I press Options softkey </span><br /><span style="font-family:courier new;">When I select Songs from menu </span><br /><span style="font-family:courier new;">And I Select the Song number 1 </span><br /><span style="font-family:courier new;">Then <strong>Now playing</strong> view is opened correctly</span><br /></p><p>Where <em>each line</em> in that block relates to a function implemented in the core language below it, for example: </p><p><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH9CbXNwRv8DrswrZXdUTbYujAlzt3yKL6IuVymgVrYnY8ya9ODHiRHAhIAuLz9e9bn23J_5Flb-Yj0pPIOm4N3anWelYAHlUa8gv9EUjXa4XJDjDjLCPMAuqrMxsSv0uhGK-LV1TdVmY3/s1600/nk.jpg"><img id="BLOGGER_PHOTO_ID_5539767522464763234" style="float: left; margin: 0px 10px 10px 0px; width: 559px; height: 116px;" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH9CbXNwRv8DrswrZXdUTbYujAlzt3yKL6IuVymgVrYnY8ya9ODHiRHAhIAuLz9e9bn23J_5Flb-Yj0pPIOm4N3anWelYAHlUa8gv9EUjXa4XJDjDjLCPMAuqrMxsSv0uhGK-LV1TdVmY3/s320/nk.jpg" border="0" /></a><br /><br /></p><p><br /><br /><br /><br /><br /></p><br /><p>Once we pass a certain <em>threshold </em>(e.g. the function has been accessed <em>n</em> times, we are twice or three times likely to deviate from our original number and choose a random index). Doing this effectively requires a trick though - the ability to visualize a software system as a state machine in 4D. And if we randomize at the <em>function</em> level, our cucumber test writer gets the benefit of that randomization without having to do anything differently<br /></p><p>Once our scripts start to randomize, however, the fixed answer sets to our test runs will no longer suffice; our tests will require the ability to be able to <em>be trained</em>, to <em>learn</em>, and to <em>guess </em>based on previous history as per a correct answer. Fortunately, our open-source languages have the tools to allow us to be able to do just that.</p><br /><p>Bayesian gems are already in common use in email spam filtering. Python, for example offers the <span style="font-family:courier new;">PEBL</span> and <span style="font-family:courier new;">Classifier</span> libraries; Ruby offers <span style="font-family:courier new;">Bishop</span> and <span style="font-family:courier new;">Classifier</span> gems. Training for the Classifier gem works along the lines as follows (note - NOT TESTED):</p><p><span style="font-family:courier new;">require 'rubygems'</span></p><p><span style="font-family:courier new;">require 'classifier'</span></p><p><span style="font-family:courier new;">classifier = Classifier::Bayes.new('Song', 'Not_Song)</span></p><p><span style="font-family:courier new;">classifier.train_Song('%r{.+\.(?i)mp3}')</span></p><p><span style="font-family:courier new;">classifier.train_Song('%r{.+\.(?i)3gp}')</span></p><p><span style="font-family:courier new;">...</span></p><p><span style="font-family:courier new;">classifier.train_Not_Song('%r{.+\.(?i)jpg}')</span></p><p><span style="font-family:courier new;">...</span></p><p>And the good stuff - where the real demonstration of learning happens - is here:</p><p><span style="font-family:courier new;">classifier.classify "bubba_chops.jpg"</span></p><p><span style="font-family:courier new;">#=>"Not_Song"</span></p><p><span style="font-family:courier new;">classifier.classify "song.3gp"</span></p><p><span style="font-family:courier new;">#=>"Song"</span></p><p><span style="font-family:courier new;">classifier.classify "song.m3u"<br /></span><span style="font-family:courier new;"></span></p><p><span style="font-family:courier new;">#=>"Song"</span></p><p>In the case where the script gets it wrong - you have to train it. But after more and more iterations - it will start to make the correct decisions in more and more of the cases. </p><p>This is where your script can think, and make decisions as you do.</p><p>And that's no monkey business.</p><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5UtCTnr42Ls1q-iGpufWpLHa3wWYMckwYeMqrGOKn8tvd60LQ2Fc4LAhquIKWtS-BbVYpcZWCrYf3VjqfT7E10H5rbaWJvduHPgGn4v1DAhFuZJGIflZMJKAdzzlK0mdcmXP8AoDJzyJX/s1600/no_monkey-business.jpg"><img id="BLOGGER_PHOTO_ID_5539777356288054050" style="width: 150px; height: 190px;" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5UtCTnr42Ls1q-iGpufWpLHa3wWYMckwYeMqrGOKn8tvd60LQ2Fc4LAhquIKWtS-BbVYpcZWCrYf3VjqfT7E10H5rbaWJvduHPgGn4v1DAhFuZJGIflZMJKAdzzlK0mdcmXP8AoDJzyJX/s320/no_monkey-business.jpg" border="0" /></a><br /><p></p><br /><p><span style="font-family:times new roman;"><br /></span><br /><br /></p>John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com3tag:blogger.com,1999:blog-986509793457320090.post-84260029730547212182010-08-11T10:16:00.000-07:002011-01-18T14:50:36.522-08:00The sine wave and quantum beats<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh89cirqmdZGXnu0Z0uzewnH5IICAUICBKdO1_pw1bklCiIZMkk-k0PTCg5sLsNOpmahyaN0vQ8hfhJ0Q9c-qPPIbu264282nJDFyyjbH7JPIpfK8PBeGJEwy9ZONM5iaCAGlRfuRJZa5TN/s1600/index.png"><img id="BLOGGER_PHOTO_ID_5504203250555885282" style="FLOAT: left; MARGIN: 0pt 10px 10px 0pt; WIDTH: 231px; CURSOR: pointer; HEIGHT: 154px" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh89cirqmdZGXnu0Z0uzewnH5IICAUICBKdO1_pw1bklCiIZMkk-k0PTCg5sLsNOpmahyaN0vQ8hfhJ0Q9c-qPPIbu264282nJDFyyjbH7JPIpfK8PBeGJEwy9ZONM5iaCAGlRfuRJZa5TN/s320/index.png" border="0" /></a><br />s long as I'm mucking about trying to find parallels between quantum mechanics, set theory, and rythm, I set about with a bit of a musical experiment on my trusty korg electribe mx as piped through my soundcraft lexicon mixer's drum plate. The tubes in the electribe give the drums a predictable warmth, while the plate adds room overtones and depth.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1OryVy9aLZ3xEvdddhWMKUeL13oys10X7iDFdbyVOXqqM1HIJ4sUvWXQxRDQdMonDGVuLdz6a6foY8zgwkwgL3Yk1c6WlUoQ0xD8ggl6LqYx7g98REIzdCMaEOOdd7FQaW9iX2Rd-8ssE/s1600/SAM_0645.JPG"><img id="BLOGGER_PHOTO_ID_5504208294086171842" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: pointer; HEIGHT: 240px; TEXT-ALIGN: center" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1OryVy9aLZ3xEvdddhWMKUeL13oys10X7iDFdbyVOXqqM1HIJ4sUvWXQxRDQdMonDGVuLdz6a6foY8zgwkwgL3Yk1c6WlUoQ0xD8ggl6LqYx7g98REIzdCMaEOOdd7FQaW9iX2Rd-8ssE/s320/SAM_0645.JPG" border="0" /></a><br /><br />The problem is no doubt simple from a purely musical or musician's perspective, but interesting from a mathematical one.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.csounds.com/ezine/winter1999/beginner/sine.gif"><img style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 447px; CURSOR: pointer; HEIGHT: 278px; TEXT-ALIGN: center" alt="" src="http://www.csounds.com/ezine/winter1999/beginner/sine.gif" border="0" /></a><br /><br /><br />Just like an ordinary sine wave, we simply build a rythm that alternates parts from one measure to the next. For example, we can build a rhythm consisting of bass drum, snare, and decorate it up top with a constant closed hihat (with an open on the last half beat).<br /><br />Our bass drum hits on [1, 5, 9, 13], where as our snare is on [3, 6, 9, 12]. What we end up with is a pretty straightforward bossa nova, with the intersection of both parts occuring on the half four [9]. Enter the sine wave: we alternate the bass and snare every other measure! (Incidentally, the effect that this has - if I first switch that opening snare to an opening kick - is a binary alternation between bossa nova and rock-steady beat!).<br /><br />Granted this is the simplest way of looking at our beat composition and arrangement, but the best way I can think of to introduce the analogy. But think of the tapestry we could weave when we apply more sophistication to this schema? Like introducing limits, Integration/Differentiation, partial derivatives to the same set of numbers? (Note: I haven't figured all this out myself yet - still some of the results I've observed are really interesting - not to mention they groove, albeit in ways you probably don't expect!) It's probably possible to build this on e.g. complex functions, while keeping the groove. Then you're in uncharted territory, sweet stuff, you're sailing in <a href="http://en.wikipedia.org/wiki/Blue_Ocean_Strategy">blue oceans</a>. Of course, there's more than just these musical variables to tweak.<br /><br />When combined with acoustic instruments, the intent is hopefully to sincerely emulate "the groove" within the prescribed toolset with this added rythmic complexity as part of the mix. But like everything I'm into at the moment, I've kind of ripped the machine down to its parts to muse and dwell on particular small bits of the problem that fascinate me. Hopefully I'll get down to proper business with it soon enough!<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja1IrVYqwKU1hescfRWy43esyGEQ-G5qvDA_OCWeeN0V75mdPXWaBtu1P2oG1YST_phJn4a2T3k_oQUP0n6iqeWe-L_sYVkMg7r0GnJT3Q5AkqtWe1icj0H3opXU23jNSiKMfa7AfC-xjo/s1600/SAM_0649.JPG"><img id="BLOGGER_PHOTO_ID_5504217928362536818" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: hand; HEIGHT: 240px; TEXT-ALIGN: center" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja1IrVYqwKU1hescfRWy43esyGEQ-G5qvDA_OCWeeN0V75mdPXWaBtu1P2oG1YST_phJn4a2T3k_oQUP0n6iqeWe-L_sYVkMg7r0GnJT3Q5AkqtWe1icj0H3opXU23jNSiKMfa7AfC-xjo/s320/SAM_0649.JPG" border="0" /></a>John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com1tag:blogger.com,1999:blog-986509793457320090.post-23917228405834981022010-08-11T05:58:00.000-07:002010-08-11T07:41:14.661-07:00Conservation - of energy and matter - would solve humanities major problem(s)...if we could just get there!<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMUw0Wdd2HXQ7KL-5j4Fn1NWQVSDU4YyW04mRjpBhBJvYSliyJnfQhL8w6JEYTEUyX2OzqOs6vmWPaVSup5vzFH72dDji0Woi5qYDBnbzb9Dhx27L5QOzz_ga56U54cwqyCjFYd9PczRV6/s1600/SAM_0411.JPG"><img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 320px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMUw0Wdd2HXQ7KL-5j4Fn1NWQVSDU4YyW04mRjpBhBJvYSliyJnfQhL8w6JEYTEUyX2OzqOs6vmWPaVSup5vzFH72dDji0Woi5qYDBnbzb9Dhx27L5QOzz_ga56U54cwqyCjFYd9PczRV6/s320/SAM_0411.JPG" alt="" id="BLOGGER_PHOTO_ID_5504143448081193986" border="0" /></a><br />The key to all of this is about humans being able to convert matter into energy, transmit it, and reconvert it back into matter, perhaps conveniently reconfigured!<br /><br />Yes, it's more or less right out of Star Trek (we could beam people around, we could project objects like holographs), is only remotely possible with our current understanding of quantum mechanics (but is apparently only as far away as our grasp of a grand unification theory) which is being stabbed at constantly by professionals and amateurs everywhere (which introduces a promising possibility that something will emerge). Which reminds me, I must look into whatever exists out there in terms of P2P scientific communities and start farming for ideas...same with my fractal art, my music, my programming, my performance style, and just about anything else I've ever smugly attempted to synthesize :P<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQvIZXpbqBG0KLaqnRF9P9e0meTmCJ-bBhgr5G98JfUVZVddiDMZUFrSlUam8JeANqPSbN9tG1TvAp4e0b9hyphenhyphenEFNX1If1GsqnSq67B0MRHhiNKaRBhYz3-1KiOfb9_8cnmM-98PCMlGgwV/s1600/77n.jpg"><img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQvIZXpbqBG0KLaqnRF9P9e0meTmCJ-bBhgr5G98JfUVZVddiDMZUFrSlUam8JeANqPSbN9tG1TvAp4e0b9hyphenhyphenEFNX1If1GsqnSq67B0MRHhiNKaRBhYz3-1KiOfb9_8cnmM-98PCMlGgwV/s320/77n.jpg" alt="" id="BLOGGER_PHOTO_ID_5504154610208909010" border="0" /></a><br /><br />When I was recently in Greenland, I was thinking about the simplicity of water, versus the apparent impossibility (technically speaking) to transform it into energy and back again - and how it would fundamentally transform the conditions of humans, and planet earth. Imagine...being able to take water gushing and streaming off the arctic and antarctic ice and make it bubble out of the ground across all the arid regions on planet earth - from the Sub Sahara across the 'stans to Mongolia. Certainly, the room full of Somalis, Kenyans and other Africans on Helsinki's north-east side agreed with me hands down that this is the major number one obstacle on earth: obviously it would feed and economically enable billions who are currently dormant. By the greening of the deserts, would transform back the environment into something far more oxygen rich and equally less CO<sub>2</sub> saturated.<br /><br />And yet's what stopping it?<br /><br /><br />Humans have, in the 20th century, been able to convert very unstable matter into raw energy in the course of wiping out foes, and related pursuits. And we have harnessed the practical energy of grabbing electrons as they fly off bits of U<sup>238</sup>. This is used in many countries to supplement what we can't get from wind, solar, hydroelectric and other sources of free-in-nature kinetic energy, and wouldn't want to necessarily get from other carbon-based non-renewable sources. But the <span style="font-style: italic;">pure</span> conversion of matter to energy (and back) still seems a long way off in spite of our best efforts. And I find that somewhat puzzling.<br /><br />In browsing across the macro-patterns of human activity we observe attempts to get there, but, for whatever reason, no solution completely bridges the divide. Take<br />current recycling...what we are gaining in reduced quantities of discarded paper (and to a far lesser degree, plastics), we gain in e-waste. With what I call "next years junk" syndrome, technophiles and technophytes, eagerly snatch up the latest available doodad that has arrived to their point on the bell-curve. Off to the "recycling" center or in some cases, landfill, with 2001's latest. Stuff resells on the market for anything greater than junk value for only so long, and when last years doodad goes to Africa, it simply ends up in the ground and water there, because Africans like the latest and greatest, just like everyone else, and they raid their shopping malls in Lagos and Johannesburg just like we do ours in Helsinki, London or suburban LA. <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPDX2hlCyoLBzwE-DNNR6ByQl9XXweTPz0-qdwHh4hesOX9gsesvhPJ4k7feTPQvJjfF3hzRiz7SwckhYEtxPey1kOZVe_BBV_augkaAbv8JxxHchgFhmFw7_5CLGBP0OsArO52HH0mHM0/s1600/6991A-technophobe.jpg"><img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 128px; height: 123px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPDX2hlCyoLBzwE-DNNR6ByQl9XXweTPz0-qdwHh4hesOX9gsesvhPJ4k7feTPQvJjfF3hzRiz7SwckhYEtxPey1kOZVe_BBV_augkaAbv8JxxHchgFhmFw7_5CLGBP0OsArO52HH0mHM0/s320/6991A-technophobe.jpg" alt="" id="BLOGGER_PHOTO_ID_5504156008833510866" border="0" /></a> Anyone seen my track-pad iPod?<br /><br />I'm not sure what the state of the art in e-recycling is, but I don't believe it goes far enough. What happens to non-renewable plastics, parts like transistors that are not easily reducible (except with the same sort of "expensive" equipment employed in their manufacture and assembly), etc. I have often said that for everything that is manufactured, there should be an equal and opposite demanufacturing process/facility waiting for it at the end of its life. To what extent we fall short of it, I cannot say, but any shortcoming in it's achievement sets the immutability of those physical laws to a different footlight.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/en/5/55/Escher_Circle_Limit_III.jpg"><img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 317px; height: 317px;" src="http://upload.wikimedia.org/wikipedia/en/5/55/Escher_Circle_Limit_III.jpg" alt="" border="0" /></a><br /><br /><br />"Gross bodies and light are convertible into one another..." Isaac Newton, 1704. But what's the catch? Personally I stick to my e=mc<sup>2</sup> as a matter of faith, but understand, that it's opposite, its anti-particle, the yin to its hang, is subtly transformed, like water, to patterns that our symmetrical approach to reason and practical implementation perhaps cannot yet fully grasp.John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com3tag:blogger.com,1999:blog-986509793457320090.post-25872235289527548382010-08-10T03:09:00.000-07:002010-08-10T03:35:26.881-07:00In-between moments<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT0xrA61kt-VazdbBjw-6OptwYMolPbW4Kj7qOIHFBsYGtJ5wN5n_OhyfFgdYYCcCZ286u1SEzzyKiDZYxqBGhDvDaTsyp0w4gIKzT1uv2e380bG4xfzj28b3tJVCmX0mWPeSSJ1xVPXjZ/s1600/SAM_0632.JPG"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT0xrA61kt-VazdbBjw-6OptwYMolPbW4Kj7qOIHFBsYGtJ5wN5n_OhyfFgdYYCcCZ286u1SEzzyKiDZYxqBGhDvDaTsyp0w4gIKzT1uv2e380bG4xfzj28b3tJVCmX0mWPeSSJ1xVPXjZ/s400/SAM_0632.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5503726103774683538" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb4ZBr-op4hrqE5ZkYAPh9FTsPcfj0EVRNM1LDJHC-wXypwpx9KDQPMkUQABGifnjmimZCoM6joZoJ22WlnsAGjW9nY6oeQFMj76H7IwX006Lir0-7Dl7aG5Sm7lLG7BkNUi5_SlSdLfT9/s1600/SAM_0634.JPG"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb4ZBr-op4hrqE5ZkYAPh9FTsPcfj0EVRNM1LDJHC-wXypwpx9KDQPMkUQABGifnjmimZCoM6joZoJ22WlnsAGjW9nY6oeQFMj76H7IwX006Lir0-7Dl7aG5Sm7lLG7BkNUi5_SlSdLfT9/s400/SAM_0634.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5503726096148033458" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCuVyMdfNvFtKa9VSYiDMO1hLkeOdpN-rjUUWhGJJmR8JyV6EHXZbA536vPNl1uPgL7x0ig758u4L3GhIlP8bB56tQbmFvUD084sHjHECIA8IjAob2pYOMcchbejd-RZy_r5nRG-ddGYEz/s1600/SAM_0635.JPG"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCuVyMdfNvFtKa9VSYiDMO1hLkeOdpN-rjUUWhGJJmR8JyV6EHXZbA536vPNl1uPgL7x0ig758u4L3GhIlP8bB56tQbmFvUD084sHjHECIA8IjAob2pYOMcchbejd-RZy_r5nRG-ddGYEz/s400/SAM_0635.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5503726085331046834" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDVsOUxc2_oWcPppUJi8NZleouXgN3Tdw_ncrcYyKrq3VkW6Hhj2Uf-Nb_KMDggnci1e8YvluNzhSWG_EWgewLe0DkPpgJcY5qyzkVuT9fUjDbe-YlzHz_gidW_vpxGW0gJjZsYHzbeoLL/s1600/SAM_0636.JPG"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDVsOUxc2_oWcPppUJi8NZleouXgN3Tdw_ncrcYyKrq3VkW6Hhj2Uf-Nb_KMDggnci1e8YvluNzhSWG_EWgewLe0DkPpgJcY5qyzkVuT9fUjDbe-YlzHz_gidW_vpxGW0gJjZsYHzbeoLL/s400/SAM_0636.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5503726081000967218" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQkSPE1tgBAUnlxsoziTSbZYr35BahaJmGg8XhC2o_XDEJF4aGPOEEjtpvpkjw_7yyWS_ABuKbK-sjsGAP75pmwt9PYf1OsgZgnnj8n-2slL-8qMSNjD12cqHgsX7b97Mxkp6g_fUIjqLz/s1600/SAM_0628.JPG"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQkSPE1tgBAUnlxsoziTSbZYr35BahaJmGg8XhC2o_XDEJF4aGPOEEjtpvpkjw_7yyWS_ABuKbK-sjsGAP75pmwt9PYf1OsgZgnnj8n-2slL-8qMSNjD12cqHgsX7b97Mxkp6g_fUIjqLz/s400/SAM_0628.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5503726071821551138" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifbVnNFrodGzqlMywOZRjrWmrzJMsZFfhGVqHzKI6z8JqMhsklsdeijVTPgamnCR_IAluPdAyMHhzKiHc4T1HKevCkbs06Kix2QEIMfbj7BKYlGIobEUnpfBV-gNO2r0Vu_NRJVb_rjexC/s1600/SAM_0630.JPG"><img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifbVnNFrodGzqlMywOZRjrWmrzJMsZFfhGVqHzKI6z8JqMhsklsdeijVTPgamnCR_IAluPdAyMHhzKiHc4T1HKevCkbs06Kix2QEIMfbj7BKYlGIobEUnpfBV-gNO2r0Vu_NRJVb_rjexC/s320/SAM_0630.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5503722372568677202" /></a><br />...when you care enough to give the very least.John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com0tag:blogger.com,1999:blog-986509793457320090.post-85993461718796829632009-10-22T13:08:00.001-07:002009-10-22T13:08:58.360-07:00<a href="http://apps.facebook.com/dailyperfect/" target="_blank" title="My digital footprint"><br /> <img src="http://www.dailyperfect.com/plugins/facebook/footprint_image.php?hash=de412c64bb3aa28459007e58d231f7a3&t=1256242067&size=625" alt="My digital footprint"/><br /></a>John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com0tag:blogger.com,1999:blog-986509793457320090.post-78663497980219164792009-03-19T15:46:00.000-07:002009-03-19T15:53:39.931-07:00Longevity, brings me back to the center.<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i2.cdn.turner.com/cnn/2009/SHOWBIZ/Music/03/19/simon.garfunkel.reunion.tour/art.simon.garfunkel.gi.jpg"><img style="cursor: pointer; width: 292px; height: 219px;" src="http://i2.cdn.turner.com/cnn/2009/SHOWBIZ/Music/03/19/simon.garfunkel.reunion.tour/art.simon.garfunkel.gi.jpg" alt="" border="0" /></a><br />So I'm working on two fronts. Trying to stay on my project, here, get funding for it, etc. because it's going to change the world. But we're in Limbo right now...and I question whether I have what it takes to go out and work as an outside consultant while we play the waiting game. I'm really tired, see, and need a break from this endless churn of working a few months, then hunting, etc.<br /><br />On the other front, I've built up the recording studio and found musicians, and am very eager about making somthing happen there. Those are my goals. Acoustic groove. I can't get these rythms out of my head.<br /><br />So I was feeling pretty hopeless until I read about two guys I could always count on to break up - and then reunite.<br /><br />Longevity, constancy, always brings me back to where I need to go. I reach into that real center to find myself again. <br /><br />I wonder how a trip to New Zealand sounds?John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com0tag:blogger.com,1999:blog-986509793457320090.post-32391044394314197942009-01-24T13:57:00.000-08:002009-01-24T14:01:48.552-08:0025+ points about me.....<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGohyphenhyphenuwybyTGmSWG1gC1Mu3OWwZfnwOxfNrA6bTMXNUZZo10kN5gFqvR1cUzkkQe8LHkg_CpXhDTbnmA9_mAf6H5Vbb6T-rSgPT2cjpVMlJdHyEynJXsV0aU89VKQZOSPKc0OBb4SjY5hH/s1600-h/10052008(010).jpg"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGohyphenhyphenuwybyTGmSWG1gC1Mu3OWwZfnwOxfNrA6bTMXNUZZo10kN5gFqvR1cUzkkQe8LHkg_CpXhDTbnmA9_mAf6H5Vbb6T-rSgPT2cjpVMlJdHyEynJXsV0aU89VKQZOSPKc0OBb4SjY5hH/s400/10052008(010).jpg" alt="" id="BLOGGER_PHOTO_ID_5294983835652414674" border="0" /></a><br />In Facebook, there was a mail going around amongst friends where we were supposed to write a note - 25 things about ourselves. What better material for a blog about me? (I may update this in the future with more points, but for now here goes).<br /><br />1. Everyplace I have ever lived, I dreamed there was a mountain near me, and I would climb it. I rather like the far north.<br />2. Years later, I found a place a world away that I could swear was the same place I dreamt about repeatedly as a boy. (When my friends and I went back to the forest to find this hilltop - we couldn't locate it again.)<br />3. I consider myself the least funniest person in my immediate family - but to my friends, I'm a laff-riot.<br />4. Even though I love them to death, I've never been geographically close to my folks, don't see them personally so often, and I'm cool with that.<br />5. I tend to find ways to avoid bureaucratic unpleasantries. Or dealing with bureaucracies of any kind. Whatsoever.<br />6. Even though I've been working with technology for most of my working years, I despise debugging /troubleshooting poorly - or even well - implemented products. I have exactly *one* requirement on usability - it should work like a train's toilet! Devices, networks, drives, partitions, yer momma's anti-virus, Skype not working right- I'll have none of it. No, I will NOT fix your bloody computer!<br />7. I've become fascinated with mathematics - particularly calculus - to the point where I will now sit up until 3 a.m. graphing some weird function or pondering some proof. (Heim's unification is the latest). And get up at 7 a.m. to continue. I'm also intrigued by the idea of a grand unification theory which unites general relativity and quantum mechanics, but don't believe that reconciliation exists yet - perhaps with our current understanding as humans we just can't get it.<br /><br />8. Among other things I believe there's a workable alternative (we haven't discovered it yet) to our economic system (y'know, the one based on money?) that would solve a hell of a lot of the problems we face as a race on this planet. (What's the biggest shortage right now in our current global downturn - that's right - money!). No shortage in the world whatsoEVER of goods, services, food, people able to do things! And yet people are sitting at home, unemployed, with no way to manage. What's UP with that?<br /><br />9. Even though I live in Sweden at the moment, and am thoroughly inspired and fired up by our new U.S. leadership, I'm nonetheless thoroughly convinced that the less government there is, the better. I consider myself a libertarian.<br /><br />10. When I was envisioning my current home, which I'm crazy about - even though I don't own it - I was living at the time in a early soviet flat in Tallinn Estonia. That place had an interesting latticework pattern in the floor and a tattoo shop directly below. So I held a picture in my mind about where I WANTED to live, (it was based on my current surroundings of course, what else could I do?) focused on it, meditated on it, and - guess what? Years later, I've got the same floor and the tattoo shop directly below.<br /><br />11. I always wanted to create my own reality, job, career, complete with travel - and I have!<br />12. No use for family and kids. But thanks anyway.<br />13. I value my freedom over my security. Bigtime.<br />14. I've always believed in my own power to be the captain of my own life and destiny. But I have lost that compass sometimes - those were my darkest moments.<br />15. Surprised that I haven't uttered a word about my music yet?<br />16. I've lived on both sides of that paradox - i've been well off and broke, self-determined and dependent, completely social and totally isolated. Seems like I've needed one to thoroughly appreciate the other.<br />17. I often soak up other bits of people's personalities and quirks and merge them with my own. Who you see as you observe me depends very much on who - and when - you are.<br />18. My ex's little daughter Susanna was thoroughly convinced I was a cartoon.<br />19. I rather enjoy myself and my own company.<br />20. After I left Finland, my Finnish began to improve dramatically. Same thing with my Estonian. (Kas te järgmises väljute?) Currently my Swedish right sucks.<br />21. During my university years, I used to get alot of praise for my creative writing, and even published some things, travelled around to recitals, etc.. Now you couldn't get me to write a poem or short story if you put a gun to my head. I'm just far too lazy about it. I keep a blog and hardly ever update it. But I do take immense perverse pride in the voluminous technical specs I've written for some of my jobs (some in the hundreds of pages).<br />22. I'm compiling a book of the best pranks of my friends - "1001 ways to be an unwanted guest". Submissions, anyone?<br />23. I'm fascinated by how the true nature of a particle - or person - reveals itself over time. Nothing - no one - can escape that. 4th dimensional thinking?<br />24. Ok. About the music then. Much of what I produce nowadays (and I'm producing alot) are "experiments" with different harmonies, instruments, tambres, recording techniques, microphones, etc. I may never release any of it, although probably some.<br />25. I've played with some really great players. But I pride myself in how I've been able to get great results out of whoever I happened to find.John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com0tag:blogger.com,1999:blog-986509793457320090.post-72000663306680945772009-01-06T10:45:00.000-08:002009-01-06T11:25:43.271-08:00in Madrid, thanks to Iberia Airlines strike....As I'm somewhat new to blogging this way (the CMS at my original website, johnhammink.com, has been broken for more than a year, and I'm too lazy to fix it), I'm simply not in the habit of reporting the circumstances of my life, travels, and travails from one day to the next. Indeed, as someone who works professionally as a writer (essentially), I'm not even accostomed to posting unedited thoughts in forums like these. Nonetheless, I have always been pretty committed about reporting crappy services and situations, as well as celebrating the good ones, so, as they say, there's no better time than the present.<br /><br />I'm supposed to be in Santiago, Chile right now, giving a panel discussion http://www.mite.usm.cl/index.php?id=96 for the local media, and later teaching a master's degree module on consumer product realisation. Instead I'm in a cafe in Madrid. After flying in a very dirty plane, which was more than four hours delayed from my origin, I missed my LAN Chile (a very good airline) connection.<br /><br />When we arrived in Madrid airport at 12.30 a.m. there was no information point, or person at the exit gate to redirect us to the place we were supposed to get our transfers. Instead, we were forced to go out of the country, through passport control, then back into the country (through passport control) which resulted in two stamps I really didn't want in my already nearly full passport. When we finally (on our own, no help from airport staff) finally figured out where we were supposed to go, we stood in that line for more than three hours, while they issues our transfers)! <br /><br />Being diabetic, I went out to ask someone (one of the iberia clerks had wandered off to talk to his buddies) where I could find food so that I wouldn't go into shock. I was then told to go stand back in line and wait for my ticket (it turned out that there was a cafe downstairs). When I finally got to the desk, and insisted on a connection through LAN Chile, rather than Iberia, it took all of 2 minutes.<br /><br /><br />Iberia finally put us in a hotel, which although it was three stars, was inflexible about meal times.<br /><br />So Madrid is nice (was nicer back before the EU), but I'd really rather not be here right now.<br /><br />A couple of lessons I've learned.<br /><br />When travelling with a plane full of South Americans, don't do the nice Scandinavian thing and expect other waiting travellers to exercise the same forbearance and respect for lines as you have (As I already knew, but my Scandinavian friends did not realize - South Americans have none - after an asshole-to-elbows scramble, we were last in line, while our tickets were the easiest to process).<br /><br />Madrid airport is a mess. Don't fly there. And although Iberia respected our passenger's rights (they have to, don't they?) they go on strike several times a year, so somethings not right there.<br /><br />In Europe, Consumer's rights and integrity are clearly absolutely LAST priority, if in practice they are even considered at all, light years behind those rights of public officials, followed by trade unions.<br /><br />Why do other developing countries' services (LAN Airlines, Chile; Thai Airways) perform so much better in terms of customer treatment, and those services from nations where standard of living is supposed to be the best (SAS, Denmark; KLM, Netherlands, to name a few) offer, by far, the worst customer service?John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com0tag:blogger.com,1999:blog-986509793457320090.post-34278125711322307072009-01-01T19:06:00.000-08:002009-01-01T19:15:47.904-08:00on Fox news.......I just had something of a revelation (or just a question?) about inflammatory shows like the O'Reilly factor and fox news? I mean what if these guys were actually doing us a favor by acting as a counterpoint to public opinion? Public sentiment being as divided as it now is. <br /><br />One could argue that Fox news, while seemingly a creation of the Republican party and right wing agenda as such, is actually a reaction to it. I can see people starting to watch it and thinking "wait a minute, this doesn't seem right", while actually starting to levitate in the other direction. What if this was created to show how absolutely preposterous that so called "fair and balanced" viewpoint were, in order to get people to oppose it?John Hamminkhttp://www.blogger.com/profile/02100058778549982229noreply@blogger.com0