Older blog entries for osullivj (starting at number 48)

Hacking: rewriting the core system for my main project -levitt - for the fourth or fifth time. I had the original idea for this stuff in early 2001, and I've been tinkering ever since. It started off as a Zope product, coded in Python. I'm sticking with Python, naturally, but have dropped Zope, and I'm moving away from object orientation too. Zope has a lot to offer in terms of server architecture and ready made UI. ZODB persistence, transactions, threading model and the management UI give a lot of leverage. But to exploit them you have to buy into the Zope Object Model - including acquisition - and that's too big an imposition. Especially since I'm now moving away from OO.

Why move away from OO ? Because it introduces too much coupling between data and behaviour. Mainstream OO, with single inheritance and strong compile time type checking, as exemplified in Java and C#, binds your method body code very tightly to your data, making it less reusable. Dynamic languages like Python and Smalltalk introduce less coupling between data and behaviour, so code is more generic and reusable. I aim to loosen that coupling even further in levitt.

Seeing an Advogato link to Xerblin got me really excited the other day. There are some similarities to levitt: it's a programming system project, coded in Python. Xerblin's developer has used Forth ideas in his kernel. I have been using a Forth like stack based core in levitt too. I'm now moving to something different, since I've come to think there's too much state on the stack. Oberon ideas are there in Xerblin too. I'm far less familiar with this system than Forth and Python, but it sounds cool. It's good to see some fresh approaches to programming systems, rather than the same tired old ideas from Java and .Net.

Books: war reading continues with Hitler and the Power of Aesthetics. The obvious and pressing question on Nazism is: how could it happen ? Most answers are framed in terms of brutality, coercion, desperation, economic catastrophe. These explanations have seemed incomplete to me for some time now. Last year I read Sebastian Haffner's Defying Hitler, which gives one a tremendous sense of how the Nazis skillfully played on the psychology of loyalty, camaraderie and patriotism to sweep people into complicity. Spotts book explains in compelling fashion how seductive the aesthetics of Nazism were: the torchlight parades, the SS uniforms, the swastika banners, Wagner's music, Speer's monumental neo-classical architecture, and Hitler's theatrical sense of neo-religious ritual. The book reminds me again of Paul Feyerabend commenting on how he nearly joined the SS instead of the German Army, because the uniform was so cool.

Another thing that made Nazism possible was Hitler's charisma. Our image of Hitler now is largely determined by Allied wartime propaganda, which portrays him as a ranting demagogue, foaming at the mouth. That can't have been how the German populace percieved Hitler in the 30s. Spotts has a lot to say on how Hitler didn't engage in traditional political debate, but made an emotional appeal to his audience. By all accounts, his personal presence was hugely charismatic and overpowering. So we should distrust charisma. Personal experience has led me to this conclusion too - when I've made mistaken career choices its been because I've fallen prey to charismatic and persuasive personalities. Charisma can hide a multitude of sins. I must do some more reading on the mechanisms of charisma.

Looks like Jeff Vroom has broken cover. Good luck with the quest Jeff !

Hacking: did a minor release of templ last night.

Quicksilver: started reading the follow up to Cryptonomicon. I'm only 20 pages in, but already I'm transported, enraptured and enthralled. I'll be heading on over to metaweb to log my thoughts as I read.

Work: the new project is great - the best thing I've worked on professionally for several years. I'm getting to do some hardcore multi-threaded C++, which is a joy.

Blogging: two entries in two days !

Spam: got my first piece of snail mail spam yesterday. Of course, junk mail is nothing new. But this was a hand addressed letter to me, containing a hard copy of a Nigerian scam. No amount of Bayesian filtering is going to stop this !

BookCrossing: murrayc's recent post alerted me to BookCrossing. In an act of Python advocacy I released one of Sean McGrath's books today.

Hacking: new minor release of levitt on my personal site. Just some minor Java fixes.

18 Jun 2003 (updated 18 Jun 2003 at 11:04 UTC) »

Type.GetType: If the type is in the calling assembly, or in mscorlib.dll, a simple type name will suffice. So if we're invoking from myAssembly.myClass this will work...

Type.GetType( "myAssembly.myOtherClass");

For types in some other assembly an assembly name needs to be appended to the type name. That assembly name should be full or partial. If the assembly holding the type is in your executable directory, a partial assembly name will suffice. For instance, if you're loading anotherClass from anotherAssembly then you'll need...

Type.GetType( "anotherAssembly.anotherClass, anotherAssembly");

If the type you're attempting to load isn't in the calling assembly, mscorlib.dll, or an assembly in the executable directory you will need a full assembly name. That includes the version, culture and public key token. Here's an example for a WinForms column style...

Type.GetType( "System.Windows.Forms.DataGridTextBoxColumn, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");

How to discover the version, culture and key token info for an assembly ? Use gacutil /l to list the global assembly cache.

20 May 2003 (updated 20 May 2003 at 12:48 UTC) »

Mastercare: having a lot of fun helping Marie's campaign against Dixon's Stores Group, and their clueless customer service arm, Mastercare. The novel thing about Marie's blog is how it captures the powerlessness and agony of the consumer on the recieving end of automated, scripted CRM. This is what happens when companies like DSG (PCWorld, Dixons, Currys) view customer service as pure cost and overhead.

The Cluetrain Manifesto was largely about the way clueless companies alienate their customers by attempting to automate them, and how the Internet can change that by opening a new channel for a real person to person conversation. I do fear that corporations that could learn from it may now dismiss it as part of late 90s dot com hype. Blogging is a new kind of channel that gives a near real time public voice to the consumer. Can it help swing the pendulum against companies that treat their customers like DSG ? I hope it can, especially when it's combined with the power of Google Adwords.

Doc Searls recently wrote insightfully on Google Adwords. His article prompted the idea of using Google Adwords in Marie's guerilla campaign. Buying one of those little coloured boxes on the right of a Google results page is incredibly cheap. At the cost of 4 pennies per click through Marie bought a sponsored link for "Mastercare" as a search term. Try it. Then try this. If Marie's ad doesn't come up it's because she's hit her daily spend ceiling at Google. When it does come up it's mixed right in with Dixon's own ads. Retailers like DSG spend millions developing and promoting their brands. But Google Adwords allows Marie to get her message in on a par with DSG's. And her message is a truthful, grassroots account of what it's really like to be a DSG customer with a problem. Radical !

Hacking: new 0.4.2 release of templ. Has a minor bug fix to the Python implementation. I uncovered the bug while plugging the templ 0.4.1 impl into my other project, levitt. If you need a templating system with implementations in four languages (Python, Tcl, Java, C#), you know where to go.

Work: now working on a .Net C# WinForms project, which is a pleasure. This is my second major C# project, and I'm really warming to C# as a language. What with properties, attributes, delegates and events, there's a bit more meat for an old C++er than Java.

Reading: more war reading - Anthony Beevor's Berlin, the downfall. It's excellent - fluent prose giving a mixture of personal stories, reportage on the Nazi and Soviet leaderships, and military history.

Hacking: templ now has a C# implementation. That makes four implementations of the templating system: Python, Tcl, Java and C#. C#'s as keyword is handy for cleaning up casting logic that needs quite a few more lines of code in Java. No need for casts in Python, or Tcl for that matter !

And development on levitt continues to grind forward. I'm in the middle of yet another refactoring. I reckon that's par for the course when building a framework and several sample apps simultaneously.

Kid's birthdays: Miles had his 5th a couple of weeks ago. 20 5 year olds rampaging around the house ! We hired a bouncy castle which the kids loved. However, some of the boys got a bit hyper, and there was the odd 'incident' on the bouncy castle. Cordelia's second is coming up soon, then we're done with birthdays until December. Phew !

39 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!