I’ve been working on Krita for over a year now. This post is a reflection on my experiences.
Working from home
Part of the deal is that I can work from home. It has a lot of advantages – for example, I don’t need to travel to work (and I always wasted insane amount of hours to get to my school or uni). This is a bit less important to me now since I live closer to the city centre, so the insane amount of hours would not happen anyway since I would find a job somewhere nearby, but still, I don’t even need to go out. I can choose my own hours of work – I don’t need to explain myself if I’m not at work at 8 am. What is also important for me, I’m not, technically, working full-time: I work less than the standard 40h per week.
I still remember dreading asking my interviewers about a possibility to work less than full-time; especially after uni, I wasn’t keen on working for so long and even from the company’s own benefit’s point of view, I believe it’s better for them to have me there for 6h instead of 8h – I will do nearly the exact same amount of work but won’t be too tired to take care of other things in my life. As far as I know, this is the direction the happiest countries in the world are going – to reduce the amount of hours of work per week. Programmers do get paid a lot, so the money I could earn by straining myself is not that appealing to me. However companies often don’t like part-time workers – they don’t fit the spreadsheets too well, it’s fine if they’re students in a special program, but not standard employees. Hence I’m quite happy to find a job that fits my needs better.
After uni and several job marketplace visits on various occasions I expected my work to go one of two ways: either game development (which means working on something fun, but „crunch culture” and regular overtime is not something I wanted to experience myself, read here: https://www.businessinsider.com/video-game-development-problems-crunch-culture-ea-rockstar-epic-explained-2019-5?IR=T), or business application – maybe possibly data mining or some of the more „sciencey” positions. In both cases it’s a bit less exciting. My friends told me it’s easy to get used to and soon I’d be welcoming challenges that unavoidably were waiting for me in that path with the same warmth I welcomed debugging and implementation of red-black trees that made me win a bet with my friend. My internship proved it, I still recall with reverie cleaning dictionaries with a masterpiece of a bash one-liner piping text content through several Perl scripts and sed commands. And that was for an application that the user probably won’t even know they use. I know a job well done doesn’t need to have a deeper purpose and one is able to find fun in the most unexpected places, still, I’m happy Krita has this deeper purpose to get me through the less funny parts.
A much harder task was getting everything right in terms of taxes and other official documents and stuff. In theory I have people dealing with that for me, but… it’s not the same as having an assistant and an accountant that just do everything I don’t want to; there is still a lot I need to do myself and I loathe it. It would be so much easier if Krita, or rather, the company that manages Krita’s money and developers, was located in my country…
On the other hand, no office to go to and not having to get out of the house means both not going out of the house for days at a time and being quite isolated and even a bit lonely from time to time. Of course I have my partner nearby, I visit my parents regularly, and I do get outside for various other occasions, but there is not a lot of people I meet now, especially since most of my friends either moved out or started a family, including getting themselves a little baby, or have other things to take care of – it’s of course not the same as when we were all going to the same uni and meeting every day. One can always talk on IRC where the whole Krita team meets, however it’s not the same either: you can’t see them, hence the interaction is limited; also this is a group chat, and you don’t really get to know your interlocutors. Everything is much less natural. Of course, sprints help getting to know people behind the nicks much better. One sprint is often more productive in bonding than a whole year of being present at the same IRC meetings.
Working on an open source program
I quite like the fact that I’m working on something that everyone can participate in. All my work is visible online, I can talk to users directly. There is one event I particularly like to recall: when working on bugs last year in the early summer, I got told to spend some time on the Clone Brush. I didn’t find a lot of bugs regarding it, but I’ve found a few wishes. I implemented them, I got it reviewed by Dmitry (since back then, I believe, most of my longer patches were reviewed by him) in the evening, and the next morning I’ve got two different people thanking me personally for coding that. That was quite an empowering feeling: seeing people actively waiting for your work and appreciating it.
I don’t think working on Krita helped me get into other open source communities, I don’t interact with people from other projects, I don’t engage much. But I do understand more how it all works, so if I wanted, I could get in. Also I know all the gossips now.
Now I’m thinking about this, well, maybe Krita does make me closer to the open-source community. Since I started working on Krita, I was abroad four times and I have a fifth one already planned: first time for Libre Graphics Meeting, then three Krita sprints (a big one, baptized ”The First Krita Con” since it had over twenty participants, then one for meeting with Intel and going to Blender Con, then the resource management system rewrite sprint that I just got back from), and then another Libre Graphics Meeting with Krita sprint merged in. Libre Graphics Meeting last year was an amazing experience and it did pull me into this wild world of both programming and art, all with the same goal of freedom and accessibility. I’ve heard about a lot of other art open source projects, notably Laid-out from the very maintainer of it. From then on my favourite general purpose program is Laid-out (and probably the only one. I’m pretty sure that’s what NASA is using to make spaceships designs. As far as I know, the main developer is – allegedly – already working on a module that integrates with a toaster to get you your own Mona Lisa morning toasts. But please don’t quote me on that…).
Btw I’ve written a post about the October 2019 Krita Sprint here: https://outsideofinfinity.wordpress.com/2019/11/02/krita-minisprint-2019/
Working on Krita
Well, I’ve been using Krita long before I started to work on it. I loved it, I got quite passionate about it, and I was passionate enough that when I noticed some comments on Youtube from an upset user whose issues could be incredibly easily fixed, I decided to help with answering user questions – and since I already had an account on reddit, I chose that platform to help. I didn’t know how Krita worked internally, I knew names of the people involved but I was a bit scared to do anything else, especially since a proper contribution, with code and everything, would be quite time-consuming and I didn’t have the privilege of big chunks of time while studying. Helping users seemed easier… (It is not easier anymore, see https://outsideofinfinity.wordpress.com/2019/11/20/how-is-user-support-in-krita-organized/)
Because of that, working on Krita is both a blessing and a curse. I have my own ideas how to improve Krita, what to work on – but I need to do what is to be done. What has the higher priority. And since I promised myself to not code on Krita outside of work, because it would be quite unhealthy considering how much time I spend on it anyway, I just cannot work on features I want even if I have some free time. Boudewijn says he wants us to have some time to have fun working after we release the next major release, but come on – a month? For all the, what, seven or eight big features I have in mind? That’s just not enough time! (And never will be…) I think I’d like to start from the most important one – a smart gradient color selector, which would be quite similar to Digital Colors Mixer, but since it has a very different idea in mind, I don’t think just extending Digital Colors Mixer would work.
On the other hand, I do care about what I’m working on, which… is good for me, since it keeps me interested in my work, but it’s not good for anyone who disagrees with me on how Krita should look or behave, even in a very little details. That’s probably good I’m not a volunteer… I cannot just go and fork Krita to make my own tailored version of it. I need to adjust to others.
But in general, both UI changes and code responsible for proper working of algorithms have more importance for me than it would have in a corporate company. I don’t just make a thousandth copy of the same CRM system, I’m making something unique, something needed, something important for people. I want UI and algorithms and every other part of Krita in between usable, because I am using it and I’m using it for fun, so I know I’m going to spend a lot of time in the program itself for years to come. Since I’m still (well, still… I guess it grew even more!) passionate about Krita, I want it to be used, I want it to be valued, I want it to be viewed as a respected tool, something useful and worthwhile. It keeps me motivated, because I know there is a lot of work to do and now, knowing Krita to the very last brooms closet, I see where the work needs to be put in.
What I’m working on
For fellow programmers who wants to know how working on Krita works in practice: first I was of course focused on fixing bugs. I was a new team member with close to none experience with Krita code, so bug fixes were both a necessity due to the bug fixing mission we have from the last fundraiser, and a method to get me more comfortable with the code. Interestingly, my first (technically, second…) fixed bug was a one-liner (https://cgit.kde.org/krita.git/commit/?id=03db690749bc2481396c510073a773acb6d3d60f), but my next commit was about refactoring the whole class this one little change belonged to – KoUnit: https://phabricator.kde.org/D19537.
Days were flowing uneventful, except for quite a good pace of fixing bugs. At some point Boudewijn asked me to just clean up a bit the mess in the error codes in the file formats import/export part of the code… That was quite a task – it took me over a month, including a week patching xcf, because it turned out that xcf library… was actually a command-line utility, which means it calls exit(x) in case of any problems. So there was no crashes, Krita was just… closing, maybe a bit unexpectedly for a user, but the code was clear, wasn’t it?
After a few more months of bug fixing and fretting over the number of bug reports not stopping to increase after the release of 4.2.0 despite our best efforts, me, Wolthera and Dmitry got finally introduced to the cave of a dragon which is Resource Rewrite. Boudewijn was fighting it alone for two years and got it to the point that getting other people involved was possible. Since then, Wolthera and Boudewijn and I were focusing on that… tasks were reshuffled a few times, but I implemented and cleaned up the whole tagging system. Now it shouldn’t bug out every time you touch it, and a new ”All untagged” category is coming to Krita soon. Recently I started working on bundle creation, but it led me to a mess of UX and broken dialogs… Hopefully I’ll figure out how to clean it up. Other than that, there are a lot of details left: icons of proper sizes, versioned resources (you’ll be able to revert your brush to a previous state, before you changed it!), some bugs with gradients… then we’ll release an alpha version for all to test, fix the bugs that our testers will hopefully find (better alpha testers than regular users), then release a beta version, fix the most dangerous regressions if there are any, then a proper release – either 4.3.0 or 5.0, still to be determined, but the more we work on it, the more we like the idea of making it into the major release.
There must be a “Future” segment, right?
First I’m gonna get well, since I was quite sick last few days. Then… ahh, there is so much! For Krita, we need to finish the resource rewrite, of course, and release the next big version (no matter how it would be called). There will be LGM + Krita Sprint in May/June, which I hope will be at least as successful as the last LGM and as productive as the last sprint (although in a different way). For myself… I want to start a Youtube channel with my artworks. Unfortunately, Between writing fifteen blog posts about everything going on around me at the same time I’m afraid I have a bit less time to paint than I wanted. Also I learned how to edit my videos in Windows Movie Maker, I need to learn to do it in Kdenlive as well… And figure out how to add sound – I believe my Mint cannot find the microphone in my laptop for now, maybe when I update Mint and get an even newer kernel it will work correctly. Otherwise, I’ll need to do it on Windows or another machine.
For this blog, I have quite a lot of ideas as well. I need to finish the Krita Resource Sprint post, but it’s very long (I’ll need to split it up) so I don’t know when I’ll publish it. I want to write a review of a novel I’ve recently read, but I’m not sure if I have enough to talk about. Maybe it would be the only blog post you don’t have to spend hours reading! Then a few posts regarding religion, not exactly religion of course but more like my own experiences with it. I might want to write BITE model breakdown for the flavour of Catholicism I was raised in – of course I know the results already, it wasn’t a cult because it was way too soft, but even for less extreme groups it’s interesting to see how they aligned to the model. I have one blog post about a specific part of storytelling which I have written a lot of already but then I lost quite a large piece of evidence for the second half, so now I cannot finish writing it before I find it. Oh, and a social norms post. Get ready for the rant… If I’ll be brave enough to post it.