I am now a Doctor!
On Monday I successfully defended my PhD thesis titled “Contextual Mobile Adaptation” and am now officially a Doctor.
On Monday I successfully defended my PhD thesis titled “Contextual Mobile Adaptation” and am now officially a Doctor.
This happened in Smallville s07e17 @ 23mins

As rumored the iphone dropped its price this week by £100 to only £169. All you need to do is walk into a Carphone Warehouse or O2 store and pick up the iphone box. They will ask for your name and address just to verify you have good credit for a phone contract but that’s all. The contact is done in iTunes at home, so if you don’t sign up to a contract, you won’t be in a contract!
Here are the steps to unlock it and use your existing SIM:
Once you have done these steps use a paper clip in the hole at the top to pop the sim tray out, put your sim in and put the tray back in. Now enjoy your new iphone!
Note that the Windows version of iLiberty+ unfortunately doesn’t install Installer by default, it only installs Cydia which has hardly any applications at the moment. You need Installer so to get it you need to go to the payloads page of iLiberty, click refresh, choose Installer from the list, then on the first page if you have already ran iLiberty before then just untick every option except Jailbreak. Then click go and this second time it will finish much faster and just install Installer.
Note: Before you rush out and buy one something to consider is that the 3G version will be out in June. It’ll likely be £269 and be mostly the same as the current iphone except with faster cellular downloads, and the ability to receive phone calls while downloading. If you don’t really care about this and are more interested in the ipod features and WiFi browsing then I think its a good idea to buy one now at this low price.
You need this fix if you can’t find the EDGE settings in Settings->General->Network. Most likely you are using an O2 UK sim card or a sim that uses the O2 network like Tesco Mobile.
First make sure you have OpenSSH installed on the iphone. Then on your Mac, open up Terminal (In Applications/Utilities) and type in the following (don’t type the #). Replace the IP address with your iPhone’s, which you will find in Settings->WiFi->Tap the small arrow for your network.
# ssh root@192.168.0.155
(enter the password alpine)
# cd /System/Library/Carrier\ Bundles
(note: Use tab to auto complete or use cd “/System/Library/Carrier Bundles” instead. The \ is an escape character so the space becomes part of the directory name, which it needs to be)
# rm 23402
# rm 23410
# rm 23411
# ln -s Unknown.bundle 23402
# ln -s Unknown.bundle 23410
# ln -s Unknown.bundle 23411
# exit
Thats it all done. Go into Settings->General->Network and the EDGE item should now be visible. The reason the EDGE settings were missing is because the iPhone detected it was on the O2 network and filled in the settings automatically and then hid the option, because they assumed you’d never need to change it. If you look at the settings right now you’ll see the O2 ones for the iPhone contract are already filled in, now you can change them to whatever you want, or delete them if you want to disable EDGE to avoid any charges. Unfortunately if you Restore your iPhone you will need to do this again, so bookmark this page.
Tip: To temporarily disable EDGE then delete one character from the APN and this will disconnect EDGE and prevent it connecting. Then when you want to use EDGE again type the character back in.
These instructions are for OS X on a Mac but if you have Windows you can try running Putty which is an SSH client for Windows.
Came across this interesting article on MSDN:
It has guidelines developers should follow when building WiFi drivers. It also helps developers of applications to understand the expected behavior of the drivers. It’s interesting it says “Active scanning is preferred whenever appropriate” because I’d like to know if its possible to force drivers to use passive scanning on receipt of a OID_802_11_BSSID_LIST_SCAN. That kind of option is probably up to the designer of the driver and if its available at all its probably going to be done use a driver specific function, and probably not even available as an option through an OID.
I’ve written an iPhone application that can keep the iPhone running applications while the screen is off. Normally 30 seconds after the screen goes off and when you aren’t playing music, the iPhone sleeps which means any applications running freeze. This is a problem if you are running something that is logging all the time, for example logging the accelerometer data as you travel around, or if you are running an IM client like Apollo IM or Mobile Chat, because you won’t receive messages.
Other solutions to this problem involved deleting Springboard configuration files. My more elegant solution uses the IOCancelPowerChange function when the powerMessageReceived event occurs. The iPhone is identical to full OS X with regard to the power management functions, it remarkably behaves just like a laptop.
You can find Insomnia in Utilities in Installer.App and more information and the source code is available on the Google code project page.

With ziphone the author naively says that when you upgrade to 1.1.4 you must start as a fresh phone in iTunes instead of restoring your backup. This means losing all of your SMS, preferences, call history, etc. It’s a lot to expect of people to just throw all that away. So I figured out how to overcome the bugs in ziphone’s jailbreak and do a smooth upgrade to 1.1.4 and not lose all of your information:
The main reason for these steps is that if you just restore your backup immediately after running ziphone then Mail crashes on launch because of a permission problem. And when it gets in that state there is no way to install SSH to fix it.
It hasn’t happened yet but I don’t think there is long to go. Here are my thoughts, in past tense for fun:
Swapping the mouse pointer for a stylus just wasn’t a good solution to mobile user interface design. The user interface had all the usual scroll-bars, buttons, checkboxes, no different from a desktop, except about 3x smaller and harder to use.
Software installation was too cumbersome. With both Active Sync installation and a proprietary CAB file installation (sometimes named over-the-air) had to be supported by developers. No one really knew which was best.
Its best feature, WiFi sync was removed at WM5.
Devices got slower over time. The early Pocket PC’s used fast RAM for storage and the devices ran quick, however if you didn’t keep your battery charged you lost your information. MS decided to switch to flash for storage resulting in at least a 50% performance drop. Personally I think a timed backup to flash solution might have been a better solution. However the iPhone has flash and it is fast writing a megabytes a second, what was up with Windows Mobile flash memory?
Too many device variants. Not only did we have Pocket PC with touch screens, and Smartphones with D-pad navigation we also had many different device like: 320×240, 640×480, 240×240 and more including landscape resolutions. Developers spent more time adapting their apps and removing features from certain platforms because of unsupported UI controls and layouts rather than improving their software.
VGA devices were 4x slower than QVGA.
Graphics acceleration never happened. The Dell Axims had a GPU but it was never used in any software besides their bundled demo CD.
Pocket IE is useless had has had zero improvement.
Active Sync was abandoned on Vista. Windows Mobile Device Center is one of the worst applications I have ever used. Its UI is designed for a two year old kid - you need about 5 clicks to do the same thing that took 2 in Active Sync. Also it no longer gave task-tray feedback about if your device is connected, connecting or syncing.
The speed to copy files on to the devices never improved. Even with USB2 and 802.11G claimed, they could never write to disk faster than 100K/s.
Can Microsoft avert disaster with Windows Mobile? Will WM7 be the dream interface we have been looking for? Who knows…with the pending iPhone SDK release and rumors of Apple entering the business app and corporate email market I sure hope they have something up their sleeves. If they don’t at least they have Apple to copy now :-p.
Eve and I started a new project the other day - iphone-haptics, after many chats about our frustrations with how much mobile touch screen interfaces are so poor and they haven’t really been improving at the same rate as the technology. We both have used iPhones since they came out (erm… unlocked
and although we both feel it is light years ahead of any other device, it still fails in a couple of areas. First what we like: the springy lists with acceleration let you glide your finger to browse and we really like the responsiveness and speed of the graphics. Also we like the large display and thin form factor, and what’s unbelievable is it is a full operating system on there, making development so easy. This is not some constrained mobile device - it’s like carrying a full computer, like a mini mac mini in your pocket, a mobile developer’s dream. Although the iphone has ditched scroll-bars and has advancements in multi-touch gesturing. For me the thing that makes it such a good mobile touch device is its ability to differentiate between taps and drags on the same UI controls (If you drag a list item the list scrolls, but you can also tap it).
All this is amazing but unfortunately the iPhone suffers from two major limitations - finger occlusion and lack of tactile feedback. The iPhone still uses standard push buttons on some parts of the UI, that are taken straight from the decades-old traditional desktop design. The problem with these buttons is usually they are the same size as your finger so you can’t see when you are pressing them, and thus the button pressed highlight image is redundant. Apple actually attempted to solve this on the keyboard by popping up the pressed key image above your finger, however according to Eve this solution has some negative implications to do with spatial awareness. But the main problem is with the buttons used on other parts of the UI, there is no visible feedback at all, and no audio. This isn’t a huge problem while sitting at a desk and your phone has your 100% attention as you are more conscious of the device’s state and performance, but the problem becomes dramatically more apparent when mobile, for example walking or driving and you have divided attention, for example, if the phone hangs or is not able to process your button press it might miss it, and this lack of feedback can become very frustrating. For example, some users might press the screen a few times leading to extra unintentional presses. Something that frequently happens to me is that in Contacts, I have accidentally dialed peoples’ numbers by tapping too quickly after I thought I might have missed the button, but it was just a delayed UI response to my touch, and then my accidental double tap resulted in a dial number action on the next screen.
Anyway the overall outcome of these frustrations is that using my experience with UI design and Eve’s experience of haptics and audio we decided to join forces and try to prototype some completely new interface designs, a step away from Eve’s current research work on mobile cross-modal interaction and statistical analysis lab experiments, and also a step away from my research on dynamic adaptive contextual software. This would be a mini side-project, putting our ideas we frequently discuss into practice.
We didn’t specifically decide to use the iPhone at the outset as we have another vibrotactile phones, however the iPhone offers the overall best combination. Also with the thriving iPhone user and developer community, now is the perfect time to do some research prototyping ‘in the wild’. The one thing I must say is with regard to the iPhone SDK, it is a truly stunning platform to develop for and that is even without any documentation, the SDK release by Apple is going to be HUGE I am 100% certain. After digging around the iPhone APIs for the 4th time, eventually the methods we needed to make the haptic keyboard we wanted became available in the 1.1.3 header files and by then I had learned enough about how the built-in actuator could be controlled and identified how to use the 12 RPM levels.
Our HapticKB application augments the iPhone software keyboard with vibrations, although currently it only works inside our only application. Using Eve’s knowledge about tactile buttons we implemented what we believe is a great prototype, with press, release, slip and scan vibrations for the keys. There is one bug that can cause it to crash - it is the hack used to gain access to the keyboard touch events, hopefully we can resolve this soon by trying another ways. We have been in discussions with the Caterpillar project to hopefully use their framework to patch the UIKit library to allow our keyboard to be used system wide, stay tuned for that, personally I can’t wait! They are looking at it now and we are awaiting their reply. The other guy who could potentially help us is the SummerBoard author, so we plan on contacting him too.
Aside from HapticKB, our two new interface designs are not based on buttons at all, and are a large step away from existing desktop oriented user interface widgets, and these will be the major focus of our iphone-haptics project. The first has been implemented however we might not be able to publish it on the project site until after a few months. We are writing about these two in a research paper that will hopefully be submitted to a conference very soon. As soon as the review process is over we will be posting both prototypes, and all three source code packages.
We really are excited about this project, I have two friends who are really critical of all my ideas, and when I let them try the apps they both smiled, they never smile at anything!! So I think we are on to something huge here ![]()
An object created by a factory method is autoreleased. If you do nothing else, it will disappear automatically when its autorelease pool is released. For a cocoa app, that’s at the end of the current event loop.
Always wondered when the auto release actually happened, now I know.