Computer Science isn't a science and it's not about computers

Hardware

I’ve been a happy owner and user of a Nexus 4 for about two years (and the Nexus S before that), but in the last few months, my phone was starting to show its age. I was barely getting a full day’s usage out of the battery and after the Lollipop updates, things seemed generally more sluggish in general. It was time for an update, and following my usual habit of a skipping at least a generation when it comes to tech, I was really hoping to get a Nexus 6. Unfortunately, the $650+ price point placed it more than a little out of my reach. I’ve never owned a non-Nexus smartphone, but it seemed like it was finally time to move on to something else.

There’s been a lot of hype and news about the OnePlus One that I won’t bother recapping here. In short, the OnePlus One is a reasonably priced, state-of-the-art Android smartphone that comes unlocked and runs a version of the CyanogenMod ROM. It’s not stock Android like the Nexus line, but there’s no bloatware either and it works just fine with the full suite of Google Apps and (as far as I can tell) most popular Android apps in general. After being invite only for several months, you can now buy one from the OnePlus website, but only on Tuesdays. I’ve had mine for about two weeks now and thoroughly enjoy it. Yesterday a friend of mine asked me about my experiences about the device. I thought I’d collect all the points I made in that conversation and share them here.

For starters, I really like the device. It’s much snappier as compared to my Nexus 4, the large screen is gorgeous and the design in general is well executed. I got the 64GB “Black Sandstone” version. As the name suggests, the back of the phone has a black, sandstone-like texture that makes the device quite pleasant to hold. Time will tell if the texture holds up with daily wear and tear. The battery life is really good—I can easily get almost two days of moderate use on a full charge, and well over a day even with heavy usage. It’s really nice to know that I have a good few hours of usage left even if I forget to plug it in overnight.

I was a little concerned about the large 5.5″ screen, which is pretty massive compared to smartphone screens I’m used to. However, after a few weeks, I’ve gotten used to it and it feels really comfortable to use on a daily basis. By and large, I can use it with one hand (even for input using the swipe keyboard), but it is definitely easier to use with two hands. In fact, the device is light and slim enough that compared to my Nexus 4, it actually feels lighter and less of a burden to carry around. I do a lot of reading on my iPad Air (RSS, websites and Instapaper) but I’ve barely used it over the last two weeks. I’ve been testing out the One as a tablet replacement, at least for format-independent reading, and it’s been working out quite well so far.

I only have two main gripes about the One. First the CyanogenMod ROM that it’s using is still based on KitKat and I got used to Lollipop on the Nexus 4. But in all fairness, there’s nothing I seriously miss or can’t live without. And there’s a Lollipop-based ROM in the works. Second, the swipe keyboard seems noticeably less accurate than what I’ve gotten used to. However, that might just be because I still have the muscle memory of using the swipe keyboard on a smaller phone.

In summary, I think the OnePlus One is currently the best option for an unlocked, reasonably priced smartphone, especially given how expensive the Nexus 6 is.

I bought my first smartphone about a year and a half ago. It was the straight-from-Google version of the Samsung Nexus S, meaning that it came without any carrier-installed crapware and no contract. However, it was already over a year old and a generation behind the times when I got it. That meant that it was already slower than the current state of art and came with the older Android 2.2 (which I upgraded a few months later to Ice Cream Sandwich). Overall it was a good phone, but has been gradually showing it’s age. It was having trouble using newer apps and the upgrade to Ice Cream Sandwich had been awkward enough that I didn’t even try to update it to Jelly Bean. I had been using T-mobile as my carrier and though I had one of their contract-free prepaid Monthly4G plans, I had carelessly bought the version of the phone with the wrong radio chipset, meaning I only got EDGE service most of the time.

The thought to upgrade to a new phone had been at the back of my mind for a few months. But the announcement of the Galaxy S4 as Google’s next flagship device made me take a look at the available options. While the S4 looks great, I wasn’t about to shell out $650 for a new phone. However, it turned out that the current flagship phone — the Nexus 4 — is available for $350 and it’s only a few months old. It was available unlocked and a quick search of the Intertubes suggested that it worked well on T-mobile’s network.

The Google Nexus 4

The Nexus 4 is a good, solid device and is definitely a big step up from the Nexus S. The 1280 x 768, 4.7-inch display looks great, it’s slimmer and the 8MP camera is a much better than what the Nexus S. It also comes with Android 4.2 (Jelly Bean) and is fast enough to run heavy duty modern apps without skipping a beat. It doesn’t have LTE, but on T-Mobile’s HSPA+ network the speeds I do get are more than sufficient for my needs. The battery life is better than what I’m used to — I can generally end a busy day with about 15-20% to spare. Admittedly, I don’t stream a lot of video or upload lots of photos, so your mileage will probably vary.

On my Nexus S I rarely installed apps and never really explored the Android ecosystem (or rather, the Google Play store). But with a newer phone with an up-to-date version of Android, it was time to go exploring. I was pleasantly surprised to find that Android apps seem to be developing a UI style that is quite different from the iOS counterparts (though not quite as different as Windows Phone). Apps from both large companies (such as Twitter) and smaller operations (like Astrid) sport a sharp, clean and mostly gradient-free design that I personally feel pretty refreshing. I also really like the Google+ app, though I can’t say I use it all that much and I’m looking forward to the new Gmail app. If you need more evidence that Android apps can be just as good looking as their counterparts on other platforms, check out Android Niceties. Sharing between applications and services is also so much nicer and painless than on iOS, though there are some bad apples (I’m looking at you, Feedly).

There are a few quibbles I have about the Nexus 4, but they’re not major and definitely not show-stoppers. For starters, the back of the phone is glass, not plastic or metal. I don’t have a history of breaking screens, but I will sometimes put down my phone pretty roughly on a table and I’m afraid I’ll end up cracking the back soon. Secondly, the headphone jack is on top of the phone. This is probably a good idea if you’re charging and listening to music at the same time, but makes it’s a bit awkward for listening on earphones with the phone in your pocket. With the Nexus S (which had the jack at the bottom) it was quite natural to put the phone in your pocket bottom-up and then turn your hand as you pulled it out to see the screen upright. The corresponding motion with the jack on the bottom seems rather more convoluted, but it might just be muscle memory that will get reprogrammed with time. Finally, (and this isn’t unique to the Nexus 4) I’m yet to find a Android to-do or task management app that is flexible enough as OmniFocus on OS X and Android.

All that being said, I am very happy with the Nexus 4. I really liked the Nexus S when I first got it and I’ve always liked Android. The Nexus 4 is a significant upgrade and I pretty impressed by the current state of the Android ecosystem. Barring unforeseen problems (or a very cheap upgrade option) I fully expect to hold on to this as my primary mobile device for the next few years. I don’t have any experiences with other Android devices (or other smartphones for that matter) so I can’t really compare, but I’m willing to take a chance and say you can’t get much better than a clean stock Android (especially if you use Google services as much as I do). As a final happy ending, I managed to hand off my Nexus S to a friend who decided to move up from a dumb phone. That makes one less unused device for me to keep around.

Last week I realized I didn’t have a single usable USB Flash drive. So what do I do? I hope on Amazon and order myself one of course. I got this nice Kingston 32GB drive that looked small enough to fit on my keyring and spent a few minutes in awe of the fact that this tiny thing had more capacity than my first computer’s hard drive (a paltry 20GB).

I ordered it on April 15 at night and since I have Amazon Prime, I got an estimated delivery date of April 18. Unfortunately, the 18th came and went and there was no sign of the package showing up. The tracker on Amazon said that the package had “left the seller” on April 16 but had made on progress since then. Since this was the first time Amazon had been late with a package, I decided to give them some slack and wait a few more days. On Monday, April 21, there was still no sign of the package so I decided to contact and see if I could get some answers.

Once I found the Amazon Contact Us page I was glad to see that there was a live chat option along with the usual phone and email option. The chat experience was really smooth. After some simple questions to narrow down the problem I was talking to a real human (I think) within a few minutes. Once I told them what the problem was, they checked on the package status and immediately offered me a free replacement or refund, without even asking. I went with the replacement and today the package showed up at my doorstep. The process was smooth and quick and entirely without fuss. It’s definitely one of (if not the) smoothest customer service experience I’ve ever had.

It wasn’t perfect: the orders page has options to Track, Return/Replace Items, Leave Package/Delivery Feedback or Write a Review. There’s no way to say that the package delivery seems stuck. Under the Delivery Feedback I can say that I haven’t received the package, but it just tells me to leave more feedback when I get it. It would be great to actually have an option to say that there’s something’s wrong with the delivery and I want Amazon to look into it. Secondly, while the whole contact process was smooth, it was hard to find the contact page in the first place. There doesn’t seem to be a contact button or link on the main Amazon page or site and there’s nothing of the sort on the Track Orders page either. I had to Google for “Amazon contact” to find the page. It was smooth sailing after that point, but it’s definitely something I wish was smoother.

Anyways, the point is that I had a smooth customer service experience with Amazon and though there are rough spots, it was very good on the whole. Now I’m going to stop talking about my first world problems and get back to hacking in OCaml.

About a year and half ago I wrote down some Rules for Computing Happiness. I based the list off of a similar list by Alex Payne. But in the year and half since then a lot has changed in my life. I graduated from college and finished a year as a graduate student at Cornell University’s computer science running experiments. I’ve also finally joined the world of smartphone users. I spend the greater part of the day writing programs and scripts and spend an increasing amount of time on remote machines. In the light of all those changes I think it’s a good idea for me to revisit the rules I laid down and see how much they’ve changed (or stayed the same). Here goes:

1. Use as few physical machines as possible

This one’s a keeper. I now use only two physical machines: my personal Macbook Air and my powerful Linux desktop at work. I use a combination of Git, Dropbox and Chrome tied to my Google account to keep things in sync between them. In reality the work I do on each doesn’t much overlap so there isn’t a pressing need to keep them in sync.

2. Keep work and play separate

Another keeper. I don’t have any social media apps on my work machine, I generally keep IM closed and I’m busy and in the flow enough that I don’t feel the need to randomly open up Reddit or Hacker News. I should be honest and say that this isn’t a purely (or even mostly) technical thing – in fact it probably has more to do with my shifting perspectives on what’s important. I have my phone near me if anyone really needs to get in touch with me. Since I’m a grad student I have a lot on my plate that is important but little that is urgent so my phone rarely gets used.

3. Get a Linux machine for programming. Use multiple monitors and a tiling window manager

I’m a bit less sure of this one and I’m partly afraid that I’m just plain biased. I do most of my programming on my Linux machine, but I do a decent amount on my Macbook Air too (especially experimental web stuff). I mostly use the UNIX in each so I’ve become fairly agnostic to what skin I’m running on top. I’ve never programmed on Windows so I don’t have anything to add on that matter.

However, I do use two monitors on a regular basis and going back to one can be annoying. I tried using Unity for a while and while it’s not bad, I keep going back to XMonad. It’s clean separation of physical monitors and virtual desktops makes using multiple monitors very flexible and efficient and I always find myself missing it when I’m on a different environment. By contrast, the way OS X does it is complete rubbish, especially if one of your windows is in fullscreen mode.

4. Get a Macbook for non-programming tasks

I’ve had my Macbook Air for over a year now and I love it. It’s the best laptop I’ve owned and probably the best computer ever. I only use a handful of userspace apps but they’re high quality ones like Reeder and OmniFocus. Homebrew is definitely the missing package manager for OS X and makes any programming I do a lot easier.

5. Keep a backup server, either physical or virtual

I’m still running a small Linode VPS that serves my personal website and acts as the syncpoint for my Git repos. I haven’t had any destructive crashes in the past year so I haven’t really felt the need for a backup, but it does offer peace of mind.

6. Learn and customize your tools

7. Use public computers as little as you need to

Since I have both a great portable machine and a great workstation I haven’t had to use public computers at all. My desire to work in coffee shops and libraries has also been decresing steadily and I now prefer to work in a private office or a quiet shared workspace.

8. Pay for good software if you need it, but only after you’ve tried it out for a while

I’ve bought software like OmniFocus and Reeder and by and large I don’t regret it. I’m currently considering getting iA Writer. It’s cheap enough that I rarely think twice about gettting something that would make my job easier. However they “trying out” part is harder. My biggest gripe about the Mac App Store is no way to try out apps for a period of time (or stop using them and get a refund).

9. Keep information in open formats, preferably plain text

Yep. The only non-plain text format I interact with regularly is PDFs, only because that’s how most academic papers are distributed. I hold out hope that one day the academic community will move to publishing in hypertext.

10. Use version control on all projects

All my source code, my research data, my configs, my public and private writing are in version control. It not only makes it easy to go back and get something I may have overwritten, it also makes backup easier.

I’m about six months behind the rest of the world when it comes to phone software, but I finally upgraded my Nexus S to Ice Cream Sandwich. Unfortunately the process was not as smooth as I would have liked: even though I have an unlocked stock phone from Google I still couldn’t get the OTA upgrade and had to find and manually download it. However, the upgrade basically destroyed my phone. Everything was slow and laggy, apps crashed all the time and battery life was down to a few hours. After a few days of trying to troubleshoot I gave up and did a “factory reset”. The reset removed all apps and reset to just the base OS (the upgraded ICS version in this case). Luckily this seemed to fix everything. Now that I’ve re-installed the apps that I did regularly use my phone is better than ever.

I really the look and feel of ICS. It’s close enough to Gingerbread that I don’t feel lost but it’s different enough to feel like I’m using something new. I like the blue and black theme much better than the previous orange (though I wish there was a selection of color themes). The more 2D feel of the interface (at least for the native Android apps) is really nice too. It’s different enough from iOS but not as different as Metro (or whatever it’s supposed to be called now). Some apps like the music player, the contacts app and Gmail have had significant redesigns and are a quite a bit nicer to use. I don’t know what changes they have made to the keyboard but it seems much more natural to type on and more accurate. However the caps lock feature seems to be gone which is a bit annoying at times. Most third party apps seem to be unchanged by the design changes. The whole phone seems much snappier and faster. Battery life during actual use seems about the same, though it does seem longer on standby ( I haven’t made any scientific measurements).

I’ve been pretty happy with the Android platform and this phone in particular since I got it. It was not quite as polished as iOS but it wasn’t significantly deficient either. With the ICS update I feel like Android has made small but steady improvements to the whole experience. Since I mostly use the stock Android apps and popular ones like Facebook and Twitter I haven’t explored the ecosystem much. That being said, I have no complaints about the apps and services I do use. I use my phone basically as a quick lookup and occasional texting and calling device — I much prefer a proper computer when it comes to doing work. For those purposes the phone is great. With the improved keyboard I’ve been using it for quick emails and IM as well. If I was in the habit of keeping a shorter blog I think I could use the phone to write for that as well.

I don’t plan on switching phones any time soon and I’m glad to say that it looks like I won’t be forced to. The Nexus S is a solid device (not perfect, but solid). I wish it had a better camera and I’d be happy to pay for an OmniFocus app (even if it was just read only) but apart from that I’m happy with it. The ICS update made it better than it was and there doesn’t seem to have been any unnecessary superfluous changes. I hope the Jelly Bean update (when it comes) will keep going in the right direction.

I love Star Trek. As a kid Kirk was my hero and Spock was always fascinating (and just a little bit mysterious). I loved the idea of starships exploring the galaxy, of alien worlds and strange beings. The technology of tomorrow was just amazing – communicators, tricorders, warp drives, phasers and even hyposprays. I’m pretty certain that Star Trek was what started my love of science and technology. If I hadn’t grown up watching the crew of the Enterprise (both Kirk and Picard’s) using science and technology to save the day I would probably have been a historian or a writer. So basically, I owe Gene Rodenberry a huge debt.

A lot has happened since I was a five year old watching Kirk slug it out with the Klingons and Picard battle the Borg. I’ve read and seen a lot more science fiction – Asimov, Heinlein, Clarke, recently Charlie Stross – and I’ve seen a lot more too – Star Wars, Battlestar Galactica, Doctor Who (though that’s not really science fiction), any number of scifi movies. More importantly, the world around me has changed. Ubiquituous connectivity, portable supercomputers, massively distributed computation systems and the first steps towards cybernetic implants.

A lot of what we once considered science fiction we now accept as part of daily life without batting an eyelid. Our smartphones are much cooler than Kirk’s communicator (though smartphone is a misnomer, that’s a matter for another post). Any large datacenter probably has more computing power than the Enterprise. On the other hand we’re also far behind some science fiction classics. Warp drive, or any other form of faster than light travel, is still only a fantasy (though an ion-powered starship may be much closer to reality). It will probably be thousands of years before we achieve the technology (and harness the sheer resources) to create stable traversable wormholes.

That being said, there are areas in which we will probably surpass science fiction. I’ve find it interesting that most “popular” science fiction shows have some form of interstellar travel and starships but little by way of advanced robotics, artificial intelligence, genetic engineering or nanotechnology. Even in shows that do have them (the later Star Trek series, BSG, Andromeda) they’re still mundane and boring. Robotics is mostly limited to personal butlers or killer drones. AI are either hell-bent on destroying humanity or they’re our loyal servants. Human genetic engineering is either outlawed (Star Trek) or again rather banal (Andromeda). There are no interesting political or economic systems. There are no uploads, no interesting alife and very little by way of actual space-time engineering.

For better or for worse our future is going to be far more interesting (and much less neat and tidy) than what scifi television would have us believe. Most science fiction literature paints a far more interesting vision of things to come. Ubiquitous computation and connectivity is just the beginning. We’re barely using any of the computation capacity in our pockets for our benefit. Within a decade or do I’d like to see a more subtle merging of man and machine as our technology becomes better at monitoring our behavior, actions and needs and steps in to take over when we’re under stress. With 3D printing getting better and cheaper we’re well on our way to another manufacturing revolution. I won’t be surprised if a startups of the near future starts shipping products as 3D-printable templates instead of the physical product.

Any attempt to look into the future carries with it the danger of being hopelessly wrong. After all we were promised flying cars and we got a high-bandwidth globally distributed data and computation net instead. Not a bad bargain if you ask me. Luckily, while the future may be hard to foresee, it is also something we have a direct hand in shaping. “Invent the Future” has an inspiring ring to it. Perhaps for the first time in human history it’s actually possible for large sections of the human race to invent their own future. While interstellar travel and hard AI are still a dream and a hope away there’s a lot of interesting stuff between here and there.

The shape of the future is being designed on portable supercomputers, communicated over fast data nets and brought into being by affordable 3D printers. And we’re going to have a hand in making it happen.

I’m pretty happy with my Nexus S so far. It’s a decent phone with some solid apps and services. More importantly, it’s a well-equipped little pocket computer. However the more I use smartphones (and similar devices like the iPod Touch) the more I feel a nagging sense that I’m not really these devices well, at least not to their full potential.

While the devices in our pockets might be increasingly powerful general purpose computers I feel like we use them more for communication than for computation. That’s not to say that communication does not require computation (it does, lots of it), but we’re not using our devices with the goal of solving problems via computation.

This is perhaps a very programmer-centric viewpoint of mobile technology, but one that is important to consider. Even someone like me, who writes code on a regular basis to solve a variety of both personal and research problems, does very little computation on mobile devices. In fact, the most I’ve been using my Nexus for is email, RSS reading, Twitter, Facebook and Foursquare. While all those services definitely have good uses, they are all cases where most of the computation happens far away on massive third-party datacenters. The devices themselves act as terminals (or portals if you prefer a more modern-sounding term) onto the worlds these services offer.

Just to be clear, I’m not saying that I want to write programs on these devices. Though that would certainly be neat, I can’t see myself giving up a more traditional computing environment for the purposes of programming anytime soon. However, I do want my device to do more than help me keep in touch with my friends (again, that’s a worthy goal but just the beginning). So the question is, what kind of computation do we want our mobile devices to do?

Truth be told, I’m not entirely sure. One way to go is to have our phones become capable personal assistants. For example, I would like to be able to launch an app when I walk into a meeting (or better yet, have it launch itself based on my calendar and geolocation). The app would listen in on the conversation, apply natural language processing and generate a list of todos, reminders and calendar items automatically based on what was said in the meeting. Of course there are various issues (privacy, technology, politics, corporations playing nicely with each other) but I think it’s a logical step forward.

As payment systems in phones become more popular, I’d like my phone to become my banker too (and I’m not just talking about budgeting and paying bills on time). For example if I walk into a coffee shop my phone should check if I’m on budget as far as coffee shops go and check coffee shops around the area to suggest a cheaper (or better, for some definition of better) alternative. And it doesn’t just have to be limited to coffee shops.

Mobile technology is sufficiently new that most of us don’t have a very clear idea of what to do with it (or a vision of what it should do). Most so-called “future vision” videos focus more on interfaces than actual capabilities. However this technology is evolving fast enough that I think we’re going to see the situation improving quickly. With geolocation-based services, NFC and voice commands becoming more ubiquitous and useful the stage is becoming set for us to make more impactful uses of the processors in our pockets. As a programmer I would love to be able to hook up my phone to any cloud services or private servers I’m using and be able to interact with them. The mobile future promises to be interesting and I’m definitely looking forward to it.