2009-09-08

System Reloads and Customizations

I follow the blog of one of my fantastic ex-professors from Knox, and he's been posting recently about switching from Mac OS X to linux. I know better than to criticize someone's decision when it comes to their OS, especially a professor of Computer Science, but Don's post did get me thinking.

See, I've played with my fair share of *nix distros in my day. I cut my teeth on FreeBSD 4.x, and I've installed everything from Ubuntu to Gentoo (an odd duck that at the time I played with it insisted on compiling the entire damn operating system from source code for every installation.) Thanks to its incredible utility for recovering files from corrupted Windows NTFS partitions, I've spent a ton of time inside Knoppix boot CDs too. Out of all of these, I can tolerate FreeBSD the best, provided I don't touch the X Windows system at all. (If I'm going to have to deal with some *nix flavor, at least give me the semi-consistency of the command line!) The reason I've stuck with FreeBSD is because they have a halfway-sane package management system that makes it somewhat less painful to maintain an "up to date" system. Even then it's a serious undertaking in order to ensure your network-facing components are fully patched and still happily talking to each other afterwards!

Now, it's worth saying that I've personally tried to use linux as a primary desktop OS. In particular my attempts were a desperate attempt to avoid Windows 2000 and XP so I'm willing to acknowledge that some distros have (hopefully) come a long way in the 8 years since I was put off by each and every one of them in turn. Based on my experience, I just can't for the life of me see how anyone could subject themselves to the kinds of "system maintenance self-torture" that Don is fastidiously documenting on his blog specifically so it won't hurt so bad next time he has to install and configure his system.

This brings me to the point of my post. Back in the day (primarily my first year or two at college) I would "modify" my B&W G3's copy of Mac OS 9 in a variety of unadvised and unsupported ways. Custom visual themes, custom icons, custom behaviors and desktop utilities abounded to fill in the gaps where I found the stock OS lacking. All of this was fine, because I was experimenting, and learning, and it was all very educational. As time went on though, and as I installed new hard drives and reloaded operating systems onto my machine, those customizations began to get dropped. They simply wouldn't get loaded onto the new installation either in the interest of system performance, or because the utility they provided wasn't worth the investment of time to find, download and install any more. I began to look for faster ways to get through the increasingly tedious system setup up process and back to the important work I wanted to be focusing my attention on instead.

Now, you can criticize me for being willing to adjust my own workflow to the provided behavior of the system, but after all these years when I'm faced with a clean system install now, I think about how much time it's going to take before the computer is "usable" and I still cringe. I have very savagely uncluttered my setup experience. There are certainly still some things I insist upon, such as MacPorts, TextWrangler, MenuMeters and DropDrawers, but these tend to be things that I keep bundled together specifically so that they're on hand when I sit down at an unfamiliar Mac. And more importantly, I make sure to keep the list of "extras" small enough that it fits comfortably in my memory, even during the years that pass in between reinstalls on my Mac (which is itself a blessing I try never to take for granted.)

MacPorts in particular is soooo ridiculously easy to use compared to just about anything I've been exposed to in the linux world. A single command like sudo port install x (where x is the name of the unix utility I need for the given situation) will get me literally any tool I need in a matter of seconds along with all of the tools it needs in order to run. And six months from now, when both x and every single one of x's dependencies have updated point releases, I can run sudo port upgrade installed and come back in half an hour with a fully up to date, still working system! It absolutely baffles me why anyone would bother with traditional RPMs or installing from source unless they were: 1) a student, 2) masochistic, or 3) had a gun to their head and had no other choice.

Here's the bottom line for me: When I have to reload one of my systems (which I've gotten pretty adept at avoiding) I ask myself this question: Do I want to spend the next 3 days downloading and installing and tweaking and customizing this poor system into the convoluted environment I require in order to be able to be productive, or do I just want to sit down and concentrate on banging out some great code? The answer these days is invariably the latter. I certainly wish Don the best with his switch, but for me sysadmin != productivity and the day I need to start writing down how I configured my system to get it to do what I expect is the day I need to reevaluate my expectations. Believe it or not, I think I'm still young enough that it's easier to change myself than it is to change hundreds of lines of config files throughout the various and sundry /etc directories of my system.

2009-08-28

"What's Wrong?"

There are times when I can sense that my wife is unhappy or bothered about something. At those times, I ask the obvious question, "what's wrong?" and she gives me this response; "nothing." This is an awful answer for a lot of reasons, but the biggest one is this: I'm a geek, and I analyze everything. If my wife were to tell me what was wrong, I would take that little bit of information, and file it away in my mental model of "how my wife works." It would get corrolated against everything I could possible associate it with. Everything from the topics of conversation leading up to the "what's wrong", to the events of the day, to the time of day and where we were. Everything would get filed away into the massively-cross-linked database that is my nerd brain.

Now let's fast-forward again to the next time I'm about to ask "what's wrong?" This time, I'm mentally going back and checking against all the previous instances I've encountered like this one, looking for similarities and trends. This time, I don't have to even ask, "what's wrong?" because I am informed from my previous experiences and the corrections my wife made to my mental model the last time she explained herself. She would be letting me learn something about her that helps me be a better mate to her.

The thing is, when she answers with, "nothing" right now, I give up and I walk away, because she's shutting me down and closing me out. There's no way I can learn the motivations and impulses and feelings she's experiencing that are leading her to be upset, because she's providing no feedback at all for me to adjust my approach. This is like playing a videogame actually: you learn how high Mario can jump, how far he can jump, and under what circumstances you can safely navigate a level. The game gives you immediate feedback that lets you build a model for expected outcomes: given this set of variables, and this set of inputs you're applying to the game, you can expect such and such a result. You can begin to predict and influence the outcome. The more you play, the better you get at being able to navigate the game's environment because you're integrating the feedback (both positive and negative) back into how you handle the controls.

Now by no means do I at all assume that my wife (or any other woman) could be reduced down to something so simple, and by no means are the life events that lead up to a, "what's wrong," moment deterministic, but it would go a long way towards me being better able to read her, understand why she's upset and even work to help avoid such circumstances in the future if she would just be willing to explain what was in her head. It wouldn't have to make sense, or be logical or even be nice, but I just can't learn from a deadpan response of, "nothing" every time.

A videogame where the screen goes black and resets every time you make a single mistake isn't at all engaging. I mean, have you ever played Dragon's Lair? Awful game really. Not fun.

2009-03-24

DNS Update Speed: A TTL Primer Plus Tips

Just a real quick primer/tip on DNS updates. Keep in mind that this doesn't help if you haven't planned ahead, but if you know a day or two ahead of time that you are GOING to be changing DNS, you should go in and adjust the TTL values for the records you intend to change DOWN to a lower number.

For example, a TTL of 7200 means that the record in question can be cached on a client for up to two hours before the client MUST go back and request a "fresh" record. The problem is, changing the TTL is still subject to the *current* TTL, so if you change the TTL from 86,400 (1 day) to 300 (5 minutes), it will take a day before clients realize they can only cache records for 5 minutes. So this goes back to what I said originally, if you know you're are GOING to be changing DNS in a few days, lower the TTL ahead of time so the clients put themselves on short updates cycles. When you make your REAL DNS changes, they will happen almost instantly, and you can also bump the TTL back up to "normal" at the same time.

The reason you use a longer TTL is because it can pretty significantly affect the traffic load you place on your DNS server. A long TTL means fewer overall requests, because they get cached more. "Good" registrars like Network Solutions allow you to set your own TTL values. "Bad" registrars (**cough*GoDaddy!**coughcough***) don't.

2009-03-11

Working for a Living?

It seems I only want to write here when something is going really right, or really wrong. Right now, I'd be leaning towards the latter part of things. I'm annoyed because I'm opinionated. I have a pretty good idea what I want right now, but I can't see a good way to get there. Of course, as soon as I'm there I will probably revise and update "what I want," but that's to be expected-- I just want to be moving down that path at some speed other than "standing still".

The thing of it is, I like writing software for myself. I even like solving other people's problems when I care about them (which admittedly happens pretty frequently.) What I've really been trying to avoid is writing "installed" software for other people. I guess I'm just a typical engineer in that regard: I think I know what's best, and I want you to both pay me, and leave me alone long enough to come up with software that will fix your problem for you in the way I think is best. I don't think it's unusual to not want to worry about deadlines, or even being accountable to a supervisor (or a client). I want to control my own destiny, so to speak.

I am so envious of the guys at 37 signals and Twitter I could just tear my hair out. I'm envious because they just freakin build whatever they want, however they want, and they've managed to find enough people who like what they turn out to support themselves. They decide if they want to add or remove a feature, and they do it when they feel like it, not when their manager says, "have this module done by Wednesday." If their clients don't like it, they cancel their Basecamp and Backback accounts and take their business elsewhere, but they are one-hundred-percent in control of their own products.

There is more I'm envious of too. I like writing custom software solutions, but I hate leaving a client in the lurch. I could write great stuff for my current clients, but what happens to them and their investment in the software if I leave the company I'm at? I work in IT right now, and we deal with a lot of old, abandoned pieces of software that our clients cling to like life rafts because it's all the know and all they have. I don't ever want to be responsible for releasing software like that out into the world. When you write web-based, service-based software, you get to update your code ONCE, and every single one of your client just installed the "patch" immediately and with zero effort. (The flip side with web software is that if you do go out of business, your clients don't even get the "consolation prize" of the last version of the software you released.)

With web services though, support is provided to your paying customers as a part of the service you are offering, instead of an annual service contract that costs more than the software you "sell" (or license.) I also hate software installations as a matter of routine. We're working on an internal web software project right now that has some nasty nasty ugly make-you-want-to-gag-it's-so-distasteful hacks in place in order to get it to talk to Quickbooks. I see this as a HUGE potential point of failure, and again, what are the consequences of my company investing time in me building this software if it's going to be so damn FRAGILE in places like this? I HATE having to worry about integration with other products! I'd rather be the one producing the API that others need to talk to my app!

There's just so much that appeals so strongly to me about hosted web services like Twitter and StackOverflow and (gods forbid) even Facebook. Right now though, I'm totally overwhelmed by the single most important part of that process: thinking up a great idea. I'm not even worried about executing it, or scaling it, or monetizing it. I would LOVE for my biggest worries to be: 1) How to handle a million page views an hour, and 2) How to convert a million pages views an hour into revenue! I would be just THRILLED to have those problems. But no, my problem is that I'm stuck on an even earlier problem: What problem do I have that I need to solve.

I believe in scratching your own itch, but everybody out there is doing such a good job for me, that I'm largely itch-less. My biggest beef with my iPhone used to be that I couldn't sync my calendar with my wife's calendar, so every week we had to sit down and manually type each other critical appointments into our respective phones. But now Google has released that feature using Exchange protocols, and they've done it for free no less, and it works so well for me and my wife that I'm happy. . . . . . so there's nothing for me to do myself!

At my current company, our techs frequently want to bounce ideas off the world in general and get thoughts and suggestions about cases we have. Well, there's a place you can do that for programming problems called StackOverflow.com, and guess what, they're working on an IT version already! Dang.

I can't believe I'm actually saying this, but I wish I had a serious problem I could solve with a good web service!

What I need to bring all this back to is that I don't think I'm going to be happy working for someone. I would be thrilled to be working with people, but not for, not anymore. I crave freedom, and if I didn't have a mortgage payment and a wife that deserves some of the niceties of life, it might be a lot easier to take a big risk in that direction.

Of course, it doesn't help that I'm generally a conservative guy anyway. I'd love to have my cake and eat it too. If the guys at 37s are hiring, I'm available. (I'm just not sure I'm quite sharp enough to work with that crowd.)

2008-11-04

Opportunity

Tonight I am struck by the awesome amount of optimism and opportunity for change that our new president elect can bring to the table for us.

I admit this is an unusual opinion for me to hold.

2008-09-19

The Past Year

Now that the wedding is finally here, this is what the past year has felt like.



...except for the stabbing and dying parts of course. Really, it just feels like we've been working towards this for so long, and it's never really felt like we were getting any closer until the rehearsal and dinner today. And then FINALLY we're all of the sudden here, and it's finally happening. I don't know what we're going to focus on once the wedding is done and the house is built. There will be no anticipatory tension left!

2008-08-30

Saturday Morning at PAX

August 30, 2008 3:20:17 PM CDT

We're back in the hotel taking a breather after the absolutely hilarious Penny Arcade "Make a Strip" panel. Gabe sounds a whole heck of a lot like Dana Carvey-- it's really striking. What I love the most is, after seeing them, realizing how much of their personality is coming through in their comics. They took a couple suggestions from the audience as they were creating the comic for Monday. (The girl coming out of Mr. Coulton's trailer was originally a brunette.) They also changed Tycho's expression in the third frame from a disapproving look to one of envy/longing. All in all, it was amazing to watch them both work, and they're great presenters. They're naturally funny, and obviously they relate well with their audience.


We also sat in on the "Raising Children with Games" panel, which was interesting, but a little slow. They touched on a couple things that really resonated with me. The biggest of which was making single player games into communal events. My brother and I used to "tag team" single player games, passing the controller back and forth for alternating levels. We also used to just sit and watch each other, especially as we got older and our tastes diverged. I would watch him play Parasite Eve and ask questions to fill in the back story I missed before I sat down. He would watch me play FF7 (even though he played it too) just so he could experience it again without having to press X himself to get through all the dialog. These were great times my brother and I had, and I remember many occasions where we left an NES game that didn't have a save feature running over night so we wouldn't have to start from scratch.

The other thing that the panel touched on was incorporating mechanisms to control or remind people of how long they're playing. The panel, and most of the audience, seemed to think this was something we should "start" doing now, but Jenn and I both already had examples of games that did this in our minds. Guild Wars starts reminding you every hour (after a few hours) that you should take a break, and even 15 years ago EarthBound had a gimmick where the father of the main character, Ness, would call you on your cell phone and ask if maybe you felt like taking a break. That in particular was a great and really effective way of reminding the player of how long they'd been sitting there without fully breaking the fourth wall. It's not a new idea-- it's just that developers have a financial motivation to make their games as appealing as possible FIRST. Realistically, developers want you to play their game forever.