Thursday, October 29

First Impressions of Ubuntu 9.10, Karmic Koala

I have to admit, anticipation got the best of me. I figured the release candidate is about as good as it gets the night before the final one is released so I downloaded it last night and decided to do an installation of Netbook Remix on a Lenovo S10 netbook this morning.

Installation
First, when starting from a USB stick, you get the normal language choice that Ubuntu installers are familiar with. Next, there is a pulsing, white Ubuntu logo while Grub is starting up.

The installer interface through hard drive formatting is a similar experience to previous versions. However, immediately after formatting selection, you see a major difference in that we now get ext4 by default. It is nice that attention is paid to the filesystem in Linux, unlike some other "operating systems" that start with a W but will otherwise go nameless.

After this point, you get a very Windows-ish interface highlighting the features of the operating system in a slideshow-type presentation.

Now that the installation is over, the overall impression is that the new version has greatly improved performance. I have done these memory stick installations before and running the os from the stick has always seemed sluggish. Not so at all in this version.

First Boot
The increasing attention to the look and feel is apparent. You still get the pulsing white logo on black background. The grub splash screen is also very good, but I'm not sure I like it that much better than the Jaunty version.

The OS boots very quickly, even on this netbook. Once again, enhancements in performance on startup are very apparent. Netbook Remix has changed the interface slightly... I'm not sure I like it. Where the previous version gave you access to more on the initial view, the new version has a Files and Folders menu along the left side which opens to the familiar bookmarks. I personally dislike the hierarchical nature of this but it does make it more consistent with the menus from other versions of Ubuntu/Gnome.

All the hardware works out of the box on the S10 except for the wireless NIC, which is incredibly disappointing to me. I don't normally install the machine using a wired connection, but hooking it up to a wired connection and bringing up the driver manager allows me to install the proprietary drivers without an issue.

Another difference, no Pidgin. This is the first version of Ubuntu I've seen without GAIM/Pidgin. At first glance there seems to be little difference between the two, but one thing Empathy does that Pidgin doesn't is telephony. For instance, voice chat with google talk is a feature I've wanted for a long time.

All in all, so far so good for the new version of Ubuntu Netbook Remix. Now on to the desktop!

Saturday, October 17

Programmers should be expert typists

While there are few who would disagree with the statement, there are many programmers who are extremely poor typists. Why does it matter in an age of IDEs that complete code? The following are some consequences of bad typists as programmers. As a side note... for the duration of this article, please substitute keyboard for "generic mode of input". The point of the article is mastery for said mode of input, which for 99% of developers is a keyboard. The point is still the same, no matter how you get the code into the computer, you need to be an expert in using it.

1. Bad typists often take confusing shortcuts when naming variables

Most programmers are lazy by nature. For many of us, it's how we became interested in programming in the first place. However, when you add poor typing skills to a person who is already lazy, you end up with shortcuts that do not lend themselves to readability. The result is short variables and method names that are not descriptive of their purpose. The code may work, but it takes much longer for someone else to change it and sometimes the original programmer may not understand their own work.

2. Bad typists avoid refactoring

Sure, the most common refactoring can be done by the IDE, but truly reorganizing the code is much more laborious if one can't accomplish it quickly. Refactoring is one of the most important things we do. Most of the time, the first pass at solving a problem either doesn't work or works but is very poorly written. Additionally there are times we make it all the way through a piece of functionality only to find that the requirement has changed and the original approach resulted in code that is not optimal or just plain doesn't work. Refactoring is often a typing intensive task making the barrier of entry to a bad typist even higher.

3. Bad typists avoid deleting code

You've seen it before. Commented code everywhere. While I sometimes check in commented code because of a variety of reasons, I can't get over the feeling that I should take a few lashes for doing something so terrible. I hate commented code. I hate it like I hate System.out.println for logging statements. I have very little tolerance for commented code for a number of reasons too lengthy to go into here. To put it simply, if it's in a comment and it is not prose, it had better be a mistake or have a very good reason for being there. If you're going to comment it out, you might as well delete it. Source control keeps track of history, so you aren't losing anything. However, many poor typists comment code rather than deleting it because they simply don't want to go through the effort of re-typing it.

4. Bad typists spend more time typing and less time thinking

The answer is that a good typist spends more time thinking and less time going through the exercise of getting their code out of their head. Lets face it, if there was a faster way to get a thought from your brain to your IDE, you should use that. Until then, typing is how we do it. The faster you go through the mechanical process of putting it down the more time you have to actually think about what you are doing and if it is a good way to solve the problem you are attacking.

5. Bad typists write incoherent code

That is a pretty bold statement that I am making with little to no supporting evidence. However, I know that when I have to look down for a key I lose focus on what I was doing. Normally it's easy to regain because it doesn't take very long to find it, however, losing focus can mean losing flow if you have to do it too often. Coherent code comes from a single stream of thought. Thoughts should flow freely and not be interrupted by the fact that you need to know where a ? is. The less a programmer thinks about where the keys are, the less chance they have of breaking the flow of thought going into the code.

What's the answer?

1. Practice, practice, practice. Typing exercises help, as long as you do more than just letters(pipes, tildes, semi-colons and so on). Practicing with only the most common letters is better than nothing, but a programmer needs to be able to type quickly using the punctuations required by programming languages. If you have to look down on your keyboard for a semi-colon and you code in a language like Java, you will be looking down on almost every single line, slowing you down and interrupting your focus.

2. Get familiar with *A* keyboard. Changing keyboards all the time is obviously detrimental to your ability to type quickly. The constant state of flux means you never learn anything really well. To alleviate this problem I recently purchased a TypeMatrix keyboard because it's small, it fits in my laptop bag, and it has enhancements to make me faster. The fact that it's small enough to fit in my laptop bag means I don't have to use the laptop keyboard when I am away from home, thereby giving my fingers a comfortable environment all the time. This is not meant to be an endorsement of my keyboard... the jury is still out on if it will have the promised benefits, but over the first few days it is definitely making a case.

Think about your keyboard like a Marine thinks about his rifle. So I close with my rendition of the "Rifleman's Creed", altered to fit the topic.

This is my keyboard. There are many like it, but this one is mine. My keyboard is my code. I must master it as I master my code. My keyboard, without me, can write no code. Without my keyboard, I can write no code.

My keyboard is my livelihood, thus I will learn it as a brother. I will learn its weaknesses, its strengths, its parts, its accessories, and its features.

In order to be efficient in my tasks I must do these things. I will...

Thursday, October 15

TypeMatrix 2030: Initial Review

If you've never taken a look at a TypeMatrix keyboard, you should. Go ahead, http://www.typematrix.com, I'll wait.

I first stumbled onto this keyboard about two years ago but never felt like I wanted to pony up the cash to try one out. For some reason, I finally pulled the trigger last week. After a full day of coding, here are my initial thoughts

Before I get too far, I have to take issue with one thing:

<RANT>

Today, my much anticipated package arrived in what can barely be described as "one piece" thanks to that fine example of government service, the US Postal Service. Rain, snow, and heat may not stop them, but Columbus Day sure can send them for a loop. Their package tracking was down from the time the keyboard was shipped to the time I received it today. That didn't have a huge effect on the reality of things except that I couldn't verify if anything had actually been sent... and I couldn't perform my usual ritual of clicking refresh on the tracking page to see if my package had arrived somewhere new in the last 20 seconds. Luckily I talked to Henry on the phone and he assured me that it should be in the mail and would get here today.

Additionally, as I took my new toy out of its wrapper I was greeted with a sticky residue from what I can only guess was an exploded can of coke or some type of cola and a nice little note with the bold text "WE CARE" at the top. To paraphrase the long note, it basically says, "We know it looks like this package has been a seat cushion for Newman from Seinfeld and we're really sorry. You are a nice person, you don't deserve this, but we ship a LOT of mail and things like this happen. If it's broken... sorry, we REALLY apologize... we aren't going to do anything for you even though we admit that the condition it is in is our fault but we are offering you a really sincere apology. Again, we really do care and we apologize that your package looks like crap. Have a nice day and thank you for supporting our antiquated service whether you actually use us or not."

There is really only one way to tell me that you care and that is, don't crush my package while you are delivering it to me. I don't care what your volume of traffic is, if you can't get me a package in good condition, you have the choice of replacing it or stop delivering packages and stick to snail mail. By the way, I'm missing a whole week of mail that is lost somewhere in your system too... thanks a lot. Luckily for me I've relieved you of your responsibility for anything really important because I get it online now, so you can rip the 75 credit card offers to shreds for all I care.
</RANT>

Ok, with that out of the way, on to the keyboard. Even with the damage to the packaging, the keyboard itself seems no worse for the wear. It was nicely packed and the keyboard itself seems very sturdy. And no, you don't get pictures. I'm not Jeff Atwood and I don't really want to deal with any licensing issues I would incur by stealing graphics from the TypeMatrix website. That's why I included the link at the beginning.

First impression, beyond the fact that this keyboard is probably sturdy enough to have survived it's trip without the packaging, is that it is smaller than I had imagined. The keyboard on my Thinkpad is bigger as far as the actual key space goes. I also ordered a black skin to go over it which has some nice additional features in that it marks the boundaries of the key spaces. I thought that would be a lot more beneficial than it is... more on that later.

So, I quickly unplugged the gigantic Natural keyboard on my desk, slipped the skin over the TypeMatrix and plugged it into my Thinkpad running Ubuntu 9.04. As I have come to expect, everything worked right away. The only minor point of concern was the fact that when I hit the eject button on the right side of the keyboard, it actually gives me a caps lock. I don't really care that it does that and I ordered the version with blank keys so I have no idea what that key is actually supposed to do. All I know is, it's a caps lock and I'm fine with that since I never use the keyboard to eject a disc anyway. Keys of note are the switcher key, the cut/copy/paste function keys, and the dvorak switch. On the switcher key, it does the equivalent of alt+tab in 1 key that doesn't force you to contort your hands. If you've been keyboard centric for a long time, it's probably not a big deal, but I find it actually very nice to be able to bring up the switcher like this even though I will likely remap it to bring up the compiz cover switcher and continue to use alt+tab for the default switcher.

Getting used to typing on it has been a little more difficult than expected. I go between keyboards a lot and purchasing the TypeMatrix is an attempt to quit doing that. However, after a day of typing on it I am probably about 5-10 wpm slower than with a conventional keyboard. However, I fully expect to exceed that as I get more accustomed to this one. I have two main issues. The two letter keys you stretch the greatest distance on are b and y. Because most keyboards are offset, the y and the b are a huge stretch and I find myself overreaching both unless I remain cognizant of what I am doing. When I overreach the y I end up on the delete key and overreaching the b hits the enter key. There have been quite a few errant IMs sent today because I accidentally hit enter when I was trying to hit b. I thought the bead on the keys would prevent me from doing that by giving me a frame of reference, but I am so far over that I go right over it. That said, I find that I am doing it less and less and expect that it won't happen much more after tomorrow.

What I couldn't understand in the marketing of this is, how can this little keyboard can relieve wrist pain? Isn't that what the split keyboards are about? What I discovered after about 20 minutes of using this is, I have developed some bad typing habits that my natural keyboard has been enabling. If you do not hold your hands correctly with this, you get pain. Wrists, arms, everything. What I discovered is that I have been resting my hands on their sides and typing with my hands nearly sideways. When I adjusted my hands so they were flat on the keyboard, all the pain went away and my speed and accuracy improved dramatically. So, if you are the kind of golfer who purchases custom clubs that correct deficiencies in your swing, this probably isn't the keyboard for you. However, if you are the type who would rather use blades, steel shafts, and develop your swing, then Mr Jones, this is the keyboard for you.

So I'm one day in and so far this keyboard has lived up to expectation. I am excited to take it on it's first trip tomorrow to see how it holds up to being tossed in my laptop bag. I'm sure there will be updates to this down the road. Maybe I'll get adventurous and purchase the Dvorak skin at some point but that's a crossroads I've decided I don't want to come to for a while. For now, this little guy is about all the adventure I have time for.