My Google Interview
Its been a while now, but here it is anyways...
About six or seven weeks ago, I scored a phone interview (technically two) with Google's IT department for a summer internship. Nobody was more surprised then I was that Google actually found my resume somewhat impressive enough to warrent a phone interview, especially considering my less-then-stellar GPA and the enormous number of super-intelligent applicants Google recieves every day. The two interviews were each forty-five minutes long, and the interviewers (both intelligent IT guys, and not technically incompetent manager types) took pretty much all of the alloted time.
These days, almost every CS guy dreams of working for Google and so I've heard a few things about their interviews before, which I would like to mention before I get into my interview. A few years ago when I was an intern at Intel, they had a lady come in to tell all the high school interns about how to be successful in scoring future jobs. She spent a lot of time teaching us how to walk properly, shake hands, sit in a proper manner, dress, and answer generic interview questions. She told us that Google interviewers like to ask broad open ended questions like "how would you sell ice to an eskimo" and "why are manhole covers round," and promptly put us to answering similar questions. A few months later, I went to a Google Tech Talk at my University, where a Google software engineer was asked by someone in the audience if Google did in fact like to ask interview questions like "why are manhole covers round." The Google rep resonded with the following:
"In my time at Google I have interviewed several software engineers and I have never asked a question like that before. Google is not in the business of making manhole covers. If we did make manhole covers, we might ask those kinds of questions."
I think occassionally, a Google interviewer might throw in a brain teaser if they just want to burn some time, but apparently they don't do it too often.
Anyways, going on to my interview... I was interviewing for an IT position, so unlike the software developer positions where they barrage you with an endless stream of algorithim and programming questions (Why is quicksort log(n)? Whats the best sorting algorithim to use in this scenario? What data structure would you use for this? etc.) there was almost no programming invovled in my interview. And since the recruiter and HR person told me pretty much nothing about what I should expect, I went into the interview pretty much cold.
Goo on Linux
Several weeks ago, I saw an article on digg about World of Goo being ported to Linux. My roommate happened to see it too, and knowing that I was a Linux user, told me that I should download it and give it a try since it apparently gained a good reputation on the Wii. I have to admit, I was a little excited to give it a try, especially because the Linux world isn't exactly overflowing with a wealth of good games (seriously, Sudoku and Mahjong don't really count).
I'm not exactly sure why 2D Boy, the makers of World of Goo, decided to port their funky game to Linux, but I'm not complaining. One thing that people should note however, is that although Goo is DRM free (yeah!!) it is not totally free, getting it legally will cost $20 (US). I know that there are a few Linux users that turned to Linux specifically because it is free, and they expect that all their software should be totally free and open source. Unfortunately, the two guys at 2D Boy have to make a living, and since they've managed to make a good product I have no qualms forking over a small fee to play the whole game.
If you're not quite ready to put some money down (like me), you can of course download the trial version (like I did), which will allow you to play through the first level (which I did). The Linux version comes available as debs, RPMs, or just good-old tarballs (and Arch user that I am, I went with the tarballs). I was expecting that Goo wouldn't work right out of the box and would require some tweaking to get it to work, but surprisingly all I had to do was untar and run the binary inside, and Goo was up in an instant. So props to the developers and testers for a job well done. And of course, the game was actually surprisingly fun, despite the fact that on first impressions it looks like a cheesy, kiddy game. I'd highly advise that Linux users give World of Goo a shot.
Linux and Me
I was first formally introduced to Linux during my junior year in high school by a friend who had seen someone else run it. At this in my life, I considered myself to be a geek and computer lover, but in reality I knew very little about computers; my experience was limited to some Microsoft Windows XP, C++ and HTML, and building my own computer. I became interested in this "new" operating system, entranced by the idea of free and open source software and jealous of the high geek status granted to Linux gurus, for it seemed as though all the "cool" people ran Linux.
I borrowed some Mandriva CDs from my friend, used Partition Magic to resize my Windows NTFS partition, and installed Mandriva Linux. The experience was nowhere as delightful as I would have liked; my ATI Radeon graphics card failed to mesh properly with Xorg and instead of booting into a cool new glossy interface, my computer dropped to a shell, spat cryptic error messages to the screen, and then calmly prompted me for a login name. I spent the next few days shifting from my parent's computer to my own, trying to find a way to fix X and boot into something that I might be able to understand. I typed into the shell dozens of commands, scrounged from various forums and install guides, hoping that one of the seemingly random strings of characters would be my savior. But my attempts were futile, I had no idea what I was doing, and didn't even bother to try to understand what was going wrong. Eventually, I got so fed up with Mandriva that I gave up and went back to using XP.
I spent the next few month with Windows, sometimes scrolling through random threads in Linux forums and reading little tidbits about the operating system that had failed me, when I decided that perhaps it was time to give Linux another chance. At that time, Fedora and Ubuntu were the user-friendly distributions of choice, and so I spent a few days debating between the two. I ended up downloading Fedora simply because at the time, I thought Fedora Core was a much cooler name then Ubuntu. Maybe it was because the version of Fedora I was using had a newer kernel then the Mandriva CDs my friend lent me, but Fedora installed and booted without a hitch. I was cruising the web and ripping music almost immediately, and it didn't take long for me to discover the wonders of Beryl and the spinning desktop cube. It was hard not to fall in love with Fedora. It was faster and lighter then Windows XP, could do things that Windows wouldn't even be able to compete with for a few more years, and it improved my geek cred immensely.
HFS+ and Linux
In a talk that Linus Torvalds gave in February this year (2008), Torvalds claimed that Mac OS X's file system is "complete and utter crap, which is scary." That was the first time I ever heardabout Mac OS X's file system.
One of my roommates is a Mac user and is quite ignorant of almost all things technical. Recently, his hard drive crashed and he had to send his shiny Macbook Pro to a company that specialized in data recovery, and so he is currently without a computer. He does however still have a working external hard drive that contains a plethora of videos, and so yesterday I asked him if I could borrow his hard drive and look through some of his videos. He told me that I wouldn't be able to use his hard drive on my computer because one of his roommates last year, "reformatted it in a special way so that only Macs could read it."
Having read a little into Apple's file systems, after Torvald's comment earlier this year, I hypothesized that my roommate's hard drive was using Apple's HFS+ file system. Linux has surprisingly good support for various different file systems, even Microsoft's proprietary NTFS, so I knew that it was extremely likely that there existed a HFS+ driver for Linux. So I told my roommate, "don't worry, I don't have a PC, I'll be able to read it just fine." It was a little presumptuous of me to think that I wouldn't encounter any issues with mounting a HFS+ drive, but I have great faith in the Linux community.
I plugged his hard drive into my laptop, turned it on, opened xterm and typed:
fdisk -l
Fdisk listed his hard drive as /dev/sdb, but it also said that the drive's file system was unrecognizable, which I rather expected. A five-second Google search revealed that the modules for HFS and HFS+ are called "hfs" and "hfsplus." So I went into xterm again, and tried:
modprobe hfsplus
mount -t hfsplus /dev/sdb /media/hd
And the drive mounted without a problem.
According to SourceForge the hfsplus module offers full support for HFS+ file systems. So, yeah! Go Linux!
Crazy Linux Man
Large college campuses seem to attract radical street-corner speakers in the same way free food attracts college students. I've gotten pretty used to the badly-dressed ranters that like to bother students on their way to class, so I took almost no notice of a particular one that I saw today. But as I walked past him, I noticed that he had a white towl slung across his back, and written on the towel were the words "GNU/LINUX IS COOL."
I've seen and heard a lot of crazy street-corner speakers, but never have they stayed from the time-tested topics of social, political, racial, religious, or economic issues. Never have I heard one of them harangue the multitudes about operating systems. While there does tend to be a light strife over the superiority of operating systems, I don't think I've ever seen someone so inflamed over an operating system (except possibly Richard Stallman, whom I have never actually seen in the flesh).
I was briefly stunned when I realized that the scruffy screamer was actually talking about GNU/Linux, but my shock quickly turned to disappointment. Because I didn't have a camera (This is why I need a camera phone with good resolution!) and everyone knows that if you don't have pictures, then the event never happened.
Deciding that I wanted to find out more about the Crazy Linux Man (whom I shall now call CLM, for short) I walked over and struck up a conversation. I'm a little vague as to how exactly it went, but it was a little something like this;
Me: So you're a Linux user, huh?
CLM: Well I'd like to be a Linux kernel hacker.
Me: Oh, really? Thats cool.
CLM: Yeah, I'd like to get into the code for the kernel and really find out how that stuff works.
Me: Yeah, thats cool>
--- Some ramble babbling went on here, most of it unimportant.
CLM: I could show people how to make really stuff, not like stupid useless things, but cool stuff like 3D games.
Me: (And then I thought: Sheesh, then you should probably go bother the engineering and science students, and not the little high school children taking tours.) Thats cool... Well have, I have to go, but good luck to you.
CLM: Thanks.
So CLM really was quite crazy and fairly incoherent. And talking to him just left me more confused as to his intentions and purpose.
My Roommate on Linux
All of my roommates this year have new-ish Intel Macs, and they all love the shinny Apple products. Last night, one of my roommates that I didn't know quite as well, remarked on my laptop. I was tying a few simple commands into xterm to mount my external hard drive, when my roommate noticed and asked me what those strange things I was typing were. I told him that the command line used to be the interface through which people interfaced with computers, that it worked by typing commands into a prompt and then hitting enter, and that the terminal was actually a very powerful and useful tool.
His comment, was, "wow, your laptop must be pretty old." Which is pretty funny, considering my laptop is newer then his. But after that we had to go to sleep since we had early classes, and so I lost the oppertunity to correct his errors.
It really is sad how little most people know about computers.
Why I Use Linux
(Yeah, I know I should be saying "GNU/Linux" blah blah blah. Please feel free to shove your head in /dev/null and rant.)
Why Linux? I think every Linux user gets asked that question sooner or later, and just about every Linux blog has a post titled something like "10 Reasons to Use Linux," or "Five Reasons Why Linux is Better Then Windows." It would be quite difficult for me to compress all my reasons for loving Linux into a tidy little list, because the reasons tend to be quite numerous and I doubt that once I was done anyone would want to read it (Also, I don't like writing stupid cliched posts.). So instead, I'll give one reason why I use Linux. Its not my strongest argument for Linux (or my weakest for that matter) and I don't think its of the upmost importance, but its still a pretty good reason.
I use Linux because its easy to use.
And now every Windows user reading this is laughing and screaming insults at me. "Linux isn't easy to use, you f*ing moron! I tried to use Ubuntu and I couldn't even get it to boot. Linux is so weird and hard to use, you need to read twenty pages of documentation before you can even partition the hard drive. I spent three weeks messing with Linux and I couldn't get my sound card to work." Blah blah blah. The reasons and examples why Linux is so hard to use are almost endless.
But yes, I do think Linux is easy to use. Just about everyone that says Linux is hard to use will inevitably claim that Mac OSX or some version of Windows, which is what they're probably used to, is infinitely easier to use. People that migrate to a new environment are often startled by the strangeness of the unfamiliar, and even thought the new world may potentially offer improvements over the old, most people would still rather huddle in the warm and comfortable skirts of that which reared them. Windows users find Windows easy to use because its familiar, its what they've used for as long as they can remember and they've grown intensely fond of the inappropriately named "start" menu ( 'course Microsoft finally went ahead and gave it a new name in Vista). Lets face the facts people, Windows is only easier to use because its what you're used to, if you had grown up with Arch Linux and Enlightenment you'd probably find Windows Vista (and Mac OSX for that matter too) to be a terribly confusing operating system.
I didn't start using Linux because I thought it would be easy; I was actually expecting it to be quite difficult and it was. Initially, I had to teach myself to think and operate in a slightly different way, and to get used to typing strange commands into a terminal, but I quickly got the hang of it and within a week Fedora Core had become my default OS. I loved how easy it was to install and remove software, how i could perform powerful acts quickly with a terminal, and the vast number of software choices offered to me. But what really made Linux easy, was the fact that any problem in Linux could be fixed. I used to work as an intern in the IT department of a large company, and it always surprised me that the inevitable solution to a deadly Windows problem, was to simply reinstall the OS. Windows "experts," no matter how good they were, simply didn't know of any way to fix a reoccurring blue screen or similar problem. With closed source software, problems generally can only be resolved by the vendor, and if the vendor company is feeling cheap or lazy, the user is pretty much screwed. In Linux, a solution to a problem almost always already exists, and if doesn't, it can quickly be found.
So go Linux. The easy OS.
A Simple Arch Review
I once thought that Debian, with its rock solid stability and simple package management, was the answer to my distro-hopping madness, and that no other distro could fit my needs as well. But Arch Linux has managed to surprise me, satisfying my needs in ways Debian never could. (Did that sound weird and strangely sexual or what?)
The Arch Way, the five governing principles behind the development of Arch Linux, dictates that Arch should be: simple, have code-correctness over convenience, open, user-centric, and free. Elaborating on the principles would be too time intensive for this review, but the general gist of The Arch Way is the age-old engineering adage, KISS (Keep it Simple Stupid). And Arch is simple. Most Linux distributions that claim to be simple, like Ubuntu or Mandriva, are merely simple to use for new Linux users, but Arch is a minimal, streamlined, and elegantly simple distro. Like Slackware, Arch's base installation is quite Spartan, including only the kernel and the bare minimum packages needed to create a stable OS, requiring the user to do all the rest of the configuring and installation of non-essential packages.
Happily enough, unlike Slackware, Arch uses binary packages compiled for i686 so that users don't have to compile their programs from source (not a very difficult process usually, but quite time consuming). Because Arch's packages are optimized and compiled for newer i686 CPUs, users can expect a noticeable performance increase over distributions, like Debian, that use i386 packages. However, this also means that Arch will require a slightly newer CPU, a Pentium 3 or newer, whereas Debian can run on any 32-bit Intel-based processor. Arch also offers a 64-bit version, in addition to the 32-bit i686 version, if you want to be able to add more then 4 gigs of RAM to your system.
Arch's package manager, called "pacman," is reminiscent of Debian's "apt-get" and just as easy to use. Pacman can handle the installation, removal, and upgrading of programs, and also resolves dependencies with a single simple command. If I want to install Banshee music player, all I have to do is open a terminal, become root, and type "pacman -S banshee." Pacman also allows for Arch's rolling release system, a system based upon on incremental upgrades. Unlike so many other Linux distributions that make a big fuss about new releases, Arch's release version is essentially meaningless; a release ISO in Arch is simply a snapshot of the core repository with a fairly simple installation script. In order to upgrade my system to the newest kernel and software packages, I merely have to type "pacman -Syu" to fetch the newer packages from the repositories, so that even if I had used the three year old Wombat release, after an update my system would still be as up-to-date as if I had used the new Overlord release.