Michael's Projects

This page gives an overview of some projects I realized, either as part of my university education, privately and just for fun, or for a company.

Contents Contact Information

2020 PAndemiC MAN - A Browser/Android Game. PAC-MAN goes shopping during a pandemic

Have you noticed that grocery shopping during a pandemic is a bit like playing PAC-MAN?

You collect items as you make your way through a maze while trying to stay away from other shoppers who may sneeze or cough and unleash the virus. Avoid the virus to stay healthy or fight it with disinfectant.

Play the game in the browser (no installation required)
Or get it for Android

2019-2020 Grünober Suchen - An AI-based card game for Android

In this project I used Tensorflow and Python to have a neural network teach itself to play a card game. The process started by analyzing the outcome of random moves, and progressed to having multiple neural networks compete against each other to select the best network and produce more training data for the next round. In the end they were able to beat even my father ;)

Then I implemented the game for Android where you can play against the AI opponents with different levels of difficulty. No worries, you can also play using the familiar French cards.

Get the game for Android on Google Play

How to play: English Deutsch (German)

Read my article about this project in "Towards Data Science":
Teaching a Neural Network to Play Cards

2018-2019 Training a Neural Network to pick consumer loans on LendingClub while controlling risk

I used Tensorflow to train a neural network to evaluate consumer loans offered on the crowd lending platform Lending Club. In my backtesting, the results outperformed random selection by a very large margin (see image).

In the end I actually deployed my model on pythonanywhere, from where it would call Lending Club's API to pull loan information and invest real money. This resuled in a rate of return upwards of 9%. Unfortunately, Lending Club doesn't offer this type of investment any more.

Read my article about this project in "Towards Data Science":
Intelligent Loan Selection for Peer-to-Peer Lending

2017-2018 AnnaLyza - A low-cost USB-based 2-port Vector Network Analyzer

AnnaLyza VNA is a low-cost USB-based 2-port Vector Network Analyzer / Antenna Analyzer for the 2.4 GHz ISM band. The frequency range is 2200 to 2700 MHz.

It comes with a Java application that allows full two-port SOLT calibration and includes a matching circuit editor that allows you to see in real time how the S11 and S22 measurements would change by adding a matching circuit.

Go to the project's homepage for more information.

2005 Sizzle - Securing the Embedded Internet

wireless sensors
Wireless sensors hosting a secure web server

During my internship at Sun Microsystems Laboratories I worked on a project to securely connect wireless sensor devices to the Internet. We developed a tiny HTTPS (HTTP over SSL) server, nicknamed "Sizzle", that can run in the very constrained environment of wireless sensor devices. The resulting HTTPS server, including a sample application, has a code size of 50KB and requires only 4KB RAM. It supports unsecured connections as well as secured connections with key exchanges based on RSA or Elliptic Curve Cryptography and works with all common web browsers.

To connect the wireless sensors to the Internet, one of them is attached to a personal computer and acts as a gateway between the sensors within reach and the Internet. TCP/IP connections to the gateway computer are translated to a less complex wireless protocol which is optimized for low energy consumption. Even though the TCP/IP connection ends at the gateway the communication layers above are not affected and the security provided by SSL is end-to-end (from the browser to the wireless device).

My master's thesis and one of Sun's technical reports go into detail and also present an analysis of the performance and energy consumption.

Download publications

2003 uClinux for Sparc-MMUless with Ethernet MAC

XSV800 board
I got uClinux with networking running on this board

In a System-on-Chip project, a group of students at my university combined a SPARC processor core with an ethernet MAC and synthesized the result for the XSV800 board (see picture). Amongst other things this board contains a Xilinx Virtex FPGA and an Ethernet PHY. The system worked using the RTEMS operating system and the Lightweight IP Stack.

My task was to improve a uClinux (Linux for microcontrollers) port and to get it to run on this platform. A port already existed, working on a SPARC simulator, at least through the boot process, but once in the shell it was not possible to start any programs. The result of my efforts is a number of patches for the SPARC port of uClinux, making it possible to invoke programs from the shell and to use the network interface. Working programs include ping and the telnet server telnetd.

Go to the project's homepage for more information.

2001 The PingPong Programming Language

0;>\"`2%°\     /     01-emirP#/<\6N*.)
   @     \1#/->/1+"'"\        \./
            \2°°/>%^`/        #
                \01-emirP$ on /
Example PingPong program that checks if a number is a prime

The PingPong programming language is a two-dimensional esoteric programming language, strongly influenced by Befunge. I took a look at Befunge and I got inspired. Here I have to say that PingPong is not actually useful for anything other than ... — well, it's not actually useful for anything at all. But it's fun.

PingPong is an interpreted language where every character in the source code is an instruction. The instruction pointer moves through the code in one of four directions (up, down, left, right), while special instructions can change the direction of execution. Those instructions look and act like pingpong rackets ("_", "|", "\", "/") and the instruction pointer bounces off from them in a different direction.

I wrote the interpreter and a debugger with graphical user interface in Java. The software and some example programs are available for download.

Go to the project's homepage.

2004 Internet Radio using the DS80C400 Microcontroller

DS80C400 evaluation board
My DS80C400 evaluation board works as an Internet radio receiver in a demo application

This project started as an evaluation board for the DS80C400 microcontroller from Maxim (formerly Dallas Semiconductors). The DS80C400 is a mutant 8051 with some 32-bit instructions, and a whole lot of peripherals included, like an Ethernet MAC. What my university professor wanted was something to make old devices, which just have a serial interface, controllable over the Internet.

Already knowing the MP3 decoder VS1001K from a different project, I simply had to build an MP3 Internet radio receiver. Of course the resulting system also fulfilled the requirements of my professor...

Learn more

2002-2004 MP3 Player with Hard Drive

MP3 player front view
MP3 player with hard disk

This monster slowly evolved from a simple main board I built to play with an 80C188 processor. I had my own bus system with a big ribbon cable. Then I built something to interface an LCD and keys, and later I finally knew what I didn't want: To have my PC running all the time when I was listening to MP3s. I wanted something to put on top of my stereo. The logical step was to build another peripheral board with an MP3 decoder and an IDE interface to connect a hard disk. And to write a lot of code.

The first version was as big as a VCR, and you had to physically remove the hard drive to copy files to it. But after a while I redesigned everything and got it on a single board, mostly because all that discrete logic from the old peripheral boards neatly fits into a single tiny CPLD. The new version now supports infrared remote controls and you can access it using USB like any other mass storage device.

Learn more (parts of the pages are still under construction)

2005-2006 Alarm Clock with Wake-Up-Guarantee

top side of alarm clock circuit
Late-riser-proof alarm clock

This project resulted from my difficulties getting up in the morning. I used to have two or three alarm clocks to be safe, but this was not the solution I liked.

So I remembered this old idea about an alarm clock that makes you do something before the alarm can be switched off. My implementation requires you to remember a sequence of five digits, ranging from 1 to 3. Then you have to type this sequence within a few seconds using the three buttons of the clock. If you don't succeed the alarm continues and you have to try again.

I built the hardware around an MSP430 microcontroller from Texas Instruments with an integrated LCD driver...

Learn more

2007 Other Stuff

Other stuff I did (list is likely to grow)...

Contact

Feel free to contact me when you have questions, suggestions, or a job to offer.

© 2007, Michael Wurm.