Basic Xaml Part 3 (its own Assembly)

So my last XAML basics post ran aground when I couldn’t get custom objects to accept pure textual content. Since that time I’m glad to say a concerted documentation reading effort unearthed a little gem: Pure textual content can only be used when the enclosing type is defined in a separate Assembly.

Why is that? Haven’t got the foggiest idea but suffice it to say it probably won’t be a significant issue in normal use since the only reason to use Xaml is likely to be working with some kind of framework (WPF, WCF, etc) that will come wrapped in its own Assembly anyhow.

So having made the tweak to put my SimpleBase class in a separate VS Project (==Assembly) and licked the text issue I want to press on probing the rest of the xaml-space.

Event Handlers

First up on the hit list were EventHandler wiring, e.g.

<custom:SimpleBase x:Class="TestType"
                    xmlns:custom="clr-namespace:ConsoleApplication1;assembly="
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                   OnClick="HelpHandler">
</custom:SimpleBase>

after some Reflection I can report that it works just like you would expect – it adds a delegate to the HelpHandler method to the SimpleBases OnClick event when you call the InitialiseComponent method of the SimpleBase instance. Nothing fancy going on here – nice :)

x:Name

Then we get on to a bit of cleverness, introducing variables/properties using x:Name. This is kind of strange because it gives a completely different meaning to an attribute than normal – normal attributes in xaml are (best I can tell) evaluated during the InitialiseComponent call. x:Name however actually adds new members to the type being defined (further conflating the two concepts).

What type of member does it add? Actually it seems to Infer the type it needs to be from the type of the object being named, thus <Button x:Name=”Quest”/> will create an internal member variable of Type Button called Quest. The value of this variable will still only be set during the call to InitialiseComponent.

OK, accepted, but what happens if we name a button inside a grid inside a xaml element? To find out I created some simple types and did some more reflecting.

<custom:SimpleBase x:Class="TestType"
                    xmlns:custom="clr-namespace:ConsoleApplication1;assembly="
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <custom:SimpleTypeOne x:Name="SimpleVarOne">
        <custom:SimpleTypeTwo x:Name="SimpleVarTwo">
        </custom:SimpleTypeTwo>
    </custom:SimpleTypeOne>
</custom:SimpleBase>

The result is that both SimpleVarOne and SimpleVarTwo are declared as internal member variables of the TestType class. Or in other words nesting of the XAML appears to have no impact on the declaration of the members. In many respects I’m not sure what else it could mean but it is certainly interesting and worth keeping in mind.

Summing up

I have one more thing to investigate in this line for which you should tune back in next time, however XAML is now more of an open book to me and hopefully you. To summarise:

Xaml is a conflation of Type Derivation and Property Assignment.

The Root Element specifies the Base Type and via the x:Class attribute the name of the New Type.

Any element can be named with the x:Name attribute and this has the effect of creating an internal member variable with the given name and the Type of the element on which it is applied.

The Type is compiled at compile time, but the properties are not set until an instance is a) created, and b) initialised with a call to InitialiseComponent().

The Type created by the xaml is automatically marked as Partial, this is what allows us to have the code-behind file. The code behind is nothing more than another partial class with the same name.

If you look at the auto-generated xaml code behind file you will find the call to InitialiseComponent slipped into the constructor where it can perform its magic on type instantiation.

see also

Your thoughts are valuable... post your thoughts on this topic...



3 × six =

community content (no approved comments so far)
Click to expand

Basic XAML Part 2
Click to expand

What does it mean then to declare nested xaml elements inside our simple class then?

e.g.

<custom :SimpleBase x:Class="TestType"
                    xmlns:custom="clr-namespace:ConsoleApplication1;assembly="
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
Test
</custom>

Well, if you try it you will find this isn’t possible. And indeed I also can’t figure out what it might mean. And yet if you open any book on XAML you will find things like <button>Click Me</button>. Hmm.

The answer lies in the definition of the base type (in our case SimpleBase).

In order to be able to assign direct content such as this we must declare a property on the base type and add a [System.Windows.Markup.ContentProperty("...")] attribute to it where the … is replaced with the name of the property that should take the content.

    [System.Windows.Markup.ContentProperty("PropertyOne")]
    public class SimpleBase
    {
        public string PropertyOne { get; set; }
        public string PropertyTwo { get; set; }
    }

Now in xaml we can assign the value PropertyOne using the following syntax:

<custom :SimpleBase x:Class="TestType"
                    xmlns:custom="clr-namespace:ConsoleApplication1;assembly="
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <sys :String>Test</sys>
</custom>

Interestingly it still isn’t possible to directly enter the string ‘Test’, only to assign a sys:String object containing Test. Putting Test directly in the xml leads to a compile error.

see also

Your thoughts are valuable... post your thoughts on this topic...



+ 4 = five

community content (no approved comments so far)
Click to expand

Learning Polish
Click to expand

So, my girlfriend is taking me to meet her Polish parents in Poland… and me without a word of Polish, cripes!

Thankfully we were able to sit together and take a few important words apart to work out what they sound like in English (roughly).

English Sounds Like Written As
Yes Tack Tak
No Nyeh Nie
Please Proshem [Prosheown] Proszę
Thank You Djin koojem Dzię kuję
Good Morning Djin dobri Dzien Dobryń
Good afternoon Djin dobri Dzien Dobryń
Good Evening Dobri vierchor Dobry weczór
Good Night Dobraanots Dobranoc
Hello (friendly) Tjesht Cześć
Goodbye Dovidzenya Dowidzenia

And the basic numbers…

English Sounds Like Written As
One Yeden Jeden
Two Dvah Dwa
Three Tschi Trzy
Four TshTeri Cztery
Five Pjeowntch Pięć
Six Shestj Sześć
Seven Shjedem Siedem
Eight Osiem Oshjem
Nine Djevjeownch Dziewięć
Ten Djesjeownch Dziesięć

I’ll be back with a few more things later… happy Polish :)

P.s. If I got any of these wrong is undoubtadly my fault.

see also

Your thoughts are valuable... post your thoughts on this topic...



9 × two =

community content (no approved comments so far)
Click to expand

[Short Story] Headless Pride
Click to expand

The train rushed to a halt beside her, the 8:41 to somewhere exciting no doubt, but for her the daily chore of getting to work. She scrambled aboard like the hoards of faceless others around her. Always busy, always full. She never even noticed when the train pulled out, mired as she was in her own misery.

The train rocked, the train rolled, the intercity rattled and screached as it hurtled down the tracks.

She sat in second class where the seats were packed in tight and her knees sweated, wrapped as they were around the knees of the big sweaty guy sitting accross from her. Horrid. But what choice? First class passengers would be reclining in their seats and being served champaign and canapes right about now, but in this world of crisis only a very select few could afford the luxury. Clickity clack, clickity clack, the scenary rushed by; a blur of colour, a riot of flickering shapes, a smouldering ruin here and there.

To pass the time she chatted to her current squeeze on the Berry, a ball and chain that shackled her to her corporate life more securely than any fence or wall ever could. No matter where she went, no matter who she saw or what she was doing she was on call 24 hours 7 days a week. And for what? A measly living allowance barely more than the state handouts given to those too lazy to work for a living. Daily now she wondered if maybe they had the right of it… but her pride was strong and she was too stubborn to just give up and abandon her dreams.

So here she was hurtling towards another metropolis of the corporate machine. Her goal today was to convince some sharply dressed, arogant, full of it sales guy that the product he was so successfully selling didn’t exist, had never existed, and frankly never would exist. It fucked with her head that in this twisted world if the sales drone sold the cure for aging it was the techs who couldn’t produce it in time that would loose their jobs. The bloody sales guy would undoubtadly get a few mill in bonuses and move on to another similar job in another company where he knew equally little about their products and would care even less.

Inside she was furious and shaking, but on the outside she was calm and alert, projecting competence and carisma. It was this self mastery of expression that allowed her to succeed at a job she hated, to get on in a world stacked heavily against her. But it didn’t bring her happiness, didn’t get her that rich husband she dreamed of, or even enough dough to buy a damn car.

The train was slowing now, breaking hard, really damn hard. She slid forward on the seat, pressing almost intimately into big sweaty dude. What the hell? This never happened. She scrunched into the guy as the train breaked even harder, the breaks screaming, a high pitched screach that had half the passengers screaming.

Bump, bump, bump the carriage kilted to the right and shuddered to a halt. Stationary and in silence. All the passengers looked at each other, looked around the carriage, peered out the window. What the hell? The train was not stopped in the usual spot and there were people running all over the platform like headless chickens. It was only a matter of moments before the rumours started. What had happened? The train had come off the rails. The train had hit someone. The train had broken down. It was a bomb. A terrorist. A collision. No one really knew but with every passing moment the stories got wilder, the terror building among the passengers.

The Berry in her hand went dead. For the first time in living memory she was trapped in a box with no information sources, no access to the net, nothing to do but sit and wonder what had happened.

Being who she was she declined to speculate, allowing the swirling rumours to pass right by her and instead concentrate on observing. Watching both her fellow passengers and the people rushing about on the station.

That this was no ordinary occurence was quickly clear… the majority of people on the platforms were running away from the train, some of them were crying, some screaming, most just looked numb. All of them seemed to be content to be herded like sheep down into the lower level passages. The station personnel, and yes, she even saw a few police officers here and there, all of them looked bewildered and out of control.

Nonetheles a sort of order was slowly forming, with police moving towards the train and pretty much everyone else moving in the other direction. Not looking good. The guys in orange appeared to be errecting some sort of baricade between the train and any possible vantage point from outside the station. Something bad was going to happen, she was almost sure of it. Some of the other passengers had noticed too… she could feel the tension rising, any moment now it was going to erupt into panic.

Just as she thought it was about to go bang the doors hissed open and a uniformed officer stuck his head in.

In clipped millitary tones he announced “Everyone needs to leave the train in an orderly fashion. Look only forward. Do not look around. Do not look back. Once off the train move as quickly as possible to the exits.”. He didn’t exactly shout but his words filled the train, they brooked no argument and carried a weight of authority she could only dream of being able to achieve.

Almost as if they were swimming in treacle everyone looked around. Bewildered they began to gather their stuff. One by one they made their way from their seats, down the central isle, and out past the officer. As every person passed him he repeated the instruction. Like sheep they did exactly what they were told.

Most people were off now and she was begining to look suspicious by not moving so she picked up her shoulder bag and clutch purse and headed to the door. Again the officer repeated the instruction. But she was not cowed by authority and determined to understand what was going on looked around her as she stepped off the train.

It was gruesomely clear what had happened, bodies and body parts lay twisted and smeared between the train and the platform. More bodies were under the train. Steel girders and glass was littered about half way along. She was stunned. So many dead, so much blood. She glanced down to see her carriage was sitting on top of a large lump of concrete and one solitary headless man. He lay there twisted and still. So still. Unlike the scene further up he didn’t appear to be bleeding but somehow that only made it more chilling.

There was no time to see more, herded as she was by the furious guide. He nudged her, pushed her, shoved her even to the stairs. Giving a final heave he forced her off the platform and into the thronging crowd all confused and lost. Travelers in the middle of the journey, travelers unable to start the journey, gawkers, and beggers, all thrown together in the tight underpass. Coralled and marshaled but directionless and without information.

Somehow she found her way to the outside world. But what now? She was miles from her destination and hours from home with limited funds and a ‘net blackout.

Dazed she stumbled onto a footpath and wandered in approximately the direction of her original destination. Her mind was working like mud. Every thought was followed by a flash of that man. Headless. Still. Dead.

It could have been her. How could she live with that? Why go on? What was the point if everything could be snuffed out in an instant. Had he left loved ones? Had he died alone. Was he a happy man or miserable? Did he deserve what was coming to him or was it a cruel mistake?

Why?

Your thoughts are valuable... post your thoughts on this topic...



1 × = nine

community content (no approved comments so far)
Click to expand

Most basic XAML
Click to expand

As part of gaining a deeper understanding of WPF I felt it was important to gain a deeper understanding of how XAML works and what it actually means. Therefore I will attempt to use XAML independantly of WPF…

Naturally my first question was “What is the simplest XAML file I can conceive of?”.

What I came up with was this:

<sys:Object xmlns:sys="clr-namespace:System;assembly=mscorlib">
</sys:Object>

If you create a new Console Application and add a code file called “Test.xaml” then enter the above code it will build. Yipee.

But what does it mean?

I was assuming it creates a new type extending Object, unfortunately since I couldn’t specify a type name I had no way to test that assumption. So from here I wanted to extend my question to include “and I can reflect on”.

A bit more playing landed me this:

<sys:Object x:Class="TestType"
            xmlns:sys="clr-namespace:System;assembly=mscorlib"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
</sys:Object>

This allows me to create a new type called TestType that extends Object. How do I know this? I can access it from my Main function by calling:

TestType t = new TestType();

Great… so I fire up reflector expecting to find a decompilation giving me:

using System;

namespace ConsoleApplication1
{
    public class TestType : Object
    {
    }
}

But, no, it is a load more complex than that. What I actually get to see is:

[GeneratedCode("PresentationBuildTasks", "4.0.0.0")]
public class TestType : IComponentConnector
{
    // Fields
    private bool _contentLoaded;

    // Methods
    [DebuggerNonUserCode]
    public void InitializeComponent()
    {
        if (!this._contentLoaded)
        {
            this._contentLoaded = true;
            Uri resourceLocator = new Uri("/ConsoleApplication1;component/basictest.xaml",
 UriKind.Relative);
            Application.LoadComponent(this, resourceLocator);
        }
    }

    [EditorBrowsable(EditorBrowsableState.Never), DebuggerNonUserCode]
    void IComponentConnector.Connect(int connectionId, object target)
    {
        this._contentLoaded = true;
    }
}

Holy batman and robin. That was not quite what I expected, although the good news is it does indeed create a new type that derives from Object it also implements IComponentConnector.

However, when you stop and think a little it appears that XAML is in fact the conflation of 2 quite different concepts. The first is class definition (what we expected) and the second is Property Assignment (the extra stuff).

I’m assuming therefore that calling InitializeComponent will traverse through the inner XAML setting all the properties of the object.

Unfortunately using Object as the root does not let me test this, so I quickly whip up a simple base class:

using System;

namespace ConsoleApplication1
{
    public class SimpleBase
    {
        public string PropertyOne { get; set; }
        public string PropertyTwo { get; set; }
    }
}

And then modify my XAML to:

<custom:SimpleBase x:Class="TestType"
                    xmlns:custom="clr-namespace:ConsoleApplication1;assembly="
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
</custom:SimpleBase>

NOTE: Notice the use of “;assembly=” at the end of the namespace definition, this is the most conformant way of specifying “look in the current assembly”. It also has the added advantage of making it easy to re-direct later if you refactor the type into a new assembly.

OK, so with that done I can again compile my program and I expect it to be just creating a new instance of TestType (derived from SimpleBase) but not yet setting any properties.

Score one for careful thinking… it does exactly that.

Next up I add a call to on my object t.

TestType t = new TestType();
t.InitialiseComponent();

I would expect this to change nothing since I don’t actually specify any of the properties in XAML.

And indeed it doesn’t, however it does change the hidden field “_contentLoaded” to true.

So for the next test the obvious step is to specify some values for the properties and see if they get set a] before the call to InitialiseComponent or b] after (or c] never…).

<custom:SimpleBase x:Class="TestType"
                    xmlns:custom="clr-namespace:ConsoleApplication1;assembly="
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            PropertyOne="Hello"
            PropertyTwo="World"
>
</custom:SimpleBase>

I can tell you now that the expected happens and the values are set after the call to initialise component.

So the first step of understanding XAML is completed.

What is XAML?
It is a conflation of Type Derivation and Property Setting.

Urg, I hate conflations. But OK, it is what it is and that is the future of programming according to MS.

Join me next time to dig deeper into XAML and how to use it.

see also

Your thoughts are valuable... post your thoughts on this topic...



eight × = 32

community content (no approved comments so far)
Click to expand

Conflate with care
Click to expand

One of the worst user interface design errors is the conflation of two unrelated concerns. Unfortunately it is depressingly common.

Take for example Back and Up. Frequently these are conflated into a single button leading to unexpected user behaviour. This is currently bugging me on my Android phone… I use an app that opens a screen that then sends me to my e-mail, I press ‘Back’ expecting to go back to the app but instead the ‘back button’ is overloaded to mean ‘up to parent’ by the mail app so I actually end up in the inbox. It may seem a small thing but believe me it is absolutely infuriating.

Unfortunately for designers precisely the converse is also true… one of the best UI design ideas is to conflate related ideas. Yes, mutual contradiction at work.?

Consider e-mail and facebook messaging, both are basically the same and wrapping them all up in the same ui would make most users pretty happy.

The challenge for the designer then is to locate ideas that seem related not only to the designers of the world but to everyone who will pick up their creation. When they succeed the user sees the world as simpler, more obvious, and less stressful. When they fail the UI seems to be a nightmare to use, a frustration, and often reason enough to seek alternatives.

Moral: Conflate with care!

see also

Your thoughts are valuable... post your thoughts on this topic...



6 + = fourteen

community content (no approved comments so far)
Click to expand

Looking back on previous work
Click to expand

So, over the years I’ve done some interesting work (or at least some time consuming stuff ;) ) and I thought it might be interesting to gather a few of those items together on my new site, to begin with I’d like to highlight a couple of my early web designs.

C&W Creams

From 2004 this design was for a small American family business selling a special moisturiser to the female market. The site was a simple no-nonsense construction using css based navigation (at the time that was relatively cool, nowadays no-one would consider it anything special… how times change) consisting of 7 pages.

TaxTime

Keeping the minimalist information driven theme I also created this framework for an American tax office, unfortunately this wasn’t what they were looking for at the time so now it exists only as this mock up. I guess you win some and loose some…

So there you have it, a simple post with a couple of designs in it… if you like to see this sort of thing do let me know and I’ll see what I can do.

see also

Your thoughts are valuable... post your thoughts on this topic...



eight − 3 =

community content (no approved comments so far)
Click to expand

[Review] Nexus One vs iPhone 3G 16GB
Click to expand

This review courtesy of a complex import excercise to get the Nexus One onto my t-mobile iPhone account in the Netherlands. Damn you google for not accepting the fact that the internet is a global distribution system. Damn you and your godawful online support. Still at least you had the good grace not to carrier lock the phone so it is at least possible to flaunt your rules with a helpful UK family member.

This mini review only covers the out-of-the box experience. Maybe I’ll update with new feelings and opinions after I’ve had some time to configure and aquire lots of apps.

The outside
When you lay the two next to each other on the desk the heritage is plain to see. The Nexus One is almost identical in size and form. If anything HTC & Google have taken the rounded edges idea a little further than Apple and the device benefits from that in the pocket and hand. However they are very similar – indeed my girlfriends first comment was “why did you want another one the same?”.

The screen on the Nexus One is slightly larger and has a much higher pixel density which shows in the smoothness and readability of text. Perceptually I am more grabbed by the look of the iPhone display, but that is probably because out of the box it is a tad brighter. The reading angle on the Nexus is substantially better.
Like the iPhone there is a speaker grill on the top of the front panel, although the one on the Nexus is slightly sexier looking.

On the front of the Nexus One are a Trackball and four soft buttons in place of the iPhones single physical button. The track ball works surprisingly well, even when wearing gloves and it doubles up as a button by pressing down on it. The soft buttons are brilliant, why the iPhone ever shipped without a ‘Back’ button is beyond me and has bugged me since day one. Thankfully the Nexus One has this covered. All four soft buttons function reasonably well and are easy to hit.
The mini-usb on the bottom is much like any other – at last I can have a single charger system for all my phones (well, except the iPhone). There are also three docking pins that I have been unable to test because I don’t have a dock. The mini-usb is marginally harder to insert than the iPhone connector but easier to remove. Only time will tell if the mini-usb has the survivability of the iPhone dock connector.

On the side lives the volume control which is simultaneously nicer to use than the one on the iPhone and harder to locate by touch. It is elegantly moulded to match the case which means even running my fingers up and down it I don’t get caught on any sharp edges. However because it is hard to feel I find myself accidentally pressing it a lot more than the one on the iPhone.

On the back live the camera and the xenon flash. Thankfully HTC put it closer to the middle of the top edge which is slightly more intuitive when using it. The flash is not available on the iPhone.

On the top is the ubiquitous 3.5mm headphone jack; however this is on the right instead of the left on the iPhone. And the power button – also on the other side.

It took me a while to discover that holding down the power button also triggers an on-screen menu that allows one to select ‘Silent Mode’, ‘Flight Mode’, and ‘Power Off’. This is not at all intuitive compared to the iPhones little switch, on the other hand that little switch on the iPhone has been the bane of my life because it often gets switched to silenced in my pocket and then I miss calls. All in all I call this one a wash.

The iPhone is backed in shiny black whereas the Nexus is a sort of matt grey/gold colour. I prefer the shiny black but the iPhone is damn slippy to hold onto in the wet… the nexus one is grippy and comfortable. So, image aside this is a big win for the Nexus.

On the iPhone the method of inserting the Sim card is to stick a bent paper clip (or their special tool that everyone loses) in the top to eject the Sim holder, on the Nexus it is done by removing the back cover and the battery. Either method works, meh.

The back cover on the nexus is easy to remove but doesn’t seem to show any indication of jumping off. HTC seem to have removable covers down to a fine art.

Unlike the iPhone the Nexus also supports removable Micro-SD storage and a removable battery, both big plusses in my book. The only slight downside is that the SD card can only be taken out when the battery is removed – I would wager this has something to do with ensuring the user has ‘un-mounted’ the card before removal (this thing has a Linux kernel after all). All in all it’s OK and seriously better than the iPhone but hot swap would be a nice thing to see in a future model.
Build quality wise it feels solid in the hand but not overly heavy. Subjectively it feels lighter than the iPhone, but according to my kitchen scales they both weigh in at an identical 133g.

Powering Up
They both take almost exactly the same time to boot from cold… about 45 seconds.

Shutdown
The Nexus turns off in about half the time of the iPhone 3G, however it doesn’t have the groovy ‘slide to power off’ UI element of the iPhone. Another wash, especially since neither takes more than a few seconds.

In Use
The first thing you see on both phones is the lock screen. On the iPhone you see the service provider, 3G status, Wifi status, notification of whether or not alarms are set, the battery meter, and the date and time. On the Nexus you see the same, however for some reason they included the time twice…

The Nexus also displays a handy warning to connect your battery charger if the power is low. This is better than the iPhones single fire, cancel, forget message. Speaking of charging there is a groovy little LED that lights up on the front face when the phone is charging, nice. Score one for the Nexus.

Also on the charging front the power adapter is one of those horrid moulded onto the plug things, which means you can’t replace the plug. This one goes to the iPhone with its gorgeous adaptable adapter. In fact I will miss the iPhone adapter system loads if I move to the Nexus full time.

Unlocking the phones is about the same… slide a little doehicky to the right. The Nexus adds the ability to slide another one to the left to silence the phone (this duplicates the silence menu under the power button). If anything the iPhone implements it a fraction better with the sweetly fading prompt text and the ability to wiggle the slider back and forward, the Nexus annoyingly unlocks regardless of whether I lift my finger or not.

Both phones provide a home screen that looks much the same, the both provide multiple pages using left/right swipes and indicate the current page using little dots. Both show you the battery and phone status in the toolbar at the top. The iPhone squeezes an extra row of icons onto each page, however the Nexus manages to include an extra soft button to get to even more apps and the ability to add ‘Widgets’ to the screen (such as todo, calendar appointments, etc). All in all the Nexus is more functional but the iPhone manages to look nicer.

The left/right swipe on the iPhone is a tad more responsive and smoother, the slight bounce animations and acceleration/deceleration of the slide really help to make the action feel better. Win to the iPhone here.

Opening my gmail account is a fraction quicker on the iPhone 3g (!) and the 3-line preview is preferable to the Nexus’s subject + sender approach. The Nexus shows the Stared status of mails which the iPhone doesn’t. When it comes to reading the mails themselves the Nexus’s screen is waaaay better, but the iPhone has a much handier interface layout and functionality. Definitely the iPhone wins this one hands down.

With regards to Exchange e-mail support they both have it; however the iPhone combines all the e-mails in a single app which is imho nicer. So again a win to the iPhone.

In terms of the calendar app the one on the Nexus throws away the ability to see at a glance the events of a given day and in its place squeezes in a bar that shows when you are busy on every given day. I’m not convinced, in fact I really prefer the iPhone here. In order to create a new event the iPhone lets you use a single tap on the + button, the Nexus makes you go through the menu (soft button) and then the + button. iPhone takes this one too. Filling in the event details is for the most part also better on the iPhone, the Nexus only wins out in having a slightly more usable date selection widget and allowing multiple alerts per event.

The one big calendar win for the Nexus is the 7-day week view.

However, there is one HUGE loss for the Nexus… Microsoft Exchange Calendar integration. If it’s possible I certainly have not figured out how. Clearly this isn’t meant to be a business device.

The browser is nippy and well designed on both; however there are some significant differences. The Nexus browser fails to display the title of the page and provides no easy way of scrolling back to the top (the iPhone has both). The nexus also lacks the control toolbar of the iPhone… this means more reading space but an extra soft-button press for every action.

Both have double tap zoom, with googles implementation being slightly better. Both offer Pinch zoom, however here Apples implementation is better.

When you visit Google.com on the Nexus it can locate you using your gps, however strangely it does not automatically connect you to your iGoogle account despite the phone being linked to it. Worse even though it knows I’m in Haarlem, Netherlands it insists on showing me google in Spanish. I have to select ‘google.com in english’ every time I visit it. Some work needed here!

Multi-tasking on the Nexus is nice when compared to the iPhone, however it isn’t exactly intuitive. Who would have guessed for example that pressing and holding the home button would bring up the ‘alt-tab’ interface to switch between running apps?

Contacts are pretty much a wash; maybe the search ability is a tiny fraction better on the Nexus but nothing much in it.

The new iteration of Google maps on the Nexus is really taking maps to the next level with satellite image and custom information overviews, the multi-tasking helps here too. I would still prefer to download an offline maps app for GPS navigation since it is all too easy to run out of 3G data signal and have to struggle to get maps down. Win to the Nexus.

Android Market is better than iPhone App Store in implementation but there are less apps available. I think Android takes this one for the potential – I imagine in 2 years it will trash the app store.

The ringer is not particularly loud on the Nexus although it out peeps my house phone, in fact it is noticably quieter than the iPhone 3G at max ringer volume. The vibrate is feeble both on call reception and as haptic feedback compared to the iPhone Frown This is an area where smartphones really really need to improve.

The noise cancelling effect of the second microphone is very impressive; it almost totally eliminates background noise but does have the downside of very occasionally causing some voice distortion that can make the caller hard to understand. That said I would definitely rather have this feature than not! My parents proclaimed that I had never sounded so clear on the international connection (and I’ve called them on landlines, iPhones, WinMo’s and normal mobiles) which is praise indeed.

Reception clarity is astoundingly good, no issues whatsoever. I wouldn’t mind a tad more volume in the earphone but it is way better than the iPhone.

Speakerphone is loud enough but a little tinny. IMHO not the best speakerphone mode I’ve heard but usable.

The call log is large and clear with completely intuitive functionality. In fact I would say it is better than the iPhones in terms of doing what one would expect. The dial pad is equally functional.

I think the 3G reception is a tad less reliable than the iPhone on T-mobile NL, however it is possible that they need to tune their towers for this phone since the Nexus is not officially available here yet. In any case the variation is extremely marginal and may just be the Nexus reporting lost signals quicker than the iPhone does.

I really miss the voicemail system of the iPhone it is nice to be able to see at a glance which voicemails I have and listen to them out of order. Going back to the old ‘dial in’ way of listening to voicemail is a serious come down. Go iPhone.

Notifications via the glowy trackball on the Nexus one are a feature the iPhone doesn’t have at all and are a really nice addition Smile This of course is balanced by the horrid notification toolbar that makes getting to my notifications a pain in the butt. What on earth is wrong with a standard fly out menu in place of this horrid click and drag thing that usually closes before I can get to the notification.

Without a doubt the camera on the Nexus is streets ahead of the iPhone, no question a hands down winner here. Do mobile photos matter to you? Maybe not… but the bar-code reading ability is also improved by the camera and cpu combo so maybe that counts for something.

I like the digital compass, nice. Of course the iPhone 3GS also has this so it’s not really fair to fault the iPhone here.

Typing on the Nexus is more finicky than that of the iPhone and the placement of the soft-keys just below the spacebar doesn’t help. I keep finding myself tapping the soft keys by accident and if I’m typing in a hurry sometimes I bring up the menu and trigger and action without actually seeing what the action was. The onscreen keyboard is an area where there is substantial room for improvement; however the auto correct is nothing if not brilliant. Of course HTC have had autocorrect/complete sorted for many years on WinMo so maybe this isn’t such a surprise.

I would say that in general the touch responsiveness and accuracy of the Nexus isn’t quite up to the same level as the iPhone, the iPhone borders on psychic at times by getting exactly the right action under a finger mash that could have gone many ways. A particularly insidious example of the Nexus problem is the sms interface… sometimes it can take me 5 or 6 presses to encourage the on-screen keyboard to activate so I can type in a message.

Speaking of texting… it works, it’s nothing special and it suffers from the annoying notification system. It supports conversation threading, multiple recipients, and to a degree draft messages. It shows contact pictures in message threads which is a nice addition.

Finally the animated wallpapers are a bit of a gimic but they are rather pleasing and I already miss them on the iPhone Wink

Conclusions
The Nexus One has a way better screen, marginally nicer hardware, and much better customisability.

The iPhone has way more intuitive software, better touch sensitivity but it looks dated and lacks a back button.

All in all I think the Nexus One is a good evolutionary hardware improvement however Android is not quite up to the level of polish shown by the iPhone OS.

I’ll likely persevere with the Nexus just because I want to develop for it but if Apple launched a new iPhone with similar hardware I’d switch back in a heartbeat.

Of course I’ve only used the Nexus for a day whereas I’ve had the iPhone for nearly 2 years… so maybe time will make it better – after all it is extremely customisable.

As a side note Android blows Windows Mobile out of the water. I will be intrigued to see what MS comes up with in WinMo 7 since Android has clearly stolen its place in the mobile phone ecosystem.

Your thoughts are valuable... post your thoughts on this topic...



seven × 7 =

community content (no approved comments so far)
Click to expand

Building on the shoulders…
Click to expand

The blog design is finally begining to take shape, it’s built on WordPress so all the heavy lifting has already been handled… and a thousand little complexities have already been introduced!

Actually it seems to be pretty nicely built and I’m not having too much trouble hacking together my own theme, phew.

It’s all looking a little minimalist right now (sign of a clean mind don’t you know) but as time goes by I hope to get the rest of it working, then on to the content (eek).

see also

Your thoughts are valuable... post your thoughts on this topic...



1 × = five

community content (no approved comments so far)
Click to expand

Slippery Slope
Click to expand

First they made me get a mobile, then a website, not long after it was ICQ, IRC, Facebook, Broadband, and a house full of computers. Now it’s the turn of the blog.

Yes folks, I’m sliding down the slippery slope into the mire of the digital world.

Why? you might ask (although probably not, I know I don’t)…

It is starting as a place to collect some random ramblings ranging over my experience of daily things and a collection of thoughts over design and interaction with gadgets. Probably there will be a photo or two thrown in.

So… there you have it… now sit back and wait for the first post :)

see also

Your thoughts are valuable... post your thoughts on this topic...



nine − = 7

community content (no approved comments so far)
Click to expand
Design and Content © Copyright Duncan Kimpton 2010