We're 90% Done!

We're 90% complete with X and we'll be done in no time!

We all know it never happens that way, yet we hear it regularly, most of us have said it, and some of us have said it more than once.

Why does this sort of thing prevade software development?

Good software has users

If you build software, manage a project or direct an IT division take a moment to answer the following question: Who are your users? If an answer eludes you, read on.

Good software has users. Understanding this simple statement may make the difference between solving imaginary and real problems. Information Technology, at its core, is an effort to pair technology solutions with domain problems, where a problem may range from generating reports to architecting massive systems. No matter the scope, technology solutions should be informed by the needs of users.

Visual C++ 2005 lessons

Its been a while since my last post, but I wanted to kickoff this blog column, of codesnippers, with a project, around C/C++ ... To begin, I'd like to introduce the tools I'll be using, Visual C++ 2005, and leave it up to the readers for a possible project. I have an idea, I'd like to attack at the end of the post.

My last blog was about reviewing my favourite cross-platform C++ UI, wxWidgets. Reading up on my peers on this site, I don't see too much C++ talk. So I figured, I'd start with an intoroduction on Visual Studio 2005 (aka Visual C++ 8.0).

Despite it being an evil Microsoft Empire product, its really not all that bad. If anyone is serious about being a software engineer, C++ knowledge is essential! And great C++ knowledge can take years to master. To start in this journy, I'd like to begin with an introduction:

Software Review: UltraEdit 11 and UltraEdit Studio 5

I have used UltraEdit from IDM Computer Solutions for the past 2.5 years at my job. At first unwillingly, when Homesite 5 failed to function properly on the “customized” WinXP install of which I had little control. *sigh* OK I’ll use UE. Over the years it has really grown on me, to the point where I want to purchase it myself. Many of these are available in UltraEdit, but the really cool stuff is only in UltraEdit Studio.

The secret family split in Windows code page functions

My earlier post "Strange case of two system locale ANSI charsets" discussed the confusion between the default system locale (GetACP, Language for non-Unicode Programs) and the default user locale (setlocale, Standards and Formats). There I mentioned a problem with setting the system code page in C/C++ using setlocale, but that is only the first clue in what reveals a secret split in the family of locale-based charset functions.

Hedgehog Concept

Do you feel a little bite of insecurity when reading a post about a new (to you) technology subject?

It seems everyone knows all about Ruby on Rails already, but I only just heard of it after becoming a Codesniper. I am quite curious about this new paradigm, and am woefully behind my peers. Isn't that just typical?

Doesn't Eric Sink say that to improve your career, you need to focus on the first derivative of Cluefulness - Learning? Shouldn't I find the next Ruby on Rails conference and take a long weekend to go learn all about it?

Micro ISV Mistake #3

This is the third in a series of posts documenting mistakes I made over the last few years as I started my company, developed our products and tried to sell them online. The previous posts are still available if you missed them: Mistake #1, challenge from Keith, Mistake #2.

Of all the mistakes I had on my list when I started this series, I was dreading writing about this one the most. It doesn’t really lend itself well to a hard and fast rule, has a lot to do with timing, prioritisation, and moderation, and involves discouraging something that is undeniably important. Despite this, it has to be on the list, over the years it’s sucked away a lot of my time and energy, and you might need someone to tell you that you can take it too far.

The Notorious J.O.B.

I’ve been thinking quite a bit lately about software development as a profession, and about my relationship with my job. More specifically, about the relationship that software developers have with their jobs in general.

On the personal side, I’m quite grateful that I’m in the position I’m in. I am, after all, getting paid (on a regular basis!) to write software. I get paid to think and figure things out and learn new stuff and solve problems. Not bad for a high-school dropout who wandered into a college classroom at the age of twenty-five, I guess. I mean, there’s a lot of hair nets and name tags in my past—it could certainly be worse, and for the most part it has been. Sometimes I wake up in the morning and think, damn, but did I get lucky. I finally found something that I not only can stand to do but that I actually like to do, and I’m doing it for a living.

No real problems here, but sometimes I wonder at what my "geek score" really is. I’ve discovered that there is, in every clique/scene/community I’ve ever been a part of, an undercurrent of anxiety felt in varying degrees by each member—essentially a little voice that questions “How much do I really fit in? Am I really cut out for this, or just a skilled imposter?” And I have to admit that I’ve been feeling some of that anxiety myself lately. To what extent do I fit in? To what extent do I belong in this industry?

Data Access Objects - Rails Style

Most other DAOs you have to create some configuration file, whether xml or ini files or created manually. Example, to setup Pear's DB_DataObject, you must create an ini file and run a script "createTables.php" each time your database changes. Not so with RoR! its automagically created and updated for you. It does ALL the basic CRUD for you. Just have to specify the relationships (if any).

Say you have tables:

id int(11) NOT NULL auto_increment,
name varchar(255),

CREATE TABLE companies (
id int(11) NOT NULL auto_increment,
name varchar(255),

Naming Convention
By the way, RoR has a naming convention for tables. You name the table the plural version of the word. The primary key has to be ID in each table, foreign keys are _id. EGADS! It almost looks like English, huh? An average half-way intelligent person could even read it and have a clue of what’s going on. Even pointy haired bosses. Though, in traditional fashion, some people have to complain about having to name their tables a certain way. (violin music playing) There is a way to turn off "plural/singular" in the settings. So if you just have to be difficult, here ya go.

Debugging JavaScript: an ASP.NET developer’s approach

As an ASP.NET developer I’ve always been averse to writing JavaScript. One of the reasons I shied away from writing JavaScript was because of my difficulty in debugging the code. Tossing in alerts to find errors in the code was always too reminiscent of the time I spent writing code before finding a decent IDE. Well for ASP.NET developers working in Visual Studio, there are great tools available to help you debug JavaScript. Microsoft details the methods here and here. The method I use is to simply pull up the running documents window and work from there. This gives you the standard Visual Studio debugging windows like Locals, Watch, and Command. You also get the added advantage of not having to jump into a different debugging environment when going from client side to server side code.

One of the problems I’ve found with this method is that it is IE centric. If I’m developing code that needs to work on Firefox in addition to IE, I need to use other debugging tools. Mozilla’s JavaScript debugger is code named Venkman. It’s fully featured and you have to love the Ghostbusters reference! Venkman has all the standard debugging features including Locals, Watch, and Command windows. One issue with this method is that you have to pull up the web page in Mozilla or Firefox and you’re debugging only the client side of the application. In order to debug the server side code at the same time you’ll need to attach the VS debugger to the server side process as detailed here.

The web applications I currently write have no requirements to support users of other browsers so I’m not sure what is available for those. What tools have you found for writing and debugging JavaScript that have made things easier?