Amazon PHP SDK v1.4.7 set_region bug for EC2: DNS names not properly resolved

December 3rd, 2011

Version 1.4.7 of the Amazon PHP SDK added the new Oregon region (along with the United States government private GovCloud region) but introduced a bug rendering the whole library useless as it cannot resolve the correct DNS names.

Prior to v1.4.7, the AmazonEC2 library used these constants (in /usr/share/php/AWSSDKforPHP/services/ec2.class.php):

    /*%******************************************************************************************%*/
    // CLASS CONSTANTS

    /**
     * Specify the default queue URL.
     */
    const DEFAULT_URL = 'ec2.amazonaws.com';

    /**
     * Specify the queue URL for the US-East (Northern Virginia) Region.
     */
    const REGION_US_E1 = 'us-east-1';

    /**
     * Specify the queue URL for the US-West (Northern California) Region.
     */
    const REGION_US_W1 = 'us-west-1';

    /**
     * Specify the queue URL for the EU (Ireland) Region.
     */
    const REGION_EU_W1 = 'eu-west-1';

    /**
     * Specify the queue URL for the Asia Pacific (Singapore) Region.
     */
    const REGION_APAC_SE1 = 'ap-southeast-1';

    /**
     * Specify the queue URL for the Asia Pacific (Japan) Region.
     */
    const REGION_APAC_NE1 = 'ap-northeast-1';

And the code used to reconstruct the DNS entry was

    /**
     * This allows you to explicitly sets the region for the service to use.
     *
     * @param string $region (Required) The region to explicitly set. Available options are <REGION_US_E1>, <REGION_US_W1>, <REGION_EU_W1>, or <REGION_APAC_SE1>.
     * @return $this A reference to the current instance.
     */
    public function set_region($region)
    {
        $this->set_hostname('http://ec2.'. $region .'.amazonaws.com');
        return $this;
    }

With the upgrade to v1.4.7, those constants were changed to a FQDN, while the set_region() function was not changed at all:

    /*%******************************************************************************************%*/
    // CLASS CONSTANTS

    /**
     * Specify the queue URL for the United States East (Northern Virginia) Region.
     */
    const REGION_US_E1 = 'ec2.us-east-1.amazonaws.com';

    /**
     * Specify the queue URL for the United States West (Northern California) Region.
     */
    const REGION_US_W1 = 'ec2.us-west-1.amazonaws.com';

    /**
     * Specify the queue URL for the United States West (Oregon) Region.
     */
    const REGION_US_W2 = 'ec2.us-west-2.amazonaws.com';

    /**
     * Specify the queue URL for the Europe West (Ireland) Region.
     */
    const REGION_EU_W1 = 'ec2.eu-west-1.amazonaws.com';

    /**
     * Specify the queue URL for the Asia Pacific Southeast (Singapore) Region.
     */
    const REGION_APAC_SE1 = 'ec2.ap-southeast-1.amazonaws.com';

    /**
     * Specify the queue URL for the Asia Pacific Northeast (Tokyo) Region.
     */
    const REGION_APAC_NE1 = 'ec2.ap-northeast-1.amazonaws.com';

    /**
     * Specify the queue URL for the United States GovCloud Region.
     */
    const REGION_US_GOV1 = 'ec2.us-gov-west-1.amazonaws.com';

So, for instance, if you were using REGION_US_W1 before,
the old SDK would resolve the url to ‘http://ec2.us-west-1.amazonaws.com’ using set_region()

As of v1.4.7, REGION_US_W1 was changed to
‘ec2.us-west-1.amazonaws.com’
so now set_region() builds the url as the non very pretty
‘http://ec2.ec2.us-west-1.amazonaws.com.amazonaws.com’

and triggers this PHP fatal error

PHP Fatal error:  Uncaught exception 'RequestCore_Exception' with message 'cURL resource: Resource id #62; cURL error: Couldn't resolve host 'ec2.ec2.us-west-1.amazonaws.com.amazonaws.com' (6)' in /usr/share/php/AWSSDKforPHP/lib/requestcore/requestcore.class.php:824
Stack trace:
#0/usr/share/php/AWSSDKforPHP/sdk.class.php(1185): RequestCore->send_request()

To fix the error, modify set_region to:

    public function set_region($region)
    {
        //$this->set_hostname('http://ec2.'. $region .'.amazonaws.com');
        $this->set_hostname('http://'.$region);
        return $this;
    }

——————————————————————
Update 12/07/2011:
Version 1.4.8 of the PHP SDK corrects the bug.

Google opens the Google+ API to everyone

September 15th, 2011

Either Facebook picks up their game and start providing a solid reliable platform that works, or it’s ciao bye bye to Facebook’s 30% tax, hello G+ with only 5%…

Greetings developers,

Thank you for showing your interest in the Google+ platform on our developer interest form. We promised to let you know when we had more details to share. Well, that time has come…

Today, we’re launching the first of the Google+ APIs. This initial API release is focused on public data only — it lets you read information that people have shared publicly on Google+. Read our blog post for more details.

Also, we’re happy to introduce a new Google+ developers site. This will be the place to go for our policies, terms, discussions with other developers, access to documentation, tools that make development on the Google+ platform easier and more fun, and of course, the place where announcements concerning new releases will be made.

We’re looking forward to seeing what you build with the API. Today is just the beginning, and your work will affect what comes next, so go ahead and get started.

Happy coding!

- The Google+ platform team

Fukushima Unit 3 Al Fresco, journalists don’t see it, Officials downplay it

April 5th, 2011

The image below speaks for itself: the extent of damages at Unit 3 (left of the photo) are so severe that the spent fuel pools don’t exist anymore, and worse: the reactor must be completely exposed.

Fukushima reactor 3 total destruction - from bottomless.net

Now how come journalists these days cannot do this simple comparison work, and instead of questioning the reports by Tepco and the Japanese government, simply regurgitate blindly what they hear?

Although I can understand that no journalist wants to see things by themselves as the extent of contamination around Fukushima would “definitely” (to paraphrase a Japanese interviewed by the Washington Post saying “Tepco insisted that radiation definitely wasn’t leaking. Tokyo Electric should stop using the word ‘definitely’”) damage their health (but it’s questionable why they wouldn’t do so, war journalists have more balls than that, isn’t it about time a war journalist shows up there for less biased reports?), this kind of homework is not being done enough.
Even less thrown at the face of Tepco to point out how they obviously downplay the seriousness of the accident when a new piece of information shows up, just to acknowledge how bad it was later on.

1/ The Analysis

Here is the detailed analysis.

The image above is composed of 4 images:
- Diagram 1: original diagram of the Mark 1 General Electric reactor building. Image courtesy of GE from this Forbes article.
- Photo 2: original photo of Units 3 (left) and 4 (right) taken by Air Photo Service on March 24th, from this Wall Street Journal article.
- Diagram 3: altered Diagram 1 showing a ladder for scale purpose, so we can estimate how much of the reactor building has be pulverized.
- Photo 4: altered Photo 2 showing the same ladder to scale on both Unit 3 and Unit 4. The distance between 2 steps matches the squares of the concrete building structure.

As the reactor building diagram is from GE, you can hopefully expect it is to be at scale.

The goal here is to evaluate roughly how much of the building is gone.

The explosion on Unit 4 shows the structure of the building, which resembles a mesh with a height of roughly 5 squares.

When moving this ladder to the left to overlay with the more damaged Unit 3, you can see that the top 3 squares are gone.

Now drawing a 5-step ladder on the GE diagram (Diagram 3), we can see that if we were to remove the top 3 steps to the building, not only there would be not spent fuel pool left, but the top of the reactor would be completely exposed.

This seems pretty clear and obvious the damages to the reactor are huge, the whole thing is just in plain air, al fresco.

2/ The Journalists view

According to the New York Times article on the status of the reactors, the explosion damaging Unit 3 occurred on March 14th.

This same article has this entry:

MARCH 17, 9:48 AM
Helicopters make four passes to dump water on the building in an effort to cover the spent fuel, which may have been exposed to the air.

“may have been exposed”. That’s a weak evaluation of the situation.
To the journalists’ defense, our picture above was not available on March 17th.

But that defense doesn’t stand long, here is a picture that was available as early as March 16th from this CNN article:

It’s already obvious Unit 3 is a wreck on March 16th, and the comparison the Unit 4 is already possible: it’s already missing the 3 squares of our green ladder in the first picture.

While I don’t expect journalists to be civil engineering experts nor having nuclear plant building knowledge, I would expect them to bring those photos to the appropriate expert that would be able to point out the extent of the damages.

Then according to the same New York Times article on March 25th:

MARCH 25
Officials say that the reactor vessel may have been damaged. A senior nuclear executive who insisted on anonymity said that there was a long vertical crack running down the side of the vessel.

Couldn’t a mere journalist already realize that looking at the March 16th picture?
Couldn’t Tepco have realized that already?

3/ Incompetence of officials

Note that “Officials” here are just emitting the possibility that the reactor has been damaged.

The possibility should have been acknowledged by officials already back in March 16th from the picture above, and even earlier as the picture may have been taken earlier, or they must have had a visual sooner (by long range camera, helicopter, drone, satellite,…).
March 25th should have been the confirmation that the reactor vessel has been damaged or not as they would have had sufficient time to get a precise visual on the inside of the building (again there are lots of tools: helicopters, drones, satellites, your local psychic …)

The whole story of the accident at Fukushima is full of this lack of information, with officials not spilling the beans and releasing key information slowly in a controlled manner, journalists simply echoing what officials say without really verifying or getting expert advices.

And the overall mentality and way of approaching such a crisis, in the big picture, has been to take only small escalating steps in protecting the citizens, based on the fact they had no information of a core meltdown.
They also had no information of a NON core meltdown! Most of the instruments were damaged in the different blasts (the pictures above obviously show everything in the building wiped out, so you can’t expect any sensors (temperature, pressure, radioactive dose,…) to work or the cables connecting them are just gone.

Basically they were flying blind from the beginning: no information that a meltdown is occurring means no need to evacuate more, not even with such doubt as there was also no information that the meltdown and radioactive releases were happening or not.

What kind of safety measures are that?

If you don’t know enough, you should consider the worst case scenario, not the best cases scenario!

Better safe than sorry no?

4/ “Wait until the building collapses, then get out of it” mentality

In that manner, Fukushima is just a replay of the Three Mile Island accident, where the best case scenario prevailed over the worst case scenario (two redundant indicators were showing opposite readings and the operators decided to trust the optimistic one while it was the pessimistic one that was correct).

The correct approach in any kind of emergency, especially if you lack information, is to assume the worst and act accordingly.

Would you wait until a building completely collapses before getting out of it?
No, you would run out at the first sign of any part of the building collapsing.

That’s what the French did as early as March 17th by evacuating all their citizens as far as Tokyo by not only advising them to leave, but also sending planes to bring them back to France:

“Given the possible evolution of the situation, French citizens in Tokyo are recommended to leave the region for the south of the country or for France,” the foreign ministry said in a statement on its website.

This is showing real caution and it’s what you would expect from your government: to protect you first even at the simple possibility of harm, and not waiting for hard proof and confirmation that real danger is already here.
Then when things calm down, you can decide to go back (or in the case here in Fukushima, not going back to Japan for a while…)

Unfortunately it’s often too late to take action, and you harmed more of your citizens by not taking action, and choosing to believe in the best case scenario first until proof of the contrary.

The Fukushima evacuation zone is still at 20 km (12 miles) only, today Tuesday April 5th… Outrageous!

Even more outrageous when you know the IAEA suggested Japan to widen the exclusion zone back on March 30th!

Good thing Japanese are docile, in the US it would be chaos and gun fights, as in New Orleans for Hurricane Katrina in 2005.

5/ Putting things in perspective

Now let’s go crazy and do a simple comparison.

Little Boy, the atomic bomb that detonated over Hiroshima on August 6th 1945, contained 64 kg (141 lbs) of Uranium, and only 0.6g (0.02 ounces) to 0.8g (0.03 ounces) of this mass was transformed in energy.
Ok, this is according to Wikipedia, I see the critics coming already, so let’s say 100% of the Uranium contained in Little Boy.

Chernobyl: 180,000 kg (180 tons or 360,000 lbs) of Uranium.

Fukushima has around 1,900,000 kg (1,900 tons or around 4,000,00 lbs) of Uranium and Plutonium according to this Scientific American article, that’s 1.9 Million tons or 4 Million pounds!
By the way it’s Unit 3 we’ve been talking about so far, the one with the extremely damaged building, that has the dangerous Plutonium…

Why do you think France estimated the severity of the Fukushima accident at Level 6 (on a scale where the maximum is level 7) as far back as March 15th when Tepco still estimated it at Level 4?

And 3 days later, on March 18th, Tepco raised the severity of the accident to Level 5…

France is the most “nuclearized” country in the world, with 80% of its electricity coming from a nuclear source.
By comparison the US share of nuclear energy is only 20% and Japan is 30%.
So maybe they know a little about nuclear stuff… and if they were wrong, it doesn’t matter, they took the right steps for their citizens: get the f**k out, ask questions later.

How long before Tepco raises the severity to Level 7?

Update 04/11/2011:
Japan finally admits today that Fukushima is at Level 7 (up from Level 5), a level only achieved by Chernobyl in 1986.
Now this scale rates accidents for single reactors only.
As there’s actually 6 reactors in trouble in Fukushima with 4 of them in pretty bad shape, we’re actually witnessing a tragedy several times more serious than Chernobyl (who said 4 times?)

Microsoft Advertising pubCenter dashboard down

March 12th, 2011

Only for maintenance, hopefully it shouldn’t take too long for the service to be restored according to the message:

We’re building a better Microsoft Advertising pubCenter!
We are currently performing site maintenance. All ad units will continue to serve ads normally during this process, but you will not be able to log in.
Service should be restored by Saturday, March 12, 2011 6:00:00 PM. We apologize for the inconvenience and appreciate your patience.
For more information contact us.

Trace dump any object in Actionscript

February 24th, 2011

When debugging Actionscript code you often want to see what’s inside your custom objects.

For instance here is a simple user object:

public class User
{
		public var id:Number = 123456;
		public var name:String = "Valiant Gladiator";

		public function User()
		{
		}
}

A simple trace will not work as it will return only the type of the object:

var u:User = new User;
trace(u);

returns:

[object User]

which is not very informative, while

var u:User = new User;
trace(ObjectUtil.toString(u));

returns:

(user.object::User)#0
id = 123456
name = “Valiant Gladiator”

Here we can see inside the guts of the object with all its members variables listed along with their value.

Bottom line: use ObjectUtil.toString()

When Adobe Flash Builder 4 cannot locate Adobe Flash Player

February 23rd, 2011

After installing the latest Flash Builder 4, ready to launch the app in debug mode, and bang! Flash Builder doesn’t find Flash!

Here is the ominous message:

Flash Builder cannot locate the required version of Adobe Flash Player. You might need to install the Flash Player or reinstall Flash Builder.

Do you want to try to run your application with the current version?

So Flash Builder, the tool used to compile Flash apps, cannot even launch its own result of compilation?

After the usual drill of uninstalling Flash Player and installing it again with all debug flavors of it, the problem is still there.

By the way this process is not trivial, you must:

1/ uninstall Flash Player by running a special tool making sure your web browsers are not running
2/ install the debug flavors you want:

The debug version for IE on Windows:

Download the Windows Flash Player 10.2 ActiveX control content debugger (for IE) (EXE, 2.99MB)

The debug version for Firefox on Windows:

Download the Windows Flash Player 10.2 Plugin content debugger (for Netscape-compatible browsers) (EXE, 2.95MB)

Now you would think after reinstalling Flash Player as suggested in the error message it would work?

No.

The problem arises when you don’t use the HTML wrapper to launch the app.

By default in the Project Properties (Project / Properties / Flex Compiler / HTML wrapper), “Generate HTML wrapper file” is checked.

This mean that when you run the app (or debug it), an HTML wrapper will be created and your default browser (or the one you manually set in Windows / Preferences / General / Web Browser) will be launched pointing to the location of that wrapper.
And most of the time it will work as the Flash Player installation above usually does its job.

But if the “Generate HTML wrapper file” is unchecked, Flash Builder will attempt to launch it without web browsers.
The problem is that it doesn’t even know the path to the Flash Player by default, even though it’s located in one of its own subfolders:
C:\Program Files (x86)\Adobe\Adobe Flash Builder 4\player\win\10.1\FlashPlayerDebugger.exe

The solution is to make sure your .swf files are associated to the debug Flash Player:
1/ In the Windows Explorer, right click on any .swf file you find
2/ “Open with…”, “Choose default program…”, “Browse…”
3/ find your Debug Flash Player, most likely located somewhere in the vicinity of C:\Program Files (x86)\Adobe\Adobe Flash Builder 4\player\win\10.1\FlashPlayerDebugger.exe

Now the error message should be gone and all is fine.

Would that be possible for Flash Builder 4 to try this location by itself?
Or at least write a more meaningful message than reinstalling Flash Player and/or Flash Builder?

Just In: Windows Phone 7 will power the Nokia phones

February 11th, 2011

Microsoft just announced they partnered with Nokia to be their preferred OS.

Symbian is dead!

Here’s the press release:

LONDON – Feb. 11, 2011 – Nokia and Microsoft today announced plans to form a broad strategic partnership that would use their complementary strengths and expertise to create a new global mobile ecosystem.

Nokia and Microsoft intend to jointly create market-leading mobile products and services designed to offer consumers, operators and developers unrivalled choice and opportunity. As each company would focus on its core competencies, the partnership would create the opportunity for rapid time to market execution. Additionally, Nokia and Microsoft plan to work together to integrate key assets and create completely new service offerings, while extending established products and services to new markets.

Under the proposed partnership:


Nokia would adopt Windows Phone as its principal smartphone strategy, innovating on top of the platform in areas such as imaging, where Nokia is a market leader.

Nokia would help drive the future of Windows Phone. Nokia would contribute its expertise on hardware design, language support, and help bring Windows Phone to a larger range of price points, market segments and geographies.

Nokia and Microsoft would closely collaborate on joint marketing initiatives and a shared development roadmap to align on the future evolution of mobile products.

Bing would power Nokia’s search services across Nokia devices and services, giving customers access to Bing’s next generation search capabilities. Microsoft adCenter would provide search advertising services on Nokia’s line of devices and services.

Nokia Maps would be a core part of Microsoft’s mapping services. For example, Maps would be integrated with Microsoft’s Bing search engine and adCenter advertising platform to form a unique local search and advertising experience

Nokia’s extensive operator billing agreements would make it easier for consumers to purchase Nokia Windows Phone services in countries where credit-card use is low.

Microsoft development tools would be used to create applications to run on Nokia Windows Phones, allowing developers to easily leverage the ecosystem’s global reach.

Nokia’s content and application store would be integrated with Microsoft Marketplace for a more compelling consumer experience.
“Today, developers, operators and consumers want compelling mobile products, which include not only the device, but the software, services, applications and customer support that make a great experience,” Stephen Elop, Nokia President and CEO, said at a joint news conference in London. “Nokia and Microsoft will combine our strengths to deliver an ecosystem with unrivalled global reach and scale. It’s now a three-horse race.”

“I am excited about this partnership with Nokia,” said Steven A. Ballmer, Microsoft CEO. “Ecosystems thrive when fueled by speed, innovation and scale.The partnership announced today provides incredible scale, vast expertise in hardware and software innovation and a proven ability to execute.”

——————————————————————

Update 03/28/2011:
Nokia confirmed Symbian is Dead: no more Symbian phones after 2012.
It also raises some questions about the future of Qt since Nokia acquired Trolltech in 2008.

Upgrade to the latest Microsoft Advertising SDK for Windows Phone 7 to avoid application crashes

February 10th, 2011

Microsoft provides an ad control to integrate in Windows Phone applications.

The first version of the SDK, namely 2.1.9130.1 released on Sept.29 2010, has a critical bug that crashes your whole application when the ads are set to auto rotation.

You know you’re affected if your application unexpectedly crashes with an “Element is already the child of another element.” error message:

System.InvalidOperationException was unhandled
  Message=Element is already the child of another element.
  StackTrace:
       at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
       at MS.Internal.XcpImports.Collection_AddValue[T](PresentationFrameworkCollection`1 collection, CValue value)
       at MS.Internal.XcpImports.Collection_AddDependencyObject[T](PresentationFrameworkCollection`1 collection, DependencyObject value)
       at System.Windows.PresentationFrameworkCollection`1.AddDependencyObject(DependencyObject value)
       at System.Windows.Controls.UIElementCollection.AddInternal(UIElement value)
       at System.Windows.PresentationFrameworkCollection`1.Add(UIElement value)
       at Microsoft.Advertising.Mobile.UI.AdFrameManager.CreateNewFrame(FrameworkElement[] controls)
       at Microsoft.Advertising.Mobile.UI.AdFrameManager.DisplayNextFrame(Boolean newAd)
       at Microsoft.Advertising.Mobile.UI.AdFrameManager.ResumeFrameRotation()
       at Microsoft.Advertising.Mobile.UI.AdControl.ActivateAdControl()
       at Microsoft.Advertising.Mobile.UI.AdControl.OnParentSelectionChanged(Object sender, SelectionChangedEventArgs e)

The workaround so far was to disable auto rotation:

xmlns:ad="clr-namespace:Microsoft.Advertising.Mobile.UI;assembly=Microsoft.Advertising.Mobile.UI"

<ad:AdControl AdModel="Contextual" AdUnitId="123" ApplicationId="123456" RotationEnabled="False" />

On December 8th 2010, Microsoft released an update to the SDK, version 2.1.11120.1

This update seems to have fixed the problem and can be downloaded here.

If you’re running ads in your apps on WP7, please do upgrade to the latest version as you may not even be aware of this bug.

Microsoft showed a lack of communication about this update:

1/ The blog post announcing the update doesn’t describe what the update consists of, and which bugs it fixes

2/ The download page does not have any changelog of overview describing what bug fixes and features are included in the update

In contrast, the Windows Phone Developer Tools January 2011 Update download page does have an Overview section summarizing the important changes.

3/ No email or communication was sent to the PubCenter users.

As a PubCenter member I receive updates on how great PubCenter is, that it represents 33.8% of U.S search queries with the partnership with Yahoo! and other communications explaining how to use PubCenter.

4/ No message in the “What’s New” section of the PubCenter advertises the update.

The last message I have from this section dates back to September.

How come, with at least 4 different communication channels listed above, I’m not alerted when something really important happens, like an update to a buggy SDK?

Did I completely miss it?
Or was it an intentional silent update to avoid admitting an embarrassing bug?

A search on “Element is already the child of another element” in the PubCenter forums yields nothing.

The same search on the Windows Phone 7 developer forums returns 2 main threads:

One with a user (Momenta aka Matt Dotson) posting a workaround on December 18th, 10 days after the release of the SDK update, so obviously he was not aware of the update either.

Another thread started on November 16th with user as far as Jan. 23rd posting they encounter the problem before a Microsoft employee (Mark Chamberlain) suggests using the latest Advertising SDK:

Are you folks using the latest Advertising SDK?

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b0f00afc-9709-4cc2-ba2c-57728db6cbd6

I found an internal email thread suggesting that it is the cure for the issue (Element is already the child of another element)

Hope this helps,
Mark

Obviously I was not the only one not knowing about the update.

To the Microsoft Advertising SDK team, could you please be more communicative about your updates and bug fixes?

Developers would greatly appreciate.

——————————————————————

Update 02/11/2011:
MSFT responded favorably to our request for more communication.
Thanks guys for being proactive and listening to your developer community.
MSFT is doing a great job following and supporting their dev community for Windows Phone 7, we’re impressed.

Update 03/24/2011:
Well we’re not impressed anymore: on 02/11 Douglas Robb from Microsoft acknowledged the problem this way:

Thanks for the suggestion. We hear you. Those above me also hear you. When I say ‘those above me’ that means pretty much everybody, so have no fear, the word is out.

And we falsely assumed the next release would be… advertised (pun intended).
It was not: a new version was released on 03/04.
Thanks again to Mark Chamberlain to let the WP7 devs know about it.

We urged them again to correct this situation and hopefully next time have the new release properly advertised.
In the meantime, the only way to tell a new release is out is too… refresh the download page everyday.
Oh so lame in 2011 when they could have used one of those (modern?) communication channels:
- a special email sent just for the release
- the “weekly blog recap” email blast
- “Messages” section of the dashboard
- the pubCenter blog

Even more confusing: Only the XNA version of the SDK was updated, not the Silverlight:

Before installing the latest version (and using the Dec. 08 2010 version):
Microsoft.Advertising.Mobile.UI.dll is at version 2.1.11120.1, filesize 89,912 bytes
Microsoft.Advertising.Mobile.Xna.dll is at version 5.1.0.148, filesize 214,400 bytes

After installing
Microsoft.Advertising.Mobile.UI.dll is at version 2.1.11120.1, filesize 89,912 bytes (NO CHANGE)
Microsoft.Advertising.Mobile.Xna.dll is at version 5.1.0.166, filesize 216,472 bytes

It can be extremely confusing because the download page is now using the version of the XNA DLL and shows 5.1.0.166 as the version number, which is correct for the XNA library only.
Previously this same download page was using the version of the Silverlight DLL (2.1.11120.1) to show the version.

Dear PubCenter, obviously you cannot switch between using the Silverlight version of the DLL and the XNA version.
Either provide 2 different downloads links with their respective version tied to the DLL version and separate the DLLs, or come up with a compounded version number.
Next time you update the Silverlight SDK, your download link will have a version starting in 2.X, don’t you think that will confuse everyone using the latest 5.1.0.166?

Update 03/30/2011:
Microsoft now advertising updates and the changelog.
These are for the Silverlight update of December 8th 2010 and the XNA update of March 4th 2011 (about time to get the changelogs…).
Hopefully next release will be advertised the proper way through different communication channels (blog, emails, newsletter, twitter) along with a much needed changelog.

Update 04/05/2011:
Troy Wood, Portfolio Manager for Windows Phone 7 App Publishers writes:
“Starting with 5.2, both, Silverlight and XNA will use same 5.2.xxxx.y version number.”
Seems the revision problem is fixed for next release.

Using ethtool to determine Ethernet link speed, not mii-tool

February 3rd, 2011

mii-tool is a deprecated tool for checking the link speed of an Ethernet port.

Unfortunately, mii-tool is still distributed by default in the most recent Linux distributions like Ubuntu 10.10 as part of the net-tool package, while ethtool is not!

The main problem is that mii-tool is so old, it doesn’t even support Gigabit Ethernet.

Here is an example on a GigE port:

bash# /sbin/mii-tool
eth0: negotiated 100baseTx-FD, link ok
bash#
bash# /sbin/mii-tool -v
eth0: negotiated 100baseTx-FD, link ok
  product info: vendor 00:aa:00, model 57 rev 0
  basic mode:   autonegotiation enabled
  basic status: autonegotiation complete, link ok
  capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
  advertising:  100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control
  link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
bash#

The ports are reported at 100 Mbps by mii-tool.

And ethtool finds the correct speed: 1000 Mbps:

bash# /sbin/ethtool eth0
Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: umbg
        Wake-on: g
        Current message level: 0x00000003 (3)
        Link detected: yes
bash#

Looking closer at the manpage of mii-tool, it dates back to 2004, and doesn’t list 1000 as a supported media:

MII-TOOL(8) MII-TOOL(8)

NAME
mii-tool – view, manipulate media-independent interface status

SYNOPSIS
mii-tool [-v, --verbose] [-V, --version] [-R, --reset] [-r, --restart] [-w, --watch] [-l, --log] [-A, --advertise=media,...] [-F, --force=media] [interface ...]

DESCRIPTION
This utility checks or sets the status of a network interface’s Media Independent Interface (MII) unit. Most fast ethernet adapters use an MII to autonegotiate link speed and duplex setting.

Most intelligent ne
capabilities. Some
force the MII to operate in one mode, instead of autonegotiating. The -A and -F options are mutually exclusive.

The default short output reports the negotiated link speed and link status for each interface. If an interface or interfaces are not specified on the command line, then mii-tool will check any available interfaces from eth0 through eth7.

OPTIONS
-v, –verbose
Display more detailed MII status information. If used twice, also display raw MII register contents.

-V, –version
Display program version information.

-R, –reset
Reset the MII to its default configuration.

-r, –restart
Restart autonegotiation.

-w, –watch
Watch interface(s) and report changes in link status. The MII interfaces are polled at one second intervals.

-l, –log
Used with -w, records link status changes in the system log instead of printing on standard output.

-F media, –force=media
Disable autonegotiation, and force the MII to either 100baseTx-FD, 100baseTx-HD, 10baseT-FD, or 10baseT-HD operation.

-A media,…, –advertise=media,…
Enable and restart autonegotiation, and advertise only the specified media technologies. Multiple technologies should be separated by commas. Valid media are 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD, and 10baseT-HD.

DIAGNOSTICS
SIOCGMIIPHY on ‘eth?’ failed: Invalid argument
If the interface is not running (up), kernel will refuse to report its link state.

SIOCGMIIPHY on ‘eth?’ failed: Operation not permitted
Most kernels restrict access to root.

SIOCGMIIPHY on ‘eth?’ failed: No such device
This error is shown, if the kernel does not know about the named device.

SIOCGMIIPHY on ‘eth?’ failed: Operation not supported
The interface in question does not support MII queries. Most likely, it does not have MII transceivers, at all.

AUTHORS
David Hinds – dhinds@pcmcia.sourceforge.org
Donald Becker – becker@scyld.com
Bernd Eckenfels – ecki@debian.org

net-tools 2004/03/28 23:30:00 MII-TOOL(8)

Yet mii-tool is still available on some very recent Linux distro like the latest Ubuntu 10.10, while you have to manually install ethtool.

bash# apt-cache search ethtool
ethtool - display or change Ethernet device settings
ifplugd - configuration daemon for ethernet devices
bash#
bash# apt-get install ethtool
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
  dbconfig-common php5-gd libmcrypt4 libt1-5 libgd2-xpm php5-mcrypt wwwconfig-common javascript-common libjs-mootools
Use 'apt-get autoremove' to remove them.
The following NEW packages will be installed:
  ethtool
0 upgraded, 1 newly installed, 0 to remove and 70 not upgraded.
Need to get 76.4kB of archives.
After this operation, 279kB of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com/ubuntu/ maverick/main ethtool amd64 1:2.6.34-2 [76.4kB]
Fetched 76.4kB in 1s (58.0kB/s)
Selecting previously deselected package ethtool.
(Reading database ... 64086 files and directories currently installed.)
Unpacking ethtool (from .../ethtool_1%3a2.6.34-2_amd64.deb) ...
Processing triggers for man-db ...
Setting up ethtool (1:2.6.34-2) ...
bash#

ethtool has also many more interesting options compared to mii-tool:

bash# ethtool -h
ethtool version 2.6.34
Usage:
ethtool DEVNAME Display standard information about device
        ethtool -s|--change DEVNAME     Change generic options
                [ speed %d ]
                [ duplex half|full ]
                [ port tp|aui|bnc|mii|fibre ]
                [ autoneg on|off ]
                [ advertise %x ]
                [ phyad %d ]
                [ xcvr internal|external ]
                [ wol p|u|m|b|a|g|s|d... ]
                [ sopass %x:%x:%x:%x:%x:%x ]
                [ msglvl %d ]
        ethtool -a|--show-pause DEVNAME Show pause options
        ethtool -A|--pause DEVNAME      Set pause options
                [ autoneg on|off ]
                [ rx on|off ]
                [ tx on|off ]
        ethtool -c|--show-coalesce DEVNAME      Show coalesce options
        ethtool -C|--coalesce DEVNAME   Set coalesce options
                [adaptive-rx on|off]
                [adaptive-tx on|off]
                [rx-usecs N]
                [rx-frames N]
                [rx-usecs-irq N]
                [rx-frames-irq N]
                [tx-usecs N]
                [tx-frames N]
                [tx-usecs-irq N]
                [tx-frames-irq N]
                [stats-block-usecs N]
                [pkt-rate-low N]
                [rx-usecs-low N]
                [rx-frames-low N]
                [tx-usecs-low N]
                [tx-frames-low N]
                [pkt-rate-high N]
                [rx-usecs-high N]
                [rx-frames-high N]
                [tx-usecs-high N]
                [tx-frames-high N]
                [sample-interval N]
        ethtool -g|--show-ring DEVNAME  Query RX/TX ring parameters
        ethtool -G|--set-ring DEVNAME   Set RX/TX ring parameters
                [ rx N ]
                [ rx-mini N ]
                [ rx-jumbo N ]
                [ tx N ]
        ethtool -k|--show-offload DEVNAME       Get protocol offload information
        ethtool -K|--offload DEVNAME    Set protocol offload
                [ rx on|off ]
                [ tx on|off ]
                [ sg on|off ]
                [ tso on|off ]
                [ ufo on|off ]
                [ gso on|off ]
                [ gro on|off ]
                [ lro on|off ]
                [ ntuple on|off ]
                [ rxhash on|off ]
        ethtool -i|--driver DEVNAME     Show driver information
        ethtool -d|--register-dump DEVNAME      Do a register dump
                [ raw on|off ]
                [ file FILENAME ]
        ethtool -e|--eeprom-dump DEVNAME        Do a EEPROM dump
                [ raw on|off ]
                [ offset N ]
                [ length N ]
        ethtool -E|--change-eeprom DEVNAME      Change bytes in device EEPROM
                [ magic N ]
                [ offset N ]
                [ length N ]
                [ value N ]
        ethtool -r|--negotiate DEVNAME  Restart N-WAY negotation
        ethtool -p|--identify DEVNAME   Show visible port identification (e.g. blinking)
               [ TIME-IN-SECONDS ]
        ethtool -t|--test DEVNAME       Execute adapter self test
               [ online | offline ]
        ethtool -S|--statistics DEVNAME Show adapter statistics
        ethtool -n|--show-nfc DEVNAME   Show Rx network flow classificationoptions
                [ rx-flow-hash tcp4|udp4|ah4|sctp4|tcp6|udp6|ah6|sctp6 ]
        ethtool -f|--flash DEVNAME      FILENAME Flash firmware image from the specified file to a region on the device
               [ REGION-NUMBER-TO-FLASH ]
        ethtool -N|--config-nfc DEVNAME Configure Rx network flow classification options
                [ rx-flow-hash tcp4|udp4|ah4|sctp4|tcp6|udp6|ah6|sctp6 m|v|t|s|d|f|n|r... ]
        ethtool -U|--config-ntuple DEVNAME      Configure Rx ntuple filters and actions
               [ fl
        ethtool -u|--show-ntuple DEVNAME        Get Rx ntuple filters and actions

        ethtool -h|--help               Show this help
bash#

And its manpage:

ETHTOOL(8)

NAME
ethtool - Display or change ethernet card settings

SYNOPSIS
ethtool ethX

ethtool -h|--help

ethtool -a|--show-pause ethX

ethtool -A|--pause ethX [autoneg on|off] [rx on|off] [tx on|off]

ethtool -c|--show-coalesce ethX

ethtool -C|--coales
usecs-low N] [tx-frames-low N] [pkt-rate-high N] [rx-usecs-high N] [rx-frames-high N] [tx-usecs-high N] [tx-frames-high N] [sample-interval N]

ethtool -g|--show-ring ethX

ethtool -G|--set-ring ethX [rx N] [rx-mini N] [rx-jumbo N] [tx N]

ethtool -i|--driver ethX

ethtool -d|--register-dump ethX [raw on|off] [hex on|off] [file name]

ethtool -e|--eeprom-dump ethX [raw on|off] [offset N] [length N]

ethtool -E|--change-eeprom ethX [magic N] [offset N] [length N] [value N]

ethtool -k|--show-offload ethX

ethtool -K|--offload ethX [rx on|off] [tx on|off] [sg on|off] [tso on|off] [ufo on|off] [gso on|off] [gro on|off] [lro on|off] [rxhash on|off]

ethtool -p|--identify ethX [N]

ethtool -r|--negotiate ethX

ethtool -S|--statistics ethX

ethtool -t|--test ethX [offline|online]

ethtool -s ethX speed N [duplex half|full] [port tp|aui|bnc|mii] [autoneg on|off] [advertise N] [phyad N] [xcvr internal|external] [wol p|u|m|b|a|g|s|d...] [sopass xx:yy:zz:aa:bb:cc] [msglvl N]

ethtool -n ethX [rx-flow-hash tcp4|udp4|ah4|sctp4|tcp6|udp6|ah6|sctp6]

ethtool -N ethX [rx-flow-hash tcp4|udp4|ah4|sctp4|tcp6|udp6|ah6|sctp6 m|v|t|s|d|f|n|r...]

ethtool -f|--flash ethX FILE [N]

ethtool -u|--show-ntuple ethX

ethtool -U|--config-
[action queue or drop]

DESCRIPTION
ethtool is used for querying settings of an ethernet device and changing them.

ethX is the name of the ethernet device on which ethtool should operate.

OPTIONS
ethtool with a single argument specifying the device name prints current settings of the specified device.

-h --help
Shows a short help message.

-a --show-pause
Queries the specified ethernet device for pause parameter information.

-A --pause
Changes the pause parameters of the specified ethernet device.

autoneg on|off
Specifies whether pause autonegotiation should be enabled.

rx on|off
Specifies whether RX pause should be enabled.

tx on|off
Specifies whether TX pause should be enabled.

-c --show-coalesce
Queries the specified ethernet device for coalescing information.

-C --coalesce
Changes the coalescing settings of the specified ethernet device.

-g --show-ring
Queries the specified ethernet device for rx/tx ring parameter information.

-G --set-ring
Changes the rx/tx ring parameters of the specified ethernet device.

rx N Changes the number of ring entries for the Rx ring.

rx-mini N
Changes the number of ring entries for the Rx Mini ring.

rx-jumbo N
Changes the number of ring entries for the Rx Jumbo ring.

tx N Changes the number of ring entries for the Tx ring.

-i --driver
Queries the specified ethernet device for associated driver information.

-d --register-dump
Retrieves and
tents of previous raw register dump, rather than reading from the device.

-e --eeprom-dump

-E --change-eeprom
If value is s
of the EEPROM. Because of the persistent nature of writing to the EEPROM, a device-specific magic key must be specified to prevent the accidental writing to the EEPROM.

-k --show-offload
Queries the specified ethernet device for offload information.

-K --offload
Changes the offload parameters of the specified ethernet device.

rx on|off
Specifies whether RX checksumming should be enabled.

tx on|off
Specifies whether TX checksumming should be enabled.

sg on|off
Specifies whether scatter-gather should be enabled.

tso on|off
Specifies whether TCP segmentation offload should be enabled.

ufo on|off
Specifies whether UDP fragmentation offload should be enabled

gso on|off
Specifies whether generic segmentation offload should be enabled

gro on|off
Specifies whether generic receive offload should be enabled

lro on|off
Specifies whether large receive offload should be enabled

rxhash on|off
Specifies whether receive hashing offload should be enabled

-p --identify
Initiates adapter-specific action intended to enable an operator to easily identify the adapter by sight. Typically this involves blinking one or more LEDs on the specific ethernet port.

N Length of time to perform phys-id, in seconds.

-r --negotiate
Restarts auto-negotiation on the specified ethernet device, if auto-negotiation is enabled.

-S --statistics
Queries the specified ethernet device for NIC- and driver-specific statistics.

-t --test
Executes adapter selftest on the specified ethernet device. Possible test modes are:

offline|online
defines test type: offline (default) means to perform full set of tests possibly causing normal operation interruption during the tests, online means to perform limited set of tests do not interrupting normal adapter operation.

-s --change
Allows changing some or all settings of the specified ethernet device. All following options only apply if -s was specified.

speed N
Set speed in Mb/s. ethtool with just the device name as an argument will show you the supported device speeds.

duplex half|full
Sets full or half duplex mode.

port tp|aui|bnc|mii
Selects device port.

autoneg on|off
Specifies whether autonegotiation should be enabled. Autonegotiation is enabled by deafult, but in some network devices may have trouble with it, so you can disable it if really necessary.

advertise N
Sets the speed and duplex advertised by autonegotiation. The argument is a hexidecimal value using one or a combination of the following values:
0x001 10 Half
0x002 10 Full
0x004 100 Half
0x008 100 Full
0x010 1000 Half(not supported by IEEE standards)
0x020 1000 Full
0x8000 2500 Full(not supported by IEEE standards)
0x1000 10000 Full
0x03F Auto

phyad N
PHY address.

xcvr internal|external
Selects transceiver type. Currently only internal and external can be specified, in the future further types might be added.

wol p|u|m|b|a|g|s|d...
Sets Wake-on-LAN options. Not all devices support this. The argument to this option is a string of characters specifying which options to enable.
p Wake on phy activity
u Wake on unicast messages
m Wake on multicast messages
b Wake on broadcast messages
a Wake on ARP
g Wake on MagicPacket(tm)
s Enable SecureOn(tm) password for MagicPacket(tm)
d Disable (wake on nothing). This option clears all previous options.

sopass xx:yy:zz:aa:bb:cc
Sets the SecureOn(tm) password. The argument to this option must be 6 bytes in ethernet MAC hex format (xx:yy:zz:aa:bb:cc).

msglvl N
Sets the driver message level. Meanings differ per driver.

-n --show-nfc
Retrieves the receive network flow classification configurations.

rx-flow-hash tcp4|udp4|ah4|sctp4|tcp6|udp6|ah6|sctp6
Retrieves the hash options for the specified network traffic type.
tcp4 TCP over IPv4
udp4 UDP over IPv4
ah4 IPSEC AH/ESP over IPv4
sctp4 SCTP over IPv4
tcp6 TCP over IPv6
udp6 UDP over IPv6
ah6 IPSEC AH/ESP over IPv6
sctp6 SCTP over IPv6

-N --config-nfc
Configures the receive network flow classification.

rx-flow-hash tcp4|udp4|ah4|sctp4|tcp6|udp6|ah6|sctp6 m|v|t|s|d|f|n|r...
Configures the hash options for the specified network traffic type.
m Hash on the Layer 2 destination address of the rx packet.
v Hash on the VLAN tag of the rx packet.
t Hash on the Layer 3 protocol field of the rx packet.
s Hash on the IP source address of the rx packet.
d Hash on the IP destination address of the rx packet.
f Hash on bytes 0 and 1 of the Layer 4 header of the rx packet.
n Hash on bytes 2 and 3 of the Layer 4 header of the rx packet.
r Discard all packets of this flow type. When this option is set, all other options are ignored.

-f --flash FILE
Flash firmware image from the specified file to a region on the adapter. By default this will flash all the regions on the adapter.

N A number to identify flash region where the image should be flashed. Default region is 0 which denotes all regions in the flash.

-u --show-ntuple
Get Rx ntuple filters and actions, then display them to the user.

-U --config-ntuple
Configure Rx ntuple filters and actions

flow-type tcp4|udp4|sctp4
tcp4 TCP over IPv4
udp4 UDP over IPv4
sctp4 SCTP over IPv4

src-ip addr
Includes the source IP address, specified in hex.

src-ip-mask mask
Specify a mask for the source IP address, specified in hex.

dst-ip addr
Includes the destination IP address, specified in hex.

dst-ip-mask mask
Specify a mask for the destination IP address, specified in hex.

src-port port
Includes the source port, specified in decimal.

src-port-mask mask
Specify a mask for the source port, specified in hex.

dst-port port
Includes the destination port, specified in decimal.

dst-port-mask mask
Specify a mask for the destination port, specified in hex.

vlan VLAN-tag
Includes the VLAN tag, specified in hex.

vlan-mask mask
Specify a mask for the VLAN tag, specified in hex.

user-def data
Includes 64-bits of user-specific data, specified in hex.

user-def-mask mask
Specify a mask for the user-specific data, specified in hex.

action N
Specifies either the Rx queue to send packets to, or to drop the matched flow.
-1 Drop the matched flow
0 or higher Rx queue to route the flow

BUGS
Not supported (in part or whole) on all ethernet drivers.

AUTHOR
ethtool was written by David Miller.

Modifications by Jeff Garzik, Tim Hockin, Jakub Jelinek, Andre Majorel, Eli Kupermann, Scott Feldman, Andi Kleen.

AVAILABILITY
ethtool is available over the Web on the SourceForge site at http://sourceforge.net/projects/gkernel/

Ethtool version 6 July 2007

Hey Ubuntu, why not remove mii-tool as it's misleading?

If it's there for compatibility reasons, why not also ship your releases with ethtool too?

And also someone should update the mii-tool manpage to specify it's deprecated and replaced by ethtool.

It's so weird I found an old mii-tool manpage from 2000 and it does state mii-tool is obsoleted and refers to ethtool, citing it in the SEE ALSO section of the manpage:

MII-TOOL(8) MII-TOOL(8)

NAME
mii-tool - view, manipulate media-independent interface status

SYNOPSIS
mii-tool [-v, --verbose] [-V, --version] [-R, --reset] [-r, --restart] [-w, --watch] [-l, --log] [-A, --advertise=media,...] [-F, --force=media] [interface ...]

NOTE
This program is obsolete. Valid media are only 100baseT4, 100baseTx-FD,100baseTx-HD, 10baseT-FD and 10baseT-HD ethernet cards. For replacement check ethtool.

DESCRIPTION
This utility checks or sets the status of a network interfaceâs Media Independent Interface (MII) unit. Most fast ethernet adapters use an MII to autonegotiate link speed and
duplex setting.

Most intelligent network devices use an autonegotiation protocol to communicate what media technologies they support, and then select the fastest mutually supported media technol-
ogy. The -A or --advertise options can be used to tell the MII to only advertise a subset of its capabilities. Some passive devices, such as single-speed hubs, are unable to
autonegotiate. To handle such devices, the MII protocol also allows for establishing a link by simply detecting either a 10baseT or 100baseT link beat. The -F or --force options
can be used to force the MII to operate in one mode, instead of autonegotiating. The -A and -F options are mutually exclusive.

The default short output reports the negotiated link speed and link status for each interface. If an interface or interfaces are not specified on the command line, then mii-tool
will check any available interfaces from eth0 through eth7.

OPTIONS
-v, --verbose
Display more detailed MII status information. If used twice, also display raw MII register contents.

-V, --version
Display program version information.

-R, --reset
Reset the MII to its default configuration.

-r, --restart
Restart autonegotiation.

-w, --watch
Watch interface(s) and report changes in link status. The MII interfaces are polled at one second intervals.

-l, --log
Used with -w, records link status changes in the system log instead of printing on standard output.

-F media, --force=media
Disable autonegotiation, and force the MII to either 100baseTx-FD, 100baseTx-HD, 10baseT-FD, or 10baseT-HD operation.

-A media,..., --advertise=media,...
Enable and restart autonegotiation, and advertise only the specified media technologies. Multiple technologies should be separated by commas. Valid media are 100baseT4,
100baseTx-FD, 100baseTx-HD, 10baseT-FD, and 10baseT-HD.

SEE ALSO
ethtool(8)

AUTHORS
David Hinds - dhinds@pcmcia.sourceforge.org
Donald Becker - becker@scyld.com

net-tools 2000/04/25 22:58:19 MII-TOOL(8)

The 2000 version of the manpage explicitly mentions:
"This program is obsolete. For replacement check ethtool." in the NOTE section, and the SEE ALSO section refers to ethtool.

However the 2004 version doesn't have any of these mentions (see above).

Why was it removed in 2004?

A user experience of switching from iPhone to Windows Phone 7

February 3rd, 2011

Being an iPhone customer since 2008 with the 3G version, I switched to the new Microsoft Windows Phone 7 (WP7) last year.

Here are a few comparison points to make up your mind if you want to switch.

With the new Windows Phone update due anytime now, the shortcomings of the WP7 may be solved soon, or at least we hope.

Overall WP7 is a great product but still behind the competition, and we hope that MSFT, by throwing its whole weight in the battle, will bridge the gap soon.

Features like copy paste are supposed to be introduced in this latest update.
Although not a killer feature (I must have used it only a couple of times within a year on the iPhone), it’s a powerful marketing weapon Apple bigots will throw at any platform that doesn’t support it (“what? your phone doesn’t even have copy-paste? you’re so lame”).
It’s not something you really need, but it’s something that will make your phone retarded if you don’t have it.

The iPhone is still a superior product, but Apple itself made me switch as soon as I upgraded the poor 3G to iOS 4.0.
The whole thing was unusable.
The 3G was already not a speed daemon, but after the upgrade it was slow as hell (pun intended).
I literally had to wait 20 to 30 seconds for the settings page to show.
An eternity in the computer-science-user-patience scale.

How could a big manufacturer like Apple release an update that:
1/ made all the old devices so slow they were rendered unusable?
2/ does not warn the customers beforehand it will render older hardware slow?
3/ prevents you from downgrading to revert to a usable device?

(I guess we all know the answer: the goal was to sell newer versions of the device.)

Anyway, here are the pros and cons of Windows Phone.

1/ WP7: The Good

  • Boots fast: nothing compared to sluggish iPhone 3G
  • Syncs fast: synchronization is faster than the iPhone on iTunes to the point I always wonder if the sync did really happen
  • the screen is bigger (4 inches on the Samsung Focus vs 3.5 inches) than an iPhone 3G or even an iPhone 4
  • Lighter: the difference is very noticeable when both held in hands with the iPhone 4 much heavier (4.8oz) feeling like a brick while the Samsung Focus is only 4oz.
  • You can take picture with the phone locked
    No need to enter your password, press the picture button and you can take a picture. No need to waste time entering your password and missing the picture you wanted to take.
    Although for this feature to be totally useful it should be consistent and popup the camera all the time.
    There’s a bug where sometimes you can keep your finger pressed on the camera button for minutes and the camera doesn’t show up…

  • Applications can offer a trial mode, so you can test an app before buying it.
    This would be great if you could actually update the Trial apps! (see “The Bad” below)

  • Integration of all your contacts pulled from your different email addresses (gmail, yahoo, hotmail) and facebook and in one single address book. This is very powerful.
  • You can hear people on the other end of the line! Pretty amazing for a telephone no?
    But the iPhone speakers are so low you cannot have a normal conversation in a place a little noisy like on the street, in a restaurant,…
    I always wonder how construction workers can have an iPhone as you can’t hear anything.

  • Black is black.
    The black parts of the screen are actually real black and not backlit grey.
    The iPhone 4 is probably much better than the 3G in this area and more comparable to the WP7.

    1/ WP7: The Bad

    1.1 Major features missing

  • NO visual voicemail!
    On the iPhone your voicemails are downloaded and you can see them visually like email.
    At one glance you can tell how many messages you have, which ones you haven’t listened to, who left them, and you can replay a particular one easily without having to go sequentially through all of them.
    With WP7 your back to the old ages: you only know you have a voicemail waiting. You still need to dial a number that will walk you sequentially through all the voicemail and type the appropriate key to skip/delete/archive,…
    Worse: when buying the WP7, the AT&T representative didn’t warn us of that, so they even forgot to switch their backend from visual voicemail to regular voicemail, resulting in a voicemail outage I wasn’t aware of for several days.

  • Copy Paste
    To MSFT’s defence the upcoming update will come with copy pasting.

  • No support for reading MPEG videos
    Trying to read a simple MPEG video in Internet Explorer yields this error message:
    “Can’t download file! Windows Phone doesn’t support .MPG files.”

  • No support for Adobe Flash
    So it’s a draw with the iPhone4

  • No support for reading Silverlight
    This is much more amazing: Silverlight is Microsoft’s equivalent of Adobe Flash.
    Yet they don’t support it on their own phone so you can’t browse a website written in Silverlight. Go figure.

    1.2 Major bugs, Microsoft style

  • the Marketplace (the Microsoft equivalent of the App Store) is awfully unstable, to the point that it crashes, and it crashes big time.
    Meaning once it has crashed, you cannot bring it back up again anymore: your only option is to reboot the phone!

  • the Trial applications cannot be updated!
    There is a major bug on the platform where people who bought a Trial application cannot update it (cf this forum thread).
    Worse: if the user tries to uninstall the current version he has in the hope of getting the latest one, the update will not get downloaded so the user is left with nothing, not even the old version of the app!

  • the Ads crash the applications: provided by Microsoft themselves with PubCenter you would expect something stable, yet there’s a serious bug that crashes your app when the ads are automatically rotating.

    Here is a stack trace of the “Element is already the child of another element.” crash caused by the ads:

    System.InvalidOperationException was unhandled
      Message=Element is already the child of another element.
      StackTrace:
           at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
           at MS.Internal.XcpImports.Collection_AddValue[T](PresentationFrameworkCollection`1 collection, CValue value)
           at MS.Internal.XcpImports.Collection_AddDependencyObject[T](PresentationFrameworkCollection`1 collection, DependencyObject value)
           at System.Windows.PresentationFrameworkCollection`1.AddDependencyObject(DependencyObject value)
           at System.Windows.Controls.UIElementCollection.AddInternal(UIElement value)
           at System.Windows.PresentationFrameworkCollection`1.Add(UIElement value)
           at Microsoft.Advertising.Mobile.UI.AdFrameManager.CreateNewFrame(FrameworkElement[] controls)
           at Microsoft.Advertising.Mobile.UI.AdFrameManager.DisplayNextFrame(Boolean newAd)
           at Microsoft.Advertising.Mobile.UI.AdFrameManager.ResumeFrameRotation()
           at Microsoft.Advertising.Mobile.UI.AdControl.ActivateAdControl()
           at Microsoft.Advertising.Mobile.UI.AdControl.OnParentSelectionChanged(Object sender, SelectionChangedEventArgs e)
    
  • The Internet Explorer Browser is a joke.

    First, it can’t handle big files (big being only 130k). When browsing a simple html text file, some parts will be completely missing and not rendered!
    Tilting the phone from Portrait to Landscape will make the missing text appear.
    What an annoying bug when reading news and long text article or eBooks.

    Second, you cannot go back if you get out of IE. The history is not persistent so you can lose it easily.
    For instance you’re checking out where you will be dining tonight from a site that points to different places.
    You select one, get out of IE to check your Google Bing map, go back to IE and bam! you cannot go back to the original list of restaurants (so you better like your first pick)

    1.3 Annoying things

  • the Marketplace is slow (the caching mechanism seems inexistent or inefficient)
    That’s a serious problem that MSFT discarded as marginal when I contacted them. Probably by now they realized how widespread it is and the upcoming release will fix it?

  • the phone call list in one giant list with outgoing, incoming and missed calls.
    You cannot easily filter to show only the missed calls or outgoing calls for instance.

  • the camera does not remember your settings.
    Set your settings the way you want on the camera:
    - AF mode (Normal, Macro)
    - White balance (Automatic, Incandescent, Fluorescent, Daylight, Cloudy)
    - Image effect (Negative, Sepia, Antique, Green, Blue)
    - Contrast (Minimum, Low, Medium, High, Maximum)
    - Saturation (Minimum, Low, Medium, High, Maximum)
    - Sharpness (Minimum, Low, Medium, High, Maximum)
    - EV (-2, -1, 0, +1, +2)
    - ISO (Auto, 50, 100, 200, 400, 800)
    - Metering (Matrix, Center Weighted, Spot)
    - Photo Quality (Low, Medium, High)
    - Wide Dynamic Range (Off, On)
    - Photo Resolution (VGA 640×480, 2M 1600×1200, 3M 2048×1536, 5M 2560×1920)
    - Anti-Shaking (Off, On)
    That’s a lot of settings right?
    Well, you will lose those settings if you close the camera application. Ouch!
    I wonder why they even bothered adding a “Restore to default” button at the bottom then.
    The Windows Phone camera doesn’t remember your settings, plain awful.

  • the keypad is mute, not making any noise when dialing the numbers. It feels weird when you’re not used to the sound feedback and there’s no option to turn it on.
  • same for the headsets: they are not ringing for incoming calls, so you can easily miss calls if you’re driving.
  • the alarm cannot be stopped easily if you don’t catch it right away before the screen blanks again within 10 seconds.
    If you miss this spot (probably frequent when waking up in the morning), you’re punished by having to first hit the power button to get out of screen saving mode then find the “dismiss” button (by that time you really need to have your eyes open and able to focus).
    Why not being able to stop the alarm by pressing any button like on the iPhone? That’s enough of a proof you’re awake.
    The alarm also doesn’t vibrate when in vibrate mode, strange.

    1.4 Device specific problems: the Samsung Focus SGH-i917

  • Opposed physical buttons:
    The power button and the volume button are on opposite sides of the phone, at the exact same place.
    This means when you press the power button, you most likely change the volume at the same time
    And worse, the opposite: changing the volume might well lock your phone (or reboot it it you click too long!)
    Looking at other phone designs I don’t see many putting button opposite of each other like this.
    This is not Samsung’s first phone, what were they thinking?

  • The touch screen doesn’t work when the phone is on a table.
    Put your Samsung on the table and just use your finger to play with the touch screen. Sometimes it will work, but most of the time it doesn’t.
    Could that be a hand detection feature that forces you to hold the phone? Or maybe the phone thinks you’re holding it at the ear.
    Either way, that’s a very bad user experience.
    The proof it’s a bug? Leave the phone as it is, just reboot it, and the touch screen will work fine… for a few minutes until the bug appears again.

  • The 3 soft buttons at the bottom of the screen (Back, Home and Search) are too sensitive. You can easily activate them with a normal phone grip.
    If the fatty/muscular part of your hand between the thumb and the palm is too big, you’re in trouble. Luckily I have thin hands, but the problem annoys me already!

  • The keyboard is not as precise as the iPhone. Apple still has superior finger detection and is more precise when typing.

    3/ The Ugly

    Switching from a 2-year old iPhone 3G to a brand new Samsung 3G phone, I expected the signal quality to be better, hoping the advance in technology would make the 3G chipsets better.

    It turns out there was absolutely no improvement.

    Wherever I had bad signals and calls dropping with the iPhone were exactly at the same places as with the new WP7.

    Conclusion: it’s definitely not the device, it’s the network. Hear that AT&T?