Some time ago Apple game out with the AirPlay feature (an upgraded AirTunes) which enables iOS devices and iTunes play music and videos on a remote device.
In our office we have a Linux box, a set of speakers and a few laptops sporting Mac and Windows. Tonight I set out with a goal to turn that Linux box into an AirPlay speaker so that each of us can play music from their laptop without having to reconnect the cables every time.
First off I stubled upon RougeAmoeba’s Airfoil, which is a $25 sofware piece that, enables half a dozen device classes to be hooked up as remote speakers to a Mac or Windows (yes, that too). And, better yet, instead of only enabling iTunes to play, it can reroute all sound to that remote speaker. Though, it’s Linux speaker software is free download, it still seems to require paid Airfoil to route audio, because bare iTunes couldn’t care less of the wannabe Linux speaker that should have appeared to the WiFi. As the price would have been multiplied by the number of laptops, it was unfortunately out of question.
With a bit of googling around, I next found Shairport, which (if I got it correctly) is based on data found in a hacked and reverse engineered AirPort Express. ShairPort turns a random PC into a fake AirPlay speaker set. The software itself got installed relatively quickly after going through the short docs (perhaps because I had most of the dependencies like avahi etc already in place because of the Airfoil).
Also, for Airfoil, I had already opened firewall to Zeroconf/Bonjour and ports TCP:5000-5005 and UDP:6000-6005 which seemed to apply to Shairport too.
After starting up the daemon, all of our iTunes magically discovered the new remote speakers and allowed us to play music there with a simple mouse click. Even from Windows. And from iPhone. And, if wanted, all at the same time. Voila!
This is definitely much easier than messing with the wires all the time.
I decided to give away current version Rivals for free, until next major feature update. A day later when checking on the sales numbers, my jaw dropped to the floor. The number of downloaders had jumped up a 10 000%. Yes, you read that right – more than a 100 times up: Jätka lugemist →
Building and releasing iPhone apps and at the same time versioning them easily can be a bit tedious. Several posts (like this or this) show how to use agvtool for automated versioning. But for me this is still not automated enough.
I have a dream. A dream of devices that somehow know what I want of them. A dream of devices that do not bother me with repetitive questions or reminders of the same event. A dream of devices that are Context Aware.
Today I got my Rivals.app rejected from AppStore because it used private API calls. Fortunately nowadays Apple lists the calls in the reject message to make it easier to remove them. I was unfortunate to be using:
Below is a presentation by PinchMedia that analyzes ad-supported free apps compared to paid apps.
The main summarizing thoughts:
• Average app needs CPM > $8 to beat $0.99 app revenue
• Only give app away free if something in it screams “FREE”
• For paid app, release ad-supported free companion only when actual collected usage data suggests equal revenue. Jätka lugemist →
Well.. not totally iBrick, but just God awfully slow, especially Messages and Settings apps. Googling showed that iPhone 3G pwners have had issues with slow app startup since 2.x times. Few of them blamed Cydia.app, others indicate that restoring a pwned 3.0 phone from 2.x backup is a way to troubles. I am leaning towards the latter. Jätka lugemist →
I had a UITableView that had relatively simple cells. So simple in fact that I didn’t want to bother with subclassing UITableViewCell to draw up content. The cell had two UILabels and one UIImageView.
The problem however derived from reusing the cell – when drawing transparent PNG images into that cell, older data was still present and visible in new cells. This meant that I had to somehow clear the cell from old content.
This is how it can be done. Add the following just before creating new content:
This clear the contentView from old content and you can start adding new.