Which Distro? An Introduction to Picking “a Linux”

Every few days, someone on the Linux users group on Facebook posts a question that goes something like this: “I’m new to Linux. Can you recommend a good distribution for blah?” Where blah is usually something like gaming, media, or learning Linux. Like many people who are new to Linux, when I was first exploring the Linux world, I tried out a lot of distros. Eventually, I came to the conclusion that it doesn’t matter which distro you choose. I’ll explain a bit more about what a distro is, what kinds there are, and why it does and doesn’t matter, below.

What is a Distribution?

It’s hidden right in the name, but it’s not immediately obvious: a distribution of Linux is the Linux kernel, packaged up and distributed in a usable form. Linux, by itself, is just a kernel: the part of an operating system that manages the hardware, and provides interfaces for the various pieces of software and hardware that make the computer usable. If you were to just boot the kernel all by itself, the machine would start and do nothing. It would spin the fans and hard disks faster or slower, handle new device connections, and maybe even accept user input, but the computer wouldn’t be usable, because the software that interacts with the user (you) is not part of the kernel – no text terminal, no on screen menus or mouse pointer, no nothing. Once the kernel is running, it spawns other programs that handle user interaction. This is a basic model of operating systems.

So, apart from some basic patches and alterations that the makers of Linux distros might make to their specific release of the kernel, the underlying kernel is basically the same from distro to distro. The difference is in the software they install around it, and that’s also one of the reasons Linux is more customizable than any other popular operating system today. For example, there are quite a few different graphical interfaces that support Linux: KDE*, Gnome, Unity, XFCE – these are all visually different interfaces that function differently. And that’s just a very, very small portion of the desktop environments available. So two different distros with the exact same kernel can look and behave very differently on the surface. This is, to a large extent, how various Linux distros differ: the packages included with the base system, and their initial configurations. Ubuntu and Kubuntu, for example, are two distinct distros, yet they are mostly the same except that Ubuntu ships with the Unity desktop environment, and Kubuntu ships with KDE. One could easily uninstall Unity from Ubuntu and install KDE.

Major Differences: Package Management

Arguably the most fundamental distinction between various distros is the way they facilitate software installation. On a base Linux system with no package manager, the way you install packages is by copying the executable binary and it’s shared objects to the proper locations. This isn’t the easiest or most convenient thing to do, as it doesn’t allow you to easily keep track of what software package is installed where, or what version it is. So most Linux distributions ship with a package manager like apt (Debian-based), yum (Red Hat), portage (Gentoo), or pacman (Arch). These package managers will not only install packages from a central repository – all of which has been checked so that it is compatible with all the other software in the repository – but they will install all the dependencies as well. Everyone who has ever tried to install a package from source on a freshly installed system will tell you that this is a great relief, and saves hours of hunting online for tarballs**.

Which package manager you choose is largely a matter of preference, and this is the basis on which I think you should make your decision. Debian-based distributions come with “apt”, which is – from my biased perspective – a reliable, relatively easy to use package manager. Distribution upgrades (i.e. major upgrades) can be done without nuking the system and starting over, it has support for multiple architectures on the same system (e.g. installing 32-bit packages on a 64-bit machine), and is pretty painless. Even the most frustrating problems can sometimes be solved by throwing around a bunch of apt commands semi-brainlessly.

Red-Hat/Fedora-like distributions (like RHEL, Fedora, OpenSuSE, CentOS, and Oracle Linux) use “yum”, which installs rpm files. The last time I used yum was years ago, so my opinion isn’t worth much in this regard. I’ve heard that you have to nuke a Fedora system in order to do a distribution upgrade – that is, you have to do major upgrades by wiping the system and starting over – but I don’t know if that’s the case anymore. If you’re a beginner, I’d recommend using one of the other options, but this is my wholly biased opinion; take it with a grain of salt (and maybe a trial of Fedora on a VM).

Gentoo (and probably some other distros based on Gentoo) use “portage”. Portage is pretty freaking cool, in that it compiles every single package from scratch. It’s a somewhat agonizing experience (although not as much so on today’s faster machines), especially if you want to install a huge software package like KDE. But the benefit of doing things this way is that every binary on your system is optimized specifically for the box sitting in front of you (or under your desk, or wherever it is you have the thing). It’s more useful if you actually know what you’re doing, and can manipulate the various compiler flags effectively, but I’m sure there’s some speed-up even if you don’t entirely know what’s going on under the hood. Gentoo is my favorite distro for learning the ins and outs of Linux, and if you’re a first-timer and really want to dive into Linux and get a good head start, I can’t recommend enough that you take the time to do a full, manual, Gentoo install. Just… uh… don’t be discouraged if you fail the first time. Or the second. You’ll learn a TON, trust me.

My experience with other package managers like pacman is minimal. I used Arch for a while, and it’s a very nice distro. It’s something of the best of both worlds between Gentoo and more user-friendly distros like Debian.

Smaller Distros

The Internet is replete with smaller distros with funny names, and there are too many to mention. Most of them are offshoots of one of the main distributions I’ve described above, with various configuration changes. There are some medium size distributions as well (Linux Mint, Puppy Linux, etc) which tend to do a pretty decent job, and are sometimes designed for very specific situations Puppy Linux and Damn Small Linux, for example, are designed to be very small and light weight, and are especially useful for booting from a CD or USB key to do system repairs. Linux Mint, in particular, is a refreshing spin on Ubuntu. I tend not to trust the really small distros though (the ones you’ve never heard of with websites straight out of the 90’s), because I’m dubious as to whether they’ll continue to be supported in the future, and whether they’ve been tested thoroughly. There are probably good ones out there, I just don’t shop around too much anymore.

Choices

In many ways, it all comes down to choices, and the number of them you want to make. If what you want is a plug-and-play operating system that isn’t Windows or Mac OS X, go with Ubuntu, Linux Mint, Fedora, or a similar distro that has a one-and-done type install: you pop the disk in the drive, set up your language, time zone, and login credentials, and away you go. These distros have default packages that support most of your day-to-day needs, and it’s fairly easy to install components that aren’t pre-installed. They work on most of the common hardware out of the box, and they have a lot of online support options.

If, on the other hand, you want to make the choices yourself, choose a distro like Gentoo, Arch, or Debian. Gentoo and Arch, in particular, don’t even choose a default desktop environment for you, so you can choose any configuration you want right from the beginning without having to undo someone else’s work. One time, I installed Gentoo only to realize that I had disabled the kernel configuration for my hard drive controller, so the system couldn’t boot: that’s how much control you have. Debian has some base packages that install a very minimal system, as well as some options that will install a lot of common packages for you. It’s more immediately usable than the other two, but allows you to install a minimal system if you want.

At the far end of the spectrum of choices is LFS: Linux From Scratch. You compile the kernel from scratch, and gradually start loading things on the disk until you have a working operating system. I’ve never done this, but it’s always been in the back of my mind. You can find resources for doing that here: http://www.linuxfromscratch.org/

Stability

One last thing I want to mention is stability. Stability is probably the other most important dimension of a distro, and I would be remiss if I didn’t talk about it just a bit. If you’re cycling through different distros exploring the Linux world, you might not care too much about stability. Honestly, if you play around with things enough, you’re going to wreck your distro no matter how stable it is. But if you’re looking installing Linux on a machine you care about, stability is very important.

Because the distro packagers are usually on the same team (or are the same people) as the people who maintain their distro’s package repositories, their attitudes and values contribute to how stable the resulting collection of packages will be. Debian, for example, is know for being fairly conservative and FLOSS (Free Libre Open Source Software) fanatical, which makes for a very stable, very reliable system, and makes it a bit harder to install proprietary software (not much harder, though.) Ubuntu, on the other hand, is less gun-shy, and uses more up to date packages at the expense of a slightly increased probability that their packages will have unresolved bugs. It’s worth doing some research to find out the attitude of a perspective distribution’s repository maintainers before making your final choice.

Stability is the main reason I forsook Ubuntu years ago, and now only use Debian. Ubuntu is the only operating system I have ever installed (aside from Windows) which has crashed during or right after installation***. It’s a great distro that is paving the way for lots of innovation and publicity in the Linux and Open-Source world, and it has become a stepping stone (at the very least) for new users, but I don’t like the way they do choose their packages, and the default packages that are installed. And, if I’m honest, even though it’s a small and easily fixable issue, Unity absolutely drives me up the wall.

Conclusion

Hopefully this will help you choose the distro that’s right for you. You should play around with a few of them and read up on them (Wikipedia is a great place to do this) before picking the one you intend to use for ever and ever… and always know that you can change your mind at any time. As you learn to use Linux, you’ll likely realize that you wish you had done certain things differently during your installation, so you’ll likely be itching to re-install after a while anyway.

If you’re curious, as you might already have guessed, I install Debian on everything I get my hands on: my desktop, my parents computers, Raspberry Pis – hell, I’d install it on my toaster if I could. After administrating around 20 Debian machines during my two years as a SysAdmin, I’ve come to appreciate its elegant simplicity and robustness, and I wouldn’t replace it with Ubuntu if you paid me. But that’s just my opinion; I encourage you to draw your own.

*It has been pointed out – and rightly so – that the K Desktop Environment (formerly referred to as simply “KDE”) is now properly called “KDE SC”, for “KDE Software Compilation”. For simplicity, however, and since it is still referred to in the Debian repository and popularly as KDE, I’ve left the incorrect acronym as is.

**A member of the Linux Facebook group pointed out that newcomers to Linux might not know what a “tarball” is. Tarball is slang for an archive compressed using the unix tar utility, usually with the extensions .tar, .tar.gz, or .tar.bz2. Source code for many open source packages come packaged in a tar archive.

***It’s true, I’ve had many a Gentoo installation crash on me on or before startup, but that was always because I had done something stupid, and was entirely my fault. The same opportunity doesn’t really exist in Ubuntu; I’ve had installations crash once, and succeed after installing again with the same options for no discernible reason.

Projects: I Need Them

Yesterday, I went to McGill’s Tech Fair. All manner of companies were there, scouting talent and taking applications, looking for young students who need jobs. Needless to say, they found plenty, and I was one of them.

It was the first time I had ever been to the Tech Fair, and I wasn’t entirely sure what to expect. I’ve been told my CV is impressive, but I didn’t know what companies would be looking for, or even what – exactly – I was looking for. Among the myriad mining companies (I counted around three gold mining companies) and engineering firms, I managed to find a few software companies that interested me. I chatted, asked questions, and tried to make myself seem knowledgeable, curious, and passionate. The one question I wasn’t prepared for, however, was the question I expected to be the most prepared for: what projects have you done lately?

I’ve always thought of myself as someone who does projects. I’ve always done projects. Ever since I was a kid, I’ve been building things, even to the detriment of my own schooling. I have all but four volumes of Make Magazine that have ever been published. MacGyver is my hero. On any given day, I would rather code for five hours on one of my own projects than for one hour on an assignment for school, and yet I couldn’t think of a single project that I have done recently for my own interest, and of my own volition.

This realization has been a long time coming, I think. School and extracurricular activities (read: work) have sucked up a lot of the time I would ordinarily spend hacking and coding. And when I’m not studying or working, I’m usually too lazy and worn out to start working on something else. Sure, I’ve written some little programs here and there on the weekends or over the summer – coding is a part of life for me – but I haven’t really built any of the super cool, outlandish, crazy awesome projects that I used to build when I was younger and cared less about school. And that’s a shame.

So today is when it changes. This evening, I’m going to blow a TON of time that I could be spending on a DOZEN other things, writing a program that I’ve wanted to write for a few weeks. I’m not going to finish it tonight – I may not even finish it in a week, a month, or a year – but I’m going to start it, and I’m going to have fun. I’m going to tap into my passion again: I’m going to focus on what’s important.

Valentine’s Day 2013: What Twitter Thinks About Love

Every year, I create some sort of computer art project for Valentine’s Day. This year, I created another video, and I think this may be the coolest one yet.

Two years ago, my video was an attempt at capturing the spirit of valentine’s day by processing a video I took on my bus ride to school. I wanted to go back to that theme this year, but the whole “searching for colors thing” was played out. This year, I decided to get my computer to describe love.

Basically, I had my computer suck down every tweet on Twitter for a certain time period that had the word “love” in it, and then processed it, looking for the most common chains of words. I did this using a method called Bigram Probability, which basically calculates the probability of one word coming after another in a sentence. The more often the word “you” comes after the word “love”, the higher the probability assigned to the word “you” coming after “love.” It’s simple enough, but it produced some beautiful results.

Because of this method’s simplicity, I had to do a little “post processing,” which involved taking out the garbage sentences that the program produced. In the end, this became “picking the good ones.” Now, that’s not to say that I’m only picking the cute ones. No no, I’m picking the ones that are grammatically correct; the computer is doing the cute all by itself. Or rather, Twitter is.

Then I shot some video of a hike to the top of the mountain (story after the video,) added the text over it, and set the whole thing to some awesome music by Broke For Free that I found on Free Music Archive.org.

Before we get to the video, let’s have some stats. Of all the words the computer processed, the most common (other than love, which was the search query,) was “I”, and the next most common was “you.” Starting with “I”, the sentence with the highest probability was “I love you”. (D’awwwww.) The most common word after “you” was “love,” but if we ignore that one (because it creates an infinitely cute loop of infinite “love you”s),* the next most common sentence was “I love you too.” And if you think it’s cute that the sentences with the highest probability resulting from a search for the word “love” on Twitter are “I love you” and “I love you too,” wait until you see the ones I used in the video.

Note that the video is a bit shaky. If I had a better camera and/or a Steadycam, I might have been able to record more stable footage, and track the text better. The music is by Broke for Free.

A Story

As I walked up the mountain, I was honestly worried that the video would be a little boring. The computery stuff is cool, and I love playing with video editing sofware, but my idea for the background footage seemed a bit boring. Fate brought me the heart-shaped balloons in the trees, which I thought was a pretty cool end to my journey. But actually, that was the beginning of a different, far more exciting journey.

Coming from the direction of the heart-shaped balloons (make of that, symbolically speaking, what you will,) I heard the song “If I Had a Million Dollars” by the Barenaked Ladies. It seemed to be coming from the woods, but I had no idea who would be playing music that loudly near the park. I thought about trying to find it, and then decided against it. As I was leaving the great patio that forms the lookout on the mountain, something turned me back. Where’s my spirit of adventure, I thought to myself. So I turned about face, and I went in search of the music.

Because I value the integrity of my limbs, I decided against filming my hike through the woods and snow, which took place entirely off the paths in the park that are maintained during the winter (the first thing I did was boot-ski down a staircase that was “closed for the winter”) and mostly off the few paths beaten into the snow by other daring travelers.

I ran through the woods, slid down slopes, and hung on to trees. It was an exhilarating feeling. I’ve always loved running through the woods, and I haven’t done it in a long time. Every so often I would stop, prick my ears, and listen for the music. Sometimes it would fade out, and I had to try to head toward where I thought it had been the last time. My best guess is that someone had set up an outdoor skating rink, as towns and schools commonly do in Quebec during the winter, and that they were playing music for people skate to. But I didn’t come across a skating rink.

Eventually, I reached the road. There was no sign of the music, or where it was coming from. I knew where I was, and I had an appointment in an hour and a half, and I thought I’d head back. The adventure was fun, and I had gotten something out of my search, even if I hadn’t solved my puzzle. So I started walking home, and after a block or so, the music piped up again. It was louder this time. I could tell that it was bouncing off the buildings, so it was hard to say exactly where it was coming from. I hesitated, then took my best guess and started after it again. As I walked down the street, the music got louder, and louder, and louder, until I could finally see where it was coming from.

It was coming from a protest at the Montreal General Hospital. One of the unions there is on strike, and they were picketing and playing music. My mystery music was coming from an amp strapped to the back of a pickup truck. The mystery was solved.

It’s amazing how, sometimes, if you look hard enough, life gives you exactly what you want. I was cranky that day, my mood sharpened by not wanting to get out of bed, and my usual frustration with the commercial assumption that all people everywhere are paired off on Valentine’s Day. Something was telling me, right before I had started my trek, that life was holding out exactly what I needed at that moment. And whether you believe in fate, God, synchronicity, or probability, I felt that one or all of them were giving me an opportunity; a free pass to improve my mood and learn something.

The lesson I learned (or relearned) is this: what you’re looking for is out there somewhere. It applies very well to those of us who are single during this season, and to love, but it also applies more generally to any other pursuit in life. You’ll hit rough patches, you’ll get lost, you’ll have fun, you’ll face adversity, and maybe you’ll even give up a few times, but if you keep your ear to the ground and your goal in mind, you’ll find what you’re looking for eventually.

*Those familiar with bigram probabilities will probably realize that there shouldn’t be repeats. However, the data structure I used to store the bigram probabilities made the usual manner of iteration somewhat difficult, and I wanted to allow some repeats.

How to Heat Your Livingroom with Computers

It’s time I explained what all this cluster computer stuff is about. It’s kind of an insane project, but bare with me. Some of you may have played the Wikipedia game “Seven Steps to Jesus.” Basically, it’s a special case of the Wikipedia game Wikirace, where you try to get from one article to another as quickly as possible. In Seven Steps to Jesus, you try to get to the Wikipedia article about Jesus in seven clicks or less. Why Jesus? Why seven? Who knows, who cares. But the point is, that it’s fun for about ten minutes.

This ridiculous game wandered into my mind the other day, and I started thinking, “I wonder how you could create a computer program that would play Seven Steps to Jesus…” The answer depends. If you give the program access to the entire Wikipedia database, then the task is trivial. It’s very simple and quite fast to spit out the minimum number of steps from one article to another. But what if you don’t give the program access to the entire Wikipedia database? What if it has to go to an article, and choose which link to click just like humans do: with “intuition?”*

As you might have guessed, the task becomes more complicated. Now we’re talking about machine learning (FUN!) I started to think about how you could train an AI to assign a “relatedness” value to every given article on Wikipedia by giving it access to the Wikipedia database, and having it traverse the links from one article to another. If you’ve taken a class on AI, you know that eventually, this relatedness value will converge to the shortest path. Basically, this program will do nothing useful… except heat my living room.

Except! Except that I’m going to train an RL agent in parallel. That’s the only thing that might be novel about this (other than the fact that I’m introducing the “Seven Steps to Jesus” task to the AI world.) Ordinarily, you would want the agent to learn sequentially, because if the links change, you want the agent to learn with the changes. But in this case, I really don’t give a damn about sequential updates. Also, this task is stationary (the distance between any two articles in my downloaded Wikipedia database will never change,) so updating sequentially doesn’t matter all that much.

So what you should get from this, is that this project is a HUGE waste of time. But it’s fun, and I’m learning about graph databases, and RMI, and I got to build and run a computing cluster. Maybe there’s a real task for which this approach is suited. I’m not sure though. Usually in RL, you have to run a trial many times in order to test an approach, so there’s really no point in distributing the actual processing. In other words, if you’re going to run 100 trials of your schmancy new algorithm, you might as well just run one trial on five different machines until you finish, rather than splitting up the computation (which adds overhead,) into five different parts.

The point is, I’m having fun. Leave me alone.

Discipline Week Update: Today was day four of Discipline Week, and so far so good. I’ve been trying to avoid napping, because I want to really embrace this 7am to 11pm schedule I’ve got going, but today I really needed a nap. I ended up sleeping for maybe an hour and a half, which is really too much, but we’ll see how things go tomorrow. I’ll write a more detailed post tomorrow about how Discipline Week is going, but I thought I’d let you know that it’s still a thing, and it’s going well!

*Yes, there are algorithms that do this quickly, but you’re still missing the point: the point is, this will be fun. Fun, I tell you, FUN!

My Livingroom Is A Supercomputer

As a Computer Science Student, I like the idea of being able to run my code on the biggest, baddest computers there are. Unfortunately, most of my code doesn’t need more than my laptop. In fact, many of the programs I write would run just about as well on my phone, or an Apple II. However, sometimes I do write programs that require gobs of raw computing power. Last night, I conceived an idea for just such a program. Before I even started programming, I realized that my only hope for finishing computation on the large dataset I wanted to process (all the links on Wikipedia, many times) was to spread the computation across multiple computers. I needed a cluster. So I built one.

A cluster (short for computing cluster) for those who don’t know, is basically a bunch of computers connected via a network. You could think of the Internet as a computing cluster, but the important difference between the Internet and a useful computing cluster is that a useful cluster works toward a unified goal. As you might have guessed, part of the beauty of a cluster is that the computers involved don’t have to be all that powerful by themselves to be useful. Because my family doesn’t usually get rid of computers (precisely for occasions such as this,) we had three old laptops lying around, all of which I confiscated for my cluster. Add my laptop to that, and I have a cluster of six cores. It’s not a whole lot, but it may just be enough. I also have an old switch (what most people would call a “router”) that I saved from the trash during high school, which I’m using to connect the computers together. After installing Debian Linux, and puppet to manage the configurations on all the machines, I’m almost ready to run cluster computations!

In order to run a cluster, you need a server to distribute the data you want to process, and clients to actually do the processing. In this case, I’m talking about the server and client software, not machines. So I have to write a series of programs that will split up my data and process it on each of the cluster computers. It’s simple enough when you use Java’s RMI (Remote Method Invocation.) The server maintains a collection of the processed data, which is updated whenever the clients finish processing. Once the client has finished its data, it sends back its results and requests more data.

This strategy has a lot of advantages, including the fact that I don’t have to store the entire Wikipedia database on more than one machine. Since the data is sent in chunks, I can store it all on one of the two computers in my cluster that can handle that much data. Also, the clients can work asynchronously. Since the computers don’t have to wait for each other before getting new data to work on, my laptop can crunch along at 2.53GHz per core, processing as much data as it wants, while the poor little AMD Athlon slogs through whatever data it can handle.

My livingroom table, which currently houses four computers and a switch. Delightful.

My cluster is called “End of the World,” or EotW for short. I was trying to think of a theme for the hostnames of the computers in the network, and I settled on character’s from Haruki Murakami’s novels. Since there’s a “place” in his book Hard Boiled Wonderland and the End of the World called “End of the World,” I figured that would be fitting. The nodes are named toru, watanabe, and sumire.

How much did all this cost? $20 for a power strip. Even if I didn’t have all the laptops, I could have waited until the morning, gone to the recycling center, and picked up a bunch of computers and a switch for free. That’s what I love about cluster computing: with just a little recycled hardware, you can create a pretty fast computer. It’s true, my tiny computing cluster barely rivals a new, mid-line desktop computer with an Intel Xeon processor, but it’s still faster than just my laptop. And hopefully, with all those computers working full tilt for a few days, I’ll be able to crunch through my data*.

 

*As I said before, I’ll discuss what I’m trying to do at another time. Trying to explain it here would make this post too long, and I want some tangible results before I start talking about it.

Having Faith in Chaos

It’s been a long time since I’ve written anything here. I could say it’s because I’ve been busy, or because I haven’t had much to say lately, but the truth is that I’m burnt out. It’s that time of the semester when doing anything I’m supposed to do takes me at least a week, if I have that long. Around this time of year, I start to feel boring. The overwhelming number of projects that fly around in my head causes the rest of my life to pale in comparison. But I know that as soon as exams are over, and as soon as I can go on a TV, staying up until 4am, and sleeping until 2pm binge, I’ll feel better. To alter a quote fromAndromeda, one of my favorite TV shows of all time: School isn’t the best way to get a degree, it’s just the only way to get a degree.

So let’s talk about the future. I wrote a few other drafts before this one, but this is what’s really going on, and it’s what I really want to talk about.

Whenever it comes up in conversation, I ask other students what they want to do when they graduate. I’ve asked this question to a good-sized handful of people, and the answer is almost invariably “I don’t know.” I may have blogged about this before, but I find it really interesting (and comforting) to know that lots of people are in the same position. Some people tell me that they’re going to graduate school because they need more time to figure out what to do with their lives, and why not study in the meantime? Most people I’ve talked to have a few ideas about what they want to do, but they seem like distant possibilities rather than concrete options. And in many people’s voices, when they tell me about their potential future plans, I hear a bit of reluctance to think about the future. Or maybe I’m just projecting my feelings onto them.

My story is this: I’m a Computer Science major. The career path I want to follow has changed every semester since I’ve been at University, and I imagine it will continue that way until the day I graduate, and possibly afterward. For most of this semester, I wanted to do a PhD in Artificial Intelligence. That could lead me to doing research, or working for a company like Google, IBM, Oracle, or a variety of other tech companies. The problem is that I’m also learning how much I don’t like math. I like math, but I have to be in a math sort of mood to enjoy it. And most of the time, I’m not in a math sort of mood. There’s a lot of math in AI. But there’s also a lot of opportunity for cool applications of AI like robotics and space exploration.

The idea that comforts me at times like this, is that I can always forget my degree and open a restaurant. Or I can work some job that my degree will allow me to get, start writing on the side, and use my degree as a safe transition into the professional writing world. It’s comforting to know that I have the skills to do something completely outside of my current education, and I don’t think I would have that without my theater experience, and without a string of fantastic English profs throughout my schooling.

I’ve also talked to several people who have already graduated. A friend of my parents studied business, and spent years running his family business before deciding to become a reverend. My dad majored in Organic Chemistry, and now he works with financial systems. It seems there are plenty of people who start working in their field, decide it’s not for them, and pursue something else. I suppose the light at the end of tunnel is that you can always change your mind.

When you’re faced with the question of what to do with your life, it’s easy to lose sight of the fact that life is a fluid sort of thing. I don’t identify with a particular religion, but I do believe that in some way – whether governed by God or physics – the universe throws things at you that you wouldn’t expect, and that often those things help you get to an even better place than you were before. In AI this would be called hill-climbing with random restarts: you start somewhere, and you try to make the best of your current situation. Soon, your situation will change, and you have to continue trying to make the best of the new situations as they come along. Sometimes you’ll do worse, sometimes you’ll do better, but hopefully the trend is generally upward. It helps to realize that life is always changing, and if you’re unhappy where you are now or where you’re going, something will certainly change soon. As scary as it is, it’s comforting to have faith in something, even if all you have faith in is the constantly changing nature of the universe*.

*In Andromeda this is called Wayism, and I’m sort of disappointed that it’s not a real religion.

Geek Tip: Volume Controls in wmii

wmii is awesome. wmii will change your life. wmii will change the way you think about working with a computer. It will help you stay focused, it will teach you more about how your computer works, and encourage you to solve problems on a scientific level, rather than a “maybe if I do this it will make the magical elves in my computer do what I want them to” level. It will make the time you spend on your computer more enjoyable, less cluttered, and more efficient. At least, it has done all these things for me. wmii is a window manager (layman’s terms: a desktop) that is minimal, functional, and efficient. It’s one step above the terminal, and doesn’t provide anything you don’t really need. But the fact that it’s highly customizable, keyboard controlled, and very efficient makes it ideal for computer geeks like me. One thing I’ve been pondering about lately, is how to make the volume keys on my keyboard work. I figured there would be an easy solution, and there is.

First, if your keyboard has dedicated volume keys, then they’re called “XF86AudioRaiseVolume” and “XF86AudioLowerVolume” unless something has gone wrong. More generally, to figure out what wmii (and other X11 applications) call the keys you want, run xev from the terminal, press the key in question, and look for the line that says (keysym 0xsomething, Something). In this case, the Something is the name of your key. Next, edit your wmiirc (usually in ~/.wmii-3.5/wmiirc, or you’ll have to copy it there from /etc/X11/wmii-3.5/wmiirc,) and find the section that starts with #Key Bindings. You’ll see a few lines that have the syntax

Key Something

command

You should enter your keys in exactly that format. For the volume keys, I wrote this:

Key XF86AudioRaiseVolume

amixer -c 0 set Master 2%+

Key XF86AudioLowerVolume

amixer -c 0 set Master 2%-

Press Mod-a and select wmiirc to reset wmii’s configuration file. Done. Enjoy your volume keys.

Tip: you can also use wmiirc to – besides changing just about anything related to wmii’s functionality – change your desktop background to something that isn’t just gray. Install feh (not necessary, but it makes things easy,) comment out the line in wmiirc that starts with “xsetroot “, and add “feh –bg-scale /path/to/background/image &” Done.