First time here? You are looking at the most recent posts. You may also want to check out older archives or the tag cloud. Please leave a comment, ask a question and consider subscribing to the latest posts via RSS. Thank you for visiting! (hide this)

January 2011 Blog Posts

WP7 Tip: How to correctly handle smart quotes in WebBrowser control

While finalizing the v1 of the news reader for WP7 I’m working on, I noticed that sometimes the text in the WebBrowser control contained some little squares. It was not an encoding problem because accented characters were displayed correctly.

“Smart Quotes” are the problem

After a while I understood that the squares were displayed when there was a “smart quote” (yes, that ones) that was not correctly escaped in the post (as in not using the correct HTML entity). And this is more common than you thing, because most Windows applications, like WLW and Word, automatically change the plain quote to the much nicer smart quotes.

Not really sure why this happens: if I use to browser to go to the original page the smart quotes are displayed correctly.

Looking around on the Internet I found that it is a problem with the “Silverlight” web browser, and can be solved by using the NavigateToStream after converting the string to an array of bytes, but unfortunately NavigateToStream is not available on WP7.

HTML Entities to the rescue

The trick is to convert these weird characters in their corresponding HTML entities before calling the NavigateToString method.

string displayString = GetMyString();
displayString = displayString.Replace((char)8216, '‘');
displayString = displayString.Replace((char)8217, '’');
displayString = displayString.Replace((char)8220, '“');
displayString = displayString.Replace((char)8221, '”');
web.NavigateToString(displayString);

I haven’t tried with Eastern European languages or Oriental languages yet. But I hope these will be handled correctly by the WebBrowser. Otherwise I’d probably have to convert all non-ASCII characters in their HTML entities, just to play safe, like this:

foreach (char value in strText)
{
    int decValue = int.Parse(string.Format("{0:x4}", (int)value), 
        System.Globalization.NumberStyles.HexNumber);
    txtUnicode = txtUnicode + "&#" + decValue+ ";";
}

Is there a better why to do it?

This seems like yet another encoding bug in WP7.

I hope a future version of the NavigateToString method will handle those characters correctly. And in the meanwhile if you know of a better workaround, please post it in the comments.

Subtext Skin Bonanza

Simon Philp, member of the Subtext team with a passion for webdesign (and snowboarding), has started the New Year with a lot of energy, and with an amazing project: Subtext Skin Bonanza 2011

What is it?

He is taking some public available skins from other blogging engines and porting them to Subtext. He will publish one skin every 2-4 days for 3 months. So at the end of this super-porting project, Subtext will have 30-40 new skins you can choose from.

The 6 skins so far

He started this project at the beginning of the year and today, 20 days into the new year, he already published 6 skins.

GreenPark TitanSkin

 Brightfolio1 iStudio

Suffusion-HomePage Koi-SkinHomepage

How do you like them?

If you are running on Subtext, and want to pimp you blog a bit, subscribe to Simon’s blog and follow his progress.

Also, if you like a wordpress skin and would like it to be ported, please add a comment on his blog.

WP7 Tip: Always Encode Urls for the WebBrowserTask

Exactly as the title says, remember to encode the url you want to open in the external browser via the WebBrowserTask, always.

This is probably the first of a series of posts I’m going to write about some problems I found while developing FeedTso, a feed news reader application for WP7, of course with the solution.

But let’s go back to the problem.

How to open a url in the WP7 web browser from your application

Well, this is easy:

WebBrowserTask task = new WebBrowserTask();
task.URL = "http://feedtso.com/";
task.Show();

Just create the task, set the URL (remember, it is a string, not a Uri) and call the Show method.

Adding parameters to the mix

But with more complex urls, with parameters or when the parameter is another url, things go wrong.

In my news reader I let users open the post in the external browser also in text-only mode, using a third party service from Instapaper, called mobilizer.

To make it work you have to call the url http://www.instapaper.com/m and add a parameter named u with the url of the page you want to be “mobilized”.

But in order to add it as parameter, the url has to be encoded to make it legal as uri: so if you want to see the text-only version of the features of FeedTso you have to call the following url (which is urlencoded):

http://www.instapaper.com/m?u=http%3A%2F%2Ffeedtso.com%2Ffeatures.html

This works fine if typed manually into the address bar of a browser, but if I send this url to the web browser task, I see the decoded url, which is invalid and thus generates a bad response from the server.

I looked at the URL property on MSDN and it says:

Remark:
URLs that contain special characters must be escaped before being assigned to the URL property. Use the Uri.EscapeDataString method to escape the URL string.

I thought it was only applying to the normal url encoding you do if your parameters have special characters. But apparently it means that everything has to be UrlEncoded, also after having already encoded the parameter.

Probably the web browser task always decode the url before sending it to the browser, and in my case it was decoding also the encoding of the url parameters and was making the navigation fail.

How to navigate to a Uri with parameters?

The gotcha is that you have to encode it again before passing the url to the WebBrowserTask.

string serviceUrl = "http://www.instapaper.com/m?u=";
string destinationUrl = "http://feedtso.com/features.html";
string escapedUrl = serviceUrl + Uri.EscapeDataString(destinationUrl);
WebBrowserTask task = new WebBrowserTask();
task.URL = Uri.EscapeDataString(escapedUrl);
task.Show();

Encoding it the second time would generate an invalid url:

http%3A%2F%2Fwww.instapaper.com%2Fm%3Fu%3Dhttp%253A%252F%252Ffeedtso.com%252Ffeatures.html

But apparently that’s the only way to have the WebBrowserTask behave correctly.

Wrapping up

This also seems like one of the gotcha WP7 developers might need to live with, as I don’t think Microsoft will ever be able to fix this as by doing so it will break all the applications that already workaround that strange behavior.

This also got confirmed by Jonathan Tanner on the on the WP7 Development forum:

Unfortunately this seems to be be a “gotcha” that WP7 developers will have to live with since changing this behavior in a future update would break existing apps that take into account the remarks for that property.

So, we have to learn to live with it.

My resolutions for 2011: do not over-commit

One of the reasons for the failures of 2010 is over-commitment.

Number one priority for 2011, will be: do not over-commit. Starting from my resolutions, so just 3 per 3 categories.

  • Personal life
    • XC-Skiing: at last for this winter, train, practice and try to take part in the Engadin Ski Marathon with Daniela and Davide Vosti.
    • Climbing: go back climbing. Period.
    • Be more constant with training activities: I won’t say doing triathlon race as last year, but at least running more constantly, going swimming more and some cycling.
  • Blogging and community involvement:
    • Take care of my blog more: Daniela might need to review a bit the design she made for my blog in 2009 but this year I really need to revamp my blog skin. But also try to write more technical post.
    • Subtext and opensource: Subtext is lagging behind other platform, still because of the missing plugin framework. Let’s see if this year it is the right year for this. And I have a project I’m working on that I’d like to release and maintain properly as open-source project.
    • Try to engage more with the Belgian community: I’ll still be in touch with the Italian community, but now I’m living in Belgium, I’m a Belgian MVP and I’d love to contribute to this community as well.
  • Technology:
    • Keep up with ASP.NET MVC: lately, due to all the various other projects, I didn’t stay up to date with the latest features of Microsoft Web Stack, like ASP.NET MVC 3, NuGet, Orchard, WebMatrix an so on. I have to catch up with it, and maybe produce some contents for it.
    • Windows Phone 7: I always thought the mobile is the future of IT: I did an iPhone app in 2008, and now WP7 came. It is much easier for a .NET developer to write app for it. I’ve FeedTso, my feed news reader, coming out soon, and during the year I’d love to constantly enhance its features. And maybe another mobile app or two.
    • Autopilot with Arducopter and Arduino: maybe not going so far and building an autopilot for my RC land yacht, but I’d love to finish assembling my Arducopter (something I already started over the Xmas period) and experiment a bit more with Arduino development and electronics.

Let’s see if I can score 9 GOOD next January.

How was my 2010?

It’s the beginning of the year again, and exactly as last year, on the 13th of January I’m reviewing the year that passed against the my 2010 resolutions, and see how it went.

Who did 2010 go?

Before starting the list I want to add a resolutions that I didn’t disclose with my 2010 resolutions: I wanted to move out of Italy in 2010. And since now I’m living in Belgium I think the biggest goal form 2010 was accomplished. But all the other resolutions where a bit shadowed by the big effort needed to accomplish this goal, before and mainly after the actual move.

  • Personal Resolutions
  • Blogging and community involvement Resolutions
    • Redesign my blog: I developed a few other websites as personal projects (NHDay, Daniela new blog TsoDa, FeedTso) but, as we say in Italy, “the shoemaker childrean walk with broken shoes”, and I had no time to do it for myself. FAIL
    • Write an eBook: I wrote the “What’s new with ASP.NET MVC 2” eBook published by Wrox. GOOD
    • Be more constant in my blogging: I already discussed this in the post with my top 5 posts for 2010, but in short I blogged even less than 2009, but didn’t blog as much as I would have liked to. This seems to be a general trend now in the whole .NET community, where quick info are shared via twitter and not with short blog posts as it was in the past. NEUTRAL
    • Make a better blog: I’m probably taking more time crafting better blog posts, and taking more time into headlines, keyword linking, but haven’t find the time to really apply all the advices from the book 31 Days to Build a Better Blog. FAIL
    • Subtext: and opensource in general. We released three versions of Subtext during 2010, one main release, the one with Lucene.net, one bug-fix release and one to support Medium-Trust. And we also started working on vNext that runs totally on .NET4. And I also got a bit involved with Umbraco. So this year my opensource participation was GOOD.
    • Produce more content in Italian: FAIL. Nothing in Italian except the presentation at the last UGIALT.net conf in January. All my other presentations were in English.
  • Technology/Work Resolutions
    • JavaScript/jQuery/CSS: not really used that things a lot. A bit but not that much, and didn’t even follow the evolution of the technologies and lost a bit of contact. FAIL
    • HTML5: I have a PostIt on my personal kanban board since June, but still haven’t found the time to experiment with it. FAIL
    • Work on public B2C web sites: Yeah, finally, this year I got back to public websites, the Council of EU and the European Council sites. Nothing super fancy, but still, something. GOOD
    • NHibernate: I got a bit more expert in using it, but due to my current job, I alternate period of coding to period more on the management side, and everytime I go back to coding it’s like I have to start from scratch again. But with the help of FluentNH and S#arpArchitecture things are easier. And, still on the NH side, I organized the NHDay, which was the greatest and IMHO most successful conference I ever organized. GOOD
    • Be an agent of change in my team: One of my task here at the Council is redesigning the application development lifecycle and introduce the practices all the cool kids are using. But things move very slowly, so no tangible effect yet. NEUTRAL
  • Unplanned

If I evaluate it on the quantity, I would say that 2010, with 7 FAIL, 2 NEUTRAL and 6 GOOD went pretty bad. But if I evaluate based on the quality, having relocated outside of Italy, and still having achieved 50% of what I planned, I can say 2010 went pretty well.

What’s up for 2011?

This post is already too long... look at my 2011 resolutions.

The registration for the 6th UGIALT.net conf opens tomorrow 11/01/11

As announced around one month ago, the 6th UGIALT.net conference will happen next February 19th in Milano.

6a UgiAlt.NET Conference

Tomorrow morning, 11 January 2011, at 11:11, the registration will be opened.

Last year we sold out all the 160 available tickets in less than two days: cancel all your meetings, set an alarm on Outlook (or you calendar app of choice) and hit the registration site at the right time:

11/01/11 at 11:11

Url

http://ugialtnetconf11.eventbrite.com/

One more thing: a prize will be given to the 11th person registered… yes, we love binary-looking numbers

My wish list for Windows Phone 7

After the first unboxing of my new Samsung Omnia 7 and reporting my comments on WP7 after a few weeks of using it, now I’m writing my wish list on what I’d want in the next updates for WP7.

  • A full fledged Zune for Mac that can synchronize Apps, contacts from Mac’s Address Book
  • A new, better browser that supports HTML5, and doesn’t look like a Windows Mobile 6.5 application.
  • A unified mailbox that groups together all the mailbox I configured
  • Data usage counter
  • A sent notification on outgoing email and SMS. The way iPhone does, with a sound, is great
  • More categorization options for phone numbers, and also groups would be useful
  • Add an option to download email when entering the email application, instead of just relying on push notification or manual sync
  • Add an on screen confirmation for shutting down the device
  • Make it possible to choose what to synchronize with Hotmail
  • Copy&Paste (will come in the next update in February)
  • Make a slightly bigger keyboard or at least less sensitive to accidental misplacements of the finger
  • Fix the MarketPlace search to return only applications when you search for applications (this will come in the next WP7 update)
  • Download all Calendars from Google Calendars, not just the main calendar
  • Redesign the Monthly calendar view: for example, different colors for days with appointments would be much better then tiny unreadable words.

I don’t know if there is an place where I can post my comments so that the WP7 team can read them. I tried on Connect but haven’t found anything about WP7.

If you happen to be in contact with someone of them, just send them the link to this post.

Tags: ,

How to move you posts from Subtext to WordPress

A few weeks ago, I finally finished the migration of Daniela’s old blog to a new domain and a new blogging platform: we moved from Subtext to WordPress.

The reasons of the move

There are two reason behind that move: the big ecosystem around WordPress, and the lack of a real desktop blogging tool on the Mac (combined to the outdated FCKeditor 2 that is used by Subtext).

During the migration Daniela thought about a different Information Architecture of her content spread around in the web, designed and implemented a HTML5 template and later we made it into a Wordpress theme. I’ll write about this experience in a future post, but now I want to focus on who to migrate the contents from Subtext to WordPress.

How to move contents

Exporting from Subtext and importing to WordPress should be easy since both blog engines support BlogML (Subtext natively, WordPress via a plugin), but unfortunately they support it in different way: Subtext, being one of the main advocates of BlogML support all the specs correctly, but this is not true for WordPress, so there are a few intermediate steps to take before you can import the content.

The tools needed

Before you start the process you need to download and install the following tools:

The Process

Step 1: Export posts for Subtext

The first thing to do is getting your posts out of Subtext. This is pretty easy since Subtext natively support BlogML. Logon to your blog admin, go to Options>Import/Export and click on the “Save” button in the “Export to BlogML” section. Un-check the “embed attachment” flag because WordPress will not be able to import the file.

Step 2: Post-Process the BlogML file

Subtext will base64 encode the content of posts to avoid possible problems with encodings, but unfortunately the only BlogML import plugin I found cannot support it, so you have to reconvert it to normal text. Get the Base64 to Plain converter, compile it and run it over your BlogML file. And you will then have a normal plain text BlogML export file.

Step 3: Configure your permalink structure

Whether you are changing domain or not, you have to change the permalink structure if you want to match the format of url in Subtext.

The format you have to specify is:

/archive/%year%/%monthnum%/%day%/%postname%.aspx

Otherwise if you don’t want to keep the .aspx at the end, you can set it the way you prefer, but then you have to import the contents as if you were changing domain.

Step 4: Import your contents

To import your contents you have two options:

  1. BlogML WP plugin: it doesn’t import the name of your categories (you will have to rename them manually after the import) but gives you a nice url rewriting table that you can use if you are changing url or permalink structure for your blog.
  2. Blog Migrator: imports the categories name, but doesn’t give you the old url->new url mapping and require another post-processing step.

I used the first approach because we were also moving domain, but if you are not doing it, and not even changing url structure, using the Blog Migrator will save you a bit (or a lot, depending on how many categories you have) of keystrokes.

Step 4a: Import using BlogML WP plugin

After having installed and activated the plugin, just upload the BlogML file to WordPress, and save the csv file with the url mapping.

Step4b: Import using Blog Migrator

You have to run the imported BlogML file through the Blog Migrator tool, and export it as WXR. And then go to the import section of your WordPress admin and import it as native WordPress export file.

Step 5: Move all your files

If you also changed domain, and don’t want to keep the images you had in your posts in the old location, you also have to copy all your images manually and change all the URLs. Too bad none of the BlogML import plugins can handle attachments, otherwise this would have been done automatically.

Redirecting the old url to the new one

If together with blog engine you also changed url of your blog (like Daniela did, moving from http://tech.piyodesign.it to http://tsoda.eu/) and you don’t want to loose your Google rank and links to you blog old url, you have to setup some kind of redirect.

IIS 7 makes it easy to redirect based on some basic text manipulation rules, but if you need more complicate rules, or if you don’t have access to the IIS configuration, I wrote a small ASP.NET MVC based web application that reads the CVS file exported by the WordPress BlogML importer and issues 301 Permanent redirects to the new location.

The code for this is pretty easy.

Routing

What is important to notice here is the usage of the catch-all route to get all the requests.

routes.MapRoute(
    "Default", 
    "{*url}",
    new { controller = "Home", action = "Redirect" } 

Controller

The action just delegates the retrieval of the new url to the repository and finally sends a Permanent Redirect. Notice the new Url is the new blog root if no match it found.

public ActionResult Redirect(string url)
{
    string newUrl = MvcApplication.MappingService.FindMapping(url);
    Uri redirectTo = new Uri(new Uri(Settings.NewRoot), newUrl);
    return new PermanentRedirectResult(redirectTo.AbsoluteUri);
}

The FindMapping method in the Repository

The following code is pretty easy: just a Linq query over the list of mappings

public string FindMapping(string url)
{
    UrlMapping mapping = _mappings.SingleOrDefault(
        m => m.OldPermalink == url);
    if (mapping == null)
        return String.Empty;
    return mapping.NewPermalink;
}

Loading the CSV

Probably the most “complicate” part of the code.

The CSV file is in format OldPermalink,NewPermalink and it contains just absolute urls.

OldPermalink,NewPermalink
http://tech.piyodesign.it/.../157.aspx,http://www.tsoda.eu/blog/...un-div/

But the matching above is done using just the relative urls, so the loading code has to remove the blog root from the of Urls. (The oldRoot and newRoot variables are stored in the appsettings.

public void LoadMappings(string oldRoot, string newRoot)
{
    string path = HttpContext.Current.Server.MapPath("App_Data");
    string csvPath = Path.Combine(path, "permalinkmap.csv");
    StreamReader streamReader = new StreamReader(csvPath);

    while (!streamReader.EndOfStream)
    {
        string line = streamReader.ReadLine();
        if(line.StartsWith("http://"))
        {
            string[] urls = line.Split(',');
            _mappings.Add(new UrlMapping()
                {
                    OldPermalink = urls[0].Replace(oldRoot,""),
                    NewPermalink = urls[1].Replace(newRoot,"")
                });
        }
    }
}

The PermanentRedirectResult

It’s a custom action result that just sends a permanent redirect back to the browser (or, more importantly, search engine spider).

.NET4 version

If you are lucky to have .NET4 on your server this could be done using the new RedirectPermanent method.

public class PermanentRedirectResult : ActionResult
{
    public string Url { get; set; }

    public PermanentRedirectResult(string url)
    {
        Url = url;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        context.HttpContext.Response.RedirectPermanent(Url);
    }
}
.NET 3.5 version

Or if you are, like me, still on .NET 3.5, the ExecuteResult method has to be changed with the following code:

public override void ExecuteResult(ControllerContext context)
{
    context.HttpContext.Response.Status = "301 Moved Permanently";
    context.HttpContext.Response.AddHeader("Location", Url);
    context.HttpContext.Response.End();
}

Or just download the code

But if you want you can download the complete solution file.

That was it

It took me a while to understand how to complete the migration without spending to much time with coding, and apparently I managed to do it (it took more time to write this post than writing all the code needed for the migration).

I hope not many people will migrate away from Subtext, but in case the need to, I hope this post helps.

Windows Phone 7: my first comments

Update: the first update has been already announced, adding copy & paste (and some other enhancements)

Before Christmas I got my Samsung Omnia 7, and I played a bit with it during the week I spent skiing in Cogne.

Let’s start directly from the conclusion: I really enjoyed using it, the overall UX is great, better than the iPhone, but there are still some details and bugs that need to be fixed, hopefully with the next updates coming in the next months (the first update is already announced).

But I’m not planning to migrate from my iPhone to the WP7 yet, not because of the OS or the device, but because of the lack of the applications I use. I will not put it back into the box: I’ll use it to replace the phone I use with the Italian phone SIM (which I’ll probably use a lot since I’m going to be in Italy a few times in the upcoming months).

And now, the detailed good, not so good, bad analysis.

What is good

  • The new “Metro” UI: I was not that impressed when I looked at the static screenshots, but using it for real is a completely different thing. From an aesthetic stand point, it is very nice, no reflections but just plain colors: I really like the cool and clean look. But it’s with the subtle transitions and animations that WP7 is ahead of the competitors. Microsoft understood that the users have to be entertained, not just given the bare contents.
  • Information architecture. I also like the way information are shown to the user: you can see the contents you need in order to decide whether to stop and dive into the details or keep doing what you were doing. This is true for the built-app but more and more third party apps are following this approach and the development guidelines are pushing in this direction.
  • The hardware button for taking pictures, and it works also when the device is locked.
  • The “unified” contact list. In one place you see all you phone numbers, emails addresses from Outlook/Exchange, Facebook friends, XBox Live contacts and Messenger Contacts. This is good and bad at the same time. Merging all the information coming from different sources is a great idea, but unfortunately the implementation is bad (see below), especially if your main source of contacts is your Mac’s Address Book.
  • SMS text counter: when you write a SMS it tells you how many characters you typed and how many SMS will be sent.
  • Run Under Lock: applications can run even when the device is locked. Very useful for sport trackers.

What is not so good

  • Copy&Paste: it was missing in the first iPhone and now it is missing in the first WP7: but really, not that important. Copy and Paste will be in the first WP7 January update.
  • Applications: there are a bit more then 5000 applications at the time of writing, but they are still nothing compared to the 300.000 applications+ available for the iPhone. I know, Microsoft is moving in the right direction by doing everything the can to help developer build great applications, but until the “big names” (TomTom, Evernote, Skype, Dropbox, Kindle, and similar) are not on WP7, the platform will not be appealing to most of the users.
  • Synchronization with the Mac: You need to use the Zune to synchronize all your data (photo, songs, contacts, video, etc…) with a WP7. Which is not completely bad, if there was a Zune client also for Mac. Ok, there is the WP7 Connector for Mac, but it doesn’t synchronize contacts and apps. If Microsoft doesn’t build a full-fledged Zune client for the Mac, WP7 will not be appealing for Mac users.
  • No unified inbox: if I configure many email addresses, I’d like to have all the new mails in one inbox. And I’d also like to see the overall “unread count” in the live tile: now I have 3 mailboxes in the home screen, one per email address.
  • No "sent" notification: when you send an SMS or an email nothing tell the user the message was sent.
  • Email syncing: emails are downloaded either in push mode or manually. What I'd like is the email downloading process starting as soon as I open the email application (I’m not using the push mode as it drains the battery), while now I have to push the "sync" button, for each email account I have.
  • The keyboard: despite the screen being bigger then the iPhone's, I find myself typing the wrong key a bit too much, and sometimes even pushing the buttons in the appbar.
  • No data usage counter: I don't know how it is in the US, but in Italy and Belgium data plans have a cap. So I'd like to know how many MB I transferred over a period of time. Some carrier have an app for that, but not all have.
  • No "confirm shutdown": when the device is locked, if you keep the "power" button pressed long enough, the device will shutdown. I turned it off accidentally 2 times in 4 days while I was skiing. A "touch" confirmation would have prevented this to happen.
  • Phone number categorization: why just one mobile phone per contact while I can choose between 7 landline numbers? Most of the people I know have a personal and work mobile phone: but the work number is treated as landline, so I cannot send SMS to it. Also, being an expat and working in an international environment, most of my contacts have mobile phones in different countries, so I would like to be able to add new types of phone numbers, like I can do with the iPhone.

What is still bad

  • Email attachments: I guess this is “just” a bug, but a really annoying one. If you receive an email sent from the iPhone and with nothing but images, the images are not shown and cannot be saved. I worked around it by forwarding the email to me.
  • Still some too geeky settings: Microsoft got it right with the general UI concept, but many small things are still showing that sometimes they forget they are building for the end-user and not for a developer or a system engineer.
    For example, what is the difference between System Locale and Region format? I know what it is, but I guess that most of the non developers cannot tell the difference? And even if they could, how many people would want the date format from a country, but the System Locale form another?
  • The Browser: still doesn’t support HTML5, acts very strangely sometimes. Hope they will fix this asap.
  • Synchronization settings: when you setup a remote account, Gmail, Exchange, normal IMAP, Facebook, Hotmail you can set various sync options, but unfortunately you can apply them only after the first synchronization.
  • The unified contact list: as as I said above, great idea, but bad implementation. I don’t want all the 700 “friends” I have on Facebook to show up when I search for a phone number to call, or an email address to add as recipient to a email. There is a flag that should import from Facebook only the friends that are already “contacts” in your phone, but unfortunately it’s affected by the problem I just mentioned, so you have first to setup the sync, wait for the first sync to complete, and then you can set the flag. But at this point the damage is done. If it was supposed to delete the unwanted contacts once the flag is set, it doesn’t work for me.
  • The Live ID is required to connect to the MarketPlace and to XBOX Live, but it is also automatically used to synchronize with your Hotmail account. But unlike Gmail, you cannot choose not to download the contacts, the calendar and various other things. So now I have my “unified contact list” full of garbage since my MSN Messenger account was full of contacts I was not using since ages.
  • Languages: English, French, Spanish, Italian, German are probably the most used languages in the Occidental World, but they are missing languages of great possible markets, like all the Nordic countries, the Baltic ones, and also they are missing Dutch, which, besides being the language of Netherlands, is also the most spoken language in Belgium. And also Portuguese, is the language of Brasil, another huge market. And of course, Japanese and Chinese.

Drawing up some conclusions

For the first time Microsoft didn’t copy (or bought) anything from other companies, but invented something really different, and only time will tell if they were right. Personally I like their approach better then the usual “desktop-inspired” one. But they still have to fine-tune some implementation details to make it really a hit. And to start, I have made a list of precise things I’d like in the next updates of WP7.

And really, they should make the life of non Live and Outlook/Exchange users easier. I’ll write a post in the future about the process to setup your contact list if you are not falling in that category.

Tags: ,