🤝 Sponsor - Around
“Once you start using Around, there is no going back."
Not a fan of video calls with clunky UX that take over your screen? Around's radically reimagined video calls are unobtrusive, thoughtfully designed, and free up your desktop. It's perfect for getting work done—instead of just talking about work. We've eliminated everything tiring about traditional video conferencing and rebuilt it from the ground up for remote teams. Around's collaborative interface is perfect for things like code reviews, pair programming, and stand-ups, and comes with anti-fatigue touches like AI-based noise cancellation and background cropping. Once you try it, you'll never want to use Zoom or Google Meet again.
🏗️ Projects
Fonoster
Fonoster is an open-source alternative to Twilio that lets you build voice services with the Internet.
language: JavaScript, stars: 4868, issues: 19, last commit: June 01, 2022
repo: github.com/fonoster/fonoster
site: fonoster.com
GitNoter
GitNoter is an open-source, markdown-based, self-hosted note-taking web app that allows users to store notes in their git repository.
language: TypeScript, stars: 842, issues: 14, last commit: May 27, 2022
repo: github.com/git-noter/gitnoter
site: gitnoter.com
OctoPrint
OctoPrint provides a snappy web interface for controlling consumer 3D printers.
language: Python, stars: 6644, issues: 251, last commit: May 30, 2022
repo: github.com/OctoPrint/OctoPrint
site: octoprint.org
🎤 Interview With Gina of OctoPrint
Hey Gina! Thanks for joining us! Let’s start with your background. Where have you worked in the past, where are you from, how did you learn how to program, what languages or frameworks do you like, etc?
I’m a 39 year old female nerd, born and raised a bit north of Frankfurt, Germany and currently residing a bit to the east of Frankfurt, Germany - I haven’t come far, geographically speaking. I learned programming very early in my life, around six or seven years of age when my parents got an old Apple //e from my uncle, and my attempts to play on it were met with a stern “this is a tool, not a toy” by my dad, briefly followed by teaching me the first commands of BASIC. Programming felt like being able to build with LEGO, but without the bricks ever running out, so I developed a passion for it very early.
I studied Computer Science at university, then went into the industry at a custom solutions and consulting company, where I helped customers build the tools they needed first as a Software Engineer and then later as a Technical Architect. Back then I mostly used Java with some JS and also ActionScript sprinkled in, but in my free time, I started working on a little pet project now known as OctoPrint that I implemented in Python for the backend and HTML/JS for the frontend.
What’s your most controversial programming opinion?
Tabs for indentation, spaces for alignment. Yes, that means mixing them (I can hear some people groan in disgust), but that also means using them for exactly what they were built for, and giving you full control of your whitespace.
Given that I primarily code in Python these days, however, I’ve yielded to PEP8 (the Python code style guide) and now use spaces exclusively.
What are some of the things you did that contributed the most to your growth as a developer over the course of your career? And what are some things you probably should have done that you didn't do?
I think one of the biggest contributing factors was certainly that I tend to view problems that arise as an opportunity to learn - and I was one of those kids that put down “learning” as a hobby in these “These are all my friends” books that used to make the round on the school yards in the 90s. Running into bugs that had me scratch my head for days or weeks with next to no progress were frustrating, but usually meant that by the time I did solve them I had internalized another fact of development life (e.g. “race conditions are the bane of your existence”) and sometimes also the one or other fun story to tell.
Something that I should have done and didn’t do until now is learn to say “no” more and also fight a bit more against my perfectionism. The latter turns out to be great to create stable, reliable and nice to use software, but combined with the former can be a path into burnout, and that is something I now face and have to figure out how to resolve.
What is your favorite software tool?
That’s a hard choice to make between Git and VSCode.
If you had to suggest 1 person developers should follow, who would it be?
Scott Hanselman. A whole person, not just another “I’m only about tech” person. Wholesome, educational, and all in all human. His approach to life, job, and community is what I aspire to.
If you could teach every 12-year-old in the world one thing, what would it be and why?
Systematic problem solving. You see it so often that people encounter a problem and then spend an excessive amount of time poking at it in a completely inefficient way. Trying things that have nothing to do with the problem, changing too many variables at the same time, growing increasingly frustrated about their inability to solve it and finally often lashing out at others out of frustration. I think if everyone got taught early on how to identify a problem, divide it into sub components, systematically test out possible solutions one by one, and also be aware enough to stop and step back when it requires knowledge to solve they don’t have, there would be way less anger, frustration and broken stuff in this world.
What are you currently learning?
I’m currently reading through the second edition of Luciano Ramalho’s “Fluent Python” and am learning a ton of stuff I didn’t yet know (or had forgotten again) about Python internals, like fun interactions between the += operator and a tuple part (page 54). I’m always very much interested in not just the syntax of a language but also what goes on underneath the surface and why (e.g. why does a seemingly atomic operation behave like it behaves), and that is stuff that I can learn here. I can only recommend this book!
Additionally, I’m on a continuing journey of beating my fear of heights AND combating the sedentary lifestyle of the coder by going bouldering twice per week and making slow progress on the difficulty levels I can actually conquer (for the curious reader: still only at V1 level, slowly pushing into V2, after long breaks, first pandemic/lockdown induced, then thanks to a knee surgery and recovery).
And earlier this year I finally started to figure out how to make a good baguette reliably (I took up bread baking as a hobby in early 2019), and that’s something I intend to fine tune at every future occasion! 🥖
How do you separate good project ideas from bad ones?
Usually, I listen to my gut feeling and seek feedback from people I trust - I pitch them my idea, see how they react, and what points for and against it they raise (the biggest against point is usually “but don’t you already have enough on your hands with OctoPrint” which I can only agree with sadly) and if they think it’s a great idea overall or more a case of a brain fart on my part.
Why was OctoPrint started?
It was November 2012 and I had just acquired my first 3d printer. And now that thing was sitting on my office floor, tethered to my PC (because back then when controllers that were capable of printing from an SD card or a USB stick were the exception, not the rule, and also really expensive), producing noise, fumes and keeping my PC busy for hours. I wanted to be able to move that thing out of the office and into a spare bathroom, tethered to one of these little Raspberry Pis that had just come out that year, and figured there must surely be some kind of software that would allow me to do that and then monitor the print via WiFi and a browser. It turns out, no, there wasn’t yet a solution like I wanted it, with a full feedback loop. And so I sat down and wrote a solution for this problem of mine, over the course of my Christmas break that year. I figured it was done as soon as it did what I needed it to do, threw it up on GitHub, returned to my day job, and then suddenly got overrun with emails, feature requests, bug reports, in short, a TON of interest. Apparently, I had solved not just my problem. And since then this little project, now called OctoPrint, has taken over my life.
Where did the name for OctoPrint come from?
That came to be during a Google+ discussion on a new name for what is now OctoPrint. When I just wrote it for myself I called it first “CuraWebUI” (as it was based heavily on the printer driver of Cura), and then later after some refactoring “PrinterWebUI”. Not the best name. So I sought help online, for a name and a logo. A good friend of mine, Andreas Gohr of DokuWiki fame, said, whenever he searches for a new project name, he looks for a cute animal, preferably one with tentacles, and goes from there. At which point my best friend Janina Himmen of sp-studio.de fame threw a picture of an octopus into the ring, which prompted Andi to go “OctoPrint!”, and me to say “We are not calling it OctoPrint!” because I rather wanted to go into the direction of remote monitoring via a crystal ball. Which then resulted in my best friend drawing up another picture of the aforementioned octopus squeezed uncomfortably into a crystal ball, and at that point, I felt so bad for the little guy that the name and the mascot just stuck.
Who, or what was the biggest inspiration for OctoPrint?
I think you could say that in a way, CUPS was an inspiration. I figured, if I can put a paper printer on my network, send it print jobs and get metrics back from it, this should also be possible with a 3d printer, right? But overall, there wasn’t that big of an inspiration, it was a classic case of “I have a problem here, so I’m going to write a solution for it”.
Are there any overarching goals of OctoPrint that drive design or implementation? If so, what trade-offs have been made in OctoPrint as a consequence of these goals?
One big defining feature of OctoPrint is its ability to get extended massively in all kinds of directions through the use of plugins. So naturally, a big driver for design and implementation is first of all enabling modification of behaviour through plugins, but also keeping the existing interfaces and mechanisms backwards compatible as much as possible (and if not possible, give ample warning through deprecation notices). Especially the latter means that wrong decisions made in architecture years ago are now very hard to iron out as third party code depends on them, that a lot of time has to be spent on making code error resilient so that a misbehaving plugin doesn’t crash the whole platform, and it also means that some things cannot be as high performance as I’d like them to be simply because that would lock out certain parts of the platform for plugins.
What was the most surprising thing you learned while working on OctoPrint?
The amount of time spent on maintenance that doesn’t involve writing even a single line of code, and that often goes completely unnoticed by a project’s users. And the mind-boggling amount of entitlement that people have with regards to open source projects provided to them completely free.
What is the release process like for OctoPrint?
OctoPrint doesn’t have a fixed release schedule but rather new releases get made whenever enough fixes, improvements, and features have accumulated on the maintenance branch, and/or it’s been over three months since the last release. Once that happens, a feature freeze is established, and the branch finalized. Then a first release candidate is pushed out for anyone subscribed to the RC release channel. Feedback is collected, more RCs are pushed out if needed (e.g. in case of malfunctioning new features or regressions) until finally the call is made to go for a stable release.
In all cases, a release requires completion of a rather lengthy checklist that includes translation updates, error tracking ID switches, updates of the list of financial supporters, a whole gauntlet of update tests against various base environments to run via a self-built testrig, changelog compilation, authoring of an announcement post and finally merging, tagging, releasing and merging up into the development branches.
Is OctoPrint intended to eventually be monetized if it isn’t monetized already?
I wouldn’t call it monetization because it’s not that you have to pay in any way to get access to OctoPrint, but OctoPrint is 100% crowd-funded since 2016. I have a Patreon campaign, GitHub Sponsors account, Donorbox account, Liberapay, and also some corporate sponsors, ad revenue, and some collaborations with regards to ready-made kit sales. And that is what funds my full-time work on OctoPrint.
How do you balance your work on open-source with your day job and other responsibilities?
That’s simple and very very complicated at the same time. I turned working on my open-source project OctoPrint into my crowd funded day job. I try to keep a good work/life balance through the use of strict work hours and an enforcement of weekend and vacation downtimes. Sometimes that fails spectacularly, and recently OctoPrint has really eaten up more than I could give. I’m working on fixing that situation.
Do you think any of your projects do more harm than good?
I sometimes wonder if the project is doing ME more harm than good, at which point it’s time to take a step back and breathe. Apart from that though, no, I don’t think so. In fact, I’ve gotten a lot of feedback that it has done a TON of good for people.
Are there any other projects besides OctoPrint that you’re working on?
Yes, some small electronics projects here and there, and one slightly larger pet project that is however still super secret to keep the pressure low - working on an MVP there, but considering my workload with OctoPrint, this is more a slow cooked meal than fast food, and I don’t know if and when I’ll share. If OctoPrint has taught me anything, then it is that projects can kinda take on a life of their own and take over yours as well in the process, and that’s why I’m being very careful about any bigger or more ambitious projects these days, and why I usually share any smaller stuff with a big disclaimer of minimum or no maintenance.
Do you have any other project ideas that you haven’t started?
Probably more than I can count. I have a “some day” list of stuff, with no guarantees that this “some day” will ever happen. The day sadly only has 24 hours and the year only 365 days, and that makes everything a bit difficult in that regard 😂
Have you ever experienced burn-out and how did you deal with it?
As far as I know I've never experienced a full blown burnout, but I've come close enough a couple of times now that I know I don't want to. I recognize early warning signs and learned that I need to take care of myself and my mental health. In fact, I'm currently in the midst of recovering from a really close call after an insanely intense two years and an even worse start into 2022 that left me fully circling the drain by mid April.
At that point I decided I needed an emergency brake and break, and thus I took 2.5 weeks of PTO as soon as I could. Once I could think a bit more straight again I also started pondering on strategies to make OctoPrint sustainable again. I've gone through those in a recent video update but tldr: I need to enable the community to get more involved by doing a knowledge dumping first, and making all the tasks not immediately related to code more visible, and then dare to step back, demand involvement and delegate more. It will be a long and possibly bumpy road for the rest of this year I think, but it's a road that needs to be traveled if I want to keep doing this.
What motivates you to continue contributing to OctoPrint?
It feels like my life’s achievement at this point. I learn through it, I can help people through it, and it’s a project I stand 100% behind, which is a huge contrast to the projects I had to do when I still had a “normal” job and where I often didn’t understand why anyone would ever want to use what I was forced to build the way I was forced to build it.
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 console.substack@gmail.com or mention us @ConsoleWeekly!
Great interview! Lots of history and insight to who Gina is, how she came to this place, what drives her and hopefully how she will be able to navigate the roads she has yet to travel. Thank you!