Shop Forum More Submit  Join Login

Some of you may already know that I’ve been looking for a new job, or that I’ve even already gotten a job offer if you’ve been following along on certain other platforms. If not, well I am switching jobs. Originally, I was with the company I chose to be at a few years ago, after quitting another undesirable employment situation (but for slightly different reasons than this one). But because of their decision to go in a different direction, I was just given over to one of our clients. So essentially, I still had a job, but it turned out not to be the kind of job I wanted to have for the next five years.

I originally took that job because it was the easy way out. Instead of having to spend evenings pouring over writing cover letters for several different companies, I’d already have a job at a stable* company. Unfortunately, there were a lot of things I didn’t know going into that job about working there, and the Kununu reviews weren’t all that stellar. On retrospect, I probably should have seen some of the signs much earlier from when my previous company shielded me from the management chaos and technical incompetence happening on their side. Had I known then what I know now, I’d have been sending out job applications a lot earlier. I considered it, but at the time, the things that bothered me were too minor or inconsistent to be worth the hassle of looking for another job.

A few things made me eventually seriously consider hunting for another job. Essentially, that I was still in Probezeit**, and didn’t have to wait too long to quit if I found another job, and my doubts about this job were confirmed by other people who felt the same way I did about working at that company.

Now if you are good at what you do, you have a lot of job mobility. If you don’t like your job, you can always look for another job elsewhere with a company that has a better cultural fit or does things the way you prefer. Of course, you can try to change your current company by offering them advice and just helping them out the best you can, but as a new employee, you don’t get much leverage if your position isn’t high up in the company, and if your higher ups don’t listen to you, there’s not really much you can do.

When I started job hunting, I didn’t know what other companies would think of me. I didn’t know if I would have any success at all. All I knew was that I didn’t like the job I had currently, and if I didn’t start looking, I would never even have a chance at a better job. It may well be that no one wants to hire me (for whatever reason), but you’ll never know unless you try.

Additionally, this comes at a much lower cost to me than someone else looking for a job. My supervisor has children, and no time to go job hunting. One of my co-workers is extremely occupied with his pets on his free time as well, and also likewise has no time for it either. I don’t have these restrictions. The only thing it costs me is an evening writing cover letters and having to schedule interview appointments around my work schedule, but it’s a lot less complicated than someone who has to drive children to school and other after school activities or has to occupy their pets’ attention. I didn’t simply decide on whim to go job hunting because of minor issues like I’m too lazy to make lunch myself instead of depending on restaurants or cantines to be nearby or because my job has a longer and busier commute or even that I’m stuck using Windows***. There were far more serious issues I had working at this company, and that was exactly what motivated me to begin job hunting and not simply contemplating the idea of doing it.

I was picky this time and selected companies that specifically did not have the problems from the first and current companies I worked at before, and was a bit worried that I wouldn’t get many responses. Another thing that put me at a disadvantage was not being sure if my level of German would be good enough for the job. This job gave me a pretty good idea that it might be possible to apply for jobs that require you to speak German, but previously, I applied to a lot fewer places because of the German requirement, and I didn’t want to misunderstand my employer if my understanding of German wasn’t good enough. Fortunately, I didn’t have to wonder if my efforts were going to waste. I was getting tons of responses and having to schedule interviews every week. Somehow, I was either lucky that the companies I picked wanted to expand, and were looking for software developers like me or I was just simply the right fit for many of those companies I was applying for.

While all this was happening, there was a thought I had at the back of my head. I very briefly mentioned being disatisfied about having to use Windows to my supervisor once. It wasn’t even a serious comment, and was made half heartedly. I have no idea if he picked up on that, because it appears he reacted to that badly and launched into a whole spiel about how I should be grateful to have a job. And yet here I was, hunting for jobs in spite of being told I have to be happy with the job I have.

My knee jerk thought to this was that my supervisor probably believes himself that he is grateful to have his job. I don’t believe gratitude must necessarily apply to ever other employee either, as the circumstances for their employment varies, but it was very obvious that he was grateful to have his job. So long as we exclude being hired by friends, my supervisor has no formal training, has no time to go on a job hunt because he has children, didn’t want to learn new technologies****, and didn’t follow the best practices used by most modern software developers–of course he is grateful to have his job because he would have a hard time finding another one in the same field if he was forced to look!

I remember reading about how Judge Judy managed to negotiate with the company that does her show and how she was able to convince them to pay her more to keep her. Essentially, she claims she was able to do it because they really depended on her to keep their TV ratings, and there weren’t a lot of other people who could do her job. She had written in a letter that if they didn’t agree to the pay she wanted, she would go to a different company. And she was confident about this because she knew her worth. She knew that any other company would be happy to have her and pay her what she wanted. She didn’t let the company decide for her what she was worth. Was she grateful to have a job? I can’t read her mind, but the fact she had such leverage and she knew it tells me whatever gratitude she had or didn’t have didn’t stop her from getting the job conditions she wanted. She could afford to do it because she and the other potential employers knew how valuable she would have been if she were hired.

If my supervisor decides I have to be grateful just to have a job, I’ll never know my true worth if I believe him. If I am just happy to have a job, how would I know that there might be a better job elsewhere with a company that recognizes my real worth better, pays me more and that there are many other companies willing to do all the things I expect from any company that my supervisor at this company won’t? Just applying for all these jobs and the responses I got was the evidence that this was the case for me. I don’t have to be grateful for a job I don’t like when any other company would be happy to have me. And now that I know plenty of other companies would like to have me, it’s more likely my employer should have been grateful I was around. Particularly if I had chosen to stay.

Another related reason employees should be grateful for their best employees is because they depend on them. I knew my employer depended on me because when I told my employer I was quitting, they sat me down and tried to convince me to stay. I felt they had not taken any of my concerns nor the concerns of my other colleagues seriously until I had clearly told them I was leaving. I apparently held enough weight at that company that they didn’t want me to just leave. If your employees are easy to replace, then there is no gratitude lost on them, but when you have star employees that you find difficult to replace, and they, for whatever reason, choose to stay even if they could easily land a better job elsewhere, you need to be grateful.

But telling your employees they need to be grateful to have a job is insulting. I received plenty of other hints from my supervisor that he was trying to convince me and my co-workers that we were doing well and that we were doing “great” things, but I don’t wear the rose-colored glasses and can tell if things are going south. I get the impression that other than throwing the occasional compliments (which he probably believes anyways), telling his employees they should be grateful is a last ditch attempt to shut down any efforts to hunt for other jobs because it’s like saying, why bother looking, you’re already happy here. Probably, my supervisor is unaware that this is what he is doing, and isn’t aware his situation doesn’t reflect mine or some of my other co-workers’, but when you have nothing else with which to convince employees to stay, and don’t have real good reasons to convince employees you are worth working for, it does sound like trying to convince people they should be grateful is the only other recourse they have for making people stay. It’s sadly not a good one, and I can see that bullshit for what it’s worth.

Don’t get me wrong; I’m not ungrateful when I have a job. I didn’t quit this job until I had another job offer lined up. But you can be grateful and at the same time, admit that your current job is not where you want to be for the next five years at least, and that there is a chance you can work at a better job that fits you better. If you have job mobility, gratitude is not required, and it should not be considered strange that you can pick the company you work for (provided they’re happy to have you of course). The only time you have to be grateful to have a job is if your job prospects completely suck and you can’t get a job anywhere else. Or if you haven’t worked hard for it, and you are easy to replace. It is true that you may have to invest effort in job hunting and tying up loose ends with the current company and any other co-workers there you might still like, but having a job at a company is not the same relationship as a relationship with a friend. Working for a company is a business relationship, and in a business relationship, there is no room for loyalty. You may worry about whether or not the company will get through without you, but in most cases, they will do fine without you, and even if they didn’t, it is not something to get upset about.

*After being at that company for a few months, I soon learned that the company isn’t actually as stable as they make themselves out to be but manage to stay afloat from a combination of sheer luck and previous customers being accustomed to higher prices.

**Probezeit is German for the initial trial period you spend at a company for the first 6 months. During this time, your vacation hours are less and your quitting terms are shorter. Probezeit for new jobs in Germany are entirely normal, and for regular kinds of employment, required. Hire and fire is not a typical employment model in Germany.

***I hate Windows. It appears to be a modern idea that employees should be allowed to pick the OS they use at work, and there are some studies that show that employees who get this choice are more motivated.

****Learning new technologies is expected if you are working as a software developer.

  • Listening to: mpv + youtube-dl, what else!

TL;DR: I made a no frills script for streaming audio
efficiently. Works great for art streams and music at work. Look down
below in the instructions section for using it.

mpv is a media player utility that allows you to play audio and video files locally or online. You can also use it with youtube-dl to play YouTube videos. It's great because that means you can play YouTube videos without requiring a browser or loading questionable scripts, ads or unnecessary resources from YouTube's website everytime you just want to view a video, and mpv provides way more playback options. If you're one of the people that don't like reading YouTube comments, that's even better; mpv with youtube-dl won't load that stuff.

I tend to find I listen to a lot of soundtracks that come off of Youtube if I don't already have them on disk because I am uncomfortable with signing up and paying for and using a Spotify account to stream music on-demand for privacy reasons and because the selection of music that Spotify offers, ironically enough, is completely inadequate. (Good luck trying to find any number of officially orchestrated/arranged or original obscure classic video game soundtracks.) If I could use mpv to listen to music off of Youtube, it would take a lot of work off of my browser and my computer system, so I wrote this script that streams audio from YouTube. Though potentially, it could even play music streams from other websites as well.

Unfortunately, mpv and youtube-dl by themselves aren't enough to by-pass GEMA's censorship, and you would have to use a proxy or Tor on a non-German exit node to do that. Normally, playing the videos from Tor's browser bundle (TBB) is good enough for that (it's not as slow as you think it is; Tor has gotten better with that, and now it all just depends on the Tor relay you are running on. They've even made it easier to switch relays once you find out it's not loading your YouTube videos fast enough). However, TBB is still a browser and will still load all those unnecessary scripts, ads and other third party junk (and free thanks). Fortunately, you can now use another utility called ProxyChains to run mpv through a proxy or Tor.

What my script essentially does is read a list of URLs (mostly from YouTube) and play from them with mpv randomly or one after the other. It will take playlists from YouTube as well as single videos. You can still pause the playback or skip tracks or anything else you can do with the keyboard shortcuts mpv provides. I found the $RANDOM function supplied by bash tends not to be random enough for my tastes (even with a sufficiently large list), so I've decided to use the algorithm instead.

If you were in my Picarto stream during the YaYuCo event this year, you may have noticed I ran an earlier version of this script during the stream.

Here are some benefits for using mpv, youtube-dl, Tor and ProxyChains with this script:

  • Free (as in speech, not beer). The amount of freedom also depends on which services you choose to rely on (eg, audio/video hosted on YouTube or your own server, etc.). But that's probably not too different from picking "free" Linux distros and choosing which software you want to install on them (which may well not be free). That's entirely up to you.
  • More audio choices. You can find more soundtracks on YouTube or other streaming services than you can on Spotify alone. Whatever youtube-dl and mpv allow you to use.
  • Not restricted by regional censorship (eg, GEMA) since you can run this streaming service over Tor or a proxy
    of your choice. Also protects your privacy.
  • Great performance and very minimal CPU usage owing to mpv and minimal GUI resources required. mpv by itself takes up usually a measly 1.6% for me and even less for the Tor daemon. Also great for art streams where minimal GUI doesn't distract from the stream and doesn't take away too many resources needed for the stream itself.
  • No accounts required. Stream anonymously.
  • Rather than playing YouTube videos as audio playlists directly in your browser, and having to load every single script, ad and every other third-party garbage that Google and other suspicious domains throw your way, you can by-pass all those unnecessary resources and load just the audio file you need. Not to mention browsers can hog up a lot of CPU and resources, especially if you have many tabs open.

Using this script does require a bit of effort though:

  • You have to create the list of URLs yourself. They're curated so that it plays only what you want it to play, but that curation has to be done by you (or anyone else who wants to create such lists). That’s what happens when you want freedom and choice.
  • Playlists are not easy to maintain because lists are stored as URLs with no easy way of telling what is what in the list.
  • Music currently being streamed does not display the title. You kind of have to just know what songs are being played.

Which means the best use case for this script is for people who want to stream audio in a random order from a curated list that they themselves have spent the time to create who don't really care what song from that list is currently being played and have enough computer skills to use command line or aren't afraid to try it. And probably don’t need to do too much heavy maintenance on those lists.

Unfortunately, like with plain vanilla flavored mpv, this script isn't written with usability in mind, so although I've tried to make it as easy as possible to use, you will have to touch the command line to use it. (It's not that horrible. Really.) The script also isn't perfect. If you run it with Tor, there are occasional Tor relays that don't work well with YouTube and may return 429 errors. I've tried to get my script to detect this and restart the Tor daemon to get a new relay. It also just sometimes stops with too many errors for reasons I haven't discovered. It's also sometimes a bit slow with loading the next URL, but that might just be because of using proxy/Tor, despite Tor being better at streaming YouTube videos than previously. It doesn't really happen frequently enough for it to be a problem anyways. This script is also written for Unix like systems, and while I haven't tried it on Linux and wrote it for OSX, it probably will work on Linux anyways with very little editing. It is probably possible to make a batch script version of this that runs on Windows, but it will probably require more time and effort to adapt it than just testing it on Linux would. If you are not averse to trying it or using it, feel free to read on about how to set this all up.


The audio streaming script can be downloaded here.

You will need to install mpv, youtube-dl, tor and proxychains-ng.* You can get all of them off of Homebrew on OSX and most Linux distros have package managers that provide them. If you install mpv, youtube-dl might come installed with it as a dependency. Just check to be sure anyways. If you can use youtube-dl in command line, then you have it.

*If you're not using Tor or proxy, you can skip installing either of them or the steps required to configure them properly. It should just work without them if you tell the script not to use them.

Configuring Tor/TBB

If you already have the Tor Browser Bundle, you won't need to install tor, as the Tor daemon comes with it. To have it set up properly so that the script can find it, you will need to symlink it because on OSX, the TBB doesn't do this. You can probably find it under [Tor app location]/Contents/MacOS/Tor/tor.real:

sudo ln -s [Tor app location]/Contents/MacOS/Tor/tor.real /usr/local/bin/tor

If you are using Tor to get past GEMA, you will also have to provide a torrc file that this Tor daemon will use so that it will know to avoid any German exit nodes. You can usually find the usual one used by the TBB under ~/Library/Application Support/TorBrowser-Data/Tor/torrc.
You can reuse it, but copy it to your home directory under the name .torrc so that the Tor daemon can find it. To filter out the German exit nodes, add this line (or add {de} if ExcludeExitNodes is already there. The list is comma separated):

ExcludeExitNodes {de}

If there are other things you would like this Tor daemon to do when you use it with the audio streaming script, feel free to modify them in this torrc file. You can find out more details about this on Tor Stackexchange or the Tor website itself (look under the Configuration File Format and General Options sections). If you copied it from the TorBrowser-Data/Tor folder, also remove the DataDirectory line or comment it out.

You can test that this all works by running the tor command in a terminal window. This would also be useful for finding out what port the Tor daemon is running on, since you will need it to configure ProxyChains correctly. You can find the port in a line that looks like this:

[notice] Opening Socks listener on

For the other utilities:

brew install mpv youtube-dl proxychains-ng tor (only include tor if you don't already have it and need it)
(or apt-get install or pacman -S or choco; whatever your OS uses)

Depending on your Linux distro and the way in which you've configured it, you may or may not have curl. If you don't, install it as well or switch to using wget in the script itself for generating the random index.

After you have installed all these utilities, we need to configure ProxyChains.

Configuring ProxyChains

The ProxyChains configuration file is under /usr/local/Cellar/proxychains-ng/[version]/etc/proxychains.conf if you used Homebrew. By default, ProxyChains will look for Tor under some port number like 9150. To make sure it finds the right one, open the .conf file and go all the way to the end where there is an
uncommented line like socks5 9150. Change the port number at the end to the one your Tor daemon uses. You can easily test if ProxyChains works by typing something like proxychains4 curl (Also be sure that your Tor daemon is running for this). If you get back an IP address that isn't from your computer, then it works. You can also use a different proxy service if you don't want to use Tor. Change the socks line to the address your proxy uses. I don’t have access to a consistent proxy server, so you’re on your own for that one. But there should be plenty of help available online for how to use ProxyChains with your proxy.

After you have this all set up, you will need a list of URLs for the script to read from. Just go to YouTube and copy and paste the URLs of your favorite music into a plaintext file, and put each URL on a separate line. By default, the script will look for a list called "list" if you don't specify which file to use for the list, so put in the URLs of the music you will be using the most into that list first. Put this list file in the same directory as the script.

Then try to run the script (from the script directory):


Here's some other other options you can use with this script:

--no-tor              Stream without tor
-p, --proxy           Stream with proxy (without Tor. You need to set up ProxyChains for this.)
-l, --list            Read list of URLs from a file. By default, the list is a file called "list" in the same directory as this script.
-s, --sequence        Stream the list of URLs in order rather than randomly.

You can use them by adding the flags after the run command:

./ --no-tor -p
stream music with ProxyChains configured to run with another proxy, but without starting the Tor daemon

./ -s -l castlevania
stream music in the order the URLs appear in the list and use the file called "castlevania" for the list

  • Listening to: mpv + youtube-dl, what else!
So, I found another FOSS graphical editing software like Krita, only it has a slightly different focus, like sketching and an infinite canvas. Unfortunately, like Krita, it's a pain in the ass to build. Thankfully, not as cumbersome as Krita, but it still took a lot of time, and pressure sensitivity still doesn't work. It's sufficient for blueprints, diagrams and other plans though. You can go the easy route and build it with MacPorts, but if you're on Homebrew like me and don't want to mess up your system by installing MacPorts, then read on. You will have to touch the console for this though, so if you really want it, just put up with it. It's not that bad. You can follow along the instructions in the readme on Github here:…
I will just make notes here for stuff you need to adjust since that guide is catered for MacPort users. Please note that I built this on Mavericks. I have no idea if the process will be different on Yosemite or El Capitan.

Setup environment variables

Just use the same export variables as in the guide. You will probably have to change the paths for them though.
PKG_CONFIG_PATH - where you will find .pc files for pkgconfig. If you hit on a folder with a ton of .pc files, then you've probably found it. In Homebrew, it's under
CFLAGS - include folder for most libraries used as dependencies. On non-Macports (and probably Homebrew), this is usually under

CC and CXX flags - SCons, the build tool will use whatever default value you have set for the CC and CXX flags. My computer didn't pick the right one, so if you get weird wrong architecture symbol errors, just set them:
export CC="clang -arch x86_64"
export CXX="clang++ -arch x86_64"

Install dependencies

I used Python 2.7 for this. You may not need the Homebrew version of this, but depending on how you have it set up, Homebrew prefers its version of Python. Which is okay, except that you will later have to tell SCons to use the Homebrew Python as well. Most of the dependencies below can be obtained through Homebrew. Sometimes, Homebrew will not link the dependencies because your system might have a version of it already. If you plan to use these dependencies for building MyPaint, you will have to link them. Use
brew link [dependency]
for that. If you've already built Krita, some of these dependencies might look familiar.

  • swig
  • scons
  • pkgconfig (you can install this from pip or Homebrew)
  • gettext (if you install this with Homebrew, make sure it's linked.)
  • gtk3 (in Homebrew, it's gtk+3)
  • pygobject3 (if you install this with Homebrew make sure it's linked. Note: this is not the same as python-gi. python-gi is only for pygobject2, and if you already have it, the gi module will not build properly with MyPaint. Make sure the one linked here is from pygobject3. You can find them in /usr/local/lib/python2.7/site-packages/gi.)
  • libffi (this will probably be installed with pygobject3, but if you installed it with Homebrew, make sure it's linked.)
  • json-c
  • hicolor-icon-theme (Should be installed with gtk3 if you're using Homebrew)
  • librsvg
  • libpng (OSX usually comes with this. If you don't already have it, you should get it now.)
  • lcms2 (in Homebrew, it's little-cms2)
If you're not building with Homebrew, you'll need these as well:
  • glib2
  • cairo
Some dependencies you should install with pip:
sudo pip install [dependency]
  • numpy
  • scipy
  • pyobjc-framework-Cocoa (you do not need the entire pyobjc framework! Save yourself the frustration and time by only getting this one.)

Clone source files

As per the readme.

Note: If you build dependencies with Homebrew, you must tell SCons to use the Python binary from Homebrew: In SConstruct, there is a line like
opts.Add('python_binary', 'python executable to build for', $).
Replace $ with the actual path from the Homebrew binary:
Do the same for the python_config option below it as well, but link to
Then run SCons like in the instructions. I personally didn't have to use sudo -E, but your mileage may vary.

The readme suggests running the app with a -c flag, but I'm not sure if you absolutely have to specify it every time you run MyPaint. To automate that process (since there are no app bundles yet), I wrote a little script that you can run instead:

./mypaint -c /tmp/mypaint_cfgtmp_$$

Just save it as something like and run it with

from your MyPaint folder.


Mypaint can't find its icons

If you have attempted previous installs of other graphics software like Krita, you may have set up a XDG_DATA_DIRS environment variable. MyPaint attempts to find hicolor icons from this variable, and it might not get added automatically. You will have to add it yourself. If you installed hicolor-icon-theme with Homebrew, the icons are under
(but linking /usr/local/share should be good enough).

MacPorts Differences
I actually looked at the portfile to see the missing dependencies that I needed that weren't in the readme. It appears that Homebrew tends to build the dependencies for the dependencies listed in the portfile, so I didn't mention cairo or glib except for building from source. Also, I did a clean install from a different computer without protobuf, and found it wasn't required. Either that, or I already had protobuf and just didn't notice it. If you need it though, you can get it through pip. I've never actually tried the MacPorts build, so I don't know if it just builds it from source and bundles an actual OSX app, or if it just dumps the build files somewhere and links them to what looks like an app, like the Homebrew cask version of MyPaint does (which is actually outdated, and the whole reason I wrote this guide). Bundling could be an interesting exercise though.
So, after several long weeks and talking to other devs, I finally managed to get a build of the new Krita 3.0 up and running on Mac OSX. Krita 3 is still in development though, so even if you ran it on Linux, there are still some features that aren't completed, and probably some bugs. On OSX, OpenGL doesn't exactly work quite right. If you change a few lines of code so that it doesn't crash on the shader check, you can probably use a tablet with it. For the benefit of other people attempting to build Krita on OSX, I've decided to document how I did it. Please note that I did this on OS 10.9, and have no idea how well it works on later versions of OSX. You are welcome to try building the new Krita 3 as well, but you will need a lot of disk space and at least not be afraid of the command line. Most of these instructions are geared towards people who have some understanding of software development though, so these notes might not be that detailed in some places.

TL;DR If you're not a developer, or don't want to try building, and you have Mac OS 10.9, you're welcome to try the bundle I made here:…
OpenGL is not enabled safely on that one though, so you'll have to fix the source code and build it if you want a version that at least sort of works with a tablet.

Setup directories for building Krita.

In general, you can set up your build structure however you want, but it would be recommended to have something like this:

$HOME/kf5 - main directory where all your KF5 dependencies, qt5.6, etc. and krita builds go
$HOME/kf5/share - location where KF5 dependencies are built
$HOME/kf5/krita - source code for Krita
$HOME/kf5/inst - build location for Krita app
$HOME/kf5/qt5 - Qt5.6 source code

OSX dependencies

Build Qt5.6
Go to the Qt website and get the Qt5.6 source code:…
Follow the instructions there, but git checkout 5.6. Before you continue with the make command,
grab the deploy.diff file from the Qt bug tracker and apply it to qttools:…

Put deploy.diff in the qttools folder in the qt5.6 source directory.
If you did not get qt5.6 from Git, use patch to apply the patch instead:

patch -p1 < deploy.diff

Otherwise, use

git apply deploy.diff

Continue building Qt5.6. This might take awhile though, so go and do something else in the meantime. Expect it to take 3 hours or more.

Build KF5 Dependencies
For the KF5 dependencies, it might help if you have your runtime environment set up like this:…

If it works, try kdesrcbuild scripts on the wiki:…
If you do it this way, then you will have all the dependencies you need, and can get right to building Krita.

If not, you will have to install dependencies from scratch.

Do not use the Homebrew installation of KF5. They are built with a Homebrew version of qt5, and not Qt5.6, and will not work properly with the rest of the Krita libs.* Follow the instructions on the wiki to build the KF5 dependencies:…
Here's a list of the KF5 dependencies you will need:…
(I ended up building more libraries than I needed to. Mostly because I had errors from cmake. Your mileage may vary.) You do not need strigi! Don't waste time building it. Try to follow the order in the building details link when building the dependencies.

*There's really nothing wrong with the Homebrew KF5 dependencies. I'm sure you can use them to build other KDE 5 apps, like Kate, but I've never really had much success with getting Krita to run properly on Qt5.5. But I'm sure they will eventually build with Qt5.6 when it's not so new. But at this point, you'll have to build them yourself.

Other dependencies
You can, however, use Homebrew to install the other non Qt5 or KF5 related dependencies. See the KF5 Dependencies list linked above for all the other dependencies you need. I don't think it matters what method you use to obtain them, so long as they are on your system. You should not need most of the optional dependencies, but Vc is recommended. You can find Vc here:

If you build Vc, please make sure in the CMakeCache.txt file that gets generated during cmake, change TARGET_ARCHITECTURE to "core" to ensure compatibility with other Macs with different CPUs. Run cmake and build and install again.

I've so far had no success with building Krita with Vc 1.0, so you may want to build on the 0.7 branch.

Build Krita

Obtain the Krita source code from the repository. We are using the new repository for 3.0 code, and not calligra 2.9:

git clone git://

Run cmake in your specified build directory:

If you build with Vc, also add -DPACKAGERS_BUILD=ON to your cmake command.

You can also do this with QtCreator if you want:…
Just go into the settings, manage kits and add your install of Qt5.6. (If Qt5.6 is in a hidden location, press command + shift + g in the open folder dialogue.) Open the CMakeLists.txt file in the root directory of the Krita source files, and you will be asked to provide some CMake flags, the build directory and then it will run cmake for you.

If you get any errors about cmake not finding certain libraries, open the CMakeCache.txt file in the build directory and change the NOTFOUND paths. Only change them if the cmake output complains about it.

As with Vc, you also need to change TARGET_ARCHITECTURE to core.

After cmake finishes, run make install.

In QtCreator, just click on the Projects tab and configure the build step to run make install instead of make. Then click the hammer icon to build Krita.

Again, this might take awhile, so go ahead and do something else while Krita builds.

Run Krita

You should have a working version of Krita after make install completes. There should be an install.manifest file if you missed the make install output at the end that tells you where the binary is. It's in the Krita build directory. This binary will only work on your system. If you try to copy it to another Mac without a similar development environment set up, it won't work.

You have to specify the plugin directory in your environment, or else this dev version of Krita won't run. Use export KRITA_PLUGIN_PATH=$PATH. The path depends on where the generator installed your files. It will usually be something like /usr/local/lib/krita. You should see a lot of .so files in there.

You can either try running the Krita app itself by clicking it or running it through Terminal. Note that the executable is not actually the app itself. On Macs, the app is actually a bundle with a .app extension on the end. The executable is under


MacDependency is recommended:…
If your dev version of Krita runs fine, then you can attempt the bundle step. Obtain the general deploy script from git:
Then switch to the kf5 branch.
You should find a script in there. Change the paths to appropriate ones to match your system:

~/kf5/ - the location of the final bundled app + name
~/kf5/krita.dmg - the location of the bundled app in a package (this is optional, and you won't really need it except distribution anyways)
~/kf5/i/bin/ - the location of the dev version of the app
~/kf5/i/share - the location of your krita dependencies. They get built when you build Krita. Check your install.manifest file. It should be the same folder that contains the krita.rc file.
/Users/boudewijnrempt/kf5/i/lib - the location of the krita plugins. They get built when you build Krita. Check your install.manifest file. It should be the same path you supply KRITA_PLUGIN_PATH with when running the dev version of Krita.
/Users/boudewijnrempt/kf5/i/lib/plugins - location of more plugins. They're probably also built with Krita. I found them in /usr/local/lib/plugins. So probably a similar directory as the previous one.
/Users/boudewijnrempt/kf5/i/plugins - Still more plugins. These should be under (krita build directory)/plugins

If you run this script, you will end up with frameworks, plugins and libraries with dependencies linked to @ loader_path and @ rpath, which is not really ideal for distribution, since other systems will tend to look for these dependencies in places differently from your system. We will have to use otool and install_name_tool to fix these using @ executable_path, which targets the app executable instead. Unfortunately, it gets tedious trying to run these commands manually on every single dependency in every library in the bundle, so we will use this script instead:…

Just change the directory near the top to reflect the location of your final app bundle.
If the script executed correctly, you should see no errors or warnings when you view the bundled Krita app in MacDependency. You should now be able to run this bundled app on any other Mac with similar specs.


cmake can't complete because ECMConfig files are missing.

ECM config files are the extra cmake config files from the KF5 Extra CMake Modules dependency you should have built while building the other KF5 dependencies. You should be able to locate the necessary config file in (ECM install directory)/ECM/cmake.

Krita crashes because it looks for Qt5 in different places.

You have too many KF5 components installed, or they're installed with older versions of Qt5 (eg, with Homebrew). If you still need your Homebrew installations of KF5 or Qt5 components, just unlink them if you are bundling. Macdeployqt tends to be very greedy and will take any and every KF5 component (and their Qt5 dependencies) it can get. If this happens with the dev build, clean out all the directories the compiler installed krita libraries and plugins to and run make install again.

macdeployqt doesn't recognize the extra-plugins option.

You didn't apply the patch before building Qt5.6. If you forgot it, download it and apply it. Since you probably don't want to rebuild the entire Qt5.6 library just for a few tools, run make module-qttools instead (and then run make install afterwards). You shouldn't have to run configure again.

Undefined symbol errors while building

Check to make sure that only the libraries that are required are built. In CMakeCache.txt, you can switch on and off optional libraries. The only "optional" libraries you should need are eigen3, exiv2, OpenGL, and lcms. If there is a library that cmake can't find, and it's required to build Krita, check the output of cmake.

u16String undefined errors in Qt

In CmakeLists.txt in the root directory of the Krita source, there is a line like this:

if (APPLE)
    SET(CMAKE_CXX_FLAGS "-stdlib=libstdc++ -std=c++11")
#   find_package(Carbon REQUIRED)
endif ()

Change libstdc++ to libc++.

Krita crashes at runtime with some error like
Krita has encountered an internal error:
ASSERT(krita): "allFiles.size() > 0" in file /.../krita/krita/ui/KisMainWindow.cpp, line 417
Please report a bug to the developers!

You get this error because Krita cannot find a very specific file. Generally, if you are running the development version, this file should be in some place like /usr/local/share/krita. But sometimes, depending on your setup, it might look for that file elsewhere. Look for the folder that contains the krita.rc file. This is where you want your app to look for the file. If it doesn't find krita.rc in the share folder, you may try putting it in $HOME/Library/Application Support/. If you have no clue where Krita is looking for this directory, you might want to try running Krita with export QT_LOGGING_RULES="krita*=true" and see what directory it outputs. If this happens in a bundle, it's probably because you're running a newer OSX than 10.9. Unfortunately, I've never tested Krita bundles on systems above 10.9, so you're on your own there. But feel free to try the debugging suggestions anyways.

Krita hangs or crashes on startup.

This could be from anything really. The best thing to do is run it from Terminal and see what sort of output it gives you. Sometimes, even just running it from Terminal fixes the problem. I find most of the errors tend to come from missing libraries or the app not being able to find certain libraries, or libraries even missing or not finding dependencies. Use MacDependency to check on these. Please note that if you use MacDependency to check on the dependencies of .so plugins, they will always appear red. However, it works better if these dependencies have Executable_paths rather than Loader_path. For example, you might also have tried to run the bundle without fixing the dependencies in Krita plugin .so files. Run the last deploy script to fix it. Also use export QT_DEBUG_PLUGINS=1 while running Krita.
My response to this link:…

And this is exactly why schools should use free software. Not just because it means you can learn from how the software is coded, as Richard Stallman likes to suggest, but because you could have avoided issues like this. But in general, you could have your license for proprietary software revoked at any time, and not being a student and having access to the regular priced version of it doesn’t save you from having a supposedly perpetual license revoked. Now that doesn’t mean I’m not sympathetic to people who have had this happen to them, as it’s not their fault this is happening. I deeply sympathize with all the people who have lost their fundamental tools they need to earn a living because of this, and I fully support a lawsuit against Adobe and any other company that tries to pull this stunt, but in an effort to encourage more organizations and individuals to use free software, I think this makes a very strong case for why use of proprietary software, especially in educational institutions should be discouraged. It’s bad not only for students who are affected by this, but it’s also bad for educational organizations who depend on software from companies that produce the proprietary software. And it might serve as a warning to people who still have their “perpetual” Adobe licenses for student editions because you might soon find your licenses being revoked. In which case it might be a good idea to look into other alternatives, including the free software GIMP and Krita. I’m already advertising the usage of Krita as best I can, and I will be using and promoting it during a stream at a convention, but if we needed another example among a list of growing examples that illustrate why free software is more important now than ever, and more people should use and support them, then here’s another one.

PS: Not entirely sure I like the idea of promoting this, as it’s one step away from piracy (and it is one of the steps required to successfully pirate a perpetual license Adobe CS product), but if you think this might be an issue, and your career and possibly your life depends on it, and your student license hasn’t yet been revoked, you could try adding a blacklist entry to Adobe’s servers in your hosts file to prevent Adobe from revoking your license, or from your app from finding out it’s been revoked. I’m not going to explain exactly how this works, as I don’t want to encourage piracy, but I think you can find out how to do this elsewhere. Alternatively (and more legally), you could just unplug your computer from the Internet entirely, or only allow it access to an internal server with no access whatsoever to the outside Internet, and transfer files the old fashioned way to another computer with Internet access. I have no idea if this works for CS6, as I only know this technique has success with CS5 or earlier, but if anyone has tried this, do let me know if it works. I’m just a little curious.

PPS: The technique mentioned above also works for Google Chrome if you dislike its autoupdate behavior.…

If you came late last time, sorry about missing the chat, but they switched the pre-release chat halfway through our stream, and I missed the messages. Anyways, hoping I might get to color soon.…

Will be continuing the drawing of Chaos for the FF collab.…

Streaming fanart of Chaos for the FF collab.
Still working on that FuSoYa picture. Maybe I'll get to coloring, since I don't have to worry about background details.…

EDIT: The piece is completed, but now I will be streaming Goodbye Deponia in German. Feel free to watch if you're curious. If you get confused, feel free to ask for a translation. I'll try my best to translate it.

Doing a fanart collab on Tumblr, so fanart of FuSoYa.

Here's the collab:…

There's still a few slots left, but not much. For example, If you were looking to do Sephiroth, forget it. Tellah though...

I've always looked upon the countries in Northen Europe as shining examples of what a civilized society should strive towards. They have low crime rates, very little discrimination, gender equality, and lack a dominating presence of religion. I'd even like to visit one of those countries eventually, as soon as I can find something with which to brush up on any of their languages (I guess mainstream video games in their native languages are lacking there...). I believed that everything there was great until I found this article:

The long and short of it is that Sweden is a bratocracy. They let their kids do and get away with a lot of crap, including stuff you couldn't get away with doing as an adult anyways. As a childfree person who doesn't like unruly children, I find that appalling. I'm not entirely sure if I'd like to go on a tour to Sweden and have dinner at a restaurant be ruined by some brats because their parents didn't want to do anything about them.

According to that article, it seems that this attitude persists because they want to encourage democracy and equality among everyone. But is it really?

Here are a few examples to demonstrate my point:

"They shout if there are adults speaking at the dinner table, they
interrupt you all the time and they demand the same space as adults."

Okay fine, give them their space for equality's sake, but if that's
the case, what if an adult were to interrupt you all the time? You
would consider the adult annoying and immature. You might tell them to shut up. You might even sit elsewhere so that you can have your conversation in peace. And if this is what you would do if they were adults, and you really believed in equality, then you should do the same thing if they were children.

"One preschool teacher from Stockholm wrote that the four and
five-year-olds she teaches regularly say 'You think I care!' when
asked to do something."

If this were an adult, you fail them when they don't listen in class
and they do badly as a result of that. If this were an adult, and he or she was disrupting class, you either tell them to grow up, sit down and shut up or remove the student from the classroom. If that doesn't work, you can take it up with the principal/dean. And if this is what you would do if they were adults, and you really believed in equality, then you should do the same thing if they were children.

"Just the other day a four-year-old spat at me when I asked him to
stop climbing on some shelves."

If this happened in public and it were an adult, we call the staff or the security and they deal with it. If this happened at home, you charge the adult money for fixing your shelves if they are damaged, or make him or her put things on the shelves back where they belong. If they don't have any money, you make them fix it or work them off until they can pay you back. If they refuse to comply, you evict them from your property. And if this is what you would do if they were adults, and you really believed in equality, then you should do the same thing if they were children.

"Its main message is that punishing children does not make them behave
in the long run and setting boundaries is not always the right

If you really believed in equality, you would not say this. Because
adults have boundaries too. They get punished for committing crimes. If adults misbehave in public, you stop being friends with them or have a lower opinion of them. If adults act like assholes in public, you tell them to stop. You stop hanging out with them or leave. If you live with intolerable roommates (presumably adults), you move out and find a different flat to live in or kick them out. And if this is what you would do if they were adults, and you really believed in equality, then you should do the same thing if they were children. In fact, if you really believe in equality, then children should be punished for crimes on the same basis as adults. There would be no separate considerations for juvenile crimes.

(not a specific quote, but the article mentions children throwing tantrums in general, having choice over food, TV shows, etc.)

If adults threw tantrums, made poor food choices or watch bad TV shows, they would lose friends, become unhealthy or sick, and might possibly become addicted to certain TV shows or TV in general. They would suffer the consequences. And if this is what would happen if they were adults, and you really believed in equality, then the same thing would happen if they were children.

If you got on a bus, and an adult asked you to give up your seat, you would not do it unless he or she was disabled. And if this is what you would do if they were adults, and you really believed in equality, then you should do the same thing if they were children, and only give up your seat for a child if that child was disabled.
(If you must know, I personally would also only give up my seat for disabled people regardless of age, and not because they were children. But that's a discussion for a different article if anyone is interested.)

Does this already sound ridiculous enough? Is this really the equality that Sweden envisioned? Because if you think about it, if children really did have equality like adults did, then there would be no minimum age for going to work, buying cigarettes, drinking, driving or censorship of media with pornographic content or excessive violence. But the fact is, they are there for a good reason, and it's not because there's a reason to treat children like adults.

The problem with treating children and adults with equality is that it makes a strong, baseless assumption. Namely, that children are anything like adults. The fact is, children are fundamentally different from adults. There are similarities of course, but the differences mostly have to do with things that children can't know. They don't know anything about social ettiquette or conventions, so you can't expect them to understand or react accordingly like most adults would. Children aren't born with these social expectations. Nobody is. We hope their parents will raise them to understand it, but to say that they are equal with adults is to expect them to master these social expectations--something that takes years and even decades. I just cannot see adults and children being equal because they clearly are not. And if that means we have to treat children differently from adults to make up for their inability to understand these social expectations, then so be it; it's not like I ever had that problem to begin with. And Sweden, if you're going to continue to treat children like they're entitled to everything, feel free to do so, but please don't say you're doing it for democracy or equality, because quite clearly, you are not.

PS: If anyone lives in Sweden, I'd love it if you could confirm what that article says. And whether or not my idea of what I'd do if they were adults applies, or if the culture is radically different.

Just finished beating Ace Attorney: Dual Destinies. Awesome game. Drawing Bobby Fulbright now.
Will be streaming title artwork for that game.
Also, nächste Woche fangt Connichi an, und ich habe bereits ein Pass für die drei Tage da. Und wie vorher, kennst du mich, einfach nach das iPad suchen; ich habe es noch nicht verloren, und es gibt auch neue Bilder. Einfach danach fragen...

Auch was neues: Ein neues Spiel im Entwicklung! Und auch endlich hatte es eine Webseite. Weil dieses Spiel ist ein Flash Spiel, du könntest das Beta versuchen, und Fehler melden. Ich habe auch die Vorschau und Bilder auf iPad.

Aber als du sehen kannst, ist mein Deutsch nicht so gut. Du könntest die Grammatik korrigieren, wenn du willst.

Ich freut mich euch da zu sehen. Bis bald.

And for everyone else who doesn't speak German: I'm developing a new game, and it's taking up all my time, which is why you're not seeing a lot of stuff from me. Don't worry; there will still be art and such, but it will be from a different focus, and you will still see updates and screenshots from it on the game site.
Will be streaming again tonight. But there might not be any character drawings. I'm doing some of the level BGs. Feel free to watch anyways.

I really want to spend the time to collect my thoughts on this and write a lengthy entry about it, but I've been spending too much time writing code and doing graphics for a flash game, which is probably also why you're not seeing very much. (Github project page is here:… . Feel free to beta test what I have of it by downloading the bin-debug folder and opening Citrus.swf.)

Anyways, since I don't really have the time for this, and maybe I will find time to write it up later eventually, I think I will just post a link to an angry thread on the Adobe forums about it, as I think it pretty much sums up everyone's thoughts, analyses, suggestions and criticisms about pretty much everything that's wrong with a subscription only model, especially when it applies to software tools.…

(I suggest mostly paying attention to posts from Marcus Koch and W_J_T if you just want to skim it. It is fairly long.)

TL:DR: don't bother buying into Creative Cloud, especially if you already own previous Adobe products because they'll just be a huge drain on your finances, the small updates won't be worth the amount you pay every month, you'll lose access to editing your files if you cancel your subscription, and most importantly, don't buy it because it's a powerful way of telling Adobe you don't like the way this is headed, and if they don't switch back to perpetual licenses, they will lose money. And it's not even an issue that Creative Cloud itself exists really (that's an issue, but...), it's the fact that people don't get to choose between paying a subscription to rent software tools and paying to own their software tools.

I suppose there is something I want to add to that though, which is that Adobe rationalizes that they are doing this because this is their "vision" and that they want to encourage more people to use all their other tools--well here's the problem: you don't get to offer a whole suite of programs and decide everyone has to use everything in your suite and profit off of that. You don't get to decide what people need. You are making an assumption about the actual value of a few features that some people may try and not like (and had a good reason not to try in the first place). You make a huge assumption about what people choose to use the programs for, or even what kind of business they are using those tools for. You are cramping their style. You are locking them into using something that they have no need or interest in. The fact is, people have a limited amount of time in which to try something. People use these tools for work. People might also use these tools for fun, but free time is limited. Between having to choose which tools you'd like to use, and actually spending time figuring out how they work, most people would rather choose something tried and true to get the job done, and I'd argue that people should be allowed to choose whether they want to spend their time excelling in just a few tools that will constantly be updated or being only moderately good at a wide range of tools, some of which might be discontinued from lack of interest or success. Yes it can be argued that you are doing this in an attempt to get people to try to use something so that they won't just think it's some stupid feature they don't need without even trying it, but do realize that businesses in and of themselves have limited ethical methods for convincing people to want to try something, especially if they don't see the point. What does work, however, is giving people choice and networking. If people are given the choice to use something, they might try it eventually. It might take awhile, but it's better than never. Secondly, people are more likely to try something if it's suggested to them by friends or co-workers. Because maybe people trust their friends more than they trust business advertisements. If you can get at least a few people hooked onto a new feature, and they think it's useful, they will tell their friends. Other than that, you can continue to promote the use of new features in new products by telling your friends, networking with more people, presenting them at conferences, and any other non-intrusive way of advertising a product. But if you've done all that, and people don't find a feature in some new product useful, maybe it wasn't really useful to the masses to begin with. Just accept that loss and move on. Maybe you can find an innovation elsewhere.

I wish it would just die already.

However, thanks to a discussion with a friend, I think I can share this "secret" I discovered over the weekend (Sorry other friends in Germany! I know the heat wave has already passed, but feel free to use it in the future…)

So having a fan is good and fine, but anything above 30C, and it's just blowing hot air at you. So how do you stay cool? What if you have to be at home for whatever reason and can't be at the pool? Or what if it's closed and you can't go? Hate public pools and don't own your own? Or nobody invited you to their pool party? Or you can't swim or don't like it? Fear not, there's always an alternative.

A colleague suggested stuffing your underwear in the fridge and then wearing it. Sounds nice, and I don't have to waste my fridge by sitting in it, except that clothing has low volume and a high surface area. What that means is that if you take the clothing out of the fridge, it will only stay cold for about a few seconds, and be useless at keeping you cool because the high surface area makes it easier for the heat to find spaces on your clothes and hit it (You also do notice how ice cream thankfully doesn't melt all at once; the core melts after the surface does, for example).

So I enhanced this idea by adding water to the clothing. Now you don't have to make your clothes dripping wet in order for this to work; they just have to be moist. If you make it too wet, it will probably just stick to your freezer anyways. Or if you're finding only a certain part of your body feels hot (like the back of your neck, for example), you can just wet those parts on your clothes. I originally came up with this idea by thinking about the mechanism by which sweat works, and why rain on summer days causes the temperature to go down. A friend explained to me that this works because of the high specific heating capacity of water. In fact, water is probably the only known substance on Earth with the highest heating capacity. This basically means that if you try to heat water, it takes a very long time for the water to raise its temperature. And of course this works better than sweat because sweat starts off at the same temperature as your body; its heating capacity at the temperature it currently is at is useless (except for the evaporating mechanism, but that takes too long, and some people like me find it terribly uncomfortable). So if you take your clothes, coat it with water and freeze it, it will take some time before the ice on your clothes melt, and even longer before the water even becomes warm.

A little caveat: the water causes your clothes to become stiff. It's best to unbutton your clothes and spread them as flat as possible before you freeze them so that you can put them on more quickly when you take them out of the freezer.

And if you have to sit, I suggest covering your seat with a plastic bag or some other waterproof substance.

I think this is an awesome property that water possesses. I obviously can't do this at work though. So instead, I'm going to try and line the windows with water bottles filled with cold water. Wish me luck.

Switching over to for better performance and workflow. Check back every now and then.

I'm doing a tutorial on Livestream for the GA Con. Feel free to join me.…

EDIT: The course is delayed for another 5 hours due to people in different time zones not being available to see it.

  • Listening to: various piano sonatas
  • Reading: Onely blogs
  • Playing: Zelda…

I'm doing this for the GA con at Gaia:…

  • Listening to: various piano sonatas
  • Reading: Onely blogs
  • Playing: Zelda