Let’s be straight here - I’m not a fan.  I know there’s quite a few facebook haters in the software community (understandably so in some respects I must admit) so this will add fuel to the fire.  One great feature of facebook is the ability to create events, detailing everything about the event and then inviting members.  Myself and Amanda decided to create one for our wedding, quite a few of our friends have already done it so we thought it would be a good idea to spread the word in a quick and easy manner.  Well, I thought it would be quick and easy.

Sure, facebook has some quirks, but this one is particularly frustrating.  When adding members to an event, you have to add them one by one.  That’s right, I’ve got over three hundred friends on my facebook account.  It gets even worse.  You can only add one hundred at a time.  That means I had to click each and every individual, but I couldn’t do it in one go.  It’s fancied up to the eyebrows with AJAX enabling you to select each friend and they’re nicely added to the left pane, but it’s a painstakingly slow process.

Dear twenty-something-year-old-zubrick-dude,

Please add an "invite all members on my friends list" button to the event management page.

Kind regards

An annoyed (yet using your product for free) user.

I guess not everything can be perfect straight away. Oh well.  Why they limit the number of invitations to one hundred at a time is beyond me, perhaps their systems aren’t designed to deal with that? I have no idea, but as an end-user, I shouldn’t need to know.  End-users should ‘expect’ things to work, despite their free-use policy ;)

I’ve had my fair share of software experiences.  Sure, they may not be real life experiences and they do sound particularly ‘geekish’, yet the use of software in some cases relates to the use of physical objects in the real world.

Recently I’ve been writing up my research paper on a network-shared whiteboard.  Whilst working on this I’ve also been looking around at various software as well as using various new websites.  I won’t mention these on here as so to avoid any flaming, but I’m sure people would tend to agree with my experiences.  The problem is - you see - that software, and their interfaces are more complex than they need to be.

One website I’ve recently taken an interest in is currently in beta.  A few days ago I checked it out to see how it’s going and sure enough on a foot-note there was a few small statements telling users what to do when they encounter an error, and how to interpret them.  Here’s a few quick facts for you.

  • Users don’t care.
  • Users just want usability.
  • The simpler it is, the more comfortable users will be.
  • The users probably wouldn’t follow up errors anyway.

During the development of my application I have made it one of my primary aims to hide as much as humanly possible from the end-user.  If I imagine myself as using an application I typically want something that "just works".  I don’t want to have to set anything up, I don’t want to have to go through complex instructions or be faced with indecipherable error messages.

Of course we have to take into consideration the end-user themselves and what type of user they are.  Some end-users may be a developer and therefore aware of how to deal with such errors.  For applications which I personally develop, they’re aimed at a very large user base, they may be developers, students, people in finances, or y’mum.

I can’t help but feel deep, technical hate for over complicated applications driving users away.  Some of the most popular applications in the world remain so utterly simple that a five year-old could (and indeed do) use them.  Google, for example, have a simple, intuitive interface keeping style and colour consistency throughout.  Have you ever used their calendar system, then moved onto their forum system followed by their mail system? You’ll find if you can use one, then you can use many others.  I am not, however, trying to "big up" Google in this post, I’m just using them as a prime example to the KISS statement.

So, here’s a few tips which I’ve managed to learn from, and acquire over the years.

  • Error messages should be on the level of a user
  • Error messages should only be displayed if a user needs to know
  • Categorise your layouts, both menu-driven and general GUI’s
  • Keep a visual consistency throughout your application (I’m talking about dialogues, messages, menus, option panels etc.)
  • Remove unnecessary technicalities (one-click installs are an example, but provide advanced features only if needed)

I could go on forever, but those are some of the prime examples.

I’ve made a mention to this for one other reason, and that is OpenOffice.org’s bibliography feature (this is in version 2.0.4).  It appears to me quite complex, and something I just can’t get my head around.  The table of contents feature is perfect - it’s simple to use, and easy to maintain.  Trying to maintain a bibliography should be something of great ease, perhaps selecting an area of text and clicking "apply bibliographic reference, and please reference it at the end of my document in a reserved section".  I would’ve hoped the rest would be done for me.  A friend of mine then showed me how Microsoft’s Word bibliography feature worked, and how stupidly simple it was.  I did have a deep envy for that feature in particular, although I wouldn’t turn to proprietary formats.

Wordpress itself, that is what I’m writing in at the moment, has the two-step install feature - what more do you need to specify?

So, to sum up, I personally feel that as developers we see software from a developer perspective.  The features we look for lay not in simplicity, but choice.  We lose sight of whom we are directing our software at.  The next time you’re designing something, try to cut down on things you think really aren’t needed.

Moving to Masters

by Kieran

Before I got with Amanda my plan for the future was to get my degree in Computer Science and then move onto a masters in SE.  That plan fell through as it would have conflicted with our lives and plans for the future.  I didn’t regret making that choice but neither was I happy that I had done it as education is an important, and interesting part of my life.

I had been looking at various options of education in the future and the most significant was the Open University as I had studied with them roughly three to four years ago and had a very nice experience for the duration of that course.  Thus, I have decided to go back to the Open University to move onto my masters degree in SE which I will be starting in November of this year.

I haven’t decided exactly what I’m going to study just yet (you can find the courses offered at pgcomp.open.ac.uk) but I’m making sure I have a decent look around.  Of course there are many compulsory courses that must be taken.

I decided last night also to take it quite slow, one course at a time for now to accommodate for newly married life.  The courses are quite expensive and for me they could go up to £1200 each.  The only footnote to this is that the diploma must be finished within four years so I must study at least two courses every year which are split into "semesters".  The first semester is May to October and the second being November to April, or vice versa.  That basically means I can complete the diploma in four years by doing one course a semester which is a nice workload, but I’d like to move up from that after the first course I take.

I received permission to do so today from my new employer hence why I’m only just making this blog post now ;)

Forward Moving

by Kieran

Today I accepted a job offer to work in a finance firm as an in-house software developer in VB.NET and SQL.  I’ve never had anything against Microsoft’s .NET technologies (or languages), however, I’ll always stand by the "it’s nothing new" saying.  Java had essentially achieved the same thing beforehand, that being the JRE.  Microsoft’s equivalent was the .NET framework which is a VM in itself unknowingly to end-users.

In terms of language and library features, I did have to use C#.NET when I was working for Symantec for a few small internal tools related to my job.  The libraries were scarily similar to Java’s.  The only thing I haven’t been keen on with Microsoft is their ability to introduce a hoard of language features which I never thought particularly good.  One of my previous rants included partial classes, generic getter/setter method, combining the functionality into one etcetera.  My personal belief is that everything should be very explicit.  Language features such as these are the "slang of English" as so to speak and can cause fuzzy edges diminishing understandability of code.

Whilst I’ve never worked in VB I’m quite looking forward to the opportunities this job is going to bring, and the people I’m going to work with.  I’ve met two of the people I’ll be working with and both of which seem extremely down to earth.  Hopefully my skills will be able to add much more to the company, and I’m especially looking forward to perhaps implementing some newer features as a personal touch to my job.

All of this is quite the culmination as I’m soon due to be married, plus a career, plus my degree, a house, a cat and more.  I’m twenty-two years old going on forty-five as many have told me (although, many have also told me I’m a splitting image of Gok Wan).

In the great wide expanse of software there exists a feature which is common to a large proportion of software products, something which you never notice yet your eyes are a victim of its look, and its feel.  Without this feel an application can feel stodgy, much like an unfinished painting.  You may think this "feature" is an awe-inspiring, turn-of-the-century feature that changed the face of the earth as we know it, but alas, it is merely the button, and more importantly, how it behaves.

Searching the Internet never seemed to help on my quest to find out where on earth the library features exist in order to achieve the desired effect.  The effect I talk of is how your button reacts to a mouse roll-over, click, and the mouse-out event.  Try it in most of your applications, you’ll find the behaviour is the same, if not very similar.  Upon rolling your mouse over that small button the state changes to this bordered, lighter-coloured button indicating that it’s feeling under the spotlight of that tiny little cursor.  The much awaited click again changes the look of the button to make it seem as if it has been trodden on.  And finally, the mouse-out event where its state is returned back to normal.

Java, much like any other language and their relative libraries, don’t just support this kind of behaviour normally.  An intricate web of code must exist to support this kind of behaviour, and so for every button that exists you must add listeners.  I myself created my own data type, extending the functionality of JToggleButton and the likes.  It took quite a while to achieve the desired effect due to the nature of my application, but I eventually got there.  The situation becomes even more difficult when you’re supporting selectable buttons.

In human-computer interaction this kind of look and feel is vital for end-users and how they interact with the application.  The desktop metaphor - making sure users have something familiar they can interact with - is also vital to how usable your system will be.  I heavily advise that this type of feel is applied to all of your applications.  And of course, this doesn’t apply just to Windows-based systems, but Linux and Apple based operating systems also.

This afternoon I was given the chance to show off my final year project in its current state.  There were far more people than I expected, there were more people than I could actually talk to but fortunately a lot of people just crowded around my desk to check out what was going on.  I literally got the project working properly about ten minutes before the event started.

Unfortunately I didn’t get a chance to check out other projects, and the ones that I did see belonged to other departments and so weren’t in my subject area.  Also, I didn’t manage to get any pictures which was a shame, I’m sure there are some floating around somewhere though.

The project itself is a virtual whiteboard capable of sharing vector-based graphics written in Java over a network connection.  In its current state it can share two types of shapes, an ellipse and a rectangle (and rounded rectangle) with a selected colour.  It’s fast, and uses a decent MVC architecture (thanks to Sinbad for the insight into that).

A variety of people approached my desk, some from the industry, others from employment agencies, and some professionals just taking some interest.  I received a couple of cards from companies asking me to give them a call, although it won’t be any use as I live overseas and don’t have the chance of moving in the next year.  Another comment I received from a "professional" was that if I wasn’t using serialization then I wouldn’t have any port/Socket issues blocked by firewalls.  The truth in that statement is beyond me, I didn’t think the Socket cared if serialized data was sent over a network connection, it doesn’t know what the data is, it just knows there’s data being sent/received.

Other people wanted to receive updates on the current status of the project and whether I would take it commercially.  My plan is to actually release it open source and continue work on it in the future as a side project.  It’s a large field and interests me greatly, I wouldn’t mind taking it to the 3D realm either.

I missed the winning prize by two votes and there was no "second place" prize either which was a shame.  I enjoyed the event though and it was good to see how interested people were in projects like this.  As it’s a very visual application it’s very easy to grasp what’s going on.

After university I expect a sourceforge page will be created for this project as it advances further.

Crazy Dog

by Kieran

I watch quite a few videos on the Internet, but this one had me in hysterics, and I don’t usually laugh out loud to videos posted on the Internet, no matter how funny they are.


Death Metal Puppy - Watch more free videos

I spend about ten hours a day coding, primarily in Java.  Ten hours is enough to give me a headache, but ten hours of getting literally nowhere is a migraine.  This stressed me out enough last night to just give up, and today I had to show the working code to a moderator which was obviously not working.

Fortunately for me the person whom isn’t familiar with Java decided to go through the code and ask me exactly what’s being called.  I spent an hour going through the code until eventually I spotted something, and this is what it looked like:

hasChanged();
notifyObservers();
clearChanged();

A cold sweat sat upon my brow upon realising what I had done.  Let’s try that one again:

setChanged();
notifyObservers();
clearChanged();

Three characters.  Three characters!  That’s all it takes to waste twenty-four hours of mind-numbing agony of confusion.  Tomorrow this code has to be working for some show-off event, so at least I found the bug!

As I’ve now decided to go ahead and use Serialization in my application and differentiating the data by giving leading bits indicating what type of data is about to come in I am now using ObjectOutputStream and ObjectInputStream.  This application needs to be working by Wednesday so obviously I’m in a bit of rush to get this to work and today got completely stuck when the application decided to pause.  Of course it’s threaded so the whole thing didn’t just die, but when a window was supposed to pop up, nothing happened.  I traced through the code, shoved test cases here and there and still couldn’t figure it out.

The moment that ObjectOutputStream and ObjectInputStream were being created, it got stuck, for no reason.  Type Exception wasn’t caught, and nothing else was thrown.  I sat and waited thinking that something is just going slow but d’ya know what? Nothing happened.

Eventually I hopped on IRC (a great resource for situations like this) and found that ObjectOutputStream needs to be constructed first as it sends setup data.  So, if you’re using Serialization over Sockets and your application decides to stop processing when constructing these types, remember to instantiate ObjectOutputStream before ObjectInputStream.

*grumbles* ;)

I recently found an article over at Coding Horror describing some shareware which was not being entirely ethical with its approach to achieving a certain task.  Sure enough I own a GMail account and use it for all of my e-mails, and personally I have been thinking about switching to offline mail for general security reasons.  In order to do this you would have to use an application to migrate your e-mails out from the mailbox and then import them into your client-side application.

Typically we trust software that we get from the Internet.  Someone put a lot of time and effort into making it, and it does what it says on the tin, right?  Wrong.  I myself have my hand in the software development jar and personally know many software developers.  Most of them are ethical in what they do but not all software is made secure (I’m sure if you do a search for Microsoft you’ll find many complaints in many blogs).

Should we trust software?  After that little post I’m not so certain.

« Previous PageNext Page »