Creating a Windows Based Installer

I'm working on a project for a client that has some strange requirements. Firstly it must be cross platform, and must have access to the USB Port. This has led to some interesting decisions in the design of the projectm such as the choice of Python for rapid development, easy access to usb through pyusb and ablity to produce cross platform software. Python has some great modules for creating stand-alone executeables from python scripts. The other great thing about using Python and pyusb is that it uses libusb which is avaliable on all the platforms I need my software to run on. Although it has some difficulties such as getting the program to install on windows for a person with no technical knowledge. After a few days searching and thinking about the options I stumbled across Inno Script.

Inno Script supports all versions of windows which is an added bonus for my stand-alone executeable. And combined with the great IDE Inno Script Studio is simple to use. I created an installer for the project for the x86_64 build in under an hour with little instruction because the IDE makes it so intuitive to use. It was as simple as selecting the files to move to the program files folder and then building the resultant Installer with the click of a button and then ready for distribution.

So if you need to create an installer for windows I highly recommend Inno Script.

UCS2 Encoding and Sim Cards

Over the summer I was asked to create a tool for work that involved UCS2 Character conversion. This would normally be fine however 3GPP TS 11.11 says that there are a possibility of 3 coding schemes. All 3 have different uses, however initially they were difficult to comprhend. In this article I'm going to breifly explain 2 of the different coding schemes.

Coding Scheme 1

Octet 1 Octet 2 Octet 3 Octet 4 Octet 5 Octet 6 Octet 7 Octet 8 Octet 9
0x80Char 1 MSBChar 1 LSB Char 2 MSBChar 2 LSB Char 3 MSBChar 3 LSB 0xFF0xFF

All unused octets must be set to '0xFF'. This is the simplist form for the encoding however takes the most space.

Coding Scheme 2

Octet 1 Octet 2 Octet 3 Octet 4 Octet 5 Octet 6 Octet 7 Octet 8 Octet 9
0x810x050x13 0x530x95 0xA60xXX 0xFF0xFF

As with coding scheme 1 all unused octets must be set to '0xFF'. Octet 2 is the length of the string. Octet 3 is the base pointer, if any of the characters have their most significant bit set high then the ME will take in to account the base pointer.

In the above example octet 4 is 0x53 ('S') which looks like 0b01010011 note that the most significant bit is low so the base pointer is not used. The others are Bengali letters.

About Me

I'm a 3rd year Computer Systems Engineering student at Bangor University, my interests are embedded systems, operating system development, hardware design and software engineering.

I currently work part time for a Sim Card Provider in North Wales and have worked on several projects for them, from sim card applet development through to the development of tools to ease that development.

For my third year dissertation I am looking at what performance gains you get from incorporating a hardware encryption module in a microprocessor over a software implementation of the same algorithm. The hardware module is being interfaced with Altera's NIOS II core.

My favourite languages to work in are:

  • Java
  • C
  • Python
  • Ruby
  • VHDL

My favourite hardware architectures to use are:

Rapid Prototyping:

  • mbed


  • Atmel AVR
  • TI MSP430
  • STMicroelectronics STM32 Series

Check out my github and linked in.