Back when I started consulting I wanted to get a smartphone. Up until this point I had purposely chosen a feature phone, aka a dumb phone. I wanted something cheap that I could toss into my backpack while riding, and not worry too much if I fell. I felt that a consultant needed to be more connected, and face it, I love gadgets so it was time to step up and get something new.
Google had come out with the Google Nexus One phone. It had the latest Android OS without any manufacturer customizations. The goal of the Nexus line of phones is to have the pure Android experience and to always get the latest updates as soon as they are released. No extra apps, no extra UI junk. Noble.
I got the Nexus One, and used it for about a year and half. I love the Android OS. I like the features and functionality in the OS, and for a phone, the apps that are available are great. The customization that can be accomplished on Android are excellent too. I like that I can swap out core functionality on the phone.
A few months ago I bought an iPhone 4. There are lots of articles about how beautiful iOS is, and how much better than Android iOS is. I wanted to try the other big smartphone OS and see how it compared to Android.
This post is about which OS I prefer and why. It shouldn't have to be stated, but these are my opinions based on my usage of both phones. I an not an average computer/phone consumer, so my opinions may not be applicable to you or anyone else for that matter. A little background info on me. I use Windows, and had started using Google services long before I had my Nexus One. I am a developer, like to customize my computer environment, and I like to tinker. I also owned an iPad before I owned the iPhone.
Once I had the iPhone setup to integrate with my Google accounts I was ready to go. This setup wasn't easy though, and the iPhone never quite got my calendar synching to work smoothly. This was a royal pain as sometimes calendars wouldn't load, sometimes I couldn't add events to a calendar, and sometimes I couldn't modify an event. I never took the time to track down this issue, so I don't know what caused it. Once I got over this hurdle though, iOS was fine to use as a phone. There were lots of apps, including most of the ones I used on Android. There were loads more games for the iPhone than the Nexus, but I found that with the iPad, I used my phone less and less for consumption and entertainment.
One Android app that I really missed was My Tracks. This app was perfect for what I wanted, and I never found an iOS replacement that came close to its functionality.
In iOS there seemed to be two places that apps could have their settings. In the app, or in the system settings. There was no rhyme nor reason as to which app would have its settings where. I did find it a pain to be in an app, then have to leave it to modify settings for the app.
I don't like how iOS constrains icon placement on the home screens. Every app has to be on a homescreen exactly once, and there can't be any gaps in the placement of icons. Android has a bucket where all apps can be launched from. On each home screen the user can create a shortcut to an app. Users can also arrange icons on the homescreens any way they see fit and can leave gaps. This means that I can put my favorite or most used apps along the bottom row within easy reach. Another thing about homescreens is that in Android 2.3, the version on the Nexus, double tapping the home button displayed a small version of all my homescreens. This makes navigating to a specific screen much easier than on iOS where you have to swipe to find the one you want.
Speaking of home button, it bugs me that the home button on iDevices has so many uses. Tapping the home button from a homescreen takes you to the first home screen, unless you are already on the first homescreen. In that case you are taken to the search screen. Quickly double tapping brings up the list of recent apps. Long tapping the home button on the iPhone brings up the voice control. Android has similar functionality with the home button, but for some reason, my brain doesn't have as hard a time when mapping what I want to do to making my fingers do it. On Android, pressing the home button takes you to the home screen. Double tapping shows you your homescreens. There is no long press, and on the primary home screen, pressing the home button doesn't do anything. This works better for me.
As soon as I started using the iPhone keyboard, I realized that I definitely preferred the Android keyboard layout. That may be because I started off using Android and it may just be a familiarity thing. iOS wins on simple typing though. Apple nailed the letter prediction, and Google could do better there. Autocorrect is another thing that I think Android wins on though. When the Android autocorrect kicks in, there is a box with a number of possibilities. The user can select from the list. iOS pops up a box that has an x on it, and that looks like it should be something to choose. Instead, if you tap that box, the autocorrect is cancelled. I keep making the same mistake over and over with iOS autocorrect.
In iOS 5 Apple did a major overhaul of their notifications. I got the iPhone soon after iOS 5 was released, so I was never that frustrated by the old style notifications. Coming from Android though, I feel Apple has a long way to go in this area. In iOS the notifications are hidden unless you swipe the tray open. In Android the notification icons stay visible along the top edge of the screen, meaning I can switch on my phone, see if there is new email/tweets/whatever without having to touch the screen on my phone. Android also has proper background apps. I know that this can lead to battery drain, but there are some benefits to this. Couple this with the better notification system and I have a winner. Here are two examples: imap email accounts, and twitter clients. On my android phone these can run in the background, download new data, then set a notification. When I next check my phone I can immediately see if there is something I should read. This just fits better with how I work. On the iPhone, since there aren't really any background apps other than system apps, the only way imap email is downloaded is if I run the mail app. Same for tweets, I have to start up my twitter client and wait for things to get downloaded.
Speaking of the mail app on iOS. That is a horrible app. When I delete an email I could never figure out if the next message was going to get opened, or the previous message. The mail app integration with gmail left lots to be desired. I would delete an email, and it would not end up in the trash in gmail. There was no easy way to archive an email either. I would often have to leave a bunch of email in my inbox so that I could properly file them the next time I was at a computer.
Another stellar Android feature is the ability for apps to share data. iOS 5 included twitter integration. Oooh, this meant that a few places in the system you could use content to form a tweet. In Android an app can register to receive certain kinds of data eg text, images, etc. In an app the user can choose the Share option which pops open a list of apps to receive that data. In iOS it seems like every app has to implement its own version of sharing. This means that sometimes I can't share to the service I want. Another benefit to the Android way is that each app collects my username and password. The ability to share doesn't require this. On iOS it seems that I had to enter my passwords a lot more to enable the sharing abilities.
I find text selection in iOS a pain to work with. I find that my finger obscures the text that I am trying to select, and the magnifying glass that is presented doesn't help me that much. I also dislike how the text inside the magnifying glass looks blurry. Once a word is selected, I find the controls to expand and contract the selection to be too small to accurately grab and manipulate. Android has bigger controls that hang down below the text more. I find these controls far easier to work with. However, all is not perfect in Android land. The ability to select text in Android isn't universal, and sometimes to activate the text selection, you have to use a menu option. Clearly this sucks.
Unless you jailbreak your iPhone, iOS does not support widgets. Like I said, I am a tweaker and a tinkerer. Widgets offer some nice functionality (like system settings), and can offer a simple, easy way to get the state of something (a unread item count in google reader for example). I like widgets, and you can't have them in iOS.
I've heard so many times that it is the small details that matter. This is quite often spoken when talking about iOS. One of my bigger frustrations with iOS happened every single time I plugged in my phone to play music while the phone was connected to a Bluetooth hands free device. My truck has an input that plugs into the headphone jack, but if the phone was connected to the hands free device, the music would start playing out the hands free device, and not the headphone jack. Changing this was a pain. Suppose I remembered to do all this before I left the driveway. If I got a call the music would pause if I answered it. When I resumed the music, it would play out the hands free device. Not ideal. My Nexus One never had this problem, and the music would play out the expected device.
Another grievance with iOS is the incall controls. Supposed I call my voicemail account to delete some messages. I prefer to do this hands free, but in iOS selecting speaker phone, and getting it to show the dial pad is a multi step process. In Android, as part of the call control buttons, there is one to switch to speaker phone, and one to show the dial pad.
Stability must be mentioned. My Android phone rebooted on my a few times. When I saw this happen to the iPhone, I was shocked. I had expected it to be more stable than that. Apps on iOS crashed just as frequently as they did on Android. One iOS feature that is pretty cool is when you restart your device, when the device returns, all your apps are in the state you left them in.
Final notes. After using the iPhone for a while I decided have to sell it. To replace it, I bought a Samsung Galaxy Nexus. This new phone has Android 4 on it, which is a nice upgrade from 2.3. Many of the quirks and anomalies from 2.3 have been addressed. I certainly don't hate the iPhone, it was decent enough and I can see why so many of them have been sold. For me though, Android works better. I'm also glad I took the time to try both OS'es.
I'm working on a client project right now and I ran across something that caused me a bit of grief. I imported the database into SQL Express 2005. After the import I was able to view the db, its tables, and its data.
A couple days later when I came back to work on it some more, I was no longer able to view the database contents. Any time I tried to give myself permissions to the database, I kept getting a cryptic error about updating tables.
An exception occurred while executing a Transact-SQL statement or batch.
-> User does not have permission to perform this action. (Microsoft SQL Server, Error: 15247)
Turned out that when I imported the database the first time I had run SQL Server Manager as an administrator (I'm running on Windows 7). When I came back to continue my work, I was not running as an administrator. This also explained why I couldn't modify the permissions for my user.
I restarted the SQL Server Manager as an administrator, gave myself permissions under the Security > Logins section. I double clicked my used account in the list and under Server Roles, checked the sysadmin role. I then restarted SQL Server manager as my normal user, and voila, I had access.
I suppose this is old news to SQL Server experts, but it took me a few minutes to figure it out.
A few months ago I got an itch. I needed a new toy. I had some money and I thought it was time to get myself a smartphone. I didn't want a run of the mill iPhone either. I was contemplating Google's Nexus One. At the time Google was selling an unlocked Nexus One directly. An unlocked phone was pretty tempting. The price tag was one drawback, as well as the ongoing cost of the data plan (I can't imagine owning a smartphone and not having a data plan). It dawned on me that the last PDA I bought was $600 and this phone was less than that.
I contacted a few people in town about their Nexus One and decided to make the leap and bought one. Waiting for it to be delivered was a little painful. Once I paid for it I wanted it right away.
The day I picked it up was great except for the fact that I was out at Keating and couldn't go get my SIM card. I turned it on and was amazed at the quality of the screen. The colors were amazing and the phone just felt great in my hand. Without the SIM card I could still use WiFi to browse the web and set up the phone.
After setting up my personal and work Google accounts the gmail app was suddenly populated with my email. It just worked. The contact list showed a merged set of contacts which was excellent.
Unfortunately the calendar app only shows my calendar from my main account, which is my personal account. The solution was to share my work calendar to my home account then I get all my calendar information in one place.
Overall the integration to Google services is excellent. This makes the time I spent over the past few years entering data into Google Contacts and Google Calendar definitely worthwhile.
When I got my SIM card I also signed up for a data plan. With the SIM card in place and my account updated, placing a call was my next test. So far I have been extremely happy with the call quality. Crisp and clear. The reception has been quite good as well. I was happy with my old phone's reception, but the Nexus One is much better.
So far I have found the phone extremely easy to use. Launching apps, installing new apps, making calls, and browsing the web were all easy to figure out.
There are a few nit picky things that I don't like though. First off is the battery life. The first couple days I had the phone I was playing with it a lot and needed a recharge partway through the day. Once I got used to the phone and used it less I could easily last the day on one battery. The screen usage sure drains the batter, but it is a gorgeous screen.
I also find the external speaker is a little on the quiet side. The ringer sound when the phone is in my pocket is almost too quiet and I have taken to always having it on ring + vibe. This means the speaker phone is also a little quiet. I might have to invest in a Bluetooth headset some day. Of course that will have an effect on the battery life too.
I am not a fan of the slide to unlock feature. It is rather awkward when trying to answer a call and many times I need to try answering two or three times before it actually works. Not cool.
The phone has a built in WiFi radio. It is supposed to automatically connect to familiar networks whenever it is in range. For some reason this doesn't work as advertised. Most of the time I have to manually connect to my home network, or to my work network. Since I don't know how much data I use per month I am reluctant to just always use the 3G connection. Also, WiFi seems a bit faster.
One odd thing is that I had one spontaneous reboot. I was watching a movie that I had recorded on the phone and mid playback it froze. It was stuck for a couple seconds then the screen went black and the phone rebooted.
The phone came installed with Android 2.1 on it. One of the features of Android is multitasking. I could be running multiple apps at a time. On 2.1 this was very limited. Once I got over two apps the phone became very sluggish and non responsive. The task manager I installed usually showed I didn't have much free memory.
Soon after I got the phone Android 2.2 was released through an over the air (OTA) update. Once I got the update I installed it and rebooted. What a difference. The basic phone functions were visibly faster. I could also run more applications and it wouldn't bog down the phone like it did in 2.1 Since 2.1 installed I have not seen my phone being sluggish at all.
After installing a number of apps I started getting warnings I was running out of space. When this happens, the Gmail app inexplicably stops working. It tells me the correct number of unread messages, but it does not show them. Once I delete some apps and make room, the Gmail app starts working again. Very odd. In 2.2 there is now the ability to install apps to the SD card, if the apps enable that feature. This is handy for allowing more apps to be installed. It would be extremely handy if I could just set up the phone to auto install to the SD card if it is supported, or to move all apps that support the feature to the SD card.
Android 2.2 has a great wireless hotspot feature. The Nexus One can act as a WiFi access point and uses the 3G connection to supply the Internet connection. I used this the other day to remote desktop to another computer. Worked like a charm and was very easy to set up.
I love this phone. No it isn't perfect, but I like that Android is a more open platform that Apple's iOS. I like that I can easily create apps and release them to the world. I love how well it integrates with Google's services. I am definitely happy I made the upgrade.
I was browsing a tech site a while back and noticed that their site was littered with ads. Not only that, but their ad server was not working all that well. Nine Copies of the same ad on one web page? That seems a little extreme. I'm thinking Intel wasn't getting their money's worth on that deal
Google recently updated their interface to contacts. Normally I like their updates, but this one sucks. The actual editing of a contact is now more difficult and involves more pointing and clicking than before. Tabbing between the fields results in a horrible flickering and adding a new phone number is clunky. After clicking add, you then have to select the type of phone number.
One other thing that is awful is the phone number display when the number isn't formatted perfectly. I have a large number of contacts with parentheses around the area code. When viewing a contact like this, the last couple digits of the phone number don't get displayed. I actually wish they could revert some of their improvements.
But after years I reckoned developers do not need to be motitvated, they are motivated when they start working – otherwise you wouldn’t have hired them, would you? They are actively demotivated. Companies need to stop demotivating them.
This quote was something that really struck home. I read the article titled "Developer Motivation and Satisfaction" while working at Kodak and during a time when was very unhappy in my position. Changes the company was making were causing enough strife within me to make me consider leaving.
My favorite quote is:
They don’t have to motivate their employees. They have to stop demotivating them.
This hit the nail on the head. I still loved what I was doing for Kodak, and I still loved working with my peers at Kodak. I just hated working for Kodak. Being forced to work in a certain manner and having certain tools and restrictions dictated to me without any explanation really rubbed me the wrong way.
The prime example was email. Everyone in the Kodak Victoria office read their email then filed it away in case it was needed later. We did a lot of design, documentaion, and customer bug investigation via email so it was a treasure trove to us. The IT department mandated that we could no longer store email more than 30 days, unless it was special then we could file it in a certain bucket that allowed it to live for 2 years. Oh, and we were also being restricted to 1GB of storage and no external PST file support.
Because of this I had to drastically change how I handled email putting a much greater emphasis on thinking about an email before filing it. This caused a larger amount of my day to be dedicated to email and this was something I did not like.
Soon after the article above, I read "Unchain the Office Computers!" on Slate.com.
It explained why these new restrictions were hurting my morale.
Here's why: The restrictions infantilize workers—they foster resentment, reduce morale, lock people into inefficient routines, and, worst of all, they kill our incentives to work productively.
This jibes with Pink's argument that it's a sense of autonomy—rather than money—that drive employees to work hard. People work best, he argues, when they feel they're being left alone to do their jobs. But it's hard to feel that way if your computer is constantly throwing up roadblocks in your path.
Because of upcoming restrictions, many people in the office actively researched ways around them. That killed productivity for a while, but also made us hate departments within the company. This again is a morale killer.
As a tech worker who has suffered under these conditions I now feel free. I will no longer work for a large company with these crazy restrictions. I have seen the light. To all managers out there I say this: you have attracted some excellent motivated talent; don't screw it up by demotivating them.
With my recent job search, I've noticed something about companies that I feel compelled to write about.
Most companies care what their business partners think about them, most companies care what their customers think about them, and most companies care what their employees think about them. These companies are responsive to those individuals needs and do what they can to keep them informed and up to date.
Companies certainly don't want to get a bad reputation.
My recent experiences have given me a bad taste with a few companies. This all stems from the HR level too. Human Resources. The department that is supposed to deal with people.
I've had HR reps completely ignore my emails and questions. I've had reps ignore my voicemails. If you are working for a company and trying to recruit new employees, why would you give them the impression of an unresponsive, uncaring company? Why would I want to work for a company like that?
Perhaps it stems from the HR person not wanting to give bad news. The flip side is that if I don't hear anything from a company, I spend some time and effort following up with that company. I would rather hear the bad news earlier so that I can move on, and so can the HR person. If it isn't going to work out between myself and a potential job, I want to know as soon as possible.
So what should be done? Keep potential recruits in the loop. If you need more time to make a decision, tell me. If it isn't going to work, tell me. I'm more likely to recommend your company to others if you treat me fairly and respectfully. This is your job as an HR person.
A couple weeks ago I learned that I am going to be having a lot of free time soon. Everyone in the office I work in is being layed off.
This of course has its ups and downs. I have the whole month of December off which is great. Downside is I don't have a paycheck for very long.
One of the things I have wanted to do for a while is a little programming on a mobile OS. The hot one these days is the iPhone, but there are a few problems with that. One, I don't have a Mac, and two, there are lots of know issues getting your software into the app store.
One platform that seems interesting, and I can develop for is Android. From wikipedia:
Android is a mobile operating system running on the Linux kernel. It was initially developed by Android Inc., a firm later purchased by Google, and lately by the Open Handset Alliance. It allows developers to write managed code in the Java language, controlling the device via Google-developed Java libraries.
I started reading up on how to write apps for Android, their basic architecture, and the development environement, then promptly fell asleep. I needed to get hands on now, so I started setting up a development environment following the instructions on DataSprings site.
One issue I encountered is a bit of an oddball. I set up my virtual device properly, but every time I tried to run it, the emulator claimed I had not created any virtual devices. I tracked down the problem to a non standard computer setup. The setting for My Documents is "D:\My Documents" and the virtual device was created there. Unfortunately the emulator doesn't correctly look up the My Documents directory. It was looking in "C:\Documents and Settings\gfox\My Documents".
I fixed this first by copying the virtual devices to the C drive, but then I undid that and used junction to link the C drive device directory to the actual directory.
So far the craplet I have written has a single button that launches a second "form" when it is clicked. Not bad for a couple days investigation.
I have a couple ideas for applications, so when I am actually not working any more and have some real time to devote, I hope to make some progress.
One hurdle I might face with this project is that I have never done any Java programming. So far the code I have written is very, very similar to C#, so no big deals there. I have a suspicion that I will be referring to Google lots on this.
Over the years I have had temporary issues with tendonitis. I've seen my doctor a couple times, but it never amounted to anything. For a few days I take some ibuprofen, adjust my workplace ergonomics slightly and the issue goes away.
A couple years ago I was having a bout of tendonitis, and I decided to mouse goofy. That is to say I switched my mouse to the left side of my keyboard. The first few days were very awkward, but I got used to it.
I also read this article on Lifehacker on why it is a good idea to mouse with the non-dominant hand.
The linked article on Lifehacker posits that doing this stimulate neural connections between the brain hemispheres. I don't know if I would go that far, but I haven't had a single flare up of tendonitis since I switched.
I find it fascinating that when I sit at my computer at home I immediately reach for the mouse with my right hand, and when I am at work I reach with my left. For me mousing with my left hand seems to put me in work mode.
Another Lifehacker article claims that you can boost your willpower and increse your stamina for focusing on tasks by brushing your teeth with your non dominant hand. I think I might try this some time just to do something different.
All on my own I came up with another non-dominant hand mind trick. Whenever I am warming up to play Ultimate, I catch with my left hand. Over the years I have gotten pretty comfortable catching with either hand. I started doing this since I found that there are times in a game where you can only catch with one hand.
Pain.NET aggravates me. I don't use it very often (which is the problem), but when I do, the pre-release version that I have installed has inevitably expired. Their decision to prevent me from using the app until I upgrade is frustrating and angering. All I want to do is resize an image. I don't want to have to upgrade a perfectly fine piece of software for this.
I know that they really want me to upgrade, but forcing me to upgrade is horrible. Since this has happened to me before I think I am going to go ahead an uninstall it. My time is worth more than this. A long time ago I installed the GIMP. I might have to give that a whirl again.