Signatures Past And Present

A few of the email signatures I have used through the ages.

Just collecting them here for posterity, and for a bit of fun.

Gotta love Terry Pratchett's nicely warped view of things:

    .(         | "Build a fire for a man, 
   /%/         |    and he'll be warm for a day.
  (%(%))       |  Set a man on fire,
 .-'..`-.      |    and he'll be warm for the rest of his life."
 `-'.'`-'dd    |  --Terry Pratchett

And a nice comeback that puts me in my place:

"Give a man a fish,
   and you'll feed him for a day. 
 Teach a man to fish,
   and he'll buy a funny hat. 
 Talk to a hungry man about fish,
   and you're a consultant."

Some prog-rock philosophy sums things up for me:

"And so with gods and men
 The sheep remain inside their pen,
 Though many times they've seen the way to leave."
 -- Genesis, "Firth of Fith"
"electricity made us angels 
   and money made us fools, 
 but fear of future shackled us
   to gods who ride the backs of mules."
 -- Bill Nelson

The following came from Charles Handy's The Empty Raincoat:

"A good job is like 
 an inside-out donut."

So: a good job should have a well-defined centre, with lots of fluffyness around it (giving opportunity and variety).

Avoiding XML DTD/Schema Lookups

It's a common need (especially when developing simple, standalone XML-based apps.): avoiding having to go to the network to resolve DTD/Schema lookups…

I keep forgetting how (and I was just asked how), so here is a snippet to jog my memory:

public static Document parseXMLDocument(String file)
    throws FileNotFoundException, ParserConfigurationException, 
           SAXException, IOException
  {
  InputSource in = new InputSource(new FileReader(file));
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  factory.setValidating(false);

  DocumentBuilder db = factory.newDocumentBuilder();
  db.setEntityResolver(new EntityResolver()
      {
        public InputSource resolveEntity(String publicId, String systemId)
        {
        return new InputSource(new StringReader(""));
        }
      });

  Document doc = db.parse(in);

  return doc;
  }

Yes, it's quick-and-dirty; yes, it will mean that you can't ever validate against a schema and yes, it is occassionally useful.

There's a similar example here.

Hope its useful for someone else…

Tags: Tools

A Cuteness Interlude

This will brighten your day, I guarantee!

A baby Echidna, one of Australia's unique monotremes.

Why Java?

I am often asked questions like: "Isn't Java too old now?" or "C# is better on the desktop, so why shouldn't we use it for our next enterprise project?" or even "Java is far too difficult for our dev. team. I'm told that C# is much easier, so shouldn't we go that way?"

I always answer that the respective Java and .Net technologies are roughly equivalent (I have my preference, of course) but that there are important differences in the ethos of the developer communities that IMHO make Java a better choice overall.

I don't want to get into a flame war here, but Dear Developer… reinforces this quite nicely:

Here's my point: some of the most influential books on software development and programming such as …hold a vast, deep and rich knowledge of the craft of software development that VB/VB.NET developers are mostly ignorant of. …they should take a look at Enterprise Library from the Patterns and Practices Group at Microsoft (…) for it can save them time, cost and effort in common development situations. I even tell them that it is open source, which means they have access to the code. However, I don't get much excitement from their part, …, I haven't even heard of one VB developer simply using Enterprise Library in his projects. The same goes for projects like nHibernate, the Castle project, NUnit, even mocking tools like Rhino.Mocks and Moq. That's very sad, because by not using some of these tools, VB developers tend to stay far behind common practices such as TDD and technologies like ORM tools…

It comes down to: which group of developers is going to create better quality software? This is not a "my for loop has better syntax than yours" question, but a question that speaks to the fundamental ethos of the developer group; to their willingness and ability to embrace and improve with new tools and techniques.

I have witnessed several .Net teams operate and it has always seemed to me that they have been pushed into adopting the technology and are looking for the minimal step to take, for the minimal change to their toolkit or their technique toolbox, for the quickest way to return to their comfort zone.

This is not universal, of course (trust me; I have seen things come from the Java/J2EE communities that would curl your hair!) but my experiences point to the truth of what I have written.

To me, this is the key differentiator.

Tags: Java

An Interesting Project

Agile: In A Flash

Jeff Langr and Tim Ottinger present The Agile In a Flash project, which will result in a book and replenishable deck of at least 52 flash cards.

It's an interesting site, with lots of little flash cards, like this:

(Make It Work, Make It Right, Make It Fast)

Tags: Agile

That About Sums It Up

Chapter 21 of Agile Testing: A Practical Guide for Testers and Agile Teams by Lisa Crispin and Janet Gregory starts with the following image:

This mindmap pretty much sums up what it takes to "…help testers succeed on agile teams and help agile teams succeed at delivering a high-quality product."

Thanks to infoq.com for publishing this excerpt.

Tags: Agile

Virtual Developer

My colleague and friend Alex Garrett has just blogged about the remarkable Cooperative Linux.

This has prompted me to give Microsoft's VirtualPC 2007 a plug. I know it isn't trendy to say this, but the product is really very good (it's actually a brought-in product, so all you Microsoft haters out there can cut me some slack). It's reliable, fast (makes good use of the real underlying silicon), is very faithful in its virtualization and (unlike most of its competitors) doesn't litter the system with virtual adaptors, etc.

It'll run a lot of stuff and there are some nice tools and blogs out there, don't let anyone tell you otherwise.

It's free, just like it's slightly bigger brother.

I have used this extensively while developing several products, notably QNX Neutrino Real-Time OS.

As with all virtualization products, VirtualPC is truly excellent for assisting with testing and learning-situations where it is important to be able to "roll back the clock and start again." VirtualPC makes it possible to do this with a few clicks; it's a lot more difficult with a tool like CoLinux (or Wubi, say).

At this point in time, I still prefer VirtualPC to the competitors.

The Virtualization Interoperability Pact between Microsoft and Redhat also keeps life interesting in this space.

Tags: Tools

Unacceptable

Simply unacceptable.

http://www.theage.co … t-20090321-951z.html:

THE Government will begin trawling blog sites as part of a new media monitoring strategy, with documents singling out a website critical of Communications Minister Stephen Conroy for special mention.

Soon after Senator Conroy praised Singapore's Government for reducing monitoring of blogs, tender documents issued by the Department of Broadband, Communications and the Digital Economy reveal it is looking for a "comprehensive digital monitoring service for print and electronic media".

Stalin tried this, leading to Samizdat: the clandestine copying and distribution of government-suppressed literature or other media.

http://www.theage.co … r-20090320-94fa.html:

From the start of his role to the present, Conroy has answered critics of this scheme only with pious conceit. Question the principles of a filtering initiative that could offer Australians the sort of internet experience currently enjoyed in China, and you'll get, at best, a mulish reply. At worst, you'll be charged with a partiality to child pornography.

http://www.itwire.co … ent/view/23944/1023/:

This is not China. This is not pre-cold-war Soviet Union. This not North Korea or Myanmar. This is not Iran. This is not even Malaysia or Indonesia.

This is Australia, a country that is sort of like a cross between America and England, with better weather, nicer cities, an easier going lifestyle, but the same time honoured, cherished values of democracy and the freedom to pursue happiness.

All of sudden, however, it seems that we're living in a climate of fear induced by the current Federal Government.

http://www.abc.net.a … ies/2009/2512171.htm:

In the name of protecting children, the government will decree we'll be forbidden to see 'unwanted' and 'inappropriate' things on the web. But exactly what that means is a secret, and the thin end of the censorship wedge.

I have referenced this before, but it is worth repeating:

Probably a better alternative approach is described at http://forums.overcl … 45&postcount=15:

The best and easiest solution would be to offer a 100% tax rebate (refunded with a tax return) to anyone who purchases their choice of commercially available internet filter from the existing market place.

Senator Steven Conroy should go. And soon.

Sadly, I'm old enough and cynical enough to believe that his replacement would probably be worse.

Tags: Rant

Someone Had To Say It Eventually

"Why Grails Matters To A Java Developer?"

Why? well…because RoR and Grails suddenly showed us that working with the JEE is amazingly boring.

Tags: Grails, Programming

10 Must-Know Topics For Software Architects In 2009

http://hinchcliffe.o … 009/03/17/16712.aspx

A few interesting quotes:

The hegemony of traditional 3 and 4-tier application models, heavyweight run-time platforms, and classical service-oriented architecture that has dominated for about a decade is now literally being torn asunder by a raft of new approaches for designing and architecting applications.

Quite. Compare and contrast Grails and the traditional J2EE stack 'enhanced' by BEA Weblogic Workshop.

Certain application designs can greatly benefit from the advantages of document or resource-centric storage approaches. Performance in particular can be much higher with non-relational databases; there are often surprisingly low ceilings to the scale of relational databases, even with clustering and grid computing. And then there is abstraction impedance, which not only can create a lot more overhead when programming but also hurts run-time performance by maintaining several different representations of the data at one time during a service request….. While many applications will continue to get along just fine with relational databases and object-relational mapping, this is the first time that mainstream database alternatives are readily available for those that are increasingly in need of them.

As I said a few postings back, with reference to SQL: "I can't work out why the data-oriented community is so resistant to the clear need to evolve away from this rubbish." Maybe the time has come? Can just say "To Heck With It", and quietly bypass the relational database (or, to be more accurate: show a degree of maturity in our use of the technology by applying the tool where it is best suited and bringing in other tools where they are most appropriate)?

I remember when SQL was just an upstart newcomer and CODASYL data stores ruled the roost…times do change…

Dynamic Languages…bring the latest best practices and design patterns, something that is not happening as frequently with older platforms. The tipping point has arrived however, and dynamic languages are beginning to take the center stage in a significant percentage of new projects. Software architects should be prepared.

"But, but, but…aren't they too slow? Don't they use too much memory? Aren't they too 'weird'?" I hear you say. <sigh>

We live in interesting times…

Tags: Grails, Programming