Friday, August 3, 2012

First Impressions: Galaxy Nexus


Tired of my HTC EVO 3D, I made a huge list of pros and cons of getting new phones on each of the networks (except AT&T). Long story short, I decided to get the unlocked GSM Samsung Galaxy Nexus through Google's Play Store and use it on T-Mobile. I'd talked to a lot of people and the awesomeness of a new Samsung Galaxy S III couldn't match the awesomeness of getting guaranteed OS updates first from Google before everyone else. This seemed to make sense to me after my EVO 3D's official Android 4.0 (Ice Cream Sandwich) port was delayed over and over again, from its original "early 2012" release date to June to early August. Also important was that that a brand new GSM Galaxy Nexus was super cheap, compared to other similarly-spec'ed smartphones.

Since I'm avoiding AT&T because of their crap reception and anti-tethering policies, the only option was T-Mobile. This was perfect because I'd read that T-Mobile, unlike every other national carrier, had no-contract plans that were cheaper than the contract plans. The reason: contract plans come with that ~$400 phone discount so customers can get ~$200 phones. But I was bringing my own phone. I bought the phone and got T-Mobile service the day after the phone arrived.

Initially, this experience was met with disappointment. While the Android 4.1 (Jelly Bean) update came to my phone soon after I turned it on, it is a pretty insignificant upgrade. While the phone does seem very zippy and I don't notice any lag, I barely used it while the phone was still on Ice Cream Sandwich, so it's hard to say definitively if Ice Cream Sandwich was any slower than Jelly Bean. Google Now, which seemed to be billed as Google's answer to Siri and S-Voice, seems to be little other than an app to display commute time and the weather.

There were more issues: I was once told that rooting a Nexus was simple: you just check a box. This appealed to me. As technical as I am, I would prefer a phone that didn't require jailbreaking or hacking to get it to do what I want. Jailbreaking my iPhones and rooting my EVO 3D were tedious, scary processes that could've easily resulted in me turning my phone into a brick. I looked forward to a simple rooting process that was sanctioned by my phone. But I was misled. Rooting even a GSM Nexus is a process filled with many steps and involving a PC.

Then, while I have complained about the manufacturers' skinning of Ice Cream Sandwich, it seems that stock ICS/Jelly Bean is still a little barebones. Google's apps just aren't there yet. I miss Swype and the EVO's trace keyboard, which I didn't realize weren't available on stock Android. I hate that Google's contacts app (People) doesn't let you filter out your Google+ contacts and other people without phone numbers. I cannot believe that you are stuck with 5 pages on the home screen; no more no less. I will probably end up using some sort of 3rd party launcher, if I don't use a different ROM entirely.

The T-Mobile experience is also somewhat lacking. I found out in the store that my no-contract plan is actually more expensive than the contract plan. I wanted 500 minutes, unlimited text and 2 to 5 GB of fast 4G data. Both the 2 GB and 5 GB plans are cheaper on contract. I had been looking at the Value plans at T-Mobile, which require a 2-year contract. Instead, I needed a Prepaid/Monthly plan, which has a different website and a different set of rules. I've always been scared of prepaid carriers, but the sales rep assured me that I'd be using T-Mobile towers and would have the same reception, although she mentioned that 4G wasn't as good.  I soon would find out that prepaid and monthly customers can't use T-Mobile's visual voicemail app.

Lastly, T-Mobile's 4G claims are a little off.  They have many posters in the store and online that claim "42 MBPS SPEEDS ON T-MOBILE."  I now realize they write these claims in all caps so people will think they mean "42 MBps" or megabytes per second, instead of "42 Mbps" or megabits per second.  42 MBps is 8 times faster than 42 Mbps.  That didn't matter much, because 42 Mbps is still pretty fast and is over 4 times faster than my home internet connection.  But my max speed on T-Mobile's HSPA+ is 7.22 Mbps.  Definitely better than my Sprint WiMAX max of around 5 Mbps, but hardly 42 Mbps.

However, everything else about the phone is awesome. It's super fast, the SAMOLED screen has a beautiful contrast and is brighter in direct sunlight, the gorgeous HD display looks like a Retina Display to me, the back camera is better and super fast, using MTP to transfer files instead of mounting as an SD card seems to be better in most ways, and the battery is better than the EVO 3D.  Even without 4G turned on, my EVO 3D consumes battery life quicker than the Nexus does with 4G turned on.  So, better battery life and 4G speeds to boot.  I also like the build of the phone.  I was a little uneasy about the rapidly increasing sizes of phones these days, but the Galaxy Nexus feels and looks awesome in my hand.  Even the monthly plan is technically cheaper, as long as I leave T-Mobile in less than 12 months, because of the lack of an early termination fee.  I miss visual voicemail, a feature I've enjoyed since my first iPhone in 2009, but supposedly Google Voice will allow me to get visual voicemail again.

Is the Galaxy Nexus better than the Galaxy S III?  Probably not.  Is T-Mobile better than Verizon? The 4G is definitely slower, but the 4G is less battery-consuming and the plans are definitely cheaper. Will this do until I can get a new phone in a year or less? Definitely.

Sunday, February 19, 2012

Speculation: Android and Others in 2012

Where are non-iOS phones going to go from here?  First, let's talk about Android updates:

Obvious Android Hardware Updates
  • Higher resolution tablets and phones: The updated Transformer Prime (700T) due in the 2nd quarter of this year will give us the first "full HD" (1080p) tablet (unless the iPad 3 is released first), but it is unknown when we will get a full HD phone.  The 720p HTC Rezound released last year certainly has me salivating at the idea.  Especially in this age of 4.6" and up Android phones, 1080p shouldn't be too hard to pull off.
  • LTE phones on Sprint and AT&T- LTE has beaten WiMAX in the 4G wars. Sprint and AT&T have been building their LTE networks, and LTE coverage is already available in certain areas.  The only question is how long T-Mobile will hold onto their plenty-fast HSPA+ network.
  • Better cameras: The iPhone 4S and the Nokia 900 have/will have perfectly brilliant cameras, so it stands to reason that Android will step its game up in this area
  • Quad-core processors, more memory: These specs have been steadily increasing for all smartphones, like the (rumored) quad-core, 2GB Motorola Atrix 3 
  • NFC: The last two Nexuses and the Samsung Galaxy S II have had this feature (along with some others), so it can be reasoned that more and more phones will get NFC, especially if Google Wallet catches on
Android Battery and OS Updates
There are two big specs that I'm waiting on.  The first is battery capacity  The Droid Razr Maxx has a 3300mAh (!) battery that pretty much doubles the life of the Droid Razr, an Android phone with pretty standard battery life.  Engadget played a video on loop for 16.5 hours on that thing, which is outstanding.  If this doubling of battery life is possible by increasing the thickness of a 7mm phone to 9mm, imagine how big a battery could fit in, say a 11mm phone.  Quadruple?

The other big "spec" update I'm looking forward to is the operating system.  Android is great for customization, but has always been lacking in the stability, pretty-to-look-at, ease-of-use, and efficient-OS specs.  I am hoping Android improves these qualities.  These aren't hardware changes; these are software issues.

First is the aesthetics, which Ice Cream Sandwich (Android 4.0) has sufficiently addressed.  I'd have a hard time saying ICS is as pretty as iOS or Windows Phone 7, but it's definitely leaps and bounds better than Gingerbread.  When I compare a stock Gingerbread phone to iOS, it's like comparing Windows 98 to Mac OS X.  There may still be room for improvement here, but if nothing changes this year, I'll be alright with it.  In fact, I think there's little to no reason to skin Android anymore, so hopefully we'll see a reduction in the skinning of Android by HTC, Samsung and Motorola.  That won't happen immediately, of course, because skins are how manufacturers set themselves apart and pure Android Nexus phones always have hardware specs that are slightly worse than competing Android phones.  But I bet by 2013, manufacturers will have a hard time convincing users to buy phones that look worse than pure stock Android phones and get updates months later.  I've been led to believe that bad skins are a large reason for Android instability, so that should improve with more stock Android phones.

Much like the Windows vs OS X debate, Android is arguably more difficult to use than iOS.  Partly this is due to the lack of features and customization in iOS, but some of this is due to inconsistencies in apps.  For example, checkboxes are different in the settings for every app.  Some change their text when the box is checked, and others don't.  Concrete Example: In the settings for Handcent SMS, checking "Enable popup" in the Notification Settings will change the descriptive text to "Popup is enabled" and unchecking the box will change the text to "Popup is disabled".  Yet, just a few lines below that, the text below the Notifications checkbox reads "Display message notifications in the status bar" whether the checkbox is checked or not.  This descriptive text is useless when you can't tell if it applies to the current state of a setting or if the text is just static.  There are quite a few usability issues in Android like this.

Google took a step in the right direction.  They created an Android Design page to guide developers to creating intuitive, beautiful apps.  Sadly, descriptive text for settings is not addressed, but I'm sure this will be helpful nonetheless.

The OS itself may get some new usability features.  I really just want an "undo" feature.  But I can also see Google copying Apple's Siri, by giving more advanced voice capabilities to Android.  There are Siri-esque apps out there, like Iris and Jeannie, but they pretty much garbage compared to Siri.

Lastly, efficiency improvements are of utmost importance.  Slapping a huge capacity battery into the phone may be a sufficient solution, but Android needs to be better at managing its tasks.  If background data is turned off, then no programs should be running, unless they are OS-related tasks.  And my phone battery shouldn't dwindle down to nothing if I'm in an area with no cell coverage.

Android Price Point
As I said in the last article, tablets are going to get cheap, but that mostly refers to used, refurbished and discount tablets.  No one will be able to touch Amazon's Kindle Fire at $199. Tablets are still developing and adding features, so I imagine the average decent Android tablet (and iPad) will stay at $500 for another year.  While the introduction of Windows 8 tablets this year, one might expect the price to drop, but the hardware requirements for running Windows and the cost of a Windows license will probably make standard Win tablets $700 and up.  Amazon has a unique position here, using a free OS and an ecosystem that lets them sell tablets at a loss but make it up in media sales.  I look forward to the sequel to the Kindle Fire: a tablet that is $200-$300 but not as underpowered as the current Kindle Fire.


Windows Phone 7
This may be a good year for Microsoft fans.  Windows Phone 7 phones will start to catch up with iPhone and Android phone specs.  The upcoming Lumia 900 will be a 4.3" LTE phone with 16GB of memory, and a 8MP camera with 720p video.  I know what you Android fans are thinking: "Welcome to 2011, Microsoft."  Still, Microsoft has been steadily upping their game, especially by adding Nokia as a manufacturer, and while they may not catch up to the top-of-the-line Android phone this year, they have the rock-solid WP7 OS as a selling point.

Windows Phone 8 is rumored to be released this year, and that should bring many cool updates, like support for multiple display sizes, NFC, and some type of desktop OS (Windows 8) integration.


Blackberry
Blackberrys will continue their descent into insignificance.  RIM did a good job of booting their old CEOs but probably made a mistake hiring Thorsten Heins as the new CEO.  RIM stock took a dive when he was appointed and although it came up a bit a few days later, it's currently back down at 15.07.  Numerous bloggers have voiced their disapproval of Heins, mostly noting that he isn't going to make the drastic changes RIM needs to compete with Apple and Google.  What actual changes are in store for RIM and Blackberrys this year?  I don't really care; researching BB depresses me.  The only consolation is that they are still handily beating Windows Phone 7, though I am sure this will not continue.

Monday, January 16, 2012

Speculation: Apple Tech in 2012

Before I start with what's happening this year, I'd like to review what happened last year.  However, no one could possibly do a better job reviewing last year's tech stories than The Verge did a few weeks ago.  They covered everything except the death of Dennis Ritchie.  And let's be honest: you have no idea who that is.

On to 2012!

Apple iPad
The iPad 3 should drop in March or April, according to some sources.  Most rumors point to it having a higher resolution, Retina-Display-like screen and a faster processor (the A6) that might be quad-core.  The resolution is likely to double, giving the iPad a 2048 x 1536 resolution that would be better than full HD (1080p), but still not as good as an iPhone at 264 ppi (the iPhone's Retina Display is 330ppi).  However, since iPad is bigger than the iPhone and you hold it farther from your face, the resolution will be nearly as impressive.

The 3rd gen iPad could have some sort of 4G antenna, most likely LTE.  The terrible cameras will be upgraded, but I'm not sure whether the back camera will be as good as the iPhone 4S's back camera. PC World suggests the tablet may be thicker to accommodate new screen technology.  I think this is doubtful since, as they say in the article, "Apple products never get thicker, only thinner."  However, the addition of an LTE antenna has made several Android devices thicker (see: Galaxy Nexus), so if the iPad is a millimeter or so thicker, I'm betting that's the cause.

I haven't seen any tech outlets suggest this, but I'm sure it will have Siri.  It's a cool iPhone feature, the iPad will have the power to handle it (well, they all have the power to handle it, but that's another blog post), and it gives users another incentive to upgrade.

The price, of course, will be the same.  The old iPads will be discounted.  For some reason they're not selling the iPad 1 at the Apple Store (ignoring the Refurbished section), but I could see them selling the iPad 2 at a cheaper price, at least for a few weeks.  The cheapest iPad 1 dropped $100 when the iPad 2 came out.  Seems logical that the iPad 2 could drop $100 soon, too, making the iPad 1 cheaper on eBay, if not cheaper in the Refurb section of the Apple Store.

Tablets are about to get dirt cheap.

Apple iPhone
At some point this year there will be an OS update to iOS 6.  I have a difficult time imagining what it could contain... perhaps widgets?  Facebook integration?  I strongly believe Siri will finally be upgraded out of "beta."  This means support for more languages and an API for developers to hook into.  That could produce some awesome things, allowing apps to use Siri.

The 6th gen iPhone will have LTE.  There's just no way around this one.  The iPhone 4 missed having real 4G, which was acceptable because only the EVO had 4G at that point.  The iPhone 4S missed having real 4G, which was widely regarded as a mistake, given that there were dozens of Android phones using Verizon's LTE, T-Mobile's HSPA+ and Sprint's WiMAX.  Now there is no reason not to include an LTE antenna.  Sure, battery life will take a hit, but iPhones have had a great reputation for battery life (with some occasional lapses), so I'm sure the slightest increase in battery capacity will at least put the iPhone on par with other LTE phones in terms of battery life.  Additionally, since WiMAX is dying (Sprint is switching to LTE), AT&T has started rolling out its LTE network, and the iPhone is still unavailable on T-Mobile, the three national carriers that sell the iPhone will all have a decent-sized LTE network by the end of the year.  Even Windows Phone 7 phones are getting LTE this year.  Apple might as well hang it up if they can't manage to stick LTE in their next iPhone.

I wouldn't be surprised to see the iPhone on T-Mobile.

The chip may be an A6, like in the iPad, but if the A6 is indeed a quad-core processor, I'm not sure it will make it into the iPhone for power and heat reasons.

New design.  Maybe.  Apple put a lot and time and effort into designing the iPhone 4/4S and, honestly, it's still the most gorgeous phone out there.  The Droid RAZR is nice, we all like to look at Sony Experia phones, and the Nokia Lumia phones ain't too hard on the eyes either.  But the iPhone has a cleanliness, weight, and build that cannot be matched.  Why mess that up and chance making an uglier phone?  Mockups of what the 4S was rumored to look like are resurfacing, and I have to say: I'm not a fan.  The tear drop shape is not beautiful as the iPhones currently untapered bar shape, and the lack of any bezel means lots of accidental screen touching when just holding the phone.  Many gadget blog commenters were upset with the lack of a larger screen on the 4S (and these comments/articles were followed by poor explanations of why 3.5" is the "perfect" size), so I could see a slightly larger screen on the next iPhone (definitely nothing like those 4.5+" Android phones, though), but the rest of the phone should stay the same. Or get slightly thinner.  And maybe reduce the bezel at the top and bottom, but not the sides.

NFC, maybe.

The biggest question to me is what the 6th gen iPhone will be called.  Much to my chagrin, many tech news sites have been calling it the iPhone 5. I think it's mostly because people had high hopes for the 4S and they have poured them into the 6th gen iPhone.  Apple has a lot of options for the name:

  • iPhone 5: This would be a way for Apple to acknowledge the mistake that was the iPhone 4S by pretending their 5th gen phone didn't count.  It also is the dominant name for the next iPhone on tech blogs, so most people would accept it easily.  Additionally, if they wanted to call the 6th gen iPhone an "iPhone 6" then the 4S should have been the "iPhone 5."  And, of course, 5 follows the 4 in the 4S.  Simple.
  • iPhone 6: This is not a great name, but it would follow the 4's convention of naming the phone after the generation of the device.  And naming a 6th gen phone the "iPhone 5" makes no damn sense at all.  It's going to be running iOS 6, probably on an A6 processor.
  • iPhone 4G: This would be a great name.  It emphasizes the LTE antenna and continues with the pattern of naming the phones after the antenna (i.e. the 3G) and the current trend of a 4 in the name.
  • iPhone LTE: This also would be a great name.  By leaving out a number, Apple quells the iPhone 5 vs iPhone 6 argument and starts a new trend, while still emphasizing the new 4G antenna.
  • iPhone HD: If they upgrade the resolution--especially, if they double it again--the next iPhone could have a better than full HD screen.  iPhone HD would be a great name that shows off this feature.
Apple TV
Apple is rumored to be working on a television set.  If so, you can bet it will be basically an LED TV with Apple TV integrated into the set.  It wouldn't make sense for anything else fancy (like blu-ray playback), basically an answer to the poorly-received Google TV.  iTunes/iPhone integration and maybe Siri.  Can't see it being a bit hit, so I'd be surprised if they actually released a TV set.

Oops, outta time. Android 2012 rumors next time.

Monday, January 2, 2012

Code: A Cursory Review of Some Programming Languages

"What's the best programming language?" This is a question I sometimes see at Stack Overflow and other places on the Internet. It's a ridiculous question, of course. There is no one best programming language. Each language has its pros and cons. The question should be "What's the best programming language for what I want to do?" The answer to that question, of course, depends on what you want to do.

In this article, I will review some of the languages I have used and cover their strengths, weaknesses and uses. I must preface this article by admitting that I am still a junior programmer. My opinions may change with more time and further experience.

C++
If I were to recommend one language to learn to any future software engineer, C++ would be it. It's fast, it's powerful, it's compiled, and it's well-known, but most important of all, it's widely used. Many sources put C++ somewhere near the top of the list of the most popular languages, but I personally estimate that it is the most widely used programming language by professional software engineers, with the possible exception of web scripting languages.  It's great for application development and I imagine that most consumer PC software was written in C++ or C. C++ is a superset of C, so it works well with C code and C libraries.

Note: Compilation may or may not be a benefit. To me, compiled languages are preferable because they will work on any computer with the same operating system type. This contrasts with interpreted languages and what I'd call "virtual machine languages" (like Java) that require an interpreter or VM to be installed to use. C++ programs compiled for Windows Vista will work on any Windows 7 computer, regardless of the software installed. Well, there may be issues porting 32-bit programs to 64-bit programs. Also, library dependencies or any other file dependencies could reduce compatibility. Aside from those minor exceptions--which can also affect non-compiled languages--I'd say compiled languages are more portable than non-compiled languages.

There are, however, several drawbacks to using C++. One is that it's not as high level a language as newer languages. Programmers still need to explicitly manage memory. There are several syntax holdovers from C++'s predecessor, C, that I find ineligant.  But the main issue I have with C++ is that it's a huge language that allows you to do things in many ways. To roughly paraphrase a Berkeley computer science professor: "C++ is such a monstrosity of a language that, had it a mother, it would have been killed by its mother at birth." I like to think he was talking about the largeness of the language and how, while it may not be that difficult to learn, it is impossible to master. I don't know if I've met anyone who can claim to know the complete syntax of C++. I am a little embarrassed about how every day I learn something new that I can do in C++.

This may sound like a benefit, that C++ is a flexible, powerful language with many ways to solve a problem. It is not a benefit. It means that reading other people's code can be a nightmare. If the program's author has a unique style, you are constantly trying to see if their coding decisions are even valid C++ code, or why they made the style choices they did.

I hate C++, even though I have a great working knowledge of it. Like a gift of bad whiskey, I tolerate it because I have to and it gets the job done.

C
C is the predecessor to C++. It's also compiled, fast, and pretty powerful. It's often used for drivers and in embedded software. I've been told that there is no reason to write anything in assembly code since an optimized C compiler will do a better job creating a concise, fast program than a human programmer. I like C because it's a small, concise language, yet it can be used to program anything.

The main drawback C is that it's such a low-level language, it has a learning curve (especially when doing complex things with pointers). Similarly, C is a pretty unsafe language that assumes the programmer knows what he or she is doing. A C compiler will never complain when a programmer assigns structs to char pointers, nor when he attempts to access unallocated blocks of memory, making it easy to accidentally cause runtime exceptions.  Almost anything is valid C code.  A computer science professor once opined: "C would compile a phonebook."

Java
Java used to be my favorite language until recently.  It's compiled to an intermediate language, which means you need a Java virtual machine to run Java programs, but Java has reach near-ubiquity on PCs, so most PCs can run Java programs.  The Java VM has had several major updates in the last few years, so the only cause of any compatibility issues is most likely an out-of-date VM.

Java is a nice high-level language.  It's garbage-collected, so memory management is mostly a non-issue and, unlike C and C++, it's quite object-oriented, so it's arguably easier to learn.  The creators of Java obviously learned from the pitfalls of programming in C and C++, and it shows with String handling, the lack of pointers, and its object-oriented-ness.  It's often billed as good language for web applications, but I think it pales in comparison to web scripting languages like Javascript and PHP.  Instead, I'd recommend Java for regular application programming.

GUI programming is relatively painless in Java, and is definitely a pleasant change from MFC.  Java is probably the best language to use if you want to do a cross-platform GUI program, since the GUI libraries are the same for Windows, Linux and OS X.

Java does have a few flaws.  One of the main ones to me is that you can't generate a simple executable that will run on machines without a Java VM--that is, without some special 3rd party compiler.  The other main one is that Java programs are slow when starting up, just-in-time compilation notwithstanding.  These are both issues inherent in virtual machine languages.  C and C++ gurus that love the simplicity and power of pointers may detest their absence.  Also, while Java is pretty powerful, I don't think it's as powerful as C and C++.  Which is why several major programs written in Java (like Eclipse) also have parts written in other languages.

C#
C# is now my favorite language.  It seems to be Microsoft's version of Java.  It's high-level, compiled to a intermediate language (CIL), object-oriented, and garbage-collected.  With out and ref, you get the functionality of pointers.  And while I haven't researched this extensively, C# programs seem to start up faster than Java programs.

The only drawbacks I can see with C# are the facts that it doesn't compile to native code (which may result in some slowness and incompatibility) and that it's Microsoft-proprietary.  Microsoft created the language, but there are no Microsoft C# compilers for non-Windows operating systems.  There is only the Mono project, which I haven't checked out and I doubt has 100% compatibility with C# programs written for MS Visual Studio.

ML and Scheme
I bundled these two together because they are both (usually) interpreted languages that can be used in a read-eval-print loop (REPL) and both are languages I used in college and haven't seen elsewhere.  Also, both can be described as functional languages, especially ML.  As functional languages with REPL interpreters, they are excellent for writing mathematic algorithms and short, quick programs where the programmer can get immediate output.  This contrasts with compiled and imperative-procedural languages where short programs take longer to write and require more steps to compile and run.  But because they are functional, they may be harder to learn for someone who is used to C-based languages.  This could be the reason that they are less widely used.

Ruby
I haven't used this enough to form an informed opinion of it, but I do think Ruby the only language that can claim to be truly object-oriented.  Even the numbers are objects.  Ruby has innovative aspects to its syntax--like blocks and iterators--that make it an intuitive and flexible language that is a pleasure to code in.  However, Ruby is fairly slow, so, like ML and Scheme, I think it's best suited to scripting and small programs.