Phillip Trelford's Array

POKE 36879,255

Silverlight Resurrection

Silverlight, once hailed by Microsoft evangelists, is now dead, crucified by the side of Flash by Jobs when he brought down his tablets from mountain view, and then buried by Sinofsky under his surfaces. But is it really dead? Silverlight certainly seems dead in the browser with Google cutting off support in Chrome followed by Microsoft in Edge. Yet Silverlight still lives on in Windows Phone and Windows Store (formerly Windows Runtime, formerly Metro).


Back in 2010 and 2011 I made a series of mini games written in F# with Silverlight and hosted on this blog along with some online arcade sites likes GameJolt and SilverArcade. Rather than let them slide into the sands of time never to be played again I thought I’d have a go at resurrecting them for Windows Phone.

Search for a stable… environment

I started by attempting to create a Windows Phone project in my shiny new installation of Visual Studio 2015 Community, but failed at the first hurdle. To run the Windows Phone emulator you need the Professional version of Windows and silly old me had installed the Standard edition when I rebuilt my Windows partition after a fatal blue screen in the new year.

Then I moved on and tried trusty Visual Studio 2013 but hit the same hurdle. Not to be deterred I went back another year to Visual Studio 2012 but hit a new obstacle, where the 2012 tools don’t work if you have 2013 installed.

Back to the Future

No problem, I span up a virtual machine in Oracle’s Virtual Box with ye old faithful Windows 7 and Visual Studio 2010 installed, and after pushing on VS2010 SP1 and the Windows Phone tools, then some obligatory rebooting and service patches, I was up and running and had a game ported and playing on the emulator. I used a Windows Phone project template from Dan Mohl, which requires an empty C# host project because CLR stands for Common C# Language Runtime apparently. My only remaining issue was that running the phone emulator within a VM was painful. My next step was to purchase dedicated hardware in the form of a refurbished Thinkpad (circa 2010) from Morgan Computers and I finally had a stable environment with an emulator for porting the apps and games over (although no option to deploy to a device as the Zune software is no longer supported).

Lenovo /IBM X201 Intel i5-520M 2.4GHz 12.1

Across the Universe

Microsoft are currently touting the Universal Windows Platform as the future, letting you easily deploy your apps between Windows 10 Phone, Store and other platforms. That said with Visual Studio 2010 I can target the entire Windows Phone range from 7 up to 10, note that number 9 went missing somewhere along the way.

Also note the Windows Phone 7 market currently appears to be almost as “large” as Windows 10 Mobile.

Alien Resurrection

The first game I ported over was Invadurz, a homage to a classic 80s arcade game. It’s available in the Windows Store and I’ve recently upgraded it with low-latency sound effect support via XNA.


And despite the screen shot being the wrong way round a few people have even downloaded it Smile


With a simple and stable porting system in place I quickly submitted another 4 apps and games, all available free in the store:


With some experience under my belt I recently headed down to London to the Windows App London meetup (previously the Windows Phone user group) for the Submit it! hackathon, and during the day I managed 5 submissions:

and won an Easter Egg from Tesco for my efforts!

Second Coming

Just as in the bible, a second coming is in the offing. XNA is dead, long live MonoGame.

I’m currently working on moving the Windows Phone submissions lock stock and barrel over to XNA which should give me a route to full cross platform resurrection via MonoGame with deployment to Android, iOS and beyond…

CNUG6LkWwAAlpuJ.png (433×242)

and many more users, or at least that’s the theory.

Procedural Invaders

Procedural invaders are space invader like characters generated as 5 x 5 pixel characters from just 15 bits using symmetry. The earliest post on procedural invaders appears to be from a J Tarbell in 2003. Thanks go to Ross McKinlay for suggesting having a look.

Below are some sheets of randomly generated invaders with generated names that you can click on to generate a tweet with F# code that generates the invader as ASCII art when sent to Mathias Brandewinder’s @fsibot.

invaders ocodehkiauoyemixuoocuucenotiyofecalepergucjucjoxnoxebatigzuyanitiereypunefegaajusaacorgipciguweejeqemaulaiborruxuvawedayamgasihhedlorifuaelioixejqabexiqiiboquaiwazavvijuzapbuiouxompoqqesonteuitocijwuwtalmufefuysurbuwpujxorroirajjokijgobfibqeejiokusiporixxokajavgolcoqeloooviwemisaguxovegnujepfequpeuaiutoazeleinijtirqenqaesiozawufafuaavexuzumiupomrijeeqipokeeaumehmooezuxixifihohaicebyezboiniokamugucar



Techie bit

The sheets of invaders are drawn on to a bitmap image and saved as a png file (see invader bitmap generation F# snippet), with the bit pattern for each invader generated from the hash code of it’s generated name (see pseudoword generation F# snippet). At the same time a matching HTML image-map is generated with the coordinates of each invader with a link that generates a tweet for the specified name.


MSDNify Types

Following on from yesterday’s post on Disinherited Types where I implement an F# type provider that hides inherited members of a type to let you focus on the useful members. The example was the WPF Button control which contains around 300 members via 9 levels of inheritance and appears to flout the object-oriented principle of composition over inheritance.

Microsoft’s MSDN documentation takes another approach to the problem of making relevant members discoverable by grouping members by type, i.e. all properties, all methods, all fields and all events:

Button class docs

MSDNify Type Provider

To give the same discoverable experience in the editor I’ve created the MSDNify Type Provider that groups members by type:

Button by member type

From the filtered member type groups you can select the member you are interested in:

Button events

This in effect mirrors the MSDN docs making it easier to find the useful members.

Source Code

The implementation is very similar to the Disinherited Type Provider discussed in yesterday’s post.

The code is available on GitHub: