Problem: I am a human being

A relevant excerpt:

“If you are a person who has come of age during the time of ubiquitous internet access and github, you cannot know what having access to the source code of an entire operating system meant in the mid 90s. When I saw the impact this access had on my own life in the coming years, I began to view closed source software as unethical. In a society that was increasingly mediated by software, restricting access to learning about software works is in my opinion a means of control and subjugation.”

For me, growing up in India, that time was the early 2000s. My first Linux distro was Ubuntu, thanks largely to Canonical shipping out Ubuntu CDs to people around the world, something that seemed like a ludicrous idea at the time.

I wouldn’t be where I am without free software (both free as in beer, and free as in freedom). Also, Star Trek.

Ubuntu should zig to Apple’s zag

It’s another October and that means it’s time for another Ubuntu release. Before I say anything, I want to make it clear that I have the utmost respect for Mark Shuttleworth, Canonical and the Ubuntu project in general. I think they’ve done wonderful things for the Linux ecosystem as a whole. However, today I’m siding with Eric Raymond: I have deep misgivings about the direction Ubuntu is going, especially in terms of user interface.

I’m not a UI or UX designer. I’m sure there are people at Canonical who have been studying these areas for longer than I have. But I am a daily Linux user. In fact I would say that I’m a power user. I’m no neckbeard, but I think that by now I have a fair grasp of the Unix philosophy and try to follow it (my love for Emacs notwithstanding). The longer I see Ubuntu’s development the more it seems that they are shunning the Unix philosophy in the name of “user friendliness” and “zero configuration”. And they’re doing it wrong. I think that’s absolutely the wrong way to go.

It seems that Canonical is trying very hard to be Apple while not being a total ripoff. Apple is certainly a worthy competitor (and a great source to copy from) but this is a game that Ubuntu is not going to win. The thing is, you can’t be Apple. That game has been played, that ship has sailed. Apple pretty much has the market cornered when it comes to nice shiny things that just work for most people irrespective of prior computer usage. Unless somehow Canonical sprouts an entire ecosystem of products overnight they are not going to wrest that territory from Apple.

That’s not to say that Canonical shouldn’t be innovating and building good-looking interfaces. But they should play to the strengths of both Linux the system and Linux the user community instead of fighting them. Linux users are power users. In fact I think Linux has a tendency to encourage average computer users to become power users once they spend some time with it. I would love to see Ubuntu start catering to power users instead of shooing them away.

It’s becoming increasingly clear that Apple does not place its developers above its customers. That’s a fine decision for them to make. It’s their business and their products and they can do whatever they like. However as a programmer and hacker I am afraid. I’m scared that we’re getting to the point where I won’t be able to install software of my choosing without Apple standing in the way. I’m not talking about just stuff like games and expensive proprietary apps, but even basic programming tools and system utilities. That’s not something that I’m prepared to accept.

Given the growing lockdown of Apple’s systems, Canoncial should be pouring resources into making Ubuntu the best damn development environment on the planet. That means that all the basics work without me tinkering with drivers and configurations (something they’ve largely accomplished). It means that there’s a large pool of ready-to-install software (which also they have) and that it’s possible (and easy) to install esoteric third-party tools and libraries. Luckily the Unix heritage means that the system is designed to allow this. Instead of trying to sugar coat and “simplify” everything there should be carefully thought-out defaults that I can easily override and customize. Programmability and flexibility grounded in well-tuned defaults should be the Ubuntu signature.

It makes even more sense for Canonical to take this angle because Apple seems to be actively abandoning it. A generation of hackers may have started with BASIC on Apple IIs, but getting a C compiler on a modern Mac is a 4GB XCode download. Ubuntu can easily ship with a default arsenal of programming tools. Last I checked the default install already includes Python. Ubuntu can be the hands-down, no-questions-asked platform of choice for today’s pros and tomorrow’s curious novices. Instead of a candy-coated, opaquely-configured Unity, give me a sleek fully programmable interface. Give me a scripting language for the GUI with first-class hooks into the environment. Made it dead simple for people to script their experience. Encourage and give them a helping hand. Hell, gamify it if you can. Apple changed the world by showing a generation the value of good, clean design. Canonical can change the world by showing the value of flexibility, programmability and freedom.

Dear Canonical, I want you to succeed, I really do. I don’t want Apple to be the only competent player in town. But I need an environment that I can bend to my will instead of having everything hidden behind bling and “simplification”. I know that being a great programming environment is at the heart of Linux. I know that you have the people and the resources to advance the state of computing for all of us. So please zig to Apple’s zag.

PS. Perhaps Ubuntu can make a dent in the tablet and netbook market, if that’s their game. But the netbook market is already dying and let’s be honest, there’s an iPad market, not a tablet market. And even if that market does open up, Android has a head start and Amazon has far greater visibility. But Ubuntu has already gone where no Linux distro has gone before. For most people I know it’s the distribution they reflexively reach for. That developer-friendliness and trust is something they should be actively leveraging.

The exploding computer test

I came across an article about the exploding computer test. The gist of it is this — if you’re current computer met with some sort of catastrophic failure and was irrecoverable, how long would it take you to get up and running on a new machine? For me the test is a bit less demanding since I have multiple computers set up that could be pressed into service at a moment’s notice. But for argument’s sake let’s say that I am given a fresh new machine. Here’s what I’d do.

Install OS X or Linux

If I got a blank OS X machine things would go a bit faster. But if I got a stock Windows machine (like both my main computers were) then I’d start by putting Linux on it. If I was in a rush it would be Ubuntu which AFAIK has the fastest, simplest install. If I had a little more time I’d install Arch Linux since that’s what I’m more comfortable with, even though it has a longer initial setup time.

Install Git, Emacs and Chrome/Firefox

These are the three basic programs I need to get work done. I’m supposing that I already have some kind of terminal program since both Linux and OS X have them by default. On Ubuntu or Arch all of these are just a few commands away. They’d take a bit longer in OS X, but not really long enough to make much of a difference. With that done I can move on to retrieving all my data.

Cloning git repositories or getting stuff off Dropbox

Once I have Git getting back to a working state is mostly a matter of just cloning the repositories I need from my server. Everything I work on alone is in a Git repository and all my groupwork is in Dropbox. Getting all this back is just a few minutes work at most. If I was going to be working a lot on stuff living in Dropbox I’d install the client too. If nothing else, I would definitely get my system configuration repo and my Emacs setup repo since I consider them both absolutely essential to getting work done quickly.

Install compilers, interpreters, debuggers etc.

By this point I have my generic setup done. The last part is installing whatever project specific things I need. For example, if I need to work on my thesis I’d get GCC, GDB, Flex, Bison and Ruby. If I wanted to work on one of my JavaScript experiments, I’m all set because all I need is a browser my js2-mode for Emacs. But most of these are things I’d installed as I needed and I could get started on work again without waiting to have everything installed.

How long would it take?

The biggest variable here is the OS install time. For a Mac it’s basically zero, while for Arch it could be an hour or two. But like I said, if I was in a hurry I’d just install Ubuntu and be done with it. But even factoring in that uncertainty, it shouldn’t take more than a handful of hours. I’m hesitant to give an exact amount, but if I started right after lunch I would certainly be getting work done well before dinner time. Without having to do an OS install I could probably be up and running within the hour.

It’s been a long long time since I’ve actually had to set up a work machine from scratch. I’m a bit surprised as to how little I need to get to a work setup again. I remember when I was in high school getting back to working meant installing Windows, Office, Firefox, a Java environment called BlueJ and a bunch of other little things all of which took a good amount of time to install. I’m definitely at the stage when where my tools and workflow are very different from the average users. As the days go by I’m only becoming better and faster at getting stuff done, but that’s a matter for another blog post.

Portable Ubuntu and dual monitors

I love dual monitors. Roughly half of the labs I spend my time in have dual monitors. The others don’t and hence I try not to spend much time in those. Unfortunately one of those single monitor labs is the only computer science Linux lab that we have, so by necessity I actually do need to spend a considerable amount of time there. And whenever I’m there I miss not having a second monitor.

If you’re not someone who hasn’t used dual monitors for a while, then it can be somewhat hard to understand how much easier two monitors make your life. Two monitors provide a very natural division of information that you need on your screen. One monitor contains reference information, this is stuff that you’re always looking at, but that you’re not actively interacting with. The other monitor contains whatever things that you are actively interacting with. For me as a programmer, one monitor generally contains API references in a browser (Chrome on Windows, Firefox on everything else). The other monitor contains my editor/IDE. Unfortunately I do most of my programming in the Linux lab which are all single monitor machines or on my laptop, which I rarely hook up to an external monitor.

There are a  lot of Windows dual-monitor machines available in other labs, but the only thing I like about Windows anymore is Google Chrome. Our Windows machines aren’t locked down, so students are allowed to install software as long as it isn’t something dangerous. I was considering installing some sort of X server on some of the machines. But I generally move about machines quite a bit and so I don’t want to be installing X servers on every machine I’m on.

My next thought was carrying around a bootable Linux USB drive and running off that. I was seriously considering doing that when I came across an interesting SourceForge project via Reddit which uses virtual machine technology to let you run Ubuntu like an application right in Windows. And yes, that was the answer to my problems. Last evening I downloaded the Portable Ubuntu image to a  lab machine and gave it a test run before moving it onto my 4GB USB drive.

My experience has been mostly positive so far. The Ubuntu installation is somewhat out of date (it’s the 8.04 version of it). But that really isn’t a problem for me. In fact, as it turns out, I haven’t really been using it as a full fledged Linux distribution. For the most part I use it as an interface to my college’s powerful Linux clusters.  I have pulled my personal Git repository to it, but for the most part I think I will be working directly off my college’s machines. The greatest benefit is that I can run normal Windows apps right alongside it. This means that I can have a bunch of terminals and Emacs open while at the same time having Google Chrome and some other Windows-specific software I need. The system really comes into its own with multiple monitors. It’s useful to think of one monitor as a Linux screen and the other as a Windows screen. I’ve only been using it for a day, but I’ve already found it a natural way to work.

As a final note, I would like to put out a little disclaimer: I’ve only used this on powerful machines. The lab computers are 3GHz Core 2 Duo machines with 3.5GB of RAM. Performance is quite acceptable and whatever is happening on the linux side doesn’t seem to be affect the Windows side at all. However, on a machine that is much slower or has significantly less RAM, things might be a good deal slower. If you’re stuck using a Windows machine but would rather use Linux, this is a great way to go if you have a fast enough machine.

Book Review: Beginning Ubuntu Linux Third Edition

Ubuntu and desktop Linux have come a long way in the past few years. Ubuntu is currently one of the most popular, if not the most popular distro for desktop linux users. It was my first distro and though I no longer use it, I’ve always acknowledged to be a well-polished piece of work and I always recommend it to people who are just starting on their personal Linux journey. Like most other things in computers, getting used to a new operating system is made easier if there is a good source of documentation available. Beginning Ubuntu Linux, published by Apress is a particularly good example of documentation geared towards to the new user. I’ve reviewed the previous versions of the book and I find that the books have kept improving just Ubuntu itself.

One of the things that makes this book particularly appealing for me is that it starts out with a brief but informative review of the philosophy and history surrounding Linux and Ubuntu. I personally believe (and I think that many other Linux users share this) that there is much more to Linux and open source software than simple technical excellence. It is a way of thinking and acting that I find very appealing and which I wish others to understand. This book does its part in helping new users understand the culture that gave rise to the software that they will soon be using.

The book continues the practice of understanding that most of the people reading it will be Windows users. As a result the chapters dealing with installation also tell users how to properly back up their data and how to smoothen the transition. The guide through the actual installation process is also very in-depth and well written. Partitioning is often the most confusing part of the installation for a new user. I’m glad to see that partitioning has been dealt with very well with all the options in the install process carefully explained and the pros and cons weighed carefully. The chapter dealing with common installation problems is as good as before but now includes information on more than just installation problems. I particularly liked the section on how to deal with resolution and other common graphics problems since these can be very frustrating if not dealt with properly.

Once installation is complete the book goes on to describe with an equal amount of care how to perform various day to day tasks and how to customize your system. The section that deals with Linux equivalents is also comes in very handy for new users who just want to be pointed quickly in the right direction. The book geos beyond describing simply the core operating system and the user interfaces. Of particular note are the sections devoted to how to use multimedia systems. You’d be hard-pressed to find a computer user who doesn’t have a substantial collection of various music and video files and this book helps newbies get up and running with minimal effort. This new edition keeps the sections on using OpenOffice and the BASH shell but adds substantial material regarding the new automatic multimedia setup, the 3D graphics effects that have the Ubuntu desktop much more visually appealing and also on security and encryption. There is also a mini-tutorial on using the GIMP for basic image manipulation which I think shutterbugs will find handy.

The last part of the book is devoted to slightly more advanced topics such as package management, backups and automation and remote access. Personally I feel that package management deserves a more central place, right alongside installation, but the book’s modular structure means that this isn’t much of a problem. Overall the last few chapters act as a springboard from where newbies can start another journey to the level of power user and beyond.

The book as a whole is well laid out and material is clearly separated. The use of sidebars and small tips and warning sections means that a good amount of extra information is presented without interrupting the main flow of the text. There are also lots of links to other information sources where the interested reader can go to for more in-depth information. Most of these are freely available online sources and the full URL is often provided resulting in minimum effort for the reader. For Windows and Mac OS X users there are also pointers to third party tools that might make migration easier. The book is replete with high-quality black-and-white screenshots which add to the complete guide experience that the book provides. The third edition updates everything to be in sync with Ubuntu 8.04 and comes with a double-sided DVD containing a ready-to-install image on one side and various ISO images of the Ubuntu derivatives on the other. In essence the book has everything that a user would need to get up and running with Ubuntu.

The book is at a reasonable price of $39.99 and I think it’s a good investment for anyone looking to jump into the world of Linux. Even though you’ll get the most from this book in the first few weeks after installing Ubuntu for the first time, the later parts of the book will serve as a handy quick reference for those types you find yourself needing to dig under the hood. There is certainly a large amount of information online which means that books of this type are not strictly necessary, but at the same time it can make things a lot easier to have a quick reference close at hand. My litmus test for this sort of this sort of product is generally: would I give it to my mom? This time the answer is yes.