Older blog entries for osullivj (starting at number 45)

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 !

Tajea: a colleague just sent me a link to Tajea. They have Brian Kernighan on the board. Which is interesting. But nothing else adds up...

  • The web site is stale: for instance the language spec is apparently in revision "and will be available in May 2002".
  • There is no substantive content on line. To join Tajea's "alpha circle" you have to pay them $69 !
  • Google isn't aware of tajea.com, yet. Who sets up a business web site and doesn't even register it with Google ?
  • We've had C, C++, Java and C#. Not to mention Objective-C, C+@ and others. Do we really need another C derivative ? Maybe the "right" language is Erlang, Haskell, Scheme, Smalltalk, Fabrik, Ruby, Python, Eiffel or Lisp.

What do you all think ?

Hacking: the levitt codebase is really starting to come together. levitt is a framework, as well as a series of apps built on that framework. It's impossible to just build a framework, you have to build the apps at the same time too. So it means constant refactoring. The levitt object system uses extremely loose binding, and inheritance by prototype. I'm still not sure of some of the consequences of this design approach. But this evening I had an insight brewing in the back of my head about the interplay between inheritance by prototype and loose binding. I can feel it's going to pop out some time over the next few days.

Reading: just finished Roy Jenkins' excellent Churchill. Everything I read about Churchill deepens my admiration for the man. One sentence from the book has stuck in my mind, and it's not one of the usual quotes from Churchill's wartime speeches. It's from a letter to his wife Clemmie, on the day he became Prime Minister. That's the 10th May 1940. At his point Hitler had invaded: Rhineland (1936), Sudetenland (1938), Austria (1938), Czechoslovakia (1939), Poland (1939), Denmark (1940), Norway (1940). On the 10th Hitler launched his invasion of Belgium, Holland and France. Any lesser man than Churchill would have thrown in the towel. Instead he breathed a sigh of relief at finally getting the top job, and commented to Clemmie: "at last I have the authority to give directions over the whole scene." Such self confidence ! Many in the British establishment wanted to try and cut a deal with Hitler in May and June 1940, reasoning that to fight on was pointless. Imagine what the world would be like if they had prevailed ! Only Churchill had the will and determination to resist Hitler at any cost, and only he had the perception to realise the monstrous evil of the Nazi regime. As early as 1934 he'd spoken in the Commons in condemnation of Nazi anti-semitism. Churchill knew that compromise with Hitler was futile, and the only possible course was a struggle to the death.

So having finished Jenkins' Churchill, I'm now onto Roger Lowenstein's When Genius Failed. An excellent, non technical, account of the collapse of Long Term Capital Management. If you're at all interested in wholesale finance, trading, arbitrage and risk management this is a must read. It's fun to see some of the same characters that were in Michael Lewis's Liar's Poker popping up again.

Code: just put out a new release of my templating system. Release 0.3 of templ adds a Tcl implementation to the existing Java and Python code.

templ is Yet Another Templating System. But there are a couple of things that make it slightly different...

  • Implementation language neutrality. The template syntax doesn't embed fragments of the implementation language, like for instance JSP. This makes it possible to use the same templates with implementations in more than one language.
  • Target syntax neutral. So the template system can be used to generate HTML, XML, CSV or any text output.
  • Driven by data provided in neutral data structures. For example, Python's built in lists and dictionaries. Or java.util.Map and java.util.List. In Tcl lists are used. The idea is to avoid structural coupling to an application data model.

36 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!