<?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-7561782418501724314</id><updated>2012-01-17T16:06:03.243+11:00</updated><category term='rants'/><title type='text'>Mouse's Rants</title><subtitle type='html'>Ranting about technology. Mainly. Probably. Ranty.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>52</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-3040544446093368250</id><published>2011-09-24T09:56:00.003+10:00</published><updated>2011-09-24T09:56:33.062+10:00</updated><title type='text'></title><content type='html'>And for something completely different, I'm talking at the &lt;a href="http://www.facebook.com/sydneyhackathon"&gt;Sydney Hackathon&lt;/a&gt;, at Sydney Uni. Come along, it's bound to be a lot of fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-3040544446093368250?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/3040544446093368250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2011/09/and-for-something-completely-different.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/3040544446093368250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/3040544446093368250'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2011/09/and-for-something-completely-different.html' title=''/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-2217529767522234604</id><published>2011-07-29T13:51:00.002+10:00</published><updated>2011-07-29T13:51:45.594+10:00</updated><title type='text'>Sydney Startup Weekend this weekend!</title><content type='html'>This weekend I will be one of the mentors at the &lt;a href="http://sydney.startupweekend.org/"&gt;Sydney Startup Weekend&lt;/a&gt;. It starts tonight at 6:30pm at the Australian Technology Park, in Everleigh. Come along, it's going to be a great weekend!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-2217529767522234604?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/2217529767522234604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2011/07/sydney-startup-weekend-this-weekend.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/2217529767522234604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/2217529767522234604'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2011/07/sydney-startup-weekend-this-weekend.html' title='Sydney Startup Weekend this weekend!'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-695263930913220696</id><published>2011-02-19T15:27:00.001+11:00</published><updated>2011-03-02T16:25:07.096+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rants'/><title type='text'>Not quite so ranty Mouse</title><content type='html'>I got asked at a user group last week why I've stopped ranting. I spent a good ten years ranting across a wide variety of blogging platforms, and since becoming a DevRel at Google, I've stopped.&lt;br /&gt;&lt;br /&gt;I had to think for a couple of days as to why I haven't felt the need to get it off my chest of late. The short summary is that joining Google has highlighted the fact that all the tools you need to build world beating software are already out there. It's just a matter of investing the time in learning the tools, the technology, and mastering a domain that interests you.&lt;br /&gt;&lt;br /&gt;Interested in mobile phones? Learn Android. Interested in web applications? AppEngine and GWT give you enormous power. Want to build games? WebGL is up and running in the latest Chrome and Firefox betas, with Opera not too far behind. And if you are really hardcore, Native Client is shaping up as a good way to ship C++ code to clients without having to deal with cross platform and logitics head aches.&lt;br /&gt;&lt;br /&gt;I always thought that the geniuses at Google had access to amazing tools that allowed them to build applications like Google Docs that were beyond the reach of mere mortals. Now that I have spent time amongst Googlers, I've realised that all of these applications were built by very smart, very dedicated teams. That level of dedication is open to anyone, if they choose to chase their dreams...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-695263930913220696?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/695263930913220696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2011/02/not-quite-so-ranty-mouse.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/695263930913220696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/695263930913220696'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2011/02/not-quite-so-ranty-mouse.html' title='Not quite so ranty Mouse'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-8713028798379195215</id><published>2011-02-02T13:30:00.000+11:00</published><updated>2011-02-02T13:30:33.151+11:00</updated><title type='text'>Chinatown</title><content type='html'>&lt;a href="http://goo.gl/photos/rcFuo5XStD" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img src="http://lh3.ggpht.com/_X49NrA8mJ5o/TUjA95ArnjI/AAAAAAAAAP4/DzgKMJf2eGU/s512/IMG_20110123_202619.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-8713028798379195215?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/8713028798379195215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2011/02/chinatown.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/8713028798379195215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/8713028798379195215'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2011/02/chinatown.html' title='Chinatown'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_X49NrA8mJ5o/TUjA95ArnjI/AAAAAAAAAP4/DzgKMJf2eGU/s72-c/IMG_20110123_202619.jpg' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-2688900987729097489</id><published>2011-01-10T14:48:00.000+11:00</published><updated>2011-01-10T14:48:56.942+11:00</updated><title type='text'>Testing, testing, 1... 2... 3...</title><content type='html'>How can you tell the difference between a drummer and a roadie? How do you know if the stage is level? How can you tell it's been too long since I've been on stage?&lt;br /&gt;&lt;br /&gt;I start making drummer jokes. Oh, and testing blogger / buzz integration. There is a reason for this post, but it hasn't happened yet. You could say this post is a stepping stone to a bigger post, a better future... and more drummer jokes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-2688900987729097489?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/2688900987729097489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2011/01/testing-testing-1-2-3.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/2688900987729097489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/2688900987729097489'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2011/01/testing-testing-1-2-3.html' title='Testing, testing, 1... 2... 3...'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-6349558187592871528</id><published>2010-12-04T10:58:00.001+11:00</published><updated>2010-12-04T10:58:20.062+11:00</updated><title type='text'>It's wet outside, but the music is cool</title><content type='html'>&lt;div&gt;&lt;br/&gt;&lt;img src='http://lh6.ggpht.com/_X49NrA8mJ5o/TPmEFfNLGiI/AAAAAAAAANI/ryDotRGB3A4/IMG_20101204_105446.png' /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-6349558187592871528?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/6349558187592871528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2010/12/it-wet-outside-but-music-is-cool.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/6349558187592871528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/6349558187592871528'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2010/12/it-wet-outside-but-music-is-cool.html' title='It&amp;#39;s wet outside, but the music is cool'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_X49NrA8mJ5o/TPmEFfNLGiI/AAAAAAAAANI/ryDotRGB3A4/s72-c/IMG_20101204_105446.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-1662236347715927403</id><published>2010-11-09T11:59:00.000+11:00</published><updated>2010-11-09T11:59:48.553+11:00</updated><title type='text'>A thought experiment</title><content type='html'>I remember back in the day when companies needed to raise millions of dollars to set up their web farm. One of the upsides of doing that was that people thought big, they dreamed of taking over the world. These days of running a clustered multi-tier web app stack on AWS for pocket change has lead to people having small dreams.&lt;br /&gt;&lt;br /&gt;So, how about we do some maths. Let's say you have $10k a day in budget to burn on compute resources. What could you do with it? Let's take numbers from AWS, they quote Linux Double Extra Large High Memory instances at $1 an hour. So, at 24 hours a day, we have about 416 instances. That is approximately 13TB of RAM, and over 1.6k cores. Now what can you do with that much RAM and CPU?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-1662236347715927403?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/1662236347715927403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2010/11/thought-experiment.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/1662236347715927403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/1662236347715927403'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2010/11/thought-experiment.html' title='A thought experiment'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-3433018515992017875</id><published>2010-10-28T03:05:00.002+11:00</published><updated>2010-12-29T06:37:44.874+11:00</updated><title type='text'>Cool preso</title><content type='html'>A very cool analysis of a website's copy. Worthy of a detailed read.&lt;br /&gt;&lt;div id="__ss_5571191" style="width: 425px;"&gt;&lt;b style="display: block; margin: 12px 0pt 4px;"&gt;&lt;a href="http://www.slideshare.net/shereefb/recommendations-for-bettermeans" title="Recommendations for bettermeans "&gt;Recommendations for bettermeans &lt;/a&gt;&lt;/b&gt;&lt;object height="355" id="__sse5571191" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=recommendationsforbettermeans-copy-jw-101026180620-phpapp02&amp;stripped_title=recommendations-for-bettermeans&amp;userName=shereefb" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse5571191" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=recommendationsforbettermeans-copy-jw-101026180620-phpapp02&amp;stripped_title=recommendations-for-bettermeans&amp;userName=shereefb" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div style="padding: 5px 0pt 12px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/shereefb"&gt;Shereef Bishay&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-3433018515992017875?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/3433018515992017875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2010/10/cool-preso.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/3433018515992017875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/3433018515992017875'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2010/10/cool-preso.html' title='Cool preso'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-2987783224618207946</id><published>2010-03-14T17:41:00.003+11:00</published><updated>2010-03-14T17:59:05.365+11:00</updated><title type='text'>Mmm, stuff.</title><content type='html'>It's been almost a year since I last posted here. In the mean time I've wandered a bit, I spent a bunch of time playing with &lt;a href="https://wave.google.com/wave/"&gt;Google Wave&lt;/a&gt;, toying with &lt;a href="http://www.google.com/buzz"&gt;Google Buzz&lt;/a&gt;, and poking at the corpse of &lt;a href="http://www.livejournal.com/"&gt;LiveJournal&lt;/a&gt;. What brought me back? The fact that blogger has a &lt;a href="http://bloggerindraft.blogspot.com/2010/03/blogger-template-designer.html"&gt;new template editing system&lt;/a&gt; that doesn't suck nearly as badly as it did. In fact, it's kinda decent. About the only thing i want in it is a "round the corners and add subtle shadows" button. And maybe a Web2.0 Always in Beta sticker.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In some ways, this feels like i've been full circle. I'm back to writing Antlr grammars. Antlr 3.2's tree filters are wickedly cool, and Terence Parr's &lt;a href="http://www.pragprog.com/titles/tpdsl/language-implementation-patterns"&gt;Language Implementation Patterns&lt;/a&gt; is thoroughly hurting my noodle. It's a damn fine read, if you enjoy LL(*) and syntactic predicates.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One of the things I am playing with at the moment is stuffing Antlr generated parsers inside of web browsers using Google's &lt;a href="http://code.google.com/webtoolkit/"&gt;GWT&lt;/a&gt;. It opens a wild vista of new potentials, of being able to edit and hack seriously complicated models inside a browser. Revenge of the nerds, web2.0 style.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-2987783224618207946?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/2987783224618207946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2010/03/mmm-stuff.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/2987783224618207946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/2987783224618207946'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2010/03/mmm-stuff.html' title='Mmm, stuff.'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-8488450167579357886</id><published>2009-05-17T07:42:00.003+10:00</published><updated>2009-05-17T07:53:44.848+10:00</updated><title type='text'>A whirlwind tour</title><content type='html'>I've been on a bit of a tour of late.&lt;br /&gt;&lt;br /&gt;I've tried out JetBrain's MPS system, attempting to use it for code generation for work, and I couldn't get it to do what I needed it to. In a lot of ways, the experience reminded me of attempting to use ANTLR's AST treegen approach - I was frustrated by a lack of debugging support.&lt;br /&gt;&lt;br /&gt;I am having more success with using ANTLR to parse an input file, in this case a Java interface, to my own Java AST classes, and then generating code using StringTemplate. My first bash at this approach mushed the input AST and the output AST into one set of classes, and that was kinda messy. Next time I'm going to separate the concerns of the input AST and the output AST required by StringTemplate. I'm thinking I'll attempt to build the output AST as an adapter over the input AST, instead of having a AST modification pass. I'll find out how that goes in the coming week.&lt;br /&gt;&lt;br /&gt;I'm also playing with Terracotta, the network attached memory store for the JVM. The one downside of Terracotta is that it exposes something that is often hidden - Java's classloaders. In java, a classes' identity not only includes it's bytecode, but also which classloader it was loaded by. As Terracotta is all about storing java objects while maintaining their identity, this means that classloaders become important. Now, given I am attempting to marshall classes between tomcat instances an Mule instances, I am having to subvert the classloaders of both. Not fun. Not fun at all.&lt;br /&gt;&lt;br /&gt;The one thing that is becoming stupidly obvious about now is that the future of computing is about scaling sideways. Terracotta is an attempt to bring this to the Java world, but it feels like a bolt on. It breaks so many assumptions that Java programmers have. It makes thread programming with locks important, and honestly lock based concurrency is a bitch to get right.&lt;br /&gt;&lt;br /&gt;One approach is to do Clojure + Terracotta. Another is to go back to Erlang. Interesting times.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-8488450167579357886?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/8488450167579357886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2009/05/whirlwind-tour.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/8488450167579357886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/8488450167579357886'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2009/05/whirlwind-tour.html' title='A whirlwind tour'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-169842918495101425</id><published>2009-04-29T20:28:00.002+10:00</published><updated>2009-04-29T20:45:26.591+10:00</updated><title type='text'>Generating code...</title><content type='html'>Like pretty much every programmer I know, I'm trying to automate what I do. What this amounts to, is that I'm trying to generate code to eliminate the boilerplate from my life.&lt;br /&gt;&lt;br /&gt;For a variety of reasons, I get paid to code in Java. One of the most verbose languages on the planet. I'd like to be able to rip out code generators to generate all the boiler plate i need to keep the kids from hurting themselves on the sharp knives. &lt;br /&gt;&lt;br /&gt;I've tried ANTLR, but honestly it's tree transformation language is in need of better tooling support to help with debugging. I'm part way through trying to fathom JetBrain's MPS. It's complicated as all hell, but on the upside, it understands the Java AST. It's at about this point that I contemplate whether I should just bite the bullet and do it the traditional way, with lisp macros all the way.&lt;br /&gt;&lt;br /&gt;The upside of using MPS is that it knows Java, and it comes with a decent editing environment. The downside of MPS is that it has all the complexities of building a editor, instead of just using emacs like everyone else. I don't think i'm ready to give up on MPS yet. I like the pretty.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-169842918495101425?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/169842918495101425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2009/04/generating-code.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/169842918495101425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/169842918495101425'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2009/04/generating-code.html' title='Generating code...'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-2114391701977873689</id><published>2009-03-23T18:03:00.002+11:00</published><updated>2009-03-23T18:08:26.754+11:00</updated><title type='text'>Brain melt</title><content type='html'>I'm trying to implement a webapp api in Clojure inspired by the elegant model of Seaside. There are two important shifts in this port, firstly migrating from SmallTalk's object model to lisp's macro based approach, and secondly taking advantage of Clojure's concurrency primitives.&lt;br /&gt;&lt;br /&gt;My brain is gently melting out my ears as a result. On the upside, when I get this to work, I get a surprisingly easy way to implement co-operative web applications. A wonderful environment for trying out new approaches to user interface design. It's just the game of getting from vision to implementation. &lt;br /&gt;&lt;br /&gt;Sometime next year, at this rate. =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-2114391701977873689?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/2114391701977873689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2009/03/brain-melt.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/2114391701977873689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/2114391701977873689'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2009/03/brain-melt.html' title='Brain melt'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-8118941030832118343</id><published>2009-03-19T22:33:00.002+11:00</published><updated>2009-03-19T22:51:02.587+11:00</updated><title type='text'>So where now?</title><content type='html'>I have a question, but first I need to draw out some data points.&lt;br /&gt;&lt;br /&gt;Firstly, we have &lt;a href="http://eucalyptus.cs.ucsb.edu/"&gt;Eucalyptus&lt;/a&gt;, a project that aims to replicate AWS's Elastic Computing Cloud APIs. This is being used by Sun and others to pitch data centers on the idea of being able to compete in the Cloud Computing game. In short, cloud computing is about to get comoditised. &lt;br /&gt;&lt;br /&gt;Secondly, Erlang, Haskell, Scala, Clojure and various other languages are chasing how to best expose concurrency and network IO in a programmer friendly way. I believe we are on the cusp of beating this challenge. Actually, I think Clojure already has, but it's going to take a while for the reality to shake out. And for programmers to either accept they have to learn a new language, or go and open a cafe.&lt;br /&gt;&lt;br /&gt;Given the two points above, the game change I see is that it now becomes pizza + beer pricing to host a webapp on a EC2 node that can service 2,000+ concurrent long poll connections. Development could be done on a $20/month node, early roll out on $50/month node, and when it gets really popular you can scale up to the 15.5G of ram beast for $800 a month. But all those prices are about to fall massively, thanks to the return of Moore's law, and the explosion of AWS EC2 wannabes.&lt;br /&gt;&lt;br /&gt;So, what can you do with a server capable of mainting say 5K connections? Think FaceBook, but real time. Think livejournal meets twitter. Think corporate business workflow applications with the ability to co-operatively (aka, socially), work with co-workers.&lt;br /&gt;&lt;br /&gt;In short, we are about to see a qualitative shift in the way people work together. And this will enable people to act together in ways that will make the 5k person parties organised over fb look positively pale in comparison. Yes, this is going to threaten pretty much everyone in a position of power, be that government, business, or religion. It's about to become affordable for everyone to host real time communication hubs.&lt;br /&gt;&lt;br /&gt;On the upside, this means that we are about to start a process of learning how to group communications well. Honestly, everything we've done so far has sucked, and sucked badly. The biggest thing I'm getting out of Gladwell's Outliers is that up until now we have badly wasted the one reasource this planet that can make a difference. Us.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-8118941030832118343?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/8118941030832118343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2009/03/so-where-now.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/8118941030832118343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/8118941030832118343'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2009/03/so-where-now.html' title='So where now?'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-6569624536332605628</id><published>2009-03-13T14:36:00.002+11:00</published><updated>2009-03-13T14:45:04.936+11:00</updated><title type='text'>Rebuilding the world. Again.</title><content type='html'>I'm a little intimidated by the power of Clojure. It changes the dynamics of designing software. Traditionally it was important to get the overall design right because once coding started, changing the design suddenly became quite expensive. Changing the number of fields on a form has rippling changes right through the code base.&lt;br /&gt;&lt;br /&gt;Not so in the world of properly factored Clojure development, because all the source code dependent on the shape of the forms is generated using macros. This changes design time from before coding to afterwards. This makes the design iterative, and done upon the working code.&lt;br /&gt;&lt;br /&gt;I can see why lisp wizards were both prized and feared. They can build systems that cannot be built other ways, but at the same time it takes Gladwell's 10,000 hours to be ready for Lisp. As a lisp developer you need to understand the impacts of design changes right through the system, from the user interface to disk layouts, because the macros you write cover the whole solution space.&lt;br /&gt;&lt;br /&gt;So I finally have an answer to why Lisp was never popular. It's not popular because it is genuinely hard to develop in. The repl is intimidating the same way a drag car is. Sure, it is a beast of enormous power, but it also has no time for formalities. If you don't know what you are doing, this beast will show you up, and probably hurt you in the process.&lt;br /&gt;&lt;br /&gt;On the upside, I am now seriously looking at commercial software that costs thousands of dollars per year, per seat, and feeling that I can build it in a reasonably short time frame, once I have written a bunch of macros. Mmmm. Nothing like a challenge to get me going =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-6569624536332605628?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/6569624536332605628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2009/03/rebuilding-world-again.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/6569624536332605628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/6569624536332605628'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2009/03/rebuilding-world-again.html' title='Rebuilding the world. Again.'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-2475821732068762724</id><published>2009-03-12T11:21:00.005+11:00</published><updated>2009-03-12T11:30:04.003+11:00</updated><title type='text'>It's knowledge, not intelligence.</title><content type='html'>First off, an admission. I'm probably the dumbest of my clan. I have next to no artistic ability, i'm not musically inclined, and I don't have the razor sharp wit. In short, I'm the runt of the litter. &lt;br /&gt;&lt;br /&gt;In some ways, knowing I'm not the smartest has been an advantage. I've kept at things long after my other siblings gave up. I'm nowhere near Gladwell's 10,000 hours for mastery of any craft, but I've kept at computers long enough to be able to get things done.&lt;br /&gt;&lt;br /&gt;It's why I'm sad about my brother. He's as smart, if not smarter, than I am. Yet he has wasted his talents by being combative with people who were trying to help him. He was so busy trying to prove his smarts that he never had time enough to pick up the knowledge.&lt;br /&gt;&lt;br /&gt;In short, his insecurity driven rampages damaged the very friendships upon which his success was reliant.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-2475821732068762724?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/2475821732068762724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2009/03/its-knowledge-not-intelligence.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/2475821732068762724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/2475821732068762724'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2009/03/its-knowledge-not-intelligence.html' title='It&apos;s knowledge, not intelligence.'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-4020996178226026835</id><published>2009-03-10T15:26:00.002+11:00</published><updated>2009-03-10T15:34:09.983+11:00</updated><title type='text'>My head hurts.</title><content type='html'>I've just spent three days trying to understand Clojure's &lt;code&gt;for&lt;/code&gt; macro. And I reckon I have another couple of days worth of work pulling it apart yet.&lt;br /&gt;&lt;br /&gt;It's a bit of a disservice calling it &lt;code&gt;for&lt;/code&gt;, as it is actually a list comprehension, but it is called for because this is the construct to use when a traditional programmer would reach for a for loop.&lt;br /&gt;&lt;br /&gt;It has iteration, variable binding, and choice. It is actually a baby programming language in a 30 odd line macro. I can see the parallels between this macro and the de-sugaring that haskell does with the monadic do blocks.&lt;br /&gt;&lt;br /&gt;But still, it is a mind warping exercise pulling apart this macro. Fun tho. =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-4020996178226026835?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/4020996178226026835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2009/03/my-head-hurts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/4020996178226026835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/4020996178226026835'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2009/03/my-head-hurts.html' title='My head hurts.'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-4688440005729386500</id><published>2009-03-02T00:04:00.003+11:00</published><updated>2009-03-02T00:16:29.858+11:00</updated><title type='text'>Convergence</title><content type='html'>&lt;a href="http://clojure.org/"&gt;Clojure&lt;/a&gt;, a Lisp for the JVM with STM and Actors. Bringing the power of macros and functional programming to concurrency.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.terracotta.org/"&gt;Terracotta&lt;/a&gt;, a network attached memory for clustering JVMs and persisting objects across JVM restarts.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;, a JavaScript native api for manipulating the DOM using CSS3 selectors.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://raphaeljs.com/"&gt;Raphael&lt;/a&gt;, a JavaScript library for creating vector graphics on the web, using SVG on Firefox, WebKit and Opera, and VML on Internet Explorer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-4688440005729386500?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/4688440005729386500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2009/03/convergence.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/4688440005729386500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/4688440005729386500'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2009/03/convergence.html' title='Convergence'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-7221146006850207439</id><published>2009-02-26T16:52:00.002+11:00</published><updated>2009-02-26T17:01:01.528+11:00</updated><title type='text'>GMail outage...</title><content type='html'>A couple of days ago there was a &lt;a href="http://gmailblog.blogspot.com/2009/02/update-on-todays-gmail-outage.html"&gt;GMail outage&lt;/a&gt;. Short summary, a combination of taking down a data center and a bug in the load distribution code leads to overloaded data center, and thus a bunch of people can't get to their mail.&lt;br /&gt;&lt;br /&gt;A friend ribbed me about the readyness of Cloud Computing, on the back of this outage. My initial reaction was to defend Google on uptime stats alone. Now that Google have spread the love and admitted the cause, I'm going out on a limb and stating that very few (if any) corporate IT shops are prepared for dealing with entire data centers being taken off line for maintenance.&lt;br /&gt;&lt;br /&gt;I mean, sure, there are corporates who have back up data centers, and even have machines in stand by DR mode. I'd be exceedingly surprised, however, if everything actually worked. Most DR tests I've seen were epic fails, and the fun thing is that DR readyness tests usually happen once a year, if at all.&lt;br /&gt;&lt;br /&gt;If a corporate wants DR to work, it has to be a regular thing. Schedule DR cut over every friday night, and keep repeating until it works flawlessly. And then bring it back every month to make sure it keeps working flawlessly. Otherwise the business as usual is going to be in for a shock when things go pear shaped for real.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-7221146006850207439?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/7221146006850207439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2009/02/gmail-outage.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/7221146006850207439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/7221146006850207439'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2009/02/gmail-outage.html' title='GMail outage...'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-5563934890321999410</id><published>2009-02-24T17:09:00.003+11:00</published><updated>2009-02-24T17:18:08.156+11:00</updated><title type='text'>System integration nightmares</title><content type='html'>I'm currently poking my way through an enterprise service bus, figuring out how to make it do stuff. I've just successfully written my most complicated hello world program to date. It includes message formatters, message routers, two seperate processing pipelines, and it's processed across a SOAP interface generated from a generated WSDL file. Over engineering for the win, right?&lt;br /&gt;&lt;br /&gt;The underlying metaphor embedded in the configuration language is one of a pipeline. Pipe line stages can have filters on both input and output, the output stage can select the next stage depending on attributes of the message, and the center of the stage, the component, does some form of transformation, all the while being isolated from the message transformation and routing happening around it.&lt;br /&gt;&lt;br /&gt;The issue I'm having with this metaphor is that pipe lines are not turing complete. I need the ability to take a message in over a SOAP connection, do a bunch of steps (including writing to our local database as well as querying and updating a pair of remote ERP systems), and then return a result over that said same SOAP connection.&lt;br /&gt;&lt;br /&gt;Now, in the simple examples, this return can be done, because an input endpoint can have metaphor breaking property of being inout as opposed to just in. What I'm scrabbling through the documentation attempting to understand is how i pass this SOAP connection through the chain so that I can return the result, even after a long trail of transforms. Not sure if it's going to work, or if I'm just going to have to cheat...&lt;br /&gt;&lt;br /&gt;The most interesting point to me is that the pipeline metaphor is insufficient.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-5563934890321999410?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/5563934890321999410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2009/02/system-integration-nightmares.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/5563934890321999410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/5563934890321999410'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2009/02/system-integration-nightmares.html' title='System integration nightmares'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-1334124049080508254</id><published>2009-02-10T19:36:00.002+11:00</published><updated>2009-02-10T19:46:31.798+11:00</updated><title type='text'>Thoughts...</title><content type='html'>Dad told me a story, a long time ago. It goes something like this.&lt;br /&gt;&lt;br /&gt;Ted, a manager is asked by the CEO to come to dinner to discuss the possibility of stepping up to divisional chief. So on the appointed day, Ted clocks off after a day of fighting fires, goes home, gets changed, and heads in for dinner with the CEO.&lt;br /&gt;&lt;br /&gt;On the way in, there is a terrible accident in a tunnel, and Ted is stuck in instant gridlock. (This story dates from the days before mobile phones, go with me on this one.) So after fighting his way through the accident debris, he arrives at his dinner appointment only an hour late. After explaining why he was late, due to the tragic circumstances in the tunnel, Ted was promptly told by the CEO that he wouldn't be getting the Divisional Chief position.&lt;br /&gt;&lt;br /&gt;At the time I thought the CEO was being overly harsh on Ted, given that the circumstances surrounding Ted being late were outside of Ted's control. It is only now, looking back, that I understand the CEO's point of view.&lt;br /&gt;&lt;br /&gt;I'm increasingly seeing that people split into one of two pretty neatly divided categories. Those who do things, and those whom things happen to. The language used by the two groups are largely not interoperable, let alone expectations over behaviour. &lt;br /&gt;&lt;br /&gt;Odd, but true.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-1334124049080508254?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/1334124049080508254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2009/02/thoughts.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/1334124049080508254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/1334124049080508254'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2009/02/thoughts.html' title='Thoughts...'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-1938557749814925462</id><published>2009-01-30T11:11:00.002+11:00</published><updated>2009-01-30T11:27:17.179+11:00</updated><title type='text'>Code organisation...</title><content type='html'>There's a Law floating around somewhere about how compilers will have as many passes as the organisation that is creating it has groups. In short, the construction of the software is based on the communication fault lines of it's creator.&lt;br /&gt;&lt;br /&gt;Traditional web apps have similar break downs, there are the sysadmins who wear metal shirts and have long hair, the database admins who are uptight and wear business shirts and demand respect for their models, the webapp tier guys who wear business shirts badly, and the web devs who wear jeans and indie tshirts, and frequently don't make it in on mondays.&lt;br /&gt;&lt;br /&gt;These groups hate each other with a passion, and it shows in the application. &lt;br /&gt;&lt;br /&gt;With the upcoming change of pushing the database out into the web client, and the back end becoming nothing but a persistent change notification hub, all the skills these current groups have in isolation need to be all brought to bear in the front end client.&lt;br /&gt;&lt;br /&gt;By now I'm resigned to the fact that we are going to lose a generation of developers over this. We have on each other major change or technology. It's funny, but it took talking about all this at length with Dad to realise that we have seen all this before, and we will see it again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-1938557749814925462?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/1938557749814925462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2009/01/code-organisation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/1938557749814925462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/1938557749814925462'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2009/01/code-organisation.html' title='Code organisation...'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-8951114007833777073</id><published>2009-01-05T16:09:00.002+11:00</published><updated>2009-01-05T16:13:17.818+11:00</updated><title type='text'>A generated future</title><content type='html'>One of the things I like about Lisp is the fact that having a powerful macro capability in the language allows for concision in the code base that isn't available any other way. Unfortunately this leads to programmers minds exploding - powerful macros take time and patience to grok.&lt;br /&gt;&lt;br /&gt;Near as I can tell, the other option for handling complexity also leads to programmer minds to explode. Instead of having an in language macro capability, I'm winding up generating code. The generated code, given it's weight in LoC has a similar mind bending capacity as Lisp macros, but the generated code is what is checked into revision control.&lt;br /&gt;&lt;br /&gt;Is there a way out of this?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-8951114007833777073?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/8951114007833777073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2009/01/generated-future.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/8951114007833777073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/8951114007833777073'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2009/01/generated-future.html' title='A generated future'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-718128699898503994</id><published>2008-12-26T15:55:00.003+11:00</published><updated>2008-12-26T16:13:24.899+11:00</updated><title type='text'>Antlr, a reflection</title><content type='html'>I worked with ANTLR, attempting to build a small code generator. ANTLR, along with TextTemplate includes a complete toolchain for building everything required for a code generator, ANTLR includes both a parser generator and a tree walker generator, and TextTemplate is a full templating solution.&lt;br /&gt;&lt;br /&gt;However, working with the ANTLR suite turned out to be harder than I was expecting. Debugging the generated AST transformation code required a lot more spelunking through generated code than I was happy with. ANTLR has good support for debugging parsers over text, but I couldn't get debugging tree walkers in the ANTLR tools working to my satisfaction.&lt;br /&gt;&lt;br /&gt;I can see two alternate paths going forward. Either I take the lisp approach and build out tree transformation code using something like clojure, and learn to love emacs and clojure's REPL. Or I take the path of writing code in a programming language written by compiler writers to write compilers in. Two obvious examples include Haskell and Scala.&lt;br /&gt;&lt;br /&gt;The reason I am persisting with figuring this out is that we are on the cusp of one of those interesting times when we get to re-write the world again. We re-wrote everything when PCs appeared, then we re-wrote it again when Windows beat out MS-DOS, then we re-wrote everything again when the web first appeared.&lt;br /&gt;&lt;br /&gt;And we are going to do it again to allow people to be able to use applications inside their web browsers, disconnected from the web. This is different from traditional desktop applications, even though from the users perspective they appear to be the same. The new functionality is that data is being kept both on the client, in a web browser hosted sql datastore, as well as on the server. &lt;br /&gt;&lt;br /&gt;Which means we are about to re-write all of the applications that business users use. Oh goody =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-718128699898503994?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/718128699898503994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/12/antlr-reflection.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/718128699898503994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/718128699898503994'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/12/antlr-reflection.html' title='Antlr, a reflection'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-4725616373065758328</id><published>2008-12-13T09:39:00.002+11:00</published><updated>2008-12-13T09:52:44.845+11:00</updated><title type='text'>Google's approaches to concurrency</title><content type='html'>I have a bit of a thing for concurrency. It is one of those challenges where in the answer actually lies in choosing the right collection of technologies such that programmers can achieve what they want to, safely and effectively.&lt;br /&gt;&lt;br /&gt;The traditional approach, using locks et al, requires a level of mathematical proof that is infeasible. If we are going to use locks, we need to do it in a way that the compilers and run times will be able to verify that we aren't being stupid, otherwise it becomes too hard. &lt;br /&gt;&lt;br /&gt;Google's various approaches to utilising concurrency safely are intriguing. The first, MapReduce, is beautiful in the way that it elides concurrency. Suddenly programmers can write programs that will be run across thousands of machines, in a way that is both safe and manageable. &lt;br /&gt;&lt;br /&gt;Then there is the message passing paradigm that has surfaced in both Google Gears and in Android. This can be looked at as another implementation of the Actor model, but in both cases using languages that are mutable and in widespread use. It is the fact that messages are serialised across the communication boundary that gives safety, but the rest of the language environment isn't impacted. It only requires programmers to treat talking to another thread the same way that they talk to another process across the internet, a widely understood abstraction.&lt;br /&gt;&lt;br /&gt;Where this gets interesting for me is the Chrome multi-process architecture. Here is an architecture that facilitates traditional programmers moving into concurrent code using message passing, but also in a way that is compatible with all the current libraries. &lt;br /&gt;&lt;br /&gt;Actually, where it gets really interesting is Google's native x86 web plugin. This technique could be used to embed plugins as completely managed threads inside of an application. Near as I can tell this is bringing Chrome's multi-process architecture into other web browsers, by the back door. &lt;br /&gt;&lt;br /&gt;What I want to know is what would happen if someone took Google's x86 plugin architecture and bolted it into something like Qt, where the thread responsible for the screen paint, the thread holding the application code, and various other threads (network io, database io, et al) were each one of these managed x86 processes? It would allow Qt applications to dynamically download code into a running application, and spin them up as additional sandboxed services.&lt;br /&gt;&lt;br /&gt;The possibilities...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-4725616373065758328?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/4725616373065758328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/12/googles-approaches-to-concurrency.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/4725616373065758328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/4725616373065758328'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/12/googles-approaches-to-concurrency.html' title='Google&apos;s approaches to concurrency'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-1529404594223812841</id><published>2008-12-07T10:57:00.001+11:00</published><updated>2008-12-07T10:57:56.720+11:00</updated><title type='text'>Mmmm</title><content type='html'>Feeling the rush, and calm. I like.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-1529404594223812841?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/1529404594223812841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/12/mmmm.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/1529404594223812841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/1529404594223812841'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/12/mmmm.html' title='Mmmm'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-8942080198716653884</id><published>2008-12-06T01:11:00.003+11:00</published><updated>2008-12-06T01:18:15.120+11:00</updated><title type='text'>48 hours</title><content type='html'>That was a rush. Intense. Insane. I want more. I want time to think. I want to understand. I want to just feel. Body longing, mind screaming. Sanity yet prevails, almost. &lt;br /&gt;&lt;br /&gt;Where to from here? I know not. It is in the hands of the fates. &lt;br /&gt;&lt;br /&gt;*wolfish grin*&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-8942080198716653884?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/8942080198716653884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/12/48-hours.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/8942080198716653884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/8942080198716653884'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/12/48-hours.html' title='48 hours'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-461502866700280203</id><published>2008-12-03T08:01:00.003+11:00</published><updated>2008-12-03T08:10:23.582+11:00</updated><title type='text'>It's all about concurrency</title><content type='html'>Probably the most amusing, to me at least, comment after the AppEngine talks yesterday was "It's all about concurrency."&lt;br /&gt;&lt;br /&gt;The thing with AppEngine is that it is factored in such a way as to allow insane amounts of concurrency in a way that doesn't break programmer's heads. The traditional programming by mutation based computation model is still present. There is no need for programmers to get side affect free religion to use AppEngine's massive scale out capacity.&lt;br /&gt;&lt;br /&gt;The only downside of AppEngine is that it requires programmers to grok DataStore. DataStore is where the concurrency rubber hits the road, and it breaks programmers. Programmers are control freaks by nature, and being forced to give up control for MT safety is emotionally hard.&lt;br /&gt;&lt;br /&gt;It's going to be an interesting decade. Just as the wide spread adoption of GUIs forced OOP on a generation of programmers, Multicores are going to force concurrency on this generation. I'm kinda expecting a lot of programmers not to make the transition...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-461502866700280203?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/461502866700280203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/12/its-all-about-concurrency.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/461502866700280203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/461502866700280203'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/12/its-all-about-concurrency.html' title='It&apos;s all about concurrency'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-3968837436548720576</id><published>2008-12-03T07:10:00.000+11:00</published><updated>2008-12-03T07:11:36.500+11:00</updated><title type='text'>Looking forward...</title><content type='html'>I'm looking forward to being closer to the sea.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-3968837436548720576?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/3968837436548720576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/12/looking-forward.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/3968837436548720576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/3968837436548720576'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/12/looking-forward.html' title='Looking forward...'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-812657341360675615</id><published>2008-12-01T15:31:00.001+11:00</published><updated>2008-12-01T15:33:41.819+11:00</updated><title type='text'>Brain full now, check back later</title><content type='html'>Possibly the most amusing part of playing with technology is how routinely I wind up feeling completely and utterly stupid.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-812657341360675615?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/812657341360675615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/12/brain-full-now-check-back-later.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/812657341360675615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/812657341360675615'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/12/brain-full-now-check-back-later.html' title='Brain full now, check back later'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-7876107897606814631</id><published>2008-11-30T08:49:00.002+11:00</published><updated>2008-11-30T09:02:42.033+11:00</updated><title type='text'>Change is in the air...</title><content type='html'>(And not just the smells of summer)&lt;br /&gt;&lt;br /&gt;When the luminaries of an industry are all out on the hustings evangelising change, and by change I'm talking about stuff that no one has tools or methodologies for yet, then it's fairly obvious things are in a state of flux.&lt;br /&gt;&lt;br /&gt;This change can probably be best described as the son of Ajax. The amusing thing with the explosion of Ajax was that it wasn't anything particularly new, most of the underlying technologies had been in place for the best part of a decade. What Jesse James Garret did when he &lt;a href="http://www.adaptivepath.com/ideas/essays/archives/000385.php"&gt;launched the Ajax meme&lt;/a&gt; was give us the lexicon to talk about the changes we were witnessing with Google Maps and GMail.&lt;br /&gt;&lt;br /&gt;These new web application capabilities forever changed the perceived capabilities of web deployed applications. Suddenly, every application being launched onto the web had to have these capabilities. Most back end coders scoffed, Javascript has long been derided as the joke programming language. But, what customers want, customers get.&lt;br /&gt;&lt;br /&gt;This new revolution is going to change everything because the web browser is going to become host to complete applications, and the back end is going to become nothing more than a persistent communications hub for people to interact through. This changes the performance requirements of the back end, away from relational databases and towards appengine style distributed datastores.&lt;br /&gt;&lt;br /&gt;The new capability that this gives customers is the ability to use the webapp from a disconnected client. This might not seem like a big thing, until you take into consideration the explosion in sub notebook computing devices, netbooks, iphones and androids, all of which are partially connected to the net through the 3G telephone network and the occasional WiFi hotspot.&lt;br /&gt;&lt;br /&gt;This new capability is going to be a huge driver, and it requires a complete rethink of how we build web applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-7876107897606814631?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/7876107897606814631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/11/change-is-in-air.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/7876107897606814631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/7876107897606814631'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/11/change-is-in-air.html' title='Change is in the air...'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-1750506852006883641</id><published>2008-11-29T18:44:00.001+11:00</published><updated>2008-11-29T18:45:36.628+11:00</updated><title type='text'></title><content type='html'>It's a tad freaky doing research, and getting results that include mailing list discussions in which I took part, all too long ago. It's almost like I'm retracing my steps, but I don't remember making them...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-1750506852006883641?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/1750506852006883641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/11/its-tad-freaky-doing-research-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/1750506852006883641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/1750506852006883641'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/11/its-tad-freaky-doing-research-and.html' title=''/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-866724794515868726</id><published>2008-11-29T14:17:00.003+11:00</published><updated>2008-11-29T14:23:19.229+11:00</updated><title type='text'>Odd</title><content type='html'>At the time, I knew I was fighting for a life. I didn't intuit that the life I was fighting for was mine.&lt;br /&gt;&lt;br /&gt;In retrospect, I can see how I was controlling so many factors, it truly was an onerous and thankless task. In fact, after the event, I doubt any of the players will even think I had anything to do with what went down. But then, said actors aren't exactly known for their ability to step outside of the here and now, or even outside of themselves. The chance of any of them glimpsing the full picture really is nil.&lt;br /&gt;&lt;br /&gt;I suppose that is why I feel alone a lot of the time, not for lack of company, but for lack of people who can see what I see. My father can, but mainly if i try to explain what i see all i get is blank of disbelieving looks. I learned long ago not to explain.&lt;br /&gt;&lt;br /&gt;And now, finally, I have learned that I can walk away. I don't need to save people. In fact, they need to save themselves. I need all my power just to save me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-866724794515868726?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/866724794515868726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/11/odd.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/866724794515868726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/866724794515868726'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/11/odd.html' title='Odd'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-937440833419566509</id><published>2008-11-25T21:44:00.004+11:00</published><updated>2008-11-25T21:54:32.232+11:00</updated><title type='text'>Dave Thomas inspired this one.</title><content type='html'>I lost faith in AppEngine, partly because of a pratt in England that annoyed the shit out of me, and partly because I couldn't see how to implement the applications I wanted using it. The DataStore, simply, wasn't enough.&lt;br /&gt;&lt;br /&gt;Tonight I watched, horror struck, as Dave Thomas (Of OTI fame) told a room full of Java coders that Java is the new Cobol, and that interesting applications of the future are going to be written on the Cloud, and in JavaScript. Cue deafening silence as a hundred odd java programmers start burrowing under their chairs.&lt;br /&gt;&lt;br /&gt;It inspired me. Instead of trying to use AppEngine's DataStore as a transactional store, which is something it sucks at, I can instead using it as a pub/sub notification hub.&lt;br /&gt;&lt;br /&gt;This would move the query side out to the clients, with their local Gears datastores, and make updates the only part that had to be propagated from the client back up to GAE, and thence out to all the other clients.&lt;br /&gt;&lt;br /&gt;It actually works. A complete application deployment platform built from Google's software. Kinda scared right now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-937440833419566509?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/937440833419566509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/11/dave-thomas-inspired-this-one.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/937440833419566509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/937440833419566509'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/11/dave-thomas-inspired-this-one.html' title='Dave Thomas inspired this one.'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-2178577779573404980</id><published>2008-11-22T12:58:00.002+11:00</published><updated>2008-11-22T13:08:05.570+11:00</updated><title type='text'>Craig Mundie on the Future of MS</title><content type='html'>&lt;a href="http://knowledge.wharton.upenn.edu/article.cfm?articleid=2060"&gt;Wharton interviews MS's Craig Mundie&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Craig is predicting a future where in we have full blown client side applications that interact with the cloud. Migrating applications out of the web browser, if you will. The destruction of the web browser has actually been a long term aim of MS, as made obvious in the their post IE6 destruction of the IE development team.&lt;br /&gt;&lt;br /&gt;Obviously, migrating people from web browsers - which are inherently operating system agnostic - back to client applications which are tied to specific operating systems would be good for continuing MS's Operating System monopoly.&lt;br /&gt;&lt;br /&gt;There are application domains that are ill suited to current web browsers, ones that are compute intensive or graphics intensive, for instance. Games, primarily. However, the text rendering engine inside of modern web browsers leaves the current generation of application toolkits (Swing, SWT, WF, MFC+, Qt) for dead.&lt;br /&gt;&lt;br /&gt;The biggest disadvantage to me of a heavy client approach to interacting with the web is that suddenly which computer I am sitting at matters again. Having two laptops and a desktop, that hurts. Having an application that comes in both web and heavy versions, and stores all configuration in the web would reduce that burden. &lt;br /&gt;&lt;br /&gt;Soon, I suspect, I will need an iPhone version as well...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-2178577779573404980?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/2178577779573404980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/11/craig-mundie-on-future-of-ms.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/2178577779573404980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/2178577779573404980'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/11/craig-mundie-on-future-of-ms.html' title='Craig Mundie on the Future of MS'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-2794425849833323998</id><published>2008-11-20T17:53:00.002+11:00</published><updated>2008-11-20T17:56:33.929+11:00</updated><title type='text'>Right. That's it.</title><content type='html'>I'm taking a holiday. I'm stuffed. I've had it. Worn out. Tired. Roll me over, i'm friggen done.&lt;br /&gt;&lt;br /&gt;Just looked at some positions that a recruiter sent me. I should have been jumping up and down, there is some cool stuff in there. But all I can think to do is to get some grub, drink some beer, and sleep. For about 48 hours.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-2794425849833323998?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/2794425849833323998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/11/right-thats-it.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/2794425849833323998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/2794425849833323998'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/11/right-thats-it.html' title='Right. That&apos;s it.'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-5452307249222905616</id><published>2008-11-19T16:49:00.003+11:00</published><updated>2008-11-19T16:52:27.455+11:00</updated><title type='text'>Odd realisation of the day</title><content type='html'>I've just come to the realisation that my issue with learning new stuff is dealing with the emotional distress of going through the acknowledgement of incompetence. It's yet another grieving process.&lt;br /&gt;&lt;br /&gt;I've seen the emotional response in others when attempting to grapple with something new, I saw it all over the AppEngine list, the Clojure list, and various other places. What is new is the realisation that my own aversion to study is linked to this emotional reaction as well.&lt;br /&gt;&lt;br /&gt;So being able to manage the grieving means I can start learning properly. It's been a while...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-5452307249222905616?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/5452307249222905616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/11/odd-realisation-of-day.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/5452307249222905616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/5452307249222905616'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/11/odd-realisation-of-day.html' title='Odd realisation of the day'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-6679965341207751318</id><published>2008-11-17T00:17:00.002+11:00</published><updated>2008-11-17T00:25:48.080+11:00</updated><title type='text'>I feel like i've fallen back in time...</title><content type='html'>Playing around with MS's Visual Studio Express editions is a bit of a time warp. It reminds me of when I was programming against win16, and I use the word against advisedly, back probably the better part of two decades ago.&lt;br /&gt;&lt;br /&gt;MS obviously builds some of the best tooling for first use. Click here, fill in code there, and voila, one working web application. I'd like to say that the traditional J2EE stack approach is inherently better than this, but it aint. From a pure get stuff done, the bang per buck measure, C# ASP.Net with it's databound controls and integrated JQuery has the Java world up against a wall. Sure, VS licenses aren't cheap, but what is the cost of a team of Java developers?&lt;br /&gt;&lt;br /&gt;This is going to be an interesting adventure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-6679965341207751318?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/6679965341207751318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/11/i-feel-like-ive-fallen-back-in-time.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/6679965341207751318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/6679965341207751318'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/11/i-feel-like-ive-fallen-back-in-time.html' title='I feel like i&apos;ve fallen back in time...'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-9173614878633137291</id><published>2008-11-15T20:37:00.002+11:00</published><updated>2008-11-15T20:42:29.383+11:00</updated><title type='text'>An experience like no other...</title><content type='html'>I must say, today was an experience in overload. In many different ways.&lt;br /&gt;&lt;br /&gt;It was the Sydney Bar Camp, and it was fun up to a point. When people started getting tired, man. Ranting about how Google is evil, then about how to verify who should have the power to verify if companies handling of data is valid, and then finally the whole australian net censorship discussion. Gar. Raw emotions on display. &lt;br /&gt;&lt;br /&gt;My head hurts. &lt;br /&gt;&lt;br /&gt;On the upside, I can see a bunch of new technologies stepping up to allow us to step through the multi-core insanity. F# on .Net is going to be interesting, to say the least. =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-9173614878633137291?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/9173614878633137291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/11/experience-like-no-other.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/9173614878633137291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/9173614878633137291'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/11/experience-like-no-other.html' title='An experience like no other...'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-3602072546557482775</id><published>2008-11-13T17:36:00.002+11:00</published><updated>2008-11-13T17:40:39.988+11:00</updated><title type='text'>Thoughts on Remix culture</title><content type='html'>One of the things that I like about developing for the web is that there is a culture of openness about web development techniques. There has to be, all the source is out in the open already. In fact, there is significant pressure on web developers to write good code because it's all hanging in the breeze.&lt;br /&gt;&lt;br /&gt;One of the impacts of this is rapid migration of new ideas. Part of this is down to the ease with which one can pop open firebug and have a poke around inside someone's html and css. It makes for easy remixing.&lt;br /&gt;&lt;br /&gt;I suspect this is probably the hardest part for adoption of Flash and Flex - all the really cool apps are not open for review and learning. Actually, the same can easily be said of back end development. *cough* Google *cough*&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-3602072546557482775?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/3602072546557482775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/11/thoughts-on-remix-culture.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/3602072546557482775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/3602072546557482775'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/11/thoughts-on-remix-culture.html' title='Thoughts on Remix culture'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-1055613525851765695</id><published>2008-11-12T10:21:00.002+11:00</published><updated>2008-11-12T10:27:17.542+11:00</updated><title type='text'>Realisation of the day</title><content type='html'>(Although, I'm sure I've had this one before.)&lt;br /&gt;&lt;br /&gt;Application development is broken. This much is obvious to most folk. The reason is interesting in that it reflects something that is true of all design.&lt;br /&gt;&lt;br /&gt;There is no right time to design the application's interface.&lt;br /&gt;&lt;br /&gt;During initial specification, when most people spec an interface, most people can't visualise using the application. Thus you get underspecified and inconsistently specified interfaces. By the time an application is built, it is too late to specify, as change at this point usually requires complete rewrites of the majority of the code base.&lt;br /&gt;&lt;br /&gt;In short, by the time people can actually use an application, their reaction is always "That's not what I want!"&lt;br /&gt;&lt;br /&gt;There has to be a better way. And I intend to build it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-1055613525851765695?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/1055613525851765695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/11/realisation-of-day.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/1055613525851765695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/1055613525851765695'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/11/realisation-of-day.html' title='Realisation of the day'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-4886036570233574693</id><published>2008-11-11T21:15:00.003+11:00</published><updated>2008-11-11T21:17:31.266+11:00</updated><title type='text'>Change in perspective...</title><content type='html'>Possibly the biggest change after coming to grips with ANTLR is now no system is "too big" to tackle. If I can design a DSL that encompasses the design, then I can implement the whole thing. Sure, there is a whole bunch of work writing the various traversals and the code generation templates. &lt;br /&gt;&lt;br /&gt;But there is suddenly no boring trudge work left. =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-4886036570233574693?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/4886036570233574693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/11/change-in-perspective.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/4886036570233574693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/4886036570233574693'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/11/change-in-perspective.html' title='Change in perspective...'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-858312062221814864</id><published>2008-11-09T18:04:00.001+11:00</published><updated>2008-11-09T18:06:04.183+11:00</updated><title type='text'>Random musings</title><content type='html'>For an industry whose primary sales schtick is "money savings through automation" we are remarkably attached to doing things manually.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-858312062221814864?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/858312062221814864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/11/random-musings.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/858312062221814864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/858312062221814864'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/11/random-musings.html' title='Random musings'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-8952520255292246385</id><published>2008-11-09T08:52:00.002+11:00</published><updated>2008-11-09T09:01:40.498+11:00</updated><title type='text'>Heretical stance of the day.</title><content type='html'>I love of all things Google - I use GMail, Google Docs, Blogger, Analytics, AppEngine, and GWT. But that doesn't stop me thinking things are wrong with the big G.&lt;br /&gt;&lt;br /&gt;One of the important things about capitalism is it's darwinian nature. One of the things wrong with most companies is that they are, for all intents and purposes, command economies. Google tries very hard to allow darwinian nature in, but there is a serious problem.&lt;br /&gt;&lt;br /&gt;Google is the TRS-80 of the cloud era. It is amazing that it works, and it is creating a new world, but that doesn't mean it is of the new world. The TRS-80 was no Apple PowerBook.&lt;br /&gt;&lt;br /&gt;Google is the leading edge, and thus being technically right is important, but for what comes next, design is more important than algorithms. So, who is going to be the Apple of the Cloud Computing era?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-8952520255292246385?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/8952520255292246385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/11/heretical-stance-of-day.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/8952520255292246385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/8952520255292246385'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/11/heretical-stance-of-day.html' title='Heretical stance of the day.'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-8038791225122342715</id><published>2008-11-08T19:33:00.001+11:00</published><updated>2008-11-08T19:35:10.070+11:00</updated><title type='text'>My head, it hurts...</title><content type='html'>CSS, JavaScript, Yahoo UI, ANTLR...&lt;br /&gt;&lt;br /&gt;One of these days I might learn to not try to boil the ocean.&lt;br /&gt;&lt;br /&gt;Nah.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-8038791225122342715?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/8038791225122342715/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/11/my-head-it-hurts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/8038791225122342715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/8038791225122342715'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/11/my-head-it-hurts.html' title='My head, it hurts...'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-2539652180864109009</id><published>2008-11-08T09:09:00.003+11:00</published><updated>2008-11-08T09:16:23.380+11:00</updated><title type='text'>ANTLR as a gateway drug to lisp?</title><content type='html'>I'm reviewing the code I wrote for my code generator, and it wound up looking a lot like lisp. Actually, a lisp with destructing bind. Like Clojure, say.&lt;br /&gt;&lt;br /&gt;The biggest advantage for me with using ANTLR over the lisps is that I can, and do, look at the generated parser and tree parser code. I understand the underlying implementation, which is essential for being able to debug. Clojure is a step into the wilds for me, I don't really understand what it is doing, and there is only so much macro-expand tells me. &lt;br /&gt;&lt;br /&gt;Hopefully playing more with ANTLR will allow me to understand how Clojure works...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-2539652180864109009?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/2539652180864109009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/11/antlr-as-gateway-drug-to-lisp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/2539652180864109009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/2539652180864109009'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/11/antlr-as-gateway-drug-to-lisp.html' title='ANTLR as a gateway drug to lisp?'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-5009569164790106681</id><published>2008-11-07T01:57:00.002+11:00</published><updated>2008-11-07T02:01:02.393+11:00</updated><title type='text'>Drunk, reflective, and in need of a holiday</title><content type='html'>I'm making bad decisions, being pig headed when i should roll over and admit i'm wrong.&lt;br /&gt;&lt;br /&gt;A fair bit of it of late.&lt;br /&gt;&lt;br /&gt;On the up side, i'm having a holiday soon. It'll being a juggle financially, but on the upside I'll focus on my projects instead of trying to force my work into being interesting. &lt;br /&gt;&lt;br /&gt;And if my projects work out, work will get a whole lot easier, and maybe even more interesting.&lt;br /&gt;&lt;br /&gt;This has been brought to you by the letters b, e, e, and r. And the number 2. Yeah, time I slept. More beer tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-5009569164790106681?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/5009569164790106681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/11/drunk-reflective-and-in-need-of-holiday.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/5009569164790106681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/5009569164790106681'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/11/drunk-reflective-and-in-need-of-holiday.html' title='Drunk, reflective, and in need of a holiday'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-4973860489470079838</id><published>2008-11-04T21:04:00.002+11:00</published><updated>2008-11-04T21:11:00.374+11:00</updated><title type='text'>Another direction change</title><content type='html'>Now that my code gen is starting to spit out code, and actually usable code at that, I am starting to get larger aspirations.&lt;br /&gt;&lt;br /&gt;One of the continuing bugbears of my professional existance is the creation of webapps. They have a bunch of inputs, there is some processing, and a bunch of outputs. In all honesty, it sounds, at the highest level, like something that should respond to automation.&lt;br /&gt;&lt;br /&gt;In fact, a lot of people have tried. The biggest issue is that all the current code generators are finished products. They are designed from the ground up to produce finished output. I think this is the wrong approach - the resultant webapps are invariably broken by the inability of the user to express their specific requirements in the tool's input medium.&lt;br /&gt;&lt;br /&gt;I think ANTLR's approach to building a DSL, and then allowing embedding of chunks of java through it is the correct approach. The DSL expands, and the embedded java is exposed in place. I think this is what is required. A DSL for capturing web applications, along with the ability to embed java in it as the "business logic".&lt;br /&gt;&lt;br /&gt;Mmmm. Yea yea. I've sold my soul to ANTLR. =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-4973860489470079838?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/4973860489470079838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/11/another-direction-change.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/4973860489470079838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/4973860489470079838'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/11/another-direction-change.html' title='Another direction change'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-8824632066514416481</id><published>2008-11-03T20:48:00.002+11:00</published><updated>2008-11-03T21:02:53.182+11:00</updated><title type='text'>Thinking about libraries in lisp</title><content type='html'>One of the things that always confused me with lisp is that for a fifty year old language, there is bugger all in the way of battle hardened libraries. Take java, a mere puppy at ten, and yet it has more libraries than you can poke a stick at. And don't get me started about c. We'd be here until Christmas. The year after next.&lt;br /&gt;&lt;br /&gt;Now that I am playing with ANTLR, I think I have understood why there are no libraries. You see, the desire for libraries is to reduce the programming effort to achieve a goal. The amount of code required to write all the database access layer in a reasonable sized webapp is considerable, so people use &lt;a href="http://hibernate.org/"&gt;Hibernate&lt;/a&gt; instead. No one likes Hibernate, in fact there are rants upon rants about how bad it is, but all said and done, using hibernate is better than not shipping at all.&lt;br /&gt;&lt;br /&gt;The problem with Hibernate and co is that the programmer winds up giving up control. He (or she) has no choice but to interact with the library on it's terms. If you don't like the terms, find another library or write your own. If you want to do something like what Hibernate does, but slightly different? Fork it, if you are brave. More likely, you will curb your tongue, and agree that Hibernate's way is the one and only way, and deal.&lt;br /&gt;&lt;br /&gt;With a code generator, this is suddenly not a trade off I have to make. As long as I can write prototype code from the database up to the user interface layer, and I can express my design in some computable data format, then I can slice up the prototype code into templates, and generate out the whole application. Libraries suddenly are a source of headache, constriction, and bugs, instead of being a saviour.&lt;br /&gt;&lt;br /&gt;In other news, I'm finding Google less and less useful as a source of knowledge. Thanks to an explosion of indexed content of varied value - i'm thinking of web forums full of questions - my keyword searches are returning pages full of my keywords, but no actual usable information.&lt;br /&gt;&lt;br /&gt;I'm resorting to long form book purchases to get the knowledge I need, often in pdf format. A positive thing for artists and authors, but worrying for the big G.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-8824632066514416481?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/8824632066514416481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/11/thinking-about-libraries-in-lisp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/8824632066514416481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/8824632066514416481'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/11/thinking-about-libraries-in-lisp.html' title='Thinking about libraries in lisp'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-6407983450892819762</id><published>2008-11-03T14:15:00.003+11:00</published><updated>2008-11-03T14:20:24.240+11:00</updated><title type='text'>I'm becoming a religious zealot</title><content type='html'>(Becoming?)&lt;br /&gt;&lt;br /&gt;Anyways.&lt;br /&gt;&lt;br /&gt;I wrote the guts of a &lt;a href="http://en.wikipedia.org/wiki/Model_Driven_Engineering"&gt;Model Driven Engineering&lt;/a&gt; code generator over the weekend. I think I might be getting &lt;a href="http://antlr.org/"&gt;ANTLR&lt;/a&gt; finally.&lt;br /&gt;&lt;br /&gt;Only downside? Everything I look at I start working out how to build a compiler and/or a generator for it. Gah.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-6407983450892819762?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/6407983450892819762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/11/im-becoming-religious-zealot.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/6407983450892819762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/6407983450892819762'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/11/im-becoming-religious-zealot.html' title='I&apos;m becoming a religious zealot'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-7225599196356863778</id><published>2008-10-31T21:31:00.003+11:00</published><updated>2008-10-31T21:46:43.494+11:00</updated><title type='text'>Getting one of the Zens of Lisp</title><content type='html'>It's odd, I've always admired, and been scared of, lisp. It's one of those languages that everyone always talks about emotionally. There are the zealots, preaching macros and homoiconic data / code representation, and there are the rest who pick on it's parenthetically obtuse nature.&lt;br /&gt;&lt;br /&gt;I think I am starting to understand why Lisp's macro system is such a big thing. The amusing thing is that I'm not using Lisp to do it - I'm using a code generator to write a code generator from a hand designed data language that looks suspiciously like JSON. But it's a tad more prescriptive than JSON. Honest.&lt;br /&gt;&lt;br /&gt;I'm finally getting the religion on capturing requirements in computable format. Clients always change one of two things - the original spec, or how they want the whole product to look. The first requires only that the requirements be updated, while the later requires that the generator be updated. In neither case is a bulk change to the whole code base required.&lt;br /&gt;&lt;br /&gt;Finally, the project implementation can be correctly factored. I like it, a lot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-7225599196356863778?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/7225599196356863778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/10/getting-one-of-zens-of-lisp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/7225599196356863778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/7225599196356863778'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/10/getting-one-of-zens-of-lisp.html' title='Getting one of the Zens of Lisp'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-4859474689782327565</id><published>2008-10-29T19:24:00.002+11:00</published><updated>2008-10-29T19:35:51.687+11:00</updated><title type='text'>Constraints</title><content type='html'>The current webapp designs use a layered model, like all things in computer science. Each layer has it's primary concerns, the database layer is concerned with persistance, the client layer with presentation, the middle layer with everything else. The problem with this design is that abstractions leak, and constraints of each layer are visible in other layers.&lt;br /&gt;&lt;br /&gt;My belief is that the correct way to engineer a webapp is to acknowledge the constraints of each part. The disks can deal with about 100 seeks per second per spindle, give or take. The channel between the web browser and the web app is high latency. And the most important is that any webapp design that requires disk seeks on either queries or updates is inherently DOSable.&lt;br /&gt;&lt;br /&gt;This leads me towards a asynchronously updating network design, wherein browsers notify the webapp of changes, the webapp responds with changes it has seen, and the webapp streams updated state to disk. Think of a spider with it's eight legs spread on different strands, listening to it's web. The trick is going to be generating consistent code across the various nodes, the html, the javascript, the concurrent server code, the reporting code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-4859474689782327565?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/4859474689782327565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/10/constraints.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/4859474689782327565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/4859474689782327565'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/10/constraints.html' title='Constraints'/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7561782418501724314.post-4747515670813717667</id><published>2008-10-29T17:40:00.001+11:00</published><updated>2008-10-29T17:41:37.458+11:00</updated><title type='text'></title><content type='html'>A new place to rant and ramble, a new face to see the world with, a new time to create new realities. As they say, growth is change, and change involves letting things go. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And with this, I start anew.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7561782418501724314-4747515670813717667?l=mouserants.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mouserants.blogspot.com/feeds/4747515670813717667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mouserants.blogspot.com/2008/10/new-place-to-rant-and-ramble-new-face.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/4747515670813717667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7561782418501724314/posts/default/4747515670813717667'/><link rel='alternate' type='text/html' href='http://mouserants.blogspot.com/2008/10/new-place-to-rant-and-ramble-new-face.html' title=''/><author><name>Brett Morgan</name><uri>https://profiles.google.com/108316366145145424476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WfJyK9PSyBY/AAAAAAAAAAI/AAAAAAAAAQs/JmfypO6jtko/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
