posts filed under "July 2008 Entries"
(.)

I could resist for some time. Enough has been said about Apple's absolute disastrous MobileMe start. Today I'd like to join the rant with a quick summary of my personal irritations with Apple's new service and a funny anecdote about what happens if you try to contact Apple support. Almost one year ago I've blogged (in German) about the potential risk for Apple to loose customer loyalty by entering the space of large scale web consumer services and not doing it right. Since then they've fallen into every major trap and did not do any good in handling it - neither in resolving issues nor in communicating updates to their customers. As a good example for what I consider extremely poor communication, the MobileMe Status Blog features some three entries since it's incorporation on July 25th, 2008.

The witty Apple style beginning of the first MobileMe Status Blog post

"Steve Jobs has asked me to write a posting every other day or so to let everyone know what’s happening with MobileMe, and I’m working directly with the MobileMe group to ensure that we keep you really up to date."

is totally inappropriate considering the fact that MobileMe is a paid service and outages might very well have serious affects on you if you're using Apple's services for business purposes or expect an important email that Apple might have lost on its way.

Besides the unacceptable permanent email outage here are a couple of other findings which I'd like to share:

MobileMe does not work with Outlook and Microsoft Exchange

Apple claims: "Works with the applications you know well."

Apple's MobileMe feature description

The truth is: If you're using Outlook with Microsoft Exchange, MobileMe does not sync anything. The MobileMe Control Panel application in Windows Vista does allow you to turn on syncing and even indicates a successful syncing process, however, you end up having your iPhone wiped without anything from Outlook added to it. So to be very clear with this: If you're using an Exchange account for Microsoft Outlook you cannot keep Contacts, Calendars and Bookmarks in sync with MobileMe. Besides the fact that I believe Apple should proactively let users know about this known limitation on their fancy web site this killed most of the benefits for me. (There now are some responses in the Apple support forums but this has nothing to do with proactive customer friendly marketing.)

MobileMe Control Panel application

By the way: As a workaround the iPhone 2.0 firmware directly supports Exchange, however, you need to have your Exchange servers to expose the ActiveSync protocol and set up correctly - an option which might not easily be available in larger enterprises.

No password protection for Web Galleries for Windows users

One feature I like is that I can post pictures taken with my iPhone to MobileMe Galleries. Very useful when you're on business trips and want to quickly share impressions with your family back home. Unfortunately there is no way to password protect Web Galleries if you're not using iPhoto or Aperture on a Mac. The Web Gallery settings offer a couple of advanced options but there is simply no way to configure limited user access.

MobileMe Gallery Settings

This is stupid, causes many customers to feel uncomfortable and if Apple believes it'll help forcing people into buying more Macs I highly recommend they should rethink their strategy. Remember: MobileMe is not a fancy Web 2.0 free service. Customers are paying for it. Even if they are on Windows.

Limited support for Internet Explorer 7

Internet Explorer 7 users not welcome

Come on what the f...! Users get this nice little screen if they enter MobileMe with Internet Explorer 7. Maybe Apple did not get it but the Browser Wars are over. Supporting a browser with 2.6% market share (Safari) but keeping out one with 27% doesn't seem like a reasonable business decision to me. And how does this fit into the Vista friendliness proclaimed in all of Apple's ads? At least my Vista shipped with Internet Explorer 7 pre-installed.

image

A final word about support

In what Apple might consider an absolutely great move towards listening to customers - and chances are Steve Jobs has asked David G. personally to do so - Apple has started to offer an emergency response chat with their lovely service reps. Here is the full, lengthy, extremely satisfying transcript of my session:

Chatting with the MobileMe team...

Well, thanks Apple. Frankly, I don't care about your records. I'm a paying customer and today I've lost 83 personal photos because your service sucks. It's not Jamal's fault. Jamal might sit anywhere in India and follow policies designed in California. I grant you three more days to resolve all my open issues or I'll cancel my MobileMe subscription.

Until then I'm happily joining the FailMe community.

FailMe

 


Just noticed that 1Password, a great wallet application created by Agile Web Solutions that I've been using on my Mac for quite a while, has hit the iPhone App Store. The iPhone application, which can be downloaded free of charge allows to do a wireless sync with Logins and Secure Notes maintained on the Mac. Great application and works like a charm!

Welcome Screen Creating Login Items A Login Entry
(Click to enlarge)

Make sure to use the latest version (Beta 1 as of this writing) if you're on a PowerPC. Otherwise syncing will fail with a NSInvalidArgumentException exception!


My colleague Stephan Hochhaus over at yauh.de recently explained he cleaned his PGP key ring and installed GnuPGP. I've been a happy PGP user for quite some time now, too, and wanted to point out some other additional aspects. First, grab my public key if you want!

Instead of GnuPGP I'm using a commercial alternative, available at www.pgp.com the PGP Desktop Email solution. PGP was originally written by Phil Zimmermann, who now serves as a Special Advisor and Consultant at PGP Inc. so they are pretty close to the source of Pretty Good Privacy.

What I like specifically about the commercial PGP Desktop Email solution is:

  • It's available for the Mac as a universal binary and for the Windows PC.
  • Setting it up is an extremely straight forward several-clicks procedure. It automatically discovers any email traffic and guides you through setting up encryption. You don't want it to interfere with a specific account? No problem, simply tick a checkbox in the wizard and PGP Desktop Email ignores specific accounts.
  • It's 100% nonintrusive. You don't have to make any changes to your Outlook, Entourage, Apple Mail, Windows Live Mail or whatsoever email client application. Other solutions I've tried asked me to change mail server addresses to local proxies (127.0.0.1) etc. which I did not want to do for various reasons.
  • It fully supports SSL and TLS encrypted connections to mail servers. Transparently.
  • It comes with an extendable rules engine. For example I've set up a custom rule that whenever I include the term "nopgp:" into the subject line, it does not transparently encrypt emails. This helps if occasionally I'm sending to mobile colleagues where no PGP solution is available for their handheld devices.
  • It is very nicely integrated with the PGP.com key servers at http://keyserver.pgp.com. This includes revoking keys, cross signing, etc.
  • It informs accurately about everything it does with little toast notifications and - if you like it - an extensive log.
  • The solution includes a secure shredder (if you want to make sure that stuff moved to the trash gets really deleted), PGP Zip and a PGP clipboard which is very helpful if you're reading email through a web reader and want to decrypt contents with a single-click procedure.

Here are some screenshots (click to enlarge) to sum up my quick post about my personal PGP usage:

This is how transparently decrypted emails look like in Outlook 2007 or Entourage 2008:

Decrypted email in Outlook 2007

Here is the Policy Editor which is available per secured account (different policies for different email accounts):

PGP Policy Editor

Details of the Policy Editor

And finally this is the main user interface:

The main user interface (detailes blurred for privacy)

Hope this helps!

 


Bislang war es Kunden von Vodafone, die im ehemaligen D2-Netz ein per Jailbreak für alle Netze geöffnetes iPhone/iPhone 3G nutzen wollten, nicht möglich, einen attraktiven Datentarif zu wählen. Bisher verfügbare "Flatrates" wie Vodafone Mobile Connect, Mobile Connect Europe oder die Vodafone live! Optionen sind vom iPhone nicht nutzbar, weil sie den Zugang nur über den Access Point (APN) wap.vodafone.de erlauben - das iPhone kann aber ausschließlich über web.vodafone.de ins Internet, für genau diesen gab es aber keine attraktiven Tarife.

Das ändert Vodafone heute mit dem neuen Tarif Vodafone InternetFlat Plus. Die Details, die auch auf der Vodafone Homepage zum Download bereitstehen:

  • Buchbar ab dem 28.07.2008 über die Vodafone Hotline (aus dem Vodafone Netz 1212 wählen, aus dem Festnetz 0800/172 12 12 anschließend DTMF Menü 1 > 3)
  • 500 MB monatlich mit UMTS Geschwindigkeit, anschließend mit 64 kbit/s
  • Nutzung nur mit von Vodafone benannten Endgeräten, unter anderem iPhone und iPhone 3G. Die Liste der freigegebenen Endgeräte erhält man über die Vodafone Hotline
  • Wird die SIM Karte in einem nicht freigegebenen Endgerät genutzt, rechnet Vodafone nicht über die InternetFlat Plus ab
  • Voraussetzung ist die Tarifoption Vodafone HappyLive! oder HappyLive! UMTS oder ein anderer Vodafone Vertrag mit einer Mindestlaufzeit

Der Tarif kostet zusätzlich 9,95 € pro Monat bei einer Mindestlaufzeit von 24 Monaten. Ein Anschlusspreis wird nicht erhoben.

Das Buchen des Tarifzusatzes für die zwei Vodafone Karten in meinem Haushalt über die Vodafone Kundenbetreuung war nach einer kleinen Wartezeit von ca. drei Minuten sehr einfach, die Vodafone Mitarbeiterin sehr gut informiert. Fünf Minuten nach der telefonischen Buchung erhielt ich die Bestätigungs-E-Mail mit der Tarifaktivierung. So muss es sein!

 


For those interested in downloading the full speech Barack Obama gave at July 24th 2008 in Berlin, Germany:

Have fun!

 


Today I've successfully updated my 1st generation iPhone to the latest firmware version 2.0.

Before I'm going to provide step-by-step instructions I'd like to clarify a bit about version numbers:

As of this writing there are two major versions of the iPhone available: The first generation which did not support 3G networks and the second generation which does support 3G networks. My post only relates to the first generation of the iPhone. So in case you want to jailbreak the 3G version of the iPhone, this post is not for you!

As always I've followed my instructions with my personal iPhone and they worked perfectly well for me. However, I do not grant any warranties whatsoever and I will not take any responsibility. Do this at your own risk!

I've done all of the below on my PowerBook G4, it should work with the latest Intel based Macs, too.

Jailbreaking your iPhone

Step 1:
Make sure you've got the latest version of iTunes (iTunes > About iTunes). Mine is 7.7 (43).

Step 2:
With your iPhone plugged in and showing up in iTunes you might want to make a Backup which will make it easier to restore contacts, playlists, etc. afterwards. This step is optional.

Step 3:
Download Dev Teams Pwnage tool 2.0.

Step 4:
Unplug your iPhone and plug it in again. iTunes will ask you to Download / Install the latest 2.0 firmware. Select the Download Only option. Do not install! Just download the firmware!

Step 5:
You also do need bootloader version 3.9 and 4.6 which you can download here. Make sure you unpack the Rar archives as the Pwnage tool will search for the unpacked contents later in the process. I simply created a bootloaders folder inside my Downloads folder and unpacked bootloaders.rar into it.

Step 6:
Launch the Pwnage tool 2.0 and select the iPhone icon on the very left.

Step 7:
Follow the on screen instructions of the Pwnage tool. The tool will find the ISPW file and ask you to hit next.

Step 8:
If the Pwnage tool asks you to create a new ISPW file, hit YES.

Step 9:
I responded NO to the "Are you a legit iPhone user" question.

Step 10:
The Pwnage tool is now going to create the ISPW file. It might open Finder windows and ask you for your OS X admin password. Enter it and let the Pwnage tool finish creating the ISPW file. This might take a couple of minutes.

Step 11:
Once the Pwnage tool has finished assembling the file it will ask you to put your iPhone into DFU mode. This step can be a bit awkward and you might need multiple tries. The Pwnage tool actually illustrates the process in great detail but let me summarize what you're supposed to do:

> Plug in your iPhone
> Turn it off
> Press and hold the Home and the Power buttons simultaneously for 10 seconds
> Release the Power button but keep the Home button pressed for 10 more seconds
> Release the Home button after the 10 seconds have passed

Once your iPhone has entered DFU mode, iTunes will pop up and ask you whether you would like to restore. While holding the Option Key (equals the key labeled "alt" on older keyboards) on your Mac, hit the Restore button. iTunes will allow you to select an ISPW file. Select the one created by the Pwnage tool which is at your desktop and start.

Step 12:
That's it. The rest of the process might take up to 10 minutes. The bootladers will refresh and finally your iPhone will reboot with firmware 2.0 installed and everything else restored to factory settings.

Step 13:
Optionally you might want to restore your settings from the backup created in Step 2. Restoring from a backup will not downgrade to an older firmware but simply restore contacts, calendar and sync details.

Moving on from here...

After you've freshly jailbroken your iPhone, you might want to get a couple of things working:

Fixing Voicemail

Visual Voicemail only works if you subscribe to one of the official iPhone plans. However, you might want to enable the Voicemail button in your phone application. Do the following:

Step 1:
Note down the voicemail number for your carrier. For example for Germany's Vodafone it is +49-xxx-55-xxxxxxx, where xxx represents your number.

Step 2:
Click the phone button in your iPhone.

Step 3:
Click the keypad tab.

Step 4:
Type
*5005*86*xxx#
where xxx is your voicemail number. For example if your German Vodafone number would be 0172-333-44-55 you would type *5005*86*+49172553334455#.

Step 5:
Hit Call.

After a while the new number for the Voicemail button will be set and active. Give it a try and hit the Voicemail button.

Getting rid of "Call forward active" pop up

In case you forward calls to your voicemail chances are that you see an annoying "Call forward active. Dismiss" popup whenever you initiate a call. There is a not-so-easy way to get rid of it. Here is how:

Step 1:
SSH into your iPhone using WinSCP or Putty.

Step 2:
Go to /private/var/mobile/Library/preferences and download the file com.apple.carrier.plist to your computer.

Step 3:
Open the file and change the ShowCallForwarding to <false/>.

Step 4:
Upload the changed plist file and reboot your iPhone.

Note: On Macs xCode has a plist editor. On Windows PCs you might want to use this online tool to convert the downloaded plist file into an XML representation. (You do NOT need to convert it back, just upload the XML version to your iPhone and all will be fine.)

Changing the carrier name (text)

For older versions of the firmware you could use Erica Sadun's excellent mini application Make it mine to change the carrier name on the fly. As of this writing the application has not been ported to firmware 2.0. (Update 25th July: Make it Mine is available via Cydia now and makes changing the carrier name and the banner - the part where the iPhone shows the current time - very easy! I still include the manual steps of the original post below.) Therefore you've got to do it manually but it's a very straight forward process, too:

Step 1:
Use Cydia to install Erica Utilities. Start Cydia. Go to the Search tab. Type in "Erica" and install Erica Utilities. (Erica Utilities are a set of command line tools. You'll not find any new icons on your springboard!)

Step 2:
If you've not yet done so install MobileTerminal via Cydia. This will allow you to open a local terminal session into your iPhone's OS. (Alternatively, you could use SSH to log into your iPhone from a Mac or Windows PC.)

Step 3:
Open the terminal and type login. If you're not using MobileTerminal use SSH to log into your iPhone. Login with user root and password alpine.

Step 4:
Change the directory to /var/root/Library/Preferences by typing

cd /var/root/Library/Peferences

Step 5:
Type in

sb -s “NewName” SBFakeCarrier

where NewName is the text you want to be displayed as the Carrier name.

Step 6:

Type in

restart

You're done.

 


... liebe Süddeutsche Zeitung, war dieses Jahr in Dortmund, nicht in Essen. Wenn Ihr schon Schlagzeilen textet, die die Welt nicht braucht, dann seid doch bitte auch präzise in Eurer Berichterstattung!

image

 


One of my dev teams over at VoicInt Telecommunications currently works on a Windows Presentation Foundation based product that facilitates a rich add-in infrastructure. A key feature area of the soon-to-be-shipped release is a completely modular architecture which not only allows to parallelize much of the engineering process but also gives our VARs and resellers the ability to extend our product to individual customers' needs.

With the beginning of the year we've adopted a strict agile development approach and since then successfully follow the Scrum methodology. In a series of exploration sprints we've focused on prototyping around the idea of a true Composite Windows Presentation Foundation application.

Some of the high-level requirements we wanted to address were:

  • Load and unload of discrete modules (= assemblies) at runtime
  • Loose coupling of all modules
  • Communication between modules based on loosely coupled services
  • Thread isolation
  • Exposure of a UI shell which hosts merely autonomous UI panels

One of the great things in our industry is that one always never has to start entirely from scratch. In fact it turned out that creating an extendable application is a quite common scenario with many great ideas and code projects out there, although there are less resources as of today specifically addressing the concerns of WPF based solutions.

Composite Application Guidance for WPF (Prism)

An excellent entry point has actually been published by Microsoft's patterns & practices group on their Composite Application Guidance for WPF site. The scenario was first addressed by the Composite UI Application Block (CAB) and the Smart Client Software Factory and has been extended to the emerging WPF world with the Prism project. To avoid naming confusion here: The project has long been known as Prism but nearing the RC 1 release has been renamed to what's now Composite Application Guidance for WPF. Because I like the shorter version better, I'll continue to refer to it as Prism.

Prism's dynamic composition capabilities addressed some of the main technical challenges we were facing. Specifically:

In UI Composition it provides

  • UI consistency
  • Layout
  • UI workflow
  • Separating the UI from business logic
  • Allows integrating graphics designers later in the process
  • Communication between different UI components

Concerning the required Modularity

  • It promotes separation of concerns through allowing a high degree of separation between the application infrastructure and the business logic.
  • It allows different teams to independently develop each of the individual business logic and infrastructure components.
  • It allows parts of the application to separately evolve.
  • It promotes code re-use and flexibility because it allows business logic components and the application infrastructure to be incorporated into multiple solutions.

Prism introduces a couple of new technical concepts.

A Module in Prism is a logical unit within an application. Modules assist in implementing a modular design. These modules are defined in such a way that they can be discovered and loaded by the application at run time. Because modules are self-contained, they promote separation of concerns. Modules can communicate with other modules and access services through various means. They reduce the friction of maintaining, adding, and removing system functionality. Modules also aid in testing and deployment.

Commands are a way to handle UI actions. They are a loosely-coupled way to bind the UI to the logic that performs the action.

When building composite applications, presentation design patterns such as MVP and MVC are often used to separate the UI logic from the UI layout and presentation. When implementing these patterns with WPF, the presenter or controller handles commands, but lives outside the logical tree. WPF routed commands deliver command messages via UI elements in the tree, but the elements outside the tree will not receive these messages because they only bubble up or down from the focused element or an explicitly stated target element. Additionally, the WPF routed commands require a command handler in the code behind.

Prism introduces several new commands that can be routed outside the boundaries of the logical tree and that do not require handling logic in the code behind. Prism commands are custom implementations of the ICommand interface defined by WPF, and implement their own routing mechanism to get the command messages delivered to objects outside of the logical tree.

To keep everything loosely coupled Prism incorporates the Dependency Injection pattern everywhere and anywhere. The reference implementation makes use of Microsoft's own lightweight extensible dependency injection container, Unity. Prism is designed to support other dependency injection containers, too, but we have not yet tried to refactor this part of Prism.

While Prism has been an excellent starting point for us we are currently evaluating to implement our own solution from scratch - taking into account many of the great ideas and maybe even some code of the Prism implementations. There are a couple of reasons for this:

Prism's Region Manager

Prism ships with a region manager which effectively handles the loading of discrete WPF components into shell layout regions at runtime. The application we are designing implements a sidebar user interface and requires very rich and interactive docking and magnetic (similar to what you might know from Winamp) behavior. The screen shot of our current prototype below illustrates some of the concepts:

image

Our sidebar facilitates regions which can be

  • resized,
  • rearranged,
  • dragged out of the sidebar,
  • docked into the sidebar,
  • docked together and moved as a group,
  • minimized and maximized and
  • shown/hidden.

The current region manager in Prism has not been designed for all of these of use cases. We are currently looking into replacing it with our own implementation.

Module Loader

We experienced some shortcomings in the Module Loader. As an example we found it difficult to access a list of successfully loaded modules at runtime (which we would require to offer a traditional View > Windows menu). Chances are this can be done, however, we found it extraordinarily complicated for such a common task. This lead to overall concerns regarding the thorough design with respect to extendibility and openness of the Prism application block itself.

Prism's DI Container

As stated above Prism makes use of Microsoft's Unity IoC Container. In general we do like Unity and ObjectBuilder2, which it builds upon. However, they might be a bit too heavyweight for what we are looking for. So one other aspect of our evaluation is looking into Castle Windsor, StructureMap and others. We lately added Ninject to our list and from a first look at the documentation, we like it's overall agile implementation.

No solution for isolation

Prism does not offer anything related to the problem of isolating code which gets loaded at runtime. This is a pretty serious issue. Many .NET developers instinctively respond with the magic of AppDomains when it comes to isolation. Unfortunately, however, AppDomains do not at all address isolation issues. In fact they only help you with loading and unloading assemblies at runtime. In case code residing in a module raises unhandled exceptions your main application (the host) will fail, too. There's an interesting discussion here and probably some answers here. As of now it seems as if the only real secure way to tackle the problem of isolation would be to run each module in its own process. (Interestingly the Internet Explorer team at Microsoft introduced some significant changes to how IE 8 handles isolation which seem to stem from the same root cause.) As isolation is of major importance to us we are currently looking into which options would be feasible in terms of the effort/benefit relationship. Stay tuned for more on this!

Preliminary conclusion

Prism has helped us getting started a lot. In general the folks at Microsoft patterns & practices are a great resource and always willing to help and assist. With the lack of support for isolation, the requirement of our own region manager and the pretty heavyweight dependency injection container we have not yet made the final decision to actually use Prism.

We are planning to come to a conclusion within the next two weeks. I'm going to publish a follow up post on our further findings.