Wednesday, September 27, 2006

 

First Merge

After a few days of waiting for my client's layers of bureaucracy to do whatever it is they do, I finally have access to the company's e-mail, instant messaging, and source code repository systems. I don't have VPN access yet, so I can't work from outside the office, but they say that's coming. It's only been a week; you can't expect these things to happen overnight.

With access to the source repository, I got to make my first contribution of code to the build. Technically, this isn't true: I've e-mailed changes to others on the team who have incorporated them into the build. But today was the first time I got to do a merge on my own. I feel like I'm a productive worker now.

This client uses Subversion. This is my first opportunity to use it on a project, and I like it a lot. Its branching/tagging mechanism is very easy to use and to understand. I've been using CVS for my personal projects, and advocating its use whenever anyone asks for a version-control solution, but I'm going to start using and recommending Subversion instead.

The group has a policy of not allowing any commits to the trunk after 3:00 PM. This gives ample time to fix any issues found in the daily afternoon build without keeping anybody late. I like this policy.


Sunday, September 24, 2006

 

First Contract Gig

We finally got my contract squared away, so since Thursday morning I've been working. I'm not going to reveal the identity of my client, but I'm working in the Times Square area of NYC.

They have me staying in an apartment in Jersey City for the three-and-a-half weeks of my onsite visit. It's a nice place: it's fully furnished, with Internet access and DirecTV, and from the 35th floor I have a good view of lower Manhattan, the Statue of Liberty, and the Verrazano-Narrows Bridge. There is a grocery store and a shopping mall within walking distance. Right now, I'm in a two-bedroom apartment, which was all that was available on short notice, but I'll be moving to a one-bedroom apartment in a week.

Staying in a nice apartment instead of a hotel is a welcome luxury. It's cheaper than staying in a hotel, so I don't have to feel guilty about wasting the client's money.

My commute between the apartment and the office should take 45-55 minutes. I say "should" because I've gotten myself lost on every travel attempt so far. It's hard to tell north-south-east-west in the middle of Manhattan, especially when it's dark, so I've gone a block in the wrong direction a few times. I had trouble finding the PATH train station my first night—you'd think they'd have signs or something to help visitors, but you have to be right on top of the station to see it.

The client has a long bug list, and a new release scheduled for a few weeks from now, so my job will be to help whittle that list down.

For the past two days, I've been fixing "repainting" issues: that is, bugs that cause the window to not properly display all its elements. There is also some annoying flickering that occurs when the window is resized. I'm using Parallels on my MacBook to do the Windows stuff, and I was initially concerned that the emulator might not replicate the graphical issues. But Parallels emulated the problems perfectly.

A really nice thing about using a virtual machine emulator like Parallels is that, after I finish working with this client, I can easily go back to a clean Windows install without the particular customizations needed for this client's development environment. And then if I work for this client again, I can just reuse this configuration. From now on, I'll use a virtual environment for every project.

A downside to using the MacBook is that, whenever I have some problem running something or building something or connecting to a server, people assume my problem is due to using a Mac instead of a "real PC." So far, none of my problems have been Mac-related. Maybe I need to cover up the Apple logo and other identifying features, to make it indistiguishable from a "real PC."

One of the first things each member of this team has said to me is "This code is really horrible. I hope you can make sense of it." That's what everybody says, for every job I've ever had. The dirty little secret of the software industry is that we all know that everything we do sucks. (A dirtier secret is that there are a lot of people who don't realize their stuff sucks.) This bothered me a lot when I was younger, but with maturity I've come to accept it as the way things are. I'll just try to make improvements where I can, and try to not make things any worse.


Tuesday, September 19, 2006

 

Hardest Button to Button

One of the sad things about growing up is that you no longer get to sit around all day listening to music with your friends. Sure, I sometimes wear headphones at work, and I'll catch music on the radio in the car once in a while, but most of what I hear is the same music I was listening to twenty years ago.

It's frustrating when I happen to catch a new song I like, but can't find out the name of the song or of the band. My friends are no help—they suffer from the same Old-Person-Cluelessness Syndrome I do. I guess I could try to ask their kids, but it's embarrassing to ask a teenager "What's the name of that song that goes 'da-na-na-na DA-NA-NA-NA'?"

I caught "The Simpsons" last night, and the White Stripes appeared playing one of those Really Cool Songs I Could Not Identify But Would Buy If I Could. I have a couple of White Stripes albums, but didn't realize they played this song.

So now I know it's a White Stripes song, but what's the name of it? My first strategy was to go to the iTunes Music Store, and listen to a few seconds of each song of each White Stripes album I didn't own. I couldn't identify it. It turns out that all White Stripes songs sound alike if you listen to just a couple of seconds of each one.

My next strategy was to Google for "white stripes simpsons". This gave me a link to a YouTube video for the scene from the Simpsons episode:

That page contained links to other videos related to the White Stripes (and the Simpsons). After viewing a few of them, I found the song I was looking for. Here's the video for The White Stripes "Hardest Button to Button:"

I imagine a lot of people got very tired carrying around drum kits and amplifier cabinets during the making of that video.


Saturday, September 16, 2006

 

Contracting vs. Employment

My career change from employee to independent contractor had a lot of thought behind it. Here, I try to explain what I was thinking.

I'll first dispense with the money question. Yes, contractors generally make more per hour than employees. But that doesn't mean contracting is a way to get rich. While junior- and mid-level contract programmers often do make higher per-hour pay, an employee's pay is more stable. Also, if you put in the time and rise through the ranks in an organization, one can make a lot more money than a contractor.

Money wasn't the motivating factor for me to switch from employee to contractor. What I really wanted was the opportunity to work with other people. I've been a professional programmer for about fourteen years, and I feel like I'm just starting to get good at it. I'm not going to get better working with the same people on the same applications. My old employer didn't provide much variety—in fact, they were striving to eliminate variety. So, working as a contractor gives me the opportunity to work on a lot of different kinds of tasks and to learn some new things.

One thing I'll miss as a contractor is the feeling of being part of a long-lived team. Contractors do become team members, but they are never quite the same as "real employees." It's expected that they will move on, so while their contributions are valued, it is recognized that they are just passing through. No matter how closely they work with the other team members, they are always viewed as outsiders.

The primary motivation for becoming self-employed was the desire for more control over my work and my career. There is a big difference between being assigned work by one's boss versus actively seeking work. As a contractor, one wants work, and has extra incentives to do an especially good job, so that one will be asked to do more work.

Contracting seems like a more "honest" form of labor to me: if the boss likes you, they keep bringing you back; if not, your contract doesn't get renewed. I've worked in several organizations where the known-bad people kept getting shuffled around from manager to manager, with higher-level managers asking "Can you do anything with this guy?" Contractors just don't get invited back if they are no good. The good ones are invited back time and time again. I hope to receive a lot of invitations.

It's also fun to think of oneself as a "small business owner" as opposed to an employee. I am the majority shareholder of a corporation, and I am also the CEO, CFO, and Chairman of the Board. I don't understand why so many people work so hard to try to rise to top of a corporation; it only costs $170 (in Georgia) to get all those titles. I have dreams of hiring employees and becoming a big business, but even as a one-person company, I enjoy the freedom of setting my own hours, setting my own expectations for performance, and setting my own vacation policy (which is very liberal).


Tuesday, September 12, 2006

 

Idle

I don't yet have a paying client, but that's okay. I put away enough money before quitting my old job that I don't need to worry about being paid for a few months. I'm going to give the original plan a few more days, then if it doesn't work out, I have other customers who want my services.

I haven't been completely unproductive. I've filed my Articles of Incorporation with the Secretary of State and I've published my Notice of Incorporation in my county's legal organ (and I snicker whenever I read the term "legal organ"). When the state notifies me that the incorporation is complete, I have more paperwork to do. I'm spending a lot of time reading publications from the IRS, the State of Georgia, and Nolo. I've set up a new web site and registered a couple of new domain names. I've evaluated a few accounting packages, and settled on QuickBooks.

I expect to have all my ducks in a row whenever the time comes to send an invoice to some lucky client.

A lot of my time has been spent on my couch with my MacBook. I'm starting to notice soreness in my back, so I guess I'll have to break the habit of working in a reclined position. Whenever I start receiving some income, I might treat myself to an Aeron chair.

On a brighter note, HBO is airing all the episodes of the last season of Deadwood this week. I don't know what I did to deserve this reward, but I appreciate it.


Sunday, September 10, 2006

 

Naming a Corporation

I'm planning to incorporate my new one-man software development business. I've got the necessary advice, information, forms, etc. The biggest roadblock is finding the right name.

"Kristopher Johnson, Inc." is the best I've come up with so far. It's pretty boring, but I already have the kristopherjohnson.com and kristopherjohnson.net domain names, and there isn't already another company with that name. Unfortunately, it doesn't describe what I do, and doesn't have much zazz to it.

I could expand it to something like "Kristopher Johnson IT Solutions, Inc.," but I really don't want to have to type or write something that long. I thought about shortening the "Kristopher Johnson" to "KJ," but then I discovered many, many businesses and products with "KJ" in their names. I've learned that "KJ" means "karaoke jockey," like a "DJ," and there is a lot of software out there to help KJ's do their jobs. I wouldn't want potential clients to think that was my main line of business.

I've come up with a few fictitious names, but they all have turned out to be already in use. I think the names "X Software," "X Solutions," "X Systems," and "X IT Services" are already in use for every word X in the English, Latin, and Greek languages. I imagined a few made-up words, like "codeslinger" and "solutioneer," but I've been beaten to those too. The thesaurus wasn't much help either.

I tried anagrams of my name. For "kristopher johnson," an anagram generator came up with "Shh! Jerk on portions." For "kristopher," I got "This porker." I found those unsatisfying.

While perusing the state's business name database, I noticed a few common strategies for generating unique business names:

Maybe I'll just use my social security number, with "Inc." tacked on the end. I could even use a GUID, but I suspect I'll have trouble getting people to write a check to "{0624e1a0-4149-11db-b0de-0800200c9a66}, Inc."

I'm reminded of that game where you generate your "drag name" by combining the name of your first pet with the name of the street where you grew up. How would "Ling-Ling Ridgefield, Inc." go over with my clients?

I'd like to use an off-the-wall name like "Worldwide Pants" or "Supercool Manchu" (which are both already taken), but I'm hoping to court the customers who can afford to pay $100/hour to somebody like me, and I think they get scared off by stuff like that.

This is a little like naming a child. You want something that you like, and which you think will still make sense 20 years from now. But this is more difficult due to the need for uniqueness—I wouldn't have to worry that naming my child "Dave" might result in trademark lawsuits from all the other Dave Johnsons in the world.


 

Hazy Days of Summer

Summer is not a good time for recreational pilots in Atlanta. From July through September, you have low ceilings every morning, and air-mass thunderstorms every afternoon. On those rare occasions where clouds and convective activity aren't problems, you have reduced visibility due to haze.

I'm looking out my window right now, and the sky is white. The whiteness isn't due to clouds; it's the haze. So it looks like this will be yet another summer weekend without a flight.

I could fly if I really wanted to. The reported visibilities at nearby airports range from 4 miles to 7 miles. I've flown in 4-mile and 5-mile visibility before. It's not dangerous, but it's just not much fun.

What's it like, non-pilots may be asking? It seems like one is flying in the middle of a bright fog or mist. You can see the ground beneath you, but it fades away quickly. You are constantly worried that another airplane will suddenly appear in your flight path. (You are constantly worried about that in good visibility too, but the worry is a little more intense in poor visibility.)

I once flew with my flight instructor in three-mile visibility, which is the legal minimum for VFR flight. That was tricky. I was flying in familiar territory, but if I'd lost my radio-navigation equipment, I may not have been able to find my way home without assistance.

In a month or so, visibilities should start getting better, so I hope to be flying more frequently. I just hope I still know how.


Friday, September 08, 2006

 

Another Bridge Behind Me, Unburned

Today was my last day of employment. I didn't have much to do. I had a nice sushi lunch, paid for by my soon-to-be-former coworkers, cleaned all the incriminating evidence from my computers, sat through my exit interview, then turned in all my keys, credit cards, and equipment.

I live just three miles away from the office, and I'm not moving away, so I expect to see all those people at lunch or at the poker table once in a while. It's also likely I'll be doing some contract work for my former employer. So it wasn't really a "goodbye" kind of day. It was more like the last day of school before summer vacation.

I'm now self-employed. It feels a lot like being unemployed.

There has been a snag getting my contract gig started, so I may have an unplanned vacation next week. But I'm not worried—even if it falls through, I have other options.


Monday, September 04, 2006

 

De Re Atari

People sometimes ask me where I learned programming. I learned long before going to college. Most of my formative years were spent reading books that are now available at atariarchives.org.

It's a lot of fun looking through those books now. I remember holding the paper versions in my hands, and typing the programs into my Atari 800.

My favorite among the books is De Re Atari: A Guide to Effective Programming by Chris Crawford, Lane Winner, Jim Cox, Amy Chen, Jim Dunion, Kathleen Pitta, Bob Fraser, and Gus Makrea. I spent a lot of time studying this book, learning all the ways to do cool stuff with the Atari 8-bit hardware. It also contains a lot of advice about how to design software, and most of that advice is still applicable today.

Those were the good old days, when developing software for personal computers required knowledge of hardware registers, assembly language, memory layouts, and so on. Today, we hide the details of the hardware as much as possible, but I think having experience with such low-level stuff is beneficial. If you're a young whippersnapper who has only used high-level APIs like DirectX, OpenGL, and Windows GDI to do graphics, I'd recommend paging though some of these old books to see how programmers used to do things.

One last thing: Atari rules, Commodore sucks.


 

The Quest for a Silent PC

My Windows PC is really loud. I mean REALLY LOUD. I don't like noise, and this PC is really noisy.

I bought a Nexus NX-4090 "really silent" power supply, hoping that it would be quieter than the stock power supply that came with my PC chassis. I opened up my PC, removed the old power supply, unplugged all the power cables, and then plugged in all the new cables for the new power supply, and screwed in the new one.

The outcome: My PC is just as noisy as it used to be.

So, wherever the noise is coming from, it's not the power supply. The other probable candidates are the CPU cooling fan and the hard drives. The Nexus cost me $100; I'm not sure how much more I am willing to spend on other components.


 

Quicksilver

If you're a Mac user, and you haven't tried Quicksilver yet, you need to.


This page is powered by Blogger. Isn't yours?