Review your settings

February 28, 2008

If you’re like me, the first thing you do once a new piece of software is installed is go through settings.  You may also be someone who changes desktop backgrounds and screensaver settings immediately after a fresh install, and how keeps their Start menu programs immaculately organised.  You almost always select “Advanced…” when working through the installation wizard, only to find that the only additional control you get is over the install location?

But how often do you review your settings?  Every now and again, I like to take a minute to go back through settings of common applications I use.  I may change my mind on one or two things, or maybe an upgrade has added things that weren’t previously there.  This especially true of online applications like Gmail that are regularly upgraded, because new settings and functionality are often added without you realising.

Maybe even see if there’s a blog that might announce the new settings that you can subscribe to in your feed reader of choice?  I subscribe to all the blogs for Google software that I use.

So go on, take a look at Tools->Options and see if there’s something in there that might freshen your experience a bit.  No harm in taking a look, is there?


TortoiseSVN Tip

January 11, 2008

Another tip, this time for those of you that use TortoiseSVN. You may already be doing this, and I’m catching up with the crowd, but I think it’s pretty neat.

  1. Checkout a respository to a local path on your machine. It might be a few folder levels deep: C:\Sourcecode\Projects\WorkMain.
  2. Create a shortcut to the root checked-out folder on your desktop.

Now you can right-click the shortcut on your desktop to access the TSVN commands like Update, Commit and View Log etc without having to actually open the folder. If, like me, you always update and commit the root then this can be quite handy:

TSVN via shortcut

Also, as an added bonus, now that you have a shortcut on your desktop, if you install and use Launchy, it’ll index it for you and make it possible to open the folder without minimising everything


FogBugz + Launchy

January 9, 2008

Here’s a cool tip for you Launchy users out where who also use FogBugz.

Setup FogBUGZ as a weby URL, and enjoy quick-fire access to your FogBugz cases. Here’s how:

  1. Download and install Launchy.
  2. Open Launchy (ALT+SPACE by default, but I changed mine to WIN+A).
  3. Click the settings button (cog icon at top-right).
    Launchy
  4. Select Weby in the “Available Plugins” section.
  5. Click the plus (+) button at the bottom right to add a new link.
  6. Enter the following (without all the quotes):
    • Name = “FogBugz”
    • URL = “http://[yourcompany.com]/FogBUGZ/
    • QUERY = “default.asp?%s”

    Launchy Plugins Setup

Now you can view a FogBugz case by doing the following:

  1. ALT+SPACE (or your shortcut to open Launchy).
  2. Enter “FogBugz”(or type “fog” and select fogbugz from the list, from then on, FogBugz will come up first when you enter “fog”).
  3. Press TAB.
  4. Enter a FogBugz case number and hit ENTER.

Your default browser opens up right at the FogBugz case page. How neat is that?


What Twitter is not

January 4, 2008

I love Twitter.  I think it’s a great tool for keeping in touch, though I’m still in the middle of trying to convince friends and colleages to use it (it’s considered a bit geeky I think).

However, I just removed my first “follows”, because that well-known person was simply regurgitating links to articles on Truemors.com.  If I wanted to know what was on Truemors, I’d add a feed to Google Reader, but I don’t, so I haven’t.  What I want to hear on Twitter is what people are thinking, ideas they’ve had, not mindless link propagation linking to something I could add a feed for.

There is an excellent article by Chris Pirillo on 10 ways to Eliminate the Echo Chamber.  Which is well worth a read.  Blogging (and Twitter is a form of blogging) should be you posting about your own experiences and ideas, with links as appropriate to add value and context.

I also don’t want to listen to one-half of a conversation they’re having with someone else.  I want that stuff out of the main feed, and either displayed as a thread, or hidden altogether.  I don’t want Twitter to become a chatroom.  We have chatrooms and newsgroups for that, which are real-time, allow everyone to participate and can be indexed by Google for searching.  If you want to get me on the SMS/mobile aspect, then I’ll let you have that.  Even then, with 3G and widespread commercial Wi-fi coupled with devices like the iPhone and iPod Touch, that could soon start to change.

I’ll stop now, I’m getting way too big for my boots, but I really like Twitter, and what it could do if it doesn’t become polluted, as Facebook as been.  I’m worried about it, is all.

What do you want Twitter to be?


How useful are newsgroups?

January 2, 2008

I think tech blogging might have overtaken newsgroups. Not in terms of quantity, but definitely quality.
Consider this comment I just saw moments ago (thus prompting this post):

> is there a good, easy and safe way to:
> - put all threads into a ‘wait until I tell you to continue’

Yes, don’t use assynchronous processes that have to be synchronized.

I don’t need to explain here why it’s wrong, but it is. This is the inherent danger of using newsgroups to get help on software development topics.

There was a time a long time ago when I spent a lot of time on VB newsgroups answering people’s questions on how to things or solve problems they were having, but I gradually found less and less time to do this, especially when carefully thought-out replies were lost in the midst of things like this. Now I find that CodeProject or even MSDN itself are often better places to find accurate information. Moderated newsgroups that only experts (so not me) could post answers on might be better, but that introduces a raft of problems, not least of which, defining “expert”.  All these things are voluntary, and real experts have only the same hours in the day as the rest of us.

Could something like Twitter help here?  It would be lovely to build a community of respected “answerers”, where you could choose those users whose answers you generally find useful, and filter out the detritus.  If you could post a question somewhere, it pops up on an RSS feed, and if someone knows the answer and has a few minutes, they post it.

Am I missing something?


Domesticated or just tamed?

December 17, 2007

I tried to get Linux working on a Virtual PC VM the other day, and I found it hard.  In fact, I haven’t got it working yet.

Drat!

I’m coming to the conclusion that I’m not up to the job.  There are two camps in the tech world - those who understand, and those who use.  Obviously you can be in both, if you understand some things and only use others, but taking any one subject you’ll find yourself in one group or the other.

So in terms of Linux (specifically Ubuntu and gOS) I’m definitely a user.  I don’t understand how to install it.  Because it’s open source there’s almost too much information.  This is all because (certainly to me) Linux is a tamed animal.  It’s essentially Unix taken out of the wild, and caged and beaten until it’s safe enough to sit in your home office.  However only those who are skilled in the arts of taming can make it do what they want.  If you know how to wield the metaphorical dining chair and whip you can make it do what you want.  If you’re merely an audience member who dares to enter the ring, you could be torn to pieces.

Well, that’s taking it a bit far, but best case is that you can’t get it to do what you want, and wish it was more like what you’re used to.

Which, love it or hate it, is probably Windows.  The difference with Windows is that Microsoft took the concept of an operating system, and domesticated it.

Admittedly they cheated and shortened the process to only a few generations, but essentially the result is safe to let your children play with.  It’s why almost anyone can use it, and those with the understanding that a CD goes in the CD drive can even install it.  I guess Apple did the same with the Mac (in fact, didn’t BASIC run one of the early Macs?) hence the philosophy “It just works”.

So I want to be an Understander, one who can use Linux and be a true geek, rather than a pretender to the court, but the truth is I am not worthy, and fail the grade as even a user.  I think I finally realised that there’s an “Install” icon on the desktop when you boot Ubuntu from a live CD, but I couldn’t see the wood for the trees on my first go.  I saw the “Start or install Ubuntu” option, and when I chose it, it started it, and I couldn’t see how to install it.  What I really wanted was two separate options - “Start Ubuntu” and “Install Ubuntu”.

Now I understand I may have been very dim here.  I’m sure one day someone will go through my archives and leave a smartass comment to the effect that I should’ve done X, Y and Z, but you gotta see this story from a born-and-bred Windows user and developer.  I had a quick go on Unix once, but that was parrot-fashion from an instruction sheet on a big ol’ Sun machine, so it doesn’t count.

I’ll have another go, and maybe I’ll try it on a real machine to remove any VM-related complications (like the mouse not working), but we’ll just have to see.  Maybe Linux needs a few more generations and exposure to the mere mortals to force it forward into domestication.  Maybe that’s not what ‘nixer’s want?  You tell me…


Proofreading is hard to do

November 1, 2007

Proofreading is an essential part of everyday life. I’m pretty anal about things like that, and constantly go over and over almost everything I write. The trouble is, I still notice problems with my posts after they’ve “gone to print”, despite the check-and-double-check approach I tend to take.

More worrying is when you spot a WTF in code you wrote some time ago, or yesterday. This happened to me today - while going through some code in a peer-review, I noticed that a method parameter was not being used in that method. So simple (and, I might add, in this case fortunately not an issue) and easy to miss.

I know what you’re thinking:

“Hah! If you’d written a unit test you would have found this much quicker!”

but I know already, and my point isn’t really limited to writing code. Blog posts, emails, letters forum posts, comments, you name it. How often have you only realised your mistake after clicking “Publish”?


Facebook Usability

October 30, 2007

The Facebook logon screen now has a long-awaited “remember me” checkbox, but crazily a huge message appears that moves the Logon button down half an inch. Is this a deliberate move to make sure people read the message?  To users, message boxes are just something that interrupts the flow of an application, thus “stopping the proceedings with idiocy“.

Display the message if you like; anyone who can’t guess what it’s telling them will know after the first time they read it (if they do read it, regardless of any attempt to put it where the logon button was a second ago), just don’t interrupt the very first thing I do to get onto your site.

I prefer sites that don’t require me to sign up at all, so I can go right to work, and decide to sign up later on if I want to keep my changes.  FogBUGZ has a wonderful core concept of having no required fields. Opting instead for the “get it in, worry about the detail later” scenario. I like it (but the anal part of my brain refuses to let me enter a case without at least having a title :) ).

C’mon Facebook, you’ve got too many users to skimp on the usability of your application. You’re doing well, don’t spoil it now by getting lazy.


Is one in the hand worth two in the bush?

October 25, 2007

Here’s the scenario:

You’re working on some software. You need to add some new functionality to it, and in looking through existing stuff you see the methodology in place. You don’t think it’s the best way to do it (or maybe it’s objectively incorrect for some reason), so what do you do?

a) Spend a lot of time re-working the existing stuff into a “better” way of doing it, then quickly add in your new stuff now that the framework is in place.

b) Write in the new methodology and supporting classes etc, then add your new stuff in and comment the old stuff with // @TODO: Update to new methodology.

c) Just write your new stuff in the old “incorrect” or less preferable way, sigh, and get on with the next task.

Answers on a virtual postcard please.

Personally I’ve done all three of these, with no particular favourite. That might be the answer in fact, that different situations and time pressures require you to take the easy option. I know that re-working existing code into a nice framework will provide a good footing for my new functionality, but it’s at the risk of changing or breaking existing functionality that shouldn’t have been affected.

This probably doesn’t just apply to software development, either. This year I’ve been renovating our kitchen. At one point we had the decision on whether to take the old water-damaged ceiling down or not. My options were:

a) Rip the old ceiling down, re-do all wiring in the kitchen (lights and power), put new plasterboard up, new fittings, have it plastered and paint it.

b) Put new plasterboard up over the top of the existing ceiling, have it plastered, paint it. Thus keeping the old lighting locations and meaning I couldn’t redo the electrics or put outside lights in.

c) Paint the old ceiling and get on with my life.

I went for a). Turns out that was the right thing to do, because now we have outside lights, new spotlights replace the old striplight, and we have loads more plug sockets (removing some dodgy wiring in the process), but I didn’t know that before I started.

Have I just answered my own question?


The Evil of Implicitness

October 19, 2007

I really dislike things that are implicit. Okay, it doesn’t help that I’m the most forgetful person I know, but still.

I’m a believer that if you want something done, you should do it. Use a framework if you like as a tool, but explicitly ask that tool to perform the task. Things shouldn’t be hidden away, doing as they please.

Examples:

Post build steps
I’ve mentioned it before, but I really do like my build process to explicitly do everything I need, in one place.

SQL
My boss gave me a tip yesterday. He says that for things like this:

insert into a_table (id, the_value) values (1, 11)

He sometimes cheats and does this:

insert into a_table select 1, 11

I think that’s dead clever (because I thought you had to specify the columns you want to insert into), although I’d personally never run it on a production database, and it would only be for quick and dirty test code on a database I control. The problem is (and to be fair he admitted this), if someone changes the schema of that table, things can get messy very quickly. I’m more anal so my first thought was that I just like to know what columns I’m editing without having to investigate that table schema before I run it.

Of course we all know the evils of:

select * from a_table_that_might_have_columns_added

Which speaks for itself, so let’s not dwell on that.

Attack of the Scheduled Job
I personally dislike any kind of scheduled task. It makes me nervous to think that there’s an unknown cloud of processes that I don’t know about that might be editing my data without me knowing.  Also, you lose a bit of the “realtimeness” of information with scheduled jobs. Of course sometimes this is necessary, as in the case of maintenance tasks.

So I like to do things by hand a lot of the time. I don’t like to write classes that do work in constructors, I prefer instead to use factory methods or create static methods called “Load” which create the object and populate it for me. Right or wrong is tough to decide, and is probably a religious issue as much as anything else. But “better safe than sorry” and “keep it simple, stupid” are principles that make applications easier to maintain, because you avoid more issues from happening, and make it easier to find and fix those that do appear.