Software Development Mentor

I’ve created a page called Software Development Mentor.

I’ve learnt a bit over the last 20-odd years of creating software and programming (ironically, something I originally never particularly wanted to do) and that’s the page where you will hopefully find a few nuggets of wisdom.

I actually have a couple hundred nuggets scribbled down so I’ll be updating the page when I have time or need a short break from creating a product and building a company.

Rookie Mistakes

I was listening to a security podcast and someone of considerable industry experience said (of something they just did):

“That’s a rookie mistake”.

No, it’s not.

It’s just a “mistake”.

To say it’s a “rookie” mistake is being disingenuous to rookies, particularly when the experienced person is still making that same mistake.

So, by virtual of a fact it is an easy mistake for someone of experience to make, that makes it just a plain old “easy” mistake.

RegEx: Find occurrences in code, except when commented


I’ve created a debug helper function in my PHP/WordPress development called TraceIt($value, $type, $param1).
TraceIt does a bit more than just echo out a value. It will format echo out based on value type or specified type, can be environmentally switched to not echo, and can write to a log file.

It’s also easier to find where actual tracing is being used versus the legitimate echo output.

The problem is, sometimes I forget to comment a trace, which is no good, especially when trying to perform a redirect.
And while I usually include a string value in the output that I can search for, sometimes in the heat of the debugging moment I forget that.



The easiest [and some may argue “painful”] way to find occurrences of forgotten TraceIt calls is regex.

What I needed was a way to find all instances of “TraceIt” but not “//TraceIt” (already commented).

And here it is:

^(?!([ \t]*\/\/[ \t]*TraceIt)|[ \t]*\/\/).*((^TraceIt)|( TraceIt)|(\tTraceIt)|(;TraceIt))

You can see it in action, with an explanation of each component, at

The only problem with this is it also picks up instances of TraceIt on a line that already has //TraceIt earlier in the line.  But I can live with those rare occurences for now.

Oh, and don’t forget to use the /gim flags (global, case insensitive and multi-line).


The regex will find occurrences like this:

coding is here; TraceIt("aaaa");
another line of code;
TraceIt('bbb'); more code
some more code; TraceIt("adsfadfa");

But not like this:

//TraceIt("bbb"); TraceIt("ccc")
// TraceIt("ddd");
// TraceIt("ddd");
// TraceIt("eee");

another line of code;

some code; //TraceIt('fff');
    //     // TraceIt("gggg");

Application window disappearing off edge of monitor (Windows 10)

In the last week I’ve had 2 instances of opening an application/program opening in Windows 10 and disappearing off the edge of one of my monitors.

My workstation is a HP OMEN gaming laptop with 2 attached monitors in a horizontal row. Unplugging monitors did not cause the hidden window to reappear.


The solution is reasonably simple.

1. Hold down the shift key and right-click on the application icon in the Windows task bar.

2. A context menu will appear. Select the “Move” option.

3. Immediately hold down the left mouse button. This will have the affect of selecting the title bar of the application and activating the ability to move that application’s window.

4. Still holding down your left mouse button (the primary button), move your mouse left and/or right and you should soon see your missing program window appear on the monitor.

(In both instances my application disappeared of the right side of my right-hand monitor. This may vary for different people.)

Updating password complexity settings on Windows Server 2008+

This one’s mainly for my own reference, because it took a bit of hunting for finally find how to do this. But if you need to find/change the password complexity requirements in Group Policy on Windows Server, here’s a page that nicely shows where to look:

Cost is not universal (when Pluralsight becomes expensive)

Pluralsight is a great learning resource for anyone in IT or looking to learn something IT related. I’ve had an annual subscription for a few years, and now I have a second account for my development staff.

What gets me though is the cost, and right now I’m walking a very fine line between value and expense.

One one hand it’s a highly valuable resource with wide ranging, quality material. On the other hand, I (and my developers) struggle to find time to use it.

It can also be argued it’s reasonably priced for the volume of material offered – USD$35/month or $299/year. With enough time you can gain expert knowledge on almost any topic.

But… the value of a US Dollar isn’t universal.
At the moment in Australia USD$1 is about AUD$1.39.
In India it’s about INR 71.

For me, an annual subscription actually costs AUD$416. Right now I’m self-employed and this year I’m projecting about $75,000 income (including tax and superannuation). That leaves me with about $54,000 in the pocket.
So all up the subscription is about 0.77% of my cleared income, out of my pocket. Still not looking too bad given the value it provides (if I have time to use it), though it is starting to hurt.
But the point is: An actual $416 doesn’t look as shiny as the $299 sticker price on the site.

Let’s look at a greater contrast of price inequality.
USD$299 comes out to about INR 21,229 in India.
To put that in perspective a well paid mid-senior developer might get INR 22,000 per month salary.
In other words, in India an annual Pluralsight subscription can cost a developer one month’s salary.
Suddenly that convenient 300-minus-1 price isn’t looking so shiny.

The point is, cost is not universal, and that’s something we can easily forget.
Different countries. Different stations in life. Different situations and costs of living – the value of a dollar varies widely.

While I still believe the quality of content on Pluralsight is high, I am constantly looking for a other services with competitive offerings and a better price point.
I work hard for my money. Only a mug would give away more than they need to.

Enough, Amazon!

As a consumer, I’ve used Amazon to purchase most of my books on Kindle, pretty much since Kindle first came to Australia. And in the last couple of years I’ve started buying Audible books too.
As good as Kindle is, it also frustrates me when having a library with hundreds of books that I can’t adequately manually organise and tag my collection.
There are collections, but they’re not enough when you want to organise books via multiple attributes or for different scenarios (or even half-way replicate the organisation of a bookshelf).

Amazon also doesn’t seem to know what I’ve already bought when I’m logged in to the site and browsing books. The amount of time I spend checking if I’ve already [inevitably] bought a book it’s checking… the experience is frustrating.

I’ve also used AWS as a software developer.
The documentation and help is poorly written, not suited for “generalist” developers, and often out of date. Examples pretty much don’t exist.
The console UI is hard to understand and has no aesthetic or UX thought.
Pricing is a fucking nightmare to try and figure out.
And after they bought Cloud9 they turned an intuitive experience into something I couldn’t figure out and gave up on (thankfully I can still use the original UI… for now).
Which means AWS lost at least 3 new annual users.

But what prompted this post is an Audible email I received today:

My first impression is the ugly exclamation at the start of the subject. This is the 3rd or 4th time I’ve received this email with that subject exclamation, and each time my first reaction is “SPAM” and I question its legitimacy.

I’ve been deleting the emails until now, but tonight decided to unsubscribe. And it’s giving my attention to do that, that only I realised they’re coming to my business email, not my personal email which is actually registered for Audible.
I have, however, used my business email with AWS.

So it now seems Amazon wants to spam AWS customs with advertising for consumer services.

“Brooklyn Nine-Nine”

I have my favourite TV shows, though most of them are waaaaaay in the past. I do watch a lot of TV now – as I work – but most of it is just a distraction.

However, one show does shine for me, and I have to admit, it is a surprise: “Brooklyn Nine-Nine“. I’m watching it on Netflix (one of the few U.S. TV shows I can watch in Australia).

Episodes are short. They’re not cringeworthy. I often chuckle (sometimes I even laugh). The characters – and actors – are good. And there is also actual character development.

So, yeah, I recommend it.

The dirty secret of unbeatable software development delivery estimates

There’s only one answer that can’t be beaten if you’re ever asked to estimate a software development delivery date:


That’s it:  there is no end date.
Because software development never ends. There’s nothing finite about it.

Oh! But you want the initial project’s delivery date?

Sometime in the future, depending on how well we work together.

That’s the only honest answer you can get.