That’s pretty expensive government IT

Jim Donovan points out the top to bottom $117m IT reengineering of the NZ Immigration department equates to $234k per person. With a budget and a timeline like that, it will only take another stroke of legislation to render it all obsolete.

If there is any IT function that needs to be agile rather than waterfall, it is compliance-oriented IT. I have worked on government projects that were started in anticipation of legislative changes, but nobody knows exactly what, or when it will be passed, but the department is expected to carry them out immediately.

Under this scenario, I.T. should only be a matter of record keeping, leaving complex rules to be driven by users. Knowing well that these rules will likely change again in three years time, when the next election comes around.

Speed reading on the computer screen

Like any other information junkie, my browser is full of open tabs of material that I would have liked to have read, but simply lost interest or took too long to read. It occurred to me that I would normally read books at a faster pace, but somehow the screen wasn’t conducive for speed reading. [...]

Lead capture by providing self-service quotes

Dale Underwood, of Echquote writes compellingly of how the rise internet has dis-intermediated the sales department:
By 2005 it got to the point that there was almost no reason to directly contact any sales person to find product information. Just Google it.
Usually, lead is captured at the website in exchange for a free report, or whitepaper. [...]

Clojure symbol counting

One of the little things I found enjoyable while trying out Clojure was discovering the merge-with command. After counting the each of the subbranch and collecting the results in dictionaries, the dictionaries were merged together.

clojure.core/merge-with
([f & maps])
Returns a map that consists of the rest of the maps conj-ed onto
the first. [...]

A plan for learning clojure

I had printed out the list of functions and macros in the Clojure API page, and it filled out two A4 pages. Where to start though? I walked the entire clojure and clojure contrib directory and counted the number of function calls. Here are the top stats.

sym count len
clojure.core/list 3872 17
quote 2749 5
defn 1757 4
clojure.core/seq 1481 16
clojure.core/concat 1480 19
= 1074 1
let 1042 3
is 885 2
. 836 1
if 826 2
defmethod 431 9
def 407 3
complex 377 7
defn- 376 5
fn 356 2
first 346 5
defmacro 298 8
clojure.core/apply 264 18
deftest 257 7
str 252 3
when 244 4
imaginary 238 9
recur 237 5
apply 229 5
instance? 220 9
nil 217 3
and 214 3
next 208 4
cl-format 206 9
fn* 197 3
ns 194 2
map 193 3
:use 187 4
list 184 4
1 181 1
count 178 5
+ 169 1
seq 167 3
reduce 165 6
are 148 3
cons 143 4
println 141 7
or 141 2
not 135 3
loop 133 4
thrown? 127 7
* 127 1
conj 125 4
print 124 5
nth 124 3
- 116 1
doseq 114 5

Now, I have a study-plan.
Incidentally, waterfront IDE is quite [...]

MonthCalendar SetDayState in VB.net

I had to resort to Interop code, because MonthCalendar.UpdateBoldedDates recreates the window, and messes up the current date ranges.
First, declare some Interop functions and data structures

Const MCM_SETDAYSTATE As Integer = &H1008

<StructLayout(LayoutKind.Sequential)> _
Structure MONTHDAYSTATE
Dim dw As [...]

List of Server or Application Provisioning Tools

Provisioning

Eucalyptus - is an open-source software infrastructure for implementing “cloud computing” on clusters. The current interface to Eucalyptus is compatible with Amazon’s EC2, S3, and EBS interfaces
SystemImager - automates Linux installs, software distribution, and production deployment
Cobber - is a Linux installation server that allows for rapid setup of network installation environment
LinMin - Unattended, Remote, [...]

unable to remap C:\cygwin\bin\tk84.dll to same address as parent

I was checking out Tauber’s Pinax, and came across VirtualEnv for the first time. Those are two cool projects.
However, building PIL on Cygwin Python 2.5 yields the following error message:
unable to remap C:\cygwin\bin\tk84.dll to same address as parent
Thanks to the power of Google, DataHammer has already found a resolution

C:\>cd \cygwin\bin
C:\cygwin\bin>ash
$ ./rebase -b 0×1000000000 tk84.dll

Javascript V8 Engine

A Japanese publication has a very nice writeup about Lars Bak’s V8 engine (in English) Why is Google’s new V8 Javascript Engine so fast - Nikkei Electronics Asia
I even learned new words like “Premonomorphic”

NOEXPAND and WITH SCHEMABINDING

Note to self. If I see another error involving NOEXPAND check these
1) Make sure server is running SQL 2005
2) Make sure the view has WITH SCHEMABINDING in the DDL (i.e. I need to check my upgrade scripts, … in reverse order)

SQLite and Excel as DataSmithing Tools

Tom Gleeson aka Goban Saor has an interesting perspective on how well SQLite acts as a general table store which can then be used in OLAP and Excel. He describes the SQLite as the “MP3 for databases”, and I think he comes pretty close to the mark on this.
What’s there to stop anyone from [...]

Configuring SPA-2000 for MyNetFone

Here’s the configuration page if my memory fails me in the future
https://www.mynetfone.com.au/media/support/downloads/sipura-spa2000/config/config.html

Almost Perfect

I came across Almost Perfect via Hacker News, a candid first-hand account of the rise and fall of WordPerfect.
It is so interesting to see how WordPerfect was blind its impending death. I am not singling out WordPerfect here, rather as a theme how corporations are all blind to their eventual death. The singular theme [...]

JavaFX experiment

I was having a lot of problems getting the simplest test case below to run without throwing an odd exception:

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.*;
import javafx.ext.swing.SwingTextField;
import javafx.ext.swing.SwingButton;

Stage {
title : "MyApp"
scene: Scene {
width: 200
height: [...]

JavaFX Custom Cursors

Setting custom cursors with JavaFx is relatively straightforward, but for one little catch. Your image has to be 32×32. If you want a 16×16 icon, simply leave the rest of the image transparent.

import java.awt.Toolkit;
import javafx.scene.Cursor;
import javafx.scene.image.Image;

public class ColorChooser extends Cursor
{
public override function impl_getAWTCursor(): java.awt.Cursor {

[...]

JavaFX Introspection

Just sharing some code snippets for deserialization of JavaFX objects.

function getValueType(obj:Object,name:String):String
{
var context:FXLocal.Context=FXLocal.getContext();
var objectValue:FXLocal.ObjectValue = new FXLocal.ObjectValue(obj,context);
var cls:FXClassType = objectValue.getClassType();
var varType:FXType = cls.getVariable(name).getType();
println("{name} {varType}");
if (varType instanceof FXSequenceType)
{
[...]

Ego-Trip Programming

It’s Saturday morning and I’m bored.
I might go create something whose sole purpose is to praise me.

while 1:
print "I praise Chui, who created me for the purpose of praising him."

JavaFX binding in sequences

I had a Group of circles, i.e.
var circles:Circle[];
var group:Group = Group { content: [circles] };
strangely, I couldn’t get newly inserted circles to render.
It turns out that you have to bind group.content to ensure that changes in circles are reflected in group.content.
Here’s a test routine.

import javafx.scene.*;
import javafx.scene.paint.*;
import javafx.scene.shape.*;
import javafx.stage.*;

var lines = for (i in [1..10])
[...]

SQL Server ARITHABORT

Just a reminder to myself. The next time I see an ARITHABORT error, try these
1) SET ARITHABORT OFF
2) Change SQL Server compatibility from SQL 2000 to SQL 2005

Tags: mssql

Applet for Submitting Screenshot

Submitting screenshots through the web takes several steps more than it ought to. Firstly we have to paste it into mspaint.exe, save it to disk, only to then fiddle around with the File upload to look for the file again.
Another way to do it is via a signed applet. Unfortunately, the signed applet is unable [...]