Wednesday, January 26, 2011

MapKit Plugin for TapLynx


Today, we have released our newest contribution to the open source community in the form of the TA_MapKitPlugin for TapLynx. The current source can be obtained on GitHub.

Basically, this plugin lets someone add a list of places and information about those places into the main NGConfig.plist file of a TapLynx application. TapLynx is a framework for iPhone and iPad that will let a content provider create applications just using configuration files. The user of the application can then see the places, tap on them to see detail information and even display their own location to see what is near to them.

Each point is represented by a latitude and longitude setting as well as textual information about the location. We considered offering address geocoding but it turned out to be too difficult to implement reliably for the United States, and nearly impossible for the entire world. There are lots of websites that will geocode an address. The iPhone takes decimal numbers for location points (not degrees, minutes etc.).

As with the other Tyree Apps' plugins, this one is designed to give some flexibility in presentation. When creating an application with this plug in, the icons for the pins can be changed (and multiple icons can be used to designate different points). Also, the detail information page for each pin is an html file so that can be customized and additional links can be added.

Configuration instructions are maintained in the Readme file that can be found in the github repository as well as in the project files. As always, please let us know if you find the plugin useful and if you have any comments or feedback we would love to hear about how you use the plugin. If you like this and our other plugins, please remember that we are available to build custom applications for your company.

Thursday, January 20, 2011

Giving the Customer What They Want

Our two biggest challenges with being in this business are embodied in the exchanges that we paraphrase below:

Customer: "I know this feature will be really easy for you to do"

- and/or -

Customer: "I really wanted X but I didn't ask you for it because I figured it would be too hard"

In the first case, the customer has already decided that the change will be easy because it looks simple from their end. It's often something like "add a field", "combine these two things and roll them up", "move this data from the other screen" or similar. Because they think it's easy it seems like they have a corresponding low price and effort expectation. Often, there is a good reason why the change will take longer than they think and sometimes the change is nearly impossible given the current architecture of the system.

In some ways the second case is much worse. The customer believes a feature will be hard so they don't bother to ask. Often, it turns out that the feature is easily accomplished or is no harder to implement than other features. However, since we were unaware of the desire, we couldn't deliver.

In both cases we have a hard time meeting customer expectation so customer disappointment is a real risk. I think that getting in front of the second issue is addressable by asking lots of questions and by getting the customer to dream a little during discovery. However, we have yet to figure out how to get in front of the first issue.

Wednesday, January 12, 2011

Carters Coin Flip 1.9

We are working through CCF 1.9 trying to get it off our to-do list. The biggest change will be the inclusion of REALLY HIGH RES photos for the Retina displays. We are also trying to figure out the best way to make this a Universal (iPhone/iPad) application.

As we play with the high res photos we are ashamed of the crappy quality that our current customers are enduring. These new images are really neat. You can really see the detail in the coins if you have an iPhone 4. Also, because we can display so much more, we are moving around the backgrounds a little bit. So, the iPhone 4 gets a slightly different view of home plate or the turf than an older iPhone.

The iPhone 4 is pretty smart in how it deals with images. When you load an image like this:

[UIImage imageNamed:[NSString stringWithFormat:@"%@_heads.png",self.coinName]]

You only reference the lo-res version of your image. Then when any device (like an iPhone 4) that can handle the higher resolution sees that code it goes looking for a file that is the same name but has a slight variation. So, in our example above, it looks for something that has "_heads@2x.png" in its name. This way we don't have to code around what image to display and what resolution etc. When the iPhone 4 doesn't find a high res version of the image, it simply doubles the size of the old image. This is why images can look jagged on the iPhone 4. They are blown up to 2x size.

In an app like CCF, we are always bumping up against size limits because the image files are so big. So, to save space we are taking advantage of this runtime trick of the iPhone 4. Each flipping coin animation is made up of four images: heads, tails, heads at an angle, tails at an angle. The two 'at-an-angle' photos are to make up the illusion that the coin is really rotating. So, giving users a jagged image for those two isn't a problem since they aren't the focus of the animation and since they are only visible for .03 seconds.

When CCF ships later this month it will contain six images for each coin: two for the heads, two for the tails and one each for the at-an-angle view. All together this is about 800K of images per coin. If we had included high res versions of the at-an-angle views that would have added another 4ooK per coin. When the animation happens, the iPhone will pick and choose which graphics it should display and all will be well. We hope you like it.