My Quick Computer Predictions for 2011

Given that we’re well into the new year, I figured it was safe to make a few predictions about what I think 2011 will hold.

People will start to use four distinct types of “computer”.  Roughly in order of usage, they are:

1. A Smartphone.

New ones are already being released with dual-core CPUs, and the specs will quickly get ridiculous.

New smartphones are quickly becoming a legitimate replacement to a laptop. If you’re like me, you’ll use your phone for nearly everything, all the time (I already do). The only reason you’ll use a tablet (and you will) is for the screen size.

2. A Tablet.

Internet-connected tablet PCs will sprout up everywhere with all sorts of resolutions and sizes.  The iPad was just the first, but it certainly won’t be the last.

For people in my industry, that means something new to consider when writing websites. If you have a menu on your site that drops down on mouseover, change it. Seriously. There’ll be no mouse for most of your visitors.

I’m going to go out on a limb here and suggest that if you have a website, by the end of the year more people will visit your website using a phone or a tablet than a traditional computer. If you don’t cater for those devices, people will stop visiting altogether.  Don’t wait, do it now.

3. A PC or Notebook.

They won’t go away, but you’ll notice I put them at number three. That’s perhaps a bit unfair as they’ll continue to be the “main” computer in workplaces, but I predict that a lot of people will find they don’t really use their home PC any more.

4. A Gaming Console.

Purely a gaming machine, so obviously this depends greatly on the person. If you’re spending 20 hours a week with your Xbox, you’re probably not going to stop. On the flipside, there are people like me – I have a Wii that never gets used.  That probably won’t change either.

And that’s it. Short and sweet.  Feedback welcome as always.

(Predictable) Trouble in the House of Google

Jeff Atwood recently blogged about the declining quality of search results, particularly with respect to Stack Overflow content.

His main observation is that content syndication websites are starting to outrank the original content source in search results. He’s right to suggest that this is a problem; for everyone except content syndicators of course.

While I appreciate his disappointment, far from being upset by this, I’m impressed that it’s taken this long.  It also wouldn’t surprise me if this was a short term thing. As Jeff mentions, Google could probably “tweak a few algorithmic knobs” to make the problem will go away for a while.

It’s clear that Google does a lot of work to try to give you useful results to your queries.  But Google is only one company.  A single (albeit massive) company fighting to provide relevant results against an army of hundreds of millions (billions?) of sites trying to get to the front page of Google search results.

So why should we be surprised that it’s finally becoming a problem?  There are striking similarities in the history of DRM, or computer viruses, or spam detection. One protagonist against millions; all looking for ways to game or cheat whatever system they’re trying to defeat. In my opinion, Google has been orders of magnitude more effective in staving off attacks than the three prior examples.

Effective DRM is really only renowned for pissing people off (those links took mere seconds to find – in Google coincidentally), and we’re always being subjected to new viruses and spam techniques.

I hope that this trend is halted by the twiddling of knobs, but either way I’m impressed by how long Google has largely held off this threat.

Triple J Hottest 100 Voting Helper

I always have trouble remembering songs by name, so voting in Triple J's Hottest 100 tends to take me much longer than it should. This year, I contrived to fix the problem.

With that in mind, I've created a "Hottest 100 Voting Helper" bookmarklet you can use to find Youtube videos of each of the songs.

  1. In your favourite browser, drag the link below to your bookmarks bar:

    Hottest 100 Helper

  2. When you have the bookmarklet ready, go to the Hottest 100 Voting site, wait for it to load completely, and then click the link. A new Videos section should appear, along with links to search when you hover over each song.

  3. When you see a song you want to hear, hover over it and click the new "Search for Video" link

A few other things you need to know to use it properly:

  • It only works in the "separate window" version of the voting page. Look for the link in the instructions at the top.
  • I've tested this in a few browsers, but I can't 100% guarantee its success in all of them.
  • I also can't guarantee its effectiveness for any song - e.g. "[Me] - Naked" definitely doesn't come up with anything useful!
  • If you put a song onto your shortlist, you'll have to click the bookmarklet again when the page finishes reloading. Sorry, it's just how these things work.

Enjoy. Any problems, shoot me a tweet or an email and I'll look into it.

Using the data you generate

I stumbled across an excellent article by Zachary Seward titled, “Everything the Internet Knows About Me (Because I Asked It To)”. It’s an great example of how much data can be collected about your every day activities.

While Zach gives some very interesting insights on what that data means to him, my immediate thoughts flew to, “what could an application do with this information?”

Using The Data:

Lately, I’ve been working on a presentation predicting the “rise of participative software”; software that actively participates in your life rather than standing idle waiting for instruction. As Zach hinted, data collection is prolific and the data ubiquitous.

Software is already capable of using swathes of data to actively push targeted advertisements your way, so why can’t it use its power for good and make suggestions to save you time or improve your life? Key to this concept is the idea that data-mining logs of your personal habits and activities can yield vastly useful useful information.

The Alarm Clock:

My go-to example of this kind of software is the humble alarm clock.

A stock (read: boring) alarm clock will sound an alarm wake you up at a certain time the next day. Extensions have included multiple alarms, repeating alarms, and technological marvels (like WakeMate and Sleep Cycle) that try to wake you up at the best possible time. Ultimately, they’re all just trying to wake you up before a certain time.

So what can all this public and personal data do for the alarm clock? It’s worth noting before I start that I use the alarm on my smartphone because it’s always on the bedside table at night. An alarm clock running on a device like this opens up a world of possibilities.

Let’s say my standard alarm is set to 7:30am on weekdays. That’s great most of the time, but there are a lot of exceptions to the rule. On public holidays I want to sleep in and if I have early meetings I need to wake up earlier. This is easy enough to do; the data is available. Public holidays are known well in advance, and my work calendar is already synced to my phone so that information is available as well.

Let’s take it a step further. My phone has GPS and knows about the wireless networks at my office and at home. In short, because I’m all but physically attached to my phone, it has the ability to track my movements.

If I leave work at 11pm on one particularly gruelling day, that data could feed back into the alarm clock. Wouldn’t it be nice if, when I finally went to bed that night, my phone asked me whether I wanted a sleep in the next day and adjusted the alarm accordingly?

Let’s take it even further, shall we? At 6:30am one Tuesday morning, my phone notices I have a 9am meeting at work. The phone turns on GPS or Wifi to check I’m at home, maps a driving route to my office (using Google or Bing Maps), and checks traffic data to see whether there are any accidents on the way. If there are, it might decide to wake me up early so I’ll make it to work on time.

Active Participation

I’m sure you can see where I’m going with this. The key point I’m trying to make is that I shouldn’t have to explicitly tell the software to behave this way for me. It knows my habits, has access to relevant data, and can therefore make predictions on what I want. It’s really just about combining and interpreting the huge amounts of data available and using it to actively participate in my life.

GPS data combined with bank account details and ATM localities could allow my phone to tell me I’ve been paid as I walk past an ATM.

Foursquare checkins combined with restaurant reviews and data from a coupon site could suggest places to go for dinner on the days I usually go out.

The possibilities really are endless.

The Skynet barrier

Whenever I talk about ideas like this with my fiancée, she blanches. She sees things very differently to me in this respect, almost certainly because she’s not an IT nerd. She doesn’t want her technology covertly collecting information on her or telling her what to do, and that’s probably the biggest barrier to this type of technology.

Just because you can do something doesn’t mean people will be comfortable with it. As Arthur C. Clarke famously wrote, “Any sufficiently advanced technology is indistinguishable from magic”, and while not everyone is scared of magic, it’s reasonable to be scared of the magician when it involves your private information.

Conclusion

With any product, it’s really up to the market whether applications like this will be deemed acceptable and ultimately popular. I may see opportunity while others see Skynet, but the opinion that matters is the one belonging to the consumers with the money.

If you want to share your opinion, or if you would like me to share all my ideas on this topic, let me know on Twitter, or by email.

The Meaning of Midnight

We had a rather long argument at work yesterday regarding the meaning of “midnight”.  I took the argument onto english.stackexchange.com and then Facebook after work, and 35 comments and some research later, I think I’ve decided on an answer.

First, some context.

Like many IT companies, we have a moratorium that runs over Christmas.  That means no changes to any production systems over the break.  It’s a sensible step given the large number of people on holiday.  The communication (at least internally) was that the moratorium began at “midnight on the 9th of December”. Here’s where the problem starts.

Different Interpretations

It turned out that there were two different ideas about what “midnight on the 9th” meant.  The different interpretations, for the most part, were split between technical staff and less technical staff.  The technical staff – programmers and sysadmins – tended to interpret “midnight on the 9th” as 12am on the morning of the 9th of December.  The less technical staff – managers and level 1 support – tended to interpret “midnight on the 9th” as midnight at the end of the 9th of December.

If you’re still reading, I’m sure you’re very strongly on one side of the fence and can’t understand how anyone could have a different interpretation.  That was what happened to us.  Some people got quite fired up about it.

It’s totally first thing in the morning, idiot!

The argument here is that midnight is written as 12:00am or, in 24 hour time, 00:00.  If it’s AM or zero, then surely it’s first thing in the morning.  How could it be anything else?!

No you moron, it’s in the middle of the night at the end of the day!

The alternative argument is that nobody would think “midnight tonight” was actually tomorrow, or that there is no “midnight tonight”.  It’s in the middle of the night, and the night belongs to the day before. Geez!

My original position

Originally, I was very much in camp first-thing-in-the-morning.  That’s probably because nobody in my experience has ever referred to midnight as 24:00.  Indeed, no programming language I’ve ever encountered has defined midnight as anything other than the first moment of time available for a day.  Having said that, I could appreciate that phrases like “midnight tonight” were fairly unambiguous even if they didn’t agree with my technical definition.

So I decided to read more.

Most dictionaries I referenced very unhelpfully referred to midnight as, “the middle of the night”, or “12 o’clock at night”.  That really didn’t help me prove that I was right and everyone who disagreed with me were wrong.

Everybody’s wrong!

It seemed that no organisation really wanted to decide which day midnight belonged to.  NIST even recommended avoiding using 12am or 12pm because it’s ambiguous.  They actually have a good explanation of why on that site.

And that seems to be the answer.  Midnight does not belong to either of the days it splits.  Midnight really acts as a separator.  It’s infinitely small, and it doesn’t actually exist in either day.  Technically, it’s not a time of the day at all, but the point at which the day changes.

It helps to compare it to “midday”.  Nobody vehemently claims that midday belongs to the morning or the afternoon.  It’s generally agreed that it’s the point between them.  Of course you don’t get the same problems with midday because “midday on the 9th” is unambiguous; there’s only one time it can be.

Ok, so not everybody is wrong

Ultimately it comes down to convention, and the convention seems to be that midnight is at the end of a day.  It’s not technically correct, but more people understand it that way than the alternatives.

Of course that would mean that I was wrong.

It’s a stupid argument anyway.

IT Careers and Training – my Stack Exchange proposal

Just a quick post to plug a proposal I’ve made for a new Stack Exchange site for IT Careers and Training.

The intention is to have a Stack Overflow-style site where you can ask and answer questions about how to progress or start your IT career.  What training courses and certifications are worth their money, what companies are good to work for, and how to get where you want to go in your career.

Have a look and give your support here.

LINQ-to-Entities Date Comparison Gotcha

I came across this problem very recently while trying to deploy a working product to a new server.  There’s more information in this StackOverflow question I posted, but here’s a summary.

When you do a date comparison with DateTime.Now using LINQ-to-Entities against a SQL Server database, the engine translates DateTime.Now to GetDate().

For example:

var items = (from t in context.Token
             where t.Expiry > DateTime.Now).ToList();

will ultimately generate SQL that says:

...
WHERE Token.Expiry > GetDate()
...

This can cause some significant (and subtle) problems:

If the application running this code is on a different server to the SQL database, any time differences can break code.

This is what happened to me.  There was a one minute time difference between the web service running this code and the SQL Server machine.  I was using the Entity Framework to set the expiry date to DateTime.Now.AddSeconds(60), and retrieving it later by comparing it to DateTime.Now.  Despite this, I was effectively setting the expiry using the web server’s time, and comparing it using the SQL Server’s time.

If you’re having a similar problem, I hope you stumble across this post.

jQuery 1.4 released!

Yep, jQuery 1.4 has been released.

Here’s a great post from nettuts outlining some key differences and new features.

I don’t really have much to add on this, but just a few thoughts:

  1. Speed improvements are good and all, but when you can get ten times better javascript performance by changing browsers, nearly doubling the speed of your .css() method not the most important thing. Still, I can’t expect the jQuery team to be able to retire browsers for people I guess…
  2. A lot of changes seem to deal with allowing functions to be passed into methods.  Being a .Net 3.5 guy, I’m love this anonymous delegate stuff, so it’s good to see!

Yeah, that’s all the comments I have right now. Told you I didn’t have much to add!

Getting into ASP.NET MVC

It all started when I decided that I’d rewrite a partially-aborted PHP web app of mine in .Net. The PHP version was relatively functional, but PHP is not my strongest skill, so updating and improving it was hard. Combined with a lack of good quality free time, it meant that I didn’t have the inclination to update it much.

Much of the design work is already done. The database schema is solid and it isn’t trivial – it took me a number of iterations to get right. The UI flow has been decided, and at this point, I’m happy to reuse most of the layout, css and images.

At Tech.Ed this year, I heard a lot of great things about ASP.NET MVC. The Hands-On-Lab I did gave me just enough of it to get me interested, so when I decided I was going to rewrite this thing in .Net, MVC seemed like the way to go.

So I’m now attempting to learn how it all works, and it’s going really well. The secret? The NerdDinner tutorial courtesy of Rob Conery, Scott Guthrie, Scott Hanselman, and Phil Haack (actually I get the impression that Scott Guthrie wrote the tutorial, but the originating book is authored by all of them).

Seriously, if you’re looking at playing with ASP.NET MVC, run through this tutorial from start to finish. I guarantee by the end of it you’ll be all over the basics, and loving the way ASP.NET MVC is put together.

I’m looking forward to getting into some real development with this project.

Probably the best response on Stack Overflow ever

You’d probably be aware that I’m a fan of Stack Overflow. I mean, I have my SO profile over there on the right of the page.

This is just a quick post to provide a link to the best response I’ve seen on Stack Overflow. And just to clarify, I mean best in terms of amusement. It gets a point across I guess, but wow is it creative.

So here you go: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454

« Previous PageNext Page »