My skills in software engineering are based on physics, maths and computer science. They have grown through my experience of working in many diverse sectors and my desire to never stop learning.
Here I will show some of the software I have written over the years in my spare time, like the program that produced the photo mosaic on the left. Roll over it to zoom in.
I worked for two years as a senior Flutter developer, making an algorithmic crypto trading app. To me, Flutter seems to have been very well designed, and I think it guides the developer towards writing cleaner and more solid code. I think it has the potential to become one of the main front-end SDKs, and I look forward to seeing how it evolves.
WaterFX is a library I made for adding water effects to Flutter apps. Wrap any widget with a WaterFXContainer, and it will appear as if it is under water when touched. You will see water ripples moving across the surface of your widget. The image on the right is an embedded Flutter app, using the WaterFX library. Roll over it to see the effect for yourself. This effect can be applied to any Flutter widget; image, video, button, table etc. Touches can be applied by the pointer, the finger, or by code. E.g. you can use code to simulate rain drops falling on your widget.
Flutterbys is a program I made to investigate Flutter animations. This program was very quick and easy to write, especially with the help of the hot reload. I actually wrote it as a desktop app, as the workflow seemed smoother, and then I ported it to the web in five minutes. I am very impressed with how fast Flutter development can be.
Roll over the butterflies to see them fly.
Duosubs is another program I made while experimenting with Flutter. It allows the user to view Youtube videos with subtitles in two languages at the same time. You can scroll through the subtitles and click on them in order to index to a particular point in the video.
This program is similar to the one above but it's for when you only want to use audio. It has a built-in library of audio files. In this app I experimented with Flutter UI animations and custom graphics.
This is a simple audio player for playing podcasts and other audio files on your phone. It is targeted at language learners as it allows them to easily replay difficult sections of the audio at reduced speeds.
This is a game I made in Flutter. It's a remake of an old game, where you have to sort the balls so that each tube only has balls of one colour.
Java is one of my core programming skills, and over the years I have used it to solve thousands of problems facing the business domains I have worked in. I feel that I have left a body of clean and solid code which can be easily understood and extended by others.
Mosaikify is a program I wrote to make photo mosaics. It was written in Java, using the Swing toolkit, and uses complex algorithms to generate mosaics with scattered tile images. I designed the program to be very easy to use, but with advanced options available if needed. I used Mosaikify to make the mosaic at the top of this page. Roll over it to zoom in.
My Language Notebook is another program I wrote in Java, using Swing. It is a notebook to help people learn languages. When you hear a new sentence that you want to remember, you can add it to your notebook. You can categorise, sort and filter your sentences in many different ways. The audio for a sentence can also be added, so that you can practice copying the correct sounds. Sentences are stored in a project which can be exported and shared with others.
Android (Java)
I have about five years of commercial experience with Android, and I really enjoy working with it to make beautiful apps that are useful to people, and that they enjoy using. I feel that my strong knowledge of Java helps to me to write apps that are solid and extensible.
Fidget Flowers is an app I wrote that allows people to relax by creating beautiful moving flower patterns. This program required me to use my knowledge of Java programming, including threading, design patterns and memory management. I also made my own transitions API which is optimised for the requirements of this app, and which required my knowledge of maths.
This video shows a chart component I made while I was exploring different methods of data visualisation in Android. I tap the refresh button a few times to simulate getting some new data.
Kotlin
Kotlin seems to be a nice replacement for Java in Android. I like the simplicity of the language and the way it guides the developer to write safer code. I have used Kotlin in my work, as well as in my own projects.
This is a program I made while experimenting with Kotlin. It's a simple memory game based on Mahjong Solitaire.
HTML / JavaScript
I don't have a great deal of experience in web development but I am always amazed to see the advances in this area, and what can now be achieved within a web browser. I think that HTML, in conjunction with CSS and various scripting languages, are becoming very powerful, and I have written various web apps to investigate this.
I wrote this program to demonstrate the principle of wave superposition. It uses JavaScript to draw onto the HTML5 canvas.
Change the wave characteristics by adjusting the sliders to see how the resultant wave is affected.
Wavelength
Frequency
Amplitude
Wavelength
Frequency
Amplitude
This is another JavaScript program I wrote, to help people practice languages. It is basically a web player for the content
made with my other program My Language Notebook (see above). Hover over the green bulb for instructions.
JavaFX
I have written many programs using JavaFX, both at work and in my spare time, and I find it very enjoyable to work with.
I wrote this program to allow users to examine and manipulate 3D Hydrogen orbital plots.
J2ME
I wrote a number of mobile apps using J2ME. I always found it an enjoyable challenge to find ways of writing apps on devices with such limited speed, memory and APIs.
This video shows a program I wrote called Morrix Cube. It's a 3D Rubik's Cube emulator for J2ME mobile phones. This involved making my own 3D API and required the use of very efficient programming techniques due to the limited resources of J2ME phones.