I am super excited about Google’s recent foray into cloud computing, the app engine. They are not first, I realize Amazon has been doing some pretty cool things with the S3 services and their computing services but the ability to simply and easily have an application that can leverage BigTable and GQL, google account authentication, image manipulation, memcache and having that all live within the seemingly infinite scalability of the google platform is extremely exciting for me. In fact it’s the whole reason for my recent resurgent interest in python. App engine out of the gate is a python runtime environment which is robust enough even to run frameworks like Django for your web apps.

ArsTechnica had some good comments on the service and one of their cheif concerns was being locked into the platform. I think this is not an invalid concern, but that the tools will be written to make migration from one platform to another a relatively trivial matter. From what I understand of GQL it is a subset of normal SQL with limitations like no joins which should make data/code migration easy, but scalability and hosting maybe not so much. There are open source implementations such as HyperTable which is modeled after Google’s data platform, but ultimately the article is right. Personally I don’t see myself writing large scale applications on this platform though, I see this much more as a utility model for small useful services.

I registered for the preview of app engine on the same day it was announced but not early enough to be one of the lucky first 10,000. When I did get my invite a couple weeks ago I immediately started to create applications. It’s clear this is exactly what everyone else did and I’m glad Google has capped usage at three applications per developer. Already it’s almost as bad as trying to register a domain. For each of my three applications I had to try a series of names before getting a clear one. In other words none of my ideas are at all unique. :-) On a positive note when I checked the names I was looking for there were also no uploaded applications for any of them. I predict Google may have to have an expiry date on these - I can see myself taking weeks or months to finally get anything uploaded.

http://silitrader.appspot.com (silverlight port of the old game OilBaron)
http://wherediditallgo.appspot.com (personal spending tracker)
http://blogquotes.appspot.com

I actually created that last application as I was trying to find a simple means of having a rotating list of hand picked quotes show up in the header of my blog. Back when somatose.com was hosted with LunarPages this would have been trivial, throw the quotes into a textfile, write a script to randomly choose and insert one as I was building the page. I moved from a hosted environment to using blogger so that I would stop tinkering and focus on actual content. I spent most of tonight tinkering though, building up to actually building blogquotes. (By the way I am sure there are other blog quote like tools out there, but this is a rare case where I don’t mind reinventing the wheel somewhat)

Now the nature of the tinkering has just changed. Rather than write a small shell script that spits out random lines I will actually build something of a small application/service. The quotes will be stored using the datastore api (GQL), and will be publicly visible. Other users will be able to authenticate and store their quotes in a similar manner. A widget will be built and hosted from that application that enables anyone to paste in a snippet of html to add random quotes from their personal db. I as a user can subscribe to my friend’s quotes. It’s remarkable really, the differences and yet familiarity of this new ecosystem. And while I do miss the control of simply writing a little shell script I have to say I love the idea of the internet being populated by these little widgets of functionality. The emergence of ajax and increasing power on the client means that millions of non-technical users who blog on platforms like blogger and wordpress can very easily use my quote engine. How cool is that?

Google’s API’s (and Amazon’s) are proving to be the next Win32. Massively widespread and base functionality that anyone can build on. The plumbing is there for us to be able to chain together these small tools/widgets in much the same way a clever unix user could within their shell. And once the honeymoon wears off and I actually give some though to hosting data in the US and dealing with popularity should one of my apps get hammered and I end up having to pay Google usage fees… well until all those little issues I can just be excited again about the changing landscape.


The promise of the electronic office has been so damn close for so damn long now. I know there are thousands and thousands of people out there who now work primarily from home, but I remain on the outside looking in. (or inside looking out?) Visions of a city like Nelson or maybe Prince Rupert dance in my head, with me in my large solitary office overlooking the lake, hardwood everywhere, the distant sound of my daughter playing outside. <deep virtual breath> My neural implants connect me to the office at “ludicrous speed” and my Neo-like abilities make distance immaterial.

Reading reddit too much can make you paranoid (and slightly dysfunctional, and unproductive, and slightly dumber) and these days I’m thinking too much about the impending collapse of our society and my desire to get the hell out of dodge before it happens. Preferably a nice small mountain town on a lake here in BC. Somewhere I can grow and fish/hunt food if the shit hits the fan. Somewhere where I’m not spending 40% of my income on housing. Of course, the idea of me hunting is almost enough to make me cry with laughter… I am so not a hunter.

Anyway, this post is about robots not the apocalypse. There are a few robots now intended to make the awkward ritual of sitting around in a board room and talking to a TV a little more awkward by having the TV come see you! Wonderful wonderful idea, and I’m sure extremely fun for the remote worker. A little less fun for the nervous employee constantly watching their backs for this thing to roll up behind them.

I can’t imagine this thing not having kick-me signs and other paraphernalia hanging from it within minutes in mockery of the whole process. I also can’t imagine being the remote worker and resisting the urge to roll around the office all day looking for interesting things to see. I think an episode of the office where Michael gets one of these would be brilliant and the comedic geniuses on that show could have some fun.

This isn’t what I normally consider a robot because it’s not autonomous, but it’s still cool, and if it helps me unplug from the city while staying connected to work I love it.

Giraffe video conferencing robot to weird employees out - Engadget

HeadThere - the maker of the Giraffe


My internal debate rages on… I have some C++ courses in the pipeline so I will definitely learn more than the basic understanding/grasp I have now…

Still though. Currently I associate C++ proponents with old-school attitudes on the need for absolute control and a fear of newer levels of abstraction that are allowing increasing complex and large projects. Garbage collection, the .NET framework etc, are all grouped together into a category of tools that only “weak” programmers need. I recoil pretty hard from this line of thinking and associate it with a dangerous cowboy like attitude towards engineering.

There is a lure there, to join the elite, to be one of those cowboys who don’t need frameworks or garbage collection and who’s code can scream past yours with sheer force of will by the programmer. So I’m constantly torn between mockery and envy. I will say that I think it’s important to learn and think in C++ because the deeper our understanding of the systems we develop for the better off we are. I’d say the same thing about assembly though and would be just inclined to write large systems in C++ as I would in assembly.

My own line of thinking is that these abstraction layers we’ve invented are more akin to compilers and file systems and OS API’s. Why should we all re-invent the wheel (and poorly) when these problems can be solved in a generic way?

Anyway C/C++ are probably not going anywhere and have their niche, but I thought I would post this article to preserve it in my memory bank.

http://www.mistybeach.com/articles/WhyIDontLikeCPlusPlusForLargeProjects.html

I’m a graphing junkie, I have to admit it. So I was pretty pleased to discover that my power company (BC Hydro ) provides some interesting consumption graphs for month to month kilowatts per hour usage. I’m pretty sure my meter is only read every two months so some of the resolution is lost in this, but still it’s helpful.

One of the more striking trends I’ve seen in the data has been the birth of my daughter. Late nights, tons more laundry, cooking and heating bottles and leaving fans on so she can sleep. Power consciousness kinda goes out the window while we’re dealing with an unhappy Maggie.


Summer should see the trend reverse and then I think we’ll have to get creative in terms of keeping it down.


I read a very fun book on my holiday in Manitoba this last few weeks. It’s written by a biologist who has turned to fiction with an eye to producing some good hard core science based fiction. I would compare his work to William Gibson and Arthur C. Clarke.

The book is called “BlindSight” by Peter Watts, and I’ve added it to my LibraryThing, there is a link to my full review below.

http://www.librarything.com/work/1333265/reviews/31302401

As an added bonus (I discovered this after buying the book) the author has published it under a creative commons license and you can read the entire book online for free. How cool is that? (Read it here)

There is a lot to chew on in this book, but my post subject says it all. Seriously though, don’t judge based on that, it’s a good book. No really…






No


Yes
The image “http://images.amazon.com/images/P/0765312182.01._SX140_SCLZZZZZZZ_.jpg” cannot be displayed, because it contains errors.

I had to blog this, and yeah I'm going to be the billionth person to do so, but that's ok because no one reads my blog and it's basically just my personal public archive. (ppa?) 

This guy http://www.thomasfrank.se/sessionvars.html has managed to find a very clever place to store data within the browser without resorting to cookies, flash or anything beyond basic cross browser javascript. Apparently "window.name" which lost it's usefulness when the spammers started making popups obsolete can contain arbitrarily long strings that persist as long as that window is open (equivalent to a session cookie) 

This is damn cool, and while a part of me twinges at the hack-ish nature of overloading a window property with a bunch of json strings, well this is javascript we're talking about here so what the hell.  You're already standing out in the rain trying to build a fire with soggy sticks and no pants so why not use what you've been given. 

This is just one of those things I know I'll want to come back to one day for one of my pet projects so I thought I'd blog it. 

Fantastic molecular visualization of how dna, rna and ribosomes work… where was this kind of stuff when I was going to school?




I’m currently working on moving a web application from using some ad-hoc javascript and iframes to a full fledged ASP.NET Ajax implementation based around Telerik’s RadControls and a suite of our own controls. This is the third application we’ve given the ajax treatment to and each time we’ve taken a slightly different approach.

Approach 1 …   “Javascript + Web Services”

  • Full view manager/page controller implementation on the client side to handle events thrown by all the components on the page
  • Homegrown “ServiceManager” to handle brokering calls to the server
    • Centralized error handling
    • Shared message contract base class to allow “sub-messaging” for the server to send information to the view controller on the client
    • Blocking calls when things needed to be “modal” or serialized
    • … we had intentions of also building in grouping of calls
    • … we had intentions of canceling redundant calls when the user was asking for something that made a previous call unnecessary
  • Chatty - many calls, small amounts of data (largely json)
  • Javascript controls that render almost strictly client side based on data delivered over web services
  • Zero postbacks / Very fast
  • Expensive/Complex development and maintenance
  • Prone to memory leaks
  • More difficult to leverage third party controls

Approach 2 …    ”Update Panels”
  • Traditional ASP.NET development with a sprinkling of update panels where it made sense
  • Chunky communication… partial postbacks, but still heavy
  • “Simple” development - UpdatePanels were spotty at the time, there were quite a few workarounds hacked in to this interface
  • Medium reliance on third party controls
  • Less performance than “Javascript + Webservices”
  • Less transparency and control to developers

Approach 3 …   “Javascript + Web Services + Update Panels”
  • A view controller/ page manager approach similar to Approach 1 except that in this iteration we are relying on the ScriptManager and it’s events to handle a lot of what we were previously rolling on our own.
  • A heavy usage of Telerik’s Prometheus suite of controls, which in turn is built against the Microsoft Ajax Framework
  • Webservice layer for a class of managed actions where we control the control flow via our view controller
  • Partial updates for more complex control interactions/workflows
    • These are sometimes triggered by the controls themselves in which case we are dealing with “chunky” transactions
    • Othertimes triggered by the page manager in which case we have small requests and potentially heavy responses
  • Good use of third party controls
  • Chunky or Chatty based on need
  • Medium development complexity
  • Less transparency/control for developers
  • High development complexity
  • Better performance than Approach 2) but less than 1) 
  • Still prone to memory leaks

So you can see across these three different applications we’re dealing with a swinging pendulum of ajax development methodologies and philosophies. My hope with our most recent approach was that we would have the strength of increased reliance on Microsoft’s framework + Telerik’s suite of controls combined with hooks and web services to eek out that extra level of performance whenever needed. 

Of course in this latest iteration we also have the added complexity of having to port legacy controls on a very difficult timeline. So we have a collection of editors, some of which are doing chunky partial post-backs whereas some of our newer type editors are using a more… let’s say finely tuned approach where only the necessary data is sent and only limited page updates are performed. 

The third option still has some proving out to do. Rather then being the perfect blend of complexity vs performance vs reuse vs transparency is instead turning out to be not especially good at any of these.  I’m frankly a bit frustrated by the whole exercise right now an am increasingly eyeing the glorious promises of Silverlight

Really I don’t see this stuff getting any easier until we’re either seeing browsers that have equivalent capabilities in supporting Html 5 and all the exciting new javascript features of the future or a widespread installed base of Silverlight 2. haha… right. 




In GEB Hofstadter mentions the complexity in building an isomorphism between two poems written in two languages.


“In ordinary language, the task of translation is more straightforward, since to each word or phrase in the original language, there can usually be found a corresponding word or phrase in the new language. By contrast, in a poem of this type, [Jabberwocky, Lewis Carroll] many “words” do not carry ordinary meaning, but act purely as exciters of nearby symbols. However what is nearby in one language may be remote in another.”

Reading that acted as an exciter for my own interest in poetry. I immediately think about some of the poetry I have read which had the most impact for me and it did exactly this. The ability of a good poet to draw scenes by exciting patterns of shared experience and perception is really amazing. Choosing those “words that excite nearby symbols” is a bit of a game and for me what makes trying to write poetry enjoyable. It becomes almost technical or like solving a problem.

I am often cynical that poetry can be really widely appealing if only because the most poignant and effective poems I’ve read require a familiarity with the writer and a shared experience that allows compact transfer of imagery. Then again, some of the power in the compression and lossy nature of these poetic images is that there is room for interpretation in the eye of the beholder.

In a field at dusk, trees made short by distance, a line of black on blacker at a horizon pulled ever closer by night…

I just finished reading “The Dream Machine” and getting a very cool look at some early history of computing including the birth of Multics and it’s spin off and almost more interesting the birth of tools like email and ftp as a way to actually do something with the ARPANET that was being built. A great read for anyone interested in how we collectively have arrived at where we are today in computing. And as it happens, I’m also currently challenging a course on Unix which as part of the challenge requires that I complete a project before I can write the final exam.


The project itself is great fun actually. I’ve been in the world of Microsoft for so long at work that I’ve completely forgotten about the old days of living in vi on Solaris as part of my 9-5 work. (CATI programming back then) More than anything about Unix I love the power and flexibility of combining these small well written tools like awk, sed, grep etc. These are incredible tools and it’s easy to forget how powerful a fully text driven system really  is.  

I remember being completely stoked about Microsoft’s powershell project a few years ago. On the surface it seemed to take everything exciting about a Unix environment and add a layer of object orientation across it so that not only could you fully embracing piping and redirection with the help of some impressive shell programming capabilities but you also had the full .net framework at your fingertips and the ability to use reflection to “discover” a system at run time. This discover-ability aspect is key, and the importance of “man” to rusty or newbie Unix users can let you appreciate the value in being able to query objects to ask what they can do. The simplest example of where powershell is so powerful is to just imagine good ole ls, but where each element output from ls was an actual file or directory object. If you do nothing then those are simply iterated by ls and essentially .FileName.ToString() gets called for each… but if you pipe that output to your own iterator you can all of a sudden do some really amazing things with very little effort. 

Having said that though I never truly fell into powershell like I have unix in the past. In my opinion it’s about the eco-system. The set of utilities in unix work because everything in unix plain old text, meaning the same tools can be strung together to do any countless numbers of tasks without additional support. Compare this to powershell which really loses it’s value where .NET doesn’t exist. True, there are some amazing providers that bridge gaps into SQL Server, WMI, etc etc. But just the fact that you are now talking about .NET development to create those new bridges means we’re half a step behind the accessibility and simplicity of a text file. I do think that powershell will only get better with age, but for now unix as a whole is still king for me even if powershell is sexier. 

Anyway, this project I’m working on is just a series of clever questions that force you to construct chains of tools to elegantly (or inelegantly) solve a problem. It’s extremely fun and in the course of a couple weeks I’ve reinstalled cygwin at work, gotten ssh access to my mac at home and have had terminal open for pretty much a week straight on my iMac. It’s hard to keep this up without an actual task - and considering I’m still doing 95% .NET development i don’t expect this will continue for too long but it’s a good reminder.