Skip to main content
Marek Fořt

Finite Automata Editor App

As my undergraduate years at FIT CTU in Prague are coming to an end, I am publishing the Finite Automata Editor app and the bachelor thesis that was written alongside it. You can find quick videos showcasing its most basic functionality below 👇

Automata Editor App Demo

Automata Editor Live Demo

What's the app about #

The app is, as the name suggests, an editor for finite automata. There are already existing automata editors out there but one thing they lack is ease of use. That is why I have opted to build an app for iPad that will resemble the experience of drawing finite automata on regular paper as much as possible - while bringing additional features like easy simulation of input to make it even better than drawing on a regular piece of paper.

How? #

This has been a very interesting app to write because it combines the power of PencilKit and CoreML. I have first had to write a custom machine learning model to recognize automata shapes (states, transitions, and cycles). After integrating the CoreML model, I have had to integrate ALT library for simulating the input for a given automaton. This library is developed at FIT CTU and is written in C++ - this meant writing Objective-C++ wrappers and then Swift wrappers, so it could be used in the iOS app. Afterwards, I have started working on the canvas using SwiftUI and the Composable Architecture. Choosing these technologies made it really fun to write the app - and I believe it has also made it easier ✨

Additional Reading #

This post is only a quick overview - I go down into the nitty-gritty details in my thesis that you can download from here. You can also check out the app here. I do plan to publish it on the App Store but there are some minor improvements I want to make before doing so - I can send you an invite to TestFlight if you are interested, though. You can either send me a DM on Twitter or send me an email. If you want to check out the ML model, you can do so here.

I'd also appreciate any feedback and thanks for reading!