Written by Daniel R.
Last Updated: 10:10 20/08/2026
Where to go from here?
My website is finally taking form! I feel like it has gotten to a point where I can say it actually resembles a real web page. I’m happy with the amount of work I put in and my 2 week craze of obsessively tweaking it has dulled down a little. I’m now thinking about what I would like to do over the summer and where to go from here…
In preparation for third year at UofG we need to read The C Programming Language, an absolute classic which I am quite excited to read. I already started on the first few chapters and am utterly in love with C syntax and style. I love all things lower-level software so I can’t wait to do more than just dip my toes in.
We are also heavily encouraged to undertake a summer project before third year to practice programming and software engineering practices. For my project I am thinking of creating a smart alarm clock app that I can run on the M5Stack CoreS3, a small ESP-32 powered IoT with a display.
The M5Stack CoreS3 development board, includes a touch display, all powered by an esp-32
The idea is to have the alarm wake me up reliably using different kinds of puzzles (e.g. math problems or word puzzles), without needing to go on my phone immediately when I wake up. Of course I could just use a regular alarm clock, but the temptation to just hit snooze a bunch of times is too great and I think this project could be a really good challenge.
The design of the app should follow SOLID principles and be implementation agnostic. This can be achieved using interfaces, where we define what we would like to
achieve and then implement those interfaces concretely for the M5Stack. This kind of approach also lends itself very well to testing, since we can just create mock
implementations of the interfaces to test, without needing to concern ourselves with lower level implementation details. I also like the idea that this follows a
declarative programming style and allows for loose coupling between the app logic and the drivers needed to actually implement the GUI on the device.
As an aid I will be using the lvgl library, which allows for rich and elegant low level embedded GUIs and will save me having to implement a
complete GUI from scratch in C++.
One of the example demos featured on LVGL’s library: a sleek smartwatch watchface.
I should also note I have little experience with C++ so this will definitely be a challenge.