Latest Entries »

The great IE6 switchover

OK, this subject has been done to death, but Internet Explorer 6 needs to die. It’s old, it’s dated, it’s insecure, it’s not standards compliant, it requires web designers and developers to spend countless hours adjusting perfectly standards-compliant websites to render correctly in IE6 when they could be adding cool new features. You know the drill by now!

So, how do we get people to dump IE6? I think Microsoft have probably done everything reasonable to get people to move to IE7 or IE8, but a hard core of users just won’t budge. By and large these users fall into the following groups:

  1. Corporate users – that is, people using IE6 on their desktops at work. It’s well known that IE6 usage drops substantially at weekends so this probably represents a lot of people. Where I work we’re still on Internet Explorer 6, but the reason for that is that we use a lot of custom web applications which were designed specifically for IE6, and if they changed browsers they’d have to convert these web apps to be standards-compliant. One day they’ll have to update them, but there’s no sign of that happening anytime soon. It’s not the user’s fault (there are many, many posts on the intranet forums at work bemoaning the fact we’re still stuck with IE6) and most of them would rather use a better browser at work since there are a number of very useful web applications which IE6 works terribly with (Google Maps is a good example).
  2. People who don’t know any better and don’t see the need to upgrade – this might include the elderly or other non-computer savvy people who’ve disabled Windows updates for some reason (maybe because they find it makes things slower).

But why are we letting these groups hold the whole future of the web back? By bending over backwards to support these people, we’re prolonging IE6’s shelf life, and making it easy for people to continue IE6 when we really don’t want them to! It’s simple to upgrade your browser or switch to a new one, so why are we propping up a minority who can’t be bothered?

I’m beginning to think that we ought to draw a parallel with digital television. In many countries, the digital and analogue signals have been coexisting for some time, and now we’ve begun switching off the analogue signal. We aren’t bending over backwards to support people who haven’t got a digital television or Freeview box yet – if you haven’t got one when they switch off the signal, you’re going to be watching a blank screen. With web browsers, we don’t expect people to make any financial outlay – we just want them to click on a link, so I think it’s much more reasonable to cut them off from our content unless they switch browsers.

Ultimately, it’s the decision of the person who wants to make a website whether or not to support IE6, but I think we need to be a little harsher than we have in the past. Google are beginning to drop IE6 support, and I’m sure more people will follow. By catering for the remaining IE6 users, we may well be prolonging its usage, and perhaps we need a big stick to encourage users to switch to a newer browser. Of course it’s a difficult decision to make if you’re hoping to attract customers to a commercial website since if website A and website B both sell the same product but the customer’s browser doesn’t work on website A, he’s going to go to website B instead.

Moderation on

Due to spamming, I’ve reluctantly decided to start moderating comments on this blog. I don’t want to do so, and regret having to take this step, but it was getting really annoying.

Don’t let this put you off commenting – feel free to do so as long as your post is not spam.

The rise and rise of Unix

It’s weird that Unix is often regarded as something old and dated, often by consultants trying to sell you on Windows. Often they’ll try and make out that it’s too hard to use, too arcane, and generally a pain, and that you should be using something more modern. But modern Unixes are powerful, flexible and higly mature operating systems that are less bloated than operating systems half their age and can be turned to virtually any task.

Put it this way – can you name any other software that has been around as long as Unix and is still in heavy use today? I can think of one, and that’s the C programming language, which was to a large extent developed alongside Unix, and in which most Unixes are now written. But I can’t think of any others.

(Note: I’m going to be slightly controversial here and in this context, I’m treating all Unix-like operating systems as Unix. Dennis Ritchie, one of the creators of Unix, has said that he regards Unix-like OS’s such as Linux as de-facto Unixes, and I’m going with that here.)

If you consider the desktop market, then it’s only really the OS with the largest market share (Windows, which I’m treating as one OS for all the versions) which isn’t Unix-like. The number two, Mac OS X, is a certified Unix, and then all the Linux distros are Unix-like, as are the BSD’s and OpenSolaris. In fact, you have to go pretty far down the list to get to one that isn’t Unix-like – probablyReactOS, FreeDOS, or Syllable.

The various Linux distros are generally doing OK at winning market share away from Windows, as is OS X, partly because people just didn’t like Vista. Now Windows 7 is out this may stall for a bit, but the release of ChromeOS later this year should mean a few more Unix devices get sold.

Unix also has a majority of the server market, and always has done – it’s well suited to use as a server OS, and has an enviable security record. It’s also very useful as an embedded OS – many routers use Linux or one of the BSD’s for this purpose.

Finally, Unix has been breaking into the mobile OS market for some time now. Embedded Linux-based OS’s were used on a few high-end mobile phones for years, and now Palm have developed webOS, which is also Linux-based. Android is shaping up to be a huge force in mobile OS’s, and of course the iPhone uses a cut-down version of Mac OS X.

So, for a crusty old OS, Unix seems to be in remarkably good health. It’s well-placed to grab a huge piece of the mobile OS market, and has a respectable slice of the desktop. Anyone tells you Unix is old-fashioned, they couldn’t be more wrong. Unix has stood the test of time, probably better than Windows has.

One thing that really bugs me is how anal many people are about the English language. Last year I had to deal with a case at work where someone told us that he couldn’t find a word we were using in his dictionary, and told us we therefore should not be using it, in spite of the fact that it had not been coined by us, but by the industry regulator! I’ve encountered this kind of petty, small-minded attitude too many times, and it drives me up the wall.

People like that seem to think they’re the self-appointed guardians of the Queen’s English (that probably covers the entire of the Commonwealth as well as the UK, don’t know what people in the US would interpret as being correct English in the same way – any suggestions?) and that they’re single-handedly preventing the language from sliding into the gutter. Usually scared by endless Daily Mail articles (along the lines of “Children using text speak in schoolwork/exams! End of civilization imminent!”), these people seem to think that the way people speak or write is an affront to the whole English language. I find this sort of attitude incredibly stupid and ignorant.

Thinking that something is not English because it’s not in the dictionary is putting the cart before the horse. The English language predates dictionaries by many centuries, although naturally it has mutated over its lifetime. Although there were other dictionaries beforehand, the first really popular and reliable dictionary was A Dictionary of the English Language by Samuel Johnson, published in 1755. Until dictionaries became popular, words generally had no fixed spelling.

A dictionary is not a definition of the English language, as some people seem to think. It’s actually a record of the English language as generally spoken at a specific point in time. The Oxford English Dictionary styles itself as “The definitive record of the English language”. A word does not come about by being added to the dictionary (otherwise the publishers of the OED would have to invent them – “Hey, what word shall we invent today? Snungfurbdle? It’s going in!”), but by passing into common usage. Once a word is commonplace enough it may be included in the dictionary, but the dictionaries are not the arbiters of what the English language is by choosing what words to include, any more than newspapers are the arbiters of what is going on in the world by choosing whether or not to report it. If a dictionary does not include a number of words that many people use, it does not mean those people are in any way mistreating the English language, it means that by not having a record of those words the dictionary does not paint an accurate picture of the language in its present state and is thus deficient.

Furthermore, many technical terms will never be used by the great majority of people and thus will never gain sufficient currency to be worthy of consideration for inclusion in a dictionary. That doesn’t make these terms wrong, they’re just not in common enough usage to be worth including.

English is a highly fluid, flexible and ever-changing language, and in practical terms it’s almost impossible to pin it down. It’s spoken as a first or second language in the UK, US, Canada, Australia, New Zealand, South Africa, India, Pakistan, Kenya, and many other places the world over. With so many different speakers with different dialects constantly influencing each other, and a fast-moving world where new terms are being coined all the time, and others being imported from other languages, then in practical terms it’s unreasonable to expect the language to remain static. If you don’t like it, tough!

A sad day…at least for me

On Sunday I decided to boot up my two-and-a-half year old Philips X58, which came originally with Windows Vista, but now dual-boots the trial version of Windows 7 and Ubuntu 9.10. It had just booted Windows up when, all of a sudden, it died. At first I thought maybe the power had gone, as the power supply was pretty worn out, but it had the battery in and as far as a I knew it had some charge in it. I tried pressing the power button, which did nothing, and that’s when I started worrying because even if power wasn’t reaching it from the power supply and the battery was discharged, there would be enough power left to get the battery warning light to flash, but nothing whatsoever was happening.

I noticed that the light on the power supply was flickering, rather than being steady, so I googled it, and apparently that normally means power is reaching the adapter, but can’t be passed on to the computer. A bit more research led me to believe there were several possibilities:

  1. The power supply was broken.
  2. The connection from the power socked on the computer to the motherboard was broken.
  3. The fuse in the power supply had blown.
  4. The motherboard had been fried by a power surge.

Ominously, there was a faint whiff of burning from inside the computer. I took the back off to have a look and couldn’t see anything obviously wrong with it, so I figured I had to eliminate the power supply as an option. So I ordered a new power supply for it.

This came yesterday, so I tried it with the laptop, but it was the same story – flickering green. So it looks like the motherboard on this machine is gone. Humph, just the Christmas present I want…

This is frustrating because the machine isn’t actually that old (half as old as my Dell Inspiron). I have also noticed one of the hinges has a crack in it. I’m looking into how much it might cost to repair it, but it’s a rather awkwardly-designed laptop and I’m really not convinced it’s going to be a worthwhile proposition repairing it. So it’s likely I’m going to have to replace it.

I was actually considering the possibility of buying a new one with Windows 7 anyway (even though I last bought one only in October, a Dell Mini Inspiron with Windows XP), so this does at least come as a valid excuse to buy a new machine. Despite my preference for Unix-like OS’s, I do still like having the option of using Windows around.

I’m thinking probably another Dell – despite what so many people seem to say about Dell, all my Dell’s have been great computers. My Inspiron I bought in 2004 is still going strong, and my Axim PDA works well too. The Mini Inspiron has also proven to be a good machine in the short time I’ve had it. My dad’s Dell desktop was hit by a power surge last year which damaged the motherboard but would still power on (it just had regular BSOD’s) so it was more resilient than my Philips, and it was easy to repair. I’ve found Dell’s to be simple, reliable, efficient machines, and that suits me fine. The only issue I’ve had with them is the crapware they install, and even Apple do that (cough…iWeb…cough).

Maybe I should branch out into getting a desktop as I’ve always had laptops in the past?

RATM for the Xmas number one!

Just wanted to voice my support for the campaign to get ‘Killing In The Name’ by Rage Against The Machine to the 2009 Christmas number one slot in the UK! I harbour no illusions about it changing the face of the music industry or getting The X Factor off our screens or anything like that, but it’ll be worth it just to piss off Simon Cowell! I already have the album, but I bought a copy for precisely that purpose!

If you’re in the UK and haven’t bought it yet, here’s a link to buy it on Amazon. At 29 pence, it’s an absolute steal!


It can be quite hard to tell whether your programming skills are up to scratch if you’re not doing so professionally or otherwise producing code that will be scrutinised by others, such as for an open-source project, or being taught in a classroom environment. You can’t help but think “Am I doing a good job?”, and it’s difficult to get outside validation.

So today, when I came across a blog post referring to the FizzBuzz Test I thought I’d have a go. I decided to use Python as that’s the language I know best, but I was a bit concerned about being a bit rusty as I haven’t done much Python coding for a while due to concentrating on other things. As it turns out I needn’t have worried. Here’s the code I came up with:

def fizzBuzz():
for i in range(1,101):
if i % 3 == 0 and i % 5 == 0:
print "FizzBuzz"
if i % 3 == 0:
print "Fizz"
elif i % 5 == 0:
print "Buzz"
print i


Not too shabby, and if this blog post is correct, it puts me ahead of a few people who are already working as full-time programmers! After doing that, I felt a bit better about my skills.

I wrote a Python script a few months back when at work we had to use one Excel spreadsheet among many, many people to update some details. If you’ve used Excel a lot, you may know that this can be a recipe for disaster – if you have sharing disabled, only one person can use it at once (and inevitably someone will go to lunch with it open), and if it’s enabled you run the risk of someone overwriting what you’ve just entered. In frustration I wrote the following Python script to allow me to update the file without going into it. Please note that it requires the xlrd and xlwt modules:

# Spreadsheet Updater
# Written to allow an Excel spreadsheet to be updated automatically without opening it manually

from Tkinter import *
import xlrd, xlwt, datetime, tkMessageBox

class Application(Frame):
"""GUI application that takes data to be input into a spreadsheet. """
def __init__(self, master):
""" Initialize Frame. """
Frame.__init__(self, master)

def create_widgets(self):
""" Create widgets to get information to enter into spreadsheet. """
# create instruction label
Label(self, text = "Enter details for a new entry in the current spreadsheet (saved as Current Month)").grid(row = 0, column = 0, columnspan = 4, sticky = W)

# Policy Number
Label(self, text = "Policy/Scheme Number").grid(row = 1, column = 0, sticky = W)
self.policy_no = Entry(self)
self.policy_no.grid(row = 1, column = 1, sticky = W)

# System
Label(self, text = "System Number").grid(row = 2, column = 0, sticky = W)
self.system = Entry(self)
self.system.grid(row = 2, column = 1, sticky = W)

# Log Ref
Label(self, text = "Log Number").grid(row = 3, column = 0, sticky = W)
self.log_ref = Entry(self)
self.log_ref.grid(row = 3, column = 1, sticky = W)

# Name
Label(self, text = "Name").grid(row = 4, column = 0, sticky = W)
self.ph_name = Entry(self)
self.ph_name.grid(row = 4, column = 1, sticky = W)

# Reason for Change
Label(self, text = "Justification for change").grid(row = 5, column = 0, sticky = W)
self.reason = Entry(self)
self.reason.grid(row = 5, column = 1, sticky = W)

# Incorrect Data
Label(self, text = "Incorrect Data").grid(row = 6, column = 0, sticky = W)
self.incorrect = Entry(self)
self.incorrect.grid(row = 6, column = 1, sticky = W)

# Correct Data
Label(self, text = "Correct Data").grid(row = 7, column = 0, sticky = W)
self.correct = Entry(self)
self.correct.grid(row = 7, column = 1, sticky = W)

# Spacer to separate Correct Data from Validated
Label(self, text = "").grid(row = 8, column = 0, sticky = W)

# Admin Validated
Label(self, text = "Have Admin validated change?").grid(row = 9, column = 0, sticky = W)
self.validated = StringVar()
admin_validate = ["Yes", "No"]
admin_column = 1
for entry in admin_validate:
Radiobutton(self, text = entry, variable = self.validated, value = entry).grid(row = 9, column = admin_column, sticky = W)
admin_column += 1

# Admin Informed
Label(self, text = "If not validated, Hand off to Admin method done?").grid(row = 10, column = 0, sticky = W)
self.informed = StringVar()
admin_inform = ["Yes", "No", "N/A"]
admin_inform_column = 1
for entry in admin_inform:
Radiobutton(self, text = entry, variable = self.informed, value = entry).grid(row = 10, column = admin_inform_column, sticky = W)
admin_inform_column += 1

# Admin details
Label(self, text = "Admin Details").grid(row = 11, column = 0, sticky = W)
self.admin_details = Entry(self)
self.admin_details.grid(row = 11, column = 1, sticky = W)

# Processor
Label(self, text = "Owner").grid(row = 12, column = 0, sticky = W)
self.processor = Entry(self)
self.processor.grid(row = 12, column = 1, sticky = W)

# Create a submit button
Button(self, text = "Click to submit", command = self.update_spreadsheet).grid(row = 13, column = 0, sticky = W)

def update_spreadsheet(self):
""" Create a Python list containing all the values from the application, plus the date, and append it to the spreadsheet. """
# get the date
raw_date = str(
year = raw_date[0:4]
month = raw_date[5:7]
day = raw_date[8:10]
date = str(day + "/" + month + "/" + year)

# get policy number
policy_no = self.policy_no.get()

# get system
system = self.system.get()

# get log ref
log_ref = self.log_ref.get()

# get name
ph_name = self.ph_name.get()

# get reason for change
reason = self.reason.get()

# get incorrect data
incorrect = self.incorrect.get()

# get correct data
correct = self.correct.get()

# get Admin Validated
validated = self.validated.get()

# get Admin Informed
informed = self.informed.get()

# get Admin details
admin_details = self.admin_details.get()

# get processor
processor = self.processor.get()

# create a Python list to hold the elements for adding to the form
new_entry = [date, policy_no, system, log_ref, ph_name, reason, incorrect, correct, validated, informed, admin_details, processor]

# If an element is empty, bring up a warning and break out
all_complete = True

for entry in new_entry:
if entry == "":
all_complete = False

if all_complete == True:

def write_to_spreadsheet(self, new_entry):
""" Method to import the contents of the spreadsheet to memory, then save it again, overwriting the original. """
# Import the spreadsheet as a Python list with a nested list for each individual row
book = xlrd.open_workbook("Current_Month.xls")
sheet = book.sheet_by_name("Sheet1")

entries = []

for i in range(50000):
# if the first cell of the current row is empty, break out of the loop
entry = []
for cell in sheet.row_values(i):



entries.append(new_entry) # Add the new entry to the spreadsheet

# Write the resulting list back to the spreadsheet
new_book = xlwt.Workbook(encoding="utf-8")
new_sheet = new_book.add_sheet("Sheet1", cell_overwrite_ok = True)
i = 0
for entry in entries:
j = 0
for item in entry:
new_sheet.write(i, j, item)
j += 1
i += 1"Current_Month.xls")

def confirm_message(self):
# Display a message confirming input processed
tkMessageBox.showinfo("Confirmed!", "New entry confirmed!")

def fail_message(self):
# Display a message warning input failed
tkMessageBox.showerror("Error!", "Error in writing to spreadsheet!")

def incomplete_message(self):
# Display a message if not all fields are completed
tkMessageBox.showwarning("Incomplete!", "Warning! Form not completed in full!")

# main
root = Tk()
root.title("Spreadsheet Updater")
app = Application(root)

Sadly, it doesn’t show up well in Blogger – the ends of some lines are chopped off. I was quite proud of it – it does the job I wrote it for, which is all I can ask, and it looks fairly elegant to me. Sadly, I wasn’t able to use it at work as it would have required everyone who needed to access the spreadsheet to have Python installed, and I was not able to get this (I won’t go into why, but I do understand the reasons I was given, and they were pretty good, and potentially I could have done the same thing in VBA, if I knew it, without needing to install any software).

This put a damper on what I would like to have done next – written a second script to export the contents of the Excel spreadsheet to an SQLite database, then created an amended version of the updater to update the database instead of the spreadsheet, then finally written another script to export the contents of the database to another spreadsheet, thus enabling us to use a database to record the data in the first place (a much better solution!) while still retaining the option of getting it in spreadsheet form if necessary.

So I had this code just lying around, without a use. I’ve therefore submitted it to Useless Python – as at right now it hasn’t been accepted yet, but hopefully it will be. I’m looking forward to people’s feedback about it – for that matter, please feel free to comment here! I would welcome any constructive feedback.

In the last couple of years I’ve learned HTML, and a fair bit of Python. Earlier this year I finished my CIW Foundation course, and then spent a couple of months studying C. Even though I kind of got stuck on pointers, I learned quite a bit, and now any programming language whose syntax is based on C is a lot easier.

I’m also beginning to understand why so many experienced programmers say that they can learn a new language in a week or so. I’m now studying JavaScript and much of the syntax is almost identical to that of C, so it’s very easy to pick up the core language itself. Also, a lot of concepts are common to virtually all programming languages – if/then statements, while and for loops are near-universal, for example, so you only have to learn them once.

I’ve now bought the books for the CIW Master Enterprise Developer certification, and it means I’m going to have to learn JavaScript, Perl, PHP and Java, as well as classic ASP and SQL. Assuming I complete it, I will have qualifications to validate my abilities, but for my money that’s not what makes a great programmer.

A great programmer is someone who writes code that does the job efficiently, but is also elegant and easy to understand. Qualifications can’t tell you how elegant or efficient your code is, nor how readable it is. And this is where it gets really hard to get validation – you can know your code works, but it’s very difficult to know if it’s good code if you don’t have a wealth of experience.

There’s one aspect of the open-source movement that’s just occurred to me would be of huge benefit in the future, but is not currently apparent.

If, like me, you’re an SF buff, you may be familiar with the idea of brain implants, also known as neural augmentation. For now it’s a pipe dream, but it certainly has a lot of potential – the idea of being able to do extremely complex calculations practically instantaneously, pull information at will from the Internet directly into your mind, have perfect recall – and this is just the start of the possibilities.

Now imagine this – what if someone else owned the rights to the software running on your brain implants? For instance, let’s say that hypothetically Microsoft produce an operating system for neural implants called Windows Neural, and it’s closed source. Can you really take the risk of running it in your implants if you don’t have the chance to inspect the source code yourself and verify that there’s no way for it to do anything you don’t like?

A neural implant of some kind might have the potential to do all sorts of things to you that you don’t want. For instance, say a future government wanted to be able to spy on citizens. What’s to stop them forcing Microsoft to include code within Windows Neural that allowed them to record people’s thoughts? Going from the sinister to the plain annoying, how about if companies that had advertising partnerships were able to manipulate you using code that ran on your implant – for instance a biscuit company might be able to give you a sudden craving for their brand of biscuits!

Google Wave invites

The other day I signed up for Google Wave, and I’ve now been sent a load of invites. I’ve tried to give them away on Twitter but no-one seems to be interested right now!

I’ve still got 13 left as at right now, so if you’d like one, please leave your email address in the comments below and I’ll send you one, subject to availability. Naturally, for your own sake I’d urge you to obscure it in some way, such as bob(AT)example(DOT)com instead of, to help stop it being harvested by spammers.

Here’s a little thought experiment for you. Microsoft has been a phenomenally successful company, with a market share of nearly 90% of the desktop computer operating system market, a not insignificant chunk of the server market, near-domination of the office suite market, and fingers in many other pies, including mobile phone operating systems, the console and portable music player markets. Its founder became obscenely rich, and the company has come to represent for many people the sheer potential to make money in the computer industry.

On the other hand, the company has also been no stranger to controversy. It has been subject to a number of investigations as a result of its near-monopolicy in the operating systems market, and has a reputation for anti-competitive practices. Also, it’s never been a company people like the way they like Apple or Google – mostly people are ambivalent about them. Windows has attracted a lot of criticism in the past for its vulnerability to malware when compared to other operating systems (some of which can be attributed to its greater market share, but certainly not all), and Windows Vista was widely regarded by many as a flop. Windows 7 may have marked a turnaround in the company’s fortunes, but at present it’s probably too early to say.

So, what if you had the chance to run it? Say Steve Ballmer threw one too many chairs across the room and had to be escorted from the building? What if they picked you to succeed him (let’s ignore the slight issue of most of us not being qualified to run a company that size, I know I’m not)? What changes would you make?

Here’s a few suggestions of my own:

Contribute to WINE development:

I’ll probably take a LOT of criticism for this, but stick with it, I promise, there is a logical reason for this!

The WINE project could be seen as a thorn in Microsoft’s side in that it’s trying to deprive Microsoft of sales of Windows by allowing other platforms to run Windows applications. That’s a very negative view, but it seems to be the view Microsoft hold at the moment. I’ve even heard rumours that Microsoft have used Windows Genuine Advantage to prevent Microsoft software working on WINE.

But, there’s an alternative viewpoint, and that’s this:

“Users like Microsoft’s software so much that they want to run it on other operating systems”

In other words, Microsoft need not invest their own time and monies in porting their software to another platform because someone else is prepared to create software that will allow it to run on this platform. So thanks to the work of the WINE developers, Microsoft can sell its own desktop applications to users of other operating systems, at no cost! Okay, that’s a VERY positive spin on it, but that doesn’t make it wrong.

After all, the margins are much higher on a copy of MS Office than on a copy of Windows, yet Office is probably a simpler product to create. So it makes sense to help people who want to run Office on Linux, for example. By shutting themselves out of that market, they may be shooting themselves in the foot because they are ceding that market to competitors such as OpenOffice and StarOffice.

Any contribution need not be terribly substantial – perhaps changing a few licensing terms and providing the developers with copies of documentation that isn’t normally provided to the public, thus eliminating the need for time-consuming reverse-engineering, would alone provide a massive boost to the project. More active participation, such as having Microsoft engineers contribute, bringing their knowledge to the project, would be of huge benefit.

Do more to assist the Mono project, including taking further steps to assuage the fears of free software advocates

The Mono project has never been far from controversy, ever since its inception. By reimplementing the .NET framework and the C# programming language, among others, it has allowed developers to use their existing skills with Windows for developing on other platforms. But there are a lot of concerns that Microsoft could one day launch a patent suit, preventing the use of software created using Mono.

In all honesty I don’t think there’s any one way that Microsoft could calm these fears, but there’s plenty of scope to improve the situation. They’ve already done quite a lot to help (the community promise, and open-sourcing the .NET Micro Framework), and just need to continue down the same path, open-sourcing as much as they can and ensuring that developers need not worry about the threat of patent infringement hangin over their heads.

Mono allows developers to use their existing skills in Windows development to create cross-platform applications quickly and easily. By ensuring the future health and wider adoption of Mono, Microsoft would be encouraging developers to use .NET technologies instead of competing cross-platform development frameworks such as Qt.

Make heavy use of open-source software

That is bound to be another controversial one, but it’s logical. Apple have shown that a hybrid approach, with some open-source code and some closed-source, can work well. It allows them to leverage the power of the open-source community and avoid reinventing the wheel.

For instance, what if Microsoft switched Internet Explorer to a Webkit base? Webkit is a mature, fast and stable open source technology, and also complies with current web standards. Doing so would greatly simplify the job of maintaining Internet Explorer, and would make web developer’s jobs easier too. You can make similar arguments in favour of GCC in the form of MinGW, and I’m sure plenty of other people can suggest other software that’s ripe for replacement by an open-source alternative.

Open-source software may not always have the polish of its closed-source counterparts, but there’s no denying it does sterling work behind the scenes. By leveraging its strengths, Microsoft could lighten their own workload while also contributing to the open-source community. Bugs and vulnerabilites would be fixed quicker, and we’d all get better quality software.

So, that’s my suggestions. What about you? If you took control of Microsoft, what changes would you make? Creative and inventive answers are great, but nothing too outlandish – remember, you would still be accountable to the board, so things like “give the shareholders their money back” would be turned down flat!