No native Japanese text in Windows Phone 7 … yet

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.

Now in Tokyo

I’ve moved to Tokyo! Its much bigger than Nagoya 🙂


I’m currently stuck behind a Dynamic IP address so cannot host the site and email from home anymore – I’ve moved the blog to Media Temple and my email to Google Apps.

Avatar Kart update

Finally in playtest on Xbox Indie Games, Avatar Kart now has:

  • 8 CPU racers
  • Avatars sit down and actually steer their cars
  • Race restarting
  • Cool loading animation
  • Drift handling improvements

Done some optimisation to get the framerate to a steady 60FPS, definitely still much more I could do. The floating point performance on the 360’s .NET Compact Framework is pretty dire..

Ed-7  Ed-8

XNA QR Codes

imageI’ve just pieced together a renderer for QR codes that outputs a texture instead of System.Drawing.Image objects (the Xbox .Net Framework version does not have access to the Drawing namespace). I’ll be using this as a way of uploading times on Avatar Kart to my server instead of copying a code which you had to do in Lines, my previous game. I will release the code once I’ve tidied it up a bit.

Avatar Kart – now with avatars!

My Avatar Kart game now has:

  • A skybox
  • An original track
  • a floor for the world
  • Debug and chase cameras
  • A starting countdown

I also finally got Avatars in the code (Xbox 360 only so no videos yet). Microsoft has not decided to release the bones for the avatars, so I cannot do custom animations or poses yet. Therefore they are standing in the karts at the moment…

image image

Symfony – from 1.0 to 1.2

I’ve now had the pleasure of developing two line of business applications using two very contrasting versions of the Symfony framework in PHP/MySQL. Whereas symfony 1.0 allowed you to generate custom CRUD (create, read, update and delete) interfaces by editing simple human-readable config files and overriding simple functions, new symfony 1.2 systems require you to understand badly documented APIs (more on that later), PHP’s OO programming quirks, the exact method call order of the new forms framework and write completely new classes to provide custom filter functionality. 1.1 was an interim version that left in backward compatibility.

Imagine you want to add a custom filter to the standard object lists that require custom joins or subselects on columns not in the object’s table. We want an extra filter called “is_missing_address”:

Symfony 1.0

  • Add “is_missing_address” and boolean type to the list in generator.yml
  • Override the addFilterCriteria() method in the actions.php file to add the custom SQL when the “is_missing_address” filter is active

Symfony 1.2

  • Add “is_missing_address” to the filters list in generator.yml
  • Add the sfWidgetFormChoice() Widget with all the select tag values to the list of Widgets in the Filters form class’s configure() method
  • Add the sfValidatorChoice() class to the list of Validators
  • Override the getValues() method of the filter form to include “is_missing_address” and a custom criteria method name
  • Add a method such as addMissingAddressColumnCriteria() to the filter form class that adds the custom SQL

There are benefits to doing it the 1.2 way once you know what you are doing, but it is extremely complicated before you get your head around it. 1.0 was vastly more accessible partly in due to its amazing documentation.

imageI learnt symfony 1.0 by reading The Definitive Guide to symfony, written by the two lead developers. This was a fantastic book, detailed and simple. It was also clearly written (mainly by Francois Zaninotto) and obviously properly proofread before publishing.

The two lead developers have appeared to have a massive falling out after 1.0 was finished and massive changes brought in. The main author of the book has quit the project entirely after attempting to document the new changes and realising that 1.2 is only powerful and not simple. Simplicity and speed of development is probably the only two reasons anyone would want to use symfony in the first place (and probably PHP) – both of these points have been removed. The new documentation is full of French-lish such as “Softwares” and the homepage has what can only be described as non-native english. I believe parts of 1.0 were written with the documentation in mind (Documentation Driven Development), but 1.2 appears to have been made as powerful as possible, gaining maybe 10% more functionality at the expense of being easy to learn.

You do get what you pay for however, and symfony is free to use. I would not pay to use it when money gets you access to something like ASP.NET MVC now with fantastic MSDN documentation (there are free versions but it still requires a Windows server to host with). The symfony developers offer expensive training workshops – if the framework was still designed with simplicity in mind, you wouldn’t need training workshops or “symfony camps”.

The standard response to negative comments on open source projects appears to be “why don’t you volunteer to fix some bugs or correct some documentation?”. If I did that, it wouldn’t be free now would it?

Avatar Kart work in progress

During my down time I’ve been cracking on with XNA and am developing “Avatar Kart” – essentially Super Mario Kart on the SNES with Xbox avatars (we have to wait until XNA Game Studio 3.1 this summer for avatar support). In a couple of days I’ve managed to finish:

  • CPU Car AI
  • Physics and wall collisions
  • Terrain effects
  • Lap counts and car rankings
  • Split screen

The track is still from SMK and the cars are empty but it does the job. Although its in 3D, I’m trying to get a 2D mode7 type handling feeling, really tight controls and simple graphics. I’ve already hit the performance wall of floating point operations in the compact framework on the Xbox so will need to spend some time optimising later. I will be replacing the Mario Kart track with my own design soon.

Below is a video of how its looking so far:

Fullscreen flashcard program

image I’ve put together the first version of a simple program for displaying flashcards in fullscreen, mainly as an exercise in WPF but also because its damn useful for all sorts of teaching environments. Flash cards are simple text files that anyone can edit – just load them up and hit spacebar to cycle through them. “Big Flash Cards” is now at version 0.1 🙂

It supports Unicode so is perfect for Japanese lessons, for which I designed it. Example flash card files are included – they are very easy to edit and are simple text files. This is a very early version so there will be bugs.


Download Big Flash Cards (117kb zip)

Vista and Windows 7 users: just unzip and run BigFlashCards.exe
Windows XP users: You need at least version 3.0 of the .NET Framework. Download it here.

For those that care, this was developed in Visual Studio C# 2008 solely on a tiny little Dell Mini9 laptop.

“Native” HD MKV playback in Windows 7

Windows 7 has been out for a few days for MSDN members and the public beta is due soon. One of the best new features is native DivX, AVCHD and mp4 video support. With the codec framework completely changed (as explained by Long Zheng here), usual MKV splitters for Windows Media Player no longer work and viewing HD MKV files now definitely requires VLC for now.

image On my travels I found an application called TSMuxer on the doom9 forums – this has the ability to very quickly convert HD video files between formats with no quality loss whatsoever. This works by changing the container formats but keeping the video and audio streams the same.image

The screenshot above shows the settings I used to convert an episode of Heroes into an AVCHD .m2ts file. The process took about 2 minutes and resulted in a file that plays natively in Windows Media Player 12, Windows Media Center and even better – streams and plays in HD to an Xbox 360 Media Center Extender. No stupid codec packs and no dodgy DirectShow filters. Lovely.