Three Good Things Microsoft Did Lately

Even if the following were motivated by business interests, they are still good things:

  1. Lowered Windows Vista’s price (I already switched to Ubuntu Linux)
  2. Opened “high volume” Microsoft software specifications (It’s still not a good idea to try and implement a “perfect” Office clone)
  3. Decided that Internet Explorer 8 will be standards compliant by default (I switched to Firefox a long time ago, when I was still using Windows)

Windows Vista Capable – _They_ Should Have Known Better

A class-action suit against Microsoft’s “Vista Capable” stickers is scheduled to go to trial in October. Microsoft decided to lower the bar on what would be considered a Windows Vista capable computer, and so if you bought a computer that had one of these stickers on it you would basically have a computer that wouldn’t really run Windows Vista in a compelling manner.

Additionally, during Windows Vista’s launch, many drivers were missing. Even drivers for things like top-of-the-line-best-selling printers, not to mention hardware that is not so mainstream. Even today Windows Vista lacks many drivers. NY Times brings the story of three people who should have known better but upgraded to Windows Vista and instantly became disappointment (free registration required).

Enabling Shared Folders In VMWare Player Manually

For some strange reason, even after installing VMWare Tools on the Windows guest VM, I couldn’t set up the Shared Folders feature on my Linux host. The reason seems stupid: it just won’t let me add new shared folders to the empty list. Eventually I edited the VM’s vmx file and added the shared folders manually. Here’s how:
First, you add the following line that says how many shared folders you have:

sharedFolder.maxNum = “2”

Next, for each shared folder, starting with 0 (zero) you add a few lines describing it. Here’s how to add two different shared folders:

sharedFolder0.present = “TRUE”
sharedFolder0.enabled = “TRUE”
sharedFolder0.readAccess = “TRUE”
sharedFolder0.writeAccess = “FALSE”
sharedFolder0.hostPath = “/home/gnobal/”
sharedFolder0.guestName = “gnobal”
sharedFolder0.expiration = “never”

sharedFolder1.present = “TRUE”
sharedFolder1.enabled = “TRUE”
sharedFolder1.readAccess = “TRUE”
sharedFolder1.writeAccess = “FALSE”
sharedFolder1.hostPath = “/tmp”
sharedFolder1.guestName = “tmp”
sharedFolder1.expiration = “never”

The properties of each shared folder are self-descriptive, so I won’t go over each one.

Obtaining VMWare Tools And Installing On A Windows Guest VM

If you have a guest Windows VM inside a Linux host, you really want to install VMWare Tools inside the guest. It makes the VM perform better and allows you to do some things that you can’t if VMWare Tools is not installed. Two things that I found useful are that the mouse can move freely in and out of the VM and screen resolution can be changed to anything I want.

For some reason my Windows VM didn’t have VMWare Tools installed. I don’t know if it’s because of a choice I made during the creation of the VM in VMWare Converter or something else, but apparently downloading a copy of VMWare Tools isn’t so trivial. Luckily, Brandon Hutchinson explains in length how to do it (and thank you for that, Brandon.)

Once I had the copy of VMWare Tools as the file windows.iso, I still needed to get it installed on the guest VM. Eventually I decided to do it the dumb (yet easy) way. I burnt the CD on the host and since the CD drive is shared inside the VM, I could then install it from there.

Ubuntu Linux – Continuing The Switch

Yesterday I finally had the time to continue moving to my new computer and the Ubuntu Linux installation on it. It was easier than I expected. I decided to put my old Windows installation in a VM and use it on the new Linux box, instead of burning all my data on DVDs and moving it bit by bit. I decided to go with a VMWare based solution because of two reasons:

  1. VMWare Player appeared on the list of software in the Add/Remove manager in Ubuntu. I thought this meant I can install it from there, but I was wrong. I had to go to VMWare’s website and download a command line based installation.
  2. VMWare Converter, which turned out to be a great tool (more about this in the next paragraph.)

VMWare Converter can take a physical machine and make a VM out of it that you can run inside VMWare Player. That’s exactly what I did. My entire Windows installation, complete with all the programs and user data, became a 10.5GB VM in 7 separate files, which I copied to my home directory on the Linux machine. There was a scary moment when I found out I can’t install VMWare Player from the Add/Remove manager, but the command line installation went smoothly (albeit with many questions I wasn’t sure about the answers to, but chose the default, which turned out fine.)

Another scary moment was when my (legal) Windows XP installation told me, while running inside the VM, that I need to activate the copy of Windows because the hardware changed. I was afraid it would lock up, but it managed to activate itself over the Internet without any trouble. An amusing thing is that Windows works faster in a VM inside the new computer than it did installed natively on the old one. It’s really an old computer. One thing I didn’t manage to set up is shared folders between the VM and the Linux host. It’s supposed to be easy, but for some reason I couldn’t get it to work.

I got Flash to work on Firefox as well. I was afraid I’d have to install Firefox 32 bit just to get Flash to work (like many websites suggest.) Luckily I continued searching and as it turns out (from this bug report) in Ubuntu Linux 7.10 64 bit, if you ever get this message after installing Flash but it still doesn’t work:

flashplugin-nonfree already installed

Then all you have to do is type the following two commands in the command line:

sudo apt-get remove –purge flashplugin-nonfree
sudo apt-get install flashplugin-nonfree

So now my Linux installation is my main computer. I still have to:

  • Transfer all the user data from the Windows VM (emails, pictures, documents.)
  • Set up MySQL server and Apache so that I can have a development environment for the website (without such an environment I can’t completely dump Windows.)
  • Move the hard drive from my Windows machine to the Linux machine. This would be the final step, after which I’m putting an old hard drive in the old computer, installing Hebrew Windows and giving the computer to my mom.
  • Make sure I have a decent backup solution that wouldn’t suck like my current burn-the-data-to-DVDs-every-few-months solution

Cold Boot Attacks On Encryption Keys

When I first heard about cold boot attacks I thought this was another disconnected-from-reality-cannot-be-used-in-real-life kind of research, but after watching the video on the Princeton University website I realized that this is a real problem. Namely, unlike common perception, computer memory takes time to fade out after you turn the computer off. So much time, in fact, that you can read it and extract encryption keys from it to later unlock encrypted data. A very interesting research.

Idea: RSS Similar Item Group View

One thing about reading technology news from multiple sources is the massive repeat of items in different feeds. What I would like my RSS reader (currently Google Reader) to do is group the similar items under the same category.

For example, in my Google Reader account I have a gadgets folder that contains both feeds from Gizmodo and Engadget. I never manage to follow even one of those feeds, but sometimes I check them out to see what’s new in the gadget world. Each of these competing blogs has its own merits that make me keep it in my RSS reading list. However, I would like to see similar news items grouped into one, much like what Google News does with news items.

I went to offer this feature to Google and naturally I’m not the first person to do that. The funny thing is that the guy who suggested the feature even used the Gizmodo/Engadget example himself.

31st Birthday Pictures From Work

I spent most of my 31st birthday at work. The highlight of that work day was the birthday “silver grapefruit” organized by a coworker for me. With 31 candles on it (and another one in my hand for next year) we went outside in the cold, windy weather.

Lighting the birthday candles

Lighting the birthday candles

About to blow out the candles

About to blow out the candles

Blowing out the birthday candles

Blowing out the birthday candles

The silver birthday grapefruit

The silver birthday grapefruit

By the way, this is the first time ever pictures of me appear on the blog. About time, I would say.

My Current Two Principles Of Software Development

What makes good software? I always felt this question was too big for me to answer, never seeing myself as astute in the software development business as the big guns like Herb Sutter, Raymond Chen and the likes. However, this is a blog and as blogs go you can post something today and say the opposite tomorrow. Still, I couldn’t resist putting the word “current” in this post’s headline to emphasize that my opinion may change in the future.

Over the years my view of software development changed a lot. During my studies I was an “enthusiastic purist” developer – the kind that will always look for the newest paradigms and techniques, trying to follow and use them in my own code. That was the enthusiastic part. The purist part of me insisted on following the good practices I learned along the way. There are very few good practices that are true no-matter-what, the most important one being DRY – Don’t Repeat Yourself.

While working as a software developer I noticed that, no matter the company I worked for, the level of acquaintance of existing programmers with these new techniques was very low. They may have heard of some, but no one would dare use them. Most developers stick to what they already know. The effect of this being that even if you know how to write something in a “new” way, you have to educate the other developers and convince them that there is an actual benefit to using your way. This is a good thing because it works like a peer review process, but with the natural resistance to change it becomes very hard to actually use new techniques in an existing company.

Over time I learned that what makes software successful is happy users. No big surprise there, right? But the reality of things is that making software which users will like on time usually comes on the expense of the way the software is implemented. I’m not the first to say that software development is about making compromises, but if you’re an “enthusiastic purist” that realization can be a little depressing. I had to learn to compromise in order to deliver software on time. I still think this is a little unfortunate because in every piece of software there’s room for improvements – in design, in speed, in beauty – improvements that probably will never be made.

In short, I learned that

Software should:

  1. work well for the user, and
  2. be implemented in a way that allows known future developments

These are my (current) two principles of software development. I consider their weight equal, but if these two principles still contradict each other – the first one should be preferred (or the deadline should be postponed once again.) Otherwise, you will not have users left to use your future developments. The second principle contains in it as many good practices as needed, but unfortunately not more.

I would have loved to add another principle, namely “be well implemented” or “be well designed.” However, in the real world, where companies develop products until they’re most profitable (and not a second more), we don’t have the luxury of having another principle like that. Working on the first two takes most of our time.