Ripping mobility from the clutches of telecom
Software
Stuff you can get and install or services you can use
The Web is an App (Via Diego)
Jul 14th
Diego is updating his blog again! Awesome! Check out his “the web is an app” post for a laydown of how generalized web development is shifting. Things were already tilting in the direction of “websites” being basically a static javascript loaded that pulled in resources and data as necessary. Mobile devices have really thrown a few cans of gas on the fire however. Before it was just annoying when logic crept into display code. Now with multiple distinct front-end views it’s gone from annoying to painful.
The role of browser Javascript framework on the mobile end seems to be an area of hot contention right now. With behaviors optimized for touch devices being the headline item in most of the conversations I’m seeing. The Uxebu blog and Wolfram Kriesing’s twitter feed are good places to look if you’re interested in following how it evolves. One of the most significant recent changes is the rollup of the ExtJS, JQTouch, and Raphael projects into a new company and product called Sencha. They seem to be ahead of the curve in pulling everything together to build the mobile specific web interface on top of REST services the way that Diego is talking about. And their recent large investment from Sequoia would seem to indicate that they’re in good shape to extend that lead. Check out their online KitchenSink demo to see some of the interaction styles they support. Still lots of work to be done, but I’m hearing more and more developers saying they’re at least starting to evaluate toolkits like these for doing their mobile web UI.
Removing the Password from a PDF
Jul 13th
I have a few ebooks I’ve purchased online that came as password protected PDFs. While mildly annoying while trying to read them on a desktop system, it’s patently absurd when I try to move them over to the iPad to use. There are a bunch of hacks floating around describing how to use conversion software to remove the password. Such as convert to a postscript file and then back to a PDF. Generally you end up with a pretty crappy PDF out the other end. You always loose hyperlinks (table of content or index), and a lot of times the formatting can get screwy. Fortunately I found a few comments mentioning qpdf, which is in the default repos for Ubuntu at least:
- sudo apt-get install qpdf
- qpdf --password=******** --decrypt lame_pass_version.pdf happy_version.pdf
Yay! No more crashing iBooks trying to read stuff I paid money for. And there’s an actual preview of the cover on the bookshelf now. Amazing.
WordPress Updated
Jul 7th
I did the update to WordPress 3.0 and added a new theme for the blog (you’ll have to actually visit the site to see, most of you read through RSS). Most of my motivation was getting something in there that looks better on mobile devices. The theme I have on now does a completely fluid layout instead of fixed width, so it looks a lot better on iPhone/iPad/Android. Also on the list of stuff to try out is the WordPress Mobile Pack that Andrea and James released.
Definitely recommend doing the upgrade and switching around themes. Especially for viewing on iPhone/Android devices. The Mystique theme is what I’m currently using by the way. On the settings page it has a toggle for fixed/fluid layout. Ahh, nice and simple.
Why Mobile Developer Programs Aren’t Working
Jun 1st
Just about every carrier/operator and handset manufacturer has some kind of developer outreach or partner program of some kind going on. Most of it has been spurred on by trying to follow in the footsteps of Apple and Google. Apple was wildly successful with their app store, so everyone followed after and created some kind of storefront of their own. When the developers didn’t show up in droves, the answer has generally been to create programs to get developers to work with the new systems. So, we’re not off to an auspicious start… but still, the cause is just, so lets see what we can do.
As a developer and community oriented person it pains me to see so much money being spent on misinformed efforts aimed at what should be a fantastic goal. I would love to see a whole bunch of developer programs out there generating good will and innovative applications. But instead what’s happening is companies are burning up tons of capital, generating mediocre results at best, and are going to end up coming out the other side of this with a bad taste in their mouths when it comes to dealing with developers. So here are some points to help out, hopefully it’s not too late.
Big issue #1 : Building a developer community is not a marketing function. If you want the folks in your developer program to be able to help developers working with your products you really need some engineers who are expert at, you know, actually working with your products. Generally you don’t get that set of skills from the folks in the marketing department (no offense to those folks). It’s just a quirk of the way these things get setup that the wrong people keep getting applied to the problem. Take a look at the makeup of the group meant to interface with developers. Are less than half the folks engineers? If so you’re doing it wrong.
The second issue is that building a developer community suffers from at least two different dimensions of cyclical network effect issues. The first issue is that it’s difficult to get developers without users, difficult to get users without apps, and difficult to get apps without developers. That part of the issue most folks are familiar with however. It’s easy enough to just pay for the first group of apps for a platform to seed the cycle. There are plenty of ways to screw that up as well, but that’s probably a subject for another post. The second form of network effect is more direct though, that it’s hard to get developers going without other developers for them to pull from. This is more the community end of things.
Apparently folks really doubt it out there in the real world, but I am a developer. I’ve signed up for and poked around with probably a dozen different developer programs (basically, anything that’s free). Typically as part of that program there’s a discussion forum of some sort meant to give developers a place where they can help each other. Generally they’re a black hole to toss time and questions into, but nothing comes back out. My prototypical example is this question I asked on Betavine back in the day. Though I really don’t mean to pick on Betavine in particular, it’s just an easy example to use cause they’re one of the few smart enough to have the forums publicly accessible so that I can link to the thread. I’ve actually put it to the test a number of times when companies at conferences say they’re trying to help developers… scary huh? Apparently no one was expecting that.
Now compare that to something like the iPhone questions on stackoverflow. That’s what it looks like when you get a self-servicing developer community going correctly – twenty six thousand questions tagged iPhone as I’m writing this. I don’t think it’s a coincidence that the folks behind stackoverflow are all engineers. If you want to build useful tools for developers you need to understand developing.
And finally, having a hackathon is not a substitute for having a functioning ecosystem. If you have a decent system up and going, you have users, you have developers, you have your own engineers – awesome. A hack event is an excellent way to get folks together, expose outside developers to people inside who can answer their questions, and spark interesting conversations. But if your pitch is more “We’re releasing Project X next month, so to celebrate we’re having a hackathon next week where you can get advance access to Project X and start working on great new apps!” – that’s just trying to get free QA work and unpaid development time. Us developers can be naive, sure. But we’re not stupid. If you’ve got something to offer the community, you’ll frequently find the community has a lot to give back. If you try to game the system you often won’t hear anything back at all however. We’ll just ignore you.
Symbian Cross-Platform WRT Tools
Apr 30th
Symbian released a new version of their Web Runtime Tools. Not many folks seem to be paying attention cause they’re too busy watching Adobe and Apple go at it. But still, it happened. I was surprised to see releases for Mac and Linux there too, which is awesome. Development tools being Windows only in the past was one of the major issues keeping me away from Symbian as a hobby platform.
I downloaded and installed the release, fooled around with the examples in the quickstart, and it’s working! I installed Chrome from the developer channel (wasn’t a big deal to do) and the emulator is even working… a completely unexpected and welcome change for Symbian development!
WRT widgets can also populate content on the home screen now too. Very interesting. Of course, this all happens at a point where the most recent Nokia device I have doesn’t support any of this. And purchase of a Nokia device isn’t anywhere on my roadmap. So I can’t try any of this stuff out in the really real world as I would like to. This is a really great move in the right direction. I just hope it’s not coming too late.
Starting up a Posse
Jan 13th
The wraps are off the latest project I’ve been working on: Chomp, a social iPhone application recommendation service. I actually started consulting with them to fill in some time, but liked the app and the people so much that I couldn’t resist jumping in full time. Now that the app is out and I can talk a bit more publicly it’s time to start building up a team. Obviously, about the app itself, the reception has been great and folks seem to love it:
- Geek.com – the one I’m most proud of
- Techcrunch – obTechCrunchShoutout
- ABC News – on the TV!! Not really, they’re talking about us, but the guy is just randomly poking around on an iPhone. Poor TV, you just don’t get it do you?
The goals of the business don’t stop at an iPhone app, we have plans to move into other areas over time. But the iPhone app market is the biggest juiciest lowestest hanging piece of fruit in the mobile arena right now. It would be crazy not to take a bite. Ben can answer a lot more of those style questions than I can however. I’m just here to keep the lights on and the servers running.
We have a jobs page up, but there isn’t too much color to them yet. In particular, I need some folks to join me on backend engineering and operations tasks, so I figured I would shout out here. Right now the team is only 5 people, so it’s a chance to get in at the very start for the right folks. We haven’t yet figured out exactly how the jobs break down, but at a startup job titles don’t really mean that much anyway. Here’s a rundown of the kinds of things I’ve been doing for the last two months, to give you a feel for what we have going on:
- Picked up and finished off a spin of the server side software. Standard LAMP stack with the PHP side built on top of CodeIgniter. There was some general cleanup work like reformatting the server responses to be more consistent across all the API calls, some new features like adding in bookmarking and avatar uploads, and generally operationalizing the code with stats logging, database migrations, processes for background tasks and cleanup.
- Prepping the production deployment systems. Which in this case meant getting Puppet up and going, setting up the modules for the bits of software we were planning to use, bits of custom config for things like the database systems (we’ve tried to set them up to be sharding-friendly right off the bat), and generally setting up the parts of the system we didn’t need till we went live (like load balancing and spreading out the front end web systems, and syslog-ng to pull together all the logs to a central system)
- Setting up system and application monitoring and metrics, so that we have alerts that fire if something seems to be going wrong and pretty graphs to show us where that wrong thing might be.
- Doing a few spins of designing a custom crawler that pulls info out of iTunes so that we can make it available in our app. With the number of apps, the number of regions, the number of languages, and the general lack of any kind of off-the-shelf solution for this, it’s been a pretty complex problem to work out. Our data is pretty timely right now, but this is one area in particular where there’s a lot of room for improvement.
- Adding in some very simple strategies for caching and load shedding if we ever hit the kind of load where we were in danger of degrading performance. Fortunately we’ve yet to have to pull any of the escape valve levers (fingers crossed), but with the system growing as quickly as it’s been growing I’m sure that’s only a matter of time.
Generally, it feels great to be back at the controls of a set of servers experiencing the kind of explosive growth we saw during the early days at AdMob. But there’s definitely more to do than I can handle all by myself. And I know there are plenty of folks out there who are better at the bits and pieces of this than I am, so I would love to be able to peel some of this stuff off to the right people and start scaling the human side before scaling the machine side gets out of control. Plus, when the weather gets nicer, I spend way too much time at the track to be the only person available to respond to ops issues :-)
So if you’re interested, particularly you folks who I’ve worked on projects with before, ping me. mike at chompapps dot com. Yes, this means I’m going to start reading my email again now.
Long Running Background Scripts with CodeIgniter
Nov 3rd
I’ve been working on a project using CodeIgniter recently, and have been trying to clean some stuff up so that long running background scripts use the same code as the live system. Sane, every framework has some way of wiring it up so you can run command line tasks using the same framework as you’re running for web requests, and CodeIgniter is no exception. For some reason stuff that used to run find as bare mysql scripts kept running out of memory when I ran it within CI. Turns out the DB wrapper actually stores all the queries it runs in a big array. Not an issue when processing web requests I’m sure, but definitely an issue when you’re running big background tasks. If you want to keep your scripts from running out of memory it’s easy enough to do:
$this->db->save_queries = false;
Zend Server Community Edition vs Snow Leopard
Sep 2nd
After upgrading to Snow Leopard we’ve had only one real issue so far, Zend Server Community Edition didn’t want to start up. Well, technically, parts of it. The apache instance was running, by mysql and the admin interface were dead. I found this post about watchdog errors, but even after putting in the fix for lighthttpd I still wasn’t getting the services starting up. Same deal for Tony. Poking around in the startup files it looked like mysql data was owned by user 103, and the mysql scripts were trying to start as user ‘zend’, however I have no zend user on my system. I wasn’t able to find anything about it, but I figured hell, let me give it a try and create a user Zend. This is the command to run from the terminal (funky huh?):
sudo dscl . -create /Users/zend UniqueID 103
Which creates a zend user.. somewhere.. I’m not familiar with that bit of OS X magic yet. It’s not in /etc/passwd, but if you ‘ls -l /usr/local/zend/mysql’ you should see the data directory owned by zend again. Now just restart and you should be peachy:
sudo /usr/local/zend/bin/zendctl.sh restart
Works for Tony and I at least, so we figured we would share. голова болит ÑÐµÐºÑ Ð³Ð¾Ð»Ð¾Ð²Ð° болит ÑекÑ
Not Sure I Buy the Android Fragmentation Argument
Jun 3rd
There seems to be a lot of “take it for granted” style discussion around the possibility of Android fragmentation. Without strong top down control of the platform, folks seem to think that we’re going to end up with hundreds of versions of Android, all slightly different. This was the nightmare that mobile Java became. There were large engineering teams dedicated to and specialized in taking your write-once-run-anywhere app and actually getting it to work on the volume of handsets you wanted to hit.
It’s true that technically anyone who wants to build a slightly different version of Android can, so in that sense there CAN be fragmentation. However, the ecosystem has also fundamentally changed. Before we had the carriers tightly controlling the channel, dictating what was in and out in terms of hardware, enforcing strict standards on the software they pushed to users, and doing everything they could to keep anyone else from pushing software to users. In that world the burden of dealing with fragmentation was with the developers, and the benefit went to the carriers. The carriers controlled the channel, so fragmentation continued.
The one lesson that everyone in mobile seems to have learned over the last year was that the carriers were really bad at determining the right hardware and managing that application and content catalog. It’s why everyone is jumping on the App Store Bandwagon. One of the side-effects of that is that it breaks the strongly controlled content and application channel. If ATT decides that their Android version is going to do Bluetooth slightly different, sure, go ahead. But how can they strongarm Android developers who produce Bluetooth apps into making an ATT specific version? The control isn’t really there any more. Developers might do it, but only if ATT is offering up enough incremental sales revenue to make the port worthwhile. Right now developers frequently do it cause they’re contractually obligated to if they want ATT to promote their app.
Anyone who’s worked in open source knows that forks are technically possible, but practically uncommon. When the “market” is completely open folks tend to follow a path that serves them best. And it’s a reinforcing path. Even when someone with vested interest tries to keep a fork distinct, normally the burden ends up being more on the controller than anyone else. Forks tend to get folded back or die off pretty quickly. I think the same thing should happen with Android. Sure, people might try at the start to get a leg up by including proprietary features and customizations. But in the long run if Android as a whole works, the only person they’re hurting with a fork is themselves (to the tune of a decreased application catalog). And although it’s possible for them to create a custom application catalog with some differentiation in the short term and attempt to keep that differentiation going, there’s no difference between that and the strongly controlled channel that we currently see failing today. The cost of trying to do so will outweigh the benefit of joining the mainline. толÑтые проÑтитутки
Sharing Location Info
Mar 3rd
I’m planning to go on an extended motorcycle trip in May. Whenever I leave to go somewhere for more than a few hours and my friends know about it I tend to get a lot of calls. They get very concerned and call to make sure I’m not lying on the side of the road somewhere bleeding. Can’t blame them, the precedent has been set. And hey, it feels good to know that next time I actually am lying on the side of the road bleeding there should be someone looking for me pretty quick even if I don’t have a sweeper following me. However, it also means that there are a bunch of worried people out there if I don’t answer my phone for some reason, for which I feel guilty. “I should be able to solve this with technology!” says Mike the geek.
Immediate thought, Google Latitude. I can keep recording info about where I am in the background with both the Android and Symbian phones I have. That way folks can see where I’m going as I’m going, and if I don’t answer the phone they at least know I’m moving. Which should mean I’m okay, unless I’m wedged under a truck getting dragged down the road. I haven’t figured out a technical solution to detecting that, so I’m leaving that corner case off the table for now.
However, the only way I can see to get info out of Latitude is through the iGoogle widget. Not a bad way for it to work, but I want to just post my location to my blog. Seriously, I don’t give a crap about privacy. I wanna publish where I am for everyone. And I’m not going to get my mom and my sisters to sign up for Google accounts, just not gonna happen. Is there a way to do a background update of location info and publish it your own website for example? Or a system where I can suck it back out easily and map the results?
Another option is to geotag photos and publish them on Flickr. That works, but requires that I’m taking photos in order to update folks about where I am. Perhaps a cool addition, but doesn’t get to the root problem I’m trying to solve, which effectively comes down to passively instrumenting myself using my cell phone and publishing that info as realtime as possible online publicly. I’m sure I could knock together an Android app to do it pretty quickly, but I have to assume there’s something out there already.
