Windows
No native Japanese text in Windows Phone 7 … yet
Mar 16th
The first preview version of the Windows Phone 7 SDK is out and it doesn’t support Japanese (or non-Latin) text in the English ROM. This is a huge disappointment.
One of the major advantages the iPhone has over almost every other smartphone platform (and the major reason I bought mine in the first place – I needed Japanese language support) is the built in support for non-Latin languages and their input methods. This allows Apple to provide one single worldwide firmware edition.
Previous versions of Windows Mobile have required users to hack in Japanese fonts using the registry and rely on some awful third party hacks to get Japanese IMEs working. I seriously hope that before WP7 is finished, Microsoft just install worldwide fonts and IMEs like they started to do with Vista. There is no excuse. We are unlikely to get low-level access to the registry this time around to hack the support in ourselves to non-Japanese ROMs.
One of their slides is supposed to imply that the Metro theme “Celebrates Typography” –
– more like it totally ignores it. I suppose screens of square boxes fits the “Authentically Digital” principle.
Vista net problems? Disable auto-tuning
May 5th
I have been having a problem where I would get “This page cannot be displayed” errors the first time I tried to access a website. The odd thing was that hitting Refresh would solve the problem and I would get through to the site immediately. At first, I thought it was a DNS problem due to the Internet Connection Sharing setup, but turns out it is Vista messing around with the net connection with a process called “Receive Window Auto-Tuning” (this alters the size of the packets on your network based on network conditions).
To turn this off, fire up an elevated command prompt window and type in “netsh interface tcp set global autotuninglevel=disabled” without the quotes. This solved all the problems I was having with my net connection in Vista SP1. Strange.
XNA2.0 Dependency checking
Feb 23rd
After a lot of trial and error using Process Monitor and Virtual PC, I have finally sussed out exactly what XNA2.0 games on Windows need to run. The requirements are slightly different to XNA 1 games.
Direct X runtimes
There are four files that need to be installed in the system32 folder for XNA to initialise properly. They are:
- xinput1_3.dll
- x3daudio1_3.dll
- d3dx9_31.dll, and
- xactengine2_9.dll
The first three can be placed alongside the application exe and then load fine, but xactengine2_9.dll does not load this way for some reason, and has to be present in the system directory. Distributing these files alongside the application breaks the DirectX EULA, so they have to be installed using dxsetup.exe.
To check the presence in your XNA game, just put this code in Program.cs before game.Run() is called:
bool HasAllPrereqs = true;
// check all the required files, if any missing, return false if (!System.IO.File.Exists(System.Environment.SystemDirectory + "\\xactengine2_9.dll")) HasAllPrereqs = false; if (!System.IO.File.Exists(System.Environment.SystemDirectory + "\\d3dx9_31.dll")) HasAllPrereqs = false; if (!System.IO.File.Exists(System.Environment.SystemDirectory + "\\x3daudio1_2.dll")) HasAllPrereqs = false; if (!System.IO.File.Exists(System.Environment.SystemDirectory + "\\xinput1_3.dll")) HasAllPrereqs = false;
If HasAllPrereqs is false after those lines, exit the application before it crashes horribly when XNA tries to initialise.
Visual C++ 2005 SP1 runtimes
Even a fresh Vista install doesn’t have these. They are provided when updating Visual Studio 2005 to SP1, or installing SP1 of the .Net Framework 2.0. However, Vista comes with SP0 of .Net 2.0, meaning 99% of machines you come across will be lacking what XNA 2.0 needs. There is a 2.5MB standalone installer on the MS download site here which installs what you need even on .Net 2.0 SP0 machines. .Net 3.5 installs Net 2.0 SP1.
So if any of the following are installed, we safely have the right Visual C++ 2005 runtimes:
- .NET Framework 2.0 SP1
- .NET Framework 3.5
- Visual C++ 2005 SP1 Redistributable
By looking up the product codes in the registry, we can also check at runtime if we have the runtimes (again, before game.Run()):
[DllImport("msi.dll")] public static extern Int32 MsiQueryProductState(string szProduct);
…goes before the main application entry point, and
bool vccOK = false; // check for VC++ 2005 SP1 redist (very rare in the wild) if (MsiQueryProductState( "{7299052b-02a4-4627-81f2-1818da5d550d}") == 5) vccOK = true; // check for .NET Framework 2.0 SP1 if (MsiQueryProductState( "{2FC099BD-AC9B-33EB-809C-D332E1B27C40}") == 5) vccOK = true; // check for .NET Framework 3.5 (includes 2.0 SP1) if (MsiQueryProductState( "{B508B3F1-A24A-32C0-B310-85786919EF28}") == 5) vccOK = true;
If vccOK is still false, exit the application before you call game.Run().
Taskbar invisible over Remote Desktop
Dec 18th
I frequently use Remote Desktop (RDP/Terminal Services) to access my machines running Vista SP1 RTM. 90% of the time, after connecting, I get this annoying problem with the Start bar:
Only the Start button itself is visible.
- This happens on all my Vista machines, both SP0 and SP1
- This happens no matter what version of Remote Desktop I am using, the XP version or the “new” Vista one
- It only appears to happen when the computer was originally using the Aero DWM composition engine and originally in a different resolution to what I am asking the Remote Desktop session to render
- It happens wether or not the taskbar is at the top or bottom of the screen
So far the only way to get the taskbar back I have found is to click the lonely Start button, click Windows Security, choose Start Task Manager, kill the explorer.exe process and start it again in the Task Manager from File > Run.
Subsequent Remote Desktop connections are then fine, but logging back into the machine from the console then back into Remote Desktop makes it disappear again. A bit frustrating, to say the least.
Windows Live ID Return URL banned words
Sep 19th
UPDATE: No need to do this now, its fixed!
For edngames.com I use Facebook, Yahoo! and Windows Live as sign on solutions. However, Windows Live is the only system with a restriction on the domain names you can register. For instance, because of the word “games” in my domain, I get the error message “The Return URL field contains a forbidden word or domain. Please use a different Return URL and enter the HIP solution again.”
Facebook and Yahoo, competing single sign on solutions, do not have this restriction, which the word “game” I assume is to block gambling sites from the authentication.
To get around this, I have had to set up a dummy domain (edslife.co.uk) without the banned words and perform authentication on that – you cannot simply do a redirect because the signature returned by the Windows Live server will be invalid because its a different return URL. I then have to create my own authentication (I use a hash function based on the time and a secret word) to move between the dummy domain to the real one securely.
Although this works, and is just as secure as authenticating on the target site I reckon, it provides a pretty shoddy user experience because I have to explain that there is another domain name involved. You also cannot use this method to get data from the Windows Live server such as contact information because from a different domain, the authentication is invalid.
