People age and then forget. That applies equally to individuals and societies in general, though individuals seem to do a better job of retaining wisdom. The Great Depression began in 1929 for most Americans. By the end of 1930, the entire world was suffering from the effects. For the sake of this short essay, let us presume that in order to have experienced the depression, one must have been both in an economic position to be disposed by its effect as well as able to understand the complexities of survival at the time. Agreeably, a depression survivor would have been at least six years of age in 1929. This means, any remaining survivors of that time in history are now at least eighty seven years old. A frugal, sensible and generally contentful way of living for many people is coming to an end, society is once again forgetting its wisdom.
Does anyone still like configuring and building their own Linux kernels to taste? I do. Call me a nerd, but I actually enjoy spending countless hours slimming down my kernel so it has just enough support for my hardware, with modular support for anything that I might be inclined to plug in. No, the performance gain is not appreciable, but I gain some memory in kernel space which comes in handy for working on oddball drivers.
Enter Xen paravirtualized dom-u kernels. These, quite frankly are the easiest in the world to build and configure once you have a suitably patched tree (if not yet using pv_ops from mainline). Either or, pv_ops or mainline, the process is the same. You are transported to a magical world where the front end of the Xen split drivers become all of the hardware that you will ever need to support for normal use. The rest of it, frankly is just file systems, security hooks, networking and whatever else may be needed if you intend to pass a PCI device to the domain.
Literally, its easier to start with a configuration that has everything selected as a module that can be selected as such. You then take out crap that you don’t / won’t ever need, like token ring, wireless, etc. Chuck the file systems that you (and anyone else using the guests) won’t ever want (e.g. minixfs) and select appropriate things to be built into the kernel to avoid needing an initrd. Ext3 and ext4 are good examples of things you’ll probably need to boot, which should be built in.
After weeks of searching, you finally found it .. the killer application that adapts to your business perfectly and requires a minimal initial investment in the form of a license fee. You can’t wait to seal the deal, your job is about to become infinitely easier because support will be handled by the vendor. The initial in house estimates said developing the same thing would cost almost $20,000.00 and would take months to develop building on open source. You solved the problem with a yearly payment of $1500 and you get to stop working weekends. Or do you?
Unless you own or have a perpetual unconditional license to use the code, you are living in someone else’s place while renting the privilege to use it. Lets imagine a hypothetical, you rent your office space from me. You were a new start up, I had a great location. I did not mind allowing you to improve the place, I even gave you some credit to your rent to do so, under the condition that I own the improvements. You thought we had a great thing going and based critical business decisions on what my location afforded. Sure, the lease would expire in a year, but who would think that it could not be renewed after you planted roots in my place? After all, you’re sure I’m a great guy, right?
Now, imagine that I got sick of the real estate business, I sold everything I had to some big holding company for a big fat check.
A silly but interesting thought came over me today while I was working on a backup suite, wouldn’t it be easier if full system backups produced archives that could be re-installed via the system package manager? This would allow a bare metal restore on top of a base system, up to any version of the original in the past. For instance, you install apache and then configure it. A backup would not be all of the apache configurations, it would just be a series of diffs from the time that you originally installed apache.
I already accomplish this in /etc with version control and special file systems, but important text configurations sometimes live outside of /etc. For instance, if you install Mercurial, you will probably create a file named .hgrc in your home directory. That file should be restored during a full restoration after installing the base package. The same goes with bash_profile, etc.
The installwatch utility is very, very handy to catalog what gets placed where when installing software (i.e. during a make install). There is even a utility called checkinstall that helps make .deb / .rpm packages directly from source builds and installations. That really doesn’t help in this case, since it would just watch everything the package copied into place.
To pull this off, what you would need is a database that listed ‘commonly user configured’ files per package, even if the package did not provide them (i.e. .hgrc). To my knowledge no such database exists, but it could.
All of this is basically a result of picking through trixbox and freepbx (old and new) while deciding what really has to be saved in order to duplicate the system on a new installation. Tying in with something like inotify, this would provide a very nice granular rollback mechanism. Before I decide if I really want to write it, I have to consider merge conflicts during normal package upgrades, but that’s already a problem.
I can’t help but talk about how great I think my highly modified version of Ubuntu is with my friends. I’ve got virtualization galore, a great development environment with tool chains for every architecture you would want, a nice blend of Gnome and KDE apps, good security and just the right mix of desktop effects. I like it, people who use my computer like it and I’m often asked by a friend to compile xyz for abc architecture.
Someone asked me a rather innocent question, “This looks great, what games did you write for this?” and I came up blank. None. Zero. Zilch. There I am boasting how easy it is to do practically anything with my setup and I could not produce one game, however trivial to show. I’m almost embarrassed to admit, beyond working through simple programming problems that resemble games (puzzle solvers, etc), I have never written even a simple poker game.
No problem for me, I know C! Wrong. I spent a few hours coming up with a design for a game and ended up just settling on a clone of The Bard’s Tale I (C-64 Version). I fired up my editor and started coding right away. My hands did not leave the keyboard for hours. I had the structures for the characters and inventory, various types of monsters, spells for the spell casters and then it hit me, I had to bring it to life with a fun interface. A few hours into that, I began thinking … “Isn’t this supposed to be FUN?” The thought of Windows portability crept in and I began seeing ninjas scale my building.
I’ve been having a very interesting discussion with a California CS professor. I happened to catch one of his students red handed putting their homework out for bid on a freelance programmer service. The irony is, the assignment was so simple that a quick search on any search engine would yield over twenty ways to accomplish it. What programmer can’t teach a cursor to navigate a simple maze? This is more code golf than actual work and it was worth $50 to one student to get out of it.
It seems to me that more and more CS students are in it for the money that a degree will earn them, not because they love to solve problems. Anyone that had any experience in nearly any language prior to entering a university could have solved this assignment. Anyone who loved to program would have seen the opportunity to demonstrate their cleverness. This is stuff that most good programmers do in their spare time anyway. Yet, this kid was ready to pay fifty bucks to be rid of the responsibility yet reap the reward. When employed, will the kid just broker their work to outsourcing companies? Lets look at a hypothetical interview:
Interviewer: “Ah, I see you have a CS degree!”
Interviewee: “Yes, I outsourced all of my homework and coursework and passed with flying colors. It was more expensive, but I was able to plan my own start up, acquire eleven patents and gained real experience in project management and economics. I now speak four languages and continue to employ a small staff that handles most of by busywork”
Interviewer: “Yes, we have an opening for you. You applied for programmer, perhaps we should be considering you for project manager. You do have a NDA with the guys you use, right?”
That is scary on so many levels only because its actually likely to happen. I fired up the RSS crawlers, grabbed some available database dumps (mostly from Stack Overflow) and affirmed my theory. I’m going to confirm it, then publish it, I’m actually irritated enough to write a white paper. I hate white papers.
Today, purely out of boredom, I created a trial Kiln account. Fog Creek is well known for pampering programmers, I wanted to see how they built an offering out of Mercurial. If you are reading this, there is a 90% chance that you found my site via Google while searching for something Mercurial related. Yes, I love HG, I’m one of the people who still, to this day, don’t quite ‘git‘ it.
Selling the idea of using Mercurial to enterprise customers is sometimes difficult, especially dealing with start-ups who have managers that only know how to court venture capitalists. These managers are often put in charge of operations and justifiably rely on, even inherit the preferences of their trusted senior developers. By the time I get called in, all titles are taken. I’m just a measly outside contractor that yaks and horks hairballs at the sight of Subversion and bleeds from all three eyes when confronted with Git. I’m not going to go into Kiln yet, I’m just going to describe what typically gets Mercurial bounced like a superball right out of the room when I bring it up.
Now that I’ve had enough time to recover from our recent vacation, I may as well write about it. We took a well deserved family break this past weekend for a short holiday in Singapore. Like most vacations that we take, it was too short. My general rule for travel is, plan to spend at least one full day and night for every hour you are on the airplane one way. For the three hours we were in the air getting there, we spent only two full nights. I really could have used the extra day just to relax. On to it, for whoever may be interested.
I was a little nervous about going to Singapore. Any American citizen who was not in a coma in 1994 will remember Michael Fay who received four strokes of a cane for vandalism. I wasn’t worried about that per say, I’m not one to cause / get into any trouble. In the back of my mind, however, was a nervousness that I might inadvertently and unwittingly break some local law and end up with a hefty fine to pay (or worse). I hate to admit it, but I’m a smoker and I read in many places that Singapore is a very strict non-smoking country.
I could not have been farther from the truth. Upon arrival, we spent less than ten minutes getting out of the airport. The immigration officer that processed us was extremely friendly and gave our daughter some candies in exchange for a smile. I do a lot of traveling and I was surprised when we weren’t asked the typical “How long do you plan to stay, what is the nature of your visit” sorts of questions.
I stumbled across some news that made my mostly overcast/cloudy afternoon an absolute delight. Tim Bray has joined Google as the resident android pundit. The gloves come off, immediately out of the gate, quoting his blog:
The iPhone vision of the mobile Internet’s future omits controversy, sex, and freedom, but includes strict limits on who can know what and who can say what. It’s a sterile Disney-fied walled garden surrounded by sharp-toothed lawyers. The people who create the apps serve at the landlord’s pleasure and fear his anger.
I hate it.
The decision to sit down and actually learn a mobile SDK for the purposes of (eventually) making some money in the process was one that I did not take lightly. I was excited about the iPhone until I saw the NDA required to even study how to write applications. The idea of an AppStore seemed great until Apple got involved. The market seemed lucrative, but I just had a bad feeling about hopping on that train.
Android needed a front. It needed someone who is actually willing to write code in order to honestly advocate the platform. It needed someone who could explain in less than a normal paragraph what some hour long speeches try to convey: Apple just doesn’t get it. Google did.
I had already decided that I wasn’t going near an iPhone. I don’t need to reiterate lots of sensational press, what remained consistent was that Apple was extremely inconsistent and just too flaky to deal with. I kept thinking about Android, but I held off. I wanted to see that Google was really serious about pushing it before investing time and money into getting proficient. This was enough of a nudge to convince me that its not going to be a waste of time.
Only one problem remains. If I even so much as LOOK at my wife’s HTC Hero with a USB cable in my hand, daggers come flying through the air and ninjas start coming through the windows.