Wednesday, July 20, 2011

New Feature / Enhancement / Bug Tracker Launched

As I get closer to the release of version 1.0.2.x of the Serenity Carb Counter for Android, I decided to launch an Issue Tracking System. This will allow the users to see how much progress I have made and what is left to be done. You can see the remaining issues here.

Please submit feature requests and bug reports using the Contact Us page.

I decided to use BugNET which is an open source issue tracking system. I chose it because it is implemented using ASP.NET which means it co-exists with the rest of the Celerity Software website. It took some tweaking of the web.config file to get it working on my shared host Server 2008 R2 / .NET 4. I also had to manually insert some string resources, but now that it is up I love it. I wish my shared host would allow outgoing HTTP requests so that I could allow users to log in using OpenID.

Sunday, July 10, 2011

Why I Created the Serenity Carb Counter

I created the Serenity Carb Counter for several reasons. First, years of a sedentary lifestyle, hectic schedule, and poor diet caused me to gain a lot of weight. Second, I am always looking for a reason to learn new technologies.

Unfortunately this wasn't the first time I had to lose a bunch of weight. I had dropped sixty pounds using the low-carb or Atkins diet my senior year of high school. It turned out that a few years of college, eating junk food, and living with roommates that kept a keg floating in the bath tub was a recipe for disaster. Engineering degrees are also extremely demanding, especially when you are also working twenty hours a week. I had a lot of "one credit hour" labs that I seemed to spend eight hours a week in. One example was the embedded systems class. It required a special project board with a microcontroller from Freescale on it. It was difficult to work on that from home.

I always had an excuse for why the diet would have to wait, but I finally promised myself I would lose the weight after I graduated from college. Six months after my graduation, I reminded myself of that promise after tipping the scale at 340lbs. I had recently moved to a new team at work which had me traveling about once a month to customer sites. Getting on airplanes was demoralizing. I usually did last minute upgrades to first class if possible (I covered the additional cost), so that I didn't have to be "that guy" you don't want in the middle seat.

I ended up getting an Android smart phone, the HTC Hero, a month before I started the diet. I get a lot of cross-training in many different technologies at work, but we haven't really done any mobile device development. So I got an Android book, read it, and decided to write an application that I could publish to the Android Market.

While dieting I noticed that it was difficult to keep track of my daily intake. I always try to stay in the Atkins "induction phase" where you keep the net carbohydrate count under twenty grams a day. There isn't much room for error, and they add up pretty quickly. After dieting for a few months, you learn what you can and cannot eat, but it is difficult at the beginning. I would also guess sometimes and be wrong. For example, I was at a Sizzler and decided to do the salad bar. I saw some chickpeas (garbanzo beans) and thought they were low-carb even though most legumes are not. I was confused because they are low glycemic complex carbs and not low carb.

I needed a way to quickly track my daily intake, and I needed to be able to look up the net carbohydrate content of a food on the fly. I didn't want to make anymore mistakes at Sizzler or other restaurants. I noticed there were a lot of free applications for calorie counting on the Android Market. Some of them were very cool and included features like UPC scanning. The problem was that I wasn't counting calories, and scanning UPCs takes too much time. I find that I won't consistently use an application, if I cannot accomplish a task quickly. UPC scanning loses the "whoa that's cool" factor after you use it three times, especially if you are only tracking one piece of nutritional information.

This is why I created the Serenity Carb Counter. It only tracks net carbohydrates, and it is quick / simple to use. Once you build up a list of favorites via search or manual entry, tracking your net carb intake is a breeze. I finished the search and daily journal features a long while back, and I used the application before releasing it to the public for a couple months to ensure I completed the goals I set out to accomplish.

I have been on the diet for over a year now, and I am down over 85lbs. It is probably more like a 100 hundred, since I introduced a weight lifting regiment six months ago and started tracking body fat percentage. I am enjoying my more active lifestyle, and I finally feel my age again.

I hope you all have the same or better success with the app. I still have about thirty pounds to drop. I am debating whether or not I should post "before" and "after" photos.

Serenity Carb Counter Released on Android

The Serenity Carb Counter was released on Android four weeks ago. It is available here. I am currently working on additional features and the Windows Phone 7 version. My friend is currently writing the iPhone version as well.

I am happy to see the installation count approach 250 installs after one month. The Android Market rating system has been having issues, and I have received emails from users saying their reviews are not posting. The sales also originally slowed early on due to an initial two-star negative review. I am happy with the first version, but I look forward to adding additional features to improve the ratings. Please answer the poll on this blog to let me know what I should focus on for the next version. Also feel free to send me  any feedback.

Here is what I am currently focused on:

Improve the Foods Database
The database is hosted in the Windows Azure Cloud, so it is reliable hosting. Microsoft guarantees 99.95% availability which amounts to approximately 5 minutes of maximum downtime a week. To host it in this cloud, it is more expensive, but I think it is worth it. I want the users to always be able to look up foods without an issue. The initial negative review pointed out that the database is lacking a lot foods, specifically the Atkins branded products.

I am already preparing to update the back end to support the additional foods; however, the Android application will also have to receive an update. Atkins products heavily rely on Sugar Alcohols. The current database I use is published by the US Department of Agriculture, and it does not track sugars alcohols, so I had to add a column to the database. I will also have to propagate this change to the web service and Android application.

Allow Users to Submit Foods to the Global Database
I have decided to utilize a Web 2.0 style architecture, and allow the users to grow the global database. The Manual Entry activity will include a "Submit to Global Database" check box. Selecting the check box will enable additional fields, allowing you to submit the entry to the global database. This will also improve the size of the Foods Database.

OCR (Optical Character Resolution) Food Input
I will explain why I don't want to do UPC scanning in another post, and why I like OCR better. Microsoft Research has a hosted OCR service already. I would like users to be able to take a picture of the Nutrition Facts label on their phone, and then the application would read the carbohydrate information from it automatically. I am currently investigating this solution; let me know if this feature sounds particularly awesome.

Your feedback keeps me motivated to continue adding features, so please let me know what you would like to see added.