Some Quotes

Government’s view of the economy could be summed up in a few short phrases: If it moves, tax it. If it keeps moving, regulate it. And if it stops moving, subsidize it. Ronald Reagan

In the fields of observation chance favours only the prepared mind. Louis Pasteur

The above was also misquoted by the bad guy in the Steven Seagal film “Under Siege 2” as “Chance favours the prepared mind” 🙂 That film is also the source of my all-time favourite quote:

“Assumption is the Mother of All Fuck-ups”

Development Tools Utilities

Beyond Compare 4

I just invested in the latest version of Scooter Software’s incredible file/folder/data comparison tool Beyond Compare. Lots of new features but most significantly for me is that there is now a native Mac OSX version. Full list of changes here

The jury is out on the UI changes but it is still as slick as ever at what it does. Buy it!

App Engine Peoplecode Peoplesoft

Where you do CreateRowset does matter …..

In Peoplecode, it is common to see this construct:

Local Rowset &rs = CreateRowset(Record.RECNAME);

Often, this construct is used within a loop. But this is not a “free” statement – it goes to the database:

SELECT {column_list} FROM {tab_name} WHERE 1=2

Which, on SQL server would get wrapped in a SET FMTONLY ON / SET FMTONLY OFF statement pair in order to get the column META-DATA (describe output).

But if you use the above construct inside a loop, then there will be “n” executions of the above SQL – so “n” database round trips too. This is not free and will impact your performance.

Better to define the rowset at the component level and re-use inside the loop.

PS: The same applies to CreateRecord(Record.RECNAME). Think about where you place these statements in your code – especially in App Engine code where you are likely to be looping through rows..

Abomination Windows

Windows “start” command and quoting

Well you learn something new every day! I just discovered that if the first parameter to the windows “start” command is quoted, then it assumes that is the title of the Window.

This can be particularly annoying if the path to the executable you are trying to start contains spaces e.g. “C:\Program Files (x86)\Microsoft Office\Office14\winword.exe” so you are forced to quote it.

The solution is to add an empty string (or a genuine window title) before the executable:

start “” “C:\Program Files (x86)\Microsoft Office\Office14\winword.exe”

Don’t get me started on how **crappy** and inconsistent this behaviour is 🙂

Spaces in directory/file names are an abomination!

Sophos Sysinternals

SysInternals PsExec – Access is Denied

If you run Sophos as your virus checker, the psexec executable will be quarantined as a “hacking tool” and you will get Access is Denied if you try to run it.



One-liners SQL Server

Useful SQL Server One-Liners

Quick way to check if your current session is in AUTO-COMMIT mode:

Humour Off-shoring


Some observations on off-shoring:

1. You have to manage the relationship carefully and frequently. Do not let it drift – it is too important for that. The salesmen/account managers/practice directors/whatever like to claim you can “leave it to us to manage everything” – but they are not to be trusted. They don’t know your business – you do. And if you don’t then you are in the wrong job!

2. You must be very precise in defining your requirements – especially for software developments. Vague specifications and poor analysis up front will lead to a higher cost using off shore resources due to the amount of reworking needed. Remember – with most off-shoring you will get EXACTLY what you ask for … nothing more …. nothing less. So make sure what you ask for IS WHAT YOU WANT! 🙂

3. You must allocate budget for a QA process – and use an independent resource to carry out that review. Do not under any circumstances allow them to sell you a QA resource. Poacher / gamekeeper is not a safe strategy for a quality end result 🙂

4. Check for built-in “additional time & materials” in the code/design. Check for hard-coding and inflexible code – if they can write something that will work right now but break when your business changes they will. It is in their business model to gain value added on-going “fixes/updates/enhancements” that can be charged as time & materials outside the main contract.

5. Don’t let them convince you that changes are outside the original contract – if the original solution was not fit for purpose then make them fix it within the main contract – free of charge!

6. For every “good” resource there are at least 20 “average/below average” resources. Make sure the good ones you are allocated are not moved off to other projects/customers and replaced by less able ones.

7. Paper qualifications are no substitute for ability. Many of the resources are fast-tracked through numerous training courses to pass certifications. My experience is that many of the resources may be “qualified” but they just do not understand the technology.

Crystal Reports Off-shoring Peoplesoft

Crystal Reports is slow! Or is it ….?

We had a Crystal Report for Billing that took over an hour to create 230 bills in PeopleSoft 9.1.

Before I continue, I should add that this was a bespoke report developed by off-shore resources. I should also add that I had been doing development QA for quite a while on this project when this issue came up. I was also responsible for application performance analysis and tuning.

I undertook a performance analysis of this report, fully expecting some badly written SQL to be the root cause as that was a common issue with our off-shore resources. However, what I found was even more incredible in my view. To explain:

APMP PRINCE Project Management

The Key Skills of a Project Manager

You can have all the Prince/APMP qualifications you like but without these….

  1. People Person
  2. Good Listener
  3. Organised
  4. Gravitas/Presence

You might as well not bother.

Which is exactly why I have worked with only 3 really good PM’s in over 25 years in IT.

EBS ETL Off-shoring Pentaho Peoplesoft

Customers can only have one address …..

During my time converting PeopleSoft data to Oracle EBS, I remember being asked to create a spreadsheet output using Penataho for the dataload of customers with a number of tabs including:

  • Customer Info
  • Customer Addresses

This request came from the “off-shore” resource we had on-shore from India at the time. An EBS “expert” … or so we were told.

I was informed in quite a lot of detail which columns they wanted and some simple transformations/edits they needed performed on the data. The interesting thing about the Customer Addresses data they asked for was that there was no indication of the sequence the addresses should be in, nor how we should indicate (say) the primary address, the delivery address, the billing address etc.

I questioned this and was firmly told “just do it the way they ask for it – they know what they are doing”. I had my doubts.

But I did it.

The next day the EBS “guru” rejected my data file because it had duplicate addresses in it. When I questioned what that meant exactly, the guru said “there is more than one address for a customer”. I pointed out that the data was correct and that there were lots of customers with multiple addresses – in fact most of them had at least two. To which he claimed “in EBS a customer can only have one address”.

I think my face said it all really.

I suggested something along the lines of “RTFM”.

Note: It seems that the conversion approach taken by this off-shoring company was to load the data into staging tables they had created based on the EBS standard data load tables, but with only the fields they “thought” they needed. They then wrote scripts to populate the standard load tables from their customised tables. Clueless. A car crash waiting to happen … and it surely did.