<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8689275521557212387</id><updated>2011-12-15T23:46:21.653-08:00</updated><title type='text'>Nothing is True, Everything is Permissible</title><subtitle type='html'>Sorcery: the systematic cultivation of enhanced consciousness or non-ordinary awareness &amp;amp; its deployment in the world of deeds &amp;amp; objects to bring about desired results.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.san1t1.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>45</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-2561400250242506686</id><published>2011-01-10T02:43:00.000-08:00</published><updated>2011-01-10T02:44:16.012-08:00</updated><title type='text'>Really?</title><content type='html'>No posts since 2009? Wow.&lt;br /&gt;&lt;br /&gt;Let me try and fix that a little this year. I will take an imagination pill or two.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-2561400250242506686?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/2561400250242506686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=2561400250242506686' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/2561400250242506686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/2561400250242506686'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2011/01/really.html' title='Really?'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-6113886522731739383</id><published>2009-09-22T09:32:00.001-07:00</published><updated>2009-09-22T09:32:26.341-07:00</updated><title type='text'>Recording and playing back using Ribbit Javascript library</title><content type='html'>&lt;p&gt;This post is just a little code sample. The Ribbit Javascript library releases soon.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;html&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;head&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;    &lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;script &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text/javascript&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;src&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;ribbit.1.5.3.0.min.js&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;script&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;head&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;script &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;    var &lt;/span&gt;callId;&lt;br /&gt;    &lt;span style="color: blue"&gt;var &lt;/span&gt;file;&lt;br /&gt;    &lt;span style="color: blue"&gt;function &lt;/span&gt;startCall(){&lt;br /&gt;        Ribbit.exec({&lt;br /&gt;            resource:&lt;span style="color: #a31515"&gt;&amp;quot;Calls&amp;quot;&lt;/span&gt;,&lt;br /&gt;            method:&lt;span style="color: #a31515"&gt;&amp;quot;createCall&amp;quot;&lt;/span&gt;,&lt;br /&gt;            params:{legs:[document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;legId&amp;quot;&lt;/span&gt;).value]},&lt;br /&gt;            callback: &lt;span style="color: blue"&gt;function&lt;/span&gt;(result){&lt;br /&gt;                &lt;span style="color: blue"&gt;if &lt;/span&gt;(result.hasError){&lt;br /&gt;                    document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;result&amp;quot;&lt;/span&gt;).innerHTML = result.message;&lt;br /&gt;                }&lt;br /&gt;                &lt;span style="color: blue"&gt;else&lt;/span&gt;{&lt;br /&gt;                    callId = result;&lt;br /&gt;                    document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;result&amp;quot;&lt;/span&gt;).innerHTML = &lt;span style="color: #a31515"&gt;&amp;quot;You have started call &amp;quot; &lt;/span&gt;+ result;&lt;br /&gt;                    document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;createCallDiv&amp;quot;&lt;/span&gt;).style.visibility=&lt;span style="color: #a31515"&gt;&amp;quot;hidden&amp;quot;&lt;/span&gt;;&lt;br /&gt;                    document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;startRecordingDiv&amp;quot;&lt;/span&gt;).style.visibility=&lt;span style="color: #a31515"&gt;&amp;quot;visible&amp;quot;&lt;/span&gt;;&lt;br /&gt;                    &lt;br /&gt;                }&lt;br /&gt;            }    &lt;br /&gt;        });&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;function &lt;/span&gt;startRecording(){&lt;br /&gt;        &lt;span style="color: blue"&gt;var &lt;/span&gt;filename = document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;filename&amp;quot;&lt;/span&gt;).value;&lt;br /&gt;        &lt;span style="color: blue"&gt;var &lt;/span&gt;folder = document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;folder&amp;quot;&lt;/span&gt;).value;&lt;br /&gt;        &lt;span style="color: blue"&gt;var &lt;/span&gt;domain = document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;domain&amp;quot;&lt;/span&gt;).value;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue"&gt;if &lt;/span&gt;(filename.length==0 || folder.length==0 || domain.length ==0){&lt;br /&gt;            document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;result&amp;quot;&lt;/span&gt;).innerHTML = &lt;span style="color: #a31515"&gt;&amp;quot;Please supply all of domain, folder and filename&amp;quot;&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: blue"&gt;return&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: blue"&gt;if &lt;/span&gt;(filename.substring(filename.length-4,filename.length)!=&lt;span style="color: #a31515"&gt;&amp;quot;.wav&amp;quot;&lt;/span&gt;){&lt;br /&gt;            document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;result&amp;quot;&lt;/span&gt;).innerHTML = &lt;span style="color: #a31515"&gt;&amp;quot;Please enter a filename ending in .wav&amp;quot;&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: blue"&gt;return&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;        file = &lt;span style="color: #a31515"&gt;&amp;quot;/media/&amp;quot; &lt;/span&gt;+ domain + &lt;span style="color: #a31515"&gt;&amp;quot;/&amp;quot; &lt;/span&gt;+ folder + &lt;span style="color: #a31515"&gt;&amp;quot;/&amp;quot; &lt;/span&gt;+ filename; &lt;br /&gt;        Ribbit.exec({&lt;br /&gt;            resource:&lt;span style="color: #a31515"&gt;&amp;quot;Calls&amp;quot;&lt;/span&gt;,&lt;br /&gt;            method:&lt;span style="color: #a31515"&gt;&amp;quot;recordCall&amp;quot;&lt;/span&gt;,&lt;br /&gt;            params:{&lt;br /&gt;                callId:callId,&lt;br /&gt;                record: &lt;span style="color: blue"&gt;new &lt;/span&gt;Ribbit.CallRecordRequest(file, &lt;span style="color: blue"&gt;false&lt;/span&gt;, &lt;span style="color: blue"&gt;true&lt;/span&gt;, &lt;span style="color: blue"&gt;null&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;)                &lt;br /&gt;                },&lt;br /&gt;            callback: &lt;span style="color: blue"&gt;function&lt;/span&gt;(result){&lt;br /&gt;                &lt;span style="color: blue"&gt;if &lt;/span&gt;(result.hasError){&lt;br /&gt;                    document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;result&amp;quot;&lt;/span&gt;).innerHTML = result.message;&lt;br /&gt;                }&lt;br /&gt;                &lt;span style="color: blue"&gt;else&lt;/span&gt;{&lt;br /&gt;                    document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;result&amp;quot;&lt;/span&gt;).innerHTML = &lt;span style="color: #a31515"&gt;&amp;quot;Recording file &amp;quot; &lt;/span&gt;+ file;&lt;br /&gt;                    document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;startRecordingDiv&amp;quot;&lt;/span&gt;).style.visibility=&lt;span style="color: #a31515"&gt;&amp;quot;hidden&amp;quot;&lt;/span&gt;;&lt;br /&gt;                    document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;stopRecordingDiv&amp;quot;&lt;/span&gt;).style.visibility=&lt;span style="color: #a31515"&gt;&amp;quot;visible&amp;quot;&lt;/span&gt;;&lt;br /&gt;                }&lt;br /&gt;            }    &lt;br /&gt;        });&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;function &lt;/span&gt;stopRecording(){&lt;br /&gt;        Ribbit.exec({&lt;br /&gt;            resource:&lt;span style="color: #a31515"&gt;&amp;quot;Calls&amp;quot;&lt;/span&gt;,&lt;br /&gt;            method:&lt;span style="color: #a31515"&gt;&amp;quot;stopRecordingCall&amp;quot;&lt;/span&gt;,&lt;br /&gt;            params:{callId:callId},&lt;br /&gt;            callback: &lt;span style="color: blue"&gt;function &lt;/span&gt;(result){&lt;br /&gt;                &lt;span style="color: blue"&gt;if &lt;/span&gt;(result.hasError){&lt;br /&gt;                    document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;result&amp;quot;&lt;/span&gt;).innerHTML = result.message;&lt;br /&gt;                }&lt;br /&gt;                &lt;span style="color: blue"&gt;else&lt;/span&gt;{&lt;br /&gt;                    Ribbit.exec({&lt;br /&gt;                            resource:&lt;span style="color: #a31515"&gt;&amp;quot;Calls&amp;quot;&lt;/span&gt;,&lt;br /&gt;                            method:&lt;span style="color: #a31515"&gt;&amp;quot;playMediaToCall&amp;quot;&lt;/span&gt;,&lt;br /&gt;                            params:{&lt;br /&gt;                                callId:callId,&lt;br /&gt;                                announce:Ribbit.Call.ANNOUNCE_EN_US_CLASSIC,&lt;br /&gt;                                play: &lt;span style="color: blue"&gt;new &lt;/span&gt;Ribbit.CallPlayRequest([&lt;span style="color: blue"&gt;new &lt;/span&gt;Ribbit.CallPlayMedia(&lt;span style="color: #a31515"&gt;&amp;quot;file&amp;quot;&lt;/span&gt;,file,0,-1)], &lt;span style="color: blue"&gt;null&lt;/span&gt;,&lt;span style="color: #a31515"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;,&lt;span style="color: blue"&gt;true&lt;/span&gt;),&lt;br /&gt;                                &lt;br /&gt;                            },&lt;br /&gt;                            callback: &lt;span style="color: blue"&gt;function&lt;/span&gt;(result){&lt;br /&gt;                                &lt;span style="color: blue"&gt;if &lt;/span&gt;(result.hasError){&lt;br /&gt;                                    document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;result&amp;quot;&lt;/span&gt;).innerHTML = result.message;&lt;br /&gt;                                }&lt;br /&gt;                                &lt;span style="color: blue"&gt;else&lt;/span&gt;{&lt;br /&gt;                                    document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;result&amp;quot;&lt;/span&gt;).innerHTML = &lt;span style="color: #a31515"&gt;&amp;quot;Recording has stopped, and you should be hearing &amp;quot; &lt;/span&gt;+ file;&lt;br /&gt;                                    document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;stopRecordingDiv&amp;quot;&lt;/span&gt;).style.visibility=&lt;span style="color: #a31515"&gt;&amp;quot;hidden&amp;quot;&lt;/span&gt;;&lt;br /&gt;                                    document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;playbackDiv&amp;quot;&lt;/span&gt;).style.visibility=&lt;span style="color: #a31515"&gt;&amp;quot;visible&amp;quot;&lt;/span&gt;;&lt;br /&gt;                                }        &lt;br /&gt;                            }&lt;br /&gt;                    });&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color: blue"&gt;function &lt;/span&gt;hangupCall(){&lt;br /&gt;        Ribbit.exec({&lt;br /&gt;                resource:&lt;span style="color: #a31515"&gt;&amp;quot;Calls&amp;quot;&lt;/span&gt;,&lt;br /&gt;                method:&lt;span style="color: #a31515"&gt;&amp;quot;hangupCall&amp;quot;&lt;/span&gt;,&lt;br /&gt;                params:{callId:callId},&lt;br /&gt;                callback: &lt;span style="color: blue"&gt;function &lt;/span&gt;(result){&lt;br /&gt;                    &lt;span style="color: blue"&gt;if &lt;/span&gt;(result.hasError){&lt;br /&gt;                        document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;result&amp;quot;&lt;/span&gt;).innerHTML = result.message;&lt;br /&gt;                    }&lt;br /&gt;                    &lt;span style="color: blue"&gt;else&lt;/span&gt;{&lt;br /&gt;                        document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;result&amp;quot;&lt;/span&gt;).innerHTML = &lt;span style="color: #a31515"&gt;&amp;quot;The call should be hung up. The file you recorded was &amp;quot; &lt;/span&gt;+ file;&lt;br /&gt;                        document.getElementById(&lt;span style="color: #a31515"&gt;&amp;quot;playbackDiv&amp;quot;&lt;/span&gt;).style.visibility=&lt;span style="color: #a31515"&gt;&amp;quot;hidden&amp;quot;&lt;/span&gt;;&lt;br /&gt;                    }        &lt;br /&gt;                }&lt;br /&gt;        });&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;script&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;body&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;table&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;h1&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Record a Call&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;h1&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt; &lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;hr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div &lt;/span&gt;&lt;span style="color: red"&gt;style&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt;color&lt;/span&gt;:&lt;span style="color: blue"&gt;#ff0000&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;result&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;br&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;br /&gt;        &lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;createCallDiv&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;table&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                        &lt;/span&gt;Enter a telephone number&lt;br /&gt;                    &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;input &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;legId&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;tel:&amp;quot;/&amp;gt;&lt;br /&gt;                    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;input &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;but&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;button&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;button&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;onclick&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;startCall()&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Start Call&amp;quot;/&amp;gt;&lt;br /&gt;                    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;        &lt;br /&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;table&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;    &lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;startRecordingDiv&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;style&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt;visibility&lt;/span&gt;:&lt;span style="color: blue"&gt;hidden&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;table&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                        &lt;/span&gt;Enter a file name ending in .wav&lt;br /&gt;                    &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;input &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;filename&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;.wav&amp;quot;/&amp;gt;&lt;br /&gt;                    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                        &lt;/span&gt;Enter a folder name&lt;br /&gt;                    &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;input &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;folder&amp;quot;/&amp;gt;&lt;br /&gt;                    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                        &lt;/span&gt;Enter a domain name&lt;br /&gt;                    &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;input &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;domain&amp;quot;/&amp;gt;&lt;br /&gt;                    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;input &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;but&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;button&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;button&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;onclick&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;startRecording()&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Start recording&amp;quot;/&amp;gt;&lt;br /&gt;                    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;        &lt;br /&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;table&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;stopRecordingDiv&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;style&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt;visibility&lt;/span&gt;:&lt;span style="color: blue"&gt;hidden&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;table&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                        &lt;/span&gt;You should hear a beep to indicate recording has started.&lt;br /&gt;                    &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;input &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;but&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;button&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;button&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;onclick&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;stopRecording()&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Stop recording&amp;quot;/&amp;gt;&lt;br /&gt;                    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;table&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;        &lt;br /&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;playbackDiv&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;style&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt;visibility&lt;/span&gt;:&lt;span style="color: blue"&gt;hidden&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;table&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                        &lt;/span&gt;You should be hearing your recording played back&lt;br /&gt;                    &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;input &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;but&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;button&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;button&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;onclick&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;hangupCall()&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Hangup&amp;quot;/&amp;gt;&lt;br /&gt;                    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;table&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;        &lt;br /&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;        &lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;    &lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;table&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;body&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;html&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-6113886522731739383?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/6113886522731739383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=6113886522731739383' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/6113886522731739383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/6113886522731739383'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2009/09/recording-and-playing-back-using-ribbit.html' title='Recording and playing back using Ribbit Javascript library'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-235677007363345649</id><published>2009-08-05T15:02:00.001-07:00</published><updated>2009-08-05T15:02:11.778-07:00</updated><title type='text'>Easy binding in Javascript</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Felt like writing a framework that could bind the contents of an arbitrary html div to a javascript function. This is what I came up with. It is an evil use of eval. Any advances?&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;html&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;head&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;body&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;myDiv&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;binding&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;myValue&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;changed&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;flash&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;script &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;function myValue&lt;/span&gt;(){&lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;hello first value&amp;quot;&lt;/span&gt;};&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;checkBindings= &lt;span style="color: blue"&gt;function&lt;/span&gt;(){&lt;br /&gt;    &lt;span style="color: blue"&gt;var &lt;/span&gt;elements = document.getElementsByTagName(&lt;span style="color: #a31515"&gt;'*'&lt;/span&gt;);&lt;br /&gt;    &lt;span style="color: blue"&gt;for &lt;/span&gt;(&lt;span style="color: blue"&gt;var &lt;/span&gt;i = 0; i &amp;lt; elements.length; i++) {&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: green"&gt;//look for the binding attribute on the element&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;var bindingFunction&lt;/span&gt; =    elements[i].getAttribute(&lt;span style="color: #a31515"&gt;&amp;quot;binding&amp;quot;&lt;/span&gt;);&lt;br /&gt;        &lt;span style="color: blue"&gt;if &lt;/span&gt;(bindingFunction != &lt;span style="color: blue"&gt;null&lt;/span&gt;){&lt;br /&gt;            &lt;span style="color: green"&gt;//eval the bound function, which must take no parameters&lt;br /&gt;            &lt;/span&gt;newHtml = eval (bindingFunction+&lt;span style="color: #a31515"&gt;&amp;quot;();&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: green"&gt;//has it changed?&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;changed = newHtml != elements[i].innerHTML&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: green"&gt;//update it&lt;br /&gt;            &lt;/span&gt;elements[i].innerHTML=newHtml;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: green"&gt;//if it's changed, call the function, passing in the changed element&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;if &lt;/span&gt;(changed){&lt;br /&gt;                &lt;span style="color: blue"&gt;var changedFunction&lt;/span&gt; = elements[i].getAttribute(&lt;span style="color: #a31515"&gt;&amp;quot;changed&amp;quot;&lt;/span&gt;);&lt;br /&gt;                &lt;span style="color: blue"&gt;if &lt;/span&gt;(changedFunction != &lt;span style="color: blue"&gt;null&lt;/span&gt;){&lt;br /&gt;                    eval(changedFunction+&lt;span style="color: #a31515"&gt;&amp;quot;(elements[i])&amp;quot;&lt;/span&gt;);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            &lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: green"&gt;//call this again in four seconds&lt;br /&gt;    &lt;/span&gt;setTimeout(checkBindings,4000);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: green"&gt;//a function to fire on a changed event&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;function &lt;/span&gt;flash(element){&lt;br /&gt;    element.style.backgroundColor=&lt;span style="color: #a31515"&gt;&amp;quot;#aa0000&amp;quot;&lt;/span&gt;;&lt;br /&gt;    setTimeout(&lt;span style="color: blue"&gt;function&lt;/span&gt;(){element.style.backgroundColor=&lt;span style="color: #a31515"&gt;&amp;quot;#ffffff&amp;quot;&lt;/span&gt;},3000);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre class="code"&gt;&lt;span style="color: green"&gt;//run the script &lt;/span&gt;&lt;br /&gt;checkBindings();&lt;br /&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;script&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;body&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;html&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-235677007363345649?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/235677007363345649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=235677007363345649' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/235677007363345649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/235677007363345649'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2009/08/easy-binding-in-javascript.html' title='Easy binding in Javascript'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-8167557759581044810</id><published>2009-07-27T12:56:00.001-07:00</published><updated>2009-07-27T12:59:35.299-07:00</updated><title type='text'>How we build and test Silverlight</title><content type='html'>&lt;p&gt;One of my projects at the moment is to write a Silverlight library that calls a web service.&lt;/p&gt;  &lt;p&gt;For very good reasons that I won’t go in to right now, we need to build from ant.&lt;/p&gt;  &lt;p&gt;We do this by calling the .Net 3.5 c sharp compiler directly.&lt;/p&gt;  &lt;p&gt;Here’s a snippet of an ant build.xml file:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;property &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;silverlight.path&lt;/span&gt;" &lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;C:/Program Files/Microsoft Silverlight/3.0.40624.0&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;property &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;silverlight.sdk.path&lt;/span&gt;" &lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;C:/Program Files/Microsoft SDKs/Silverlight/v3.0&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;target &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;compile-source&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;exec &lt;/span&gt;&lt;span style="color:red;"&gt;dir&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;src&lt;/span&gt;" &lt;span style="color:red;"&gt;executable&lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;"&lt;span style="color:blue;"&gt;C:/Windows/Microsoft.NET/Framework/v3.5/csc.exe&lt;/span&gt;" &lt;span style="color:red;"&gt;failonerror&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/optimize&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/debug&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/out:../build/bin/&lt;em&gt;output_file&lt;/em&gt;.dll&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/doc:../build/bin/&lt;em&gt;output_file&lt;/em&gt;.xml&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/noconfig&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/nostdlib&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/warn:0&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/target:library&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/reference:'${silverlight.path}/mscorlib.dll'&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/reference:'${silverlight.path}/system.dll'&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/reference:'${silverlight.path}/System.Core.dll'&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/reference:'${silverlight.sdk.path}/Libraries/Client/System.Json.dll'&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/reference:'${silverlight.path}/System.Net.dll'&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/reference:'${silverlight.path}/System.Xml.dll'&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;"&lt;span style="color:blue;"&gt;*.cs&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt; &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;exec&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;target&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;The argument &lt;span style="font-family:Courier;"&gt;/nostdlib&lt;/span&gt; tells the compiler NOT to include any of the base class libraries. This then means that we can pull the Silverlight libraries we need in as reference. We will remove the &lt;span style="font-family:courier;"&gt;/debug&lt;/span&gt; argument when we are releasing, and sign using a key file too. The final argument merely pulls in all the files from the working directory (in this case we explicitly set it to “src” and compiles these. If you have a non flat directory structure this might need tweaking.&lt;/p&gt;&lt;p&gt;For the testing itself we use &lt;a href="http://code.msdn.microsoft.com/silverlightut/" target="_blank"&gt;this most excellent Silverlight testing framework&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;This has perhaps one of the best methods of doing asynchronous testing that I’ve seen. Here’s an example&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;[TestMethod]&lt;br /&gt;[Asynchronous]&lt;br /&gt;&lt;span style="color:blue;"&gt;public void &lt;/span&gt;MyTestMethod()&lt;br /&gt;{&lt;br /&gt;   &lt;span style="color:blue;"&gt;bool &lt;/span&gt;done = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;   ClassUnderTest testObject = &lt;span style="color:blue;"&gt;new &lt;/span&gt;ClassUnderTest ();&lt;br /&gt;&lt;br /&gt;   EnqueueCallback(() =&amp;gt; testObject.TestMethod());&lt;br /&gt;   EnqueueConditional(() =&amp;gt; done);&lt;br /&gt;   EnqueueTestComplete();&lt;br /&gt;&lt;br /&gt;   testObject.TestMethodComplete += &lt;span style="color:blue;"&gt;delegate&lt;/span&gt;(&lt;span style="color:blue;"&gt;object &lt;/span&gt;sender, OurEventArgs e)&lt;br /&gt;   {&lt;br /&gt;       &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;try&lt;br /&gt;       &lt;/span&gt;{&lt;br /&gt;           TestResult result = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;br /&gt;           result = e.Data &lt;span style="color:blue;"&gt;as &lt;/span&gt;TestResult;&lt;br /&gt;           Assert.AreEqual(0, result.TestProperty);&lt;br /&gt;       }&lt;br /&gt;       &lt;span style="color:blue;"&gt;catch &lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;Exception &lt;/span&gt;ex)&lt;br /&gt;       {&lt;br /&gt;           Assert.Fail(&lt;span style="color: rgb(163, 21, 21);"&gt;"Exception - " &lt;/span&gt;+ ex.Message + &lt;span style="color: rgb(163, 21, 21);"&gt;" -  Stack Trace " &lt;/span&gt;+ ex.StackTrace);&lt;br /&gt;       }&lt;br /&gt;       done = &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;   };&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;The &lt;span style="font-family:Courier;"&gt;[Asynchronous]&lt;/span&gt; attribute tells the test harness that this method is asynchronous.&lt;/p&gt;&lt;p&gt;All the &lt;em&gt;&lt;span style="font-family:Courier;"&gt;Enqueue&lt;/span&gt;&lt;/em&gt; methods set up a series of work items for the test harness to execute asynchronously.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier;"&gt;EnqueueConditional(() =&amp;gt; done);&lt;/span&gt;  tells the test harness not to run any more enqueued work items until the done flag has been flipped to true. Which is done in the anonymous method we’ve attached to the &lt;span style="font-family:Courier;"&gt;TestMethodComplete&lt;/span&gt; event.&lt;/p&gt;&lt;p&gt;So the sequence of events is thus&lt;/p&gt;&lt;p&gt;1. Set up a queued lists of callbacks, and wait stages&lt;/p&gt;&lt;p&gt;2. Subscribe to an event – which will be fired asynchronously once the underlying web call completes &lt;/p&gt;&lt;p&gt;3. Wait until that event has fired and then carry on&lt;/p&gt;&lt;p&gt;4. Stop running work items (&lt;span style="font-family:Courier;"&gt;EnqueueTestComplete&lt;/span&gt;)&lt;/p&gt;&lt;p&gt;Now we need to compile the test library and produce something runnable! Back to an ant target.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;target &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;compile-tests&lt;/span&gt;" &lt;span style="color:red;"&gt;depends&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;create.config&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;exec &lt;/span&gt;&lt;span style="color:red;"&gt;dir&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;test&lt;/span&gt;" &lt;span style="color:red;"&gt;executable&lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;"&lt;span style="color:blue;"&gt;C:/Windows/Microsoft.NET/Framework/v3.5/csc.exe&lt;/span&gt;" &lt;span style="color:red;"&gt;failonerror&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/optimize&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/noconfig&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/nostdlib&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/warn:0&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/target:library&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/out:../build/bin/&lt;em&gt;output_test_file&lt;/em&gt;.dll&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/unsafe&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/reference:'../build/bin/&lt;em&gt;output_file&lt;/em&gt;.dll'&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/reference:'lib/Microsoft.Silverlight.Testing.dll'&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/reference:'lib/Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll'&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/reference:'${silverlight.path}/mscorlib.dll'&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/reference:'${silverlight.path}/system.dll'&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/reference:'${silverlight.path}/System.Core.dll'&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/reference:'${silverlight.sdk.path}/Libraries/Client/System.Json.dll'&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/reference:'${silverlight.path}/System.Windows.dll'&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/reference:'${silverlight.path}/System.Windows.Browser.dll'&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/reference:'${silverlight.path}/System.Net.dll'&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/reference:'${silverlight.path}/System.Xml.dll'&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;arg &lt;/span&gt;&lt;span style="color:red;"&gt;line &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;"&lt;span style="color:blue;"&gt;*.cs&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt; &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;exec&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;copy &lt;/span&gt;&lt;span style="color:red;"&gt;file&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;test/AppManifest.xaml&lt;/span&gt;" &lt;span style="color:red;"&gt;todir&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;${build}/bin&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;copy &lt;/span&gt;&lt;span style="color:red;"&gt;file&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;C:/Program Files/Microsoft SDKs/Silverlight/v2.0/Libraries/Client/System.Json.dll&lt;/span&gt;" &lt;span style="color:red;"&gt;todir&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;${build}/bin&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;copy &lt;/span&gt;&lt;span style="color:red;"&gt;file&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;C:/Program Files/Microsoft SDKs/Silverlight/v2.0/Libraries/Client/System.Xml.Linq.dll&lt;/span&gt;" &lt;span style="color:red;"&gt;todir&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;${build}/bin&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;copy &lt;/span&gt;&lt;span style="color:red;"&gt;file&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;test/lib/Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll&lt;/span&gt;" &lt;span style="color:red;"&gt;todir&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;${build}/bin&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;copy &lt;/span&gt;&lt;span style="color:red;"&gt;file&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;test/lib/Microsoft.Silverlight.Testing.dll&lt;/span&gt;" &lt;span style="color:red;"&gt;todir&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;${build}/bin&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;zip &lt;/span&gt;&lt;span style="color:red;"&gt;destfile&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;${build}/bin/&lt;em&gt;testRunner&lt;/em&gt;.xap&lt;/span&gt;" &lt;span style="color:red;"&gt;basedir&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;${build}/bin&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;copy &lt;/span&gt;&lt;span style="color:red;"&gt;file&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;test/&lt;em&gt;testRunner&lt;/em&gt;.html&lt;/span&gt;" &lt;span style="color:red;"&gt;todir&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;${build}/bin&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;target&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;This target is complicated by the fact that it creates a .xap file – the one that is sent to the browser. This file is merely a zip file that contains the necessary binaries. and an AppManifest file, which I won’t include here – it’s a trivial file, describing to the run time what the application looks like, it’s entry point etc.&lt;/p&gt;&lt;p&gt;testRunner.html contains the necessary code to download and run testRunner.xap from the web server.&lt;/p&gt;&lt;p&gt;Note that the testRunner.html MUST be launched from a web server, and not from a file uri. We use wamp. The choice of server is irrelevant, it’s serving static files.&lt;/p&gt;&lt;p&gt;One other interesting thing to note is that the service we are calling is on an SSL domain, and the client Silverlight application may well not be. Thus we needed to include on the root of the service domain a clientaccesspolicy file that looks thus:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;xml &lt;/span&gt;&lt;span style="color:red;"&gt;version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1.0&lt;/span&gt;" &lt;span style="color:red;"&gt;encoding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;utf-8&lt;/span&gt;" &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;?&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;access-policy&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;cross-domain-access&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;policy&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;     &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;allow-from &lt;/span&gt;&lt;span style="color:red;"&gt;http-request-headers&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;*&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;       &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;domain &lt;/span&gt;&lt;span style="color:red;"&gt;uri&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;http://*&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;       &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;domain &lt;/span&gt;&lt;span style="color:red;"&gt;uri&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;https://*&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;     &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;allow-from&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;     &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;grant-to&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;       &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;resource &lt;/span&gt;&lt;span style="color:red;"&gt;include-subpaths&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;" &lt;span style="color:red;"&gt;path&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;     &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;grant-to&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;   &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;policy&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt; &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;cross-domain-access&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;access-policy&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;Those two domain nodes say to the Silverlight runtime not to care if crossdomain calls cross from an insecure domain to our secure domain.&lt;/p&gt;&lt;p&gt;Hope this post helps someone!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-8167557759581044810?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/8167557759581044810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=8167557759581044810' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/8167557759581044810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/8167557759581044810'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2009/07/how-we-build-and-test-silverlight.html' title='How we build and test Silverlight'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-2256278316926028848</id><published>2009-04-24T04:28:00.000-07:00</published><updated>2009-04-24T05:44:44.905-07:00</updated><title type='text'>No wonder Seeqpod are in trouble</title><content type='html'>&lt;span style="font-family: verdana;"&gt;I'm really interested in music streaming on the web. There is no doubt in my mind that this is the future of how people discover music, due to the major ease of use.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;In this post I'm gonna do a brief analysis of one of the major players, Seeqpod, who recently filed for bankruptcy protection, and suggest one or two reasons why.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: verdana;" href="http://www.seeqpod.com/"&gt;Seeqpod&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;'s infrastructure is made up of a number of components.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Firstly, a web crawler. This must scour the web for uri's that contain the string ".mp3". Once it finds one, it must pull into it's server at least the first few kilobytes of that tune in order to read id3 tags. This is potentially dodgy from a legal position, as it means that they are "downloading"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;the tune, even if it's just into RAM, in order to read it's ID3 tags, the parts of an mp3 that provide meta data such as bit rate, album, artist, track name etc. It then stores these in it’s&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;database, along with the URI that tells them where they got if from. They probably clean these results occasionally to ensure that the links are still good.Secondly Seeqpod has a music player, and this is where the cost analysis gets interesting.&lt;/span&gt;&lt;br /&gt;&lt;p style="font-family: verdana;"&gt;Now, in order to play music, Seeqpod use a Flash application. This is still the only really sensible way of playing music and video on the web.&lt;/p&gt;&lt;span style="font-family: verdana;"&gt;The audio playing part of the flash binary doesn’t really care where the audio lives on the web. Provided the file exists, it will play it. There are no cross domain issues unless you want to analyse the content of the file on the fly, to provide a spectrum analyser for example, in which case the audio must be served from your domain, or a domain which provides an appropriate cross domain policy file.&lt;/span&gt;&lt;br /&gt;&lt;p style="font-family: verdana;"&gt;By playing an mp3 file from any random server, you are at the mercy of the domain that is streaming the audio to provide a reasonable throughput to your users. If the network connection that the hosting site provides is weak, or overloaded, than the tune will stutter, or not stream at&lt;br /&gt;all. There are various ways this can be mitigated, and the approach Seeqpod has taken is to proxy all requests through their servers, and then download the track, in its entirety,&lt;br /&gt;to the flash player, before it starts playing. Finding this out was the work of minutes, using firebug. You can check this yourself.&lt;/p&gt;&lt;span style="font-family: verdana;"&gt;I was a bit shocked when I discovered this. I’d assumed that their player just pulled in the audio from wherever it was hosted, to prevent them facing the even more dubious position of having the entire tune, which of course may be copyrighted, pass through their server, even if they don't host/cache. Realistically, given the speed with which a tune downloads I suspect (but can’t prove) that they are caching tunes on their server/CDN. Committing them to hard disk. This is liable to cause them significant legal issues, even if it's a "cache".&lt;/span&gt;&lt;br /&gt;&lt;p style="font-family: verdana;"&gt;Further all this proxying must cost them a lot of money!&lt;/p&gt;&lt;span style="font-family: verdana;"&gt;Let's assume that the average size of a tune is 8Mb. This may be a high estimate, but it’s adequate for my calculations.&lt;/span&gt;&lt;br /&gt;&lt;p style="font-family: verdana;"&gt;Seeqpod uses Level 3 for bandwidth, and I don't know how much they are getting charged, but using&lt;a href="http://aws.amazon.com/s3/"&gt; Amazons Web Services&lt;/a&gt; as an indicator of cheapest available bandwidth costs, 1GB of data transferred costs $0.10. To get an 8Mb tune to their customer, seeqpod must download it from the host, and then serve it to their user. This is two hops for each file, so they have to transfer 16Mb of data in total, at a cost of $0.001563. If they are caching, then there is realistically little difference between storage and data transfer costs per GB.&lt;/p&gt;&lt;p style="font-family: verdana;"&gt;Seeqpod claim, on their &lt;a href="http://www.seeqpod.com/"&gt;landing &lt;/a&gt;page, to have about 120 million music related searches per month. If we assume that each search results in two tunes paid, which I have no evidence for, then each month Seeqpod are paying $375k per month in bandwidth costs alone, or $4.5 million per year. I'm astonished that they are prepared to pay this much money on proxying, though doubtless it makes the service a good bit better. I really hope I have these numbers wrong,&lt;br /&gt;for their sake, as if I haven't it may well be the death of them.&lt;/p&gt;&lt;span style="font-family: verdana;"&gt;Crunchbeat &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.crunchbase.com/company/seeqpod"&gt;reports&lt;/a&gt;&lt;span style="font-family: verdana;"&gt; that they have received $7 million in Angel funding and have 25 employees, which, assuming average wages + overhead per employee costs of $150k, is another $3.75 million per annum they’re paying.&lt;/span&gt;&lt;br /&gt;&lt;p style="font-family: verdana;"&gt;Apparently they have also received some private investment. And they are have some paid-for services (their &lt;a href="http://www.seeqpod.com/echo/"&gt;Echo&lt;/a&gt; service). So may have some revenue growth. Which is nice for them.&lt;/p&gt;&lt;span style="font-family: verdana;"&gt;But on the other hand, I’ve ignored a lot of costs. Servers. PR/Marketing. And they must be spending a lot on lawyers, what with Warner Bros, EMI etc chasing their tail, they apparently already owe not &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://mediamemo.allthingsd.com/20090401/seeqpod-offers-free-music-but-its-lawyers-dont-come-cheap/"&gt;far off $500k&lt;/a&gt;&lt;span style="font-family: verdana;"&gt; in legal fees.&lt;/span&gt;&lt;br /&gt;&lt;p style="font-family: verdana;"&gt;No wonder they’ve filed for bankruptcy protection. No wonder they are opening up their assets, maybe for the good of all" before it's too late.&lt;/p&gt;&lt;span style="font-family: verdana;"&gt;Oh, and as to the "not facilitating downloading" argument they offer the record companies, they show you the originating URL of each file you're playing. A little bit of &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.gnu.org/software/wget/"&gt;wget &lt;/a&gt;&lt;span style="font-family: verdana;"&gt;and I've downloaded it. This is an awkward one. Writing a basic app to search Seeqpod using their API, and then download the tunes would take all of half an hour. On the other hand, this is the same as Google displaying links to copyrighted newspaper sites.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="font-family: verdana;"&gt;Is my analysis wrong? Have I missed something? Your thoughts, as ever, are welcome.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-2256278316926028848?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/2256278316926028848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=2256278316926028848' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/2256278316926028848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/2256278316926028848'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2009/04/no-wonder-seeqpod-are-in-trouble.html' title='No wonder Seeqpod are in trouble'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-1856923697149448443</id><published>2009-02-22T01:58:00.000-08:00</published><updated>2009-02-23T00:59:52.477-08:00</updated><title type='text'>poetic_terrorism.mp3</title><content type='html'>&lt;p&gt;Ok guys, time for y’all to &lt;a href="http://san1t1.vpscustomer.com/mixes/poetic_terrorism.mp3" target="_blank"&gt;download my first mix of the year&lt;/a&gt; (150Mb). The first for nearly a whole year too!&lt;/p&gt;  &lt;p&gt;This mix is one messed up trip round a whacked up world of music, covering, over thirty odd years of electronica, jazz, funk, rock, hip-hop and others; but mostly cross genre and fairly unclassifiable.&lt;/p&gt;  &lt;p&gt;If you like &lt;span style="font-style: italic;"&gt;several &lt;/span&gt;of the tracks on here, your sanity might be wavering.&lt;/p&gt;  &lt;p&gt;If you like &lt;span style="font-style: italic;"&gt;all &lt;/span&gt;of them you must be as messed up and twisted as I am. &lt;/p&gt;  &lt;p align="center"&gt;****&lt;/p&gt;  &lt;p&gt;So, why is it called poetic terrorism? What exactly is that? &lt;/p&gt;  &lt;p&gt;When I was about 18 I came across a writer who I might have mentioned before, &lt;a href="http://en.wikipedia.org/wiki/Peter_Lamborn_Wilson" target="_blank"&gt;Hakim Bey&lt;/a&gt;, who had more than a little impression on me the youth I was then. I read, and reread a tract of his called “T.A.Z. Ontological Anarchy and Poetic Terrorism”, which you can peruse in full &lt;a href="http://www.hermetic.com/bey/taz_cont.html" target="_blank"&gt;here&lt;/a&gt;, along with some of his other works.&lt;/p&gt;  &lt;p&gt;I was hooked from the first sentence - "&lt;span style="font-style: italic;"&gt;Chaos never died&lt;/span&gt;". &lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:78%;"&gt;(Aside - Once I lived in the Temporary Autonomous Zone of Easton, in Bristol - at least that's how signs had been decorated...)&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;The paragraph on Poetic Terrorism I'll quote in full. Excuse me the indulgence of so much copy and paste. &lt;/p&gt;  &lt;p align="center"&gt;****&lt;/p&gt; &lt;span style="font-style: italic;font-size:78%;" &gt;   &lt;p style="text-align: center; font-family: arial;"&gt; "WEIRD DANCING IN ALL-NIGHT computer-banking lobbies. Unauthorized pyrotechnic displays. Land-art, earth-works as bizarre alien artefacts strewn in State Parks. Burglarize houses but instead of stealing, leave Poetic-Terrorist objects. Kidnap someone &amp;amp; make them happy. Pick someone at random &amp;amp; convince them they're the heir to an enormous, useless &amp;amp; amazing fortune--say 5000 square miles of Antarctica, or an aging circus elephant, or an orphanage in Bombay, or a collection of alchemical mass. Later they will come to realize that for a few moments they believed in something extraordinary, &amp;amp; will perhaps be driven as a result to seek out some more intense mode of existence. &lt;/p&gt;    &lt;p style="text-align: center; font-family: arial;"&gt;Bolt up brass commemorative plaques in places (public or private) where you have experienced a revelation or had a particularly fulfilling sexual experience, etc. &lt;/p&gt;    &lt;p style="text-align: center; font-family: arial;"&gt;Go naked for a sign. &lt;/p&gt;    &lt;p style="text-align: center; font-family: arial;"&gt;Organize a strike in your school or workplace on the grounds that it does not satisfy your need for indolence &amp;amp; spiritual beauty. &lt;/p&gt;    &lt;p style="text-align: center; font-family: arial;"&gt;Graffiti-art loaned some grace to ugly subways &amp;amp; rigid public monuments--PT-art can also be created for public places: poems scrawled in courthouse lavatories, small fetishes abandoned in parks &amp;amp; restaurants, xerox-art under windshield-wipers of parked cars, Big Character Slogans pasted on playground walls, anonymous letters mailed to random or chosen recipients (mail fraud), pirate radio transmissions, wet cement... &lt;/p&gt;    &lt;p style="text-align: center; font-family: arial;"&gt;The audience reaction or aesthetic-shock produced by PT ought to be at least as strong as the emotion of terror-- powerful disgust, sexual arousal, superstitious awe, sudden intuitive breakthrough, dada-esque angst--no matter whether the PT is aimed at one person or many, no matter whether it is "signed" or anonymous, if it does not change someone's life (aside from the artist) it fails. &lt;/p&gt;    &lt;p style="text-align: center; font-family: arial;"&gt;PT is an act in a Theater of Cruelty which has no stage, no rows of seats, no tickets &amp;amp; no walls. In order to work at all, PT must categorically be divorced from all conventional structures for art consumption (galleries, publications, media). Even the guerrilla Situationist tactics of street theater are perhaps too well known &amp;amp; expected now. &lt;/p&gt;    &lt;p style="text-align: center; font-family: arial;"&gt;An exquisite seduction carried out not only in the cause of mutual satisfaction but also as a conscious act in a deliberately beautiful life--may be the ultimate PT. The Poetic Terrorist behaves like a confidence-trickster whose aim is not money but CHANGE. &lt;/p&gt;    &lt;p style="text-align: center; font-family: arial;"&gt;Don't do PT for other artists, do it for people who will not realize (at least for a few moments) that what you have done is art. Avoid recognizable art-categories, avoid politics, don't stick around to argue, don't be sentimental; be ruthless, take risks, vandalize only what &lt;em&gt;must&lt;/em&gt; be defaced, do something children will remember all their lives--but don't be spontaneous unless the PT Muse has possessed you. &lt;/p&gt;    &lt;p style="text-align: center; font-family: arial;"&gt;Dress up. Leave a false name. Be legendary. The best PT is against the law, but don't get caught. Art as crime; crime as art."&lt;/p&gt; &lt;/span&gt;  &lt;p align="center"&gt;****&lt;/p&gt;  &lt;p&gt;Obviously I'm not condoning you all go out and commit criminal acts for the sake of art. But the essence that I take from that small piece is that sometimes art isn't pleasant, sometimes we need to go and explore dark concepts and do something wild as a result. &lt;/p&gt;  &lt;p&gt;And that's OK. I mean, what's the craziest thing you've done lately? &lt;/p&gt;  &lt;p&gt;Anyhow, here's the track listing. It’s a pretty unlikely mixture, but I think I made it cogent. I wonder how many of you will bother to listen all the way through, to hear the quote above read through by it’s author.&lt;/p&gt;  &lt;table border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;        &lt;td&gt;&lt;b&gt;Track&lt;/b&gt;&lt;/td&gt;        &lt;td&gt;&lt;b&gt;Artist&lt;/b&gt;&lt;/td&gt;        &lt;td&gt;&lt;b&gt;Album&lt;/b&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;00:00&lt;/td&gt;        &lt;td&gt;Nosferatu&lt;/td&gt;        &lt;td&gt;Jad and David Fair &lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.amazon.com/Monster-Songs-Children-Fair-David/dp/B0000064A9" target="_blank"&gt;26 Monster Songs For Children&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;01:38&lt;/td&gt;        &lt;td&gt;Enjoy Your Tea&lt;/td&gt;        &lt;td&gt;John S Hall and Kramer &lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.amazon.com/Real-Men-Hall-Kramer/dp/B000008GC1" target="_blank"&gt;Real Men&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;03:34&lt;/td&gt;        &lt;td&gt;Speed The Road, Rush The Lights&lt;/td&gt;        &lt;td&gt;Piano Magic &lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.amazon.com/Speed-Road-Lights-Piano-Magic/dp/B0000ADY9V" target="_blank"&gt;Speed The Road, Rush The Lights&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;11:09&lt;/td&gt;        &lt;td&gt;Roach&lt;/td&gt;        &lt;td&gt;Eardrum &lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.amazon.com/Last-Light-Eardrum/dp/B00002EPJD" target="_blank"&gt;Last Light&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;12:56&lt;/td&gt;        &lt;td&gt;LETSmakeOURmovies&lt;/td&gt;        &lt;td&gt;AGF &lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.amazon.co.uk/Westernization-Completed-AGF/dp/B0000W3MSU" target="_blank"&gt;Westernization completed&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;15:14&lt;/td&gt;        &lt;td&gt;Breath Controls&lt;/td&gt;        &lt;td&gt;Headset &lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.amazon.com/Space-Settings/dp/B001B25ECA" target="_blank"&gt;Space Settings&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;19:56&lt;/td&gt;        &lt;td&gt;Be Your Own&lt;/td&gt;        &lt;td&gt;One Self &lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.amazon.com/Be-Your-Own-EP/dp/B001B1OYG" target="_blank"&gt;Be Your Own&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;23:25&lt;/td&gt;        &lt;td&gt;Ding Dang&lt;/td&gt;        &lt;td&gt;The Les Claypool Frog Brigade &lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.amazon.com/Purple-Onion-Claypool/dp/B00006IT6C" target="_blank"&gt;Purple Onion&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;29:07&lt;/td&gt;        &lt;td&gt;The Millennium Falcon&lt;/td&gt;        &lt;td&gt;Jaga Jazzist &lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.discogs.com/Jaga-Jazzist-J%C3%A6vla-Jazzist-Grete-Stitz/release/45733" target="_blank"&gt;Jævla Jazzist Grete Stitz&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;32:48&lt;/td&gt;        &lt;td&gt;Starbase One&lt;/td&gt;        &lt;td&gt;Luke Vibert &lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.discogs.com/Amen-Andrews-Volume-01/release/162974" target="_blank"&gt;Amen Andrews Vol 1&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;36:13&lt;/td&gt;        &lt;td&gt;Kokoni Sachiari&lt;/td&gt;        &lt;td&gt;Asa Chang And Junray &lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.amazon.co.uk/Jun-Song-Chang-Asa-Chang-Junray/dp/B000067UCW" target="_blank"&gt;Jun Ray Song Chang&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;36:36&lt;/td&gt;        &lt;td&gt;Mother&lt;/td&gt;        &lt;td&gt;The Police &lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.amazon.co.uk/Synchronicity-Police/dp/B00009P57O" target="_blank"&gt;Synchronicity&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;39:32&lt;/td&gt;        &lt;td&gt;Physical&lt;/td&gt;        &lt;td&gt;Adam And The Ants &lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.amazon.co.uk/Adam-Ants-Peel-Sessions/dp/B00004SFE" target="_blank"&gt;The Peel Sessions&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;43:29&lt;/td&gt;        &lt;td&gt;Venus in Furs&lt;/td&gt;        &lt;td&gt;Jim O'Rourke &lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.insound.com/Various_Artists_Rabid_Chords_002:_A_Tribute_to_the_Velvet_Underground_2xCD/productmain/p/INS7128/" target="_blank"&gt;A Tribute To the Velvet underground&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;50:05&lt;/td&gt;        &lt;td&gt;Never mind (What Was It Anyway)&lt;/td&gt;        &lt;td&gt;Sonic Youth &lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.amazon.co.uk/NYC-Ghosts-Flowers-Sonic-Youth/dp/B00004T3XL" target="_blank"&gt;NYC Ghosts and Flowers&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;55:18&lt;/td&gt;        &lt;td&gt;God In My Bed&lt;/td&gt;        &lt;td&gt;Z-Rock Hawaii &lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.amazon.co.uk/Z-Rock-Hawaii/dp/B0000014I3" target="_blank"&gt;Z-Rock Hawaii&lt;/a&gt; &lt;br /&gt;&lt;i&gt;now worth £70, offers welcome&lt;/i&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;58:52&lt;/td&gt;        &lt;td&gt;Skanky Panky&lt;/td&gt;        &lt;td&gt;Kid Koala &lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.amazon.co.uk/Some-Best-Friends-Are-DJs/dp/B001NU37TC" target="_blank"&gt;Some Of My Best Friends Are DJs&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;62:12&lt;/td&gt;        &lt;td&gt;Eros&lt;/td&gt;        &lt;td&gt;Tortoise &lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.amazon.co.uk/Standards-Tortoise/dp/B000056BJL" target="_blank"&gt;Standards&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;66:24&lt;/td&gt;        &lt;td&gt;Ringer&lt;/td&gt;        &lt;td&gt;Four Tet &lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.amazon.co.uk/Ringer-EP-Four-Tet/dp/B00151HZ9M" target="_blank"&gt;Ringer&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;76:11&lt;/td&gt;        &lt;td&gt;Poetic Terrorism&lt;/td&gt;        &lt;td&gt;Hakim Bey/Bill Laswell &lt;/td&gt;        &lt;td&gt;&lt;a href="http://www.amazon.com/T-Z-Hakim-Bey/dp/B000000GB0" target="_blank"&gt;TAZ&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-1856923697149448443?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/1856923697149448443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=1856923697149448443' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/1856923697149448443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/1856923697149448443'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2009/02/poeticterrorismmp3.html' title='poetic_terrorism.mp3'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-9065536419477240964</id><published>2009-02-01T20:50:00.000-08:00</published><updated>2009-02-01T12:41:53.092-08:00</updated><title type='text'>Internet Explorer - Why do they still bother</title><content type='html'>This is a rant. If you're not in the mood to read a rant, please move on. There's loads more content on the interwebs for you.&lt;br /&gt;&lt;br /&gt;A friend of mine from Microsoft (won't mention names) pinged me the other day. He was bouncing ideas of me for a talk he wants to do at Tech Ready, an MSFT internal conference, provisionally entitled cloud 4.20. Made me chuckle.&lt;br /&gt;&lt;br /&gt;We got chatting, as you do.&lt;br /&gt;&lt;br /&gt;And I got on to a rant. About Internet Explorer.&lt;br /&gt;&lt;br /&gt;For many years I was a bit of a Microsoft specialist in the organisation I work in. I ran a .Net Focus Group. To some extent I evangalized use of the Microsoft Platform in the company. Now I've changed, now I plug open source software, and use it. Live and learn. The exception here is Windows - I get a PC from work, and frankly, running Windows is just simpler than installing and learning a Linux dist. I don't pay for MS software, I get a license with the machine, and I still get an MSDN subscription. Mind you, this is probably the last year for that. I'm running Windows 7 beta, and my advice to anyone running Vista would be to get hold of a copy and upgrade (I mean, of course, re-install). I've had virtually no software incompatabilities, it runs faster and quicker, and annoys me far less than Vista did. Windows 7 is an improvement. Thank the Lord.&lt;br /&gt;&lt;br /&gt;You know what the very first thing I did when Windows 7 booted for the first time (in less than 15 minutes from whacking the disk in, I may add)?&lt;br /&gt;&lt;br /&gt;I downloaded Firefox.&lt;br /&gt;&lt;br /&gt;See, let's be honest, if the browser wars are still going on, then Microsoft are just so far behind. Yes, largest market penetration, blah blah blah, but we all know that's historic, and because most folk don't know better. Or they have locked down corporate PCs and have no choice, because many of their line of business apps only work in IE. (My organisation is VERY guilty of this).&lt;br /&gt;&lt;br /&gt;Anyone who's spent much time with Firefox (or even Safari for Windows, or Chrome), is highly unlikely to go back to IE. I mean, on Windows 7 Beta, running it's un-upgradeable build of IE 8 (what's with that?), Firefox loads quicker, performs better, and overall, gives me a happier surfing experience. I can customize it to my hearts content (web devs out there - firebug - need I say more?), and the vast majority of web sites render better.&lt;br /&gt;&lt;br /&gt;And of course if you're on a Mac, then you're never gonna install IE. Be serious.&lt;br /&gt;&lt;br /&gt;I build web sites. I build them using Firefox. I'm mindful while I do it that I'm gonna have to change things for IE, but I probably care about that far less than I should. However I'm pretty confident that any modifications for Safari, Opera and Chrome, will be minor and straightforward, and not leave me pulling my hair out with frustration.&lt;br /&gt;&lt;br /&gt;Which IE inevitably does. It plays with my mind. It upsets me. It has erratic behaviour, and this is NOT the place to document it. That's not the point of this rant.&lt;br /&gt;&lt;br /&gt;The point of this rant, and the conversation I had with my Microsoft buddy, is to wonder why they still bother producing it.&lt;br /&gt;&lt;br /&gt;Does anyone pay for it? No. Not a chance. After all, other browsers are free to use. So it's not bringing in any direct revenue for Microsoft.&lt;br /&gt;&lt;br /&gt;Is it a platform play? Well, I'll agree that Office, along with Exchange and Sharepoint and other back-end pieces, they are a platform play. I'll agree that .Net is a platform play. The Windows OS is a platform play (though for how much longer, one has to wonder) Windows Azure is the future of platform plays, and, from what I've seen, pretty well thought out - roll on the PHP in the cloud support, depending on the price point, it might entice me. But Internet Explorer? Is that a platform play? I don't think so. How does owning the browser, which is a standard bit of software these days, how does that bring more people to the Microsoft platform? I'll tell you how. Not One Jot.&lt;br /&gt;&lt;br /&gt;Alright, you say. What about security? Surely by owning the browser, and being able to patch it at will, and control how it hooks into the OS, surely that's important. And I may concede on security a little, albeit reluctantly.&lt;br /&gt;&lt;br /&gt;Here's what I think Microsoft should do. They should put their hands up and say, loudly and honestly, "&lt;span style="font-style: italic;"&gt;You know what? We're stopping IE8 development. We are not going to deploy Internet Explorer with Windows 7. We are going to have a lightweight browser called IE Lite for use in Office, and all those Web Browser controls, &amp;amp;c. But we are moving the IE team into maintenance mode, and redeploying the remaining staff from the IE team worth keeping to work on the &lt;a href="http://www.mozilla.org/en/contribute/"&gt;Mozilla code base&lt;/a&gt;, &lt;a href="http://code.google.com/p/v8/"&gt;WebKit &lt;/a&gt;and &lt;a href="http://code.google.com/p/v8/"&gt;Google's V8 engine&lt;/a&gt;. Collaboratively. With the community. We will install an open source browser with Windows. We will make it the browser use to debug with from Visual Studio. We will stop telling everyone to put in &lt;a href="http://blogs.msdn.com/mikeormond/archive/2008/09/25/ie-8-compatibility-meta-tags-http-headers-user-agent-strings-etc-etc.aspx"&gt;this IE 8 compatiblity tag&lt;/a&gt;, and rather we will work with standards bodies, the Firefox team, Apple, Google, whoever, to make sure that the world has the most consistent, secure, extensible, and best performing browser they can have. At the same time, we will release the worlds best Web Platforms. &lt;a href="http://www.microsoft.com/azure/default.mspx"&gt;Windows Azure&lt;/a&gt;. &lt;a href="https://www.mesh.com/Welcome/default.aspx"&gt;Live Mesh&lt;/a&gt;. Silverlight&lt;/span&gt; (ok, if you must). &lt;span style="font-style: italic;"&gt;While this decision has been hard, we and our shareholders agree that it is the right thing to do. We look forward to moving the Web forward in a positive way, with greater colloboration with the rest of the world"&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;And do you know what? I think this would be a major win for them. Less people would turn away from Windows. Developers would scream at them less. They'd reduce some head count, as maintenance and engineering can be slimmed down. Open source fanatics would go &lt;span style="font-style: italic;"&gt;OMFG. I can't believe it. Perhaps I should look at what else Microsoft are doing?&lt;/span&gt; Possibly killing IE would help push Azure. Y'never know.&lt;br /&gt;&lt;br /&gt;They'd also get the freedom to spend more time on Service Specific Browsers (like &lt;a href="https://www.mesh.com/Welcome/default.aspx"&gt;Flock&lt;/a&gt;), should they have the urge.&lt;br /&gt;&lt;br /&gt;Well, at the end of this rant, my buddy, who is a very faithful MSFT employee, kinda bought my arguments. He certainly didn't give me the impression he'd miss attempting to sing the praises of the IE beast.&lt;br /&gt;&lt;br /&gt;What do you think? Is there even anyone who reads my posts who still uses Internet Explorer? Any other advice for the Beast of Redmond?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-9065536419477240964?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/9065536419477240964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=9065536419477240964' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/9065536419477240964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/9065536419477240964'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2009/02/internet-explorer-why-do-they-still.html' title='Internet Explorer - Why do they still bother'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-44809972236985523</id><published>2009-01-31T14:45:00.000-08:00</published><updated>2009-01-31T06:42:42.380-08:00</updated><title type='text'>Dear Friends, I'm sorry I've been away so long.</title><content type='html'>Yeah, I'm crap, I know.&lt;br /&gt;&lt;br /&gt;There's a number of reasons.&lt;br /&gt;&lt;br /&gt;After my last post in July (was it really that long ago?) I went on holiday with my new girlfriend. We stayed with some friends in France, and we all filmed a little thing called Hairy Pouter and the Fatal Flaws. Here's a little preview.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/TbFR29Sbb54&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/TbFR29Sbb54&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;While this exercise was exhausting, it was with friends, and it was fun, and all told, this break was perhaps the most relaxed I've been for a very long time. I vowed to keep that relaxation momentum. I probably failed.&lt;br /&gt;&lt;br /&gt;But that's not the reason I haven't been blogging, though this new relationship has been keeping me happily distracted.&lt;br /&gt;&lt;br /&gt;When I got back from France, things had changed at work. I'd spent most of the first half of the year somewhat involved at work with the acquisition of a California based start up, and everything got signed while I was away. Now, when a large enterprise spends that much money, it has to justify that to stakeholders, and part of that justification was cost savings elswhere. That meant the dissolution of the project I was involved in. We learnt loads from that work, and I was sad to see it go, but I reckon it was the right thing to do, for a number of reasons. That would all be for another post, and probably one I won't write.&lt;br /&gt;&lt;br /&gt;I spent the next month or so at work kicking the tyres, I wasn't sure of what my role was and nobody could tell me. It was a lovely summer though! You'd've thought I had the time then to blog a little, but I really was in another world. I started losing the blogging habit, it just seemed to fade away. After only a few months of writing. Till now!&lt;br /&gt;&lt;br /&gt;Then I got a role in the startup we'd just acquired. This was (and still is) pretty much an engineering job. Being further from the frontline of strategy and decision making, and all the heresy and evangalizing I make part of that has been a nice change. Can't last too long, I'll get bored, but at least I've learnt some new coding skills. I'm afraid, all my MSFT buddies, I've caught the open source bug, and I'm not shaking it. This I could explain more of in another post. Maybe I will. The point being, finding myself away from the frontline and the bleeding edge means I've had less inspiring me to write. If you've nothing interesting to say, don't bother.&lt;br /&gt;&lt;br /&gt;I've been working at home the large majority of the time. In fact I'm delighted to report I haven't stayed in a hotel or flown anywhere since June. The folk who monitor expenses at work must be delighted! So you'd've thought that with so much less travel that would put time in my hands to write, put together mixes, and generally share verbiage with you.&lt;br /&gt;&lt;br /&gt;But, I've been working very hard on a side project. It's not quite done, I've been saying it's nearly ready for months, and that's true, it nearly is. But it always takes longer and costs more! I've been creating this thing with two really good friends, and staying with them when in London. You can bet your bottom dollar that I'll be writing more about this project in due course.&lt;br /&gt;If you're a bit of a hippy, then it's a psychedelic toy for the web. If you're would prefer a more pitch friendly description, then it's "social media aggregation" and "an inspiring front end to photos and music folk contribute to the web and share with their friends"&lt;br /&gt;&lt;br /&gt;So much of my time has been eaten up by this - when I find myself with free time, I want to move this project forward, not blog. The motivation and drive is good for me, and I'm learning loads. And maybe I'll launch something successful! If at first you don't succeed...&lt;br /&gt;&lt;br /&gt;The final significant reason why posts from me have been absent is Twitter (&lt;a href="http://twitter.com/san1t1"&gt;http://twitter.com/san1t1&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;I love Twitter. Working from home a lot, being able to participate in conversations, serious and fun makes me feel I'm connected to lots of people on a lovely basis. It gives me a forum to discuss ideas with others. I can say what I'm doing and, to some extent, how I'm feeling about it, and, well, it's all good. Many others have written on the virtues of Twitter, I have little really to add. It would be like reporting on the Instant Messenger revolution. It's not news to me anymore.&lt;br /&gt;&lt;br /&gt;So, less inspirational job, side project, twitter, and the distractions of a lovely lady have contributed to my failure to write here.&lt;br /&gt;&lt;br /&gt;However.&lt;br /&gt;&lt;br /&gt;I have promised some folk I'll write a post on the state of Cloud Telephony as I see it. I've been mulling things over, talking to folk (I have a nice little prospect out of that!), tweeting away, trying APIs, comparing business models, and I'm nearly ready to share my thoughts. That's a post to come.&lt;br /&gt;&lt;br /&gt;I have two mixes to upload. (well, one and a half). They'll come soon too.&lt;br /&gt;&lt;br /&gt;Mostly I'm looking forward to introducing the world to the thing I've been beavering away on for the last few months.&lt;br /&gt;&lt;br /&gt;In short, expect more soon!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-44809972236985523?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/44809972236985523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=44809972236985523' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/44809972236985523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/44809972236985523'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2009/01/dear-friends-im-sorry-ive-been-away-so.html' title='Dear Friends, I&apos;m sorry I&apos;ve been away so long.'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-8166071807864014698</id><published>2008-07-05T16:10:00.000-07:00</published><updated>2008-07-05T07:11:38.426-07:00</updated><title type='text'>Cloud or Mesh. Relational or Heirachical. Highly Distributed Logical Data Centres</title><content type='html'>As you know I'm really interested in how web applications are going to be architected as the internet age moves on. One of the dichotomies I'm trying to resolve in my mind is how data is stored with highly distributed applications.&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;What do I mean by distributed? For the purposes of this post let's just assume this means an application that is accessible from different devices, and is not bound to a single machine. Classically, this is a web site, or a client application that uses some kind of API to store data on the web.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Seems that the approach up until recently was to store your data on servers in a co-lo or dedicated data centre. Meaning that as an application developer and/or operations dude I have to scale my application based on physical architecture I know about. Generally as my app scales that means I need, eventually, to horizontally scale my database across more than one logical database. This is not straightforward, and even with the introduction of &lt;a href="http://www.hibernate.org/414.html"&gt;Hibernate Shards &lt;/a&gt;I really need to think about that. And this probably means I'm going to denormalize my database and have to work out how to synchronize some of the data I'm storing across these different logical DBs.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It strikes me though that with "cloud storage", things like &lt;a href="http://www.amazon.com/b?ie=UTF8&amp;amp;node=342335011"&gt;Amazon SimpleDB&lt;/a&gt;, or &lt;a href="https://www.google.com/accounts/ServiceLogin?service=ah&amp;amp;continue=http://appengine.google.com/_ah/login%3Fcontinue%3Dhttp://appengine.google.com/&amp;amp;ltmpl=ae&amp;amp;sig=2441550b0617bb4eb9e7f8c3eb9e63b1"&gt;Google's App Engine&lt;/a&gt;, that I may want to start with a herichacal database that is denormalized by default. No more Joins. I guess we've had this option for a long time with things like &lt;a href="http://dis.univ-lyon2.fr/~darmont/oradoc/appdev.101/b10799/adobjmng.htm"&gt;Oracle Objects&lt;/a&gt;, but seriously, have you as a developer ever tried to use that beast? Not fun. Google and Amazon (and soon Microsoft, with &lt;a href="http://www.microsoft.com/sql/dataservices/default.mspx"&gt;Sql Server Data Services&lt;/a&gt;) will have solved that "synchronize data in a denormalized logically partitioned database in many data centres" problem for me. So should I start by using that approach? Should I offload my database to these guys and just pay transactionally for what I do? This means a significant mindset change for me, I'm so used to drawing out relational diagrams, and I'm so used to using ORM or other mapping tools to abstract me from that. I need to change my mindset to think differently. But I guess the benefit of this approach is that from the beginning, provided these big guys aren't lying to me, I have an app that will scale, that will respond consistently, is backed up and disaster-resistant and that I only need to pay for on demand. This is Goodness.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Can't help thinking that this approach still requires a bunch of datacentres, the associated power and this, as an app developer, will have an eventual cost for me.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This brings me to Mesh, or Grid computing. If you're reading this, your PC is on right now, and, as I am using Blogger to host my blog, you're pulling data back from Google. Now, I don't have the worlds most read blog, I don't get thousands of hits a second, but still, for everyone who has read this blog there's a good chance that all this text is cached on their machines. And it's originated from the machine that I type this on.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You're familiar with swarm based file sharing right? Where somebody seeds a file, and then others leech it, and when they have downloaded it, they become another seed on the network? Indeed they can start sharing partial data as soon as they've downloaded it? There's no central store of this data, just some metadata that tracks where the bits are. This is how BitTorrent works (and indeed, how the &lt;a href="http://iplayerhelp-stg.external.bbc.co.uk/help/download_programmes/peer2peer"&gt;BBC iPlayer &lt;/a&gt;works in offline mode, which is why they ask you to dedicate 20GB of hard drive space)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Why don't we have this approach for other forms of application?&lt;br /&gt;&lt;br /&gt;I envisage a future where logical heirachical databases are partitioned across end nodes, such as the PC you're reading this on, and where your PC can take part in large map/reduce calculations, and that (best of all) you can have your PC and broadband for free, because application developers are renting space on it.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Google and Amazon are busy building out compute and storage in the cloud with all their data centres, for which they have to pay for power. Good for them. But, TELCOS already have the makings of a grid which could, with some clever software compete with all this, and at a much lower cost base. &lt;/p&gt;&lt;p&gt;In my house I have a &lt;a href="http://www.homehub.bt.com/"&gt;BT Home Hub&lt;/a&gt;. This is a wireless router, and connects back to the internet through BT as my ISP. What's more, it's just an embedded Linux Device. Further, unlike my PC, I tend to leave it on the whole time. There's also enough space in it to throw in a hard drive, or some solid state storage. It could act as a node in this grid I'm envisaging. It could even negotiate with the PCs connected to it and utilise their storage and CPU. &lt;/p&gt;&lt;p&gt;BT could give this to me - for free - and then charge back to application developers the cost of storage and compute. Without the need to ever build data centres, and offloading the cost of all the power required to run server farms.&lt;/p&gt;&lt;p&gt;I understand that there are issues around latency, concurrency, routing, and a whole bunch of other problems to solve. But I reckon, that rather than attempting to replicate the approach that Amazon and Google and a host of others are doing, telcos should concentrate on taking their existing deployed Customer Premise Equipment assets and building out storage, compute and content distribution based on this. &lt;/p&gt;&lt;p&gt;What do you think? Am I in cloud cuckoo land again? &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-8166071807864014698?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/8166071807864014698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=8166071807864014698' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/8166071807864014698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/8166071807864014698'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/07/cloud-or-mesh-relational-or-heirachical.html' title='Cloud or Mesh. Relational or Heirachical. Highly Distributed Logical Data Centres'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-3614255367796848706</id><published>2008-06-18T05:18:00.001-07:00</published><updated>2008-06-18T05:18:22.085-07:00</updated><title type='text'>No Mouse or Keyboard detected - press F1 to continue</title><content type='html'>&lt;p&gt;I've been wondering how much longer the vast majority of people who use computer based equipment will continue to use a mouse and keyboard as their primary input devices.&lt;/p&gt;  &lt;p&gt;iPhone users, you probably know what I mean already, huh?&lt;/p&gt;  &lt;p&gt;While the keyboard has served us well, and the mouse is great for pointing and clicking, neither of them strike me as intuitive interfaces for deeply immersive user interfaces; and that's probably because of the misdirection involved in using them. When I type at my PC, I look at the screen. My fingers tap away at a keyboard, and it is only through years of practice (and of classical piano training) that I can manage to reconcile, fast, the fact that the input device requires separate neural processing to the output device.&lt;/p&gt;  &lt;p&gt;Likewise with the mouse. For navigating around two dimensional, hypertextually linked applications, it's OK I guess, but as soon as I want to attempt to draw something, or zoom in on an image or a section of the screen I'm a bit stuck, and have to often co-ordinate keyboard and mouse to make things work. Mac users (least, those who haven't bothered to get a two key mouse) know this more than most - press CTRL for right click? Who thought that up? I understand that the Mac is partly about making simple tasks simple, but I reckon most people can grok at an intuitive level the concept of &amp;quot;left click for action, right click for context&amp;quot;. &lt;/p&gt;  &lt;p&gt;Saying that, I've never quite mastered the middle button on a mouse, except when it serves as a wheel as well. What was that third button for? It's like the third pedal on a piano you occasionally come across. &lt;a href="http://en.wikipedia.org/wiki/Sostenuto" target="_blank"&gt;What the hell is that for&lt;/a&gt;? Never saw a piece of music that refers to it in 14 years of classical training, or since.&lt;/p&gt;  &lt;p&gt;I digress. I saw this little Minority-Touch-esque video yesterday and wondered if the time is right yet to reposition my career as a &amp;quot;Multi Dimension &amp;amp; Multi Touch Interface Human Design Specialist&amp;quot;&lt;/p&gt;  &lt;p&gt;   &lt;div class="wlWriterSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:0662840a-efd6-45bd-b7f8-fb89cf02184c" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;div&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ysEVYwa-vHM"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/ysEVYwa-vHM" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt; &lt;/p&gt;  &lt;p&gt;That's a career which doesn't yet exist. But it will.&lt;/p&gt;  &lt;p&gt;Now naysayers will come along and tell me that they don't anticipate that they'll ever stop typing. Folk were loath to leave quill and ink behind too. I must admit, I don't quite know what will replace my 70+ words per minute typing speed with something that doesn't require me to dictate (still haven't got my head round that one, not for want of trying - the words seem to flow better when I type, and I don't have to go back and delete all the &amp;quot;ums&amp;quot; and &amp;quot;erms&amp;quot; and &amp;quot;ahs&amp;quot;)&lt;/p&gt;  &lt;p&gt;But what I do know is that the amount of time I spend interacting with data visually is increasing.&lt;/p&gt;  &lt;p&gt;I love my &lt;a href="http://www.slimdevices.com/pi_squeezebox.html" target="_blank"&gt;Squeezebox&lt;/a&gt;, it's a great way of getting audio round the house without having to run computers or hard drives in the front room. The next version, the Squeezbox Duet has this great remote control which allows me to navigate by album cover. The remote itself is a Wi-Fi enabled device. (I'll post more on exposing your music collection over the internet using &lt;a href="http://wiki.slimdevices.com/index.php/SqueezeCenter" target="_blank"&gt;SqueezeCenter&lt;/a&gt; another time)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.slimdevices.com/"&gt;&lt;img height="186" alt="Squeezebox Duet Network Music System" src="http://www.slimdevices.com/images/duet_hero_500_2.jpg" width="272" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;But it's still not quite CoverFlow-As-Remote-Control. And CoverFlow still sucks at letting me browse through my extensive (3000+ albums) digital music collection&lt;/p&gt;  &lt;p&gt;   &lt;div class="wlWriterSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:aae3bae6-6265-45f3-ab2e-3fe9ff03e8ca" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;div&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/WHxQU4RhyLk&amp;amp;feature=related"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/WHxQU4RhyLk&amp;amp;feature=related" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt; &lt;/p&gt;  &lt;p&gt;Now, what I want is an interface that looks like a CD collection, but in glorious Multi-D. Where I can navigate it based on all manner of factors, Where I can Zoom in Deep. Where I can move from one &amp;quot;room&amp;quot; to another. Where I can jump straight to an artists web site. Or all manner of interactions when I treat items in my music collection as &lt;a href="http://ontology.buffalo.edu/smith/articles/dksearle.htm" target="_blank"&gt;Social Objects&lt;/a&gt;. And where I can manage this on a number of devices, from a wall mounted screen, to a PDA, to a headset based experience (you have to check &lt;a href="http://www.futuroscope.com/attraction-animaux-du-futur.php" target="_blank"&gt;this&lt;/a&gt; out)&lt;/p&gt;  &lt;p&gt;Over the last decade and a half of my career in software I've been building flat, boring user interfaces, either for the web, or for the desktop. The next generation is not gonna be happy with that. They will expect their over-specced, highly connected, under-priced equipment to do more for them than that. They'll be comfortable with &lt;a href="http://en.wikipedia.org/wiki/Augmented_reality" target="_blank"&gt;augmented reality&lt;/a&gt; (and may even be as lost without their overlay glasses as they are today without their mobile phones). They'll be over the concept of &amp;quot;media ownership&amp;quot; and will expect things to be shareable. Like playing &lt;a href="http://youtube.com/watch?v=3LdpmxHE7VU" target="_blank"&gt;pong over multiple iPhones&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I know for a fact that there are not nearly enough User Experience (UX) specialists in the world. And this is probably because all the stuff beneath the UX, stuff to do with data persistence, graphics rendering engines, networks, systems integration etc, has been more than enough for the world of Software Engineers for the last 15 years or so. But I forsee a world coming, and soon, where many of the Hard Data Problems all start to disappear, and where aggregation and rendering of these ceases to happen server side, and instead, it will be smart, graphically rich clients, with multi-touch interfaces bringing it all together in the user experience. What is a software guy to do? Well, until the tools and frameworks are at a high enough level that anyone can build those experiences, I think there is still work for us.&lt;/p&gt;  &lt;p&gt;So, blogosphere, if I were to reinvent myself as a &amp;quot;Multi Dimension &amp;amp; Multi Touch Interface Human Design Specialist&amp;quot; where should I start? What should I read? What should I be learning? Bear in my mind that I have very little graphic design experience, and it's not really prettifying stuff that interests me, it's in making things usable in ways we are not yet familiar.&lt;/p&gt;  &lt;p&gt;Here's some more things that inspire me in this space&lt;/p&gt;  &lt;p&gt;&lt;a href="http://labs.live.com/Silverlight+2+Deep+Zoom.aspx" target="_blank"&gt;Silverlight Deep Zoom&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=0GAbMRj0IV0" target="_blank"&gt;3D in Flash v.Next&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://developer.apple.com/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/chapter_8_section_6.html#//apple_ref/doc/uid/TP40006511-SW16" target="_blank"&gt;onorientationchange&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ajaxian.com/archives/iphone-webkit-goodness-3d-css-transforms-and-ontouch-events" target="_blank"&gt;multitouch in javascript&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://youtube.com/watch?v=ko6Frzf1Adc" target="_blank"&gt;Microsoft LaserTouch&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://java.sun.com/developer/technicalArticles/J2SE/Desktop/lookingglass/" target="_blank"&gt;Project Looking Glass&lt;/a&gt; (seems dormant?)&lt;/p&gt;  &lt;p&gt;What do you think? Ask yourself again at the end of a day of &lt;a href="http://youtube.com/watch?v=ko6Frzf1Adc" target="_blank"&gt;RSI inducing activity&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-3614255367796848706?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/3614255367796848706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=3614255367796848706' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/3614255367796848706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/3614255367796848706'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/06/no-mouse-or-keyboard-detected-press-f1.html' title='No Mouse or Keyboard detected - press F1 to continue'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-8481399196703934503</id><published>2008-06-15T20:43:00.000-07:00</published><updated>2008-06-15T12:45:17.583-07:00</updated><title type='text'>shattered_and_emotional.mp3</title><content type='html'>&lt;p&gt;&lt;a href="http://64.22.75.56/mixes/shattered_and_emotional.mp3" target="_blank"&gt;Download/listen here&lt;/a&gt; (100Mb or so)&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;It's been an interesting week. After bouncing back and forth across the pond several times this year, I took a week more or less out to rest; it was well needed and I feel very refreshed and ready to pick up the pace again tomorrow morning.&lt;/p&gt;&lt;p&gt;Amazing what happens when you take time for yourself. Things open up sometimes and opportunities occur that you just don't see when you're moving headlong at an air speed of 500 miles an hour. Let's just say that, partly due to a funeral I attended this week (mostly to support close friends), there has been some unexpected, emotional honesty that has, frankly, made me feel a whole lot better about life and myself. Not gonna say any more at this point, I'll leave it cryptic for now. Those involved will know what I mean. Things still need to work themselves out, and I'm in no real hurry, even though a good part of me is impatient to get to a denouement.&lt;/p&gt;&lt;p&gt;Anyway, I woke up this morning, and the sun was out. I packed the car with swimming things, we set off to pick up one of my daughters friends, to spend the day jumping in and out of the River Dart, and then, this being a &lt;em&gt;British &lt;/em&gt;Summer, naturally the heavens opened and started to drench us. River trip cancelled. I can't complain too much, most of the last week was fabulous and sunny.&lt;/p&gt;&lt;p&gt;So home we come, and I decided to do a mix. I've had a couple in mind, one of sorta funky summery kind of tracks - the rain did for any funkful inspiration I may've had today. Another mix has been pending of kinda lurve songs - but that just didn't feel quite right to do today either, for one reason and another.&lt;/p&gt;&lt;p&gt;So I did  a mix of purely electronic tunes. Broken beats, occasional stilted lyrics, shattered melodies. Once or twice you might feel like dancing. You might feel like getting weepy. You might barely recognise some of this as music. There are frenetic moments, still moments, and almost everything in between. &lt;/p&gt;&lt;p&gt;This is not music you're likely to hear in the clubs, or on the radio. Maybe if you're in a chill out room in Germany... &lt;/p&gt;&lt;p&gt;I wonder if my regular listeners will struggle with this one, perhaps more than the &lt;a href="http://blog.san1t1.com/2008/03/showtimemp3.html" target="_blank"&gt;showtunes&lt;/a&gt; of a while back. Though it would be for completely different reasons.&lt;/p&gt;&lt;p&gt;If you like it, let me know! If you don't, it's fine for you to keep your opinions to yourself, thank you very much. I do these mixes mostly for my own self indulgent purposes.&lt;/p&gt;&lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/timsan1t1/SFVxF0UjJaI/AAAAAAAAAHI/6r9QP9JIm2s/s1600-h/shattered%5B4%5D.jpg"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="298" alt="shattered" src="http://lh4.ggpht.com/timsan1t1/SFVxHqjE_EI/AAAAAAAAAHM/OqIwAdd0KL8/shattered_thumb%5B2%5D.jpg?imgmax=800" width="335" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;table cellspacing="0" cellpadding="2" width="442" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="40"&gt;&lt;strong&gt;Start&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="125"&gt;&lt;strong&gt;Artist&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="125"&gt;&lt;strong&gt;Track&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;strong&gt;Album&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="58"&gt;00:00&lt;/td&gt;&lt;td valign="top" width="149"&gt;Matmos&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" width="150"&gt;In the Master Bedroom&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.almostcool.org/mr/803/" target="_blank"&gt;A Viable Alternative to Actual Sexual Contact&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="60"&gt;05:45&lt;/td&gt;&lt;td valign="top" width="148"&gt;Freeform&lt;/td&gt;&lt;td valign="top" width="150"&gt;Dice&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.worminterface.com/index.php3?pageurl=shop2/catitem.php?catnum=wi007" target="_blank"&gt;Alt. Frequencies&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="61"&gt;13:23&lt;/td&gt;&lt;td valign="top" width="147"&gt;AGF+Delay&lt;/td&gt;&lt;td valign="top" width="150"&gt;The Return of Us&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Electric-Ladyland-Clickhop-Version-1-0/dp/B00005Q680/ref=sr_1_2?ie=UTF8&amp;amp;s=music&amp;amp;qid=1213558173&amp;amp;sr=1-2" target="_blank"&gt;Electric Ladyland Clickhop Version 1.0&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="63"&gt;17:23&lt;/td&gt;&lt;td valign="top" width="125"&gt;MRI&lt;/td&gt;&lt;td valign="top" width="150"&gt;Data Boogie&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/All-That-Glitters-VINYL-MRI/dp/B000063NLW/ref=sr_1_3?ie=UTF8&amp;amp;s=music&amp;amp;qid=1213558190&amp;amp;sr=1-3" target="_blank"&gt;All that Glitters&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;23:55&lt;/td&gt;&lt;td valign="top" width="125"&gt;Telefon Tel Aviv&lt;/td&gt;&lt;td valign="top" width="150"&gt;Farenheit Far Enough (Prefuse 73 Bonus Beats remix)&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Immediate-Action-Vol-8-Telefon-Aviv/dp/B00008ADG6/ref=sr_1_1?ie=UTF8&amp;amp;s=music&amp;amp;qid=1213558209&amp;amp;sr=1-1" target="_blank"&gt;Immediate Action #08&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;27:02&lt;/td&gt;&lt;td valign="top" width="125"&gt;Si Begg&lt;/td&gt;&lt;td valign="top" width="150"&gt;England&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Directors-Cut-Si-Begg/dp/B00009V8WN/ref=sr_1_1?ie=UTF8&amp;amp;s=music&amp;amp;qid=1213558227&amp;amp;sr=1-1" target="_blank"&gt;Directors Cut&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;31:26&lt;/td&gt;&lt;td valign="top" width="125"&gt;Tuss&lt;/td&gt;&lt;td valign="top" width="150"&gt;Rushup I Bank 12&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Rushup-Edge-Tuss/dp/B000R8P42O/ref=sr_1_1?ie=UTF8&amp;amp;s=music&amp;amp;qid=1213558247&amp;amp;sr=1-1" target="_blank"&gt;Rushup Edge&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;36:02&lt;/td&gt;&lt;td valign="top" width="125"&gt;Clark&lt;/td&gt;&lt;td valign="top" width="150"&gt;Night Knuckles&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Body-Riddle-Clark/dp/B000HCPSNK/ref=sr_1_1?ie=UTF8&amp;amp;s=music&amp;amp;qid=1213558265&amp;amp;sr=1-1" target="_blank"&gt;Body Riddle&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;39:41&lt;/td&gt;&lt;td valign="top" width="125"&gt;Triosk&lt;/td&gt;&lt;td valign="top" width="150"&gt;Intensives Leben&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Headlight-Serenade-Triosk/dp/B000FS9OTU/ref=sr_1_1?ie=UTF8&amp;amp;s=music&amp;amp;qid=1213558290&amp;amp;sr=1-1" target="_blank"&gt;The Headlight Serenade&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;45:55&lt;/td&gt;&lt;td valign="top" width="125"&gt;B Fleischmann&lt;/td&gt;&lt;td valign="top" width="150"&gt;Phones and Machines&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Humbucking-Coil-Bernhard-Fleischmann/dp/B000CETP7I/ref=sr_1_2?ie=UTF8&amp;amp;s=music&amp;amp;qid=1213558308&amp;amp;sr=1-2" target="_blank"&gt;The Humbucking Coil&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;50:48&lt;/td&gt;&lt;td valign="top" width="125"&gt;Christain Kleine&lt;/td&gt;&lt;td valign="top" width="150"&gt;Quentin&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Beyond-Repair-French-Christian-Kleine/dp/B00005OT03/ref=sr_1_3?ie=UTF8&amp;amp;s=music&amp;amp;qid=1213558324&amp;amp;sr=1-3" target="_blank"&gt;Beyond Repair&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;56:00&lt;/td&gt;&lt;td valign="top" width="125"&gt;Global Goon&lt;/td&gt;&lt;td valign="top" width="150"&gt;Long Whiney&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Cradle-History-Global-Goon/dp/B000024A3I/ref=sr_1_5?ie=UTF8&amp;amp;s=music&amp;amp;qid=1213558345&amp;amp;sr=1-5" target="_blank"&gt;Cradle of History&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;59:42&lt;/td&gt;&lt;td valign="top" width="125"&gt;Burial&lt;/td&gt;&lt;td valign="top" width="150"&gt;Pirates&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Burial/dp/B000FA55X2/ref=sr_1_2?ie=UTF8&amp;amp;s=music&amp;amp;qid=1213558363&amp;amp;sr=1-2" target="_blank"&gt;Burial&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;65:34&lt;/td&gt;&lt;td valign="top" width="125"&gt;Susumu Yokota&lt;/td&gt;&lt;td valign="top" width="150"&gt;Tears of a Poet&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Grinning-Cat-Susumu-Yokota/dp/B00005JDMT/ref=sr_1_1?ie=UTF8&amp;amp;s=music&amp;amp;qid=1213558380&amp;amp;sr=1-1" target="_blank"&gt;Grinning Cat&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-8481399196703934503?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/8481399196703934503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=8481399196703934503' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/8481399196703934503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/8481399196703934503'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/06/shatteredandemotionalmp3.html' title='shattered_and_emotional.mp3'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/timsan1t1/SFVxHqjE_EI/AAAAAAAAAHM/OqIwAdd0KL8/s72-c/shattered_thumb%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-2341577277815566608</id><published>2008-06-03T09:55:00.001-07:00</published><updated>2008-06-03T09:55:29.724-07:00</updated><title type='text'>Death of Technology Without An Interesting Name?</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Microsoft have, in their wisdom, decided that all scanners and similar image acquisition devices need to support Web Services, with an obviously named protocol - &lt;/font&gt;&lt;a href="http://www.microsoft.com/Presspass/press/2008/may08/05-29WebServicesPR.mspx"&gt;&lt;font size="3"&gt;WS-Scan&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt;. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Go. Figure.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Does this mean we will see TWAIN no more?&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;From the MSFT press release:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;This collaboration is a response to customer and industry interest in having the WS-Scan Service Schema mapped directly to the &lt;a href="http://www.pwg.org/mfd/index.html"&gt;PWG Scan semantic model&lt;/a&gt;,&amp;#8221; said Jack Mayo, group program manager with the Windows Experience team at Microsoft. &amp;#8220;The benefit to customers will be making great scanning solutions for Windows-based interoperable with other platforms. The ability to make interoperable solutions will also greatly reduce the development burden on the PWG partner companies.&amp;#8221;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;So the only reason I posted this is because TWAIN is one of my all time favourite acronyms, commonly, if unofficially, understood to stand for Technology Without An Interesting Name. And I don't normally find reasons to refer to that. Seemingly pointless MSFT initiatives don't really worry me that much.&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-2341577277815566608?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/2341577277815566608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=2341577277815566608' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/2341577277815566608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/2341577277815566608'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/06/death-of-technology-without-interesting.html' title='Death of Technology Without An Interesting Name?'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-1863508685974770969</id><published>2008-05-01T23:45:00.000-07:00</published><updated>2008-05-01T15:46:55.982-07:00</updated><title type='text'>inadequacy.mp3</title><content type='html'>&lt;p&gt;Download or stream &lt;a href="http://64.22.75.56/mixes/inadequacy.mp3" target="_blank"&gt;from here&lt;/a&gt;. about 91Mb&lt;/p&gt;&lt;p&gt;I started out thinking I'd do something happy, given that it's May, and at least in the northern hemisphere summer is approaching. Think we in the UK have our summer on the third Wednesday of the month normally.&lt;/p&gt;&lt;p&gt;Thought it'd be happy. But ended up somewhat different. Maybe it's just me.&lt;/p&gt;&lt;p&gt;No particular blurb, but if you've made mistakes, screwed up, or just felt wrong this mix may just resonate.&lt;/p&gt;&lt;p&gt;Or you may think, once again, that my taste in music is odd and just completely worth ignoring. You're probably grateful that at least it isn't more showtunes!&lt;/p&gt;&lt;p&gt;Comments on what you like or don't like are more than welcome&lt;/p&gt;&lt;table cellspacing="0" cellpadding="2" width="522" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="68"&gt;&lt;strong&gt;Time&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="151"&gt;&lt;strong&gt;Track&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="127"&gt;&lt;strong&gt;Artist&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="173"&gt;&lt;strong&gt;Source&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="69"&gt;00:00&lt;/td&gt;&lt;td valign="top" width="151"&gt;Coda&lt;/td&gt;&lt;td valign="top" width="127"&gt;Kramer&lt;/td&gt;&lt;td valign="top" width="172"&gt;&lt;a href="http://www.amazon.co.uk/Guilt-Trip-Kramer/dp/B00000DBUX/" target="_blank"&gt;The Guilt Trip&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="70"&gt;01:33&lt;/td&gt;&lt;td valign="top" width="151"&gt;Don't Tell Me I'm Wrong (But You Are&lt;/td&gt;&lt;td valign="top" width="127"&gt;Imitation Electric Piano&lt;/td&gt;&lt;td valign="top" width="172"&gt;&lt;a href="http://www.amazon.co.uk/Trinity-Neon-Imitation-Electric-Piano/dp/B00009026D" target="_blank"&gt;Trinity Neon&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="71"&gt;05:35&lt;/td&gt;&lt;td valign="top" width="151"&gt;Apologies&lt;/td&gt;&lt;td valign="top" width="127"&gt;James Figurine&lt;/td&gt;&lt;td valign="top" width="172"&gt;&lt;a href="http://www.amazon.co.uk/Mistake-James-Figurine/dp/B000FOPPOC/" target="_blank"&gt;Mistake Mistake Mistake&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="71"&gt;11:17&lt;/td&gt;&lt;td valign="top" width="151"&gt;No-one's Wrong (Giricocola)&lt;/td&gt;&lt;td valign="top" width="127"&gt;Scout Nibblet&lt;/td&gt;&lt;td valign="top" width="172"&gt;&lt;a href="http://www.amazon.co.uk/I-Am-Scout-Niblett/dp/B00009WW2P/" target="_blank"&gt;I Am&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="71"&gt;15:31&lt;/td&gt;&lt;td valign="top" width="151"&gt;Nine Plan Failed&lt;/td&gt;&lt;td valign="top" width="127"&gt;Adam and the Ants&lt;/td&gt;&lt;td valign="top" width="172"&gt;&lt;a href="http://www.amazon.co.uk/Dirk-Wears-White-Sox-Remastered/dp/B000IAZ8O0/" target="_blank"&gt;Dirk Wears White Sox&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="71"&gt;20:41&lt;/td&gt;&lt;td valign="top" width="151"&gt;One Step Inside Doesn't Mean You Understand&lt;/td&gt;&lt;td valign="top" width="127"&gt;Notwist&lt;/td&gt;&lt;td valign="top" width="172"&gt;&lt;a href="http://www.amazon.co.uk/Neon-Golden-Notwist/dp/B00005NY9B/" target="_blank"&gt;Neon Golden&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="71"&gt;23:54&lt;/td&gt;&lt;td valign="top" width="151"&gt;In At The Beep End&lt;/td&gt;&lt;td valign="top" width="127"&gt;P P Roy&lt;/td&gt;&lt;td valign="top" width="172"&gt;&lt;a href="http://www.amazon.co.uk/You-Cant-Help-Liking-P-P/dp/B00004WHBE" target="_blank"&gt;You Can't Help Liking&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="71"&gt;26:45&lt;/td&gt;&lt;td valign="top" width="151"&gt;This Is All Wrong&lt;/td&gt;&lt;td valign="top" width="127"&gt;Styrofoam&lt;/td&gt;&lt;td valign="top" width="172"&gt;&lt;a href="http://www.discogs.com/release/103146" target="_blank"&gt;Split 7" with Dntel&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="71"&gt;31:42&lt;/td&gt;&lt;td valign="top" width="151"&gt;Forgive&lt;/td&gt;&lt;td valign="top" width="127"&gt;The Living Jarboe&lt;/td&gt;&lt;td valign="top" width="172"&gt;&lt;a href="http://www.discogs.com/release/732410" target="_blank"&gt;Disburden Disciple&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="71"&gt;37:46&lt;/td&gt;&lt;td valign="top" width="151"&gt;What Is Wrong&lt;/td&gt;&lt;td valign="top" width="127"&gt;Tricky&lt;/td&gt;&lt;td valign="top" width="172"&gt;&lt;a href="http://www.amazon.co.uk/Vulnerable-Tricky/dp/B00009PJRI/" target="_blank"&gt;Vulnerable&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="71"&gt;41:16&lt;/td&gt;&lt;td valign="top" width="151"&gt;The Downs&lt;/td&gt;&lt;td valign="top" width="127"&gt;Minotaur Shock&lt;/td&gt;&lt;td valign="top" width="172"&gt;&lt;a href="http://www.amazon.co.uk/Rinse-Minotaur-Shock/dp/B0000TZ7PY/" target="_blank"&gt;Rinse&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="71"&gt;45:54&lt;/td&gt;&lt;td valign="top" width="151"&gt;All Your Women Things&lt;/td&gt;&lt;td valign="top" width="127"&gt;Smog&lt;/td&gt;&lt;td valign="top" width="172"&gt;&lt;a href="http://www.amazon.co.uk/Doctor-Came-at-Dawn-Smog/dp/B000024MUG/" target="_blank"&gt;Doctor Came At Dawn&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="71"&gt;52:30&lt;/td&gt;&lt;td valign="top" width="151"&gt;A Voice At The End Of The Line&lt;/td&gt;&lt;td valign="top" width="127"&gt;M Ward&lt;/td&gt;&lt;td valign="top" width="172"&gt;&lt;a href="http://www.amazon.co.uk/Transfiguration-Vincent-M-Ward/dp/B00008LKGL/" target="_blank"&gt;Transfiguration of Vincent&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="71"&gt;54:40&lt;/td&gt;&lt;td valign="top" width="151"&gt;Suicide Is Painless&lt;/td&gt;&lt;td valign="top" width="127"&gt;Kate Earl &amp;amp; Bardi Johannson&lt;/td&gt;&lt;td valign="top" width="172"&gt;&lt;a href="http://www.amazon.co.uk/Lady-Bird/dp/B000FFP03W/" target="_blank"&gt;Lady &amp;amp; Bird&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="71"&gt;57:30&lt;/td&gt;&lt;td valign="top" width="151"&gt;Lordy&lt;/td&gt;&lt;td valign="top" width="127"&gt;Low &amp;amp; Dirty Three&lt;/td&gt;&lt;td valign="top" width="172"&gt;&lt;a href="http://www.amazon.co.uk/Fishtank-Low/dp/B00005AQAA/" target="_blank"&gt;In the Fishtank&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="71"&gt;61:02&lt;/td&gt;&lt;td valign="top" width="151"&gt;I Dare To Hope&lt;/td&gt;&lt;td valign="top" width="127"&gt;King Missile&lt;/td&gt;&lt;td valign="top" width="172"&gt;&lt;a href="http://www.amazon.co.uk/Failure-King-Missile/dp/B00000AFQ6/" target="_blank"&gt;Failure&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="71"&gt;Tail&lt;/td&gt;&lt;td valign="top" width="151"&gt;Coda (repeated)&lt;/td&gt;&lt;td valign="top" width="127"&gt;Kramer&lt;/td&gt;&lt;td valign="top" width="173"&gt;&lt;a href="http://www.amazon.co.uk/Guilt-Trip-Kramer/dp/B00000DBUX/" target="_blank"&gt;The Guilt Trip&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-1863508685974770969?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/1863508685974770969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=1863508685974770969' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/1863508685974770969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/1863508685974770969'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/05/inadequacymp3.html' title='inadequacy.mp3'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-5042974924450440658</id><published>2008-05-01T00:55:00.000-07:00</published><updated>2008-04-30T16:55:34.403-07:00</updated><title type='text'>4:20 4/20</title><content type='html'>&lt;p&gt;On a recent trip to San Francisco I found myself strolling round Golden Gate Park with a friend at exactly this time, as part of the &lt;a href="http://www.earthday.net/" target="_blank"&gt;Earthday&lt;/a&gt; celebrations.&lt;/p&gt;&lt;p&gt;Or at least so I was led to believe.&lt;/p&gt;&lt;p&gt;Turns out that at this time, on this day, in this location a number of like minded individuals gather to meet and celebrate. It was quite a thing to behold. After being part of the celebrations for a while, even the drumming circle managed to sound cogent.&lt;/p&gt;&lt;p&gt;I took a short video of the event, on my phone, so I'm afraid the quality isn't great. Nevertheless, I thought I'd share, I'm sure you'll get the idea.&lt;/p&gt;&lt;div class="wlWriterSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:0495a891-9ab0-4556-88b5-df0522f23fee" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/sMyGMXPBd-o"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/sMyGMXPBd-o" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-5042974924450440658?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/5042974924450440658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=5042974924450440658' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/5042974924450440658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/5042974924450440658'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/04/420-420.html' title='4:20 4/20'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-9005617720214214607</id><published>2008-04-23T18:50:00.001-07:00</published><updated>2008-04-23T18:55:03.665-07:00</updated><title type='text'>RickRolling the Phone Network at Web 2.0 Expo</title><content type='html'>&lt;p&gt;I built a little demo for Web 2.0 that rick rolls the phone network. If you haven't come across rickrolling, the basic concept came about when people started getting sent links to the below Rick Astley video&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="wlWriterSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:fca79d46-0c85-4597-a361-8d1e7b910f2f" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/8vGNlbBFuk4"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/8vGNlbBFuk4" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Most annoying. Some of the implementations refused to let you close the browser window as well.&lt;/p&gt;&lt;p&gt;Well, I thought that for the Web 2.0 Expo I'd do that to the phone network, and try and get folk to rickroll each other. So in a midnight-through 3am coding session, I came up with a cool app.&lt;/p&gt;&lt;p&gt;If I haven't taken it down yet (that'll happen on Friday 25th April) you can try it. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Just send an SMS with the word "rick" to +447800000320&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;If it's still working you'll get called back - press a key, and then you'll get the dulcet tones of Rick Astley crooning at you across the phone network.&lt;/p&gt;&lt;p&gt;So, how did I build this?&lt;/p&gt;&lt;p&gt;Using, of course, the fabulous &lt;a href="http://web21c.bt.com/" target="_blank"&gt;Web21C services from BT&lt;/a&gt;, and CallFlow in particular.&lt;/p&gt;&lt;p&gt;I used a &lt;a href="http://youtubedownload.altervista.org/" target="_blank"&gt;YouTube downloader&lt;/a&gt; to pull the Video down, and extract an mp3 file from the flv file. Then used Sony Acid Pro 6 to edit it and convert it to a suitable format (open source products such as Audacity may be used!).&lt;/p&gt;&lt;p&gt;I uploaded to the CallFlow platform the resulting wav file, rick.wav, and another one, press.wav. They need to be there so that they can be played back to the poor victim over the phone line.&lt;/p&gt;&lt;p&gt;Then I got hold of an Inbound SMS (Mobile Originated) number from my colleagues; if you want to use this service you have to register, and order a number through the web site. But once you've got it, implementing the rest of the code is dead easy, and will run off your laptop!&lt;/p&gt;&lt;p&gt;Wanna see some of the code? Here's some of the highlights. Written in C#, as a console app; BT has SDKs for Python, PHP, and Java too.&lt;/p&gt;&lt;p&gt;1. Retrieve messages and clear them down from the BT servers&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color:#2b91af;"&gt;Collection&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Message&lt;/span&gt;&amp;gt; messages = smsIn.GetReceivedMessages();&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;Collection&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&amp;gt; mIds = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Collection&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&amp;gt;();&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;foreach &lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;Message &lt;/span&gt;m &lt;span style="color:blue;"&gt;in &lt;/span&gt;messages)&lt;br /&gt;{&lt;br /&gt;     RickRoll(m.MessageText, m.SenderUri);&lt;br /&gt;     mIds.Add(m.MessageId);&lt;br /&gt;}&lt;br /&gt;&lt;span style="color:blue;"&gt;if &lt;/span&gt;(mIds.Count &amp;gt; 0) smsIn.ClearReceivedMessages(mIds);&lt;/pre&gt;&lt;p&gt;2. The highlights of the RickRoll function, creating some XML for placing the call.&lt;/p&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color:green;"&gt;//create the callflow XML&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;StringBuilder &lt;/span&gt;sb = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;StringBuilder&lt;/span&gt;();&lt;br /&gt;sb.Append(&lt;span style="color:#a31515;"&gt;"&amp;lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&amp;gt;"&lt;/span&gt;);&lt;br /&gt;sb.Append(&lt;span style="color:#a31515;"&gt;"&amp;lt;callflow xmlns=\"http://sdk.bt.com/callflow/2007/04\"&amp;gt;"&lt;/span&gt;);&lt;br /&gt;sb.Append(&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;"&amp;lt;call id=\"start\" target=\"{0}\" next=\"check\" /&amp;gt;"&lt;/span&gt;, roll.Target));&lt;br /&gt;sb.Append(&lt;span style="color:#a31515;"&gt;"&amp;lt;prompt id=\"check\" audio=\"press.wav\" barge=\"true\" firstDigitTimeout=\"30\"&amp;gt;"&lt;/span&gt;);&lt;br /&gt;sb.Append(&lt;span style="color:#a31515;"&gt;"&amp;lt;input pattern=\"0\" next=\"prank\"/&amp;gt;"&lt;/span&gt;);&lt;br /&gt;sb.Append(&lt;span style="color:#a31515;"&gt;"&amp;lt;input pattern=\"1\" next=\"prank\"/&amp;gt;"&lt;/span&gt;);&lt;br /&gt;sb.Append(&lt;span style="color:#a31515;"&gt;"&amp;lt;input pattern=\"2\" next=\"prank\"/&amp;gt;"&lt;/span&gt;);&lt;br /&gt;sb.Append(&lt;span style="color:#a31515;"&gt;"&amp;lt;input pattern=\"3\" next=\"prank\"/&amp;gt;"&lt;/span&gt;);&lt;br /&gt;sb.Append(&lt;span style="color:#a31515;"&gt;"&amp;lt;input pattern=\"4\" next=\"prank\"/&amp;gt;"&lt;/span&gt;);&lt;br /&gt;sb.Append(&lt;span style="color:#a31515;"&gt;"&amp;lt;input pattern=\"5\" next=\"prank\"/&amp;gt;"&lt;/span&gt;);&lt;br /&gt;sb.Append(&lt;span style="color:#a31515;"&gt;"&amp;lt;input pattern=\"6\" next=\"prank\"/&amp;gt;"&lt;/span&gt;);&lt;br /&gt;sb.Append(&lt;span style="color:#a31515;"&gt;"&amp;lt;input pattern=\"7\" next=\"prank\"/&amp;gt;"&lt;/span&gt;);&lt;br /&gt;sb.Append(&lt;span style="color:#a31515;"&gt;"&amp;lt;input pattern=\"8\" next=\"prank\"/&amp;gt;"&lt;/span&gt;);&lt;br /&gt;sb.Append(&lt;span style="color:#a31515;"&gt;"&amp;lt;input pattern=\"0\" next=\"prank\"/&amp;gt;"&lt;/span&gt;);&lt;br /&gt;sb.Append(&lt;span style="color:#a31515;"&gt;"&amp;lt;input pattern=\"#\" next=\"prank\"/&amp;gt;"&lt;/span&gt;);&lt;br /&gt;sb.Append(&lt;span style="color:#a31515;"&gt;"&amp;lt;default next=\"unprank\"/&amp;gt;"&lt;/span&gt;);&lt;br /&gt;sb.Append(&lt;span style="color:#a31515;"&gt;"&amp;lt;/prompt&amp;gt;"&lt;/span&gt;);&lt;br /&gt;sb.Append(&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;"&amp;lt;announcement id=\"prank\" audio=\"{0}.wav\" /&amp;gt;"&lt;/span&gt;,roll.Prank));&lt;br /&gt;sb.Append(&lt;span style="color:#a31515;"&gt;"&amp;lt;hangup id=\"unprank\" /&amp;gt;"&lt;/span&gt;);&lt;br /&gt;sb.Append(&lt;span style="color:#a31515;"&gt;"&amp;lt;/callflow&amp;gt;"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;//Call BT's Callflow Service and place the call&lt;br /&gt;&lt;/span&gt;roll.CallFlowId= callFlow.StartCallFlow(sb.ToString());&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;There really isn't very much more to the code - a bit that monitors each callflow to check that the phone was answered - the script does a "Press 1 if you're not an answerphone" check&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The entire code is downloadable &lt;a href="http://64.22.75.56/rickroller.zip" target="_blank"&gt;here&lt;/a&gt; - you won't be able to run it straight of the bat, because of it's reliance on an inbound SMS number tied to my account, and certs referenced in a config file - get your own from BT - but it may be interesting to read.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-9005617720214214607?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/9005617720214214607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=9005617720214214607' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/9005617720214214607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/9005617720214214607'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/04/rickrolling-phone-network-at-web-20.html' title='RickRolling the Phone Network at Web 2.0 Expo'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-1146945798499252801</id><published>2008-04-21T15:13:00.001-07:00</published><updated>2008-04-21T15:13:17.250-07:00</updated><title type='text'>A Day out at Oracle</title><content type='html'>&lt;p&gt;I'm on a weeks tour in San Francisco and Silicon Valley as part of &lt;a href="http://webmission08.com/" target="_blank"&gt;WebMission 08&lt;/a&gt;. As part of this I'm spending today at the Oracle Campus.&lt;/p&gt;  &lt;p&gt;Many interesting speakers today, and this post will hopefully reflect what I hear. Quotes are NOT verbatim, but rather show the intent of the speakers words. Expect a sprawling post.&lt;/p&gt;  &lt;p&gt;First up is Ken Jacobs from Oracle, VP Product Strategy, been part of Oracle for 27 years, when there were only 18 people in the company, and has seen the company grow to 80,000! In 1977 it was a consulting company, and then, to become their own bosses, they decided to build a relationship database. The Oracle DB was originally based on a product developed by/for the CIA - I didn't know that! At the time a SQL based relational database was a huge innovation. They moved the code from assembler to C - for Compatability, Portability, Connectability. Then in the late '80s started building client/server applications; HR, ledger etc.&lt;/p&gt;  &lt;p&gt;&amp;quot;Timing is important - don't release what the market isn't ready for.&amp;quot;&lt;/p&gt;  &lt;p&gt;&amp;quot;Oracle's acquisition strategy is to keep up, and lead as the market consolidates.&amp;quot;&lt;/p&gt;  &lt;p&gt;Ken is now leading an Open Source database initiative inside Oracle. Gosh! He led the &lt;a href="http://www.oracle.com/corporate/press/2005_oct/inno.html" target="_blank"&gt;purchase of InnoDB,&lt;/a&gt; and it is based on that. The technology is included in MySQL among many others. They also own &lt;a href="http://en.wikipedia.org/wiki/Sleepycat_Software" target="_blank"&gt;SleepyCat/BerkeleyDB&lt;/a&gt; for embedded databases, and are members of the Eclipse Foundation, and recently donated IP to the Apache Foundation.&lt;/p&gt;  &lt;p&gt;Next up is Paul Pedrazzi, who came into Oracle from Peoplesoft, and now leads on Web 2.0 innovation in the company, in a four/five man group called the AppsLab. He talks about Enterprise 2.0. First thing he built was an &amp;quot;Ideas&amp;quot; site, where anyone can contribute and tag ideas. Tags can be created by the users and are not prescribed - rather guided with autocomplete to avoid duplication. Tags then can be monitored with RSS feeds. The Ideas site is now folded into Oracle Connect, their internal social network site. One of the interesting features here is Kudos - where folk can praise an individual, useful for Performance Mgmt. It is tied into their enterprise system, so the activity feed shows when folk change jobs, or move offices etc. He's building in file &amp;amp; bookmarking tagging and recommendation.&lt;/p&gt;  &lt;p&gt;Joined by Vince Casarez, VP product strategy in &lt;a href="http://www.oracle.com/technology/products/webcenter/index.html" target="_blank"&gt;Web Center&lt;/a&gt;. Vince takes experimental and research projects and productises. He's building Enteprise 2.0 Web 2.0 apps. Looks a bit like every other portlet type app on the planet, with enterprise hooks; not surprising as it's based on Java Server Faces. The CSS looks like it's lifted from Sharepoint!&lt;/p&gt;  &lt;p&gt;Overall on the Oracle demos, interesting that they show things that are at least in part in direct competition to some of the &lt;a href="http://webmission08.com/whoisgoing.html" target="_blank"&gt;start up companies here as part of WebMission&lt;/a&gt;, rather than showing how Oracle products are relevant to them and can help them grow. Maybe they just wanted to show that they are Web 2.0 Cool. But I don't grok how it really matters to this audience, today.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Next - Mike Butcher from TechCrunch UK introduced a panel discussion with Mike Murphy, Sales from Facebook, Liz O'Donnell from LinkedIn and Mike Culver from Amazon Web Services.&lt;/p&gt;  &lt;p&gt;Mike Murphy. &amp;quot;Sticking banners all over the site is &lt;em&gt;not&lt;/em&gt; the answer. Also avoid disguising advertising as content. Ask the users what they want&amp;quot;. &amp;quot;We care passionately about how application developers are incentivised&amp;quot;. &amp;quot;Advertising on canvas pages is a hodge podge at the moment - consistency is being worked on&amp;quot;. &amp;quot;There will never be a toll booth in front of developers&amp;quot;. &amp;quot;Keep the users, marketers and application developers first, and we'll (facebook) be alright&amp;quot;. For developers - &amp;quot;Deliver utility, make it worth the profile real estate, throwing sheep doesn't cut it. Most important; make it easy to share your app&amp;quot;. &amp;quot;Mark Zuckerburg is a visionary, and has no idea about Ad Sales. Let's me do my job&amp;quot;&lt;/p&gt;  &lt;p&gt;Mike Culver. &amp;quot;The world is about ideas - this business is about ideas&amp;quot;. Mentioned Animoto and growth from 50 instances to 3500 instances in three days. There are now 2 folk - not developers - from AWS working out of London, to cover Europe. &amp;quot;Jeff Bezos focus is purely on the customer; he'll do whatever he can to cut costs. My desk is a door turned on it's side with legs screwed on&amp;quot; Wow.&lt;/p&gt;  &lt;p&gt;Liz O'Donnell.&amp;quot;You spend the same time building a small business as a large business&amp;quot; Not sure I agree with that; in tech terms maybe, but marketing? &amp;quot;If you're the first in a social, viral app, you have to be an early adopter, or there's no reason to be there&amp;quot;. &amp;quot;The criteria for local offices - avoid focusing on monetisation too soon, but when you do, sales must be done locally&amp;quot;. &amp;quot;We're part of OpenSocial, but will be controlling the apps available in LinkedIn&amp;quot;. &amp;quot;Early on as the company grew Reid Hoffman found a CEO - he didn't want to manage&amp;quot;&lt;/p&gt;  &lt;p&gt;Mike Butcher - should the 20 startups establish a Valley presence? All three said &amp;quot;Yes&amp;quot;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Next up - Vishal Bhagwati from Oracle talking about how they do Mergers &amp;amp; Acquisitions. States that for a start up IPO is not really an option at the moment with the state of the economy.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Provide complete solutions&lt;/li&gt;    &lt;li&gt;Move beyond ERP to complete business solutions&lt;/li&gt;    &lt;li&gt;Remain extensible, increase security&lt;/li&gt;    &lt;li&gt;Have a common technology platform based on open standards&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Oracle has been the largest and biggest software acquirer for 5 years. There needs to be a strategic fit, a sales fit (customers in common), an integration fit (must integrate in around 6 months, mostly around back office rather than product) and a financial fit.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I'll post more about Webmission in due course.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-1146945798499252801?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/1146945798499252801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=1146945798499252801' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/1146945798499252801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/1146945798499252801'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/04/day-out-at-oracle.html' title='A Day out at Oracle'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-4745457030431152338</id><published>2008-04-11T09:17:00.001-07:00</published><updated>2008-04-11T09:17:34.269-07:00</updated><title type='text'>Small Businesses and IT</title><content type='html'>&lt;p&gt;One thing that I am 100% convinced of, is that over the course of the second half of 2008 a new class of application will begin to emerge in anger. Rather than being based on an underlying Single Machine Operating System, it will be composed of &amp;#8220;cloud&amp;#8221; services.&lt;/p&gt;  &lt;p&gt;So where &lt;a href="http://aws.amazon.com" target="_blank"&gt;EC2 and S3&lt;/a&gt; provide compute units and storage in the cloud, the next stage is to compose higher level functionality into cogent solutions, and no longer worry, from a development platform, what Single Machine Operating System lives underneath. The platforms to support these are currently divergent &amp;#8211; &lt;a href="http://www.salesforce.com/platform/" target="_blank"&gt;Force.com&lt;/a&gt; , &lt;a href="http://code.google.com/appengine/" target="_blank"&gt;Google AppEngine&lt;/a&gt;, the platform that MSFT are &lt;a href="http://www.readwriteweb.com/archives/red_dog_microsofts_cloud_computing_platform.php" target="_blank"&gt;clearly about to launch&lt;/a&gt; &amp;#8211; these allow you to create generic functionality on fully hosted platforms, but from a 50,000 foot view they provide automatically scaled out, redundant platforms, generally with storage, data, and UI components.&lt;/p&gt;  &lt;p&gt;Add a bit of &lt;a href="http://gears.google.com/" target="_blank"&gt;Google Gears,&lt;/a&gt; or &lt;a href="http://dev.live.com/feedsync/" target="_blank"&gt;Microsoft FeedSync&lt;/a&gt;, two different techniques for occasionally connected apps (and, the piece often forgotten, occasionally unavailable Platforms-In-The-Cloud!)&lt;/p&gt;  &lt;p&gt;Mix in a bit of Hosted Exchange, which you can buy from &lt;a href="http://www.google.co.uk/search?hl=en&amp;amp;q=hosted+exchange&amp;amp;btnG=Google+Search&amp;amp;meta=" target="_blank"&gt;all over the place&lt;/a&gt;, or Google Calendar.&lt;/p&gt;  &lt;p&gt;Throw in some &lt;a href="http://oauth.net/" target="_blank"&gt;oAuth&lt;/a&gt; and &lt;a href="http://openid.net/" target="_blank"&gt;OpenID&lt;/a&gt; for decentralised delegation and authentication.&lt;/p&gt;  &lt;p&gt;Add some hosted IVR or SMS from solutions like that from my &lt;a href="http://web21c.bt.com" target="_blank"&gt;employer&lt;/a&gt;, and you too can have CTI like the big players.&lt;/p&gt;  &lt;p&gt;And it looks like the applications that SMBs will buy in 2008/2009 will look very different to the ones they bought in 2007.&lt;/p&gt;  &lt;p&gt;This leads me to the conclusion that both sales and reward, and software development processes for small ISVs will start to look very different from today's models. Instead of on-premise based software, or even ISV hosted solutions, generic, composable mashups will be assembled from cloud based primitives through an &lt;a href="http://www.odesk.com" target="_blank"&gt;oDesk&lt;/a&gt; type model (no more staffing issues!), and then &amp;#8220;mashups of mashups&amp;#8221; will probably get sold through a network of affiliates who do highly localised (both geographically and vertically) marketing and the small amount of custom integration work &amp;#8211; which will be largely graphical &amp;#8211; required for an end customer. Reward models could be based on subscription payments from end customers, and revenue share to the affiliate channels&lt;/p&gt;  &lt;p&gt;The problem is working out which generic functionality, and which SMB verticals to address first!&lt;/p&gt;  &lt;p&gt;Are you an SMB? Would you like me to come and build you some software? What's the itch you have that needs scratching? Which of your staff could be replaced by a clever machine? How can you empower your customers to interact with your business in ways that benefit both you and them?&lt;/p&gt;  &lt;p&gt;Trust me, small business software is easier, quicker, and less risky then it used to be. If you want to know more, I can be reached, in the first instance through this blog.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-4745457030431152338?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/4745457030431152338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=4745457030431152338' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/4745457030431152338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/4745457030431152338'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/04/small-businesses-and-it.html' title='Small Businesses and IT'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-2330219382239254564</id><published>2008-04-05T08:03:00.001-07:00</published><updated>2008-04-05T08:03:51.242-07:00</updated><title type='text'>Nicest Airport Experience Ever</title><content type='html'>&lt;p&gt;I'm in Israel for Microsoft TechEd where I'm speaking with a friend of mine, Shy Cohen.&lt;/p&gt;  &lt;p&gt;Microsoft have really done their best to make me welcome here. As I stepped out of the door of the plane at Ben Guiron airport in Tel Aviv, there was a friendly chap waiting for me (first time I've ever been met by a stranger with my name on a piece of paper), who escorted me past all the queues for immigration, wheeled my luggage through customs and got me across to the domestic terminal.&lt;/p&gt;  &lt;p&gt;Now OK, I've got a 4 hour wait for my next flight south to Eliat, which is dull, but, joy of joys, there is FREE Wi-fi in the airport terminal. And I think I'm the only person using it, as the terminal is largely empty; today is the Sabbath and it seems this is taken pretty seriously around here.&lt;/p&gt;  &lt;p&gt;Next to find somewhere to plug the power in - this may be a little trickier... I hope I brought a suitable power adapter.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-2330219382239254564?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/2330219382239254564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=2330219382239254564' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/2330219382239254564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/2330219382239254564'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/04/nicest-airport-experience-ever.html' title='Nicest Airport Experience Ever'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-1856866523183624935</id><published>2008-03-17T12:56:00.001-07:00</published><updated>2008-03-17T05:58:20.509-07:00</updated><title type='text'>just how long is that?</title><content type='html'>&lt;p&gt;File this one under ridiculous packaging and promises.&lt;/p&gt;&lt;p&gt;I just went into my local Woolworths to buy a few blank DVDs. Fair play to them, they sell packs of 4 for just 99p (that's about $2 to you Amereekans). I didn't want many, and at 25p each that's about the same price as a cigarette.  &lt;/p&gt;&lt;p&gt;Which makes them nicely disposable in my book. Not the best for the environment, but they get scratched and ruined so quickly.&lt;/p&gt;&lt;p&gt;Except, it appears, for these ones. These value, WorthIt!, twenty five pence each DVDs comes complete with a lifetime guarantee. HOWEVER - nowhere on the packaging does it say what this lifetime guarantee really is. Here's some options for me.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;As long as I live.&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;As long as the person I give the disk to lives.&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;As long as the DVD+R format exists (or at least, is relevant)&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;Until each DVD no longer works, and has reached End Of Life.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;a href="http://lh4.google.com/timsan1t1/R95qfHO17UI/AAAAAAAAAG4/KbmFkLXyCjc/howlong%5B2%5D?imgmax=800"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="225" alt="howlong" src="http://lh6.google.com/timsan1t1/R95qfnO17VI/AAAAAAAAAHA/P_aW8VmPZeg/howlong_thumb?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;I suspect that the truth is the last of those options - in other words - each of these DVDs is good for as long as it's good for. Not really much of a promise, is it?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-1856866523183624935?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/1856866523183624935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=1856866523183624935' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/1856866523183624935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/1856866523183624935'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/03/just-how-long-is-that.html' title='just how long is that?'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-2430776110289993964</id><published>2008-03-16T22:41:00.000-07:00</published><updated>2008-03-16T15:46:43.570-07:00</updated><title type='text'>showtime.mp3</title><content type='html'>&lt;p&gt; &lt;/p&gt;&lt;p&gt;Listen &lt;a href="http://64.22.75.56/mixes/showtime.mp3"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Yesterday I went to my daughters end of term performance at her Saturday afternoon drama club. She had a solo singing spot, and performed great. I'm a proud father.&lt;/p&gt;&lt;p&gt;They changed the format this time; normally they invite the parents to come an hour before the end of the three hour session for the show. This time parents and other associated family arrived at the very start, and, after the kids had done all their performing, classes started - children and parents. At the end, we performed in front of each other. &lt;/p&gt;&lt;p&gt;I got to play Billy Elliot! As I'm about 12 or so years over being embarrassed about performing in front of others, even if I make a complete tit of myself, I had such fun! We did the scene where Billy stays after the boxing class, and the girls come in for ballet. He joins in and dances. You have no idea how much I enjoyed saying &lt;em&gt;"I feel like a complete sissy"&lt;/em&gt; in a totally camped up faux northern accent. I'd jump at the chance to do it again. Wish my life was stable enough for amateur dramatics, but I'm just away too much for that.&lt;/p&gt;&lt;p&gt;I got home and felt happily theatrical. Which led to &lt;a href="http://64.22.75.56/mixes/showtime.mp3" target="_blank"&gt;this mix&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Let me share a guilty secret with you. I love musicals. I love musical theatre. I grew up on a steady diet of Rodgers and Hammerstein, Gilbert and Sullivan, Andrew Lloyd Webber etc, which was pretty much the closest I got to music, outside of church and school, until about 1981, when I was about 9 or 10. My dad got given a a portable AM/FM radio cassette recorder when he changed jobs. Joy Of Joys! I promptly discovered the top 40. Not long after, &lt;a href="http://www.bbc.co.uk/radio1/johnpeel/" target="_blank"&gt;John Peel.&lt;/a&gt; The rest is emerging history.&lt;br /&gt;I guess my parents weren't really that into the music of the seventies, and certainly didn't have the money to buy much music, nor the inclination to borrow-and-tape, even on to the Philips reel to reel thing we had. (I loved that machine, it was the one thing in the house I would've saved in a fire)&lt;/p&gt;&lt;p&gt;7th June 1977, I remember being nearly 4 years old, at the Queens Silver Jubilee. There was a pig on a spit getting roasted. Some country dancing, with a caller and everything. I got my photo on the cover of the local paper, wrecking the hay bales that had been put out in place of seats; I guess someone thought I was cute (hmm). Before we went to this do, we watched The Sound of Music on the telly. This must have been in the brief interval after the first TV I remember turned up in the house and I pushed it over and broke it. Made me &lt;em&gt;very&lt;/em&gt; unpopular.&lt;/p&gt;&lt;p&gt;I'd hardly seen any TV at my tender age, and I was amazed by this movie. I couldn't believe it. I probably couldn't understand it very well, all the political drama centred around the Nazi invasion of Austria. But the songs! The dancing! The lonely goatherds! It remains to this day one of my favourite movies, and anyone who thinks they're too hip or cool to watch it should just get over themselves. It's a fantastic movie, right from the opening scene - such great cinematography - which is filmed in one take from a helicopter flying over the Alps, and zooming into Julie Andrews twirling around on the greenest grass you ever did see and singing the title track. And the moment when The Captain gets back with the Baroness Schraeder from Vienna, has a massive fight with Maria, then hears the children singing, and (thanks to a little soft focus) you see his heart first breaking and then righting itself as he realises what a crap father he's been since the death of his wife. Oh, and that he loves the children's governess of course. My eyes water every time. Sorry if this factoid makes you grimace, I cry at movies sometimes, okay?&lt;/p&gt;&lt;p&gt;This was my introduction to the world of musicals. I haven't looked back. I watch them on the TV, occasionally at the theatre. I listen to the music, I play the piano and sing. I share them with my little girl. Good family entertainment - even the potential atrocity that is High School Musical is partly saved by a good show tune or two - I just about see past cheesy, squeaky clean American teenagers with a song or two in the mix&lt;/p&gt;&lt;p&gt;So this mix covers a bunch of musicals. I've added to the mix some other music from the movies and TV that I like too. You'll know a whole bunch of these tunes, they're stuck in our collective musical memory. Don't feel shy about singing along.&lt;/p&gt;&lt;p&gt;You can grab it from &lt;a href="http://64.22.75.56/mixes/showtime.mp3" target="_blank"&gt;here&lt;/a&gt; (90 Mb). Enjoy the guilty pleasure.&lt;/p&gt;&lt;table cellspacing="0" cellpadding="1" width="539" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;&lt;strong&gt;Time&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="162"&gt;&lt;strong&gt;Track&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="168"&gt;&lt;strong&gt;Writer&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;strong&gt;Show&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;00:00&lt;/td&gt;&lt;td valign="top" width="162"&gt;Overture&lt;/td&gt;&lt;td valign="top" width="168"&gt;Rodgers and Hammerstein&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0052225/" target="_blank"&gt;South Pacific&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;03:00&lt;/td&gt;&lt;td valign="top" width="162"&gt;Numa no Soko no le (The House at Swamp Bottom)&lt;/td&gt;&lt;td valign="top" width="168"&gt;Joe Hisaishi&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0245429/" target="_blank"&gt;Spirited Away&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;04:24&lt;/td&gt;&lt;td valign="top" width="162"&gt;Part of Your World&lt;/td&gt;&lt;td valign="top" width="168"&gt;Alan Menken and Howard Ashman&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0097757/" target="_blank"&gt;The Little Mermaid&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;07:35&lt;/td&gt;&lt;td valign="top" width="162"&gt;Barbarella&lt;/td&gt;&lt;td valign="top" width="168"&gt;Bob Crewe &amp;amp; Charles Fox&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0062711/" target="_blank"&gt;Barbarella&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;10:20&lt;/td&gt;&lt;td valign="top" width="162"&gt;Enjoy It&lt;/td&gt;&lt;td valign="top" width="168"&gt;The Sherman Brothers&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0056095/" target="_blank"&gt;In Search of the Castaways&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;12:27&lt;/td&gt;&lt;td valign="top" width="162"&gt;With a Little Bit of Luck&lt;/td&gt;&lt;td valign="top" width="168"&gt;Frederick Lowe and Alan Jay Lerner&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0058385/" target="_blank"&gt;My Fair Lady&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;16:16&lt;/td&gt;&lt;td valign="top" width="162"&gt;Cry Baby&lt;/td&gt;&lt;td valign="top" width="168"&gt;Morgan C. Robinson and Lawrence Robinson&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0099329/" target="_blank"&gt;Cry Baby&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;19:24&lt;/td&gt;&lt;td valign="top" width="162"&gt;Pure Imagination&lt;/td&gt;&lt;td valign="top" width="168"&gt;Leslie Bricusse and Anthony Newley&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0067992/" target="_blank"&gt;Willy Wonka &amp;amp; the Chocolate Factory&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;23:24&lt;/td&gt;&lt;td valign="top" width="162"&gt;Who Will Buy?&lt;/td&gt;&lt;td valign="top" width="168"&gt;Lionel Bart&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0063385/" target="_blank"&gt;Oliver!&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;30:26&lt;/td&gt;&lt;td valign="top" width="162"&gt;White Horses&lt;/td&gt;&lt;td valign="top" width="168"&gt;Michael carr&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0315006/" target="_blank"&gt;White Horses&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;32:41&lt;/td&gt;&lt;td valign="top" width="162"&gt;The Fairy Godmother Song&lt;/td&gt;&lt;td valign="top" width="168"&gt;&lt;p&gt;Adamson, Barton, Dohrn, Gregson-Williams, Smith &amp;amp; Warner&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0298148/" target="_blank"&gt;Shrek 2&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;34:24&lt;/td&gt;&lt;td valign="top" width="162"&gt;Bad Guys&lt;/td&gt;&lt;td valign="top" width="168"&gt;Paul Williams&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0074256/" target="_blank"&gt;Bugsy Malone&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;36:28&lt;/td&gt;&lt;td valign="top" width="162"&gt;Everybody Wants to be a Cat&lt;/td&gt;&lt;td valign="top" width="168"&gt;Floyd Huddleston and Al Rinker&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0065421/" target="_blank"&gt;The Aristocats&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;38:27&lt;/td&gt;&lt;td valign="top" width="162"&gt;Florence's Sad Song (covered by Stuart Staples and Dave Boucher)&lt;/td&gt;&lt;td valign="top" width="168"&gt;Joss Baselli and Eric Thompson&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0308184/" target="_blank"&gt;Dougal and the Blue Cat&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;41:03&lt;/td&gt;&lt;td valign="top" width="162"&gt;It's Not the End of the World (If He's Married)&lt;/td&gt;&lt;td valign="top" width="168"&gt;Andrew Lloyd-Webber and Don Black&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0434388/" target="_blank"&gt;Tell Me On A Sunday&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;43:14&lt;/td&gt;&lt;td valign="top" width="162"&gt;There are Worse Things I Could Do&lt;/td&gt;&lt;td valign="top" width="168"&gt;Jim Jacobs and Warren Casey&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0077631/" target="_blank"&gt;Grease&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;45:27&lt;/td&gt;&lt;td valign="top" width="162"&gt;Theme Tune&lt;/td&gt;&lt;td valign="top" width="168"&gt;Laurie Johnson&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0054518/" target="_blank"&gt;The Avengers&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;47:43&lt;/td&gt;&lt;td valign="top" width="162"&gt;Good Night and Thank You&lt;/td&gt;&lt;td valign="top" width="168"&gt;Andrew Lloyd-Webber and Tim Rice&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0116250/" target="_blank"&gt;Evita&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;51:59&lt;/td&gt;&lt;td valign="top" width="162"&gt;I Have Confidence&lt;/td&gt;&lt;td valign="top" width="168"&gt;Richard Rodgers (no Hammerstein on this one!)&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0059742/" target="_blank"&gt;The Sound of Music&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;55:19&lt;/td&gt;&lt;td valign="top" width="162"&gt;Are We Dancing?&lt;/td&gt;&lt;td valign="top" width="168"&gt;The Sherman Brothers&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0061749/" target="_blank"&gt;The Happiest Millionaire&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;58:41&lt;/td&gt;&lt;td valign="top" width="162"&gt;Hushabye Mountain&lt;/td&gt;&lt;td valign="top" width="168"&gt;The Sherman Brothers&lt;/td&gt;&lt;td valign="top" width="141"&gt;C&lt;a href="http://imdb.com/title/tt0062803/" target="_blank"&gt;hitty Chitty Bang Bang&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;60:32&lt;/td&gt;&lt;td valign="top" width="162"&gt;La Valse d'Amelie (version piano)&lt;/td&gt;&lt;td valign="top" width="168"&gt;Yann Tiersen&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0211915/" target="_blank"&gt;Le Fabuleux destin d'Amélie Poulain&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;63:05&lt;/td&gt;&lt;td valign="top" width="162"&gt;All the Animals come out at Night&lt;/td&gt;&lt;td valign="top" width="168"&gt;Bernard Herrman&lt;/td&gt;&lt;td valign="top" width="141"&gt;&lt;a href="http://imdb.com/title/tt0075314/" target="_blank"&gt;Taxi Driver&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-2430776110289993964?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/2430776110289993964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=2430776110289993964' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/2430776110289993964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/2430776110289993964'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/03/showtimemp3.html' title='showtime.mp3'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-6743103338095938036</id><published>2008-03-15T01:43:00.001-07:00</published><updated>2008-03-14T18:45:21.180-07:00</updated><title type='text'>please sir, can i write some code?</title><content type='html'>&lt;p&gt;It's really been one of those weeks.&lt;/p&gt;&lt;p&gt;I am a developer by heart. Let's get that straight. I'm not a world class software engineer, I'm too lazy, and my attention span too short, but ultimately I like to get my hands dirty with code and pretend I'm smart. Sometimes people even politely suspend their disbelief.&lt;/p&gt;&lt;p&gt;So what it is it I do? Let's look at a few of the activities for the past week. &lt;/p&gt;&lt;p&gt;I've been at home (which accounts for a mere 50% of my life), and that does colour the week that I've had. I got to spend more time with my daughter, which is what it's all about really, isn't it.&lt;/p&gt;&lt;p&gt;I did some technical due diligence and analysis for a bunch of stuff around partners, competitors etc. This is quite interesting. I get to reverse engineer technical architectures and stuff. Sometimes I get to see the guts closely, sometimes I just search for blogs from the target companies employees. Often a lot of clues to be found there.&lt;br /&gt;Some vague, back-of-a-napkin design work required sometimes with this too. I like that very much.&lt;/p&gt;&lt;p&gt;I tried to get my opinion across with respect to how we identify and "upskill" some of the developer types in the company. Finding myself largely ignored. Getting increasingly frustrated, and showing it, emails becoming much more terse by today. Not fun. Not part of the day job, officially, but I do it because someone has to try, and I got suckered into it. I have some collaborators, who I think are equally frustrated. Rinse and Repeat. Some stains don't want to come out.&lt;/p&gt;&lt;p&gt;Some unwanted "out of the blue" work, trying to justify a renewal for a bunch of developer tools from a very large vendor. There is a fair amount of money involved if the numbers are right. There is a fair amount of money involved if the numbers are wrong. This is hard work, and frustrating too. It's not fun either, nor is it part of what I'm paid - or bonused -to do.&lt;/p&gt;&lt;p&gt;Writing, and reviewing the written word. Some PR, some academic papers, some wiki material. Lots of email of course. This part of life I quite like. Mostly this is the day job. Plus, words are fun. Words are powerful. When I write, people don't realise I am a scruffy &lt;a href="http://www.opendemocracy.net/arts/article_1728.jsp" target="_blank"&gt;zippy&lt;/a&gt; with (ahem) fairly eclectic taste in music. (Or a blog named after a saying attributed to the &lt;a href="http://en.wikipedia.org/wiki/Hassan_I_Sabbah" target="_blank"&gt;founder&lt;/a&gt; of the &lt;a href="http://en.wikipedia.org/wiki/Hashshashin" target="_blank"&gt;Hashashin&lt;/a&gt;).&lt;br /&gt;What was it they say about the pen and the sword? Most of you probably haven't read the whole &lt;a href="http://en.wikipedia.org/wiki/The_pen_is_mightier_than_the_sword" target="_blank"&gt;quote&lt;/a&gt;, so here it is&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;True, This! —&lt;br /&gt;Beneath the rule of men entirely great,&lt;br /&gt;&lt;strong&gt;The pen is mightier than the sword&lt;/strong&gt;. Behold&lt;br /&gt;The arch-enchanters wand! — itself a nothing! —&lt;br /&gt;But taking sorcery from the master-hand&lt;br /&gt;To paralyse the Cæsars, and to strike&lt;br /&gt;The loud earth breathless! — Take away the sword —&lt;br /&gt;States can be saved without it!&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Writing rocks. It shocks me how often otherwise smart people fail with basic spelling and grammar, but I've learnt to see past that in them.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Anyway, I've had one of those weeks, where I've jumped from pillar to post, never had the chance to concentrate on anything deeply for long&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;I did manage to write &lt;em&gt;some&lt;/em&gt; code this week - well, I've written it, just need to tidy it a bit, and deploy it. Hopefully you see the results on here next week. The code needs to be cleaned and refactored and commented for that. As you can imagine, &lt;a href="http://web21c.bt.com/services/call_flow" target="_blank"&gt;it involves the phone&lt;/a&gt;. You'll see. It's not that clever, but the code base is not that big either.&lt;/p&gt;&lt;p&gt;I also worked out the code I need to write for an upcoming presentation I'm doing at &lt;a href="http://www.microsoft.com/israel/teched2008/index.aspx" target="_blank"&gt;TechEd Israel&lt;/a&gt; (site in Hebrew). It's gonna be fun.&lt;/p&gt;&lt;p&gt;I'd like to code more often. Please sir, can I write some code?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-6743103338095938036?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/6743103338095938036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=6743103338095938036' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/6743103338095938036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/6743103338095938036'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/03/please-sir-can-i-write-some-code.html' title='please sir, can i write some code?'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-3184326519796434050</id><published>2008-03-15T01:43:00.000-07:00</published><updated>2008-03-14T18:50:07.922-07:00</updated><title type='text'>broken windows</title><content type='html'>&lt;p&gt;Got caught over the weekend with a broken Vista installation. The Cyclic Redundancy check on my hard drive seemed to fail (boot stuck at crcdisk.sys). &lt;/p&gt;&lt;p&gt;Attempted to boot into to safe mode, no better. Sticks at the same place.&lt;/p&gt;&lt;p&gt;Booted with a Vista Installation disk, and did the Shift+F10 trick to fire up a command prompt at the "choose your drive" screen. Ran chkdsk, with all repair options switched on, still no bootee. I can read the files off the disk from the command window, but Vista doesn't like the drive really.&lt;/p&gt;&lt;p&gt;Booted from the Vista install disk again, Shift+F10, attempted to do a System Restore. No luck.&lt;/p&gt;&lt;p&gt;Did the same again, Booted from a Knoppix Live CD, ran ntfsfix. More errors discovered on the disk, but still no joy. &lt;/p&gt;&lt;p&gt;Thanks so much for protecting&lt;/p&gt;&lt;p&gt;I will never - repeat never - spend more than 90 minutes attempting to fix broken Windows. it's faster to rebuild from the tin. Fortunately, I expect Windows to break (normally it's me wot breaks it), every so often so I have reasonably good data backup strategies, starting with separate partitions on a hard drive for "temporary things" like operating systems and "things to keep", like all the stuff in my &lt;a href="http://www.truecrypt.org/" target="_blank"&gt;TrueCrypt files&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I did a full format, and zero filled the partition a couple of times at the same time. I have no idea what detritus may be lurking.&lt;/p&gt;&lt;p&gt;Didn't have a slipstreamed Vista SP1 disk handy. So I'll be rebuilding again soon, I keep promising I'll make myself a disk image for rapid reinstalling. You know, one file with Vista SP1, all the drivers for my machine, Office 2007, user account control turned off and various other tweaks that make it actually an O/S that I like to use (go on, flame me), and one that will work with my companies various security tools too.&lt;/p&gt;&lt;p&gt;Anyone else feels like doing a similar thing, making your own custom Vista installation is pretty easy. Start from instructions &lt;a href="http://www.svrops.com/svrops/articles/sysprepvista.htm" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;So I think I end up doing another build this weekend. But at least this will get me a clean machine..&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-3184326519796434050?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/3184326519796434050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=3184326519796434050' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/3184326519796434050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/3184326519796434050'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/03/broken-windows.html' title='broken windows'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-20183423373715441</id><published>2008-03-08T03:35:00.000-08:00</published><updated>2008-03-30T03:33:50.970-07:00</updated><title type='text'>girls_that_glitch.mp3</title><content type='html'>&lt;p&gt;It's been a few weeks since I last provided my few dear readers with some music to bemuse and delight.And I hope &lt;a href="http://64.22.75.56/mixes/girls_that_glitch.mp3" target="_blank"&gt;this new offering&lt;/a&gt; won't disappoint. &lt;/p&gt;&lt;p&gt;Girls that Glitch. &lt;/p&gt;&lt;p&gt;Glitch Music, for those who haven't come across it, is a genre all it's own. Here's what &lt;a href="http://en.wikipedia.org/wiki/Glitch_(music)" target="_blank"&gt;wikipedia&lt;/a&gt; has to say on the matter: &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;"The origins of glitch music are derived from the failure of digital technology. The effects of failure in technology, such as bugs, crashes, system errors, hardware noise, skipping and audio distortion, can be captured on computers and provide the basic building blocks of Glitch music"&lt;/em&gt; &lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;I like the definition. Suits a good amount of this music, but I'm sure a glitch purist, should any exist, would say I'm stretching the genre with this selection. Fair enough, some tracks have real drums. I never really stick with one thing long anyway, I like to twist and shake, and maybe surprise a little once in a while. My favourite time to play music to people is after a party, when everyone's knackered, maybe too wasted one way or another to get a conversation together, and happy to be taken to strange and unexpected musical places.&lt;/p&gt;&lt;p&gt;I've included female voices on every single track. I reckon that glitch music is something which it's obvious for geeks to make, male geeks at that. With this selection I try to show that when you add a girl's voice to glitchy music, it can provide the opportunity to create tunes that are fragile, delicate, and feel like they are just on the verge of breaking. &lt;/p&gt;&lt;p&gt;I think that's what you get here. Cracked, digital rhythms, combined with melancholy melodies, and strange haunting electronic noises. All brought afloat with different touches of femininity. And the occasional wander to slightly safer pastures.&lt;/p&gt;&lt;p&gt;I hope you enjoy it. Grab it from &lt;a href="http://64.22.75.56/mixes/girls_that_glitch.mp3" target="_blank"&gt;here&lt;/a&gt; (106 Mb mp3) &lt;/p&gt;&lt;p&gt;Let me know what you think, so I can completely ignore your feedback when thinking of what to do next&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="http://lh5.google.com/timsan1t1/R9IJzXO17SI/AAAAAAAAAGQ/S1L2ZvpVkAQ/image%5B2%5D?imgmax=800"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="207" alt="image" src="http://lh4.google.com/timsan1t1/R9IJ1HO17TI/AAAAAAAAAGY/wHzAwjQCEiA/image_thumb?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;/blockquote&gt;&lt;table cellspacing="0" cellpadding="2" width="579" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="40"&gt;&lt;strong&gt;Start&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="125"&gt;&lt;strong&gt;Artist&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="125"&gt;&lt;strong&gt;Track&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;strong&gt;Album&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="58"&gt;00:00&lt;/td&gt;&lt;td valign="top" width="149"&gt;Susanna and the Magical Orchestra -&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" width="150"&gt;Hello &lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Lights-Buoys-Susanna-Magical-Orchestra/dp/B000294U78/" target="_blank"&gt;List of Lights and Buoys&lt;/a&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="60"&gt;03:51&lt;/td&gt;&lt;td valign="top" width="148"&gt;Psapp&lt;/td&gt;&lt;td valign="top" width="150"&gt;Hi&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Only-Thing-I-Ever-Wanted/dp/B000ENV3YU/" target="_blank"&gt;The Only Thing I Ever Wanted&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="61"&gt;07:37&lt;/td&gt;&lt;td valign="top" width="147"&gt;Brisa Roché&lt;/td&gt;&lt;td valign="top" width="150"&gt;At The Shore&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Chase-Brisa-Roche/dp/B000B9G6OY/" target="_blank"&gt;The Chase&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="63"&gt;10:42&lt;/td&gt;&lt;td valign="top" width="125"&gt;Piano Magic&lt;/td&gt;&lt;td valign="top" width="150"&gt;Wrong French&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Popular-Mechanics-Piano-Magic/dp/B00008GESD/" target="_blank"&gt;Popular Mechanics&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;16:01&lt;/td&gt;&lt;td valign="top" width="125"&gt;Justine Electra&lt;/td&gt;&lt;td valign="top" width="150"&gt;President&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Soft-Rock-Justine-Electra/dp/B000FJH784/" target="_blank"&gt;Soft Rock&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;21:01&lt;/td&gt;&lt;td valign="top" width="125"&gt;Dntel featuring Jenny Wilson&lt;/td&gt;&lt;td valign="top" width="150"&gt;Roll On&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Dumb-Luck-Dntel/dp/B000PTYJLW/" target="_blank"&gt;Dumb Luck&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;24:33&lt;/td&gt;&lt;td valign="top" width="125"&gt;Venus Hum&lt;/td&gt;&lt;td valign="top" width="150"&gt;Do You Want to Fight me&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Colours-Wheel-Venus-Hum/dp/B000GFLI6E/" target="_blank"&gt;The Colors In the Wheel&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;27:46&lt;/td&gt;&lt;td valign="top" width="125"&gt;Lamb&lt;/td&gt;&lt;td valign="top" width="150"&gt;The Night has a Thousand Eyes&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/All-Your-Hands-12-VINYL/dp/B00004XZ97" target="_blank"&gt;All in Your Hands&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;33:25&lt;/td&gt;&lt;td valign="top" width="125"&gt;Sophie Rimhedin&lt;/td&gt;&lt;td valign="top" width="150"&gt;Strange&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Hi-Fi-Sophie-Rimheden/dp/B0001NPULA/" target="_blank"&gt;Hi-Fi&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;38:16&lt;/td&gt;&lt;td valign="top" width="125"&gt;His Name Is Alive&lt;/td&gt;&lt;td valign="top" width="150"&gt;Married&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Home-Your-Head-Name-Alive/dp/B00000B9FL" target="_blank"&gt;Home is in the Head&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;40:57&lt;/td&gt;&lt;td valign="top" width="125"&gt;Björk &lt;/td&gt;&lt;td valign="top" width="150"&gt;In the Musicals&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Selmasongs-Bjork/dp/B00004Y6TQ" target="_blank"&gt;Selmasongs&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;45:28&lt;/td&gt;&lt;td valign="top" width="125"&gt;Esthero&lt;/td&gt;&lt;td valign="top" width="150"&gt;Melancholy Melody&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Wikked-Lil-Grrrls-Us-Esthero/dp/B0007XT87Q" target="_blank"&gt;Wikkid Lil' Grrrls&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;50:01&lt;/td&gt;&lt;td valign="top" width="125"&gt;Múm &amp;amp; Sjon&lt;/td&gt;&lt;td valign="top" width="150"&gt;She Begins Her Education&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.discogs.com/release/225277" target="_blank"&gt;Motorlab #2&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;53:40&lt;/td&gt;&lt;td valign="top" width="125"&gt;Cocorosie&lt;/td&gt;&lt;td valign="top" width="150"&gt;Noah's Ark&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Noahs-Ark-CocoRosie/dp/B000AGL1PC/" target="_blank"&gt;Noah's Ark&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;57:36&lt;/td&gt;&lt;td valign="top" width="125"&gt;Regina Spektor&lt;/td&gt;&lt;td valign="top" width="150"&gt;Edit&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Begin-Hope-Regina-Spektor/dp/B000FFJ80I/" target="_blank"&gt;Begin to Hope&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;62:09&lt;/td&gt;&lt;td valign="top" width="125"&gt;Sigur Rós &lt;/td&gt;&lt;td valign="top" width="150"&gt;Njosnavelin&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Sigur-Ros/dp/B00006JYMW" target="_blank"&gt;()&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;69:02&lt;/td&gt;&lt;td valign="top" width="125"&gt;Lali Puna&lt;/td&gt;&lt;td valign="top" width="150"&gt;Together in Electric Dreams&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/I-Thought-Was-Over-That/dp/B0009E26UY/" target="_blank"&gt;I Thought I Was Over That&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="65"&gt;73:17&lt;/td&gt;&lt;td valign="top" width="125"&gt;Lady and Bird&lt;/td&gt;&lt;td valign="top" width="150"&gt;Blue Skies&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;a href="http://www.amazon.co.uk/Lady-Bird/dp/B000FFP03W" target="_blank"&gt;Lady and Bird&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;a href="http://www.amazon.co.uk/Lady-Bird/dp/B000FFP03W"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-20183423373715441?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/20183423373715441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=20183423373715441' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/20183423373715441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/20183423373715441'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/03/girlsthatglitchmp3.html' title='girls_that_glitch.mp3'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-6363290029180403757</id><published>2008-03-04T15:20:00.000-08:00</published><updated>2008-03-04T07:22:13.414-08:00</updated><title type='text'>Zimbabwe - not getting any better</title><content type='html'>&lt;p&gt;Just received this open letter from a family friend in Zimbabwe. Thought I'd share. I was there a few years ago, just before hyper inflation and the troubles really kicked off again, and the family I stayed with have left the country, and their lovely home flattened. They were trying to make a difference with equitable employment policies on their farm, and really the anti-thesis of the racism often associated with white Zimbabweans.&lt;/p&gt;  &lt;p&gt;****&lt;/p&gt;  &lt;p&gt;&lt;em&gt;I reckon that these are the last days of TKM and ZPF. The darkest hour is always before dawn. We are all terrified at what they are going to destroy next........I mean they are actually ploughing down brick and mortar houses and one white family with twin boys of 10 had no chance of salvaging anything when 100 riot police came in with AK47's and bulldozers and demolished their beautiful house - 5 bedrooms and pine ceilings - because it was &amp;quot;too close to the airport&amp;quot;, so we are feeling extremely insecure right now. You know - I am aware that this does not help you sleep at night, but if you do not know - how can you help?&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;You can't just be in denial and pretend it's not going on. To be frank with you, its genocide in the making and if you do not believe me, read the Genocide Report by Amnesty International which says we are IN level seven (level 8 is after it's happened and everyone is in denial). If you don't want me to tell you these things then it means you have not dealt with your own fear, but it does not help me to think you are turning your back on our situation.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;We need you to get the news OUT that we are all in a fearfully dangerous situation here. Too many people turn their backs and say - oh well, that's what happens in Africa. This government has GONE MAD and you need to publicize our plight or how can we be rescued? You can't just say &amp;quot;oh you attract your own reality&amp;quot;. The petrol queues are a reality, the pall of smoke all around our city is a reality, the thousands of homeless people sleeping outside in 0 Celsius with no food water, shelter and bedding are a reality. Today a family approached me, brother of the gardener's wife with two small children. Their home was trashed and they will have to sleep outside. We already support 8 people and a child on this property and electricity is going up next month by 250% as is water. How can I take another family of 4 and yet how can I turn them away to sleep out in the open?&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;I know we chose to stay here and so we deserve what's coming to us. For now, we ourselves have food, shelter, a little fuel and a bit of money for the next meal - but what is going to happen next? Will they start on our houses? All property is going to belong to the State now. I want to send out my Title Deeds to one of you because if they get a hold of those I can't fight for my rights. We no longer have SW radio which told us everything that was happening because the government jammed it out of existence - we don't have any reporters, and no one is allowed to photograph. If we had reporters here they would have an absolute field day. Even the pro government Herald has written that people are shocked, stunned, bewildered and blown mindless by the wanton destruction of everyone's homes which are supposed to be 'illegal' but which a huge percentage of them actually do have licenses for. Please - have some compassion and HELP by sending out the articles and personal reports so that something can be done.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;****&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;quot;I am one. I cannot do everything, but I can do something. And because I cannot do everything, I will not refuse to do the something that I can do. What I can do, I should do. And what I should do, by the grace of God, I will do.&amp;quot;&lt;/strong&gt; - Edward Everett Hale&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-6363290029180403757?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/6363290029180403757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=6363290029180403757' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/6363290029180403757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/6363290029180403757'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/03/zimbabwe-not-getting-any-better.html' title='Zimbabwe - not getting any better'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-7036812363347271304</id><published>2008-03-02T18:34:00.000-08:00</published><updated>2008-03-02T10:34:32.373-08:00</updated><title type='text'>Converting CCIT μ-law to MP3 using SOX and Lame</title><content type='html'>&lt;p&gt;This is a problem that has been bugging me for some time, and today I found my solution. Huzzah!&lt;/p&gt;  &lt;p&gt;For my work I do a bunch of stuff with the phone network, and the standard that it uses for audio is CCIT &amp;#956;-law, as described &lt;a href="http://en.wikipedia.org/wiki/%CE%9C-law_algorithm" target="_blank"&gt;here&lt;/a&gt;. Basically this uses an 8khz bit rate, mono PCM (.wav) file. Not quite CD quality, but if you've ever spoken to anyone on the phone, you know that.&lt;/p&gt;  &lt;p&gt;Now .wav files aren't really very useful for streaming over the internet, especially as flash doesn't have a great time handling them, especially this weird old-world format optimised for hardware routing. Seems Flash really wants mp3. Which is fair enough, I'm not gonna send a change request to Adobe - it may be that they'll put support in for &lt;a href="http://youtube.com/watch?v=F_RLwwxQOUc" target="_blank"&gt;Pacifica&lt;/a&gt; anyway&lt;/p&gt;  &lt;p&gt;So, while spending a Sunday afternoon trying to get a demo ready for &lt;a href="http://2008.blogtalk.net/" target="_blank"&gt;BlogTalk 2008&lt;/a&gt; (it's last minute, it starts tomorrow!) this is an itch I very much needed to scratch, and preferably using open source tools, and definitely from a command line (which in turn, gets called from ASP.Net using &lt;font face="Courier New"&gt;System.Diagnostics.Process.Start&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;The tools you'll need are &lt;a href="http://sox.sourceforge.net/" target="_blank"&gt;SOX&lt;/a&gt; and &lt;a href="http://lame.sourceforge.net/index.php" target="_blank"&gt;LAME&lt;/a&gt; - you'll need an executable version of LAME, rather than a dll. If you're trying this on an operating system other than Windows this technique might not work in exactly the same way, but the tools are cross platform, so you should find a way.&lt;/p&gt;  &lt;p&gt;But both sox.exe and lame.exe in the same folder. Then run this command line (thanks to &lt;a href="http://www.oreillynet.com/onlamp/blog/2004/11/convert_audio_between_mp3_flac.html" target="_blank"&gt;this old O'Reilly&lt;/a&gt; post for pointing the way)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;sox -t wav &lt;em&gt;yourinputfile.wav&lt;/em&gt; -t wav -s -w -c 1 -r 8000 - rate | lame -b 80 - &lt;em&gt;youroutputfile.mp3&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Obviously you'll be changing filenames as you see fit, but the output should be just fine.&lt;/p&gt;  &lt;p&gt;Apparently the &amp;quot;rate&amp;quot; switch is deprecated in the version of sox I've got hold of, but frankly, I don't care. This has given me the result I wanted, which is a low quality mp3 file from a CCIT &amp;#956;-law message that's been left in a kinda voicemail system using the &amp;quot;record&amp;quot; function in &lt;a href="http://web21c.bt.com/services/call_flow" target="_blank"&gt;CallFlow&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Hope this is useful to someone out there! If you feel really brave sox can possibly do this in realtime (ie audio in, audio out, without hitting the file system!) If someone knows how this is done, I'd love them to share.&lt;/p&gt;  &lt;p&gt;Now all I need to do is dump the MP3's in an RSS feed. But that should be the easy bit.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-7036812363347271304?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/7036812363347271304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=7036812363347271304' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/7036812363347271304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/7036812363347271304'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/03/converting-ccit-law-to-mp3-using-sox.html' title='Converting CCIT μ-law to MP3 using SOX and Lame'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-4570234838244156269</id><published>2008-03-02T16:42:00.000-08:00</published><updated>2008-03-02T08:43:34.951-08:00</updated><title type='text'>Catastrophe Comes to Those who Wait</title><content type='html'>&lt;p&gt;I read this headline in the &lt;a href="http://environment.newscientist.com/article/mg19726454.500-no-time-to-lose-in-cutting-cosub2sub-emissions.html" target="_blank"&gt;New Scientist&lt;/a&gt; today. (Sorry, the full article is behind a paywall). It was referring to fossil fuels, and the fact that the strategy of waiting to have better technology before trying to reduce CO&lt;sub&gt;2&lt;/sub&gt; output is probably gonna doom the planet.&lt;/p&gt;  &lt;p&gt;And there's me just flying from Bristol to Cork, when I could've taken a ferry (and a lot longer!). That's my carbon allowance for the year eaten up. Again. Ho Hum.&lt;/p&gt;  &lt;p&gt;On a more individual note, there's lots of things we procrastinate about, that could lead to more personal catastrophe, due to the common beliefs that we are superhuman, invincible and that &amp;quot;it won't happen to me&amp;quot;&lt;/p&gt;  &lt;p&gt;Do you overeat, or otherwise neglect your nutrition? You might get diabetes or heart disease.&lt;/p&gt;  &lt;p&gt;Do you smoke? Could die of lung cancer. Drinking too much booze? Liver disease waits.&lt;/p&gt;  &lt;p&gt;Are you neglecting the loves of your life because of work (or worse, football)? They might leave you, or simply not include you in their lives when you need them.&lt;/p&gt;  &lt;p&gt;Do you live off your credit card? You could end up sharing financial meltdown along with many others.&lt;/p&gt;  &lt;p&gt;The ostrich sticks his head in the sand, and I assure you, that's a strategy that leads to catastrophic asphyxiation for the poor, stupid bird.&lt;/p&gt;  &lt;p&gt;Do you write code with low (or pointless) test coverage? It will break - though in this case someone else may have to fix it.&lt;/p&gt;  &lt;p&gt;There's so many potential catastrophes in store for us that it's hard to know which ones to ignore. Life's a gamble. &lt;/p&gt;  &lt;p&gt;I've made a lot of mistakes in my time, and they nearly all tend to come from procrastination about things that really should be done sooner. I'm reminded of the Sufjan Stevens song, Chicago, that I included in &lt;a href="http://san1t1.blogspot.com/2008/01/songsofloveandpainmp3.html" target="_blank"&gt;this mix&lt;/a&gt;; here's a snippet of the lyrics&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;you came to take us        &lt;br /&gt;&amp;#160; all things go, all things go         &lt;br /&gt;to recreate us         &lt;br /&gt;&amp;#160; all things grow, all things grow         &lt;br /&gt;we had our mindset         &lt;br /&gt;&amp;#160; (I made a lot of mistakes)         &lt;br /&gt;all things know, all things know         &lt;br /&gt;&amp;#160; (I made a lot of mistakes)         &lt;br /&gt;you had to find it         &lt;br /&gt;&amp;#160; (I made a lot of mistakes)&amp;#160; &lt;br /&gt;all things go, all things go         &lt;br /&gt;&amp;#160; (I made a lot of mistakes)&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So watch it people. Don't procrastinate. Don't hide the fact that you're doing so, as while the secrets we keep from each other can be part of what makes life interesting, and too much honesty can be a bad thing, if you're hiding bad news from yourself, it will probably catch up with you sooner or later.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-4570234838244156269?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/4570234838244156269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=4570234838244156269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/4570234838244156269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/4570234838244156269'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/03/catastrophe-comes-to-those-who-wait.html' title='Catastrophe Comes to Those who Wait'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-795497516348223395</id><published>2008-02-27T09:50:00.000-08:00</published><updated>2008-02-27T01:50:45.635-08:00</updated><title type='text'>On Ownership and the 20th Century Mass Media Blip</title><content type='html'>&lt;p&gt;&lt;a href="http://blog.yannis-lionis.gr/" target="_blank"&gt;Yannis&lt;/a&gt; &lt;a href="http://blog.yannis-lionis.gr/2008/02/27/that&amp;rsquo;s-mine/" target="_blank"&gt;writes&lt;/a&gt; that he likes to &amp;quot;own&amp;quot; CDs, DVDs, books, photographs etc and have a physical object that he can hold.&lt;/p&gt;  &lt;p&gt;He and I are different that way, and there are a number of reasons for that.&lt;/p&gt;  &lt;p&gt;I'm not a communist, but i do think encouraging folk to &amp;quot;own&amp;quot; stuff is the same as encouraging them to consume more of our limited resources, rather than less. Give stuff away, be light and free, I say. The things you own can end up weighing you down (I have landed friends with expensive stately homes they can barely afford to maintain these days)&lt;/p&gt;  &lt;p&gt;And what Yannis doesn't mention is that when he buys a CD, DVD or book created by others, he actually &amp;quot;owns&amp;quot; a physical object, and not the content itself - he has only purchased the right to enjoy that content, and, indeed, if his CD becomes scratched beyond playing, then his right to enjoy that music is now dubious; I don't see the record label just replacing his CD.&lt;/p&gt;  &lt;p&gt;Course, he has fair use rights to back it up in many countries, provided there is no ugly copy protection in the way, or to play those REM songs to others on his guitar if he wishes, Michael Stipe has no redress for that.&lt;/p&gt;  &lt;p&gt;With books, it's even worse! Photocopying a whole book, to back it up, is just insanity. I'm looking forward to the second or third generation Kindle - I suspect once I've got one I'll never buy a book or magazine again, and yah-boo-sucks to all the nay-sayers who think that carrying around chunky bits of forest to read is better. They'll come round, mark my words. &lt;/p&gt;  &lt;p&gt;So aligning my fair use of copyrighted content with physical media is not really very helpful. (Doesn't work either - just look at how long the CSS encryption that's supposed to prevent me copying DVDs has been cracked). As I pointed out in my last post, I don't use CDs anymore, really I would prefer to have some system catalogue my usage of music and my rights to play it.&lt;/p&gt;  &lt;p&gt;Point number 2 is the environmental impact of all of us having our own physical media. OK, I do understand that data centres, networks, all of that packet based distribution infrastructure requires power, and green computing is something others understand better than me and write about at length. And I really do not have the knowledge to understand whether the carbon impact of printing a DVD, packaging it, shipping it is greater than streaming the content, be that over a P2P distribution mesh network, or direct from server to client. But I imagine that, on balance, less physical goods being shipped results in cleaner skies, and that will increasingly affect us in taxation and limited resource terms.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;(As an aside, sometimes calculating carbon debt isn't always clear - we in the UK apparently like our prawns to come with their shells off, and we prefer it when humans, not machines, take off the shells. I heard on Radio 4, so it must be true, that its cheaper in monetary and carbon terms to ship prawns trawled off the coast of Britain out to Thailand, via Rotterdam, in massive freezers/containers, have some poor underpaid Thai people shell them for us by hand in no doubt hideous working conditions, ship them back, repackage and sell, than to take the same trawled prawns to a factory in, say, Leeds, have a carbon-consuming machine shell them badly. and then attempt to sell them to disgruntled customers. Even when they've done thousands of miles across the globe and back in freezers, the carbon debt is allegedly less and the supermarket is STILL allowed to label them as British produce... Course, the underlying problem here is that we should be less lazy and shell our own shrimps, and chop our own vegetables - but this is a different rant)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Point 3 is really the one that I wanted to get to in this post, and that is about the changing nature of media production and distribution, which &lt;a href="http://blog.yannis-lionis.gr/" target="_blank"&gt;Yannis&lt;/a&gt; alludes to in his post with reference to the fact that &lt;a href="http://www.flickr.com/photos/62104344@N00/" target="_blank"&gt;he now has a digital camera and posts photos to flickr&lt;/a&gt; for the world to see.&lt;/p&gt;  &lt;p&gt;See, 100 years ago he wouldn't of had a camera at all. If he wanted a family portrait done he would have had to get stuck into a supply chain over which he had very little control (other than injecting cash), by hiring a professional, who would then come and take his family photograph, using a flash bulb that only worked once, with a nice little explosion, and then &amp;quot;developed&amp;quot; using expensive and hard to get chemicals. This was only available to the upper middle classes, and they would only be able to have one copy of the image, with no backup possibility at all, apart from sketches!&lt;/p&gt;  &lt;p&gt;100 years before that he'd hire a portrait artist. Only the upper classes could afford this! Paint, ink and pencils and other implements for media production just weren't readily available to all and sundry, nor the education to use them correctly. So any media that most folk enjoyed was locally produced and in the collective memory, not even written on paper. The most read book in the UK was the Bible, due to the copy in the church and the trained-to-read-latin preacher.&lt;/p&gt;  &lt;p&gt;In all of time there will only ever be one century in which there is a one-to-many mass media society.&lt;/p&gt;  &lt;p&gt;See, mass media ultimately is a supply chain and network business, and so many parts of it now are disrupted, democratised and available to you and I. We can now take photos, with commodity equipment (how many phones have cameras?) upload and distribute at will. OK, monetizing this content is tricky, but that only affects those who think they deserve cash for their efforts - which I doubt most flickr uses intend. &lt;/p&gt;  &lt;p&gt;Before we could replicate and transport books easily we told stories to each other, and we remembered them. Before we could record music and distribute it we created it together, with whatever we could find to make a noise, banging sticks, blowing in reeds, scratching horsehair over pig gut, or just vibrating our diaphragms. Even for me, before I ever bought a DVD or video I was involved in amateur dramatics (sadly no more, but my daughter can be a drama queen...) and performed others works, and improvisations of my own. Content ownership used to be, across broad swathes of society, only in the collective memory and if you forgot a song or a story, it was gone forever.&lt;/p&gt;  &lt;p&gt;Along came the 20th century.&lt;/p&gt;  &lt;p&gt;As a result of the industrial revolution the printing press, and paper production got cheaper. Now content could be created centrally and distributed, using railways and those new fangled &amp;quot;roads&amp;quot; to a larger audience - we got the concept of popular fiction, and the concept of &amp;quot;I own this&amp;quot; crept in to the common consciousness, which of course flies in the face of copyright law, but is, according to Yannis, still the common perception.&lt;/p&gt;  &lt;p&gt;We got radio. Now distribution no longer involved physical media, and we had one-to-many broadcast - we got popular music. To be fair, we had popular music for many millennia, all those traditional folk songs that exist in the collective memory, but these did not really cross geographic or cultural borders. With the advent of radio what was deemed popular across the globe really started homogenising. Sad in some ways, but this temporary cultural flattening seems to lead now, in the twenty first century to greater diversity as we have influences from everywhen and everywhere to inspire creativity.&lt;/p&gt;  &lt;p&gt;We got cinema and television. Now locally produced drama and entertainment really flew out the window because the state-owned-broadcast networks, with their two or three channels, knew best, and could choose our entertainment and deliver it to us. And I'm not happy that still folk often just prefer whatever is broadcast to them, but I see that pattern changing, first with multiple channels of unwanted content through broadcast TV, then with internet distribution prototypes like YouTube. &lt;/p&gt;  &lt;p&gt;We got persistent storage of music. and we felt we owned music. If you'd asked anyone 100 years previously what music they &amp;quot;owned&amp;quot; they'd give you a blank stare, I'm sure the concept would just be alien to them. Musicians back then made money &lt;strong&gt;because of&lt;/strong&gt; the creation of works, normally by performing, not with the process of song writing itself. Sound familiar to any musicians out there today?&lt;/p&gt;  &lt;p&gt;Yes, things are turning full circle. We're getting back to the world of distributed production, and local interest groups. Only this time around local interest means &amp;quot;we share the same interest&amp;quot; rather than &amp;quot;we share the same locality&amp;quot;. We've mixed up all our cultural references, we've made the tools of production available to a swathe of the people who could receive mass media, and isn't it all so exciting? So much content produced has now become, to quote an increasingly popular phrase &amp;quot;social objects&amp;quot;.&lt;/p&gt;  &lt;p&gt;I like this emerging world where I have the choice, if I want entertainment, to completely disregard the top 5 record labels and mass broadcast technologies, and find music through a network of like minded friends and semantic ontologies that are really beginning to understand, through ratings and recommendations, wisdom of crowds etc, what is is that I'm interested in.&lt;/p&gt;  &lt;p&gt;I really like the fact that I can easily watch movies made in Korea! Even 20 years ago this was not much of an option except to the cognoscenti, stuck up media types that they often were (apologies to those who think they're still there)&lt;/p&gt;  &lt;p&gt;I really like the fact that I can produce mixes of other folks music and put them on this blog (and wish it were legal, but technology has always been ahead of society and regulation on matters like this). I love the fact that I can write this blog, and post it, and that there's a possibility that folk in my local/social interest group, across the world, can read and refer it on. I'm not getting paid for it, but that's not why I'm doing it! I'm creating content and enjoying doing so, and if other folk like it too, then great. If we can all learn from each other and empathise more, even better.&lt;/p&gt;  &lt;p&gt;I like the fact that even design and fabrication of objects such as furniture and jewellery is become &lt;a href="http://www.ponoko.com" target="_blank"&gt;available to you and I&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So do I want to own media? Do I care where the film, or the music, or the prose or the photo physically is?&lt;/p&gt;  &lt;p&gt;No. I don't care and I don't want to know. I want systems that make it easy for me to produce media for others consumption and make it easy to find things that I'll like and want to share. And no, neither production nor distribution is perfectly commodotised yet, but things are changing so fast. I recall that 10 years ago the world had barely heard of mp3s, and 10 years before that home taping was killing music.&lt;/p&gt;  &lt;p&gt;I assert that the 20th Century was just a blip in the world of entertainment. It will one day be remembered as the only century in which we had Mass Media, and that our choice to be content producers to our circle of friends was largely taken away. I'm so glad that increasingly content production and distribution are highly participatory acts, and the quality of the content we choose to enjoy will be in our hands once again.&lt;/p&gt;  &lt;p&gt;I predict the demise of Hollywood as the source of all our movies (in the western world). I predict and hope for open source music. I predict collaboratively written stories once again becoming the norm. I know that you can sing and enjoy it, no matter what you say, and that the only true criteria for writing great music is knowing what we like.&lt;/p&gt;  &lt;p&gt;Believe me or not. After all, nothing is true, right?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-795497516348223395?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/795497516348223395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=795497516348223395' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/795497516348223395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/795497516348223395'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/02/on-ownership-and-20th-century-mass.html' title='On Ownership and the 20th Century Mass Media Blip'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-2564633310079838377</id><published>2008-02-23T00:10:00.000-08:00</published><updated>2008-02-22T16:13:00.853-08:00</updated><title type='text'>I want to pay for music</title><content type='html'>&lt;p&gt;&lt;em&gt;The music industry is dead. Long live the music business.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Just reading about the plans the UK government and the music industry are hatching around kicking people off the interweb if they persistently download music.&lt;/p&gt;  &lt;p&gt;What a crap idea.&lt;/p&gt;  &lt;p&gt;I've downloaded (ahem) one or two albums in my time. I've also bought a stack load of CDs and, back in the day, quite a bunch of records. And I don't mind paying for music I like. And as you've hopefully observed, I like to repackage and make some of it available to you through this blog.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Must admit, I think CDs are a bit of a legacy technology, you aren't gonna catch me buying too many more of those. I remember seeing the pitch for CDs on Tomorrows World in the eighties. I never quite believed you could eat off them, with a knife and fork, then wipe them clean, and they'd never scratch, and last forever. Don't try this at home, kids! I now burn CDs just for the car, and expert them to last four or five plays before they are scratched...&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Trouble is there's just so much damn music out there. And I like to dip my toes in the water and try it before I buy it. There's definitely a bunch of music I have in my collection that I've never listened to, or perhaps like just one track off an album. I'm sure I'm not really unusual in that.&lt;/p&gt;  &lt;p&gt;I don't think I'm a particularly rare case with my music habits in general. I used to spend lunchtimes browsing in record shops and listening to the odd few things, and sometimes I'd spend half a weeks wages on music that just wasn't worth it. Now I browse other peoples record collections over the web,or sometimes, just copy their hard drives (stop that, p2p traffic police, if you can! mwha ha ha) This is made a bunch easier by the fact the DRM experiment has failed. Add a bit of Pandora, or LastFM and you can see the world has changed&lt;/p&gt;  &lt;p&gt;The underlying problem the UK government is trying to address is that, just as in the telco world, distribution has gone over the top. No longer need I rely on supply chains that ship physical media (or put &lt;a href="http://en.wikipedia.org/wiki/SS7" target="_blank"&gt;SS7&lt;/a&gt; equipment in the network), and the big business that is required to enable that. Now I can just go online, and download music faster than I can feasibly play it. And what a joy it is. The amount of music I discover through this is just fantastic. The music industry is disrupted, and, I reckon, is beyond saving as it stands. Sorry guys! Game Over!&lt;/p&gt;  &lt;p&gt;&lt;em&gt;As an aside, my favourite example of disrupted industries is the canals in the UK. While they first started appearing in Roman times, during the industrial revolution there was a pressing need to ship goods and materials around the country, and so massive capital investments were made digging ditches around hills, through cities and even &lt;a href="http://en.wikipedia.org/wiki/Image:Barton_aqueduct_drawing.jpg" target="_blank"&gt;over rivers&lt;/a&gt; and filling them with water. An Act of Parliament was required for each canal! The canal industry went through the periods of innovation, competition, and consolidation that we see in much accelerated form with broadband ISPs these days. Still, it didn't take long really till railways and roads took over, and only a few of the canal companies managed to reinvent themselves within that new paradigm. Now we pretty much just use the canals for leisure porpoises.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;As the cost of music production is tending towards zero, and the cost of distribution too, I am not really very inclined to pay for those two features of that industry. But I do believe that artists should be rewarded for their creativity, and, moreover, I believe that I should be encouraged, nay, incentivised to share my extensive music collection so that others will pay too. It's a bit daft that it's supposed to be all locked away, and clearly the yoof today don't understand that old way of things.&lt;/p&gt;  &lt;p&gt;What we need is a new model of distribution, where having the bits stored on physical media - be that on a hard drive, in the cloud, on a CD that can be copied, or whatever is &lt;em&gt;not &lt;/em&gt;what I pay for. What I want to pay for is PLAYING music, not STORING it.&lt;/p&gt;  &lt;p&gt;The reason the DRM experiment has failed so miserably is because it got in my way. It didn't make it easier for me to discover or share new music, rather the opposite, it made it harder. There's a reason I have never bought anything from the I-Tunes Music store (a reason other than the fact I consider I-Tunes pretty sucky bloat-ware).&lt;/p&gt;  &lt;p&gt;I'm dead sad that &lt;a href="http://www.openbusiness.cc/2007/06/11/weedshare-rip/" target="_blank"&gt;weed share died&lt;/a&gt; as it was a most interesting experiment, with the lofty goals of democratising distribution, and enabling new players to compete in that end of the market. Sadly it was build around Windows Media DRM - more for tracking than protection purposes, and is now dead. Killed, effectively, by Microsoft (though there are rumours that maybe the Weed founders are getting paid by licensing patents to the Zune; not much good for those whose DRMd tracks won't play now)&lt;/p&gt;  &lt;p&gt;I, for one, would happily pay a notional &amp;quot;broadband music tax&amp;quot;, and allow a small utility to track every single piece of music that I play, on or offline, so that the artist, and their support network can be rewarded appropriately. I appreciate that the infrastructure to support this is kinda tricky, but it's the sort of thing the &lt;a href="http://www.mcps-prs-alliance.co.uk" target="_blank"&gt;MCPS-PRS&lt;/a&gt; should be pushing for. In my opinion. Not watching what I download and killing my connection if I'm naughty. That's just arse about tit, quite frankly.&lt;/p&gt;  &lt;p&gt;What do you think? Are you happy paying for the right to store music? Do you ever regret paying for that? Do you ever share music with your friends and barely feel guilty about it at all? Would you pay a &amp;quot;music license&amp;quot; and allow your usage to be tracked?&lt;/p&gt;  &lt;p&gt;If you make music (and let's assume you're not a top ten artist) are you comfortable with the current options available to you for distribution? Or Do you prefer your music to just spread so that you get more folk through the door at gigs?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-2564633310079838377?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/2564633310079838377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=2564633310079838377' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/2564633310079838377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/2564633310079838377'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/02/i-want-to-pay-for-music.html' title='I want to pay for music'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-6991214309367318476</id><published>2008-02-11T19:57:00.000-08:00</published><updated>2008-02-11T19:58:51.926-08:00</updated><title type='text'>Spinal Tap style CPU in my machine</title><content type='html'>&lt;p&gt;Spinal tap had a very special amplifier, it went beyond 10 to 11!&lt;/p&gt;  &lt;p&gt;   &lt;div class="wlWriterSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:c6c09956-2d94-4130-a518-0fcd4f5fc057" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;div&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/akaD9v460yI"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/akaD9v460yI" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Turns out my HP laptop has CPUs that go beyond 100% usage...&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.google.com/timsan1t1/R7EZedP0EfI/AAAAAAAAAFk/Fu7k0NdjXvY/100.50%25%5B3%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="347" alt="100.50%" src="http://lh5.google.com/timsan1t1/R7EZe9P0EgI/AAAAAAAAAFs/h_mtsRGpaeI/100.50%25_thumb%5B1%5D" width="199" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="left"&gt;No overclocking required. I'm sure Vista makes the most of that extra 0.5% oomph...&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-6991214309367318476?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/6991214309367318476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=6991214309367318476' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/6991214309367318476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/6991214309367318476'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/02/spinal-tap-style-cpu-in-my-machine.html' title='Spinal Tap style CPU in my machine'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-2015060110036657492</id><published>2008-02-09T00:12:00.000-08:00</published><updated>2008-03-30T03:34:39.275-07:00</updated><title type='text'>rain.mp3</title><content type='html'>&lt;p&gt;Rain. We here in Britain are experts on rain. We have all sorts. For lots of the year, it is grey, wet, and the chances of rain are that it could start... just... about... now...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;But you know, there's rain and there's rain and there's rain. And we probably have more words for rain, then the Inuit have for snow. Mind you, it is a myth that they have dozens, hundreds, or thousands, there's about 4. No link, check for yourself!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Apparently there are pretty much three types of rain, no matter what word you choose, be that shower, storm, mist, cats and dogs &amp;amp;c. Scientifically speaking apparently all there really is is orographic, frontal and convective rain.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Whatever the scientists say, I think we have more. We have drizzly rain, which is great on a hot day, it cools you down - but frankly crap when you have it for months at a time. We have heavy rain in, which you either avoid, or give in to it - once you're wet, you may as well enjoy it, I don't know about you, butI like the feeling of being completely and utterly soaked sometimes, especially when I know there's warm towels, clean dry clothes, a raging fire, and hot food waiting for me.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I don't like it when a soaking wet dog jumps on the sofa. That's a downer.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Maybe it's been a really hot humid, tropical day, and you're looking forward to 5 o'clock and the predictable storm to cool the air, and allow you to breathe for a few seconds without feeling like you're drinking hot water. Not in England; I lived in Durban, South Africa for a while, and that summer I saw amazing lightning storms nearly every day, as the sun went down and the air cooled. But it got darn wet!. After a while I knew when it was coming and I got the hell out of the way in time.&lt;/p&gt;&lt;p&gt;Storms at sea, that's another thing again, with churning waves, tempestuous winds, and the risk of capsizing. I recall (or maybe it's my imaginings) seeing &lt;a href="http://shakespeare.mit.edu/tempest/full.html"&gt;The Tempest &lt;/a&gt;at the &lt;a href="http://www.minack.com/dayvisitors/introduction.htm"&gt;Minack Theatre&lt;/a&gt; in Cornwall, and the weather being awful, but the actors bravely struggling on. Added to the play somehow, though I could barely hear a thing!&lt;/p&gt;&lt;p&gt;The theme of &lt;a href="http://64.22.75.56/mixes/rain.mp3"&gt;this mix&lt;/a&gt; - not Shakespeare, not outdoor theatre, nor sunshine; but rain &amp;amp; storms. Once again I seem to have covered a number of decades and a number of continents and have included music never put side by side before, including a version of Purple Rain quite unlike the original&lt;/p&gt;&lt;p&gt;Download or stream from &lt;a href="http://64.22.75.56/mixes/rain.mp3"&gt;here&lt;/a&gt; (92Mb)&lt;br /&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="600" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="61"&gt;&lt;p align="center"&gt;&lt;strong&gt;Start&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="129"&gt;&lt;p align="center"&gt;&lt;strong&gt;Artist&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="132"&gt;&lt;p align="center"&gt;&lt;strong&gt;Track&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;p align="center"&gt;&lt;strong&gt;Source&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="62"&gt;00:00&lt;/td&gt;&lt;td valign="top" width="131"&gt;The Pixies&lt;/td&gt;&lt;td valign="top" width="132"&gt;Stormy Weather&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.amazon.co.uk/Bossanova-Pixies/dp/B000026YEG"&gt;Bossanova&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="63"&gt;03:22&lt;/td&gt;&lt;td valign="top" width="132"&gt;Sparklehorse&lt;/td&gt;&lt;td valign="top" width="132"&gt;Rainmaker&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.amazon.co.uk/Vivadixiesubmarinetransmissionplot-Sparklehorse/dp/B000002TWZ" target="_blank"&gt;Vivadixiesubmarinetransmissionplot&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="63"&gt;07:00&lt;/td&gt;&lt;td valign="top" width="133"&gt;Nina Simone&lt;/td&gt;&lt;td valign="top" width="132"&gt;I Think It's Going to Rain Today&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.amazon.co.uk/Nina-Simone-Piano/dp/B0001ZXMC2/"&gt;Nina Simone and Piano&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;10:23&lt;/td&gt;&lt;td valign="top" width="133"&gt;Nina Nastasia&lt;/td&gt;&lt;td valign="top" width="132"&gt;Stormy Weather&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.amazon.co.uk/Dogs-Nina-Nastasia/dp/B00023B1H6" target="_blank"&gt;Dogs&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;13:08&lt;/td&gt;&lt;td valign="top" width="133"&gt;Jim O'Rouke&lt;/td&gt;&lt;td valign="top" width="132"&gt;Ghost Ship in a Storm&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.amazon.co.uk/Eureka-Jim-ORourke/dp/B00000I406" target="_blank"&gt;Eureka&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;16:15&lt;/td&gt;&lt;td valign="top" width="133"&gt;The Flaming Lips&lt;/td&gt;&lt;td valign="top" width="132"&gt;Five Stop Mother Superior Rain&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.amazon.co.uk/Priest-Driven-Ambulance-Flaming-Lips/dp/B000003BGI"&gt;In a Priest Driven Ambulance&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;22:03&lt;/td&gt;&lt;td valign="top" width="133"&gt;Safety Scissors&lt;/td&gt;&lt;td valign="top" width="132"&gt;Stormy Weather&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.amazon.co.uk/Parts-Water-Safety-Scissors/dp/B00005J9ZU/"&gt;Parts Water&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;27:26&lt;/td&gt;&lt;td valign="top" width="133"&gt;Ryuichi Sakamoto&lt;/td&gt;&lt;td valign="top" width="132"&gt;George In Rain&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.amazon.co.uk/Love-Devil-Ryuichi-Sakamoto/dp/B00000DBY5"&gt;Love is the Devil&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;28:46&lt;/td&gt;&lt;td valign="top" width="133"&gt;Basix&lt;/td&gt;&lt;td valign="top" width="132"&gt;Purple Rain&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.amazon.co.uk/Cosmosonica-Crazy-Covers-Vol-1/dp/tracks/B0008KLVQO/"&gt;Cosmosonica - Crazy Covers Vol 1 &lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;32:38&lt;/td&gt;&lt;td valign="top" width="133"&gt;Giant Sand&lt;/td&gt;&lt;td valign="top" width="132"&gt;Dirty From the Rain&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.amazon.co.uk/Chore-Enchantment-Giant-Sand/dp/B00064X80O/"&gt;Chore of Enchantment&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;36:02&lt;/td&gt;&lt;td valign="top" width="133"&gt;Patrick Wolf&lt;/td&gt;&lt;td valign="top" width="132"&gt;This Weather&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.amazon.co.uk/Wind-Wires-Patrick-Wolf/dp/B0007DHOMC/"&gt;Wind in the Wires&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;40:26&lt;/td&gt;&lt;td valign="top" width="133"&gt;Willard Grant Conspiracy + Telefunk&lt;/td&gt;&lt;td valign="top" width="132"&gt;Just a Little Rain&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.amazon.co.uk/Fishtank-Willard-Grant-Conspiracy/dp/B00005UKQF"&gt;In the Fishtank&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;44:44&lt;/td&gt;&lt;td valign="top" width="133"&gt;Norah Jones&lt;/td&gt;&lt;td valign="top" width="132"&gt;September in the Rain&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.npr.org/templates/story/story.php?storyId=24"&gt;Marian McPartland's Piano Jazz&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;47:51&lt;/td&gt;&lt;td valign="top" width="133"&gt;Penta Leslee Swanson&lt;/td&gt;&lt;td valign="top" width="132"&gt;There Was a Thunder There Was Rain&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.amazon.co.uk/Sorrow-Solitude-Penta-Leslee-Swanson/dp/B00000ILHU"&gt;Sorrow and Solitude&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;52:33&lt;/td&gt;&lt;td valign="top" width="133"&gt;Linda Perhacs&lt;/td&gt;&lt;td valign="top" width="132"&gt;Chimacum Rain&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.amazon.co.uk/Parallelograms-Linda-Perhacs/dp/B0001XTIUO" target="_blank"&gt;Parallelograms&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;55:39&lt;/td&gt;&lt;td valign="top" width="133"&gt;Craig Armstrong&lt;/td&gt;&lt;td valign="top" width="132"&gt;Weather Storm&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.amazon.co.uk/Space-Between-Us-Craig-Armstrong/dp/B000024ZOM"&gt;Space Between us&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;61:32&lt;/td&gt;&lt;td valign="top" width="133"&gt;Mùm&lt;/td&gt;&lt;td valign="top" width="132"&gt;Will the Summer Make Good For All of Our Sin&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.amazon.co.uk/Dusk-Log-Mum/dp/B0002FE2PW/"&gt;Dusk Log&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tbody&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;I notice I'm repeating myself already. We're only on mix 4 of the year, and I find Giant Sand's Chore of Enchantment album appearing again. &lt;a href="http://howegelb.com/"&gt;Howe Gelb&lt;/a&gt; is a top artist, so I forgive myself!&lt;/p&gt;&lt;p&gt;Found as well that the copy I have of that &lt;a href="http://fat-cat.co.uk/fatcat/artistInfo.php?id=49"&gt;Mùm&lt;/a&gt; ep is worth about £30 now. How nice for me. Hope you enjoy the tunes. Let me know!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-2015060110036657492?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/2015060110036657492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=2015060110036657492' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/2015060110036657492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/2015060110036657492'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/02/rainmp3.html' title='rain.mp3'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-5398999734651409341</id><published>2008-02-05T17:15:00.000-08:00</published><updated>2008-02-05T09:17:01.713-08:00</updated><title type='text'>Embedding Windows Media Player in Firefox and Internet Explorer</title><content type='html'>&lt;p&gt;So this actually wasn't very hard! I was pleasantly surprised.&lt;/p&gt;&lt;p&gt;My remit was to have a list of audio files on a web page, which when clicked, played. I didn't want a video window, I wanted to use the Media Player mini-mode. This was for a proof of concept of a voicemail system using the wonderful, and groundbreaking, and probably revolutionary &lt;a href="http://web21c.bt.com/services/call_flow"&gt;Web21C CallFlow service&lt;/a&gt;. Disclaimer - I have been involved in this project from the early days, so my opinion is most definitely biased.&lt;/p&gt;&lt;p&gt;I wanted to use this as an opportunity to play with the Windows Media player control, and accept the fact that I would get an inevitable backlash from Apple and *.nix users. My user base is pretty controlled - amounts to two or three people, and I reckon that none of them use anything other than corporate builds of Windows on a PC.&lt;/p&gt;&lt;p&gt;So here's the code. &lt;/p&gt;&lt;p&gt;First, put a player in the browser with this script in inline HTML&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;SCRIPT &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;="text/javascript"&amp;gt;&lt;br /&gt;  &lt;br /&gt;    var &lt;/span&gt;str = &lt;span style="color:#a31515;"&gt;""&lt;/span&gt;;&lt;br /&gt;  &lt;br /&gt;    &lt;span style="color:blue;"&gt;if &lt;/span&gt;(-1 != navigator.userAgent.indexOf(&lt;span style="color:#a31515;"&gt;"Firefox"&lt;/span&gt;))&lt;br /&gt;    {&lt;br /&gt;         &lt;span style="color:green;"&gt;// create WMP for FF.&lt;br /&gt;        &lt;/span&gt;str = &lt;span style="color:#a31515;"&gt;'&amp;lt;object id="mediaPlayer" type="application/x-ms-wmp" width="176" height="44"&amp;gt;'&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;     &lt;span style="color:blue;"&gt;else &lt;/span&gt;{&lt;br /&gt;&lt;br /&gt;         &lt;span style="color:green;"&gt;// create WMP for IE&lt;br /&gt;         &lt;/span&gt;str = &lt;span style="color:#a31515;"&gt;'&amp;lt;object id="mediaPlayer" classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" width="176" height="44"&amp;gt;'&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;       &lt;br /&gt;    str += &lt;span style="color:#a31515;"&gt;'&amp;lt;param name="uiMode" value="mini"&amp;gt;'&lt;/span&gt;;&lt;br /&gt;    str += &lt;span style="color:#a31515;"&gt;'&amp;lt;param name="autoStart" value="true"&amp;gt;'&lt;/span&gt;;&lt;br /&gt;    str += &lt;span style="color:#a31515;"&gt;'&amp;lt;/object&amp;gt;'&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:green;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color:green;"&gt;    // emit the object tag &lt;/span&gt;&lt;br /&gt;    document.write(str);&lt;br /&gt;   &lt;br /&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;SCRIPT&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Using the Microsoft Ajax controls, (an UpdatePanel and a Timer) the server outputs some raw HTML straight into a asp:label control. Although the files to be played are WAV files they are very low resolution. CCIT &lt;a href="http://en.wikipedia.org/wiki/%CE%9C-law_algorithm" target="_blank"&gt;μ-Law&lt;/a&gt; 8bit, telephone quality - lower resolution than most mp3s&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Courier;"&gt;&lt;span style="color:blue;"&gt;foreach &lt;/span&gt;(&lt;span style="color:blue;"&gt;string &lt;/span&gt;s &lt;span style="color:blue;"&gt;in&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Directory&lt;/span&gt;.GetFiles(&lt;span style="color:#a31515;"&gt;@"dir"&lt;/span&gt;))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color:blue;"&gt;if&lt;/span&gt;(s.EndsWith(&lt;span style="color:#a31515;"&gt;".wav"&lt;/span&gt;))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        fi = &lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;FileInfo&lt;/span&gt;(s);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        lblMessages.Text = lblMessages.Text +  &lt;span style="color:#a31515;"&gt;"&amp;lt;BR&amp;gt;&amp;lt;A href=\"#\" onClick=\"playFile('"&lt;/span&gt;+ fi.Name + &lt;span style="color:#a31515;"&gt;"')\"&amp;gt;"&lt;/span&gt;+&lt;span style="color:#a31515;"&gt;"Message from "&lt;/span&gt;+ fi.Name.Split(&lt;span style="color:#a31515;"&gt;'.'&lt;/span&gt;)[0] +&lt;span style="color:#a31515;"&gt;" at "&lt;/span&gt;+ fi.CreationTime.ToString()+ &lt;span style="color:#a31515;"&gt;"&amp;lt;/a&amp;gt;"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;And finally, the Javascript to play the file. Note the name of the page is VoiceRecording.aspx, and I need to strip bits out based on the current path of the page. (Yes, I need to improve my RegExs and do this better, but what the hell)&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;function &lt;/span&gt;playFile(s)&lt;br /&gt;    {&lt;br /&gt;        loc = document.location.toString();&lt;br /&gt;        document.mediaPlayer.URL  = loc.substr(0,loc.indexOf(&lt;span style="color:#a31515;"&gt;"VoiceRecording"&lt;/span&gt;,0)) + &lt;span style="color:#a31515;"&gt;"VoiceMail/" &lt;/span&gt;s;&lt;br /&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;And there we go. Because I set the autoStart parameter to the object to true, as soon as the URL of the audio is set, it starts to play.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I'd give you a link to the page, but it's all hidden behind OpenId, and access is protected; it does stuff with the phone system that costs real money. Y'all will have to make do with a screenshot.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I've airbrushed out photos for the sake of privacy.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh6.google.com/timsan1t1/R6iZ14PG9LI/AAAAAAAAAFU/VYP1ieKr-Uc/image%5B16%5D"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="428" alt="image" src="http://lh4.google.com/timsan1t1/R6iZ2YPG9MI/AAAAAAAAAFc/SgQh2TRUyt4/image_thumb%5B8%5D" width="517" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-5398999734651409341?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/5398999734651409341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=5398999734651409341' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/5398999734651409341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/5398999734651409341'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/02/embedding-windows-media-player-in.html' title='Embedding Windows Media Player in Firefox and Internet Explorer'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-6775702394469394663</id><published>2008-01-29T10:02:00.000-08:00</published><updated>2008-03-30T03:35:26.161-07:00</updated><title type='text'>epic_of_no_consequence.mp3</title><content type='html'>&lt;p&gt;You lucky people! &lt;a href="http://64.22.75.56/mixes/epic_of_no_consequence.mp3"&gt;Here's a new mix&lt;/a&gt;! 108Mb!&lt;/p&gt;&lt;p&gt;This time it's kinda reggae-ish, but off on a tangent once or twice. &lt;/p&gt;&lt;p&gt;I have no back story for this one, just a bunch of tunes really. I like them, hope you do too.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table cellspacing="0" cellpadding="2" width="750" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="54"&gt;&lt;strong&gt;Time&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="122"&gt;&lt;strong&gt;Title&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="160"&gt;&lt;strong&gt;Artist&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="212"&gt;&lt;strong&gt;Source&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="200"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="55"&gt;00:00&lt;/td&gt;&lt;td valign="top" width="121"&gt;Theme From Shaft&lt;/td&gt;&lt;td valign="top" width="159"&gt;Chosen Few&lt;/td&gt;&lt;td valign="top" width="214"&gt;&lt;a href="http://www.amazon.co.uk/Film-Stage-Classics-Jamaican-Style/dp/B0000011GZ"&gt;20 Film and Stage Classics - Jamaican Style&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="200"&gt;Who is the man?&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="53"&gt;03:32&lt;/td&gt;&lt;td valign="top" width="121"&gt;John Jones&lt;/td&gt;&lt;td valign="top" width="159"&gt;Van Dyke Parks&lt;/td&gt;&lt;td valign="top" width="216"&gt;&lt;a href="http://www.amazon.co.uk/Discover-America-Van-Dyke-Parks/dp/B0000255VC/"&gt;Discover America&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="200"&gt;This chap produced Smiley Smile, by the Beach Boys&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="55"&gt;06:34&lt;/td&gt;&lt;td valign="top" width="120"&gt;Surfin'&lt;/td&gt;&lt;td valign="top" width="158"&gt;Ernest Ranglin&lt;/td&gt;&lt;td valign="top" width="217"&gt;&lt;a href="http://www.amazon.co.uk/Below-Bassline-Ernest-Ranglin/dp/B000001EA6"&gt;Below the Bassline&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="200"&gt;Jazz? Reggae? Ska?&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="54"&gt;12:09&lt;/td&gt;&lt;td valign="top" width="120"&gt;So Lonely&lt;/td&gt;&lt;td valign="top" width="158"&gt;The Police&lt;/td&gt;&lt;td valign="top" width="218"&gt;&lt;a href="http://www.amazon.co.uk/Outlandos-Damour-Remastered-Police/dp/B00009U5IG"&gt;Outlandos D'amour&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="200"&gt;1979 and back when Sting had just broken free&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="54"&gt;16:47&lt;/td&gt;&lt;td valign="top" width="120"&gt;Can't Stop Me&lt;/td&gt;&lt;td valign="top" width="158"&gt;Anthony B&lt;/td&gt;&lt;td valign="top" width="219"&gt;&lt;a href="http://www.discogs.com/release/949567"&gt;Can't Stop Me&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="200"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="54"&gt;20:10&lt;/td&gt;&lt;td valign="top" width="120"&gt;Money&lt;/td&gt;&lt;td valign="top" width="158"&gt;Easy Star All Stars&lt;/td&gt;&lt;td valign="top" width="219"&gt;&lt;a href="http://www.amazon.co.uk/Dub-Side-Moon-Reggae-Tribute/dp/B00008A7U9/"&gt;Dub Side of the Moon&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="200"&gt;The best Pink Floyd cover album ever.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="54"&gt;26:33&lt;/td&gt;&lt;td valign="top" width="120"&gt;Money Dub&lt;/td&gt;&lt;td valign="top" width="158"&gt;Horace Andy&lt;/td&gt;&lt;td valign="top" width="219"&gt;&lt;a href="http://www.amazon.co.uk/Horace-Andys-Dub-Box-1973-1976/dp/B0000659P9/"&gt;Horace Andy's Dub Box&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="200"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="54"&gt;29:30&lt;/td&gt;&lt;td valign="top" width="120"&gt;I'll Never Fall in Love Again&lt;/td&gt;&lt;td valign="top" width="158"&gt;Sly &amp;amp; The Family Stone&lt;/td&gt;&lt;td valign="top" width="219"&gt;&lt;a href="http://www.amazon.co.uk/Dance-Music-Sly-Family-Stone/dp/B000002AS0"&gt;Dance to the Music&lt;/a&gt; &lt;/td&gt;&lt;td valign="top" width="200"&gt;And why not?&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="54"&gt;32:47&lt;/td&gt;&lt;td valign="top" width="120"&gt;Gotta Serve Somebody&lt;/td&gt;&lt;td valign="top" width="158"&gt;Nasio &amp;amp; Drummie Zeb/Razor Posse/Incline&lt;/td&gt;&lt;td valign="top" width="219"&gt;&lt;a href="http://www.amazon.co.uk/Rolling-Bob-Reggae-Tribute-Dylan/dp/B0007W0MPY/"&gt;Is It Rolling Bob: A Reggae Tribute to Bob Dylan&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="200"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="54"&gt;37:28&lt;/td&gt;&lt;td valign="top" width="120"&gt;Unbreak My Dub&lt;/td&gt;&lt;td valign="top" width="158"&gt;JStar&lt;/td&gt;&lt;td valign="top" width="219"&gt;&lt;a href="http://www.discogs.com/release/827657"&gt;Most Wanted Vol 2&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="200"&gt;I love this tune. Great re-interpretation.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="54"&gt;41:22&lt;/td&gt;&lt;td valign="top" width="120"&gt;Curlylocks&lt;/td&gt;&lt;td valign="top" width="158"&gt;Baby Fox&lt;/td&gt;&lt;td valign="top" width="219"&gt;&lt;a href="http://www.discogs.com/release/86111"&gt;A Normal Family&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="200"&gt;A reggae classic, with a nice modern production&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="54"&gt;46:47&lt;/td&gt;&lt;td valign="top" width="120"&gt;Residence Dub&lt;/td&gt;&lt;td valign="top" width="158"&gt;Dr Israel&lt;/td&gt;&lt;td valign="top" width="219"&gt;&lt;a href="http://www.discogs.com/release/57097"&gt;Land of Baboon&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="200"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="54"&gt;51:39&lt;/td&gt;&lt;td valign="top" width="120"&gt;Bug Dub&lt;/td&gt;&lt;td valign="top" width="158"&gt;UVX&lt;/td&gt;&lt;td valign="top" width="219"&gt;&lt;a href="http://www.amazon.co.uk/Unity-Dubs-Voyage-Into-Paradise/dp/B00006FX67"&gt;Unity Dub's Voyage Into Paradise&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="200"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="54"&gt;58:51&lt;/td&gt;&lt;td valign="top" width="120"&gt;Up Through the Down&lt;/td&gt;&lt;td valign="top" width="158"&gt;Grizzly&lt;/td&gt;&lt;td valign="top" width="219"&gt;&lt;a href="http://www.amazon.co.uk/DJ-Kicks-Black-Album-Rockers-Hi-Fi/dp/B0000013ER/"&gt;DJ Kicks - The Black Album Rockers Hi-Fi&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="200"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="54"&gt;62:15&lt;/td&gt;&lt;td valign="top" width="120"&gt;Funkier than a Mosquitoes Tweeter&lt;/td&gt;&lt;td valign="top" width="158"&gt;Nikka Costa&lt;/td&gt;&lt;td valign="top" width="219"&gt;&lt;a href="http://www.amazon.co.uk/Cantneverdidnothin-Nikka-Costa/dp/B000A0D548/"&gt;Can'tneverdidnothin'&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="200"&gt;I love this girl's &lt;a href="http://www.youtube.com/watch?v=6cIQn9avW2M"&gt;work&lt;/a&gt;. Frank Sinatra was her godfather.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="53"&gt;65:58&lt;/td&gt;&lt;td valign="top" width="119"&gt;Fruit Man&lt;/td&gt;&lt;td valign="top" width="155"&gt;Ween&lt;/td&gt;&lt;td valign="top" width="228"&gt;&lt;a href="http://www.amazon.co.uk/Cucaracha-Ween/dp/B000VDGA46"&gt;La Cucaracha&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="200"&gt;One of my favourite bands since the early nineties. Nothing is sacred.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="53"&gt;69:59&lt;/td&gt;&lt;td valign="top" width="118"&gt;Hope&lt;/td&gt;&lt;td valign="top" width="155"&gt;Fat Freddy's Drop&lt;/td&gt;&lt;td valign="top" width="232"&gt;&lt;a href="http://www.amazon.co.uk/Based-True-Story-Freddys-Drop/dp/B000ICLT9G/"&gt;Based on a True Story&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="200"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-6775702394469394663?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/6775702394469394663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=6775702394469394663' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/6775702394469394663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/6775702394469394663'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/01/epicofnoconsequencemp3.html' title='epic_of_no_consequence.mp3'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-6416703249236601979</id><published>2008-01-28T14:05:00.000-08:00</published><updated>2008-01-28T06:06:33.626-08:00</updated><title type='text'>Cooking and making music</title><content type='html'>&lt;p&gt;I love cooking, and I love music; wish I had the chance to make it more often, it's over a decade since I finished a tune. Ouch. (Nigel, are we ever gonna get that jamming weekend? And did you know &lt;a href="http://www.whereisnigel.co.uk/"&gt;your DNS&lt;/a&gt; is currently screwed up?)&lt;/p&gt;&lt;p&gt;But then, I do now have a family and other priorities that seem to get in the way, and something had to give (though I didn't enjoy selling the studio when Savvi was born and we were totally skint. Worth it, but painful)&lt;/p&gt;&lt;p&gt;The most important talent you need to make music, or to prepare food, or indeed, do anything vaguely artistic is to know what you like. If you can't explain to yourself why you don't like &lt;em&gt;insert_least_favourite_band_or_food_product_here&lt;/em&gt; then you have no business attempting to do better. In my not so humble opinion.&lt;/p&gt;&lt;p&gt;This guy shows us he is blessed with the ability to mix cooking and music production in a neat and novel way. The video made me laugh too. Thanks to &lt;a href="http://www.philipvolkers.com/pages/gallery_page.php?category=Portraits&amp;amp;thumbfromnumber=0&amp;amp;showmainproductnumber=0"&gt;Philip&lt;/a&gt; for forwarding the link to me through Facebook.&lt;/p&gt;&lt;p&gt;&lt;div class="wlWriterSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:3d3b93d4-e78f-4a7c-aaed-3356dd22998e" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;&lt;object height="350" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/NZJearCSjDI"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/NZJearCSjDI" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-6416703249236601979?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/6416703249236601979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=6416703249236601979' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/6416703249236601979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/6416703249236601979'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/01/cooking-and-making-music.html' title='Cooking and making music'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-6429182058778364862</id><published>2008-01-28T13:21:00.000-08:00</published><updated>2008-01-29T01:56:15.413-08:00</updated><title type='text'>Why we lost WSE and didn't migrate to WCF</title><content type='html'>&lt;p&gt;I have the dubious privilege of being a Microsoft specialist in a largely open source / Java team. Once in a while on my blog therefore you may see posts which have C# code in them, or otherwise talk about Microsoft technologies. I like C#, it's an elegant language. You can see in it's evolution the Microsoft strategy of watching others, adopting later, and improving. It's not like them to invent something, but very like them to learn from others solutions to problems and try and do something that bit better. Learning from other peoples mistakes can save you a load of hassle in general.&lt;/p&gt;&lt;p&gt;Another good example, as well as C#, is the &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx"&gt;ASP.Net MVC&lt;/a&gt; framework, which a colleague who's been banging on to me about Rails for some time said was actually very good. &lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;(Saying that, we both eventually agreed that server side code should not emit HTML to the browser directly, but that sensible web architectures these days would have &lt;a href="http://script.aculo.us/downloads"&gt;scriptaculous&lt;/a&gt;, or &lt;a href="http://dojotoolkit.org/about"&gt;dojo&lt;/a&gt; or somesuch doing all the mark up work, and a web server should just expose resources with data in JSON, YAML, or whatever other flavour of data markup you like; a web application then is Just An API. The ASP.Net MVC framework partially fails on that; it has a lot of convenience features for client side development, and while I understand the rationale for this, particularly for an MSFT toolkit, the purist in me doesn't like it).&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;I digress. &lt;/p&gt;&lt;p&gt;&lt;a href="http://web21c.bt.com/"&gt;Where I work&lt;/a&gt; we have this bunch of APIs for doing funky stuff with the phone network, sending text messages etc, which we've implemented as Soap Messages, with a bit of WS-Security and PKI for good measure. There's detailed instructions on the protocols we use just &lt;a href="http://web21c.bt.com/howtos/diy_web_service_calls"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;em&gt;For those of you who think WS-* sucks, we listened, we heard, and we are releasing &lt;/em&gt;&lt;a href="http://mojo.bt.com/"&gt;&lt;em&gt;Mojo&lt;/em&gt;&lt;/a&gt;&lt;em&gt; in all it's REST and Webby goodness. Thank the Lord.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;PKI, certificates and WS-Security are hard, no matter what the tools vendors tell you, and most developers struggle a bit with these things unless the client and server are in a very tight relationship (e.g. same version of .Net on both sides). &lt;a href="http://web21c.bt.com/howtos/diy_web_service_calls"&gt;This is the practice&lt;/a&gt; our security team wanted us to follow through with though.&lt;/p&gt;&lt;p&gt;All this friction led us to release SDKs to encapsulate all that toughness away from our developer community, and also to reduce our support costs. These SDKs hide away all that stuff to do with building proxies to our services, implementing the security policy, signing messages with certificates etc.&lt;br /&gt;We support the SDKs, but our response if you ask us how to directly invoke the services on the wire is "good luck to you". This has not caused us much of a problem to date, and if you can't use our SDKs for Java, .Net, PHP, or Python, let us know and if you have a strong case we may build one for just your language. Probably not though, we've covered quite a few bases.&lt;/p&gt;&lt;p&gt;The first SDK we produced for our services was ready for Microsoft's TechEd conference in Barcelona in 2006. At that time, we only supported the .Net environment, largely because we chose to launch at that event. We built that first SDK on the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=018A09FD-3A74-43C5-8EC1-8D789091255D&amp;amp;displaylang=en"&gt;WSE3&lt;/a&gt; framework, which handled &lt;a href="http://www.w3.org/2002/ws/databinding/"&gt;databinding&lt;/a&gt;, cryptography etc, we just put in a custom task or two and tweaked the processing pipeline. We followed a similar approach for the first Java SDK we produced later, based on &lt;a href="http://xfire.codehaus.org/"&gt;Xfire&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;However when we tackled the PHP and Python SDKs we took a step back and decided, rather than a databinding approach, to go for templating instead. Most of the messages that are exchanged by the SDK are very small, and there aren't that many. The complexity of SOAP message transfer is all about what I call header gunk. And that's why we ship SDKs, to hide that gunk that no developer ever wants to see, and to make sure they write code in a paradigm they are used to; object rather than message oriented. Most of the time this approach is deemed good, and Service SDKs are considered to be a good sign of SOA maturity. FWIW.&lt;/p&gt;&lt;p&gt;We're now aiming to get to the point where all our APIs are generated from a highly controlled model Schema -&amp;gt; WSDL -&amp;gt; Messages -&amp;gt; &lt;a href="http://web21c.bt.com/2007/07/"&gt;Documentation&lt;/a&gt; -&amp;gt; Object mapping -&amp;gt; SDK generation. So that the team who works on exposure has as little work to do as possible, and follows the &lt;a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself"&gt;DRY&lt;/a&gt; principle. And of course so teams who work on the services themselves have encoded guidance on how to expose themselves, as it's very easy to create bad APIs!&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;There were a couple of pain points around using the WSE stack. &lt;/p&gt;&lt;p&gt;Firstly, having this 11.4MB download required, which we had no control over. &lt;/p&gt;&lt;p&gt;Secondly, the dependency on the Windows Certificate Store. Because WSE wouldn't just pick up certificates from the file system, folk who wanted to run their web applications on shared servers had to beg their sysadmins to add certs to the cert store, so that IIS had access to them. What a pain. And that pain has gone nowhere with WCF; the security credential used by the running application must have appropriate access to the cert store. Microsoft WHY!!!??? Why can't you just allow certs to be picked up and read from the file system like other peoples stacks?&lt;/p&gt;&lt;p&gt;So &lt;a href="http://web21c.bt.com/news_items/36"&gt;we've changed things ourselves&lt;/a&gt;, and &lt;a href="http://www.woloszyn.org/2008/01/03/how-to-verify-digital-signatures-of-xml-documents-without-wse3/"&gt;thanks to some sterling and brain-aching work by Piotr and Josh&lt;/a&gt;, after an original proof of concept from &lt;a href="http://blog.iclutton.com/"&gt;Robbie&lt;/a&gt;, we have removed the dependency on the Windows Certificate store, and also removed additional dependencies for our .Net SDK, other than the .Net 2.0 runtime itself. Though if you want to use the cert store, that option is still available, we still support it.&lt;/p&gt;&lt;p&gt;So now the amount of config you have to handle for our SDK is small and simple:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;appSettings&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Web21c_Environment&lt;/span&gt;" &lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;sandbox&lt;/span&gt;"&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;certFile&lt;/span&gt;" &lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;yourcert_Sandbox.pfx&lt;/span&gt;"&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;certPassword&lt;/span&gt;" &lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;certpassword&lt;/span&gt;"&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;serverCertFile&lt;/span&gt;" &lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;btsdkservercert-acorn.cer&lt;/span&gt;"&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;appSettings&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;system.web&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;webServices&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;soapExtensionTypes&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;BT.Sdk.Core.Web21cSoapExtension, BT.Sdk.Core&lt;/span&gt;" &lt;span style="color:red;"&gt;priority&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1&lt;/span&gt;" &lt;span style="color:red;"&gt;group&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;high&lt;/span&gt;" &lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;soapExtensionTypes&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;webServices&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;system.web&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;There. That's better now, isn't it?&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;if there's anyone from MSFT reading this blog who has an opinion (&lt;a href="http://blogs.msdn.com/shycohen/"&gt;Shy&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/donsmith/"&gt;Don&lt;/a&gt;, as friends of mine you spring to mind), and thinks they could've persuaded us to use the heavy WCF stack rather than the templating and custom pipeline we've developed, I'd love to hear your responses.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-6429182058778364862?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/6429182058778364862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=6429182058778364862' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/6429182058778364862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/6429182058778364862'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/01/why-we-lost-wse-and-didn-migrate-to-wcf.html' title='Why we lost WSE and didn&amp;#39;t migrate to WCF'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-1856465018480540852</id><published>2008-01-20T01:43:00.000-08:00</published><updated>2008-01-20T02:16:03.488-08:00</updated><title type='text'>Crunching data on the cheap</title><content type='html'>This is one of the more interesting uses for the Amazon S3+EC2 infrastructure I've seen; &lt;a href="http://open.blogs.nytimes.com/tag/hadoop/"&gt;converting 11 million archive New York Times articles from scanned TIFF files to PDF in under 24 hours&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Wow. Super computing with no academic infrastructure, no Crays, and no months-of-planning. Oh, and batch processing without the &lt;a href="http://www.sun.com/service/sungrid/index.jsp"&gt;Sun Grid&lt;/a&gt; (read the &lt;a href="http://www.beyondvc.com/2006/03/grid_20.html"&gt;comments here&lt;/a&gt;, to find out what the Sun Grid is not, and why it should've been great for this kind of app while it's not really purposed for web-apps)&lt;br /&gt;&lt;br /&gt;This tiff-to-pdf conversion job shows two trends that we will be seeing a lot more of. Firstly, a shift to hyper-concurrent processing as the default, and secondly, the rapid provisioning and deprovisioning of virtual machines to perform specific jobs. When crunching large data sets for specialised jobs it's often the case that significant infrastructure is needed for small bursts of time. This example shows clearly how getting hold of that infrastracture is &lt;strong&gt;now&lt;/strong&gt; operational expenditure, not capital expenditure, and any CFO who hasn't woken up and worked that out yet, and started telling the IT boys they are probably decreasing shareholder value every time they buy a server, needs to smell the coffee.&lt;br /&gt;&lt;br /&gt;There's a whole cottage industry springing up around the Amazon services as folk take those utility tools, and built specific applications on top of them. I wonder if Amazon is watching that space, and if it will start acquiring companies who provide domain specific &lt;a href="http://en.wikipedia.org/wiki/Autonomic_Computing"&gt;autonomics&lt;/a&gt; on top of their infrastructure? My guess is that within as short a space as 12 months people will rarely be buying services direct from Amazon, but rather from a value-add-reseller who provides something directly usable out of the box, and as that happens, will Amazon want to get closer to the money? Especially as other utility compute providers enter the market and there is consolidation and normalization in the "storage + virtual machine on demand" area. I don't know the answer to that one, gonna be interesting to watch.&lt;br /&gt;&lt;br /&gt;In the international calling minutes world there is so much similarity between the different termination providers that minutes are traded electronically. After all, a phone call is a phone call is a phone call. Your call with your provider may take a different route today to the one it takes tomorrow, and this is known as Least Cost Routing, and looks a lot like most other electronic trading systems when you dig deep enough.&lt;br /&gt;&lt;br /&gt;I wonder if the same will apply with utility computing? Least Cost &lt;a href="http://en.wikipedia.org/wiki/Autonomic_Computing"&gt;MIPS&lt;/a&gt;?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-1856465018480540852?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/1856465018480540852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=1856465018480540852' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/1856465018480540852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/1856465018480540852'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/01/crunching-data-on-cheap.html' title='Crunching data on the cheap'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-1670775456474756417</id><published>2008-01-14T11:34:00.000-08:00</published><updated>2008-01-14T03:35:35.351-08:00</updated><title type='text'>Life support system unplugged</title><content type='html'>&lt;p&gt;Seems the worst part of moving house is being broadband-less for the best part of two weeks, at least, just having intermittent access to the net. I'm pretty sure Tika would disagree, but she takes control of packing and unpacking, and I, just a mule. Need two trips to the tip, which should get squeezed in today&lt;/p&gt;&lt;p&gt;My RSS feeder is choking, might just have to do a bulk "mark as read".&lt;/p&gt;&lt;p&gt;My &lt;a href="http://twitter.com/san1t1" target="_blank"&gt;twitter&lt;/a&gt; feed is desperately out of control and out of date - that only takes half a day at the best of times!&lt;/p&gt;&lt;p&gt;Tomorrow morning I head off to Glasgow for a four day offsite. Where I will have to battle many others for my slicec of what will no doubt be a too-small-pipe. Still, posting blog entries is pretty much text only, they might just squeeze through the bottle neck of 50 techies on a 4Mb connection. So maybe I'll give you something worthwhile to read soon. This post was a waste of your time, and mine.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-1670775456474756417?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/1670775456474756417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=1670775456474756417' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/1670775456474756417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/1670775456474756417'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/01/life-support-system-unplugged.html' title='Life support system unplugged'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-2678145735112348758</id><published>2008-01-09T12:53:00.000-08:00</published><updated>2008-01-09T04:56:51.701-08:00</updated><title type='text'>Where did my database go?</title><content type='html'>&lt;p&gt;Once upon a time, when I was coding a lot more for my day job, my SQL skills were pretty hot. Least, I thought so. I'd do pretty full on crunching with large data sets; I remember one project in particular, which was 75% SQL, 10% "Classic" VB, 10% Excel and 5% VB Script, that crunched itemised bills which totalled millions of pounds. Needed to be accurate and performant, even thought it was offline, I remember running one batch job that lasted about a week; mind you it only had a teeny NT4 server to run on, looks pathetic now; the apps output wasn't very time sensitive, but it did have to finish each job!&lt;/p&gt;&lt;p&gt;Pretty much every development that I've done in the last 15 years used an RDMBS of some kind. That meant understanding SQL.&lt;/p&gt;&lt;p&gt;But I see a sea-change. I see the emergence of hosted database platforms, except they're not general purpose RDMBS databases, they tend to be more special purpose.&lt;/p&gt;&lt;p&gt;I'm sure the first one that jumps to most people minds is Amazon's SimpleDB, after all the Web Services team at Amazon seems to do no wrong. It's not an RDMBS, &lt;a href="http://marcelo.sampasite.com/brave-tech-world/Amazon-SimpleDB-What-nobody-is-t.htm" target="_blank"&gt;apparently it's more like a directory service&lt;/a&gt;, with REST and SOAP interfaces. Yet to see what interesting apps get built on it, and how publicly we get told.&lt;/p&gt;&lt;p&gt;Next on the list is &lt;a href="http://www.salesforce.com/platform/" target="_blank"&gt;Force.Com&lt;/a&gt;. Seems this gives you a reduced SQL set called SOQL; notably UPDATE, INSERT and DELETE are missing, instead you SELECT a bunch of objects, and then act on them through a dot notation. So a bit of a mix and match.&lt;/p&gt;&lt;p&gt;There's quite a few others, and one could even argue that the Blogger platform I'm writing this on is a database service, inasmuch as it stores data, and links it to other things like the comment you may add.&lt;/p&gt;&lt;p&gt;I like the look of &lt;a href="http://astoria.mslivelabs.com/" target="_blank"&gt;Astoria&lt;/a&gt; too; &lt;a href="http://blogs.msdn.com/pablo/" target="_blank"&gt;Pablo&lt;/a&gt; is one of the few folk who work at Microsoft who seem to grok the web. If this initiative does what I hope it will do, then I'll be able to develop my data tier locally, and deploy to the cloud with very little friction. They do make good and consistent, if huge and bloated, developer tools. I think the combo of the &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx" target="_blank"&gt;Asp.Net MVC&lt;/a&gt; framework and this piece is gonna actually make developing web apps on a Microsoft platform a possible choice again; though they do need something like &lt;a href="http://script.aculo.us/" target="_blank"&gt;Scriptaculous&lt;/a&gt; or &lt;a href="http://dojotoolkit.org/" target="_blank"&gt;Dojo&lt;/a&gt; to pull it all together at the front end, not sure their AJAX framework is quite there; and I'm concerned they may get distracted by future plans like &lt;a href="http://labs.live.com/volta/" target="_blank"&gt;Volta&lt;/a&gt;; it's too early to say whether that's the future of development.&lt;/p&gt;&lt;p&gt;Another trend, which has been around for a good long while now, is the abstraction away from the database, at least for developers, by &lt;a href="http://en.wikipedia.org/wiki/Object-relational_mapping" target="_blank"&gt;ORM frameworks&lt;/a&gt;, sometimes built into a larger framework (eg Rails, Django). I'm pretty excited about the &lt;a href="http://shards.hibernate.org/" target="_blank"&gt;Hibernate Shards&lt;/a&gt; project for breaking the distributed database problem, without the average developer having to learn how that all complexity works, but it may be moot soon with all the cloud based data storage services springing up. &lt;/p&gt;&lt;p&gt;It seems to be a current wisdom that startups should reach "scale" before thinking about business models. Which may or may not be correct, and I'll let you draw your own conclusions. Does look though, that modern, high level, services on the web and programming frameworks are gonna start solving that "write cheap and cheerful code to scale up, deploy to scale out" problem. &lt;/p&gt;&lt;p&gt;I reckon In the next two years we'll all be writing extremely &lt;a href="http://en.wikipedia.org/wiki/Concurrent_computing" target="_blank"&gt;concurrent&lt;/a&gt; code with highly distributed data stores all over the web (let's just forget the emotional term database and let DBAs find a new career by themselves) and wonder why we ever did it the old way.&lt;/p&gt;&lt;p&gt;Note. There are &lt;a href="http://en.wikipedia.org/wiki/Safe_Harbor" target="_blank"&gt;safe harbor&lt;/a&gt;, copyright, privacy and &lt;a href="http://en.wikipedia.org/wiki/Data_Protection_Act" target="_blank"&gt;DPA&lt;/a&gt; problems to be resolved, and, &lt;a href="http://www.amazon.co.uk/Printing-Press-Agent-Change-Volumes/dp/0521299551" target="_blank"&gt;as ever&lt;/a&gt;, technology is ahead of regulation. But, for the purposes of this post, everything is permissible.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-2678145735112348758?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/2678145735112348758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=2678145735112348758' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/2678145735112348758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/2678145735112348758'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/01/where-did-my-database-go.html' title='Where did my database go?'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-4528667656908653923</id><published>2008-01-09T12:29:00.000-08:00</published><updated>2008-01-09T04:32:22.940-08:00</updated><title type='text'>I shouldn't hack hardware</title><content type='html'>&lt;p&gt;Ever since I patched my &lt;a href="http://kbserver.netgear.com/products/DG834Gv1.asp" target="_blank"&gt;Netgear DG384Gv1 wireless router&lt;/a&gt; with a recent firmware update, my broadband's been flaky as hell, and I doubt it's &lt;a href="http://www.eclipse.net.uk/" target="_blank"&gt;my ISP&lt;/a&gt;, as they've been consistently great for the last 4 years, with only one outage that I'm aware of, and that was based at the exchange, so not their fault. It's not an unbundled line.&lt;/p&gt;&lt;p&gt;Serves me right for tweaking.&lt;/p&gt;&lt;p&gt;Did the same to my &lt;a href="http://en.wikipedia.org/wiki/HTC_Universal" target="_blank"&gt;HTC Universal&lt;/a&gt; phone too, simply cos I wanted a really &lt;a href="http://forum.xda-developers.com/showthread.php?t=343736" target="_blank"&gt;thin WinMobile 6&lt;/a&gt; o/s on there. I know fanboys, Windows on the phone, you don't need to tell me, and now it's pretty screwed too. I could try another distribution I suppose.&lt;/p&gt;&lt;p&gt; &lt;em&gt;Just so you know I'm bored to death of all the "Microsoft sucks", "Linux/Apple rulez" comments that end up on far too many blogs and news sites - y'all need to get a life, especially now that there is &lt;a href="http://eeepc.asus.com/uk/product.htm" target="_blank"&gt;growing choice for consumers&lt;/a&gt; out there - so please don't bother polluting my page.&lt;/em&gt; &lt;/p&gt;&lt;p&gt;I've started forwarding my mobile to a softphone running on my computer, my current cell reception ain't great anyway. Dropped calls or rough and ready VOIP? It's a tough decision. Hopefully the router doesn't go down while I'm on the phone...&lt;/p&gt;&lt;p&gt;I'm in the middle of moving, as I've currently mentioned. I'm gonna end up further (as the wires fly) from the local exchange then I am now. I'm changing my ISP too, not that I really want to, but if &lt;a href="http://www.btplc.com/today/benplus/internet_bpl7056.html" target="_blank"&gt;my employer more or less gives it to me for free&lt;/a&gt;, it's a bit of a no-brainer, and it means I'll probably end up with a new &lt;a href="http://www.frequencycast.co.uk/homehub.html" target="_blank"&gt;router&lt;/a&gt;, that they &lt;a href="http://www.jonathansblog.net/bt_home_hub_reinstall_firmware_from_installation_cd_fix" target="_blank"&gt;patch as part of the service&lt;/a&gt; (which I'm not sure I like). However I'm pleased to be on the sidelines, waving flags, of a project, that is making that particular device a Good Open Source Citizen, which it &lt;a href="http://www.theregister.co.uk/2007/01/25/bt_linux_config/" target="_blank"&gt;hasn't always been&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;I've learnt before, but the lesson I'm reminding myself of is that I should stick to high level software and leave the low level hacking to those who really know what they're doing.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-4528667656908653923?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/4528667656908653923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=4528667656908653923' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/4528667656908653923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/4528667656908653923'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/01/i-shouldn-hack-hardware.html' title='I shouldn&amp;#39;t hack hardware'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-962044676345517629</id><published>2008-01-07T22:38:00.000-08:00</published><updated>2008-01-07T14:46:22.242-08:00</updated><title type='text'>The Onwards Delegation Problem</title><content type='html'>&lt;p&gt;&lt;/p&gt;&lt;p&gt;At the heart of the recent &lt;a href="http://scobleizer.com/2008/01/04/erased/" target="_blank"&gt;Scoble vs Facebook&lt;/a&gt; problem we see one of the big potential evils of the Web; insecure onwards delegation. A real tough nut to crack.&lt;/p&gt;&lt;p&gt;Would you like to come rifling through my filing cabinets? Perhaps take and copy a few things you think are interesting? There's very few people I'd trust to do that, maybe just my bookkeeper. What risks am I exposed to if my bookkeeper and I share data in, say Google Spreadsheets? Because we can. Because it's there. Because it's free.&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;(B-&lt;strong&gt;oo&lt;/strong&gt;-&lt;strong&gt;kk&lt;/strong&gt;-&lt;strong&gt;ee&lt;/strong&gt;-p-e-r incidentally, is the only word in the English language I'm aware of with three double letters in a row. I'd love to be shown others...)&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Google Docs, and similar applications which work in the internet security domain often have these super-cool collaboration features, which enable me and my numbers guy to do work together so much more easily, with so much friction removed, like, snail-mail. It wasn't very long ago folks, not really, that most post that turned up in your house was actually important, and not just paper copies of stuff you could see, at your leisure, online. You used to run your life through things that arrived by post - statements, bills, magazine subscriptions you didn't see any other way&lt;/p&gt;&lt;p&gt;Any data I share on this inter-web 2.0 thing, is not secure from vindictive behaviour by my chosen collaborators. If a so-called-friend turns on me; or maybe I don't pay a bill, then someone might start forwarding copies of my data, and&lt;strong&gt; &lt;/strong&gt;&lt;em&gt;maybe even delegated rights to change stuff&lt;/em&gt; along with it. In some industries, such as banking or health, there's a good deal of control over delegation; consequently even with someone on the inside, it's increasingly hard to hack a bank. Meaning sadly another possible childhood "what I want to be when I grow up" dream bit the dust. &lt;/p&gt;&lt;p&gt;All this modern social software though, it makes it pretty easy to share stuff, consequently maybe too many folk can get at some pretty personal details now.&lt;/p&gt;&lt;p&gt;I think it's quite possible we have a couple of high profile privacy scandals coming up soon, where a new kind of phishing attack appears that gets virally into some social network and starts leaking "innocent" peoples data to nasty people as it spreads. How many of you, if you're in my Facebook friends list, and I tell you to add a seemingly cool application, go ahead and do that? Do you click all the defaults for security, and maybe let it then act as you and send itself to your list? How identifiable does that make you? How many links, on or off facebook does the agent need to follow - with the delegated rights to your profile - in order to do damage to your online reputation, or worse, in real-i-tea. Let me ask you, before you added the evil app I seemed to recommend, did you think that &lt;em&gt;my &lt;/em&gt;account could be compromised?&lt;/p&gt;&lt;p&gt;What we need is some system that says and checks up. For sure, ok, &lt;strong&gt;you &lt;/strong&gt;can see the names of &lt;strong&gt;all&lt;/strong&gt; my girlfriends, but don't tell anyone else (they get jealous). And if you do I curse you with my fiery daemons and my killer LISP attack.&lt;/p&gt;&lt;p&gt;I need to have full visibility of what people do with their access to my data, so that I can analyse it for security breaches - in real time, probably using a highly trusted agent that someone else wrote... (ad infinitum).&lt;/p&gt;&lt;p&gt;Better still, i need to have full control of delegation rights, where I can specify user rights such as canReadUntil, canWriteUntil, canTransferRights, and use them for specifying delegation tokens. Course it needs to be user understandable - and therein lies the conundrum. As social software becomes easier to use, across devices and networks, and with the flexible mashability that is so useful for avoiding context switching (between applications), people will release more and more data into a collaborative cloud without second guessing the consequences. Early adopters are vulnerable especially if they think themselves invincible. &lt;/p&gt;&lt;p&gt;What we have right now just isn't good enough for a world of consumers who &lt;em&gt;want&lt;/em&gt; software agents to act on their behalves. Not that they've realised yet that it already happens...&lt;/p&gt;&lt;p&gt;So, guys at &lt;a href="http://blog.oauth.net/" target="_blank"&gt;oAuth&lt;/a&gt;, &lt;a href="http://research.microsoft.com/projects/SecPAL/" target="_blank"&gt;SecPal&lt;/a&gt;, or anyone else with some interesting delegation work going on, please tell me, how's the plumbing going? And how on earth do we surface it to the novice so that they can use it, without it feeling like a big step backwards just for the sake of security (perhaps like Vista does)? &lt;/p&gt;&lt;p&gt;Am I missing a trick, are we seeing instead a &lt;a href="http://www.matrixmasters.com/spirit/html/2a/2b/2c/2c.html" target="_blank"&gt;natural evolution towards a universal mind meld&lt;/a&gt;, and the inevitable, painful, data leaks just a way of bringing us closer to full Gaian consciousness? &lt;/p&gt;&lt;p&gt;Whatever, I'm sure it would all be fine as long as we could just &lt;a href="http://youtube.com/watch?v=WVXGC896Jdw" target="_blank"&gt;be excellent to each other&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-962044676345517629?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/962044676345517629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=962044676345517629' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/962044676345517629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/962044676345517629'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/01/onwards-delegation-problem.html' title='The Onwards Delegation Problem'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-987265516516570596</id><published>2008-01-05T21:21:00.000-08:00</published><updated>2008-03-30T03:36:09.126-07:00</updated><title type='text'>songs_of_love_and_pain.mp3</title><content type='html'>&lt;p&gt;When I decided to post mixes on this blog, I intended to only post brand new ones, and not any that I'd made before. But then, as we are learning, on this blog, everything is permissible.&lt;/p&gt;&lt;p&gt;There's a reason I'm changing my mind. Maybe this will be an exception. The circumstances which lead to it are pretty unusual and include one event in particular I hope never to experience the like of again.&lt;/p&gt;&lt;p&gt;&lt;a href="http://64.22.75.56/mixes/songs_of_love_and_pain.mp3" target="_blank"&gt;Here's the link to the file&lt;/a&gt;. It's about 97Mb, but should stream and download just fine. Nobody reported problems with the last one.&lt;/p&gt;&lt;p&gt;So why the change of heart? Why share with you a mix I made over a year ago, against my previous judgement of keeping things fresh?&lt;/p&gt;&lt;p&gt;Well, last night I was out, at Max, my brother-out-law's fortieth birthday party, at the &lt;a href="http://www.myspace.com/miners_space" target="_blank"&gt;Miners Arms&lt;/a&gt;, &lt;a href="http://maps.google.co.uk/maps?f=l&amp;amp;hl=en&amp;amp;geocode=&amp;amp;time=&amp;amp;date=&amp;amp;ttype=&amp;amp;q=miners+arms&amp;amp;near=mina+road+bristol&amp;amp;sll=51.47037,-2.575951&amp;amp;sspn=0.02422,0.05476&amp;amp;ie=UTF8&amp;amp;ll=51.471734,-2.577238&amp;amp;spn=0.024219,0.05476&amp;amp;z=15&amp;amp;iwloc=A&amp;amp;om=1" target="_blank"&gt;St Werburghs&lt;/a&gt;, Bristol. He and I have become pretty good friends over the years, we share a deep love for my sister, and various children, including their two and my daughter. Seems Max's thirties have been rather dominated by child rearing; their eldest turned 10 in September. I didn't really know him much before the kids turned up, but I imagine his twenties to be somewhat different to the last 10 years.&lt;/p&gt;&lt;p&gt;There were many folk at this party who I have known, some more than others, on and off, for over a decade, and they hail, on the whole, from the Bristol Free Party scene, and the &lt;a href="http://en.wikipedia.org/wiki/Easton,_Bristol" target="_blank"&gt;Easton&lt;/a&gt; Temporary Autonomous Zone, where I lived for a few years. I've spent a good number of nights-turning-into-days dancing around fires, at festivals, in front of sound systems, in warehouses, abandoned buildings, pubs and a number of random venues with them. &lt;/p&gt;&lt;p&gt;There was one person, very dear to me, who was missing. He would've been more than welcome, and most of the people there were his friends, and held him in very high regard. But sadly, Joseph Jordan (Joe), my friend and brother in arms, chose to take his own life at the start of summer a couple of years ago. I don't think we'll ever really know why. Many aspects of his life appeared to be improving for him, after a very difficult few years. Of course he had things going on in his life, like most of us, that he would've changed if he could. But regrettably it seems that a dark cloud came over him that night, from which he could see no escape. &lt;/p&gt;&lt;p&gt;I still miss him greatly, and still find it hard to forgive him for leaving us all the way he did. It's events like the one last night, at which he would entertain, share the joy and love, and drown the sorrows that I miss him most. He was part of this gang, and although I spent time last night with many excellent folk who I feel privileged to count among my friends, he was special to me, and I'm sorry to everyone else who was there, but it was less of a party for me without him, though we raised our glasses several times and toasted his memory.&lt;/p&gt;&lt;p&gt;Our daughters were good friends and much the same age, I wish they remained closer then they are now, but they only get to see each other now comparatively rarely. &lt;/p&gt;&lt;p&gt;The last time I saw Joe we camped out, built a fire by a river &lt;a href="http://maps.google.co.uk/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;time=&amp;amp;date=&amp;amp;ttype=&amp;amp;sll=50.55448,-3.823843&amp;amp;sspn=0.024703,0.05476&amp;amp;ie=UTF8&amp;amp;ll=50.559836,-3.814938&amp;amp;spn=0.001544,0.003422&amp;amp;t=h&amp;amp;z=19&amp;amp;om=1" target="_blank"&gt;here&lt;/a&gt; in Dartmoor, played guitar, tried to sing without embarrassment, told bad jokes, and talked about watching the girls grow up, and how much trouble they were going to cause us as teenagers. That last part at least won't change, it's just trouble I can't share with Joe now, which I hope to always regret.&lt;/p&gt;&lt;p&gt;Some of his artwork hangs in our home; he was greatly talented and drew fey creatures, dragons, and fantastical landscapes, almost as if he was showing us the world he wanted to live in. It's sad that great artistic talent is often accompanied by melancholy, but I suppose that's the way the muse sometimes likes to speak.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.google.com/timsan1t1/R3_tzNOtlsI/AAAAAAAAAE4/-rQaDnx0wlQ/cover%5B2%5D"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="232" alt="cover" src="http://lh3.google.com/timsan1t1/R3_tztOtltI/AAAAAAAAAFA/lzCfxvHPPwQ/cover_thumb" width="244" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;detail from one of Joe's paintings.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;This was a mix that I thought I made for him, posthumously, but of course I actually made it for me, and there are several parts of it which bring tears to my eyes. This weeping is part mourning, part reminiscing, and part celebration of the fabulous being that he was. The music touches on themes of love - shared, lost, and unrequited, and is very different, as promised, to &lt;a href="http://san1t1.blogspot.com/2008/01/coldgentleassassinmp3.html" target="_blank"&gt;the last one&lt;/a&gt; I posted. It's probably no coincidence that some of the artists included also lost their lives in unhappy circumstances, and were troubled along their own paths, &lt;a href="http://en.wikipedia.org/wiki/Nick_Drake" target="_blank"&gt;Nick Drake&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Elliott_Smith" target="_blank"&gt;Elliot Smith&lt;/a&gt; in particular spring to mind. Many of the musicians on this mix are among my favourites, you probably wouldn't regret exploring their works further if you appreciate what you hear. The &lt;a href="http://www.dragcity.com/" target="_blank"&gt;Drag City&lt;/a&gt; label gets quite an outing here too.&lt;/p&gt;&lt;p&gt;I'm sharing it in the hope that you it touches you in a way that reminds you of absent friends who you miss, and encourages you to keep the bond with those you love close, as we never know what the fates have lined up for us.&lt;/p&gt;&lt;p&gt;Before I give you the track-listing, I'd like to quote from &lt;a href="http://www.neilinnes.org/realneilaudio/raggy.ra" target="_blank"&gt;one of Joe's favourite songs&lt;/a&gt; (real audio link) which I can still hear him singing in the echoes of my mind. It's written by a very talented and versatile musician, &lt;a href="http://www.neilinnes.org/linktree.htm" target="_blank"&gt;Neil Innes&lt;/a&gt;, and is probably very familiar to those of you of a certain age, though perhaps not with the pathos I attach to it within the context of this posting.&lt;/p&gt;&lt;p align="center"&gt;&lt;em&gt;It's not much of a life when you're just a pretty face&lt;br /&gt;Just to be whoever you are is no disgrace&lt;br /&gt;Don't be scared if you don't fit in&lt;br /&gt;Look who's in the reject bin!&lt;/em&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;em&gt;It's the Raggy Dolls, Raggy Dolls&lt;br /&gt;Dolls like you and me.&lt;br /&gt;Raggy Dolls, Raggy Dolls,&lt;br /&gt;Made imperfectly&lt;/em&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;/p&gt;&lt;table cellspacing="0" cellpadding="2" width="470" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="61"&gt;&lt;p align="center"&gt;&lt;strong&gt;Start&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="129"&gt;&lt;p align="center"&gt;&lt;strong&gt;Artist&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="132"&gt;&lt;p align="center"&gt;&lt;strong&gt;Track&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;p align="center"&gt;&lt;strong&gt;Source&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="62"&gt;00:00&lt;/td&gt;&lt;td valign="top" width="131"&gt;Archer Prewitt&lt;/td&gt;&lt;td valign="top" width="132"&gt;Way of the Sun&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.discogs.com/release/960523" target="_blank"&gt;Gerroa Songs&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="63"&gt;04:45&lt;/td&gt;&lt;td valign="top" width="132"&gt;Laura Veirs&lt;/td&gt;&lt;td valign="top" width="132"&gt;Ether Sings&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.discogs.com/release/1190566" target="_blank"&gt;Carbon Glacier&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="63"&gt;08:25&lt;/td&gt;&lt;td valign="top" width="133"&gt;Elliot Smith&lt;/td&gt;&lt;td valign="top" width="132"&gt;Roman Candle&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.discogs.com/release/853902" target="_blank"&gt;Roman Candle&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;11:52&lt;/td&gt;&lt;td valign="top" width="133"&gt;Sufjan Stevens&lt;/td&gt;&lt;td valign="top" width="132"&gt;Chicago&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.discogs.com/release/640112" target="_blank"&gt;Illinois&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;17:39&lt;/td&gt;&lt;td valign="top" width="133"&gt;Smog&lt;/td&gt;&lt;td valign="top" width="132"&gt;Rock Bottom Riser&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.discogs.com/release/494447" target="_blank"&gt;A River Ain't Too Much to Love&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;23:04&lt;/td&gt;&lt;td valign="top" width="133"&gt;Bonnie 'Prince' Billy&lt;/td&gt;&lt;td valign="top" width="132"&gt;Ain't you Wealthy&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.discogs.com/release/417742" target="_blank"&gt;Master and Everyone&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;27:04&lt;/td&gt;&lt;td valign="top" width="133"&gt;M Ward&lt;/td&gt;&lt;td valign="top" width="132"&gt;Were you there?&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.discogs.com/release/1085932" target="_blank"&gt;Duet for Guitars #2&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;29:37&lt;/td&gt;&lt;td valign="top" width="133"&gt;The Tami Show&lt;/td&gt;&lt;td valign="top" width="132"&gt;I Can't give you anything but love&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://cdbaby.com/cd/tamishow" target="_blank"&gt;Grind My Nails&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;31:58&lt;/td&gt;&lt;td valign="top" width="133"&gt;Gary Higgins&lt;/td&gt;&lt;td valign="top" width="132"&gt;It didn't take too long&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.discogs.com/release/1068716" target="_blank"&gt;Red Hash&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;35:44&lt;/td&gt;&lt;td valign="top" width="133"&gt;Devendra Benhart&lt;/td&gt;&lt;td valign="top" width="132"&gt;Rejoicing in the Hands&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.discogs.com/release/472287" target="_blank"&gt;Rejoicing In the Hands&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;37:20&lt;/td&gt;&lt;td valign="top" width="133"&gt;Judee Sill&lt;/td&gt;&lt;td valign="top" width="132"&gt;Crayon Angels&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.discogs.com/release/1090091" target="_blank"&gt;Judee Sill&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;40:00&lt;/td&gt;&lt;td valign="top" width="133"&gt;Low and Spring Heel Jack&lt;/td&gt;&lt;td valign="top" width="132"&gt;Hands So Small&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.discogs.com/release/359208" target="_blank"&gt;Bombscare EP&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;43:50&lt;/td&gt;&lt;td valign="top" width="133"&gt;Cat Power&lt;/td&gt;&lt;td valign="top" width="132"&gt;I Found a Reason&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.discogs.com/release/442522" target="_blank"&gt;The Covers Record&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;45:22&lt;/td&gt;&lt;td valign="top" width="133"&gt;Vic Chesnutt&lt;/td&gt;&lt;td valign="top" width="132"&gt;In My Way Yes&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.discogs.com/artist/Vic+Chesnutt" target="_blank"&gt;Silver Lake&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;50:30&lt;/td&gt;&lt;td valign="top" width="133"&gt;Giant Sand&lt;/td&gt;&lt;td valign="top" width="132"&gt;Bottom Line Man&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.amazon.co.uk/Chore-Enchantment-Giant-Sand/dp/B00004R64W" target="_blank"&gt;Chore of Enchantment&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;55:05&lt;/td&gt;&lt;td valign="top" width="133"&gt;Lambchop&lt;/td&gt;&lt;td valign="top" width="132"&gt;Caterpillar&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.discogs.com/release/584938" target="_blank"&gt;Is a Woman&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;61:17&lt;/td&gt;&lt;td valign="top" width="133"&gt;Edith Frost&lt;/td&gt;&lt;td valign="top" width="132"&gt;Tender Kiss&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.amazon.co.uk/Telescopic-Edith-Frost/dp/B00000AG74" target="_blank"&gt;Telescopic&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="64"&gt;64:45&lt;/td&gt;&lt;td valign="top" width="133"&gt;Nick Drake&lt;/td&gt;&lt;td valign="top" width="132"&gt;Northen Sky&lt;/td&gt;&lt;td valign="top" width="143"&gt;&lt;a href="http://www.discogs.com/release/414366" target="_blank"&gt;Bryter Later&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-987265516516570596?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/987265516516570596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=987265516516570596' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/987265516516570596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/987265516516570596'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/01/songsofloveandpainmp3.html' title='songs_of_love_and_pain.mp3'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-1590075881930097450</id><published>2008-01-04T17:11:00.000-08:00</published><updated>2008-01-04T09:13:50.279-08:00</updated><title type='text'>Warm Spicy Apple Juice</title><content type='html'>&lt;p&gt;I've had a pot of this on the go nearly all winter. I reckon it fends of colds, or maybe I just have a good immune system. Here's how I make it. I have to thank my daughter Savannah for helping come up with the recipe.&lt;/p&gt;  &lt;p&gt;1 litre of concentrated apple juice. No point using fresh stuff. Same amount of water, use the bottled stuff if you want, costs more then petrol (gas) does though, and you won't go as far with it. Throw in some sliced fresh ginger. Some cloves. Some whole allspice. Maybe half a cinnamon stick, broken a little. A lemon chopped into rough quarters. Perhaps some dried lime leaves. Simmer for hours, with a lid on the pot, until the lemon flesh starts breaking up.&lt;/p&gt;  &lt;p&gt;Drink half of it, then top up with more apple juice and water and heat up again. It's good to do this for about 3 days, unless you finish the whole pot in one go.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-1590075881930097450?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/1590075881930097450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=1590075881930097450' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/1590075881930097450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/1590075881930097450'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/01/warm-spicy-apple-juice.html' title='Warm Spicy Apple Juice'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-4148674086029714521</id><published>2008-01-04T03:08:00.000-08:00</published><updated>2008-01-03T19:16:33.576-08:00</updated><title type='text'>Twitter - Telepathy 0.6.</title><content type='html'>&lt;p&gt;Ok, I'm a recent convert. Like &lt;a href="http://confusedofcalcutta.com/" target="_blank"&gt;JP&lt;/a&gt; I've been watching people use &lt;a href="http://www.twitter.com/" target="_blank"&gt;it&lt;/a&gt;. I won't get version one of the &lt;a href="http://www.amazon.com/Kindle-Amazons-Wireless-Reading-Device/dp/B000FI73MA" target="_blank"&gt;Kindle&lt;/a&gt; either. &lt;/p&gt;&lt;p&gt;But twitter is interesting so I'm trying now. Feels like it's getting me a little closer to people, and it feels a bit like the boundary between me and the people I follow and are following me is getting thinner. People have more awareness of me, and we communicate on a more intimate basis. (Well, fellow tweeters and I do, which to be fair is not the vast majority of my friends, or even most folk on my Facebook list).&lt;/p&gt;&lt;p&gt;That boundary though, the distance that keeps us in the dark to each others thoughts and deeds has been getting thinner for quite some time, ever since the first design was sketched out on the cave wall and we went and killed deer collaboratively and then recorded with pride our deeds, while picking meat from our teeth with the bones. Yes, ever since then we've been getting closer and closer. There is a universal mind meld going on. It's just been taking a helluva long time. &lt;/p&gt;&lt;p&gt;Speech was a challenge. Look how many languages the world speaks! I'm not suggesting Esperanto or anything, I love the diversity we have, but if I'd been around when folk started talking I'd've tried damn hard to make sure that it was at least a bit easier for us all to make sense to each other.&lt;/p&gt;&lt;p&gt;But I suppose that's the case with a development process too, early versions have missing features, and sometimes inconsistencies, especially in large scale projects; the remit "Make the world communicate well" is a pretty big one, especially when you have no words to describe what "communicate" or "world" mean.&lt;/p&gt;&lt;p&gt;I guess the very fact that we talk at all is down to some crazy evolutionary innovation at some point. Must've been fun to be there at the beginning, and understand what a great thing speech was, how it was gonna change the world. Wow. People could talk to each other, even pass messages along, and we got cool prototypes of broadcasting.&lt;/p&gt;&lt;p&gt;That was just the start. Somebody picked up on this speech thing, saw what was going on with art, and came up with symbols, characters, alphabets, and did speech persistence. We could now write things down and store them. Wowee.&lt;/p&gt;&lt;p&gt;It gets better. We got even more organised. We worked together to deliver these persistent messages to each other. We copied them. We distributed them. We got mail! &lt;/p&gt;&lt;p&gt;Then some bright sparks put sounds and words down wires and into the air, and sent them between billions of places, using various forms of magic unfathomable to most.&lt;/p&gt;&lt;p&gt;All this time, with each innovation, we communicated in more detail, and with more depth, and with higher selection and choice of whom we shared communiqués with.&lt;/p&gt;&lt;p&gt;The development release history looks like this. And I think generally accepted ubiquity would do for the release dates.&lt;/p&gt;&lt;table cellspacing="0" cellpadding="2" width="400" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="60"&gt;0.1&lt;/td&gt;&lt;td valign="top" width="334"&gt;Passing on verbal grunts. Ugh arrr. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="60"&gt;0.1.5&lt;/td&gt;&lt;td valign="top" width="334"&gt;Drawing on cave walls. (I'll spare you a sketch)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="60"&gt;0.1.6&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" width="334"&gt;Handing out stones and bits of bark with drawings on. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="60"&gt;0.2&lt;/td&gt;&lt;td valign="top" width="334"&gt;Speech.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="60"&gt;0.3&lt;/td&gt;&lt;td valign="top" width="334"&gt;Writing (available for the first time in a closed beta, before general launch, a revolutionary step).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="60"&gt;0.4.1&lt;/td&gt;&lt;td valign="top" width="334"&gt;The Postal Service &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="60"&gt;0.4.2&lt;/td&gt;&lt;td valign="top" width="334"&gt;The Printing Press &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="60"&gt;0.5&lt;/td&gt;&lt;td valign="top" width="334"&gt;Fixed Telephonic Comms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="60"&gt;0.5.1&lt;/td&gt;&lt;td valign="top" width="334"&gt;Mobile Telephonic Comms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="60"&gt;0.5.2&lt;/td&gt;&lt;td valign="top" width="334"&gt;One way thought transfer. No, bear with me here. I mean SMS, thanks to it's instant delivery.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="60"&gt;0.5.3&lt;/td&gt;&lt;td valign="top" width="334"&gt;Instant Messaging. Two way thought transfer.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="60"&gt;0.5.4&lt;/td&gt;&lt;td valign="top" width="334"&gt;Facebook (sorry Mark, just a point release, I've had an address book for years, though it IS nice to have a persistent and smart one, thank you for that) &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="60"&gt;0.6&lt;/td&gt;&lt;td valign="top" width="334"&gt;Twitter&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;I'm proud to be announcing the future release plans at Telepath World 2008. A whole jump ahead from when y'all had telephones, and congratulations &lt;/strong&gt;&lt;a href="http://www.bizstone.com/" target="_blank"&gt;&lt;strong&gt;Biz&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;, it's a really big step.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;You might disagree with me on this, but then, nothing is true, right?&lt;/p&gt;&lt;p&gt;Why do I say this, what is it about Twitter that gets us more telepathic than mere telephonic?&lt;/p&gt;&lt;p&gt;Is it because we have the combination of targetable, asynchronous, filterable, broadcastable, cross channel communications?&lt;/p&gt;&lt;p&gt;Partly.&lt;/p&gt;&lt;p&gt;Is it because I'm enjoying it at the moment?&lt;/p&gt;&lt;p&gt;Maybe.&lt;/p&gt;&lt;p&gt;But mostly it's because of what we do with it, and what we're going to do with it when the concept matures. Everything on the web is a prototype - at least I've been getting told that a bit recently, maybe it's a meme from somewhere. &lt;/p&gt;&lt;table cellspacing="0" cellpadding="2" width="395" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="393"&gt;&lt;h3&gt;&lt;a href="http://en.wiktionary.org/wiki/Telepathy" target="_blank"&gt;telepathy&lt;/a&gt;&lt;/h3&gt;&lt;h5&gt;&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;The sympathetic affection of one mind by the thoughts, feelings, or emotions of another at a distance, without communication through the ordinary channels of sensation. &lt;/h5&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;It sounds to me like every step along the above release plan has been getting us a bit closer to the wikitionary definition. With general release of 0.6 we can share our thoughts with another, or more than one other person. OK, right now there's still a few wrinkles around grouping, selection, signal to noise ratio etc, but it's getting there. &lt;/p&gt;&lt;p&gt;Yeah, we're not quite done, let's call it an early alpha of v0.6 with something Not Quite Invented Yet. And you know, I think I also include within this Twitter release all this attention streaming and social network aggregation. Indeed, I'm sure there's still all to play for as to which companies end up getting it totally right for the long term telepathy market. I doubt that even &lt;a href="http://en.wikipedia.org/wiki/Alexander_Graham_Bell" target="_blank"&gt;Alexander Graham Bell&lt;/a&gt; line has much hereditary stake in relatively recent phone based businesses.&lt;/p&gt;&lt;p&gt;I think perhaps when saying "I don't tweet" becomes like saying "I don't have a phone" then Telepathy v0.6 is ready, and new innovation will be required to maintain the market.&lt;/p&gt;&lt;p&gt;I wonder what's next for telepathy?&lt;br /&gt;What major breakthrough will occur?&lt;br /&gt;It's hard to know how we'll communicate with each other in 5 years time now, let alone in 50. And what changes in social behaviours are required so that we can cope with any future developments on a global level, with such a huge population?&lt;br /&gt;Will the all seeing aliens from the future come and shut down my blog? &lt;/p&gt;&lt;p&gt;Whatever happens, seems the engineering bods are working hard on stuff, maybe they discovered agile.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-4148674086029714521?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/4148674086029714521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=4148674086029714521' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/4148674086029714521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/4148674086029714521'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/01/twitter-telepathy-06.html' title='Twitter - Telepathy 0.6.'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-3173126674848205180</id><published>2008-01-03T13:15:00.000-08:00</published><updated>2008-01-03T05:31:31.616-08:00</updated><title type='text'>On Vendor Bloatware and Middleware Complexity</title><content type='html'>&lt;h4&gt;&lt;/h4&gt;&lt;p&gt;Sometimes I like to write code, and I am a firm believer in the idea that, as well having a satisfactory and acceptable solution to the problem, production code is not completed until there is nothing further that can be taken away. While of course still having a code base that is tested in an automatic fashion, and agreed by it's stake holders to be highly maintainable. What's the simplest thing that could possibly work?&lt;/p&gt;&lt;p&gt;The story is different in an enterprise that buys in software solutions, from companies that I like to refer to sometimes as Big Iron Software Vendors.&lt;/p&gt;&lt;p&gt;Big Iron Software Vendors are sales and, sometimes, consultancy driven. They are often driven by repeat sales, and, perhaps, after sales support. It's easier to sell to an existing customer than a new one, especially where the CFO's play golf together. &lt;/p&gt;&lt;p&gt;In order to make a sale, these Big Iron Software Vendors provide solutions to problems. It is in their best interests to show their customers that the problems, while highly complex, can be fixed by buying their software. In order to make their software marketable to many different customers, each product that the vendor sells often solves far more problems than any individual customer has. Thus it requires consultancy and integration work to make it fit the customers unique problems, and unique existing infrastructure. &lt;/p&gt;&lt;p&gt;The end result is that often, even while the immediate problem is fixed, new, and #better# complexity is introduced. &lt;/p&gt;&lt;p&gt;This may fix an immediate problem for the customer, but creates a virtuous cycle for the vendor that is not in the purchasers best interests. Their customers’ problems will change, and thus, in the future, they will need further help from the vendor, to fix different complex problems - which of course, include the previous vendor-led solutions.&lt;/p&gt;&lt;p&gt;You know, I don't think I produce better looking documents in Word 2007 than I did 10 or 11 years ago. And I probably publish them as PDF anyway.&lt;/p&gt;&lt;p&gt;Big Iron Software Vendors are not motivated to help their customers simplify their problems, and introduce the smallest possible solution that solves only the problem at hand. For all their talk, they are motivated to make as many sales (of consultancy, support, and licensing) as possible. Within the open source world in which we now live, where many free-to-install, community supported, and mature products exist to solve well known problems, vendors are forced to find another tack, and this seems to be the world for Business Process Management and Service Oriented Architectures, and in the Telco world, IMS and SDP - whatever that means, and I have some thoughts on that for later.&lt;/p&gt;&lt;p&gt;While enterprises are starting to wake up to this issue, in startup-land (and yes, I include Google and Amazon) the use of Big Iron software products to build out solutions is small and decreasing. I've been learning from these guys, and want to ensure in future that the enterprise architectures I provide to my stake holders are as simple as possible, while providing the right features at the right time, and not reliant on complex vendor products, except where absolutely necessary. &lt;/p&gt;&lt;p&gt;There are always new products, and sometimes complex vendor led solutions provide a fit. But I'm sure, that within the long term, the successful businesses that rely on software for day to day operations and competitive excellence will be the ones who remove the cost and reliance on licensed software. Otherwise they'll just have to factor it in to the cost of their own products.&lt;/p&gt;&lt;p&gt;What software license costs would you like to refactor out of your architecture? Or am I wrong, and should we keep drinking the Kool-Aid? Or should we just start thinking of Big Iron Software Vendors in the same way we think of outsourced development shops, and tell them what to build instead?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-3173126674848205180?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/3173126674848205180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=3173126674848205180' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/3173126674848205180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/3173126674848205180'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/01/on-vendor-bloatware-and-middleware.html' title='On Vendor Bloatware and Middleware Complexity'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-3892411392642797952</id><published>2008-01-02T09:53:00.000-08:00</published><updated>2008-03-30T03:36:40.659-07:00</updated><title type='text'>cold_gentle_assassin.mp3</title><content type='html'>&lt;p&gt;I wonder if anyone will work out where the name of my blog has come from? It is a quote. No matter, I'm saving that for another post, unless someone spoils the party. I'll leave some clues around...&lt;/p&gt;&lt;p&gt;I'm known among family, friends and acquaintances for having unusual musical tastes. I dispute that, I just like lots of different kinds of music, and I don't expect anyone to share all my tastes, but I do expect to find common ground with most folk. I surprise people sometimes. &lt;/p&gt;&lt;p&gt;I like music that breaks boundaries. Music that jumps genres. Music that makes me feel something. And as my mood changes, so I want different styles and variety in music to enhance or rectify my mood. &lt;/p&gt;&lt;p&gt;I appreciate &lt;em&gt;choice&lt;/em&gt; in production values. Spending a long time tweaking compressors and parametric EQ's is sometimes good, but sometimes it just removes any soul that the writer was trying to instil into the music. &lt;a href="http://en.wikipedia.org/wiki/Lo-fi" target="_blank"&gt;Lo-fi&lt;/a&gt; can be cool.&lt;/p&gt;&lt;p&gt;The only real skill needed these days to make music is to know what you like, and to be able to describe that. The art of music production is taking creative input, either from oneself, or other artistic direction, and turning that, using instruments, mixing desks, computers, found sound, scratched records, whatever, and compositing it together to create something musical. In the widest possible sense of the term. May be that the music you like is just for you, and anathema to anyone else. That's fine. It's partly our different opinions that make us individuals, not the similarities we share. One of the artists on the mix that accompanies this post, &lt;a href="http://en.wikipedia.org/wiki/John_S._Hall" target="_blank"&gt;John S Hall&lt;/a&gt;, legal eagle by day, beat poet by night, once said on &lt;a href="http://www.levity.com/corduroy/journals/hallpo4.htm" target="_blank"&gt;It's Saturday&lt;/a&gt; "I want to be different, like everybody else I want to be like". Read the whole poem, it inspired me greatly in early adulthood, and with phrases like "I want to call into question the very idea that&lt;br /&gt;identity can be attached" deserves more exploration when I offer up some geekier thinking. Which I will, when work is back upon us and in full swing.&lt;/p&gt;&lt;p&gt;Music is one of those things that joins and separates us, as we can see from the various social applications built around the concept. We can like the Top 40 of popular music (&lt;a href="http://www.thelongtail.com/the_long_tail/2006/02/the_decline_of_.html" target="_blank"&gt;is it really&lt;/a&gt;?), and blend in with the supposed majority. We can form cliques based around bands, labels, eras and types of music; indeed I have some friends who I only ever see at &lt;a href="http://www.chocodog.com/chocodog/ween/ween_new/index2.html" target="_blank"&gt;Ween&lt;/a&gt; gigs every two or three years. We can appreciate music that none of our friends are even remotely interested in. I know I do!&lt;/p&gt;&lt;p&gt;Anyhoo, this blog provides a channel to me for sharing thoughts and deeds, and frankly anything I can upload to the web. I intend to take advantage of this, unless it turns out I attract no readers, in which case &lt;a href="http://san1t1.blogspot.com/2007/12/i-prepared-to-tell-you-about-some.html"&gt;Resolution I&lt;/a&gt; will get broken soon enough! &lt;/p&gt;&lt;p&gt;Something I've shared for many years is home made mix tapes (now a misnomer of course, they never see &lt;a href="http://en.wikipedia.org/wiki/Chromium_dioxide" target="_blank"&gt;Chromium Dioxide&lt;/a&gt; anymore), both for my own and others listening pleasure. Turned out that home taping didn't kill music, there's more than ever, especially now that the financial cost of production is effectively zero. if you're interested in that sort of thing, new models of music as a business etc, then I heartily recommend &lt;a href="http://www.wired.com/entertainment/music/magazine/16-01/ff_byrne?currentPage=all" target="_blank"&gt;this article&lt;/a&gt; by David Byrne as a primer.&lt;/p&gt;&lt;p&gt;Now we have this interweb thing, I can make mixes and share them with the world, and only hope the pigopolists don't come after me for this blatant sharing of copyrighted material. If you are in the &lt;a href="http://www.mcps-prs-alliance.co.uk/Pages/default.aspx" target="_blank"&gt;PRS&lt;/a&gt; and reading this, please get in touch so we can work something out, I'm trying to promote largely niche artists here. Hopefully your &lt;a href="http://www.mcps-prs-alliance.co.uk/playingbroadcastingonline/online/Podcasting/Pages/podcasting.aspx" target="_blank"&gt;podcasting review&lt;/a&gt; will make life easier for me; starting today, every so often I intend to put out a compilation mix I've made, for the readers of this blog, and I will avoid, as much as I can, major label artists. Often their music sucks anyway. In my opinion.&lt;/p&gt;&lt;p&gt;So the first mix of 2008 is now online, and available for your delectation. Or not. I warn you, it's not full of relaxing and beautiful tunes to make you smile, and in the middle, especially with headphones on, bits are downright scary. It's winter, and this hour long mix reflects that, with only a little hope of better things towards the end&lt;/p&gt;&lt;p&gt;&lt;a href="http://64.22.75.56/mixes/cold_gentle_assassin.mp3" target="_blank"&gt;Download it here&lt;/a&gt; (83Mb), or play in an appropriate media player. Until I get a takedown notice; be nice if I didn't.&lt;/p&gt;&lt;p&gt;Here's the full list of tracks I used, and rough start times. I hope you enjoy. The next one will no doubt be completely different...&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;table cellspacing="0" cellpadding="2" width="503" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="66"&gt;&lt;p align="center"&gt;&lt;strong&gt;Start&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="131"&gt;&lt;p align="center"&gt;&lt;strong&gt;Artist&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="172"&gt;&lt;p align="center"&gt;&lt;strong&gt;Track&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="130"&gt;&lt;p align="center"&gt;&lt;strong&gt;Album&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="68"&gt;00:00&lt;/td&gt;&lt;td valign="top" width="129"&gt;Bill Laswell&lt;/td&gt;&lt;td valign="top" width="172"&gt;Slogans&lt;/td&gt;&lt;td valign="top" width="130"&gt;&lt;a href="http://www.blogger.com/Hashisheen" target="_blank"&gt;Hashisheen&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="69"&gt;00:45&lt;/td&gt;&lt;td valign="top" width="128"&gt;Bill Laswell&lt;/td&gt;&lt;td valign="top" width="172"&gt;Book of the Highest Intitation&lt;/td&gt;&lt;td valign="top" width="130"&gt;&lt;a href="file:///C:/Users/tim/AppData/Local/Temp/WindowsLiveWriter-429641856/0C094AF63D1F/Hashisheen" target="_blank"&gt;Hashisheen&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="70"&gt;01:57&lt;/td&gt;&lt;td valign="top" width="127"&gt;Miles Davis&lt;/td&gt;&lt;td valign="top" width="172"&gt;In a Silent Way (DJ Cam Remix)&lt;/td&gt;&lt;td valign="top" width="130"&gt;&lt;a href="http://www.discogs.com/release/86284" target="_blank"&gt;Panthalassa: The Remixes&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="72"&gt;06:30&lt;/td&gt;&lt;td valign="top" width="127"&gt;Captain Kowatchi&lt;/td&gt;&lt;td valign="top" width="172"&gt;Conference of the Birds&lt;/td&gt;&lt;td valign="top" width="130"&gt;&lt;a href="http://www.discogs.com/release/57097" target="_blank"&gt;Land of Baboon&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="72"&gt;10:53&lt;/td&gt;&lt;td valign="top" width="127"&gt;Spectre&lt;/td&gt;&lt;td valign="top" width="172"&gt;9th Secret Rule of the Order&lt;/td&gt;&lt;td valign="top" width="130"&gt;&lt;a href="http://www.discogs.com/release/66393" target="_blank"&gt;The Illness&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="72"&gt;14:43&lt;/td&gt;&lt;td valign="top" width="127"&gt;Davie Allan &amp;amp; the Arrows&lt;/td&gt;&lt;td valign="top" width="172"&gt;Pot Party &lt;/td&gt;&lt;td valign="top" width="130"&gt;&lt;a href="http://www.weirdorecords.com/cpCommerce/product.php?id_product=2372" target="_blank"&gt;Only In America&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="72"&gt;16:45&lt;/td&gt;&lt;td valign="top" width="127"&gt;Barry Adamson &lt;/td&gt;&lt;td valign="top" width="172"&gt;Dirty Barry&lt;/td&gt;&lt;td valign="top" width="130"&gt;&lt;a href="http://www.discogs.com/release/27516" target="_blank"&gt;Oedipus Schmoedipus&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="72"&gt;21:23&lt;/td&gt;&lt;td valign="top" width="127"&gt;Eardrum&lt;/td&gt;&lt;td valign="top" width="172"&gt;Swarm &lt;/td&gt;&lt;td valign="top" width="130"&gt;&lt;a href="http://www.discogs.com/release/1701" target="_blank"&gt;Last Light&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="72"&gt;27:34&lt;/td&gt;&lt;td valign="top" width="127"&gt;Mental Nomad&lt;/td&gt;&lt;td valign="top" width="172"&gt;Deity&lt;/td&gt;&lt;td valign="top" width="130"&gt;&lt;a href="http://www.discogs.com/release/379689" target="_blank"&gt;Mentalica and it's Inhabitants&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="72"&gt;29:43&lt;/td&gt;&lt;td valign="top" width="127"&gt;Modern Quartet Vs Koçani Orkestar&lt;/td&gt;&lt;td valign="top" width="172"&gt;Fantasia for Clarinet&lt;/td&gt;&lt;td valign="top" width="130"&gt;&lt;a href="http://www.discogs.com/release/254290" target="_blank"&gt;Electric Gypsyland&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="72"&gt;33:38&lt;/td&gt;&lt;td valign="top" width="127"&gt;Sophie Rimheden&lt;/td&gt;&lt;td valign="top" width="172"&gt;Don't Follow&lt;/td&gt;&lt;td valign="top" width="130"&gt;&lt;a href="http://www.discogs.com/release/42054" target="_blank"&gt;Electric Ladyland Clickhop Vol 1.0&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="72"&gt;37:49&lt;/td&gt;&lt;td valign="top" width="127"&gt;Bill Laswell&lt;/td&gt;&lt;td valign="top" width="172"&gt;The Spilled Cup&lt;/td&gt;&lt;td valign="top" width="130"&gt;&lt;a href="file:///C:/Users/tim/AppData/Local/Temp/WindowsLiveWriter-429641856/0C094AF63D1F/Hashisheen" target="_blank"&gt;Hashisheen&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="72"&gt;39:03&lt;/td&gt;&lt;td valign="top" width="127"&gt;Closer Musick&lt;/td&gt;&lt;td valign="top" width="172"&gt;Closer Dancer&lt;/td&gt;&lt;td valign="top" width="130"&gt;&lt;a href="http://www.discogs.com/release/34647" target="_blank"&gt;After Love&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="72"&gt;45:54&lt;/td&gt;&lt;td valign="top" width="127"&gt;13 &amp;amp; God&lt;/td&gt;&lt;td valign="top" width="172"&gt;Soft Atlas&lt;/td&gt;&lt;td valign="top" width="130"&gt;&lt;a href="http://www.discogs.com/release/438812" target="_blank"&gt;13 &amp;amp; God&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="72"&gt;49:37&lt;/td&gt;&lt;td valign="top" width="127"&gt;Denali&lt;/td&gt;&lt;td valign="top" width="172"&gt;Run Through&lt;/td&gt;&lt;td valign="top" width="130"&gt;&lt;a href="http://www.jadetree.com/releases/product/JT1089" target="_blank"&gt;The Instinct&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="72"&gt;53:38&lt;/td&gt;&lt;td valign="top" width="127"&gt;The Postal Service&lt;/td&gt;&lt;td valign="top" width="172"&gt;Suddenly Everything Has Changed&lt;/td&gt;&lt;td valign="top" width="130"&gt;&lt;a href="http://www.discogs.com/release/361340" target="_blank"&gt;Give Up&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="72"&gt;57:44&lt;/td&gt;&lt;td valign="top" width="127"&gt;John S Hall &amp;amp; Kramer&lt;/td&gt;&lt;td valign="top" width="172"&gt;Things&lt;/td&gt;&lt;td valign="top" width="130"&gt;&lt;a href="http://www.discogs.com/release/402372" target="_blank"&gt;Real Men&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-3892411392642797952?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/3892411392642797952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=3892411392642797952' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/3892411392642797952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/3892411392642797952'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2008/01/coldgentleassassinmp3.html' title='cold_gentle_assassin.mp3'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8689275521557212387.post-2925978163916544928</id><published>2008-01-01T00:01:00.000-08:00</published><updated>2007-12-31T16:17:29.459-08:00</updated><title type='text'>I'm prepared to tell you about some changes that I'm promising myself</title><content type='html'>&lt;p&gt; &lt;/p&gt;  &lt;p&gt;It's 2008. Only just mind you, and of course the New Year event happens many times over round about now, and that's just the &lt;a href="http://en.wikipedia.org/wiki/Gregorian_calendar" target="_blank"&gt;Gregorian Calendar&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;At this time of year we resolve to change ourselves for the better. There's no point making all those New Year resolutions unless they are to improve ourselves.&lt;/p&gt;  &lt;p&gt;Whether we share those promises we make to ourselves with others, or we keep them private is a personal decision. Sometimes a shared resolution is easier, as family and friends can support us. Of course, when we let ourselves down, that happens in public too if we tell the world. The trick is not to make public failure become public humiliation.&lt;/p&gt;  &lt;p&gt;We're going to be thinking a lot more in 2008 about how we can live our lives privately in public, and I guess this blog might touch on that.&lt;/p&gt;  &lt;p&gt;Which leads me to the point of this post. Sharing with you a few New Year Resolutions. Ones that I hope you'll support me in keeping, and won't kick me about too much should I break them. I'll try and keep myself in check anyway. And so in no particular order...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:180%;"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:180%;"&gt;Resolution I&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;I reckon I should keep a blog. I've been told this a few times. So here it is! What can I say! &lt;/p&gt;  &lt;p&gt;I have been referred to before as the man with no URI. That's gotta change. Plenty to say, indeed some have a hard time shutting me up. Just need to put it down on "paper" better. The hard target is to get a kernel for the blog in two to three months time, so that I can trick people into having a reason to come here regularly.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;I promise myself that I will blog at least once a week&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:180%;"&gt;Resolution II&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;I'll talk a little about &lt;a href="http://web21c.bt.com/" target="_blank"&gt;where I work&lt;/a&gt; in future posts. Our motto is "Do Less: Achieve More", and I guess at times I may've interpreted that a little too literally. &lt;/p&gt;  &lt;p&gt;A lot of what I do is opinion sharing, invention, talking and evangelising. I sometimes describe myself as a Software Heretic, and indeed the relevant HR system at work has even allowed me to set that as my job title. Go figure, is that enlightened or just an oversight? &lt;/p&gt;  &lt;p&gt;Anyway, if heresy is challenging established wisdom, then that's what I do. But I need to get away from just talking about change, and do a bit more making sure it happens.&lt;/p&gt;  &lt;p&gt;As an aside, this isn't one of my resolutions, but I should get round to reading &lt;a href="http://www.fourhourworkweek.com/" target="_blank"&gt;The Four Hour Work Week&lt;/a&gt; soon. Maybe you should too.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;I resolve to work better and achieve more. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:180%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:180%;"&gt;Resolution III&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;I'm not gonna abandon my day job any time soon people. Working in a big company, with loads of disruption, and plenty of willingness to change suits me. Turning a Telco into a Software company is quite good fun, and over time I'll tell you more about it. Pays the bills too. But this resolution is one that I keep promising myself, and I'll make it public now. This year I really am going to do a startup. I don't know what it will be yet, and I got close last year (but I wasn't telling you about it then). I'd like to do it dogfooding the stuff &lt;a href="http://web21c.bt.com/services/" target="_blank"&gt;from work&lt;/a&gt; and telling you all about it as I go. Might be that can be part of Resolution II if things work out. &lt;/p&gt;  &lt;p&gt;In the next week or so I'm going to sign my life away, renting what feels like a phenomenal amount of money to buy my first house at what is probably the peak of the market in the UK. If I was stateside I &lt;em&gt;&lt;a href="http://patrick.net/housing/crash3.html" target="_blank"&gt;really&lt;/a&gt;&lt;/em&gt; wouldn't bother. I'm hoping that the house that the bank and I are paying nearly £250k for, even though it only cost £65k to buy the land and build the property 12 years ago, is not going to suffer a monumental decline in value before I want to leave. Either way, I reckon that I want to be putting away some money that is much less leveraged than the &lt;em&gt;n&lt;/em&gt;% I'm putting down. Pray for me on this one!&lt;/p&gt;  &lt;p&gt;&lt;em&gt;I promise to start a company.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:180%;"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:180%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:180%;"&gt;Resolution IV&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:180%;"&gt;&lt;/span&gt;This is the boring one. Less toxins. More exercise. We all make this resolution I suppose, none of us are getting younger (yet) so I won't dwell on it. But here's some things I might do. &lt;/p&gt;  &lt;p&gt;We have a Siberian Husky. he's called Kinook and is gorgeous and my friend, sorry if he sings while I'm on your conference call. I'm going to take him out cycling more often, until I can go faster than him cross country (ha!) Good for both of us.&lt;/p&gt;  &lt;p&gt;I take my fantastic daughter ice-skating most weekends, and we have both got to the stage where we need lessons, or we'll get bad habits. I want to get that damn &lt;a href="http://www.youtube.com/watch?v=cA1VwkdvA2g" target="_blank"&gt;hockey stop&lt;/a&gt; right.&lt;/p&gt;  &lt;p&gt;Some of you could probably guess other things that fit in this generic resolution for me, knowing my lifestyle a bit better. You're probably in my Facebook roster, so I trust you a bit more than anonymous readers here.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;I promise to live more healthily and get fitter&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:180%;"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:180%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:180%;"&gt;The rest are secret&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;I have made more resolutions. But until there is a security breach of my private thoughts, or I delegate you some trust of my memory and consciousness, they will remain a secret. And by the time that happens I'll no doubt have broken them anyway, as I'm sure the private resolutions are the ones we break first.&lt;/p&gt;  &lt;p&gt;If I'm sticking to Resolution I then you'll be able to see how I get on over the course of 2008 with the rest of them. If I break it, I guess you'll never know!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8689275521557212387-2925978163916544928?l=blog.san1t1.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.san1t1.com/feeds/2925978163916544928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8689275521557212387&amp;postID=2925978163916544928' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/2925978163916544928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8689275521557212387/posts/default/2925978163916544928'/><link rel='alternate' type='text/html' href='http://blog.san1t1.com/2007/12/i-prepared-to-tell-you-about-some.html' title='I&amp;#39;m prepared to tell you about some changes that I&amp;#39;m promising myself'/><author><name>Tim Stevens</name><uri>http://www.blogger.com/profile/05946371696574191455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry></feed>
