Monday, December 28

Really Verizon?

I am nearing last straw territory with these guys. As you may or may not already know, Verizon has entered into a deal with Microsoft to use Bing as the search provider. That's year old news at this point. Well, that deal came to fruition recently for Blackberry owners as the Bing mobile search application was pushed out to BB users in the last week or so. If you don't see it yet, do a reset on your phone and it should pop up.

Back when the deal actually was news, I called Verizon and notified them that if Bing was the choice I didn't want their service anymore. The support representative I talked to assured me that I would continue to be able to use Google just as I always have, but that Bing would be their preferred search provider. That information was not accurate. I can no longer use Google as I always have... because the search application was removed during the push.

That's right. I didn't get another competing option with this deal. What I got was clobbered. It's one thing to push an app I don't want to my phone. It's quite another thing to remove an app I already have and use regularly. That is what really ticks me off and what has me ready to cancel my Verizon service again.

If you have the same issue, you can get Google back. You simply have to download it again and re-install. The point is, I shouldn't have to use the data and I shouldn't have to deal with this. If you don't like it either, I suggest flooding the customer service lines at Verizon and lodging complaints. You can either do that or leave the service, which I would have done long ago if their coverage wasn't so good. Coverage or not, this whole annoyance coupled with the Nexus One around the corner makes me more and more likely to go find a GSM provider.

Backgrounds in Gnome 2.28

One of the neat things about Gnome 2.28 is the background slideshow.  I know, it's cheesy, but it's the first time I can remember something like this being baked into a display manager.

Of course, one of the things you'll want to do is create these slideshows, but the process can be painstakingly tedious.  Reasons 1-34786 are, you have to edit XML.  It's ugly, it's verbose, but it's pretty good for describing data... and making you want to throw up if you have to edit it.

However, due to the awesomeness of bash shell, I  have created a small shell script that will build this xml file from the contents of a directory.  The usage is simple, and easy to extend for your own use.  Currently it accepts jpg and png files, indicated by the optional arguments j and p.  It also accepts one argument for the directory where your images are located.   The default values are jpg and the current directory.

Here is the script.


#!/bin/sh
SHOW_DURATION=100
TRANSITION_DURATION=5.0

format=jpg
source_dir=$(pwd)

while getopts jph fmt
do
  case $fmt in
  j) format=jpg;;
  p) format=png;;
  h) echo "Usage: $0 [jph] [image directory]";exit 0;
  esac
done

shift $(($OPTIND - 1))
if [ -n "$*" ]; then
  source_dir=$*
fi


echo "" > background.xml
echo "20090804000000" >> background.xml
for file in $( ls ${source_dir}/*.${format} ); do
   if [ -n "${first}" ]; then
        echo "${file}
" >> background.xml
   else
        first=$file
   fi
   echo "${SHOW_DURATION}${file}" >> background.xml
   echo "${TRANSITION_DURATION}${file}" >> background.xml
done
echo "${first}
" >> background.xml
echo "" >> background.xml

Thursday, December 10

Another guy who just doesn't get it

http://blogs.techrepublic.com.com/hiner/?p=3372

Seriously...how many shills do we have to go through before we get down to the point that declaring winners and losers is bad for everyone?

I disagree with almost every point this guy has.  How does a man become editor in cheif of a technical publication and write such uneducated drivel.  I don't know if he actually put thought into this or he's still running his copy of Red Hat from 1998... but his points are just wrong.

1. "It's too hard to set up a camera/printer/name etc" - I run Ubuntu 9.10... here's what I do.  I take one end of the USB cord, I plug it into my camera.  I take the other end and plug it into the computer.  Then I download photos.  For printers, I plug in the network cable, turn on the printer, tell the printer manager to go find me printers, select the printer, start printing.

By contrast, with Windows I have to make sure I have the right flavor of the current operating system(home, pro, ultra home, ultra pro, superduper pro, ultimate, super ultimate, etc), install the right drivers, restart the computer and then, maybe if the printer I bought doesn't require service pack 23, I might be able to use my printer.  Along with the driver install, I also got 35 days of free crapware that clogs up my machine and makes it go even slower than it already does even though I have a dual core processor that is more powerful than a gamers's machine from 2 years ago.

Is that really easier or just what you are used to?

2. "Divide and fail" - How many flavors of Vista are there?  Windows 7 Starter addition anyone?  Diversity is a good thing.

3. "Not enough innovation" - Sure, you say divide and fail, but then you complain about the amount of innovation.  That's the whole point of separate streams of work.  Different teams have different approaches to the same problem.  Rather than fight over it, they just do it and see who's is better.  Sometimes they merge back(See compiz and beryl), sometimes they don't... but they often share ideas and innovation occurs.  KDE's new desktop has a lot of different ideas... I'm not sure they are all good, but they are different.

And "innovative" doesn't win market share.  Windows still runs on the archaic FAT or NTFS file systems...  a hardware accellerated desktop is not "innovation"... and media center PC?  Ever heard of MythTV?

4.  This is probably the only point that actually makes sense.  Businesses do want someone to blame when something goes wrong and IT pros know the phrase, "No one was ever fired for hiring IBM" all too well.  But IBM's Rational stack BLOWS and everything else they do runs Linux.

To add to this guy's utterly retarded commentary, Linux desktops may have tailed off in their growth... according to his graph, but the point is they are growing.  Ubuntu was succeeding before netbooks came around.  He is taking a deconstructionist approach to infer that Linux is not a worthwhile desktop and, while it may not have consumed a large amount of market share in the last year, it is far from "rejected".  The very fact that Mac OSX, Android, ChromeOS, HP's Mini One, and Dell choosing Netbook Remix and Moblin for their netbook desktops shows that, in fact, corporate acceptance of Linux is growing.  At one time people said Firefox would never beat IE.  As of this year, Firefox is the number 1 web browser.  The year of Linux is coming, but it won't happen overnight.  Eventually people will either see the merits of a free and open operating system or Microsoft will admit that their kernel sucks and they are not an operating system company, but a gui company... as Mac did.

In fact, one could argue that there are 0 merits to the Windows desktop that can actually be attributed to Microsoft.  There is one thing and, in my opinion, only one thing that prevents adoption of Ubuntu/Red Hat/SUSE on the desktop and that is FUD.  The kind of misrepresentative FUD that Mr. Hiner is writing here is just the kind of thing that keeps the average user too scared to try something new and shoveling money at Microsoft for their average software.

Thursday, November 5

TypeMatrix 2030: Two weeks later

I promised a follow up after my initial review on the TypeMatrix 2030 and here it is.

First the bad. I am still not back up to my previous typing speed. I was previously in the 80-90 wpm range and now I'm stuck around the 50-60 range. It's not terrible, but it's not fast.

I still overshoot the b and y keys at times, but it occurs less often than my initial difficulty. Now my biggest problem is the symbols and the right shift key. I have trained myself to be careful reaching to the right, to make sure I hit shift instead of return. Because of this I have to force myself to reach directly right instead of going down and right where I end up on the Ctrl key.

I am also having issues with the difference in location of the |, /, \, and -. Pipe is above the enter key on most keyboards and, as a Linux user and programmer I tend to use that key a lot. As for the forward and backslash it's not so much the difference in placement as the fact that they are right next to each other. I think that's just a coordination thing that will work itself out.

The last key I have had trouble with but I think I am over now is the CAPS LOCK. While incredibly annoying for most typists, it's somewhat of a convention to use a lot of capitals when writing SQL and holding down the shift is a pain when typing more than 4 or 5 caps at a time. This key is on the entirely different side of the keyboard, all the way to the right instead of all the way to the left. If I was to redesign this keyboard, I would have put all the special keys on the left rather than the right since there is already an extra column of keys beyond the semi-colon. That would make this keyboard perfectly balanced and make some keys, like caps lock, easier to remember.

Now the good. For all that bad, the modularization of keys is awesome enough to make up for it. By putting all they navigation keys in the bottom right corner, I don't need to move my hand from top to bottom in order to go from the arrows to home/end or pg up/down. I still have to look for the keys at times, but it's worth the fact that once I am oriented to which is which, I can fly around a text file with those keys.

A key that I have grown to love is the window switcher key, although I wish it would send it's own key code rather than alt+tab. I realize that this prevents users from having to set up a key binding, but I would like alt+tab to open a different switcher. In any case, it works great to toggle the ring switcher in Compiz. I think if I had to use the hold-down functionality it would be brutal, but it works perfect for my needs when using compiz. I've also remapped the show desktop key to bring up my desktop wall. That works great as well.

Another, sort of sidebar. This keyboard is STURDY. I can put it in my backpack with my laptop without protection and carry it around without an issue. Normally I wouldn't dream of doing something like that with a 100 dollar keyboard, but this thing can take it. One thing I would like to see... if the TypeMatrix guys are listening, is to come up with a solution for laptops so I can set this keyboard inside the housing while I type without it hitting they keys on the internal keyboard. I really need that if I'm going to get the benefit of my laptop, otherwise I might as well just have a desktop.

Most importantly, the promised finger travel savings makes a difference at the end of the day. I love the key placement for the backspace and enter keys even if I sometimes hit them by accident.

I will give another update in a few weeks.

Tuesday, November 3

Linux Deleted My Work!!

Ok, so the title is a shameless attention grabber. Linux is not alive, even though there are some who believe Linus Torvalds is trying to create AI life. We probably many reasons we speak anthropomorphically about our computers, but a main one is to cover the fact that WE screwed something up. Either by failure to recognize a problem, failure to understand, or simple brain failure, it is nearly always human error when something goes wrong on a computer... at least if you are running a real operating system. If you are running Windows then it's 100% possible that it's the computer's fault. ;)

The real title of this post should be something more like "Why you need a backup system" or, "How I idiotically failed to back up my files before wiping my hard drive while installing the new version of Ubuntu"... but had I done so you probably wouldn't be reading this right now. The fact is, I know better. I've been an IT professional for nearly 10 years now. I crossed the line from casual user to computer nerd before I hit puberty. These are not mistakes people like me are supposed to make. However, sure enough, last night I was confused by the fact that I couldn't find some work I was looking for when I had one of those moments of complete clarity. I was watching TV, carrying on a conversation about Windows 7, and selecting files to back up off my hard drive before my eagerly anticipated upgrade to Ubuntu 9.10. I remember specifically looking at a directory(poorly named "sandbox" ... first mistake) while thinking to myself, "I don't need that." I was wrong.

The problem was not the operating system, it wasn't a problem with backup software or anything else. It was a problem between keyboard and chair ... an ID-10-T error ... I was my own UserException. The truly unfortunate coincidence is, I have been putting off building a backup system because I said to myself, "It's not that important."

It is important. I was able to recover my mistake in about 3 hours, but there are some things we store on our computers that can never be recovered. Sound overly dramatic? Consider what would happen if your house burned to the ground. What would you lose? Financial statements, bank records, even credit card receipts are all recoverable somewhere. What about the pictures of your kids... your grandkids... your honeymoon or wedding? Those are moments in time that you can never recreate, and if they are gone, they are just gone. Hard copies are not necessarily a fool-proof backup. Physical media has the same problem. Even in a fire safe, it is unlikely a CD or DVD will survive the type of heat you would have in a fire that burns your house to the ground.

As more and more of our lives go on our computers, appropriate measures should be taken to ensure the safety of our data... and the more important your data is to you, the more you should consider backups as one of the most important things you can add to your home computing environment.

This blog is mainly about problems in technology and how to handle them. Over the next few weeks I plan to write about the steps I am taking to preserve my data. I am planning to write on the following topics:

1. Disk is cheap - Backup methods and retention period
2. Some things change, some things stay the same - Selection of backup method based upon media type
3. Fire, EMP, Gamma ray burst, Rapture - Protecting backups
4. The way it should be done - My system

In case you couldn't tell, most of the titles are slightly tongue-in-cheek, I am not arrogant enough to believe that I have all the answers to this problem. My point is, do something and get moving. You never know when something bad is going to happen and you'll wish you had given this a higher priority.

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.

Monday, August 10

My Mini: possibly one of my most useful tools

Its small, it's got tons of battery life, it's got a webcam and mic built in. There's a whole lot to like about my Mini 9 from Dell running Ubuntu 9.04. There are some drawbacks, but overall, they are incredibly handy little tools. Lets take a little more in depth look at what I like and don't like.

The inspiration for this post came from exactly what I'm doing right now... chasing my 10 month old around the house to prevent him from doing any major damage to himself or the apartment. He's just started walking so he's even more mobile than he was even a week ago, so the ability to go after him is premium. I found the urge to look something up on the internet too much to resist, so I unplugged my Mini from the desk and, whenever he stopped to play with something, I sat down and did what I had to do. It's small enough to carry around without really thinking about it. It's cheap enough that if I had to drop it in a hurry, I could replace it and the SSD would prevent any data loss(although there's not much on here to begin with). Additionally, it's size makes it easy to set it down on just about anything and resume whatever I was previously doing.

To demonstrate how difficult it can be to remain connected while chasing a mobile baby around, I'll log each time I have to get up with a * and each time I have to change location with a @. Keep in mind, it's not a very big apartment.

In the time it took me to type this much, I've already had to get up
*
three times(not counting that one) to either take something away from him or stop him from injuring himself.
*
Should have been paying attention there... he just smashed himself in the face with
*
... ok, first one was with the back end of a dump truck, the second was a wall
*@
... yeah, in retrospect, giving him back the dump truck was a bad idea... changing rooms... and diapers.
@*@*
So... we changed rooms, but he went back to the last room for the truck. As you can see, it requires a lot of mobility to deal with that. The mini is a perfect fit for that job.

Second are the tools it comes with. Since I work from home a lot, the webcam is a fabulous piece of equipment to keep me connected to others on my team. I use tokbox a lot for that... and the Mini works flawlessly with it(better than Skype that wouldn't pick up my internal mic and continuously froze). Keep in mind, I've got Linux on here, so working out of the box is not always assumed.

Third, I like to listen to streamed music from services like Pandora. Unfortunately, in many laptops you get a hum from internal devices like cd drives and hard drives. Not so in the Mini. No moving parts equals no hum. The SD slot also provides some nice additional disk space.

Speaking of the SD card, about an hour went by between that sentence and this one. My wife wanted to build some photo invitations for our son's first birthday. The SD slot makes it easy to pop the SD card out of the camera and into the machine. The processor isn't going to handle any advanced photo manipulation, but for doing basic resizing, cropping, and such, it's more than serviceable.

Portability outside the house is a big deal as well. This is, of course, what netbooks are made for, so it performs very well there. My wife will often slip it in her purse or a diaper bag when she's headed somewhere and might want to pick up a wireless signal. Likewise, I pop it in my laptop bag alongside my full size notebook and, with almost no additional weight, I have my very useful, ultra-portable tool with me at all times.

When you are back home, if you need a more full screen interface, plugging it into a monitor, keyboard, and mouse is always an option as well. I plug it into my 24" monitor at times and it scales the desktop just fine and operate like it's a regular, albeit somewhat slow, regular-size computer.

There's miscellaneous advantages as well. For instance, I needed a tuner for my guitar the other day. Normally I have this type of equipment laying around but I didn't at the time. However, due to the beauty of apt-get and open source, I installed Lingot, which worked right out of the box with my internal mic, tuned up my guitar, and then used the mini to find some chord sheets.

Before you go off and buy one, there are some drawbacks, some of them fairly serious, depending on what you want to use it for. First is the processor. If you're a developer, you're going to be frustrated if you purchase one of these and expect to load up Eclipse and crank out some code. It's an Atom processor, it was made to conserve energy while providing enough horsepower for a serviceable interface. I treat it as an internet appliance, video conference machine, and music box and it works great. The key is to know where it fits, give it too much and you won't be satisfied.

Second, and probably most significant to me, is the keyboard. Regular typing is not much of a problem. I can see where someone with gigantic hands might find it cramped, but I don't have trouble until I need to use quotes or if I'm using the command line. The command line is an understandable trouble. Most users go their entire computing lives without knowing what a pipe is let alone use one. So conserving space by making it a function key, while an annoyance to me, makes perfect sense. What I don't get is, why is the stupid quote key between the left arrow key and the menu key??!!! I spend half my time correcting issues with hitting enter instead of hitting a single quote. You can forget instant messaging... I send people half finished thoughts all the time and then have to apologize for it. I suppose if you aren't a touch typist it doesn't matter, but it is my number one annoyance with this machine by far. Luckily, this has been corrected in some of the larger models but it's not an issue with other netbooks at all.

Third, the touchpad is fairly large, which is not terrible except you can end up hitting it accidentally while typing. To get around this, I installed touchfreeze, which turns off the touchpad while typing. After a little playing with the settings I have been able to get rid of mistakes due to accidentally hitting the touchpad almost entirely.

Before I wrap things up, there is one more thing I wanted to hit on and that is battery life. This machine has been running on battery for nearly 3 hours and still has 50% charge left. I've had my music player running, my wife spent about 20 minutes pulling pictures up off an SD card, so it's not like the computer has just been sitting here. That is, in my mind, very good and something you would expect from a machine that is meant to be ultra-portable.

All things considered, I am extremely happy with my mini and find it an incredibly useful tool as long as you understand it's boundaries. Newer versions pack larger screens, better keyboard layouts, and better battery life and the prices continue to go down. If you've been sitting on the fence for a netbook, I suggest getting one. I can't guarantee how useful it will be running Windows, but I know my Dell Mini 9 running Ubuntu with the Netbook Remix interface has been insanely useful and versatile for me.

Wednesday, July 1

5 Reasons to Insulate Yourself from Java Dates

Java's Date implementation sucks. That's no secret to anyone. Calendar sucks just as much... also no secret. They are difficult to work with and sometimes they make absolutely no sense at all. For instance, why are all the seemingly useful methods in java.util.Date deprecated? What is the real point of java.sql.Date, it provides little value and has all the shortcomings of java.util.Date. Then there's Calendar. A land where something like JANUARY=0 and SUNDAY=1 is perfectly logical. If you want to set a Calendar date, there's a nice method that does this, accepting 3 parameters, year, month, and day. To the uninitiated, should be perfectly reasonable to say:

cal.set(2009,1,1);

The only problem is, it is completely counter-intuitive to the way normal people understand date notation. The result is that a completely reasonable statement ends up setting the incorrect month. Additionally, the numbering method is inconsistent when using days of the week. The constant for Sunday is 1 instead of 0. Lets say you have all that straight, Calendar has one more counter-intuitive "feature". In the normal world, knowing that day values start with 1, what would you expect from the following code?

Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, 0);
System.out.println(cal.getTime());
cal.set(Calendar.DAY_OF_WEEK, 0);
System.out.println(cal.getTime());


I would personally expect an IndexOutOfBoundsException since days are supposed to start with 1. Not so. Calendar KNOWS you meant to subtract a day, so it nicely rolls the date for you. Which means you will end up with a day you probably didn't intend AND you could also end up with the wrong month and year. Nice.

Those are a few of many complaints about Java Date/Calendar. Do a Google search on "java date suck" and you'll get a longer list than you want to read, but I think I've made my point. At some point, whether via OpenJDK or by the JSR process or finally deciding to improve their API(not likely), this general crappyness is going to have to change.

The end result is a lot of ugly, non-OO, util code meant to overcome Date/Calendar's shortcomings. If you've been coding in Java for long enough, you've probably seen something like:

Date dt = DateUtil.newDate("01-01-2009");

It's better than doing the dance with Calendar to set the date every time, but to plagarize a saying from a colleague of mine, we're putting a band-aid on cancer here. Those kinds of things make working with dates simpler, but they don't actually correct the issues.

So, reason #1 to insulate yourself from Java dates... the implementation sucks and it's sucked since the beginning of time in Java.

Reason 2: Not everyone requires millisecond precision. If you only need precision to days, why use all the extra memory to pass around useless information for hours, minutes, seconds, and milliseconds. At that point you could use in an int instead of a long.

Reason 3: You can expose methods that make sense in your application or enterprise. If you don't need a "getTime()" method because you're never going to use a long, don't confuse other developers by providing it. If you are an architect and you put in methods you don't intend to use just because they are in the standard implementation, developers will use it and, if you don't intend for them to use it, they will probably end up with something like:

java.util.Date date = new Date(new MyDate("01-01-2009").getTime());

Let's face it, that's a Daily WTF in the making and you, as an architect, have created opportunity for a developer to write this kind of code by exposing methods you don't intend to use.

Reason 4: Your own implementation of Date allows you to wrap the best date implementation available and swap it in and out of your application. This idea is pretty familiar to most people who use a lot of third party libraries and some even like to do this for database adapters. Here's the thing... in reality, you're more likely to change your date implementation than your database. If you're date-related code is based on your own abstraction this becomes a lot easier.

Reason 5: It regulates date handling across the application/enterprise. No one has to question if we're using joda time, java.util.Date, java.sql.Date, or any other date-related functionality. We use our implementation... period.

It's simple to do, it takes very little code, and it will make your date handling code not suck. To me, that's worth the small amount of time it will take to implement.

Tuesday, June 23

More tech in a new kind of revolution

In the last couple posts I have singled out Twitter for the role it is playing in the conflict going on in Iran. Recently, the murder of a young Iranian woman forced another technology to the forefront, YouTube.

The YouTube example is a bit different. First, it's penetration is far deeper than Twitter. It's technological challenges are much more evident than those of Twitter. And they actually did something new. Before YouTube, streaming video on the web was sketchy at best. Still, for all it's popularity, YouTube has been utilized mostly by video bloggers, teens with webcams, and America's Funniest Videos on the web. Sure, there's the "9-11 truth" and "free energy" videos, but they are a very small minority in a sea of skateboarding dogs and toddlers performing their own version of the "Eensy, Weensy Spider".

However, last Friday, the battered opposition in Iran, as well as the rest of the world, found someone a rallying cry via YouTube and spread over social networks including Facebook and Twitter. A gruesome video of a young, relatively westernized woman in Iran who was shot and killed as she talked to a friend on her mobile phone.

The video was uploaded to YouTube and in less than 10 minutes it was world news. It could not have spread faster if the CNN cameras were sitting right there, broadcasting live. In less than an hour, "Neda" had become the new face of the opposition.

So, in the last two weeks, we've seen Twitter go from relative obscurity to a battlefield that governments of the world provide support to in order to keep it up. Some have even called for a Nobel Prize for the founders of Twitter because of it. We've seen YouTube go from hosting videos of bored kids talking to their webcams to hosting the type of video a cameraman of a major news network could go a whole career and never capture. It took conflict to force these technologies to the forefront. The real question is, what will be next?

Tuesday, June 16

War Has Been Declared

The last 100 years could easily be called a century that changed war forever. In each iteration we witnessed advancements in the art and technology of war that have never been equaled in the history of mankind. And with each iteration, we progressed our ability to destroy to a point where our capabilities were so alarming, simply the threat of war was enough to keep the peace.

Today we have a new war. It is a war waged on a very small battlefield with support from non-combatants around the world. It's a war of subversion, a war of information, a war with no boundaries, and a war with a new weapon. Twitter.

That's right, a week ago Twitter was a microblogging tool that most of the world had never heard of. Two days ago it turned into a lifeline for the Iranian people to tell the world what the mainstream media either would not or could not. By the end of the day yesterday, it had become a battlefield. For two days, while typical media sources were blocked by Iran's government, Twitter somehow had them stumped. While they could somewhat control what was coming in, they could not control what was going out. As people around the world began to pick up on what was going on, they started to run interference... creating anonymous proxies, setting up VPNs, and departing from generally accepted practices to protect the identities of those who were actually in danger. Twitter even postponed it's regularly scheduled downtime, realizing the gravity of the situation they had been drawn into by no action of their own.

Today, the opposition movement in Iran is hiding in plain sight, obfuscated by the noise created as people around the world flood the #IranElection topic at a rate that prevents my poor twitterfall view from keeping up.

Now the governments, always slow to pick up something new, have attempted to adapt. Instead of trying to prevent, the government in Iran has begun to create its own noise by attempting to lure those who desire to help but may not think about what they are doing, into providing information.

I continue to be amazed by the way events have been unfolding in this situation. My prayers are with those in Iran who are fighting a government they don't believe in and that they might one day be able to sit on a train, coming home from work and write whatever they want because they don't worry what their government might do about it.

Monday, June 15

Is Twitter Really Relevant?

My first impression when I learned of Twitter just over a year ago was something to the effect of, "Really? What would I do with something like that." I thought it was an interesting case for the ability of a dynamic language like Ruby to prove itself with some high volume transaction processing. However, until today, while I have followed a few of the software geeks I like to read from and posted some sarcastic comments of my own, @mikenishizawa has been pretty quiet and disinterested in Twitter.... until today.

Today I saw Twitter become the lifeline to the world for the pro-reform movement in Iran. Today I read about young people taking to the streets with a serious fear that they may be shot but feeling that their cause was worth the risk. Today, I have watched the #IranElection tag on TwitterFall, mesmerized by what I was watching.

Some of it was just voicing support, some of it was fellow geeks tweeting proxies to evade the Iranian governments attempt at censorship, some of it was was raw footage of what was happening on the ground by real people taking pics with cell phones. There was no Muslim and Christian. No talks of terrorism or political debate about a nuclear Iraq. These people are fighting for the basic right to have a say in their lives and how they live them... a right that we sometimes take for granted in the US, where these rights were afforded to us merely because we were born where this fight has already been fought.

It is a fascinating thing when a technology lives up to it's potential. It begs the question of why some technologies survive and some fail and why some never realize the impact they could make on the world? When you think about it, the idea of Twitter is not revolutionary at all. I've heard it called "IRC on a webpage" and I've recently complained about companies and projects who use it to broadcast updates like it's RSS. But today, "IRC on a Webpage" may just have been the thing that drew mainstream, world-wide attention to the struggle in Iran. Who knows, it may have even prevented a repressive, authoritiarian government from cracking down in an even more brutal way and censoring any chance of us seeing it in the West. People got a chance to interact with the news they were getting and got a chance to be a part of the protest even from the other side of the planet. As far as I'm concerned, Twitter's relevance was proven today.

Monday, April 27

Jackalopes everywhere.

Over the weekend I spent a little time upgrading my two laptops, a Dell Mini 9 and an Inspiron 9400, to Jaunty. In a word, the installation was flawless, even when things went wrong.

What does that mean? Well, on the Inspiron, after the normal process of "answer 5 questions, hit go, eat breakfast, return to installed system", I found that turning on the Nvidia drivers seemed to crash Jockey... and then when I attempted to restart, X windows failed to come up. While this sounds like a pretty major, but previously common flaw, the error handling mechanisms were easy to use and walked me through the process of giving me back a working configuration. No digging through dmesg logs or anything like that. It all comes up in a dialog and you can revert to a previous config.

While the new features list is a bit lean, you can tell where they've been putting their time. The new login screen looks very nice and, once you're into the OS, you get the expected solid performance that linux users have grown to love.

On the netbook things are even better. As much as I like what Dell did in their launcher for the netbook, Netbook Remix is by FAR superior. The simple addition of putting the title bar for applications in the Gnome panel is a wonderful enhancement for maximizing the usable screen space. I have to admit, this is my first exposure to Remix, so that may have been a part of it before, but I found that to be a subtle enhancement that makes so much sense you have to wonder if they'll ever put something like that into standard Gnome.

Aside from the small hitch with the graphics card. The installation went well as usual. The enhancements, while subtle, are a great improvement to the overall experience. Best of all, everything just works. If only I could use it at work.

Wednesday, February 4

Failure: New and Improved

Sometimes I can't help but wonder how Microsoft has managed to continue it's domination of the desktop market when they make such obviously stupid decisions. For instance, this gem.  

I just have to continue to ask "why"?  How does it help you to have a  version of your OS that will only run 3 applications at once?  They should have named that one Windows "Useless" Edition. 

 Home Premium gives you "touchscreen implementation"?  Since when did an operating system vendor provide "touchscreen" functionality?  Folks, it's hardware vendors that provide drivers so sofware can work with their hardware.  Windows doesn't provide this, the touchscreen vendor provides a driver for its hardware that works with Windows.  

Here's a suggestion to the folks at Microsoft, make 1 version of your software that works.  No BSOD, no gaping security holes, the interface behaves in a reasonable, consistent way, put it on a modern filesystem, and make it more efficient.  Reducing the number of windows someone can open and marketing it as a netbook solution is just a hack job so you can brand a product in an area where you are facing serious challengers.  Consider the approach Apple took with MacOS and use stick to making window managers.