The story of the bank robber

When a bank robber was asked why he robbed, he said

“the money belongs to nobody, so I took it”.

When pointed out to him the money actually belonged to somebody, he argued,

“the other banks have plenty of money, why don’t the other banks give these people some instead?”

When pointed out that he has no right to the money, he said

“well, some of the money here has passed through my hands, or my grandparents hands, so I have owned it before. I’m just taking it back”.

When pointed out that it’s illegal, the robber took out his gun and shot the hostages.

The moral? Never argue with a guy who has no scruples, especially if he has a gun.

Adequate Disclosure of Paid Links

I’m sure Matt Cutts couldn’t say that these links were hidden from sight.

Sex Survey Drawn the Wrong Conclusions

I can’t figure out the maths behind this Young women ‘have more sexual partners’ than men.
The headline reads Young women ‘have more sexual partners’ than men, but the subheads read Young women are more promiscuous than men, according to a survey that claims the average 21-year-old has had nine sexual partners compared with seven for [...]

JavaFX 1.0 considered

JavaFX 1.0 is finally out of the gate. There are probably many Java engineers and architects who are trying to figure out this technology and see how it could apply to their existing projects. Here is my assessment. Note this applies to JavaFX 1.0.
JavaFX 1.0 is not ready as a Flash replacement in public-facing projects
While [...]

4GL Patterns #12 - Deploying Reference Tables

Coda Server uses a concept called Reference Tables. I first heard the term used by Ken Downs.
The interesting twist brought by Coda Server is in deployability.
In the countries table, … use the REF TABLE .. Ref tables are identical to regular tables, except that they are replicated automatically across the development, testing, and production environments. [...]

CEOs and Banditry

Read these two articles:
Reason Magazine’s Why Poor Countries Are Poor, and The Oncoming Credit (Card) Crisis.
Somehow I suspect these two articles are related in theme. The reason CEOs milk shareholders through short-term strategies is precisely the same reason why short-lived dictators in Cameroon plunder from their people. Acting purely in self-interest, there is no reason [...]

Stopping SpamBots

Neil Gunton’s journals his fight against spambots on his web site. Initially he started with the obvious ones such as User-Agents, then he moved on to behaviorial ones, like honeypot baits and unusual browsing behavior. Eventually he started using IP-based blocks.
Much better would be to
1) permit users to comment
2) log IP addresses
3) provide a report-spam [...]

My Experience with Corporate DSLs

Michael Feathers provides some guidance how to mitigate the downsides of a custom DSL.
They are

Open sourcing it, preferably to industry group
Pay developers higher wages - implicit is the dead-endedness of this particular technology careerwise
Using embedded DSLs (embed interpreters?)

The DSLs I’ve come across are a configuration language for deploying applications to desktop, a forms language for [...]

Prediction - C# deathclock is ticking

Here is something that the static-typing camp will never ever reconcile with:
Hejlsberg, lead-architect of C# announced at the PDC 2008 that C# 4.0 will be enhanced towards a dynamic language. With the keyword “dynamic” you can declare a variable as a datatype that will be bound at runtime rather than compile time - source
Whenever a [...]

Comparing trains with cars

A totally unscientific comparison, prompted by Tim O’Reilly’s tweet.
A Subaru weighs 1.33 tonnes.
A Train carriage weighs 37 tonnes. ref
At capacity, a Subaru can carry 4. A train carries 275.

Type
Calculation
Tonnes per person

Trains
37 tonnes / 275 person
0.134545455

Cars
1.33 / 4
0.3325

14 Weapons of Marketing

I love lists, and occassionally a well-written lists deserves to be copied, and recopied, verbatim.
The following is from Drayton Bird, who has a list of 14 weapons of marketing (in the comments section).

Research
Advertising
Sales Promotion
Point of Sale
Packaging
PR
Product placement
Guerrilla
Word of mouth
Workplace marketing
Sales people
Experiential [sic]
Sponsorship
Cause related marketing

On top of this, audiences often overlooked but often more important than [...]

SQL Server Error Creating User Instance

Fellow Australian Dave Gardiner points out there is a patch available from Microsoft where SQL Server Express would not start up a user instance over Remote Desktop.
Thanks!

Americans, Vote Freely (humour)

“Do what you’re going to do, America,” said British Prime Minister Gordon Brown. “Don’t let us tell you how to vote or formulate a reasonable foreign policy or symbolically repudiate centuries of racial oppression. It’s entirely your decision. It’s not as if the fate of the Western world rests on your decision or anything.
The complete [...]

Uh oh, Australia’s very own Cyber Jaya

Every few years, some people in some part of the world come up with the fantastic concept of building a scientific community from scratch, and Australia has whipped itself into a froth over a brand new brain city in the outskirts of Brisbane.
The Vice Chancellor of UQ has impressive engineering credentials, but he should study history a [...]

Markets and Morals

Oliver Griffiths surveyed the issue of corporate morals, in the wake of President Sarkozy’s recent assertion tha “raising the moral standards of the financial capitalism” is necessary for a viable financial system.
I suspect that while markets may need morals, humans are not particularly qualified to provide them.
Humans are prone to “local optimisation” and “immediate gratification”:

All [...]

A spam solution for Free E-mail Providers

Bots spewing spam from ADSL connections used to be the de riguer a few years ago. Increasingly, these are getting defeated because these IP addresses have been identified as being “spammy”, and spammers have moved back to using bots to sign up for free email accounts en masse. 
In this case, the attack is via transfer [...]

4GL Patterns - #11 Custom Data Types

Rapid application development usually require data types beyond the simple INT, FLOAT and VARCHAR found in databases.
Here are some examples gleaned from existing frameworks:

Compiere/ADempiere - Account, Amount, Assignment, Binary, Button, Color, Costs+Prices, Date, Date+Time, FileName, FilePath, ID, Image, List, Location (Address), Memo, Product Attribute, Quantity, Row ID, Table, TableDirect, Text, Text Long, Time, URL, Yes-No, [...]

What does Web 2.0 software testing look like?

The screenshots of $20/month Software-As-a-Service Manual Test tool shows how disruptive the web can be for existing business. In this case, these guys are competing with featureful competitors like Mercury Test Director.
Other possibilities can be achieved by stitching together solutions involving
1) Mechanical Turk
2) Puppet
3) Virtualization
Bugs might be solved a similar way, using a [...]

4GL Patterns #10 - Auditability

I have seen this pattern occur several times in my career. Ken Downs has a comprehensive treatment on history tables.
There are several high level ways of describing how versioning/auditability is implemented:

Versioned rows - history is mixed with current data in a single table. Results in complicated joins, archiving problems, performance trouble
Naive history tables - a [...]

4GL Patterns #9 - Search

Specific fields are marked as being searchable. User interface and code is automatically generated.
Examples of Search in RAD

Adding Full Text Indexes to char columns - MySQL, SQLite, SQL Server
Query By Example (QBE) in MS Access - is a special case where all fields are made searchable
Autogenerated modal forms with search/filter capabilities. Used when look-up [...]