Tom Taylor - Software Engineer

Lorenz SZ40 App

Lorenz SZ40 App

This app is a full port of my desktop Lorenz SZ40 Cipher Machine application to the Android platform.

This is one of the first hobby app projects that I actually placed onto the marketplace, monitised and got great feedback on.

Technologies used

  • Languages: Java
  • Framework: Android Studio
  • Deployment: Google Play Store
  • Source Control: GitHub

Why port this to mobile?

In my portfolio I have outlined that, as a university project, I recreated the Lorenz SZ40 Cipher Machine in C++.

I enjoyed this so much that I have used it as my own personal 'Hello, world' project when learning new technologies. I tend to recreate it in the language and tooling that I am trying to pick up at the time.

I wrote this app as a continuation of this. When I landed my first role in the industry, as an app developer, I wanted to learn how to write good and clean Java code... Well, as good and clean as Java will allow you to write!

Additional features

The original desktop C++ application offered a variety of features, most of them via command line switches and without a GUI. This product expands on this some more.

  • File system interaction: In the paid version of the app, you are able to import/export text generated via the simulation for later. It also includes pin information so that anyone else can import your encrypted text and read it on another device.
  • Simulation speed: Because modern hardware is extremely fast compared to computing of the World War II era, encryption and decryption is lightning fast. This app allows you to slow it down so you can see the machine working in realtime as it processes your text.
  • Android OS features: The app makes good use of the Android platform, offering features such as integration with the 'Share' mechanism, as well as locking the app and your saved exports behind biometric authentication.

Lessons learned

  • Threading and performance: Mobile devices are generally low powered and multi-core. To get good, efficient performance out of them, you must leverage threading.
  • Android intricacies: Android development is a bit of a minefield. You must account for the fact that are thousands of devices out there, all with different aspect ratio screens and Android variants.
  • App store presence: Placing an app on the app store can be a complicated affair, from the various privacy policy/terms and conditions rules, app screenshots, legal forms. This project taught me all of these important lessons.
  • App monitisation: This app is free to download, but has a paid mode. The paid mode unlocks more features. Learning how to implement in-app-purchases was interesting and this app has earned me (a little) money, and my customers were very happy!