I just received notification that the SeattleBus 1.0.2 update has been reviewed and is now available on the iTunes Store. Hopefully everyone will be seeing it as an available update within the next 24 hours.
OSCON 2008 wrapped up very nicely last week. I spent friday evening lurking about Portland a bit with Karen, but to be honest we crashed out pretty early. Saturday at 8:30am we were scheduled to take the Amtrack Cascades 500 back to Seattle. It unfortunately didn’t get out of Portland until nearly 11am due to a “pedestrian being struck by a freight train” on the main lines south of Portland, and a cargo derailment north of Portland. It was a very delayed, but quite comfortable, trip home. I’ve been a hell of a lot later, and way more uncomfortable, coming home from Las Vegas…
Back to OSCON for a minute – there is now Video of the keynotes available, and many of the presentation files are also online. If you’re going to watch any of the online video, I recommend r0ml’s keynote presentation: embrace error. He’s amusing and insightful, and I really get a kick out of his sense of humor.
I think the talk that merits to biggest mention is Beyond REST? Building Data Services with XMPP PubSub. It was a great presentation, and seemed to sum up a lot of the thoughts of folks around the conference. There was a definite eye to the future of computing in regards to scaling – across cores and clouds both.
Back from Portland, Karen and I pretty much holed up for the weekend. I’m just getting back into the swing of things today, although Karen’s about to shift out again and head to Missouri. She’ll be visiting for the weekend, returning Saturday with (hopefully!) my nephew Sam to come visit and attend ZooCamp. Is the house really prepared for a 7 year old? heh… no. This’ll be something, eh? I’m really looking forward to having him out here!
It’s been a busy day, and it’s not even over! I’m scribbling this down during a break beofre the final sessions of the day kick into gear. There’s been a huge variety of sessions (as always) at OSCON – and while I’d love to say “today was about …” and then name something, I can’t even begin to do so. I think trying to characterize an event this diverse is about like the blind philosopher’s describing the elephant. Heh – but that’s not really going to stop me trying.
Two recurring themes are hitting various sessions all over the place, just reinforcement of technology trends and interest that are far more global. The first is concurrency and message passing – systems and styles of programming to take advantage of scale (an interestingly, not necessarily performance at low capacities – although it outperforms at scale) with a very clear eye towards a multi-core future. The folks working on systems today are looking forward and seeing 32 and 64 cores in their servers as a plain given. The synopsis that I heard that in an excellent talk about using XMPP as a message passing system was “Polling sucks”. Pretty much sums it up. There is quite the resurgence of interest in XMPP, by the way.
The second theme is mobile. Intel is pimping a large project called Moblin that they’d even hopped to have a developer day set up for. They cancelled the developer day – and according to this morning’s keynote it’s because they don’t have the community infrastructure they want to use fully in place. I’m waiting for the afternoon talk on Moblin, so I’m hoping to pick up a bit more about the specifics.
There were also a good half-dozen sessions that I wanted to see earlier today, but missed – so I’m hoping that I’ll catch some of the slides at least on the conference site, better maybe even the recordings of the presentations themselves.
The OReilly Open Source Convention for 2008 is underway in Portland, OR. I’ve been here since Monday, picking up a few tutorials and generally bending my brain around some new concepts.
I went to the Introduction to Seaside, which included a 30 minutes full-speed, fast-forward, all-thrusters-at-max introduction to smalltalk. I’m afraid that the details of Seaside were lost to me after my mind was reeling from that introduction. Very cool, but reeling.
The other noteworthy tutorial session I attended was An Introduction to Actors for Performance, Scalability, and Resilience by Steven Parkes. Another brain bender, the first half of the talk was going through example Actor code – translating back and forth between Ruby and Erlang. I think if I knew either of those languages it would have been better – instead I sort of ended up getting the equivalent of translations from russian to greek – able to spot the similarities, but likely missing some of the key concepts in the process. The second half of the talk was more abstract, and in many ways easier for me to grasp. I’m very interested in the overall topic of the Actor’s pattern and how it can be used to make concurrency more sane – it’ll be interesting to see how Steven and his library (dramatis) evolves.
The evenings talks were hit and miss for me. I heard a lot of people saying really positive things about Mark Shuttleworth and Damian Conway’s talk, but the only one that really had a consistently deep and amusing message at once was r0ml’s talk. Damian’s was amusing, but went on way long for me. Mark Shuttleworth’s talk didn’t stick with me at all. He listed out some goals for Ubuntu, but it didn’t really seem to come to any significant point.
I’ve managed to finally upload an “accepted” copy of the SeattleBus 1.0.2 binary! That puts it into Apple’s application review queue, which means it will hopefully be available to everyone by the end of the week or early next week. Apple doesn’t provide any guarantees on review times, but I’m hopeful.
The problem did indeed turn out to be on my end. The code signing process can fail in silent and annoying ways that are damn near impossible to figure out on your own. Fortunately, I received some great help from Apple early this week and they helped me narrow down the problem.
I’ve filed a bug against Xcode for it not warning about the problem (radar 6095242). When the NDA is lifted, I’ll post more details about the specific issue, so that hopefully others will be able to find out how to resolve it
I spent some of this afternoon pitting cherries. It’s a little tedious, but relatively mindless. On the kitchen prep chores, it’s way above peeling potatoes or carrots. Plus you can pop the periodic cherry in your mouth while you’re working. The cherries in question are montmorency cherries – apparently the most popular sour cherry tree in the US. I sure like them. They’re incredibly juicy, bright red in color, and have a tart flavor – lots of it.
Some things I’ve noted about pitting cherries – they’re easier to pit when they’re cold, they’re easier to pit when they have stems on them, and warm cherries just picked from the tree are a LOT juicier than if you toss a bowl of them into the fridge overnight. The top of my stove was my workstation today – and it’s liberally covered in cherry juice now. All told, I think we have 10 quarts of cherries – 8 of them pitted now. I’m giving 2 quarts to a friend to use for making cordial, and most of the rest are getting frozen. Karen and I might make a pie or a crisp tonight, but we’ll be keeping some of these back.
I’d really hoped to be able to post that I’ve got the updates for SeattleBus into Apple and they’re pending review. Alas, right now, I can’t. It’s quite the saga of things I’ve tried – lists I’ve following and checked off, line by line, from the instructions. I’m not sure where I’m going wrong, but the AppStore back end isn’t currently accepting my signed applications.
I finally opened a ticket with Developer Technical Support today – I’ve got two from my “Select” membership, so I might as well use one. I usually don’t use them – it’s as good a place as any, and I could really use the help right now. DTS reports that it is usually a couple of days for a response, so assuming everything goes swimmingly from this point forward – it’ll still likely be the middle of next week before I get something signed that the AppStore will accept. Anecdotally, I’ve heard DTS is even more backed up than usual – so we’ll just have to see.
The worst part about all this is I’m not sure how to even diagnose what’s going wrong. The AppStore wants a signed bundle – everything I can see in the logs shows that it’s getting signed. (A digital signature – not my handwriting. Everything in this set up uses digital signatures for verifying all sorts of bits about the code). I’ve become significantly more comfortable with Apple’s code signing program, learning the command line bits just to understand what’s happening. It all looks good – but when I upload it, I get the error
The binary you uploaded was invalid. The signature was invalid, or it was not signed with an Apple submission certificate.
It’s a fine error message, except as far as I can tell all the diagnostics need to happen on the receiving end of this process – where I can’t see anything.
I wasn’t sure if something got suckered up in the databases or such, so I even went to the trouble of removing all the current keys, certificates, provisioning profiles, and what-not – recreating them all from scratch and setting up my entire environment again. That was a pain and in the end it didn’t do the trick. At this point I’m stepping away for a little bit. I think it might be best if I wait for someone from DTS to get involved to help me with this, because I’m sure not making progress on my own.
I’ve been waiting for a good month, letting the cherry tree do it’s thing. One of our trees got nailed by a late frost and didn’t produce much, but the other is going gangbusters.
I just spent an hour harvesting 2 gallons of cherries – and I don’t think that I touched more than 1/3 of the limbs there. The iPhone doesn’t do the color saturation justice (nor did I expect it to…). Boy, do I love the color. I’ll be loving the cherry pies and cobbler too.
I am by now means the only iPhone developer who’s run into this, but man – the reviews on the AppStore are just broken. Craig Hockenberry (of the ADA winning iPhone application Twitterific) wrote about the AppStore and reviews on his blog. He talks about how the AppStore reviews are broken – like the fact you don’t need to have purchased the app to review it. He doesn’t mention something that I’ve noticed – the “helpfulness” of the reviews doesn’t appear to effect the overall rating. But I think what he really calls out at the end is the kicker – the reviews are fundamentally “one way”. The AppStore isn’t a forum and isn’t set up for discussion. Like Craig and others, I’ve received some useful feedback in the reviews, and frankly a lot of really useless feedback (like the fact that someone feels the app isn’t worth the value). Completely valid to the user – I wouldn’t expect anyone to purchase SeattleBus if they didn’t think it had the value – but that isn’t at all a review. And insulting the people who would buy it? That’s just rude. Hopefully we’ll see something better – but given the level of infrastructure I expect it would take to make it happen in a large company, I’m not expecting a quick change.
In the meantime, if you have questions or feedback about SeattleBus – please, by all means, send me email and let me know! I’m responding to all the email I get, and I’ve even tried to respond to the reviews on the AppStore (a little tricky, since I have to guess at email addresses).
In the mean time, I’ve had folks pop by and ask “How’s it doing?”. Here’s the sad thing – I have no idea! Apple isn’t providing any metrics, so the best I have is anecdotal evidence that folks are purchasing and using my application. The most that I think Apple has committed to is providing monthly financial reports, so I think it’ll be a little bit before I have any sense of how well or poorly SeattleBus is doing.
- fixed a number of memory leaks
- added in-memory caching to improve performance
- added in different constants for searching for nearby bus stops – working to make the “nearby” list more adaptive to areas without dense stops (the work I recently wrote about)
- ordered the resulting nearby bus stops by distance from the current location
- set Favorites to be initial view – re-organized views to enable that (favorites now left-most tab)
- Loaded the in-memory caches in the background for better startup performance
- changed initial image to show “Loading…” to make it more clear when the application is active
Now just as soon as I can figure out their interface for updating my Application, it’ll be in there and hopefully available to everyone shortly!
Finding the nearest stop was one of those things I just couldn’t pass up when I was designing SeattleBus. The iPhone includes some really nice geolocation API’s (meaning any iPhone application can potentially look up where you are). Apple’s set it up so you have to approve the application getting that information first though – sometimes that’s handy, but other times I think it’s darned annoying. Hey – it’s what Apple’s given us to work with here. On the whole, I’d rather someone be bothered a few times and know the application was using their location than not.
The goal of SeattleBus is first and foremost to provide real-time arrival information for stops. Finding the stops is, to some extent, secondary – but also the critical “first step” to being able to look up that realtime arrival information. Getting the geolocation for the stops was quick a challenge. I started reverse engineering the stops myself using Google’s geolocator API – it was clear enough I was going to have a long ways to go with that to make it really smooth. Metro Transit wasn’t providing the information (I’ve since started talking with them – maybe we’ll get some better data soon) – but in the mean time Adam Parast was great enough to share the same data he used to make a Google Map’s layout of all the bus stops – a mashup of Maps and MyBus.org.
So choosing the nearest stop turns out to be an interesting challenge. The geolocation API isn’t 100% accurate, so choosing a stop is really determining a list of tracked locations that are close. I thought about making a preference that someone could set, but one of the feedback components I received early on was to find and set a good default right off the bat.
I set a good default for the downtown locations, but with the release of 1.0 I’m afraid that it’s just too tight a lookup area for some of the outlying areas of those stops. If you check out Adam’s mashup, you’ll see there’s a huge density downtown and then it gets a LOT more spread out from there. So for version 1.1, I’m changing that lookup sequence a bit. When you’re in the downtown corridor (dense with tracked stops), the range for looking up stops will be pretty tight – maybe a couple of blocks. And when you’re outside of that area, I’ll loosen it up quite a bit.
Part of making this process better is getting better geolocation data for those stops too – I’m working on that now… The release of SeattleBus managed to get Metro’s attention, so we’ve got a conversation started there where I wasn’t able to get anyone’s attention earlier. Here’s to some more and interesting collaborations! (we’ll see what comes of it)