Filed under Operating Systems

A New Year, A New Phone

This year I’ve decided to make a foray into the future by finally getting myself a proper smartphone. I’ve had an iPod Touch for a while but also had a simple Nokia not-smart phone to make actual phone calls. It’s always been somewhat annoying to have to manage two devices: a real phone for calls or texts and the iPod for any Internet and data-related work. A large part of my resistance to getting an actual smartphone was that I simply didn’t want to spend a lot of money on a cell phone plan when I was surrounded by wi-fi all the time and barely made actual phone calls. But now that there are finally both reasonably cheap unlocked smartphones and contract-free data plans I decided to bite the bullet.

The unlocked iPhone 4S would end up costing me a tad over $800 after tax and Applecare. I was also getting bored of the iOS ecosystem and its closed, silo system for apps. So instead I got myself a much cheaper unlocked Android phone – the Google/Samsung Nexus S. I’m pairing that with a $30 a month T-Mobile data and phone plan. I’m still waiting for a new SIM card to show up but till then I’m making use of the ample wifi coverage that’s a side-effect of living in a college town. For now, I’m only going to talk about my first impressions on the Nexus S itself.

Google Nexus S

Google Nexus S (via Wikipedia)

The Nexus S is Google’s previous flagship phone. Its current flagship is the Galaxy Nexus which Google is also selling unlocked. However it’s almost twice the price I paid for the Nexus S and in my opinion, isn’t sufficient of an upgrade to justify the price. Even though it’s about a year old by now (and technically running the old version of Android), I haven’t had a problem with it so far.

It looks pretty different from the iPhone and the plastic feel takes some getting used it. I also think it slips more easily, but that might just be a personal problem. The back of the phone has something of a ridge at the bottom which I guess is supposed to make it easier to hold. Though the build quality does feel inferior as compared to the iPhone, I like it and have no major complaints.

The Android sofware feels like a breath of fresh air as compared to the iPhone. It is considerably more customizable and I like the presence of both tradiiontal apps as well as “widgets” that add functionality directly to your home screens. I’ve found widgets great for quickly looking up data like the weather, Twitter mentions or what system services are currently running.

The tinkerer in me loves how customizable the Android system is. Changing the look and feel is just the beginning. There are a lot of bells and whistles and options and sometimes it can be a rather confusing. For now I’ve only stuck to the usual set of apps (Twitter, Foursquare, Camera) but I’m looking forward to trying out new and interesting apps in the future. More than that I feel like Android would be a really good platform if I decide to get into mobile dev anytime soon.

There are a few things about the Nexus S that I’m concerned with. I think the battery life is a tad too short, especially with the geolocation services on all the time. Luckily, the battery monitor widget makes it simple to turn off services with a touch so maybe some manual management might make it better. While the Google apps are really well integrated (especially Google Voice) and apps from large companies are well done, third-party apps seem to be of considerably less quality than iOS equivalents. I don’t really blame the developers given the multitude of devices but it does mean that finding good apps for simple things like RSS is more difficult than it should be.

Despite the glitches and minor annoyances I really like the Nexus S. The hardware is pretty solid and I like Android so far. Right now having a fully functional smartphone is still pretty new to me, but I’m hoping that when the novelty wears off I’ll dive into actually programming the powerful computer in my pocket.

Tagged , , ,

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.

Tagged , ,

The current state of operating systems

I’ve been having some conversations lately about the current state of operating systems and computer technology in general. With the recent announcement of OS X Lion and Steve Ballmer’s claims that they are betting big on Windows 8, it’s an interesting time for operating systems.

In some ways the last decade or so has not been so interesting for desktop operating systems. Only three operating systems are still in popular use and all of them are more or less the same in terms of how they work. The differences between them from a user point of view are mostly superficial. However, each of these operating systems has a different story to tell. Windows has been pretty much stagnant from Windows XP through Vista up to Windows 7. The bold plans that were supposed to be part of Longhorn never came through. On the other hand OS X has been slowly but steadily marching ahead. OS X along with the iLife suite and the iOS devices has been gently pushing personal computing into the future. However, it’s becoming clearer that the controls that Apple places on it’s technology is here to stay and will probably only get more stringent in the years to come. Whether or not the desktop Mac gets completely locked down remains to be seen. Finally Linux on the desktop never really took off (despite some good attempts) and even with Canonical and Ubuntu doing some great work, it doesn’t seem Linux will see strong market penetration any time soon.

So where does all this leave us? I think it’s high time for a Microsoft resurgence. They have an army of really intelligent capable engineers spread throughout the world. They have some amazing projects being incubating in their Labs (and more smart people). Equally importantly, they have immense financial assets and deep, deep inroads to the corporate sector. Though they’re not in danger of losing their immense market lead anytime soon, they  haven’t done anything innovative or exciting in a long long time. And they’re also far far behind in both cloud and mobile computing. But at a time when there are doubts starting to fly about Apple’s intentions (and how they’ll play with companies like Flash and Adobe), it could be just the opportunity that MS needs to make a strong comeback. They’ll need something bold and unique, but there doesn’t seem to be much confidence in their ability to pull off what they need to do.

Being a Linux user for a good few years I think it’s represent some really technology, unfortunately it fails when it comes to getting the little things working properly. Ubuntu does a good job of making the user experience smooth, and I think it’s the best user-facing Linux distribution currently available. But there’s no Netflix for Linux, Flash still has problems and if you’re stepping out of the Ubuntu zone there’s a considerable amount of potential tinkering that you might have to get things working. I personally use Arch Linux and prefer it over Ubuntu mainly because of the bleeding edge packages, but it kinda sucks when you don’t have suspend/resume working for months on end. Once upon a time when I was just diving into the world of Linux and the mysteries of the command line, spending a few hours trying to get graphics working after an upgrade was something of an adventure. But now it gets old really quickly. I’m getting into the phase of “grown-up computing” and I want to use my computer to get stuff done as opposed to figuring out why stuff isn’t working. Should I just sue for peace and stick with Ubuntu on the desktop? Maybe, but at that point I might as well just get a Mac.

Right now, it seems to me that OS X is hands down the best desktop operating system on the market. Unless you’re tied to some particular piece of software on Windows, OS X practically runs everything you would want it to. Of course, with Apple divorcing itself from Adobe and Oracle, it’s interesting to see how long that will last. If Microsoft can’t get its act together and make a comeback, the time might be right for another player to come up. One possible answer is Google with Android or Chrome OS, but I have my doubts if it will work. For one thing, the current state of Android phones seems to suggest that just providing part of the software layer won’t be enough.

A strong entrant to the desktop computing market will need to offer a combined hardware and software combo (even if the software is leased to other players). I’m thinking Apple-level hardware with Ubuntu on top of it. The hardware control would mean fine-tuned and well-tested drivers so that things actually work. However the free software would mean that it would be an open and hackable machine. It works great when you need it to, but you can hack it if you want it to. Canonical might decide to open a hardware wing, especially since Dell seems to have stopped offering Ubuntu as an option.

I think that the lull in operating system activity is coming to an end. As we get more used to the idea of storing our data in the cloud all the time and the web slowly fuses with the desktop, we need the core technologies that power our machines to change as well. However, the change is not always for the best. Furthermore since our livelihood depends on no small part on our machines, it’s in our best interests to make sure that our operating systems do what we want them to. For that reason, as much as I admire Apple’s dedication to perfection  and can understand why they want control of the platform, the lack of a free, open and high-quality alternative does make me uncomfortable. I hope someone stands up to pick up the slack.

Expanding my boundaries

As I start writing graduate school applications and figuring 0ut what I want to do with the next few years of my life, I decided to stop and take a look at just how much of computer technology I really know about. The answer is: not as much as I would like. Though I know a fair amount about programming languages and the related tools, my knowledge outside that area is fairly limited. I have some knowledge about operating systems, a significant amount about computer hardware (including new multicore CPUs and GPUs) and I have a good understanding of the core theoretical concepts behind computer science.

However, I know very little about things like databases, security or computer networks. And this makes me uncomfortable because we live in an increasingly networked world. A growing amount of user facing software is becoming networked, collaborative and social. Both computation and storage are embracing the cloud and it’s becoming more common to have our data in large or small-scale databases rather than in multiple discrete files. Since I plan on staying in the computer field for a good period of time to come, I think it would be a good idea to read up on the networked side of things.

I have a good idea of the hardware layer of networks and the basic socket system (learned all that in the operating systems class) but I have little idea of the protocols and systems built on top of them. I suppose there are enough books out there that would give me a good idea of our networked world, but I don’t just want to know about it, I want to be able to build it (at least parts of it). Luckily there’s tons of great oepn-source networking code out there.

In particular the Ruby on Rails framework and the Mongrel2 webserver are not just completely open source, they also have excellent documentation and manuals. It may not be an entirely good idea for me to start learning about networking by reading server code and documentation, but I like following a “throw myself in the deep end’ policy when I’m self-educating. My plan is to start reading up on how some good networking code works, trying to figure things out and when I can’t figure something out, go look up other resources on it. I did something similar with programming languages when I got interested in them (though not looking at implementation code) and I’ve learned a lot.

In addition to that, there are two computer networking courses being offered next semester (one from an ECE perspective and one from a CS perspective) and I plan on taking one of them. I’m hoping that I’ll have self-taught myself enough that I can use the class to clear any doubts or misconceptions I might have and gain a really solid understanding of the area.

Of course, the best way to learn is by doing and I want to write code that implements the stuff I learn about. I’ve already started this by refactoring my old operating systems project. It started out as an a simple client-server combo that sent data over a network and was a multithreaded program. I’ve slimmed it down and thrown out all the client stuff. At this point it’s a small C library that handles multithreading and establishing TCP connections that could be used for building servers. I have a simple echo server and at some point I’ll sit down and write an HTTP server for it. It’s called Litepipe and you can get it from Github.

I’m really looking forward to exploring and learning about a new area of computer technology, but with all the stuff I have on my plate, it’s probably going to be rather slow going. But that’s ok, I’m not in a rush. I’d love to hear any advice you guys might have on how to get started learning about networking.

 

Tagged , ,

What are the important problems in computer technology?

Exams are over, summer is here and it’s time to think about how I’ll be spending my time over summer and then the rest of the year. Next year is going to be my last year as a undergraduate student and I plan on working on a honors thesis. I’m really looking forward to work on it since I like doing research and being able to work independently. The problem is that I need a specific topic and I’m having a hard time focusing on one. I don’t want to do something that’s already been done, or something that’s superspecialized to death, but I don’t want to bite off more than I can choose. I’m going to have about 9 months, part time, with other courses and graduate school applications and at the end of it, I want to have something that’s a clean finished product (as cleanly finished as research products ever get).

The problem with being a undergraduate researcher is that I don’t have enough experience to know how big of a project is a good size. Again, I don’t want to think too much about this and end up limiting myself from what I can achieve. So how should I choose my project? First, I want to get my priorities straight. I’d rather do something that’s ambitious and end up with something that’s a litte incomplete than do something I can neatly finish, but is mundane and unexciting. That being said, I don’t want to do something that I have no chance of finishing. I’m not looking to prove or disprove P = NP (and I’m not a theory guy anyway) but I don’t want to write yet another Python/Ruby/Java clone.

I remember reading Paul Graham’s essay on procrastination a while ago. What stuck out to me most was his summary of Richard Hamming’s essay on research. One of the core themes on that essay is asking yourself three basic questions:

  1. What are the important problems in your field?
  2. Are you working on one of them?
  3. Why not?

Hamming was talking to professional scientists and researchers and I’m just a wee young undergraduate working on an honors thesis, but it’s never too early to get started. So, in keeping with Hamming’s excellent advice, what are the important problems in computer science? Now that’s a tricky one. Of course, there are the classic ones. Prove or disprove P = NP, build true AI, build a working quantum computer etc. etc. Then there are the ones with been-there done-that written all over them. For example, the current software stack is a bit of a mess so let’s build a unified top-to-bottom hardware-software solution all in Lisp (along with a YouTube viewer).

But seriously, what’s a real, current problem that I can take a chunk of and have a hope of solving? For starters, there’s parallel computation. Engineers are piling the core on with no sign of stopping and we have absolutely no idea what to do with all of them. Most of our software is still inherently single threaded and keeping up with concurrency with all the ills of shared memory are a pain to keep up with. New programming languages and innovations like software transactional memory are doing a valiant effort, but they still aren’t tools that you can ship off to everday programmers and have them cranking out parallel code. I’ve been studying parallel code (mostly in terms of GPUs) for last semester and it’s definitely something I can get into. However parallel computing is still a wide area and I’d need to find something more specific. I’m working on a different sort of parallelization over the summer (MapReduce with Hadoop) so that’ll give me something more to think about.

I posted to the Arch Linux forum about just this issue and one of the replies that came up multiple times was network security. The internet is everywhere and a computer without a network computer in this age is pretty much useless. And when you connect your computer to dozens of other ones spread out all acrosss the world, there’s a good chance that one or more of them don’t want to play nice. With botnets, viruses, trojans, worms and the like being a daily reality security is important and no seems to have a solution that’s even remotely bulletproof. Unfortunately for me, security just doesn’t interest me that much. I’d rather be building interesting stuff than holding down the fort. So on to the next one.

I’m interested in the way that people interact with their machines, not really in the up-front, HCI sense, but in a more general sense. One problem that I find interesting is how we can manage all the data we have on our machines without having to explicitly name (and then remember the name of) each and every single piece. The filesystem metaphor does not scale to thousands of songs and images or to the many tiny bits of text and video that we’re continually sharing with each other. Unfortunately, none of the popular operating systems seem to be meeting this challenge head on (iLife is going in the right direction, but the ideas need to spread to the rest of the system). I’d love to come up with an implementation of a file-less, data centric user model, probably along the lines to what the Etoile project is trying to accomplish. This is certainly something that I’ll be thinking about more (and I need to come up with a more theoretical basis for an honors project).

There are probably a bunch of other things that could qualify for being among the most important problems in computer science and I could add another few thousand words to this post. But sufficeth to say that this is still something that I need to give a lot more thought to. I still have no idea what my thesis topic could be, but I know what I’ll be doing over summer. I’m not going to be solving the multicore crisis or building a completely new operating system from scratch, but I’m definitely going to be taking my best crack at it.


Follow

Get every new post delivered to your Inbox.

Join 338 other followers