Console #136 -- Interview with Jussi of Heimer - a mind map, diagram, and note-taking tool
Featuring Forma, apk.sh, and Heimer
🤝 Sponsor
This space is reserved for sponsors that support us to keep the newsletter going! Want to support Console? Send us a note at osh@codesee.io
🏗️ Projects
Browse through open source projects on OpenSourceHub.io, add your project to get more exposure and connect with other maintainers and contributors!
👾 Forma
A (thoroughly) parallelized experimental Rust vector-graphics renderer with both a software (CPU) and hardware (GPU).
language: Rust, stars: 1309, issues: 15, last commit: 1 day
repo: github.com/google/forma
📱apk.sh
apk.sh makes reverse engineering Android apps easier, automating some repetitive tasks like pulling, decoding, rebuilding and patching an APK.
language: Shell, stars: 1148, issues: 0, last commit: 4 days
repo: github.com/ax/apk.sh
✍️ Heimer
Heimer is a simple cross-platform mind map, diagram, and note-taking tool written in Qt.
language: C++, stars: 711, issues: 47, last commit: 5 days
repo: github.com/juzzlin/Heimer
Join thousands of other open-source enthusiasts and developers in the Open Source Hub Discord server to continue the discussion on the projects in this week's email!
🎙️ Interview With Jussi of Heimer - a mind map, diagram, and note-taking tool
Hey Jussi! Thanks for joining us! Let us start with your background. Where are you from, where have you worked in the past, how did you learn to program, and what languages or frameworks do you like?
I was born in Tampere, Finland and that’s where I am located. I graduated from Tampere University of Technology in 2006 with a master’s degree.
I started coding with my friends when I was 13 or 14 and we mostly used BASIC back then. A couple of years later I studied C++ (this was in 1997) and wrote some games with it. I still have that book on my shelf.
Fast forward to 2022 and I still like to write in C++. However, during my career I have also played a web developer and currently work on a C#/.NET project. As I work as a professional SW consultant, there’s not much that I don’t know **anything** of.
I’m the most familiar with C++, JS/TS, Python, C#, Java.
C++ will still always be my favorite language and I take it as my “mother tongue”. The modern C++ is very different to the pre-C++98 that I started with.
When it comes to operating systems I have been a Linux guy since Red Hat 7.3 was released. I don’t remember the year, but it was a long time ago. Nowadays I’m not as fanatic anymore and think that Windows 10 is pretty ok to work with. However, I have only Ubuntu machines at home and also the Windows version of Heimer is cross-compiled in a Docker container.
Who or what are your biggest influences as a developer?
My colleagues from different companies I have worked for during the years. I have worked together with so many amazing developers and talents that makes you feel like a junior developer.
What’s your most controversial programming opinion?
Not sure if that’s controversial, but we cannot solve problems just by inventing new languages and frameworks all the time. We already have tools and libraries that work. People don’t seem to understand that there are applications with a longer life cycle than two months.
Also, I don’t like the mindset that everything must be web-based these days even though a good old desktop application would be easier to develop and maintain. What happened to real programming?
What is your favorite software tool?
Git. Life would be very sad without Git.
If I gave you $10 million to invest in one thing right now, where would you put it?
I would invest in the stocks I already own. I would also very likely stop my professional career and work only on my open source projects.
Why was Heimer started?
I felt that I needed a tool to help me understand and memorize large and complex codebases written by customers. Heimer was supposed to be written in “a couple of weeks”, but it soon got out of hand. I was also in need of a new pet project.
How does Heimer work?
Heimer is a mind-mapping tool where the user creates textual nodes and easily connects them together to create a mind-map.
I decided to use the “legacy” QGraphicsScene / QGraphicsView -based approach to draw and manipulate items. I have always liked the paradigm and it’s also very efficient. QtQuick is nice, but I thought back then that it could be a bit complicated to create an application like Heimer with it.
Basically the application just visualizes a graph that’s saved in a custom XML format together with the used style settings. The user may set a background image for individual nodes and this image data also gets embedded in .ALZ. This is something that I’m going to develop further.
Why did you pick Qt?
I have always been a fan of Qt and used it a lot in the past. Also, in my opinion Qt is the best solution to write cross-platform desktop applications, especially open source.
Where did the name for Heimer come from?
It’s an Alzheimer joke as Heimer saves the mind-map as .ALZ-files.
Are there any overarching goals of Heimer that drive design or implementation? If so, what trade-offs have been made in Heimer as a consequence of these goals?
I first wanted to more strictly separate models and views, but in practice it was a bit hard due to the way QGraphicsScene and QGraphicsView work.
What is the most challenging problem that’s been solved in Heimer, so far?
The layout optimizer is my favorite single piece of code and is based on my thesis work about microchip layout optimization:
https://github.com/juzzlin/Heimer/blob/master/src/layout_optimizer.cpp
It’s an iterative optimizer with Simulated Annealing heuristics and tries to minimize a certain cost function.
What were the existing tools lacking that made you consider building something new?
While the existing tools (at the time) could produce beautiful mind-maps, I felt that the creation process and map manipulation was a bit clumsy for my needs. Also, I wanted an application that starts up instantly and is 100% free without ads.
Disclaimer: I haven’t really even tested all similar tools.
What was the most surprising thing you learned while working on Heimer?
There are people (besides me) who actually want to use it :)
Is Heimer intended to eventually be monetized if it isn’t monetized already? If so, how?
I welcome donations, but there are no other plans.
How do you balance your work on open-source with your day job and other responsibilities?
It’s not about balancing. It’s about having some free-time in the first place, especially now that I have two small kids.
Where do you see the project heading next?
I have a lot of cool features and user requests I’d like to implement and I’ll do my best to make it happen.
Currently I’m working on a feature that would make it possible to add “special content” to the nodes like images (not as background), web links, and probably PDF-documents etc. All this should be embedded in .ALZ so that a single file would contain everything.
One interesting feature request is about having “sub-maps” which is quite interesting and I’d like to have that, too.
Are there any other projects besides Heimer that you’re working on?
Not so actively anymore. Would be impossible due to lack of time.
Before Heimer I used to work a lot on Dust Racing 2D:
Do you have any other project ideas that you haven’t started?
Many :) I also have one closed-source game that I think I’ll make open source at some point.
Where do you see software development heading next?
It has already begun, but we’ll start again to appreciate compiled languages and good performance. WebAssembly will change things in front-end development.
Want to join the conversation about one of the projects featured this week? Drop a comment, or see what others are saying!
Interested in sponsoring the newsletter or know of any cool projects or interesting developers you want us to interview? Reach out at osh@codesee.io or mention us @ConsoleWeekly!