Aessential Android Apps

android Now that I’ve been using my Android powered T-Moble G1 for several weeks, I thought it would be a good idea to share some of the applications that I find essential.  They range from true productivity to mindless time sucks, so take each as it is intended!

TouchDown for Android and Exchange

This is a great application giving access to my company Exchange server.  The UI and feature set is very nice.  I have access to my inbox, calendar and contacts.  It also has the ability to get to my other private folders.

The folks at NitroDesk have done a nice job of keeping the UI familiar for both Android and Outlook users.  It will, if you configure it properly work in the background and integrates with the standard Android notification system.

TouchDown seems to be developing fairly quickly and their team is quite responsive to questions via email.

aTrackDogaTrackDog

This is a great application that helps you keep your installed apps up to date.  It checks multiple sources to ensure your applications are running at the latest release and gives you an easy shortcut to update them if it finds that they are not.

The Weather Channel

This is a nicely done, good looking weather app.  Not only does it give you the standard current conditions and forecasts, you can also download the latest Weather Channel video for your area and it integrates with maps to show you local weather stations and their reported conditions.

Shazam Shazam

This one is just cool.  So you’re out and about town one day, maybe riding with a buddy in his/her car.  The radio is playing some random music station when a song comes on that you want to know more about.  You whip out your G1 and fire up Shazam and let it listen to the song for a few seconds.  It goes and figures out what the song is, the artist and even lets you look it up on Amazon or search YouTube for videos.  I still get giddy when it tells me about some song that I had no idea what it was.  Wicked!

Power Manager

Let’s face it, the battery life on the G1 isn’t the greatest.  This little app gives you power profiles that will let you switch quickly and will even apply them when circumstances dictate.  Out of the box, for example, when your battery drops below 30% it turns off your WiFi and GPS automatically and shortens the time before the screen dims when inactive.  As a side-benefit, it also gives you quick access to toggle your WiFi, GPS, cell tower locations and bluetooth.  It’s a must have!

Solitaire

Ok, so this is a total time waster.  I don’t know what it is about solitaire, but it is a great way to spend that time in a waiting room.  This one includes Klondike, Spider and Freecell.

Honorable Mentions

There are quite a few more that I”ve installed and many that I use fairly often, but those above are the ones that I find I really would miss if they weren’t there.  Here they are in no particular order:

Do you have any favorite applications not listed here?  Let me know what they are and why, I’m always looking for new ones!

The truth about the T-Mobile G1 Android powered phone.

In a word (or two)…it rocks!

Recently I wrote about the initial unboxing of the twin G1’s my wife and I purchased.  I have not had it for a little over a week and a half so I thought it was time to share some of my thoughts on the experience so far.

The User Interface

image The UI is fairly intuitive.  As I stated in my previous post, my wife never had to open the Getting Started book.  That was fabulous.  The sliding and scrolling actions seem very smooth and natural.  I really like that.

I like having a home screen that is easily customizable.  Moving icons and widgets around is as easy as a tap ‘n hold.  Additional feedback is given via a brief vibration when the item is ready to move.

The notification system is great.  Icons appearing in the top that expand with a quick drag to see the details is a much better system than I was use to with Windows Mobile.

Setup

Getting my Gmail settings going was easy.  Now I can get to my mail or calendar with 1 icon tap, and the interface for Gmail is based on the web version complete with threads and labels.  Very nice!

Contacts also come from Gmail.  This was a bit of a struggle at first.  Most of my Gmail contacts were still in the suggested contacts state which meant I had some work to do in order to get them into my phone properly.  In addition, most did not have phone numbers associated with them and I am afraid I am a ways off from making that happen.  I am a little gun-shy about importing them from my SIM card as I feel this might create a bunch of duplicate entries that I would have to go back to correct, but I will admit I have not tried it yet.

Operation

image For the most part things are very easy to do.  Making calls, sending text, etc.  The one thing I have noticed that is a bit of a drawback comes when you want to change your settings.  Most items are accessed through the settings menu, so changing your ringer profile, toggling WiFi or Bluetooth, etc…  Fortunately, there are some very nice, free apps that put these items into one easy place.  It would have been nice out of the box, but the solution wasn’t difficult.

The battery life is ok considering everything it does and the amount of use I’ve been putting it through.  Watching videos, using the GPS with Google Maps in street view (and compass mode!), browsing the web via WiFi.  These things tend to drain the battery so you can’t expect too much.  I’m charging it about once a day with a 24 hour usage bringing me between 25% and 60% of remaining life.  Not terrible by any means.

YouTube.  Wow, this is very cool!  I have watched many videos, used search and went into the popular categories.  Over WiFi the quality is great, and even using the EDGE network (we get 3G in March) the video performance is more than fair.  I did not have high hopes for the EDGE scenario; however it looks like they scale the quality down to a level that allows the stream to work with the slower network, yet it is still quite viewable.

The Android Market

image There are a lot of cool applications, and many more that are not so cool, available in the market.  I’ve personally sampled close to a hundred already and I’ve narrowed my current install set to around 20-25 that I use.  The installer and uninstaller seems to work well.  I haven’t run into any problems yet, although I’ve heard that some people have had issues.

Some of the applications fill a definite hole in the out-of-the-box UI, but as stated earlier, they are fairly easy to find and install.  Others are nice add-ons that can help in certain situations, and still more are great time wasters 😀

Here is a list of some of my favorites:

  • aTrackDog – This helps you stay apprised of updates to your other installed applications.  – Must have!
  • Power Manager – Has automated, customizable profiles for different power situations.  I like the way it turns off my Wi-Fi if my battery level drops below 30%.
  • aSettings – This app puts most of the toggles you need (WiFi, Bluetooth, Ringer profile, GPS…) on 1 screen.  I set up a home screen shortcut to it.
  • Scoreboard – Sport score update application written by the Google folks.  Does a very nice job.
  • ConnectBot – A little ssh client used to connect to linux boxes.
  • PhoneFlix – Allows management of your Netflix queue from your phone.
  • Ringdroid – A nice application for creating ring tones from your MP3 files.  It lets you choose the portion of the song to save out as a ringtone file.
  • The Schwartz Unleashed – A total time-waster, light-saber application, but very cool!
  • The Weather Channel – Exactly what it sounds like, get current conditions and forecasts.  Even does videos.
  • Twidoid – For all your Twitter needs.
  • QuickPedia – Mobile interface for Wikipedia.  It includes nice formatting of the articles.
  • wpToGo – Nice blogger client if you happen to have a WordPress blog.

Summary

I am very happy with the phone.  My wife seems to really like it as well.  So far things have gone smooth and the decision seems to be a good one.  My overall opinion is that it is a good phone and if you are in the market for something like this, I would recommend it.

I Am Android

image The cell phone I’ve used for the past year and a half finally gave up the ghost.  I was using an HTC P4300, one from the touch screen family of HTC phones.  For the most part, it was OK as a phone platform; however, the Windows Mobile 5 operating system did have it’s issues.  I believe that I had to hard reset it to factory defaults and reinstall and configure my system 4 or 5 times during it’s life span.  That’s not terrible for someone in the tech industry, but your average phone user would probably find it irritating.

The phone recently went into the mode where it decides to start rebooting itself continually until it is plugged in to its power source making it utterly unusable, so it was time to start shopping.

I looked at some of the comparable upgrade options in the HTC, WinMo family.  There were some promising modes, but alas my carrier only had 1, and it was roughly 8-10 months old.  Considering the price tag approaching $350 USD. I decided that it was bit more than I really wanted to spend.

My options were to move to the Crack…er…BlackBerry.  I’ve never really like them so other options simply did not have the capabilities I wanted and needed.

imageOn to another carrier!  T-Mobile has the G1 (on the HTC Dream) running the Linux based Android system.  Here is a platform that has most of what I need and I have the ability to write my own applications for it, as I did with Windows Mobile.  I decided it was time for a switch.

At the same time my wife’s phone has been giving her fits.  She was ready for something new as well.  At first, all she wanted was a phone; however, the more we talked the more we came to realize that she really wanted more than that.  One of her highest priorities was the ability to easily get to her GMail account from her handset so we decided to get her a G1 as well.

I must admit that I was a bit worried.  I’d read some reviews that knock the so called “Google Phone” for not having a UI as polished as the iPhone.  While my wife is more tech-savvy than many that are not part of the tech sector, I did not want her to struggle with her telephone.

After talking it through, we went ahead with the order.  Due to the demand, the phones were not in stock in the store so we had to wait, anxiously , for them to arrive.

Our new G1’s arrived by UPS on a cold Tuesday evening.  After charging them up and flipping through the getting started guide to make sure it was easy to follow, I handed the guide and phone to my wife and grabbed mine to start setting it up and exploring the Android Market.

45 minutes later, from the other side of the couch, I heard a sound that brought me back to my youth.  It was the familiar song denoted the start of a game of Pac-Man.  I had seen it in the app market, so I had to laugh a bit and ask my wife what was going on.

Me: “Wife, what’cha got there?”

Wife: “shhh…oh..oh!!!! Dang it!” <followed by the bwoop bwoop of Pac-Man dying>

Wife: “I downloaded Pac-Man, this is SO COOL!”

Me: “Good, so you’re feeling OK with the phone?”

Wife: “Yeah, it’s pretty cool.”

Me: “Did you get your GMail set up?”

Wife: “Yeah, and my calendar is there too.”

Me: “Great!”

Wife: “Yeah”…pauses…”You know, It says a lot about a product when you are able to set everything up you want to without cracking open the book at all.”

Epic win for the Android in my opinion.  Thanks Google & T1!

How to allow WordPress to upload images on an SELinux enabled server

I recently had to put up a blog running the WordPress system. There are a lot of things I like about WordPress and in general the difficulty in getting the site up and running was low.

The problem came about when an image was needed on the site. The software gave me the infamous “Is its parent directory writable by the server” message. After confirming the permissions where correct I began to dig deeper. It turned out that SELinux was causing an access denied message.

After much research on the matter, I learned a few things. First, most people simply turn off (example, example, example) SELinux. That was not an option for me. I want the extra contextual security provided. Second, it was not a WordPress problem, or even an SELinux problem. In reality, it’s simply a configuration setting put in place to make unauthorized uploads less likely.

It turns out that the security policy will only allow the httpd service to upload to the /tmp directory. Examination of that directory shows that the context includes tmp_t. That is the ticket that got things working for me. Here’s my solution to this issue:

  1. Change directory to the wp-content directory of the WordPress software.
  2. Made the uploads folder manually.
    mkdir uploads
  3. Changed the owner of uploads to the appropriate user that apache runs as (as root).
    chown httpuser:httpuser uploads
  4. Changed permissions to allow the apache user to write to the directory (as root).
    chmod 755 uploads
  5. Changed the SE context of the directory to allow httpd to upload file (as root).
    chcon -t tmp_t uploads

That did it. Not terribly difficult, but there is not a lot of concise documentation to be found when looking for this problem. It is very possible that there is a better way to accomplish these results, and if you know that it is please let me know! I can say that my configuration is working today and, at least so far, everything seems to be working fine and as secure as it can be.

The final output of ls -Z for the uploads directory should look something like this:

drwxr-xr-x httpd httpd root:object_r:tmp_t uploads

Cheers.

NFS Server on Windows; What a pain!

We use a nice open source package called BackupPC.   It is a nice system with a powerful web interface that has many capabilities to interact with other nix and windows based hosts.

We had been using smb (Samba) to do most backups from windows hosts, however there was one problem with our Exchange Server.  The backup file was huge, roughly 16GB using ntbackup.  Samba has a limitation of 2GB files for transfer, so that was a killer.

Initially I took the “quick and dirty” route.  I created a batch file that ran the backup and use the split command to split the backup file into 500mb chunks.  It worked, but what a hack!  Recovery means restoring the files and using join to get them back together.  Not a fun prospect.

I recently ran across the the Windows Services For Unix (SFU) on a different server and found that it had the ability to add NFS server functionality to a Windows 2003 server.  Hallelujah!  No more 2GB limitations!

I looked up documentation on installing and configuring things.  I found that I had to implement User Mapping in order for Windows to translate UNIX users to Windows accounts.  No problem, it all seemed very straight forward.  I set up my shares, made sure my permissions were correct and that my users were mapped.   The drive mounted on my Linux box perfectly!  Then I tried to list the contents:

Permission Denied

Dang, so close!  I must have mucked up permissions, right?  Wrong.  I went through all of the standard troubleshooting, opened the share up to everyone including root access, mapped, remapped and changed other settings.  Still nothing.  Ugh!   Time to search Google.  I found many similar issues, but nothing that was what I really needed.  Many people had permission denied problems that turned out to be issues with user mapping or root access.  Not my problems, although I tried everything I found.

Finally I went directly to Google Groups and began searching.  After a few pages of things I’d seen before, I ran across a post that pointed me to this TechNet article.  I do not know why it was so hard to find this.  Searches at the MS Knowledge base did not yield these results.

Anyway, it turned out the only problem was a single initial setting all the way at the top of the SFU snap-in.  It is under the Settings tab and it simply says Server Name.  It was blank!  I would have thought that it would put the default name of the server in there, but it did not.  No biggie, I changed it and viola, everything worked!  I backed out of all my troubleshooting changes to give access only to Backup Operators and no root access to the share and things ran very smoothly.

Hopefully someone may find this pointer faster than I did, if so then my work here is done!  Until the next problem of course.  🙂

Development Cycle

The company that I work for has a web-based product/service that we sell, a content management system that I feel (yes I am a bit biased) is a very nice, user friendly system that empowers website owners to keep their content fresh easily.

Now that my marketing spiel is complete (and not a good one at that.  I am an engineer after all!) I will move on to my point.  How do we keep adding new features, fixing existing bugs and maintain quaility in our product?

I will preface this with a few notes.  First, we generally have a high satisfaction rate.  Our customer service is excellent and the product works well.  It is one of the more user friendly packages that I have seen that does not pigeon-hole our customers into “canned” looks.

Second, we are not perfect.  We do updates roughly every month, and while many of them go smooth, once in a while we lay an egg.  The severity of the bugs introduced and the number of customers that it affects determine if that egg is from a quail, or an ostrich.

The goal is to continue providing enhancements and features that our customers will find valuable while reducing both the number and size of the eggs that are laid, that is publishing with fewer and less critical bugs.

The way to make progress towards our goal is by using a dicipline in the development cycle to manage the risks.  It’s not complicated, but there are caveats that I will discuss in a moment.

As stated before, we publish updates on a fairly aggressive schedule which averages about once a month.  This means that the first step is to choose a target publishing date.  For example we will say the next publish in on the 30th, a Thursday.

Now that we know when we are publishing, we begin to work everything backwards.  We know that our product must go through a quality assurance (QA) cycle where users that are not developers will test and try to break the code, find the bugs and help get them fixed.  As a rough estimate we will want a week of this.  That is our next date, the 23rd.  This is an important date.  By the 23rd the development staff must be done fixing and adding features.  If something is not complete by this time, and this is the important part, it does not make it into this cycle.  This is perhaps the second most difficult part of the process which I will explain in a moment (again) with the other delayed topic.

Working off of the date of the 23rd, we have another date to calculate.  Before the product goes into QA the developers need a certain amount of time, say 4 days.  This means that by the Monday the 20th, we are only testing things that are complete.  Once again, anything not finished in our minds by this time to the point where the developers are just testing does not make it into this publish.  This is the most difficult part of the process!

So far we have the 20th where features and fixes may get dropped, and the 23th where features and fixes that were thought to be completed by the 20th but did not make it through the 4 day testing/fix/repeat process are once again dropped.  The reason these to points are so difficult has no technical reasoning, but rather psycological roots.  We (humans) want to make other people happy, and the way to do that in our business is by fixing tings and giving them more, therefor the mentality becomes, “I can add this one last fix tonight and John Doe will love it!”  This is a good quality to posses, but it is dangerous if not tempered.

There is one more important piece to this puzzel that I have not yet mentioned.  Defining the items to be worked.  This is a two-fold process.  First bugs and features must be combined into a prioritized list.  The driving foce behind this list needs to be customer service since they are on the front-lines talking to the people using the system every day.  By the way, customer service should also be heavily involved in the second QA portion of the cycle.  Second, management budgets a certain amount of time/money for the product.  This determines how far down the priority list we think we are going to on this cycle.  Note that the dates of the 20th and the 24th may decrease or increase that number.

The point is sticking to your guns and being honest about the drop-off dates.  We have learned that as we add features and fix bugs in an attempt to make people happy at the last minute, those items do not get the attention necessary in QA to ensure a smooth release.  They will ususally result in an egg, and sometimes it’s an ostrich that is laying it.

The difficult part in those dates comes from the fact that we must say “no” to something, which means that we are effectually saying “no” to someone and that goes against our nature.  It is a necessary “evil”, if you will.  Saying no may dissapoint, however saying yes many times will cause many more people to become frustrated and unhappy.

Someone once told me, we are defined not by what we say yes to, but rather by what we say no to.  I believe that this is true and that it defines our product.  The more we say no, the better the product becomes with increased stabilization.  The features will get added, the bugs fixed, but at a pace that is managable and does not compromise the stability by introducing more bugs that were fixed.

If you have other ideas that work for you, please feel free to comment.  I do not believe that this system is perfect, but at the time it seems to be a fairly solid process.

Mono in Fedora 5

I’ve been playing with mono since pre-1.0 days. If you haven’t heard of it, climb out from the rock you’re hiding under! It was just released that mono will be included in the Fedora Core 5 distribution. I believe that this could point to faster mainstreaming of the .NET port to Linux, which is one step closer to the ever ellusive cross-platform (heterogenous) days we are all longing for.

Sure, Java has been around for a long time, but let’s be realistic, a second cross-platform development option can only be a good thing. It should improve both! I’m not completely discounting options like perl (ActivePerl for Windows), or python, but those are niche options compared to Java, and hopefully soon mono.