Wednesday, April 15, 2009
Undefined Value Has Moved
The Undefined Value blog has moved to http://undefinedvalue.com/.
Many thanks to everyone who has read my blog here on Blogspot. I hope you'll follow me to the new site.
Monday, April 06, 2009
Menubar Countdown 1.0 for Mac OS X Released
Lately, I've been experimenting with the Pomodoro Technique for time management. The basic idea is that you work in focused 25-minute bursts, with short breaks between bursts. You are supposed to use a kitchen timer to avoid getting distracted by looking at the clock.
Of course, as a computer guy I'd like my timer to be on my computer. I looked around for an application that would provide an unobtrusive 25-minute countdown timer, but I didn't find any that I liked. So I decided to write my own.
Menubar Countdown is the result of that effort. It displays a countdown timer on the right side of the menu bar. It has menu items that allow you the user to start, stop, or resume the timer.
There are three options for what you want to happen when the timer reaches 00:00:00:
- Play the system alert sound (which I never notice).
- Display an alert window (which is effective, but you may not like the abrupt interruption.
- Speak. This is my favorite option. You can specify what you want the application to say.
It's free software, distributed under the terms of the GNU General Public License.
Source code is included. Other neophyte Cocoa programmers might find it useful as an example of using such classes as NSStatusBar, NSStatusItem and NSUserDefaultsController, or for measuring absolute time in a Mac application.
You can download the application from my snazzy new corporate web site: Menubar Countdown product page.
Thursday, April 02, 2009
Giving Drupal a Try
I've been playing around with Drupal as a possible treatment for my I-don't-have-time-to-make-a-real-website-itis. If that works out, then my blog will probably move, and I'll finally put some content on my corporate website.
I'm impressed with how easy it is to throw up a functional website with a content management system like Drupal. Sure beats creating a website with Emacs, which has been my solution up to now. (Yeah, as far as the WWW thing goes, I'm living in the Dark Ages.)
Here's my playground, if anyone is interested in seeing what a Drupal-based site looks like with very little customization or administration expertise: http://kristopherjohnson.net/content/.
And in related news, my corporation now has a real website: Capable Hands Technologies, Inc..
Monday, March 16, 2009
All Work and No Play...
Note: this article has been re-published on the new Undefined Value blog.
I've been really hating my job for the last twelve months or so. I've wondered why. After all, I'm getting paid well to work on software. This is my dream job, isn't it? Why can't I enjoy it? And if I can't enjoy it, why can't I just be happy that I'm not unemployed or flipping burgers?
While sitting in the car dealership service lounge today, I watched a TEDTalk about the importance of play. During that video, it hit me: I hate my job because I never get to play anymore.
When I say play, I don't mean playing ping-pong in the storeroom or having Nerf gunfights with my co-workers. Play is about curiosity, exploration, and imagination. That's what I've always liked about software development: the opportunity to explore different solutions, to try out new ideas, and to learn interesting things from other people.
For the past year, there has been none of that. My job has mostly been about fixing bugs. There have been a few new features to add, but they have all been uninteresting and uninspiring.
This may sound like whining, but lack of play really does take a toll on productivity. We have several smart people on the team, and yet we are way beyond schedule and over budget. I'm sure that a major reason for that is the fact that nobody is having any fun. Just putting your head down and charging forward may sound like an admirable way to handle an unpleasant situation, but it stifles creativity and makes it difficult to imagine better solutions. When there is no opportunity to be smart, everyone just gets more stupid.
Play should not be considered a luxury reserved for children. The mind needs play, just like it needs sleep. Without it, performance suffers.
I honestly can't remember the last time we did any brainstorming or drew things on whiteboards or talked about abstractions or joked about how to re-implement the whole system some obscure programming language. All we do is write code, and contrary to what some people believe, writing code is the least valuable thing a developer does. It's the thinking behind the writing that makes us more than mere typists, and we aren't doing enough of that.
I don't know the solution to this problem. I just hope that after the current projects are finished, I'll remember how my job is supposed to feel.
Wednesday, March 04, 2009
Implementing Stupid Stuff
Every software developer, at one time or another, will be asked to implement a feature that doesn't make any sense. It will be a request from a client, or from a senior manager, or someone else who can't be ignored. The feature must be added, even though everyone other than the requester knows the feature is ridiculous.
I am in such a situation myself. The first assignment I received when I took my current gig was to implement a feature that all the smart developers had refused to be involved with. As the new guy, I didn't know any better. I did what I was told.
Now, about 25% of my time is spent reacting to "bugs" and questions about the feature. I put "bugs" in "quotes" because most of the time, the feature is working exactly as designed. Unfortunately, the design made no sense, so the behavior of the software doesn't make sense to anybody.
So, I spend a lot of my time trying to explain to everyone why the software works the way it does. This makes me look stupid, because the way it works is stupid. I am held responsible for the "feature." People ask me why it does what it does. Most of the questions are of the form "How can I disable this feature?" I want to preface every answer I give with 'This was not my idea, but ..."
It's depressing. My advice: don't implement anything that seems stupid. Ask a lot of questions. Make sure that either (a) you understand the need for the feature, or (b) make sure that everyone sees how useless the feature is, so that you won't have to do it.
Monday, February 23, 2009
For most of my computer-using life, I haven't had to worry too much about the security of my computers and networks. I always had physical control of the machines. I had passwords on the accounts. I use WEP and WPA on my wi-fi. Best of all, I never had anything very valuable on the machines.
However, for the past year or so, I have a had a potential intruder to worry about: a ten-year old boy named Bailey.
So far, we are not too worried about Bailey's computer use. We monitor his use, both openly and covertly, and he hasn't done anything dangerous or malicious. When he does do things that he's not supposed to do, he doesn't try to cover his tracks. However, he definitely values expediency over rule-following, so if logging into his mom's account is the easiest way to get cheat codes for Pokemon, or if he thinks plugging his iPod into my computer will let him download the movie he wants, then that's what happens. Threats of punishment don't deter him.
So, I've had to start acting a bit like one of those network-admin people who have always annoyed me. I force everyone in the house to log in to computers with their own accounts. I set up computers to automatically go into screen-saver mode after a period of inactivity, and require a password to get out. I've created some scripts that can quickly shut down Bailey's computer, or forcefully log him out.
So far, Bailey hasn't shown much interest in learning how to bypass any of these measures. I don't know how long that will last. Part of me hopes that he will outsmart me. But another part of me hopes that won't happen for a little while longer.
Wednesday, February 18, 2009
Humor on Twitter
It is worth using Twitter just to get some laughs from these people:
- The Onion: @theonion
- Tina Fey: @TinaFey
- John Hodgman: @hodgman
- Paula Poundstone: @paulapoundstone
- John Cleese: @JohnCleese
And it would be nice if these people still posted things once in a while:
Please let me know if I've missed anyone.
Friday, February 13, 2009
MacBook Pro Status Report
I've been using my new MacBook Pro at work for over a month, in a strongly Windows-centric workplace, and so far things have gone very well.
Most of my work involves Linux programming, so I just run Linux in a VMWare image like I did when I had a Windows laptop. This works even better on my new Mac than it did on my old laptop, because I have a better X11 server for Mac OS X and because I can use all the standard UNIXish utilities to transfer and process files on the two platforms.
On a few occasions, I have had to launch my Windows XP VMWare image to get some things done:
- One of our team members compresses things using WinZip 12. Only WinZip 12 can de-compress compressed files in this new format, and there is no Mac version of WinZip.
- I used Word for Mac to update a document, and it was displaying weird in Print Layout view. I opened the document in WordPad (and OpenOffice) in Windows to verify that it looked fine in other editors. (It did.)
- I use Remote Desktop Connection on Windows to access some servers.
- I occasionally access Windows network shares from Windows. I can access them directly from the Mac through the Finder too, most of the time, but sometimes there are authentication issues that I can't solve.
So far, thumbs up on using a Mac in a Windows world.
Friday, February 06, 2009
On the Stack Overflow podcast, Joel Spolsky has noted a couple of times that he's never met a programmer who didn't get an 800 on the math portion of the SAT.
I used to be pretty proud of my 790 SAT math score. But now it's proof that I'm not as smart as any of the programmers Joel has ever met.
Tuesday, February 03, 2009
I've decided to give Twitter a try. So far, I'm not too impressed. It's essentially just a bunch of tiny RSS feeds that update very frequently. In other words, it makes the Internet an even bigger waste of time. But, as with everything Internet-related, the joy is finding the occasional gem within all the muck.
If you're on Twitter too, you can find me as @OldManKris