S-1335 clock radio
In July '24 I got into the Flutter framework. I wanted an iOS app and/or PWA to replicate my old clock radio's functionality. I would run it on my old iPhone SE (2016), but in long term supporting other platforms would be essential.
I CAD'd & printed a nightstand for the phone and did a prototype app to test feasibility, which worked out great. I've since released a production quality version found on my GitHub.
A more engaging radio station interface would be nice, but I don't have a clear vision & path for it yet. Also, writing an actual testing suite would be natural next step in internalizing Flutter and testing widgets and GUI layouting automatically.
- Link to clock radio PWA
- GitHub
- Getting into Flutter (and Dart)
- Making and finishing S-1335 clock radio PWA
MSc work
My thesis can be read at Tampere University open repository. I wrote my thesis in Finnish mostly to serve my personal curiosity. For English-speakers, I wrote up about the themes found in my thesis in my journal.
I wanted the topic to both serve my interests in communication and organization and allow me a deep dive into tools and methods that would serve me in my personal projects in the future. Any professional synergy would be a bonus. An avenue that had tickled me from time to time was combining narrative documentation with program code in Knuth's literate style. One thing about my past projects in general was a lack of documentation, and I've been wanting to work on making writing prose a routine. Among other happy accidents, computational notebooks had really sprung into the scene with Jupyter and machine learning, with academic interest peaking from 2018 on. I was curious how notebook interface could be used as part of a modernized literate style. Also, I had been gifted a sports watch, for which needed a local software developed. I decided to combine these elements into a non-sponsored MSc thesis.
I had a good sense that technology-wise Emacs' Org mode and its Babel subsystem would be fit to carry this kind of thesis topic to a satisfactory end. The thesis ended up working well as a vehicle for spending the time to internalize the ideas, methodologies, and limitations imposed by literate programming as done in the 2020s.
The work showed me ways to bridge exploratory amateur and systematic professional software engineering. Ways where I can have a systematic and human approach to documentation and architecture, while keeping the code as the focus and as an integral part of exploring what works. Both are kept up to date and I can return and maintain a project methodically. Narrative documenting while programming allows me to find issues before they present themselves (rubberducking). This extends to other technical activities like setting up computing environments.
My thesis left me with two avenues for further work: working on promising but immature transcluded literate programming workflow and a still more immature thesis software artefact Liikuntakirja.
Transcluded programming
The term transclusion in this context was coined by Ted Nelson in Literary Machines. Transclusion allows mirroring text or other content from other sources to a single document. These windows into an existing codebase can replace in-document nodes of code integral to literate programming. Transclusion both allows a literate programming approach to existing codebases and to refactor a literate codebase with 3rd party tools or IDEs. This way it makes the hard problem of 'detangling' trying to achieve these ends in traditional literate programming moot.
In Org ecosystem org-transclusion allows doing this. I'm currently experimenting with it. It is still immature and has some nasty bugs, but is actively developed. I could see myself doing work on extending it, if I end up using it as a vehicle to get into Emacs/Org programming. The main developer doesn't use the tool for programming, so someone else or me might have to implement a) Regex matching for delimiting windows and b) allowing a window to be opened in an external tool/IDE.
Liikuntakirja
As a limited case study, I produced a program on the Integrated Haskell Platform to parse, save, and show Training Center XML, or TCX, files. These files are produced by a 3rd party local program interfacing with the sports watch. It is fairly simple, roughly in the 1000 LoC class. I used it as a vehicle to learn IHP and Chart.js, and also to work on my HTML/CSS/JS frontend skills, although IHP's Bootstrap integration did most of the work on that side.
My current plans are to use the program as a base for learning Htmx and amending the IHP backend accordingly. Functionally it has mostly everything I need, but a proper frontend would be nice among other polish.
This site
Making this portfolio site was meant to be an exercise in JavaScript plus a static site generator, but I quickly recognized that bare HTML+CSS is more than enough. JavaScript is still used to emphasize current section in ToC. A generator abstraction could help with with blogs, but at this scale it is hardly needed. Blog posts are easily transpiled from Org to HTML and linked by hand.
Systems administration
For over a decade, I've managed GNU/Linux installations non-professionally on laptops, desktops, servers, and phones. I've also had both MacOS and Windows installations present for gaming and using platform-specific software, so all three main PC platforms are familiar to me.
Linux kernel has become somewhat familiar to me, since I must patch it to make my router's WLAN cards see that initiating radiation in 5GHz band is OK in Finland. Slightly related, my name has also ended up in the kernel commit log :-)
3D design and printing
3D printing entered my radar when a range of essentially turnkey printers was released during 2023 by Bambu. I had an interest in making painted sculptures and functional widgets, which made me pull the trigger. My focus has now been on functional prints using Autodesk's Fusion CAD, but I've been dabbling with Blender for organic design to eventually move forward with sculpture design.
- Functional designs (links to CAD screenshots pending a journal)
Paintmaking
Painters have been making their own paints since always. I've been curious about the process of making paints, especially with watercolor paints being expensive for what they are.
Still a project in its initial R&D, I've had fair success with it, but primarily I'm planning to use paintmaking to research how to commercialize a product. Which in turn spills very nicely into photography, 2D/3D work and software development. The artesanal watercolors market is fairly saturated, so differentiating factors are required for any success, of which I have a couple in mind.
Archives
Here are some past projects that reached a level of finality.
Morottaja
Morottaja was a tool to scrape newspaper pages from a local newspaper and used Imagemagick to make a PDF out of them. The newspaper has since been sold and the tool no longer works.
Mallardness
Mallardness was an art project about anonymity, silliness and laconicity. It bootstrapped my photography hobby to great effect. The gallery was also a chance to use a static site generator (Hakyll), which were the bees knees in 2017.
pg4n
At Software Engineering Project 2 course, I took team lead role in developing pg4n which is also available at PyPI. Our client wanted a platform for debugging SQL statements for their students' use.