First morning bike ride

Planned route is just over 5 miles. Made a few mistakes down the wrong street. Ended up riding just under 6 miles instead.

mapmyride.com/view_workout?w=347898637

First full day with Windows Phone 7 and only that

Despite Google Voice continual refusal to work with my AT&T pre-paid number, I decided that today will be a good day to try using my Windows Phone 7 exclusively for the day. My wife, Leah, is still in the UK and my parents who are visiting me here in NY will be with me all day. So no one in particular should be calling me, and I set the call forwarding on my iPhone to the LG.

Continue reading “First full day with Windows Phone 7 and only that”

Finding Windows Phone 7 apps

On my iPhone/iPad, I rely on a collection of apps to make my life easier, more fun, and happier. In order to be able to fully immerse myself in the Windows Phone 7 world, I am hoping I can find the equivalent on WP7 Marketplace. Here is my progress so far:

iPhone apps

Windows Phone 7 apps

Tweetbot Birdsong/Twitter/Seesmic
Reeder Feed Reader/GReadr
Foursquare 4th & Mayor
Remember The Milk WinMilk
Evernote fasternote
Instapaper Stacks for Instapaper
Weather Channel Weather Channel
BBC News BBC News Mobile
CNN Web page pinned to Start page
Flickr Flickr
Wikipanion Wikipedia
WordPress WordPress
OpenTable OpenTable
Tip Calculator Tip Calculator
Urbanspoon Yelp
IMDb IMDb
Netflix Netflix
Amazon.com Amazon.com
Amazon Kindle Amazon Kindle
Google Voice GoVoice
1Password 1Password
Pandora N/A
Verizon FiOS DVR Manager N/A
Skype N/A
Meetup N/A
Instagram N/A
Words with Friends N/A

This is by no mean the complete list of apps I have on my iPhone, just the ones that I use almost every day and thus need to find equivalent on the WP7 side. I’ll update the list as I explore the Windows Phone Marketplace more. My hope is that this post will help other iPhone owners who want to try out  WP7.

Windows Phone 7 – First Impression

I recently decided to expand my mobile experience horizon and acquired a Window Phone 7 from Brian Henderson, who I met a few years ago at the Seattle Alt.NET conference. Brian got the phone from this year Microsoft PDC and it is a LG Optimus 7 (a.k.a. LG-E900 outside North America). Having spent about four days with it, here is my raw first impression.

Disclaimer: This is not intended to be a hardware or software review. For that you can find them on the web easily. Here I would just point out things that stick out to me, especially comparing against the iPhone 4/iOS.

Continue reading “Windows Phone 7 – First Impression”

Navigon MobileNavigator iPhone app review

I’ve been using a Garmin nüvi 1300 GPS unit since April last year and I am fairly happy with it. There are couple of things I’d love to have though:

  1. Ability to plan route on either Google Maps or Garmin software and send it to the GPS unit. (I can’t with my Garmin because it doesn’t support that. More expensive models do support storing routes.)
  2. Live traffic updates so I can, at least, avoid traffic jam. (Garmin has an accessory that receive traffic update via radio. It also requires an annual subscription fee.)

I ran into a 45 minutes traffic jam 3 weeks ago on my way to work that had really no reason being there and it became the impetus of searching for better alternative. After a bit of research on the interweb I settled on trying out the Navigon’s MobileNavigator for iPhone. To mount the phone in a suitable location in the car, I opted for ProClip mount which I’ve heard good things about it.

Continue reading “Navigon MobileNavigator iPhone app review”

Extending iPhone battery life

Since my first iPhone, I’ve never had any issue with its battery life. As long as I get access to the charger by the end of the work day the battery life on the iPhone 2G or 3G have been perfectly adequate. That is until I started working on a project down in Atlanta and my weekly commute now extends to around 6-8 hours, depending on flight delays.

I began looking for battery extender for my iPhone. Initially I wanted a battery extender that can charge the iPhone 3G and 3GS, as well as possibly the Kindle. This means the ability to attach different cables to the battery. Also the ‘green’ side of me wanted a solar charging battery so that it’d be possible to charge the battery up using solar energy alone.

Unfortunately after perusing iLounge’s extensive list of battery extender reviews, it was pretty obvious that there weren’t any battery out there that would satisfy my initial list of requirements. The closest one is the IceTECH Solar i9005. With its large solar panel, large battery capacity (2500 mAh), and large collection of connector tips, it would be ideal. The only issue is it doesn’t currently support the iPhone 3GS, as Apple in its infinite wisdom has changed something with regard to charging on the 3GS.

So the search was back to regular battery extender. There are plenty of options out there but none of them really excite me. At least not at the price they are charging for. That is until I came across MonoPrice’s iPhone backup battery. With a rather large capacity (2200 mAh *) and very affordable price (~$15, depending on quantity purchased), it is perfect.

It arrived two weeks ago and I have so far used it twice. From about 10-15% charge in the iPhone, it would take about two hours to fully charge the phone from the backup battery. During that time, I was able to continue to use the iPhone with podcast playing in the background while online twittering and browsing. The only thing that is annoying is the ‘cyclon’-like blue LEDs in the front which move from left to right during the charging process (both from main to battery, and battery to phone). They are very bright and very distracting while using the phone with the battery attached, especially in a dark backseat of a taxi! To charge the backup battery, simply plug the iPhone cable to the bottom of the battery and charge it just like the phone. Unfortunately the battery does not pass the data through to the phone so you can’t sync with iTunes while charging both the phone and the battery.

But overall, the MonoPrice iPhone backup battery is priced just right and perform as advertised. High recommended if you are looking for a simple backup battery for your iPhone.

* For comparison, iPhone 3G battery capacity is 1150 mAh which means the MonoPrice battery can potentially charge the iPhone from 10-15% charge to full twice!

UITableView scrolling performance gotcha

After a few months of .NET reporting/SSIS development work, I’m back to an iPhone project this week. One enhancement I added yesterday was a better formatted table section title in a UITableView. Before, the section title is either a bunch of unformatted (also incorrectly by locale) dates (e.g. 2009-09-30), or times (e.g. 14:58) straight from the data source. The enhancement/bug fix is to format the date or time to be locale aware so the title would either be “Wed Sep, 30 2009” or “2:58 PM” if you are in the US.

Pretty straightforward I thought, and after a couple of trips to NSDateFormatter and use the output in UITableView’s titleForHeaderInSection:section method, it was all working very well in the simulator. That was until I put the app onto my iPhone for some real in-device testing.

The scrolling performance in the table was horrible! My first thought was that it had to do with the background view I added to the custom table cell view for colouring the table cell background. But after nearly an hour of debugging through the code I still couldn’t find anything wrong.

Turns out that the titleForHeaderInSection:section method is not just called once per controller instantiation. It is called once per table cell display!

Once I moved the code to format the section title into viewDidLoad and cached a copy of the nicely formatted titles in an array, the scrolling is back to normal speed.

My first published iPhone app

One of the two iPhone app that I worked on during earlier part of this year has landed on iTunes AppStore! As part of the sponsor for Agile 2009 conference, a small team of ThoughtWorkers developed a conference app to help the attendees. I left my fingerprints on the Twitter, Maps, and Schedule screens. The other interesting parts include the cloud computing (on Google App Engine) that provides up-to-date sync of conference schedules, ability to mark sessions that you plan to attend, and provide feedback to the presenters. The app also includes the Agile Manifesto, the 12 principles, allows you to sign the manifesto, or even send email to your friends to sign up.

UIScrollView and Multi-Touch zooming

Let's say you have a nice, big, hi-res photo you want to show to your user on the iPhone. No doubt you want to let your user zoom in to see details of the photo and scroll around, just like the built-in Photos.app.
Most of you would probably come up with something akin to the following structure using Interface Builder:

UIView

|
–UIScrollView
|
–UIImageView
If you are coding the UI by hand, the top level UIView would probably be omitted. This may or may not be relevant to the issue you'll be encountering. See my note at the end.
Now that the view structure is setup, you will probably discover that double tapping to zoom in/out is not implemented out of the box by Apple (surprise!).
"Ok", you thought to yourself, "I just need to implement the touch events in the controller and it will all work."
So you go ahead and added touch event code to the controller class, probably something like this:

– (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

UITouch *touch = [touches anyObject];

NSInteger tapCount = [touch tapCount];

if (tapCount == 2) {

[scrollView_ setZoomScale:zoomScale animated:YES];

}

}

When you run the code, you'll find that the touchesEnded method never get called!
Turns out this is actually by design from Apple. touchesEnded and other touch event methods are no-op methods by default. My guess is that this is probably a performance related design decision.
Regardless of why, here is what you need to do to 'fix' this. First, create a new class that inherits from UIScrollView. Then in this new subclass, implements the touch event method that you want to use and passes on the event to the next responder in the list. Like this:

– (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

{

[super touchesEnded:touches withEvent:event];

[self.nextResponder touchesEnded:touches withEvent:event];

}

This will pass on the touch event to the parent UIView in the hierarchy and thus calls the touch method in the controller.
Problem solved!
(One thing I haven't tried is to removed the top level UIView from the hierarchy, and link the UIScrollView to the view outlet in the controller. My hunch is that this may eliminate the need to subclass UIScrollView.)

Read and post comments

|

Send to a friend

Blog at WordPress.com.

Up ↑

%d bloggers like this: