A week with the Nexus 4

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.

Google Nexus 4

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.

Amazon has good customer service

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.

Rules for Computing Happiness Revisited

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

Yes, but do realize that it’s not the point.

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.

Upgrading to Ice Cream Sandwich

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.

The Shape of the Future

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.

Where is the computation?

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.

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.