Transparent wireless

Let’s be honest, wireless connectivity is awesome. It’s fairly easy to set up, and it basically means you can roam all over the place while on the Internet.

I have a secure wireless LAN set up at home, another one at work and even another one accessible to me at uni. In case that isn’t enough, my mobile phone has a wireless broadband plan and I have a Vodafone USB modem from work for mobile broadband as well. Occasionally, if I’m sitting at my desk at work, I’ll plug my laptop in just to get that little bit more speed.

It’s convenient that I have so many wireless connections available to me, but it’s not as convenient as it could be. And that’s what technology is all about, right?

My laptop can connect to one of three WiFi networks, and they usually connect pretty transparently if they’re available. I turn the computer on, it finds a known wireless network and connects. The uni connection is the only exception and that’s just due to the security they’ve got in place. If need be, my laptop can also connect to one of two mobile broadband connections - one through my mobile phone via Bluetooth, and one via the USB modem. In these cases, I have to tell it to connect and provide the credentials every time.

Wouldn’t it be good if I could just set up all of these connections once and let my laptop decide what connection it wanted to use? I’d happily provide credentials to use for each connection and I’ll even order them in terms of preference.

I’m no network engineer, but I’m sure it can’t be too difficult to write some software to handle all of this for me? Identify which connections are available, use the one with the highest preference, and fail-over relatively silently to an alternative if it becomes unavailable. If it becomes available again, then reconnect and start using it.

Has anyone encountered a system that can do this nicely?

Damo

Efficiency is all perception

A couple of things today prompted me to write about this. The first and main one was an article on Coding Horror about actual vs perceived performance.

The premise of the article and the study it references is that a user’s perception of the speed of an operation is often more important than the actual speed of the operation.

This all harks back to a core software designer rule - effective feedback.

In short, if a user can see that something is happening, they’re less concerned with the time it takes. This realisation no doubt led to the plethora of spinning images around the web that let you know an asynchronous request is happening. Does the rotating wheel indicate how long it will take or whether it’s actually doing anything at all? No, of course not, but it is effective feedback and it inspires confidence from the user.

One of the first bits of code I wrote when I arrived at my current job was a function in an ASP.Net application that retrieved a credit report for a client. Its efficiency relied 100% on the efficiency of a server somewhere in New Zealand (there’s now an Australian server). I didn’t (and still don’t) know before request time whether it will be available or how long the request will take if it is. I know very little about the service apart from the message it expects and the response it will hopefully give me.

At first, there were a few complaints about how long the function took. Unlike everything else in the system, it didn’t respond straight away. On average, it only really took a few seconds, but it was long enough that some users wondered what was happening. Predictably, when I added a small chunk of javascript that showed a “Retrieving credit file” message and a pretty rotating circle, the complaints stopped. Because something was happening while they were waiting, albeit a simple animated gif, people were less concerned with the time it took.

I did say there were two things that prompted this post didn’t I? The second was a discussion I was having with a mate about efficient methods of storing, retrieving, and sorting data. It made me think that even if you refactored your code to cut down your search from say, O(n2) to O(n log n), would your users be any happier than if you added some javascript to distract them? It’s often worth investigating I think.

Damo

Finally…

If you’re sick of constantly hearing predictions of what technology is going to be able to do in the future only to get there (to the future) and find yourself wanting, check this out:

http://www.legitreviews.com/article/475/1/

Yeah, that’s right - it’s a peripheral for a computer that READS YOUR MIND!!

Now where’s my flying car?

Damo

This guy’s insane…

I’ve been trying to get into Ruby on Rails so I’ve been looking for good tutorials and introductions to the ruby language and the whole RoR framework. I’ve found a few, and I think I’m getting a decent grasp on it now.

One I’m reading why’s (poignant) guide to ruby and it’s seriously like getting great training from a mental patient. The tutorial bits and examples are great, but there’s a ton of insanity thrown in.

Take this quote for example:

Back, back, way back before speedboats, I owned a prize race horse who took a stumble on the track. She did ten front flips and crashed into a guy who was carrying a full jar of mayonnaisse. We had blood and mayonnaisse [sic] up and down the track. Needless to say, she was a disaster.

Wow. And this kind of stuff is scattered throughout. The example immediately after this little story demonstrates methods by showing an example that catches a falling star and uses a rachet to connect it to a captive monkey to make a “starmonkey”.

Well worth a read. You’ll actually probably accidentally learn Ruby too.

Damo

A new way of doing this

Obviously I post very rarely. It’s been a long time since my last one.

So, in an effort to actually make this something that gets updated, I’m changing the way I’m going to do it. I’m not going to wait until I have an essay to write, because it’s clear that doesn’t work. Instead, I’m going to write short posts.

This is the first one. Hope you enjoyed it. Read it again if you like.

Damo

Cameras of the Future

I read this article in CNet that talks about functionality we can expect in the next generation of digital cameras. Cameras that have face detection are already fairly standard, and Sony’s new Smile Shutter feature takes it one step further; only taking the photo when someone in the shot smiles.

The CNet article mentions a few technologies that are interesting, and the combination of these technologies look to make the sorting of photos a lot more hassle-free. There’s the possibility of automatic tagging of photos for location based on GPS, tagging of people based on face recognition, and tagging of emotion based on expression detection. I could imagine extensions into analysis of the scenery in the background too. Identification of buildings in the background, perhaps the weather, whether it’s night or day, indoors or outdoors, etc. The possibilities seem nearly endless given the gigantic leaps that are being made in computerized pattern recognition.

Give it a few years, and automatic tagging could mean that you could just snap away wherever and whenever you are, transfer the photos when you get home, and have some basic photo software organise and name your photos for you. Without doing any manual tagging yourself, you might be able to search for all photos of John in Paris, or even photos of at least three people with the Eiffel Tower behind them when it’s raining and at least one person is looking miserable.

The prevalence of digital cameras and the plummeting price of solid-state memory has basically meant that you don’t need to wait for a great shot to start snapping away. Consequently, it’s not uncommon for people to come back from a two week holiday with over 1000 photos. Who wants to sort through all of that?

I’m heading to Thailand soon and I’m likely to come back with more photos than I know what to do with. With the technology where it is right now, I’ll be spending a very long time sorting through those photos when I get back. I’m dreading it even now. I’m sure I’ll long for the day when I don’t have to do it at all.

Damo

Government Internet Scare Campaign

So you’re all probably aware of those ads we’re seeing from the government designed to scare parents into monitoring or preventing their child’s Internet use. Apparently, they have been spin-doctored in a big way.

Via Gizmodo Australia, I discovered an article on the Sydney Morning Herald website with a fairly critical analysis of this government campaign.
The advertisements are costing about $22 million, and are part of a $189 million NetAlert program designed to “save our children”. The SMH claims that this money is being spent to “whip up fear about the largely non-existent threat of online sexual predators”. When you read on, you can see that their criticism is legitimate.

Here are some anomalies with the campaign as reported by SMH:

  • The number of people who have been charged and convicted for approaching minors online with a view to paedophilia (called grooming) in the last two years in NSW is one. Yes, one person in two years.
  • The ads claim that more than half of Australian children have been contacted by a “stranger” online. It appears that the definition of “stranger” includes friends of friends. So if you’re a child, and a friend from school introduces you to a friend of theirs, then you contribute to this statistic.
  • If the previous point wasn’t bad enough, it seems that contact from a “stranger” also refers to unsolicited email; i.e. spam. Yes, that’s right, more than half of Australia children have received spam; a statistic that has nothing to do with paedophilia at all, and frankly seems a bit low to me.
  • Only 8 percent of children even mentioned the possibility of talking to “bad people” when asked about concerns with the Internet. Their major concerns appeared to be popup ads and speed issues.

In the Sydney Morning Herald article, there’s almost no mention of misleading statistics regarding pornography or inappropriate content. That’s fair enough; the research that this campaign is based on shows that more than half of Australian children have done something online that their parents wouldn’t approve of. But what about offline? What do you think the response would have been if the same children had been asked whether they had done something in real life that their parents wouldn’t approve of? And what constitutes these acts that parents “wouldn’t approve of”? I can imagine that talking to friends after 11pm might fit that description, as would playing games when they were supposed to be studying.

Now, don’t get me wrong, I acknowledge that material on the Internet that is inappropriate for children is far too easy to find. There should be technologies and mechanisms available to allow parents to monitor and restrict their child’s access to such content. And that is what the government has tried to do with their free Internet filter. The one that was cracked in 30 minutes by a kid in grade 10 at school. As an IT guy, I can appreciate that it is a very hard problem, but with $189 million dollars to spend and the ability to write legislation, you’d think a reasonable solution might be forthcoming. At least one that would last longer than half an hour. Why not require that ISPs implement a filter at their end that can be turned on and off by the account holder? The filter can’t be cracked by your 15 year old if he can’t see it.

I appreciate that the government is taking the danger of the Internet seriously, really I do. But using misleading and essentially false statistics to implant fear into the minds of parents is a horrible solution.

Some parents go seriously overboard when it comes to “protecting” their children. I know parents who have prevented their child from seeing their friends outside school hours for more than a year because the child skipped school one day. I know parents who have forbidden their 16 year-old daughter from watching the Austin Powers movie because it had a character called “Alotta Fagina”. What would be the response of parents like this if they saw an ad suggesting that over half of Australian children have been approached by a paedophile online? I have little doubt that the children would be prevented from accessing the Internet at all, or at the very least, restricted to Internet usage with a parent sitting next to them. Maybe the latter is not so bad, but God forbid if the kid accidentally stumbled upon a search result that contained inappropriate material.

-Damo

Garbage in, garbage out

Every software developer worth his salt knows this saying. Basically it means that if the information coming into your system is garbage, you can’t expect to get anything but garbage out.

In terms of my recent work (two projects in particular), this has never been more evident. In both cases, I’m being given data as the input for a new system. In both cases, the new system is far more restrictive than the old system in terms of what it allows in certain fields. And in both cases, the data I’m being given is difficult to work with.

This problem rears its ugly head often, whether it be upgrading from an old application to a new one, or trying to get meaningful statistics out of information that wasn’t collected properly in the first place. In my recent work, I’ve been faced with both of these scenarios.

So why is this such a prevalent problem? It’s very easy to place blame on the developers of the original code and argue that they didn’t think about the consequences of free-text fields or that they didn’t validate the data properly. To an extent, you’d probably be right. I’m sure that the developers of the old system probably didn’t think it was worth validating a date because it was only going to be used for information; not for any statistics or filtering. Lazy? Probably, but every developer has done this. Maybe not with dates necessarily, but let me give you a scenario:

You have a client who wants an appointments system. He wants to track the phone calls received at the office, and he cares about when it was, who it was, why they called, and the follow through to an appointment. Fairly straightforward, no? So you ask this client about the “why they called” bit and they tell you that it could be any reason. You push, saying that that information won’t be useful unless it’s standardised and are told that it doesn’t matter - people should be able to write anything they want. The problem should be immediately apparent by now.

But let’s go further - let’s say that you insist so much that he lets you put an additional field in the form of an enumerable list of reasons someone could call. You’re happier because at least you have something concrete for this field that you can return to later, and the users of the system can still type whatever they like in the comments field. You even train the staff to make sure they select one of these reasons each time. Great! everyone wins… until the client wants to do some analysis on the reasons people have been calling. When you look at the data, you notice that nobody has been using this field. When asked, a staff member might say that it’s quicker just to put the reason in the comments section, or that there was more than one reason, or even that they didn’t know what the options really meant.

I’d argue that at this point, the data that’s in this extra field is less useful than the free-text data. Sure, it’s quantifiable and is great for statistics, but those statistics are wrong. Dead wrong. It’s even worse if management has been relying on them.

My point is that it’s all very well to make sure each piece of information you’re collecting is discrete or enumerable, but unless the users are using it properly, it won’t work and can have damaging effects. Garbage in - garbage out.

So where does this leave the future developers who have to import this data into their system later? Well, the answer’s fairly obvious and there’s no paddle. They (and I include myself in this) will be on their soapbox complaining about how the last guy didn’t do it properly, but really, it may not have been his fault.

That’s great, you say, but it doesn’t help me. No, it doesn’t, but it’s something to be aware of. Before (yes, before) you go headfirst into building a brand new system that will leave the other system for dead, look very carefully at the data that’s contained in that old system. Think about how it will fit into the new one - chances are it won’t without a lot of shoving, and you need to be prepared to shove. If it’s a new system, make sure that the stakeholders understand its limitations. Stress that even though you’re building it with enumerable options and discrete values (because that’s still a good idea), these will be worthless if they’re not used correctly. Make sure they understand this - if they don’t, you’ll be the first person they’ll yell at if their statistics are wrong.

-Damo

Back online…

Hi all,

I’m ignoring the fact that “all” is probably nobody by the way.

So I’m back online with a new web host and am planning some changes to some things around here. The first change will be the link to “Home” just on the right there - it still goes to my old domain… Any ideas on how to fix it? I can’t find it anywhere in any of the Wordpress or theme files - I’ve checked sidebar.php about 14 times…

So anyway, this new host will be hosting some new projects coming up. I moved from my old one mainly because they didn’t support Ruby on Rails, and this one does. I’m a bit excited about RoR at the moment, even though I haven’t touched any code - just pages of a book. I’ll probably blog on that when I do.

That’s enough for now, keep an eye out - the blog may not be the default damianbrady.com.au page for long…

-Damo “Visa” Brady

Convergence

So I read this article on NYT today called, “Sooner or Later, All Electronic Gadgets Will Converge Into a Single Gadget” and it got me thinking about what I’d actually want from a single gadget.

Let’s look at all the things that these little devices (mobile/cell phones, multimedia players, etc.) can do right now.

My phone (which isn’t terribly new) can play music and video (albeit short, terrible quality video), and can tune into radio stations. It’s got a calendar, alarms, todo lists, it contains contact details for hundreds of people, and it can send email and browse the web via WAP. On top of this it has games, measurement conversion and timer apps, and a world clock. Oh, and it can do phone calls and text messages.

That sounds like a fairly decent little device on paper doesn’t it? It’s got multimedia capabilities (to an extent), all the communication options I use, and plenty of tools to help me organise my life. What more could I want?

Well the answer isn’t as straightforward as naming things it can’t do. Really, it is more or less capable of doing everything I’d want it to do. The problem is, I want it to do a lot of things better.

Let’s take email as an example. If I want to send an email from my phone, it’ll take a bit of time and I’m fairly limited in what I can do. I can attach files, sure, but other than that I’m pretty restricted to straight text. Add on the fact that I have to connect to my service provider using GPRS, plug in the destination email address manually (no, I can’t get it from my contacts list), and wait patiently while it slowly disappears from my outbox. And if I need a response? I’ve got to connect and check for new emails periodically because the phone doesn’t do that itself. Basically, we’re talking about a device that offers nearly complete email capability… that takes me 5 times as long as it would sitting at a computer.

I could go on naming functions that are made available by my phone but take too long to use effectively but I think you get the idea.

So that brings me back to my original question: What do I want in a single device? I think I can summarise it by saying I want what I have now, with a better interface. Of course a better screen and updated hardware would be nice; it can be a bit slow sometimes, and video is not really watchable, but it’s more about how easy and efficient it is to access the features. One button to get to my MP3s would be a lot nicer than the eight I currently have to press.

Damo “Visa” Brady

« Previous PageNext Page »