- Dan Grover : Audio on the iPhone/iPad. produce visually striking results. Dan (guy behind shovebox, etude, simplechord and phonefinger) will give an overview of the audio APIs available on the iPhone OS.
- Warren Stringer: Ontological synesthesia – performing visual music on the iPad. Warren Stringer will be showing Tr3, a platform for creating real time ontologies. Warren will be using Tr3 and OSC to create a visual music performance, using two iPads, projector, one iPhone, and one iPod touch. Anyone with OSC music controllers are welcome to join in. More information can be found here.
May 23, 2010
PyGameSF meetup Wednesday May 26th 6pm @ Main SF Public Library
The May PyGameSF meet up will be at the Sycip conference room on the fourth floor of the main San Francisco public library beside civic center BART. The library closes at 8pm so we will reconvene to frjtz on hayes street for dinner/drinks afterwords.This month’s presentations are:
May 22, 2010
How to manually update your n1 to Froyo (Android 2.2)
Download the 2.2 image from here. Mount your n1, rename the image file update.zip, copy it to the top level of the mounted n1 filesystem, follow these instructions here. I bought my n1 from google directly, its not rooted and the previous instructions work for me. If you are an ATT user and are having problems with the previous instruction here is another install guide.
One problem I encountered after updating was that helix launcher (app thats a dock for Android devices) would perpetually crash and request to be force closed thus blocking all access to the phone. I solved this by using the Android developer tools to uninstall the apps from the command line issue the following command: adb uninstall com.helixproject.launcher2
Once you have updated to 2.2, you can install flash from here.
One problem I encountered after updating was that helix launcher (app thats a dock for Android devices) would perpetually crash and request to be force closed thus blocking all access to the phone. I solved this by using the Android developer tools to uninstall the apps from the command line issue the following command: adb uninstall com.helixproject.launcher2
Once you have updated to 2.2, you can install flash from here.
May 19, 2010
Google IO day 1
Just got back from google IO 2010 day 1. Here are my disjointed ruminations concerning the event. The keynote was all about pimping html 5 and chrome. It was a total yawn fest consisting mainly of boring web app demo’s, dreamweaver, etc. In short nothing particularly new or exciting was revealed. The most interesting facts I took away: chrome now has 70 million users up from 30 million, their is some sort of chrome app store in the works and google also blew $120 million on buying a company with a bunch of video codecs which they are open sourcing.
While the keynote was all about the web most of the people in attendance seemed to be all about Android and the mobile space. From the breakout sessions to the floor, everything todo with Android was jam packed compared to the other google technologies on offer. Based on some of the conversations I had, I would say about 50-70% of the people attending were at the event for Android related stuff. Towards the end of the conference some of the Android breakout sessions were so packed that me and a large number of other developers could not get in despite arriving more than ten minutes early. In contrast the google enterprise room looked totally empty.
The wall of Android devices on display was an impressive testament to how far the platform has come since the launch of the g1 October 2008, my touch April 2009, nexus one January 2010. The list of devices running android is impressive and growing. Notably absent from the event was Dell, despite the fact that several of their devices were included in the wall. An interesting thing about seeing all the different Android phones/devices on display together was that you really got to see what a fractured experience the whole platform currently is right now. Samsung, HTC had great looking phones with Android 2.0/2.1, very shiny fun to play with. Most of the Motorola/Sony/LG’s stuff was all 1.5/1.6, some of the hardware was nice but the confusing custom UI skins and bizarre half baked in house apps just made using them a total shit show.
One of the sessions I attended was on writing real time games for Android. The session was quite OpenGL ES focused and gave a nice high level overview of the Android hardware landscape. Specifically the technical part of the session dealt with: practical differences between Android operating system versions which you need to think about when writing games, common OpenGL extensions used to achieve better performances and how to design a multithreaded java/native code game for the platform and the accompanying pit falls you might encounter.
One thing I had hoped to get out of the session was a hint as to where google is going to take Android with regard to audio/multimedia programming capabilities. No hints were revealed in this session. In fact one of the first question the speaker received was about doing audio programming in games. I was not super impressed by the answer given which was basically do your mixing with PCM using native code (c/c++) and pass it back to the java Android media stack… So how is this going to gel with Android x86 devices? If Intel really is part of the big google tv/set top box announcement thats supposed to happen tomorrow that means some or all of those devices will be running on x86 not ARM (chip architecture that most Android devices use) which means the current crop of apps will have to recompile to target those platforms. Audio games are pretty hot right now (checkout titles from Smule, guitar hero, rock band, etc). Iphone has OpenAL support, which is an open industry standard, why not Android? Multimedia is still very much the achilles heal of the Android platform in my book.
Another point that came up in the game development session I attended was the way that games get noticed and become hits in the Android app store. The google guy giving the presentation had a graph showing the download rate for his game replica island which was free and had a few million downloads since it launched. With no press release, just uploading it and giving a single talk to about 200 developers to announce its launch, he saw roughly 8k downloads per day. A subsequent press release which he had written and being featured by a prominent blog such as gizmodo got him a significant bump in download traffic but all of this paled in comparison to the massive jump that being a featured app in the market place got him. This is the same story as in the Iphone app store.
The takeaway is that discovery in both google/apple’s app stores is a big problem exasperated by the fact that many mobile games companies seem to adopt the following strategy: Chrun out about 50 low quality games, pray for one of them to hit gold, then abandom them all once interest drops off. This causes the market to be flooded with shitty low quality apps. Another interesting piece of information from the game development talk was that the average paid app seemed to go for about $3.50 a pop, a price not to far from the average paid app on Iphone. Mobile games/apps have a lower price elasticity than desktop/console games. Hence the aforementioned business model.
Gaming is all about the numbers and with mobile devices the rule is going to be all about lowering production costs by leveraging existing assets (i.e easily porting games to different platforms is huge). I got to see a demo of Unity running on an Android tablet (looked good) at the conference. Very interesting considering the recent rumblings about apps developed with such toolkits as flash/Unity being banned from the Iphone app store. Unity is a game editor which allows developers to write games which will run on multiple platforms (wii, ps3, web, iphone/ipad, osx, etc), apparently they are about to release an Android version of their product which they were demoing at the conference. This is significant as a number of the top ten games on Iphone are built with Unity. Given the effects that a ban on games developed with such tools could have on the cost of creating cross platform mobile games it will be interesting to see how the economics of the mobile game development scene plays out.
Tomorrow seems set to be the big day: froyo (Android 2.2), possibly some free tech goodies given out, what are Logitech/Sony/Intel going to unveil with regard to set top boxes, what will flash be like on Android. Fun times.
While the keynote was all about the web most of the people in attendance seemed to be all about Android and the mobile space. From the breakout sessions to the floor, everything todo with Android was jam packed compared to the other google technologies on offer. Based on some of the conversations I had, I would say about 50-70% of the people attending were at the event for Android related stuff. Towards the end of the conference some of the Android breakout sessions were so packed that me and a large number of other developers could not get in despite arriving more than ten minutes early. In contrast the google enterprise room looked totally empty.
The wall of Android devices on display was an impressive testament to how far the platform has come since the launch of the g1 October 2008, my touch April 2009, nexus one January 2010. The list of devices running android is impressive and growing. Notably absent from the event was Dell, despite the fact that several of their devices were included in the wall. An interesting thing about seeing all the different Android phones/devices on display together was that you really got to see what a fractured experience the whole platform currently is right now. Samsung, HTC had great looking phones with Android 2.0/2.1, very shiny fun to play with. Most of the Motorola/Sony/LG’s stuff was all 1.5/1.6, some of the hardware was nice but the confusing custom UI skins and bizarre half baked in house apps just made using them a total shit show.
One of the sessions I attended was on writing real time games for Android. The session was quite OpenGL ES focused and gave a nice high level overview of the Android hardware landscape. Specifically the technical part of the session dealt with: practical differences between Android operating system versions which you need to think about when writing games, common OpenGL extensions used to achieve better performances and how to design a multithreaded java/native code game for the platform and the accompanying pit falls you might encounter.
One thing I had hoped to get out of the session was a hint as to where google is going to take Android with regard to audio/multimedia programming capabilities. No hints were revealed in this session. In fact one of the first question the speaker received was about doing audio programming in games. I was not super impressed by the answer given which was basically do your mixing with PCM using native code (c/c++) and pass it back to the java Android media stack… So how is this going to gel with Android x86 devices? If Intel really is part of the big google tv/set top box announcement thats supposed to happen tomorrow that means some or all of those devices will be running on x86 not ARM (chip architecture that most Android devices use) which means the current crop of apps will have to recompile to target those platforms. Audio games are pretty hot right now (checkout titles from Smule, guitar hero, rock band, etc). Iphone has OpenAL support, which is an open industry standard, why not Android? Multimedia is still very much the achilles heal of the Android platform in my book.
Another point that came up in the game development session I attended was the way that games get noticed and become hits in the Android app store. The google guy giving the presentation had a graph showing the download rate for his game replica island which was free and had a few million downloads since it launched. With no press release, just uploading it and giving a single talk to about 200 developers to announce its launch, he saw roughly 8k downloads per day. A subsequent press release which he had written and being featured by a prominent blog such as gizmodo got him a significant bump in download traffic but all of this paled in comparison to the massive jump that being a featured app in the market place got him. This is the same story as in the Iphone app store.
The takeaway is that discovery in both google/apple’s app stores is a big problem exasperated by the fact that many mobile games companies seem to adopt the following strategy: Chrun out about 50 low quality games, pray for one of them to hit gold, then abandom them all once interest drops off. This causes the market to be flooded with shitty low quality apps. Another interesting piece of information from the game development talk was that the average paid app seemed to go for about $3.50 a pop, a price not to far from the average paid app on Iphone. Mobile games/apps have a lower price elasticity than desktop/console games. Hence the aforementioned business model.
Gaming is all about the numbers and with mobile devices the rule is going to be all about lowering production costs by leveraging existing assets (i.e easily porting games to different platforms is huge). I got to see a demo of Unity running on an Android tablet (looked good) at the conference. Very interesting considering the recent rumblings about apps developed with such toolkits as flash/Unity being banned from the Iphone app store. Unity is a game editor which allows developers to write games which will run on multiple platforms (wii, ps3, web, iphone/ipad, osx, etc), apparently they are about to release an Android version of their product which they were demoing at the conference. This is significant as a number of the top ten games on Iphone are built with Unity. Given the effects that a ban on games developed with such tools could have on the cost of creating cross platform mobile games it will be interesting to see how the economics of the mobile game development scene plays out.
Tomorrow seems set to be the big day: froyo (Android 2.2), possibly some free tech goodies given out, what are Logitech/Sony/Intel going to unveil with regard to set top boxes, what will flash be like on Android. Fun times.
May 18, 2010
Featured in Wired article on Google IO 2010
Just a quick post to say I was interviewed by Wired magazine for an article on Google IO 2010 yesterday. I am looking forward to having some fun and hearing about all the great new things google have been working on tomorrow.
May 14, 2010
Location helper utility for Android
One of the killer features of Android smartphones is the ability for applications to grab your location and provide tailored service based on it. Implementing such location services on the Android platform is pretty easy but doing it in such a way so as to not unnecessarily drain your battery can be a little tricky. I just added a location utility called GeoUtil which does just this to my crossfit workout tracking application. The following is an explanation of this utility and how to integrate it into your Android activity and if you so wish add location information to your notes using the Snaptic API.
Lets review whats going on in the above code and talk about what GeoUtil actually does. mLocationManager is the system LocationManager service. Our GeoUtil class is the update-handler class for location updates sent out by the LocationManager service, it is a sub class of LocationListener. We indicate that we want location updates and designate that these updates shall be handled by mGeoUtil. The requestLocationUpdates() call to the LocationManager service dicates how often we will get updates on the location (those parameters have direct impact on battery drain, so they've been picked for a reasonable use-case tradeoff). In the above example we ask for updates no closer than 5 seconds apart (they can come longer apart, if the system decides to) and we also put a 10m change radius on the updates, anything less than that will be filtered out and no messages sent.
| Java | | copy code | | ? |
| 01 | |
| 02 | //Add the following member variables to your activity class |
| 03 | private LocationManager mLocationManager; |
| 04 | private GeoUtil mGeoUtil; |
| 05 | private static final int LOCATION_UPDATE_INTERVAL_MILLIS = 5000; |
| 06 | private static final float LOCATION_UPDATE_DISTANCE_METERS = 10; |
| 07 | private Location externalLocation = null; |
| 08 | |
| 09 | |
| 10 | //Add the following code to your activity onPause, onResume, onCreate |
| 11 | |
| 12 | @Override |
| 13 | protected void onPause() { |
| 14 | mLocationManager.removeUpdates(mGeoUtil); |
| 15 | super.onPause(); |
| 16 | } |
| 17 | |
| 18 | @Override |
| 19 | protected void onResume() { |
| 20 | super.onResume(); |
| 21 | if (externalLocation == null) { |
| 22 | // Register for location updates |
| 23 | mLocationManager.requestLocationUpdates( |
| 24 | LocationManager.NETWORK_PROVIDER, |
| 25 | LOCATION_UPDATE_INTERVAL_MILLIS, |
| 26 | LOCATION_UPDATE_DISTANCE_METERS, mGeoUtil); |
| 27 | mLocationManager.requestLocationUpdates( |
| 28 | LocationManager.GPS_PROVIDER, |
| 29 | LOCATION_UPDATE_INTERVAL_MILLIS, |
| 30 | LOCATION_UPDATE_DISTANCE_METERS, mGeoUtil); |
| 31 | } else { |
| 32 | mLocationManager.removeUpdates(mGeoUtil); |
| 33 | } |
| 34 | } |
| 35 | |
| 36 | @Override |
| 37 | protected void onCreate(Bundle savedInstanceState) { |
| 38 | mLocationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); |
| 39 | mGeoUtil = new GeoUtil(getApplicationContext()); |
| 40 | } |
| 41 | |
| 42 | //Now when you want to add location information to a note do the following |
| 43 | if(mGeoUtil.hasLocation()) {//Create a note |
| 44 | SnapticNote note = new SnapticNote(); |
| 45 | Location location = new Location(mGeoUtil.getLocation()); |
| 46 | note.latitude =location.getLatitude(); |
| 47 | note.longitude = location.getLongitude(); |
| 48 | note.text = "Post note with location information"; |
| 49 | int returnCode = mApi.addNote(note); |
| 50 | if(DEBUG)Log.d(LOGCATNAME, "Print out note lat: " + note.latitude+ " note long: " + note.longitude ); |
| 51 | } else { |
| 52 | if(DEBUG)Log.d(LOGCATNAME, "No location available"); |
| 53 | Toast.makeText(getApplicationContext(), |
| 54 | "No location available", |
| 55 | Toast.LENGTH_LONG).show(); |
| 56 | } |
| 57 | |
| 58 | //Also make sure you have the following permissions in your applications manifest |
| 59 | android.permission.INTERNET |
| 60 | android.permission.ACCESS_FINE_LOCATION |
| 61 | android.permission.ACCESS_COARSE_LOCATION |
| 62 |
May 12, 2010
How to query Snaptic and just get notes containing a specific tag
I just added a function to search for a given string in your snaptic.com notes to our android-lib. This function returns a list of all notes containing that given string. In the following example I search for all notes containing the workout tag.
| Java | | copy code | | ? |
| 01 | |
| 02 | ArrayList<SnapticNote> notes = new ArrayList<SnapticNote>(); |
| 03 | int getNotesReturnCode = mApi.searchNotes("#Workout", notes); |
| 04 | |
| 05 | //Only proceed if notes were fetched |
| 06 | if(getNotesReturnCode == SnapticAPI.RESULT_OK){ |
| 07 | //Search for notes containing descriptions of exercises |
| 08 | for(SnapticNote n : notes){ |
| 09 | if(DEBUG)Log.d(LOGCATNAME, "Note: " + n.summary); |
| 10 | } |
| 11 | } |
| 12 |
May 10, 2010
Adding a login screen to your Snaptic android app.
A number of users have emailed me requesting an android example with a simple username/password screen and an accompanying flow for signing into a Snaptic account. I have updated my example crossfit tracking app to provide just such an example. After syncing the latest changes from github, simply load it onto your phone and hit the menu button, you will see two buttons, sync (which currently does nothing) and settings which will take you to the sign in screen.
Most of the sign in form magic takes place in SigninActivity.java. The menu code is inflated from an xml file and most of the code which drives it can be found in the functions onCreateOptionsMenu and onOptionsItemSelected in WorkOutEditor.java.
Most of the sign in form magic takes place in SigninActivity.java. The menu code is inflated from an xml file and most of the code which drives it can be found in the functions onCreateOptionsMenu and onOptionsItemSelected in WorkOutEditor.java.
May 6, 2010
Appending an Image to a Note with the Snaptic API.
A few people have emailed me asking how to append an image to a note created using the Snaptic API. In this post I will expand on the example in my previous post and show you how to append an image loaded from your Android phone’s SD card.
| Java | | copy code | | ? |
| 01 | |
| 02 | String LOGNAME = "HELLO_SNAPTIC"; |
| 03 | Boolean DEBUG = true; |
| 04 | |
| 05 | String mUsername = ""; |
| 06 | String mPassword = ""; |
| 07 | SnapticAPI mApi = new SnapticAPI(mUsername, mPassword); |
| 08 | |
| 09 | //To post a note |
| 10 | |
| 11 | //Create a note |
| 12 | SnapticNote note = new SnapticNote(); |
| 13 | |
| 14 | //Set the attributes you cate about |
| 15 | note.text = "Post this note now and add an image to it later"; |
| 16 | int returnCode = mApi.addNote(note); |
| 17 | |
| 18 | if(returnCode != SnapticAPI.RESULT_OK){ |
| 19 | //Log Error |
| 20 | if(DEBUG)Log.d(LOGNAME, "Notes Error: " + SnapticAPI.resultToString(returnCode)); |
| 21 | }else |
| 22 | { |
| 23 | //Printe the note id which gets set when you post the note |
| 24 | if(DEBUG)Log.d(LOGNAME, "Snaptic id of note: " + note.id); |
| 25 | } |
| 26 | |
| 27 | //Append a picture from your SD card to the note you just posted. The note.id, is set when you post note. |
| 28 | |
| 29 | // Make sure SD card is present/mounted |
| 30 | if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { |
| 31 | // Point to your ".jpg" located at top level of SD card |
| 32 | File imageFile = new |
| 33 | File(Environment.getExternalStorageDirectory() + File.separator + |
| 34 | "death-star-transformer.jpg"); |
| 35 | |
| 36 | // check if imageFile is valid |
| 37 | if (imageFile != null && imageFile.exists() && imageFile.canRead()) { |
| 38 | |
| 39 | // Image is valid so Upload. |
| 40 | returnCode = mApi.addImage(note.id, imageFile); |
| 41 | |
| 42 | if(returnCode != SnapticAPI.RESULT_OK){ |
| 43 | //Log Error |
| 44 | if(DEBUG)Log.d(LOGNAME, "Notes Error: " + SnapticAPI.resultToString(returnCode)); |
| 45 | } |
| 46 | }else { |
| 47 | if(DEBUG)Log.d(LOGNAME, "Something happened openening file from SD Path: " + Environment.getExternalStorageDirectory() ); |
| 48 | } |
| 49 | } |
| 50 | |
| 51 | //Grab all notes from the account. |
| 52 | |
| 53 | //Create an array list to hold notes |
| 54 | ArrayList<SnapticNote> notes = new ArrayList<SnapticNote>(); |
| 55 | |
| 56 | //Call get notes |
| 57 | returnCode = mApi.getNotes(notes); |
| 58 | |
| 59 | if(returnCode != SnapticAPI.RESULT_OK){ |
| 60 | //Log error |
| 61 | if(DEBUG)Log.d(LOGNAME, "Notes Error: " + SnapticAPI.resultToString(returnCode)); |
| 62 | } |
| 63 | |
| 64 | //Iterate over notes and do what you want with the note attributes |
| 65 | for(SnapticNote n : notes){ |
| 66 | if(DEBUG)Log.d(LOGNAME, "Note text" + n.text); |
| 67 | } |
| 68 |
May 3, 2010
Developing an Android application using the Snaptic API
As part of the Snaptic Move Your App! Developer Challenge you are required to use the Snaptic API to create an Android app which encourages and tracks physical movement. Currently their are two ways to do this: Either by using intents to save data via 3banana notes or by including the Snaptic android-lib in your project.
The advantage of the first approach is that you have to do a minimum amount of work to push/pull notes and accompanying information from the Snaptic backend. The disadvantage is that you now have a dependency on 3banana notes which must be installed in order for you to access any stored information. Integrating using the Snaptic android-lib gets rid of this dependency and allows you to communicate directly with the backend. For instructions on how to integrate with 3banana notes using intents go here, the rest of this article will cover how to integrate using the Snaptic android-lib.
The following is a little cooking demo which will show you how to create a basic app which can post and fetch notes from a Snaptic account.
For a more advanced example app which uses the Snaptic android-lib checkout the open source crossfit tracking app I wrote here. Also the javadocs for the Snaptic android-lib can be found here.
The advantage of the first approach is that you have to do a minimum amount of work to push/pull notes and accompanying information from the Snaptic backend. The disadvantage is that you now have a dependency on 3banana notes which must be installed in order for you to access any stored information. Integrating using the Snaptic android-lib gets rid of this dependency and allows you to communicate directly with the backend. For instructions on how to integrate with 3banana notes using intents go here, the rest of this article will cover how to integrate using the Snaptic android-lib.
The following is a little cooking demo which will show you how to create a basic app which can post and fetch notes from a Snaptic account.
- Download the Snaptic android-lib project from git hub.
- Create a new Android project using the instructions outlined in the following hello world tutorial.
- Copy the src for com.android.http.multipart and com.snaptic.api into your project from Snaptic android-lib.
- Add the commons-codec-1.4.jar to your project (included in the android-lib lib directory), see this tutorial for instructions on how to add libraries with eclipse.
- Add the internet permission to your Hello World manifest xml file, for details on how to do this see here.
- Now add the following to your HelloAndroid activity in order to be able to post/get notes:
| Java | | copy code | | ? |
| 01 | |
| 02 | String LOGNAME = "HELLO_SNAPTIC"; |
| 03 | Boolean DEBUG = true; |
| 04 | String mUsername = "";//Add your username here |
| 05 | String mPassword = "";//Add your password here |
| 06 | SnapticAPI mApi = new SnapticAPI(mUsername, mPassword); |
| 07 | |
| 08 | //To post a note |
| 09 | |
| 10 | //Create a note |
| 11 | SnapticNote note = new SnapticNote(); |
| 12 | |
| 13 | //Set the attributes you cate about |
| 14 | note.text = "Post this notes"; |
| 15 | int returnCode = mApi.addNote(note); |
| 16 | |
| 17 | if(returnCode != SnapticAPI.RESULT_OK){ |
| 18 | //Log Error |
| 19 | if(DEBUG)Log.d(LOGNAME, "Notes Error: " + SnapticAPI.resultToString(returnCode)); |
| 20 | } |
| 21 | |
| 22 | //Grab all notes from the account. |
| 23 | |
| 24 | //Create an array list to hold notes |
| 25 | ArrayList<SnapticNote> notes = new ArrayList<SnapticNote>(); |
| 26 | |
| 27 | //Call get notes |
| 28 | returnCode = mApi.getNotes(notes); |
| 29 | |
| 30 | if(returnCode != SnapticAPI.RESULT_OK){ |
| 31 | //Log error |
| 32 | if(DEBUG)Log.d(LOGNAME, "Notes Error: " + SnapticAPI.resultToString(returnCode)); |
| 33 | } |
| 34 | |
| 35 | //Iterate over notes and do what you want with the note attributes |
| 36 | for(SnapticNote n : notes){ |
| 37 | if(DEBUG)Log.d(LOGNAME, "Note text" + n.text); |
| 38 | } |
| 39 |
April 28, 2010
PyGameSF meetup Thursday April 29th 6pm @ Main San Francisco Public Library
The April PyGameSF meet up will be at the STONG conference room on the first floor of the main San Francisco public library beside civic center BART. The library closes at 8pm so we will reconvene to frjtz on hayes street for dinner/drinks afterwords.This month’s presentations are:
- Colin Bean: Complex visualization with Pyglet and NumPy. An introduction to how complex numbers can be visualized ad 2D geometry, how geometric transformations can be described as operations on complex numbers, and how basic complex functions can produce visually striking results. Visualization code will be provided using Pyglet and NumPy. The material is based on Tristan Needham’s book “Visual Complex Analysis”.
- Harry Tormey: Mobile games to make you move around. Obesity has been cited as a contributing factor to approximately 100,000–400,000 deaths per year in the USA alone. To help address this problem the company I work for is having a competition to create an Android app that inspires and tracks physical movement using ourAPI’s. The grand prize for this competition : An all expenses paid trip to TED Global 2010. I will be demoing an example open source exercise tracking Android app and an accompanying pylons based web stack which displays information captured via the phone. Talk will cover: An introduction to Android, mobile data capture techniques and displaying information captured from the phone via a python based web backend using the Snaptic API.