I just published a new application to the Android Market: httpmon. In a nutshell, it allows you to monitor the status of any number of HTTP servers. A monitor is made up of 1) a request which describes how to contact the server, 2) one or more conditions that must hold true to consider the server “valid”, and 3) zero or more actions to take if the server is “invalid”.
This was another learning exercise. I wanted to play around with how I would structure an extensible object model in Android. The app source is structured so that the conditions and action class trees are easily extensible at both the model and view level to add new types of conditions and actions. I’m quite happy with how well it came out in that regard. None of this is probably visible from using the app however.
I hope that at least some people find this useful, as I’m looking forward to receiving input for new types of conditions and actions.
- response time
- response code
- content contains (substring, wildcard, or regex match)
- header container (substring, wildcard, or regex match)
- notification (alert sound, flash, and / or vibrate)
- send SMS
I wanted to have a “send email” action, but it turns out that there is no way to send an email programmatically, on behalf of the user, with Android. I am not sure why they would let an app send an SMS on behalf of the user, but not an email. An SMS seems more dangerous actually. Of course, I could have used JavaMail, but that means gathering an SMTP server and port, and supporting credentials. Most users will lack the will or the way to set that up I think.
I published a new Android application to the market today: CraigsHome. CraigsHome plots CraigsList rental listings on your Google map. You can get more information about the listing including photos, and even email the author right from your device with one click.
Right now, it only covers rentals (apartment, room, house). It could easily also cover for sale listings. Without going into too many details, it would require some extra processing on the back side. With for sale listings, this could be the Zillow-killer app. Re-presenting data from CL is never going to be as clean as Zillow listings, but with the popularity (and free-ness) of CL, it could really put a dent in things for them.
Noticing that there was no Zillow app for Android, I recently embarked on writing one. Pretty simple, assuming they make their data available in a reasonable manner.
Here’s a tip for API providers: it’s a good thing when third parties offer to integrate with your API, creating free applications that make money for you, with no personal gain to them.
Regardless, as it turns out, the API itself wasn’t satisfactory (by design I think). If you go to the Zillow site and search, you get very rich results. The API doesn’t return the same data. Consider the most basic use case: given an address, show surrounding Zillow data. The API can’t handle this. All it can really do is take in an address, and return specific results. And, the address needs to be very particular. It’s not good about handling fuzzily-entered addresses. The API docs say that it returns data for surrounding addresses. It may return one or two, but that’s it. As I mentioned, the same search on the Zillow site returns tens of results.
I published a quick app to the market, NEO Droid – Asteroid Tracker. Just s simple app that shows asteroids and comets (aka near-earth objets) in the vicinity of earth. This was really a test for me, to see if I could reliably mine useful data from an HTML web page. It turned out to not be that bad. If you are adept with regular expressions, picking what you want out of a web page is quite easy, and as it turns out quite fast … faster than trying to parse the web page’s structure.
I wonder how the folks at the NEO program feel about third-parties building apps that use their data? In all likelihood, this data is for fun in the first place so they don’t care. Or, they are happy that people are writing free apps to publicize them. Under other circumstances, I think it could be a problem (for-pay apps, re-purposing the data, etc).