July 04, 2015

Create a signed app with Cordova

I wrote last week about developing apps with PhoneGap/Cordova. But one thing I didn't cover. When you type cordova build, you're building only a debug version of your app. If you want to release it, you have to sign it. Figuring out how turned out to be a little tricky.

Most pages on the web say you can sign your apps by creating platforms/android/ant.properties with the same keystore information in it that you'd put in an ant build, then running cordova build android --release

But Cordova completely ignored my ant.properties file and went on creating a debug .apk file and no signed one.

I found various other purported solutions on the web, like creating a build.json file in the app's top-level directory ... but that just made Cordova die with a syntax error inside one of its own files). This is the only method that worked for me:

Create a file called platforms/android/release-signing.properties, and put this in it:

// if you don't want to enter the password at every build, use this:

Then cordova build android --release finally works, and creates a file called platforms/android/build/outputs/apk/android-release.apk

July 02, 2015

libmypaint is ready for translation

MyPaint is well on its way to feature and string freeze, but its brush library is stable enough to be translated now.

You can help! Example status page from WebLateThe developers of WebLate, a really nice online translation tool, have offered us hosting for translations.

Translation status: Graphical status badge for all mypaint project translations
Join: https://hosted.weblate.org/engage/mypaint/

If you’re fluent in a language other than English, or know a FOSS-friendly person who is, you can help with the translation effort. Please share the link above as widely as you can, or dive in yourself and start translating brush setting texts. It’s a surprisingly simple workflow: you translate program texts one at a time resolving any discrepancies and correcting problems the system has discovered. Each text has a link back to the source code too, if you want to see where it was set up. At the end of translating into your language you get a nice fully green progress bar, a glowing sense of satisfaction, and your email address in the commit log ☺

If you want to help out and good language skills, we’d really appreciate your assistance. Helping to translate a project is a great way of learning about how it works internally, and it’s one of the easiest and most effective ways of getting involved in the Free/Open Source culture and putting great software into people’s hands, worldwide.

July 01, 2015

Web Open Font Format (WOFF) for Web Documents

The Web Open Font Format (short WOFF; here using Aladin font) is several years old. Still it took some time to get to a point, where WOFF is almost painless to use on the linux desktop. WOFF is based on OpenType style fonts and is in some way similar to the more known True Type Font (.ttf). TTF fonts are widely known and used on the Windows platform. Those feature rich kind of fonts are used for high quality font displaying for the system and local office-and design documents. WOFF aims at closing the gap towards making those features available on the web. With these fonts it becomes possible to show nice looking fonts on paper and web presentations in almost the same way. In order to make WOFF a success, several open source projects joined forces, among them Pango and Qt, and contributed to harfbuzz, a OpenType text shaping engine. Firefox and other web engines can handle WOFF inside SVG web graphics and HTML web documents using harfbuzz. Inkscape uses at least since version 0.91.1 harfbuzz too for text inside SVG web graphics. As Inkscape is able to produce PDF’s, designing for both the web and print world at the same time becomes easier on Linux.

Where to find and get WOFF fonts?
Open Font Library and Google host huge font collections . And there are more out on the web.

How to install WOFF?
For using inside inkscape one needs to install the fonts locally. Just copy the fonts to your personal ~/.fonts/ path and run

fc-cache -f -v

After that procedure the fonts are visible inside a newly started Inkscape.

How to deploy SVG and WOFF on the Web?
Thankfully WOFF in SVG documents is similar to HTML documents. However simply uploading a Inkscape SVG to the web as is will not be enough to show WOFF fonts. While viewing the document locally is fine, Firefox and friends need to find those fonts independent of the localy installed fonts. Right now you need to manually edit your Inkscape SVG to point to the online location of your fonts . For that open the SVG file in a text editor and place a CSS font-face reference right after the <svg> element like:

<style type=”text/css”>
@font-face {
font-family: “Aladin”;
src: url(“fonts/Aladin-Regular.woff”) format(“woff”);

How to print a Inkscape SVG document containing WOFF?
Just convert to PDF from Inkscape’s file menue. Inkscape takes care for embedding the needed fonts and creates a portable PDF.

In case your prefered software is not yet WOFF ready, try the woff2otf python script for converting to the old TTF format.

Hope this small post gets some of you on the font fun path.

Fedora Hubs Update!!!


The dream is real – we are cranking away, actively building this very cool, open source, socially-oriented collaboration platform for Fedora.

Myself and Meghan Richardson, the Fedora Engineering Team’s UX intern for this summer, have been cranking out UI mockups over the past month or so (Meghan way more than me at this point. :) )

Screenshot from 2015-06-23 09-24-44

We also had another brainstorming session. We ran the Fedora Hubs Hackfest, a prequel to the Fedora Release Engineering FAD a couple of weeks ago.

After a lot of issues with the video, full video of the hackfest is now finally available (the reason for the delay in my posting this :) ).

Let’s talk about what went down during this hackfest and where we are today with Fedora Hubs:

What is Fedora Hubs, Exactly?

(Skip directly to this part of the video)

We talked about two elevator pitches for explaining it:

  • It’s an ‘intranet’ page for the Fedora Project. You work on all these different projects in Fedora, and it’s a single place you can get information on all of them as a contributor.
  • It’s a social network for Fedora contributors. One place to go to keep up with everything across the project in ways that aren’t currently possible. We have a lot of places where teams do things differently, and it’s a way to provide a consistent contributor experience across projects / teams.

Who are we building it for?

(Skip directly to this part of the video)

  • New Fedora Contributors – A big goal of this project is to enable more contributors and make bootstrapping yourself as a Fedora contributor less of a daunting task.
  • Existing Fedora Contributors – They already have a workflow, and already know what they’re doing. We need to accommodate them and not break their workflows.

The main philosophy here is to provide a compelling user experience for new users that can potentially enhance the experience for existing contributors but at the very least will never disrupt the current workflow of those existing contributors. Let’s look at this through the example of IRC, which Meghan has mocked up in the form of a web client built into Fedora Hubs aimed at new contributor use:

If you’re an experienced contributor, you’ve probably got an IRC client, and you’re probalby used to using IRC and wouldn’t want to use a web client. IRC, though, is a barrier to new contributors. It’s more technical than the types of chat systems they’re accustomed to. It becomes another hurdle on top of 20 or so other hurdles they have to clear in the process of joining as a contributor – completely unrelated to the actual work they want to do (whatever it is – design, marketing, docs, ambassadors, etc.)

New contributors should be able to interact with the hubs IRC client without having to install anything else or really learn a whole lot about IRC. Existing contributors can opt into using it if they want, or they can simply disable the functionality in the hubs web interface and continue using their IRC clients as they have been.

Hackfest Attendee Introductions

(Skip directly to this part of the video)

Next, Paul suggested we go around the room and introduce ourselves for anybody interested in the project (and watching the video.)

  • Máirín Duffy (mizmo) – Fedora Engineering UX designer working on the UX design for the hubs project
  • Meghan Richardson (mrichard) – Fedora Engineering UX intern from MSU also working on the UX design for the hubs project
  • Remy Decausemaker (decause) – Fedora Community lead, Fedora Council member
  • Luke Macken (lmacken) – Works on Fedora Infrastructure, release engineering, tools, QA
  • Adam Miller (maxamillion) – Works on Release engineering for Fedora, working on build tooling and automation for composes and other things
  • Ralph Bean (threebean) – Software engineer on Fedora Engineering team, will be spending a lot of time working on hubs in the next year
  • Stephen Gallagher (sgallagh) – Architect at Red Hat working on the Server platform, on Fedora’s Server working group, interested in helping onboard as many people as possible
  • Aurélien Bompard (abompard) – Software developer, lead developer of Hyperkitty
  • David Gay (oddshocks) – Works on Fedora infrastructure team and cloud teams, hoping to work on Fedora Hubs in the next year
  • Paul Frields (sticksteR) – Fedora Engineering team manager
  • Pierre-Yves Chibon (pingou) – Fedora Infrastructure team member working mostly on web development
  • Patrick Uiterwijk (puiterwijk) – Member of Fedora’s system administration team
  • Xavier Lamien (SmootherFrOgZ) – Fedora Infrastructure team member working on Fedora cloud SIG
  • Atanas Beloborodov (nask0) – A very new contributor to Fedora, he is a web developer based in Bulgaria.
  • (Matthew Miller and Langdon White joined us after the intros)

Game to Explore Fedora Hub’s Target Users

(Skip directly to this part of the video)

We played a game called ‘Pain Gain’ to explore both of the types of users we are targeting: new contributors and experienced Fedora contributors. We started talking about Experienced Contributors. I opened up a shared Inkscape window and made two columns: “pain” and “gain:”

  • For the pain column, we came up with things that are a pain for experienced contributors the way our systems / processes currently work.
  • For the gain column, we listed out ways that Fedora Hubs could provide benefits for experienced contributors.

Then we rinsed and repeated for new contributors:


While we discussed the pains/gains, we also came up with a lot of sidebar ideas that we documented in an “Idea Bucket” area in the file:


I was worried that this wouldn’t work well in a video chat context, but I screen-shared my Inkscape window and wrote down suggestions as they were brought up and I think we came out with a useful list of ideas. I was actually surprised at the number of pains and gains on the experienced contributor side: I had assumed new contributors would have way more pains and gains and that the experienced contributors wouldn’t have that many.

Prototype Demo

(Skip directly to this part of the video)

Screenshot from 2015-06-23 12-57-27

Ralph gave us a demo of his Fedora Hubs prototype – first he walked us through how it’s built, then gave the demo.


In the README there is full explanation of how the prototype works so I won’t reiterate everything there. Some points that came up during this part of the meeting:

  • Would we support hubs running without Javascript? The current prototype completely relies on JS. Without JS, it would be hard to do widgets like the IRC widget. Some of the JS frameworks come with built-in fail modes. There are some accessibility issues with ways of doing things with JS, but a good design can ensure that won’t happen. For the most part, we are going to try to support what a default Fedora workstation install could support.
  • vi hotkeys for Hubs would be awesome. :) Fedora Tagger does this!
  • The way the widgets work now, each widget has to define a data function that gets called with a session object, and it has to return JSON-ifiable python code. That gets stored in memcached and is how the wsgi app and backend communicate. If you can write a data function to return JSON and write a template the data gets plugged into – that’s mainly what’s needed. Take a look at the stats widget – it’s pretty simple!
  • All widgets also need a ‘should_invalidate()’ function that lets the system know what kinds of information apply to which widgets. Every fedmsg has to go through every widget to see if it invalidates a given widget’s data – we were worried that this would result in a terrible performance issue, but by the end of the hackfest we had that figured out.
  • Right now the templates are ginja2, but Ralph thinks we should move to client-side (javascript) templates. The reason is that when updated data gets pushed over websockets from the bus, it can involve garbage communication any time new changes in data come across – it’s simpler that the widget doesn’t have to request the templates and instead the templates are already there in the client.
  • Angular could be a nice client-side way of doing the templates, but Ralph had heard some rumors that AngularJS 2 was going to support only Chrome, and AngularJS 1.3 and 2 aren’t compatible. nask0 has a lot of experience with Angular though and does not think v2 is going to be Chrome-only.
  • TODO: Smoother transitions for when widgets pop into view as they load on an initial load.
  • Langdon wondered if there would be a way to consider individual widgets being able to function as stand-alones on desktops or mobile. The raw zeromq pipes could be hooked up to do this, but the current design uses EventSource which is web-specific and wouldn’t translate to say a desktop widget. Fedora Hubs will emit its own fedmsgs too, so you could build a desktop widget using that as well.
  • Cache invalidation issues was the main driver of the slowness in Fedora Packages, but now we have a cache that updates very quickly so we get constant time access to delivering those pages.

Mockup Review

Screenshot from 2015-06-23 13-48-56

Next, Meghan walked us through the latest (at the time :) we have more now!) mockups for Fedora Hubs, many based on suggestions and ideas from our May meetup (the 2nd hubs video chat.)

Creating / Editing Hubs

(Skip directly to this part of the video)

First, she walked us through her mockups for creating/editing hubs – how a hub admin would be able to modify / set up their hub. (Mockup (download from ‘Raw’ and view in Inkscape to see all screens.)) Things you can modify are the welcome message, colors, what widgets get displayed, the configuration for widgets (e.g. what IRC channel is associated with the hub?), and how to add widgets, among many other things.

Meghan also put together a blog post detailing these mockups.

One point that came up here – a difference is that when users edit their own hubs, they can’t associate an IRC channel with it, but a nick and a network, to enable their profile viewers to pm them.

We talked about hub admins vs FAS group admins. Should they be different or exactly the same? We could make a new role in FAS – “hub admin” – and store it there if it’s another one. Ralph recommended keeping it simple by having FAS group admins and hub admins one and the same. Some groups are more strict about group admins in FAS, some are not. Would there be scenarios where we’d want people to be able to admin the FAS group for a team but not be able to modify the hub layout (or vice-versa?) Maybe nesting the roles – if you’re a FAS admin you can be FAS admin + hub admin, if you’re a hub admin you can just admin the hub but not the FAS group.

Another thing we talked about is theming hubs. Luke mentioned that Reddit allows admins to have free reign in terms of modifying the CSS. Matthew mentioned having a set of backgrounds to choose from, like former Fedora wallpapers. David cautioned that we want to maintain some uniformity across the hubs to help enable new contributors – he gave the example of Facebook, where key navigational elements are not configurable. I suggested maybe they could only tweak certain CSS classes. Any customizations could be stored in the database.

Another point: members vs subscribers on a hub. Subscribers ‘subscribe’ to a hub, members ‘join’ a hub. Subscribing to a hub adds it to your bookmarks in the main horizontal nav bar, and enables certain notifications for that hub to appear in your feed. We talked about different vocabulary for ‘subscribe’ vs ‘join’ – instead of ‘subscribe’ we talking about ‘following’ or ‘starring’ (as in Github) vs joining. (Breaking News :) Since then Meghan has mocked up the different modes for these buttons and added the “star” concept! See below.)


We had a bit of an extended discussion about a lot of the different ways someone could be affiliated with a team/project that has a hub. Is following/subscribing too non-committal? Should we have a rank system so you could move your way up ranks, or is it a redundant gameification given the badge system we have in place? (Maybe we can assign ranks based on badges earned?) Part of the issue here is for others to identify the authority of the other people they’re interacting with, but another part is for helping people feel more a part of the community and feel like valued members. Subscribing is more like following a news feed, being a member is more being part of the team.

Joining Hubs

(Skip directly to this part of the video)

The next set of mockups Meghan went through showed us the workflow of how a user requests membership in a given hub and how the admin receives the membership request and handles it.

We also tangented^Wtalked about the welcome message on hubs and how to dismiss or minimize them. I think we concluded that we would let people collapse them and remove them, and if they remove them we’ll give them a notification that if they want to view them at any time they can click on “Community Rules and Guidelines.”

Similarly, the notification to let the admin know that a user has requested access to something and they dismiss it and want to tend to it later – it will appear in the admin’s personal stream as well for later retrieval.

We talked about how to make action items in a user’s notification feed appear differently than informational notifications; some kind of different visual design for them. One idea that came up was having tabs at the top to filter between types of notifications (action, informational, etc.) I explained how we were thinking about having a contextual filter system in the top right of each ‘card’ or notification to let users show or hide content too. Meghan is working on mockups for this currently.

David had the idea of having action items assigned to people appear as actions within their personal stream… since then I have mocked this up:


Personal Profiles

(Skip directly to this part of the video)

Next Meghan walked us through the mockups she worked on for personal profiles / personal streams. One widget she mocked up is for personal library widgets. Other widgets included a personal badges earned display, hubs you’re a member of, IRC private message, a personal profile.

Meghan also talked about privacy with respect to profiles and we had a bit of a discussion about that. Maybe, for example, by default your library could be private, maybe your stream only shows your five most recent notifications and if someone is approved (using a handshake) as a follower of yours they can see the whole stream. Part of this is sort of a bike lock thing…. everything in a user’s profile is broadcast on fedmsg, but having it easily accessible in one place in a nice interface makes it a lot easier (like not having a lock on your bike.) One thing Langdon brought up is that we don’t want to give people a false sense of privacy. So we have to be careful about the messaging we do around it. We thought about whether or not we wanted to offer this intermediate ‘preview’ state for people’s profiles for those viewing them without the handshake. An alternative would be to let the user know who is following them when they first start following them and to maintain a roster of followers so it is clear who is reading their information.

Here’s the blog post Meghan wrote up on the joining hubs and personal profile mockups with each of the mockups and more details.

Bookmarks / main nav

(Skip directly to this part of the video)

The main horizontal navbar in Fedora Hubs is basically a bookmarks bar of the hubs you’re most interested in. Meghan walked us through the bookmarks mockups – she also covered these mockups in detail on her bookmarks blog post.


Yes. Yes, it is.

So you may be wondering when this is going to be available. Well, we’re working on it. We could always use more help….


Where’s stuff happening?

How does one help? Well, let me walk you through where things are taking place, so you can follow along more closely than my lazy blog posts if you so desire:

  • Chat with us: #fedora-hubs on irc.freenode.net is where most of the folks working on Fedora Hubs hang out, day in and day out. threebean’s hooked up a bot in there too that pushes notifications when folks check in code or mockup updates.
  • Mockups repo: Meghan and I have our mockups repo at https://github.com/fedoradesign/fedora-hubs, which we both have hooked up via Sparkleshare. (You are free to check it out without Sparkleshare and poke around as you like, of course.)
  • Code repo: The code is kept in a Pagure repo at https://pagure.io/fedora-hubs. You’ll want to check out the ‘develop’ branch and follow the README instructions to get all setup. (If I can do it, you can. :) )
  • Feature planning / Bug reporting: We are using Pagure’s issue tracker at https://pagure.io/fedora-hubs/issues to plan out features and track bugs. One way we are using this which I think is kind of interesting – it’s the first time I’ve used a ticketing system in exactly this way – is that for every widget in the mockups, we’ve opened up a ticket that serves as the design spec with mockups from our mockup repo embedded in the ticket.
  • Project tracking: This one is a bit experimental. But the Fedora infra and webdev guys set up http://taiga.fedoraproject.org – an open source kanban board – that Meghan and I started using to keep track of our todo list since we had been passing post-it notes back and forth and that gets a bit unwieldy. It’s just us designers using it so far, but you are more than welcome to join if you’d like. Log in with your Fedora staging password (you can reset it if it’s not working and it’ll only affect stg) and ping us in #fedora-hubs to have your account added to the kanban board.
  • Notification Inventory: This is an inventory that Meghan started of the notifications we’ve come up with for hubs in the mockups.
  • Nomenclature Diagram for Fedora Hubs: We’ve got a lot of neat little features and widgets and bits and bobs in Fedora Hubs, but it can be confusing talking about them without a consistent naming scheme. Meghan created this diagram to help sort out what things are called.

How can I help?

Well, I’m sure glad you asked. :) There’s a few ways you can easily dive in and help right now, from development to design to coming up with cool ideas for features / notifications:

  1. Come up with ideas for notifications you would find useful in Fedora Hubs! Add your ideas to our notification inventory and hit us up in #fedora-hubs to discuss!
  2. Look through our mockups and come up with ideas for new widgets and/or features in Fedora Hubs! The easiest way to do this is probably to peruse the mini specs we have in the pagure issue tracker for the project. But you’re free to look around our mockups repo as well! You can file your widget ideas in Pagure (start the issue name with “Idea:” and we’ll review them and discuss!
  3. Help us develop the widgets we’ve planned! We’ve got little mini design specs for the widgets in the Fedora Hubs pagure issue tracker. If a widget ticket is unassigned (and most are!), it’s open and free for you to start hacking on! Ask Meghan and I any questions in IRC about the spec / design as needed. Take a look at the stats widget that Ralph reviewed in explaining the architecture during the hackfest, and watch Ralph’s demo and explanation of how Hubs is built to see how the widgets are put together.
  4. There are many other ways to help (ask around in #fedora-hubs to learn more,) but I think these have a pretty low barrier for starting up depending on your skillset and I think they are pretty clearly documented so you can be confident you’re working on tasks that need to get done and aren’t duplicating efforts!

    Hope to see you in #fedora-hubs! :)

June 30, 2015

Parsing Option ROM Firmware

A few weeks ago an issue was opened on fwupd by pippin. He was basically asking for a command to return all the hashes of the firmwares installed on his hardware, which I initially didn’t really see the point of doing. However, after doing a few hours research about all the malware that can hide in VBIOS for graphics cards, option ROM in network cards, and keyboard matrix EC processors I was suitably worried also. I figured fixing the issue was a good idea. Of course, malware could perhaps hide itself (i.e. hiding in an unused padding segment and masking itself out on read) but this at least raises the bar from a security audit point of view, and is somewhat easier than opening the case and attaching a SPI programmer to the chip itself.

Fast forward a few nights. We can now verify ATI, NVIDIA, INTEL and ColorHug firmware. I’ve not got any other hardware with ROM that I can read from userspace, so this is where I need your help. I need willing volunteers to compile fwupd from git master (or rebuild my srpm) and then run:

cd fwupd/src
find /sys/devices -name rom -exec sudo ./fwupdmgr dump-rom {} \;

All being well you should see something like this:

/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/rom -> f21e1d2c969dedbefcf5acfdab4fa0c5ff111a57 [Version:]

If you see something just that, you’re not super helpful to me. If you see Error reading from file: Input/output error then you’re also not so helpful as the kernel module for your hardware is exporting a rom file and not hooking up the read vfuncs. If you get an error like Failed to detect firmware header [8950] or Firmware version extractor not known then you’ve just become interesting. If that’s you, can you send the rom file to richard_at_hughsie.com as an attachment along with any details you know about the hardware. Thanks!


Interview with Livio Fania


Could you tell us something about yourself?

I’m Livio Fania. I’m Italian Illustrator living in France.

Do you paint professionally, as a hobby artist, or both?

I paint professionally.

What genre(s) do you work in?

I make illustrations for press, posters and children books. My universe is made by geometrical shapes, stylized characters and flashy colors.

Whose work inspires you most — who are your role models as an artist?

I like the work of João Fazenda, Riccardo Guasco and Nick Iluzada among many others.

What makes you choose digital over traditional painting?

I did not take a definite choice. Even if I work mainly digitally, I still have a lot of fun using traditional tools such as colored pencils, brush pens and watercolors. Besides, in the 90% of cases I draw by hand, I scan, and just at the end of the process I grab my graphic tablet stylus.

I do not think that working digitally means to be faster. On the contrary, I can work more quickly by hand, especially in the first sketching phases. What digital art allows is CONTROL all over the process. If you keep your layer stack well organized, you can always edit your art without losing the original version, and this is very useful when your client asks for changes. If you work with traditional tools and you drop your ink in the wrong place, you can’t press Ctrl+z.


How did you find out about Krita?

I discovered Krita through a video conference posted on David Revoy’s blog. Even if I don’t particularly like his universe, I think he is probably the most influential artist using FLOSS tools, and I’m very grateful to him for sharing his knowledge with the community. Previously, I used to work with MyPaint, mainly for its minimalist interface which was perfect for the small laptop I had. Then I discovered that Krita was more versatile and better developed, so I took some time to learn it and now I could not do without it.

What was your first impression?

At first I thought it was not the right tool for me. Actually, most digital artists use Krita for its painting features, like blending modes and textured brushes, which allow to obtain realistic light effects. Personally, I think that realism can be very boring and that is why I paint in a stylized way with uniform tints. Besides, I like to bound my range of possibilities in a set of limited elements: palettes of 5-8 colors and 2-3 brushes. So at the beginning I felt like Krita had too many options for me. But little by little I adapted the GUI to my workflow. Now I really think everybody can find their own way to use Krita, no matter the painting style they use.

What do you love about Krita?

Two elements I really love:
1) The favourite presets docker which pops up with right click. It contains everything you need to keep painting and it is a pleasure to control everything with a glance.
2) The Composition tab, which allows to completely change the color palette or experiment with new effects without losing the original version of a drawing.

What do you think needs improvement in Krita? Is there anything that really annoys you?

I think that selections are not intuitive at all and could be improved. When dealing with complex selections, it is time-consuming to check the selecting mode in the option tab (replace, intersect, subtract) and proceed accordingly. Especially considering that by default the selecting mode is the same you had when you used the tool last time (but in the meantime you probably forgot it). I think it would be much better if every time a selection tool is taken, it would be be in “normal” mode by default, and then one can switch to a different modes by pressing Ctrl/Shift.

What sets Krita apart from the other tools that you use?

Krita is by far the most complete digital painting tool developed on Linux. It is widely customizable (interface, workspaces, shortcuts, tabs) and it offers a very powerful brush engine, even compared to proprietary applications. Also, a very important aspect is the that the Krita foundation has a solid organization and develops it in a continuous way thanks to donations, Kickstarter campaigns etcetera. This is particularly important in the open source community, where we have sometimes well designed projects which disappear because they are not supported properly.

If you had to pick one favourite of all your work done in Krita so far, what would it be, and why?

The musicians in the field.

What techniques and brushes did you use in it?

As i said, I like to have limited presets. In this illustration I mostly used the “pastel_texture_thin” brush which is part of the default set of brushes in Krita. I love its texture and the fact that it is pressure sensitive. Also, I applied a global bitmap texture on an overlay layer.

Where can people see more of your work?


Anything else you’d like to share?

Yes, I would like to add that I also release all my illustrations under a Creative Commons license, so you can Download my portfolio, copy it and use it for non-commercial purposes.

June 29, 2015

Approaching string freeze and beta release cycle

It’s time to start putting the next release together, folks!

I would like to announce a freeze of all translated strings on Sat 11th July 2015, and then begin working on the first beta release properly. New features raised as a Github Pull Request by the end of Sat 4th July stand a chance of getting in, but midnight on that day is the deadline for new code submissions if they touch text the user will see on screen.

The next release will be numbered 1.2.0; we are currently in the alpha phase of development for it, but that phase will end shortly.

Fixing the remaining alpha-cycle bugs is going well. We currently only have four bugs left in the cycle milestone, and that number will diminish further shortly. The main goal right now is to merge and test any pending small features that people want to get into 1.2.0, and to thoroughly spellcheck and review the English-language source strings so that things will be better for our translators.

Expect announcements about the translation effort, and dates for beta releases shortly.

Just Say It!

While I love typing on small on screen keyboards on my phone, it is much easier to just talk. When we did the HUD we added speech recognition there, and it processed the audio on the device giving the great experience of controlling your phone with your voice. And that worked well with the limited command set exported by the application, but to do generic voice, today, that requires more processing power than a phone can reasonably provide. Which made me pretty excited to find out about HP's IDOL on Demand service.

I made a small application for Ubuntu Phone that records the audio you speak at it, and sends it up to the HP IDOL on Demand service. The HP service then does the speech recognition on it and returns the text back to us. Once I have the text (with help from Ken VanDine) I set it up to use Content Hub to export the text to any other application that can receive it. This way you can use speech recognition to write your Telegram notes, without Telegram having to know anything about speech at all.

The application is called Just Say It! and is in the Ubuntu App Store right now. It isn't beautiful, but definitely shows what can be done with this type of technology today. I hope to make it prettier and add additional features in the future. If you'd like to see how I did it you can look at the source.

As an aside: I can't get any of the non-English languages to work. This could be because I'm not a native speaker of those languages. If people could try them I'd love to know if they're useful.

Chollas in bloom, and other early summer treats

[Bee in cholla blossom] We have three or four cholla cacti on our property. Impressive, pretty cacti, but we were disappointed last year that they never bloomed. They looked like they were forming buds ... and then one day the buds were gone. We thought maybe some animal ate them before the flowers had a chance to open.

Not this year! All of our chollas have gone crazy, with the early rain followed by hot weather. Last week we thought they were spectacular, but they just kept getting better and better. In the heat of the day, it's a bee party: they're aswarm with at least three species of bees and wasps (I don't know enough about bees to identify them, but I can tell they're different from one another) plus some tiny gnat-like insects.

I wrote a few weeks ago about the piñons bursting with cones. What I didn't realize was that these little red-brown cones are all the male, pollen-bearing cones. The ones that bear the seeds, apparently, are the larger bright green cones, and we don't have many of those. But maybe they're just small now, and there will be more later. Keeping fingers crossed. The tall spikes of new growth are called "candles" and there are lots of those, so I guess the trees are happy.

[Desert willow in bloom] Other plants besides cacti are blooming. Last fall we planted a desert willow from a local native plant nursery. The desert willow isn't actually native to White Rock -- we're around the upper end of its elevation range -- but we missed the Mojave desert willow we'd planted back in San Jose, and wanted to try one of the Southwest varieties here. Apparently they're all the same species, Chilopsis linearis.

But we didn't expect the flowers to be so showy! A couple of blossoms just opened today for the first time, and they're as beautiful as any of the cultivated flowers in the garden. I think that means our willow is a 'Rio Salado' type.

Not all the growing plants are good. We've been keeping ourselves busy pulling up tumbleweed (Russian thistle) and stickseed while they're young, trying to prevent them from seeding. But more on that in a separate post.

As I write this, a bluebird is performing short aerobatic flights outside the window. Curiously, it's usually the female doing the showy flying; there's a male out there too, balancing himself on a piñon candle, but he doesn't seem to feel the need to show off. Is the female catching flies, showing off for the male, or just enjoying herself? I don't know, but I'm happy to have bluebirds around. Still no definite sign of whether anyone's nesting in our bluebird box. We have ash-throated flycatchers paired up nearby too, and I'm told they use bluebird boxes more than the bluebirds do. They're both beautiful birds, and welcome here.

Image gallery: Chollas in bloom (and other early summer flowers.

June 28, 2015


A couple of FreeCAD architecture/BIM related questions that I get often: Is FreeCAD ready enough to do serious BIM work? This is a very complex question, and the answer could be yes or no, depending on what's important to you. It of course also depends on what is BIM for you, because clearly enough, there isn't a universal...

June 24, 2015

Introducing the Linux Vendor Firmware Service

As some of you may know, I’ve spent the last couple of months talking with various Red Hat partners and other OpenHardware vendors that produce firmware updates. These include most of the laptop vendors that you know and love, along with a few more companies making very specialized hardware.

We’ve now got a process, fwupd, that is capable of taking the packaged update and applying it to the hardware using various forms of upload mechanism. We’ve got a specification, AppStream, which is used to describe the updates and provide metadata for what firmware updates are available to be installed. What we were missing was to “close the circle” and provide a web service for small and medium size vendors to use to upload new firmware and make it available to Linux users.

Microsoft already provides such a thing for vendors to use, and it’s part of the Microsoft Update service. From the vendors I’ve talked to, the majority don’t want to run any tools on their firmware to generate metadata. Most of them don’t even want to commit to hosting the metadata or firmware files in the same place forever, and with a couple of exceptions actually like the Microsoft Update model.

I’ve created a simple web service that’s being called Linux Vendor Firmware Service (perhaps not the final name). You can see the site in action here, although it’s not terribly useful or exciting if you’re not a hardware vendor.

If you are vendor that produces firmware and want an access key for the beta site, please let me know. All firmware uploaded will be transferred to the final site, although I’m still waiting to hear back from Red Hat legal about a longer version of the redistribution agreement.

Anyway, comments very welcome, thanks.

designing openType‐features UI /intro

This blog post kicks off my involvement with bringing openType features to F/LOSS (typo‐)graphical software. I will explain why this is a special, complicated project, followed by the approach and structure I will apply to this design project and finish with what to expect as deliverables.

a bit of a situation

First things first. It is quite likely that when you are reading this, you know what openType features in fonts are. But just in case you don’t, here is a friendly, illustrated explanation of some of the features, without putting you straight into corporate specification hell. The reason I said ‘some’ will become clear below.

What is interesting is that there is a riot going on. The 800‑pound gorillas of (typo‐)graphical software—the adobe creative suite applications—have such bad and disparate UI for handling openType features that a grass‐roots protest movement started among typographers and font designers to do something about it. What followed was a a petition and a hasty promise by adobe to do better—in the future.

meanwhile in Toronto…

These events prodded Nathan Willis into action, because ‘open‐source applications aren’t any better in this regard.’ He organised a openType workshop at this year’s LGM to get a process started to change that. I went there because this is smack in the middle of one of my fields of specialisation: interaction for creatives. As you can read in Nathan’s report, I got immediately drawn into the UI discussion and now we have a loose‐knit project.

The contents and vibe of the questions, and my answers, in the UI discussion all pointed in a certain direction, that I was only able to name a day later: harmonised openType features for all F/LOSS (typo‐)graphical applications definitely has an infrastructure component.

the untouchables

Pure infrastructure—e.g. tap water, electricity, telecoms—offers its designers some unique challenges:

everybody uses it
and everybody’s needs are equally important; there is no opportunity to optimise the design for the specific needs of user groups.
nobody cares
usage is ubiquitous, i.e. we all do not even register that we are using this stuff all the time—until it stops working, then we miss it a hundred times a day. This makes it very hard to research; no recollection, feelings or values are connected to infrastructure, just entitlement.
anyplace, anywhere, anytime
there is no specific contextual information to work with: why is it used; what is the goal; what does it mean in the overall scheme of things; how much is a little, and a lot; it is used sparsely, all the time, at regular intervals, in bursts? It all depends and it all happens. Just deal with it, all of it.
millions of use cases
(not that I consider use cases a method that contributes positively to any software project, but‐) in the case of infrastructure something funny and instructive happens: after a week or two of exploration and mapping, the number of use cases grows exponentially towards a million and… keeps on growing. I have seen this happen, it is like peeling an onion and for every layer you peel off, the number goes up by an order of magnitude. These millions of use cases are an expression of everybody using it anyplace, anywhere, anytime.
heterogeneous capabilities
this is not always the case, but what is available can vary, a lot. For instance public transport: how many connections (incl. zero) are available for a given trip—and how fast, frequent and comfortable these are—is set by the network routes and timetables. An asked‑for capability is on offer, or not. It all depends and it all happens. Just deal with it, all of it.

I have worked as design lead on two infrastructure projects. One was Nokia dual‑SIM, the other openPrinting, where we designed printing dialogs for all linux users (everyone), as used in 10.000 applications (anyplace, anywhere, anytime), connected to 10.000 different printer models (heterogeneous capabilities). I dubbed it the project with five million use cases.

Ah, and since both application and printer configure the available options of the print dialog, there are potentially 100 million configurations. Even if in reality the variability is far less (say, just 1% on both application and printer side; i.e. 100 significantly different printer models and 100 apps that add serious, vital printing options), then it is still an overwhelming 10.000 configurations.

drowning, not waving

In my experience, designing infrastructure is very demanding. All the time one switches between making the big, abstract plan for everything, and designing, minutely, one of many details in complete isolation. Mid‑level interaction design, the journeyman, run‑of‐the‑mill, lay‑out‐a‑screen level, is completely missing.

It is like landscaping a featureless dessert, where every grain of sand is a detail that has to be dealt with. With no focus on particular users, no basis for research, no context, no just‑design‐the‐example, millions of use cases and highly variable capabilities, I have seen very capable design colleagues lose their bearings and give up.

back at the ranch

Enough war stories. How large is this infrastructure component of openType features in (typo‐)graphical software? Let’s check the list:

  • everybody uses it—nope. Whether the user groups turn out to be defined real narrow or quite wide—a matter of vision—they will have in common that all of them know their typesetting. That is a craft, not common knowledge.
  • nobody cares—well, soon they won’t. Right now there is upheaval because nothing is working. As soon as users get a working solution in the programs they use, it will become as interesting as the streetlights in your street.
  • anyplace, anywhere, anytime—right on! This has to work in (typo‐)graphical software; all of it—even the kind I have never heard of, or that will be invented in five years from now. All we know, is that serious typesetting is performed there by users, on any length of text selection.
  • millions of use cases—not quite. The limited user group provides the breaks here. But there is no such limit from the application side; on the contrary: most of these are (open‐ended) tools for creatives. Just thinking about how flexible a medium text is, for information or shapes, gives me the confidence to say that 10.000 use cases could be compiled, if someone would sit down and do it.
  • heterogeneous capabilities—hell yeah! OpenType‐features support in fonts is all over the place and not just because of negligence. First there is the kaleidoscopic diversity of scripts used around the world, most of which you and I have never heard of. Latin script is just the tip of the iceberg. Furthermore, what is supported, and how each supported feature is actually realised, is completely up to the font designer. The openType‐features standard is open‐ended and creates opportunities for adding sophistication. This is only limited by the combined imagination of the font design community.

Adding that up, we get a score of 3&half out of 5. By doing this exercise I have just found out that openType features in (typo‐)graphical software is 70% infrastructural. This is what I meant with that it is a special, complicated project.

structure—the future

In projects like these structuring the design work is make‑or‐break; either we set off in the right direction, or never get to any destination—not even a wrong one. The structure I use is no secret. Here is my adaptation for this project:

A product vision is not that easy to formulate for pure infrastructure; it tends to shrink towards ‘because it’s there.’ For instance at openPrinting the vision was ‘printing that just works.’ I still regret not having twisted some arms to get a value statement added to that. There were times that this value void was keeping us from creating true next‐generation solutions.

Apart from ‘what’s the value?’ also ‘who is this for?’ needs to be clarified; as we saw earlier, openType features is not for everyone. The identity question, ‘what is it we are making?’ may be a lot less spectacular, but it needs to be agreed. I will take this to the Create mailing list first, mainly to find out who are the ‘fish that swim upfront’, i.e. the people with vision and drive. Step two is an online vision session, resulting in a defined vision.

The deliverable is a to‑the‐point vision statement. If you want to get a good picture of what that entails, then I recommend you read this super‐informative blog post. Bonus: it is completely font‐related.

we want the funk, the whole funk, nothing but the funk

A deep understanding of the functionality is the key to success in this project. I already got burned once with openType features in the Metapolator project. Several font designers told me: ‘it is only a bunch of substitution rules.’ Until it turned out it isn’t. Then at the LGM meeting another surprise complication surfaced. Later I briefly check the specification and there is yet another.

This is what I meant before with that friendly page explaining some of the features. I do not trust it to be complete (and it is only Latin‐centric, anyway). As interaction architect I will have to be completely on top of the functionality, never having to rely on someone else to explain me what ‘is in the box.’ This means knowing the openType standards.

Central to it is the feature tags specification and the feature definition syntax. This contains both the material for understanding of how complicated it all can get and the structures that I can use to formulate UI solutions. It is one of the few aspects that are firm and finite in this project.

The deliverable is a functionality overview, written up in the project wiki.

talking heads

I will do user research, say interview half a dozen users, to gain insight into the act of typesetting, the other aspect that is firm and finite in this project. Which users to recruit depends on what is defined in the product vision. Note that the focus is on the essence of typesetting, while ignoring its specific role in the different (typo‐)graphical applications, and not get swamped by the latter’s diversity.

The deliverable is notes of interest from the interviews, written up in the wiki.

I look forward to an exchange with F/LOSS (typo‐)graphical applications via the Create list. This is not intended to get some kind of inventory of all the apps and how different they are. In this project that is taken as abstract and infinite—the good old infrastructural way.

What I want to find out is in how many different ways openType features must, or can, be integrated in the UIs of (typo‐)graphical applications. In blunt terms: how much space is there available for this stuff, what shape does it have and what is the duty cycle (permanently displayed, or a pop‑up, or…)? These diverse application needs are clustered into just enough UI models (say, six) and used below.

The deliverable is the UI models, written up in the wiki.

getting an eyeful

Then it is time to do an expert evaluation of existing openType‐features UI and all these UI ideas offered by users when the petition did its rounds. All of these get evaluated against—

  • the product vision: does it realise the goals? Is it appropriate for the defined user groups?
  • the functionality: can it cope with the heterogeneous capabilities?
  • the user research: how tuned is it for the essence of typesetting?
  • the UI models: how well does it fit with each model?

All of it gets analysed, then sorted into the good, the bad and the ugly. There will be a tiny amount of gold, mostly in the form ideas and intentions—not really what one would call a design—and a large catalog of what exactly not to do.

The deliverable is notes of interest from the evaluation, written up in the wiki.

warp drive

Then comes the moment to stop looking backwards and start working forwards; to start creating the future. First a solutions model is made. This is a combination of a broad‐strokes solution that cuts the project down to manageable proportions and a defined approach how to deal with the rest, the more detailed design work.

The next stage is to design a generic solution, one that already deals with all of it, all the hairy stuff: text selections of any length, all the heterogeneous capabilities, the typesetting workflow, clear representation of all openType features available and their current state. This will be specified in a wiki, in the form of UI patterns.

With the generic solution in place it will be real clear for the central software library in this small universe, HarfBuzz, which new capabilities it will need to offer to F/LOSS (typo‐)graphical software.

home straight

The final design phase is to work out the generic solution for each UI model. These will still be toolkit agnostic (not specific for KDE or gnome) and, btw, for desktop UI‐only (touch is a whole ’nother kettle of fish). This will also be specified in the wiki.

With this, every (typo‐)graphical software project can go to the wiki, pick a UI model that most matches their own UI structure and see a concrete UI design that, with a minimum of adaptations, they can implement in their own application. They will find that HarfBuzz fully supports their implementation.

While working on Metapolator in the last year I had good experience with sharing what I was doing almost every day I was working on it, through its community. There were encouragement, ideas, discussions, petitions and corrections—all useful. I think this can be replicated on the Create list.

June 23, 2015

Cross-Platform Android Development Toolkits: Kivy vs. PhoneGap / Cordova

Although Ant builds have made Android development much easier, I've long been curious about the cross-platform phone development apps: you write a simple app in some common language, like HTML or Python, then run something that can turn it into apps on multiple mobile platforms, like Android, iOS, Blackberry, Windows phone, UbuntoOS, FirefoxOS or Tizen.

Last week I tried two of the many cross-platform mobile frameworks: Kivy and PhoneGap.

Kivy lets you develop in Python, which sounded like a big plus. I went to a Kivy talk at PyCon a year ago and it looked pretty interesting. PhoneGap takes web apps written in HTML, CSS and Javascript and packages them like native applications. PhoneGap seems much more popular, but I wanted to see how it and Kivy compared. Both projects are free, open source software.

If you want to skip the gory details, skip to the summary: how do Kivy and PhoneGap compare?


I tried PhoneGap first. It's based on Node.js, so the first step was installing that. Debian has packages for nodejs, so apt-get install nodejs npm nodejs-legacy did the trick. You need nodejs-legacy to get the "node" command, which you'll need for installing PhoneGap.

Now comes a confusing part. You'll be using npm to install ... something. But depending on which tutorial you're following, it may tell you to install and use either phonegap or cordova.

Cordova is an Apache project which is intertwined with PhoneGap. After reading all their FAQs on the subject, I'm as confused as ever about where PhoneGap ends and Cordova begins, which one is newer, which one is more open-source, whether I should say I'm developing in PhoneGap or Cordova, or even whether I should be asking questions on the #phonegap or #cordova channels on Freenode. (The one question I had, which came up later in the process, I asked on #phonegap and got a helpful answer very quickly.) Neither one is packaged in Debian.

After some searching for a good, comprehensive tutorial, I ended up on a The Cordova tutorial rather than a PhoneGap one. So I typed:

sudo npm install -g cordova

Once it's installed, you can create a new app, add the android platform (assuming you already have android development tools installed) and build your new app:

cordova create hello com.example.hello HelloWorld
cordova platform add android
cordova build


Error: Please install Android target: "android-22"
Apparently Cordova/Phonegap can only build with its own preferred version of android, which currently is 22. Editing files to specify android-19 didn't work for me; it just gave errors at a different point.

So I fired up the Android SDK manager, selected android-22 for install, accepted the license ... and waited ... and waited. In the end it took over two hours to download the android-22 SDK; the system image is 13Gb! So that's a bit of a strike against PhoneGap.

While I was waiting for android-22 to download, I took a look at Kivy.


As a Python enthusiast, I wanted to like Kivy best. Plus, it's in the Debian repositories: I installed it with sudo apt-get install python-kivy python-kivy-examples

They have a nice quickstart tutorial for writing a Hello World app on their site. You write it, run it locally in python to bring up a window and see what the app will look like. But then the tutorial immediately jumps into more advanced programming without telling you how to build and deploy your Hello World. For Android, that information is in the Android Packaging Guide. They recommend an app called Buildozer (cute name), which you have to pull from git, build and install.

buildozer init
buildozer android debug deploy run
got started on building ... but then I noticed that it was attempting to download and build its own version of apache ant (sort of a Java version of make). I already have ant -- I've been using it for weeks for building my own Java android apps. Why did it want a different version?

The file buildozer.spec in your project's directory lets you uncomment and customize variables like:

# (int) Android SDK version to use
android.sdk = 21

# (str) Android NDK directory (if empty, it will be automatically downloaded.)
# android.ndk_path = 

# (str) Android SDK directory (if empty, it will be automatically downloaded.)
# android.sdk_path = 

Unlike a lot of Android build packages, buildozer will not inherit variables like ANDROID_SDK, ANDROID_NDK and ANDROID_HOME from your environment; you must edit buildozer.spec.

But that doesn't help with ant. Fortunately, when I inspected the Python code for buildozer itself, I discovered there was another variable that isn't mentioned in the default spec file. Just add this line:

android.ant_path = /usr/bin

Next, buildozer gave me a slew of compilation errors:

kivy/graphics/opengl.c: No such file or directory
 ... many many more lines of compilation interspersed with errors
kivy/graphics/vbo.c:1:2: error: #error Do not use this file, it is the result of a failed Cython compilation.

I had to ask on #kivy to solve that one. It turns out that the current version of cython, 0.22, doesn't work with kivy stable. My choices were to uninstall kivy and pull the development version from git, or to uninstall cython and install version 0.21.2 via pip. I opted for the latter option. Either way, there's no "make clean", so removing the dist and build directories let me start over with the new cython.

apt-get purge cython
sudo pip install Cython==0.21.2
rm -rf ./.buildozer/android/platform/python-for-android/dist
rm -rf ./.buildozer/android/platform/python-for-android/build

Buildozer was now happy, and proceeded to download and build Python-2.7.2, pygame and a large collection of other Python libraries for the ARM platform. Apparently each app packages the Python language and all libraries it needs into the Android .apk file.

Eventually I ran into trouble because I'd named my python file hello.py instead of main.py; apparently this is something you're not allowed to change and they don't mention it in the docs, but that was easily solved. Then I ran into trouble again:

Exception: Unable to find capture version in ./main.py (looking for `__version__ = ['"](.*)['"]`)
The buildozer.spec file offers two types of versioning: by default "method 1" is enabled, but I never figured out how to get past that error with "method 1" so I commented it out and uncommented "method 2". With that, I was finally able to build an Android package.

The .apk file it created was quite large because of all the embedded Python libraries: for the little 77-line pong demo, /usr/share/kivy-examples/tutorials/pong in the Debian kivy-examples package, the apk came out 7.3Mb. For comparison, my FeedViewer native java app, roughly 2000 lines of Java plus a few XML files, produces a 44k apk.

The next step was to make a real mini app. But when I looked through the Kivy examples, they all seemed highly specialized, and I couldn't find any documentation that addressed issues like what widgets were available or how to lay them out. How do I add a basic text widget? How do I put a button next to it? How do I get the app to launch in portrait rather than landscape mode? Is there any way to speed up the very slow initialization?

I'd spent a few hours on Kivy and made a Hello World app, but I was having trouble figuring out how to do anything more. I needed a change of scenery.

PhoneGap, redux

By this time, android-22 had finally finished downloading. I was ready to try PhoneGap again.

This time,

cordova platforms add android
cordova build
worked fine. It took a long time, because it downloaded the huge gradle build system rather than using something simpler like ant. I already have a copy of gradle somewhere (I downloaded it for the OsmAnd build), but it's not in my path, and I was too beaten down by this point to figure out where it was and how to get cordova to point to it.

Cordova eventually produced a 1.8Mb "hello world" apk -- a quarter the size of the Kivy package, though 20 times as big as a native Java app. Deployed on Android, it initialized much faster than the Kivy app, and came up in portrait mode but rotated correctly if I rotated the phone.

Editing the HTML, CSS and Javascript was fairly simple. You'll want to replace pretty much all of the default CSS if you don't want your app monopolized by the Cordova icon.

The only tricky part was file access: opening a file:// URL didn't work. I asked on #phonegap and someone helpfully told me I'd need the file plugin. That was easy to find in the documentation, and I added it like this:

cordova plugin search file
cordova plugin add org.apache.cordova.file

My final apk, for a small web app I use regularly on Android, was almost the same size as their hello world example: 1.8Mb. And it works great: phonegap had no problem playing an audio clip, something that was tricky when I was trying to do the same thing from a native Android java WebView class.

Summary: How do Kivy and PhoneGap compare?

This has been a long article, I know. So how do Kivy and PhoneGap compare, and which one will I be using?

They both need a large amount of disk space for the development environment. I wish I had good numbers to give you, but I was working with both systems at the same time, and their packages are scattered all over the disk so I haven't found a good way of measuring their size. I suspect PhoneGap is quite a bit bigger, because it uses gradle rather than ant and because it insists on android-22.

On the other hand, PhoneGap wins big on packaged application size: its .apk files are a quarter the size of Kivy's.

PhoneGap definitely wins on documentation. Kivy has seemingly lots of documentation, but its tutorials jumped around rather than following a logical sequence, and I had trouble finding answers to basic questions like "How do I display a text field with a button?" PhoneGap doesn't need that, because the UI is basic HTML and CSS -- limited though they are, at least most people know how to use them.

Finally, PhoneGap wins on startup speed. For my very simple test app, startup was more or less immediate, while the Kivy Hello World app required several seconds of startup time on my Galaxy S4.

Kivy is an interesting project. I like the ant-based build, the straightforward .spec file, and of course the Python language. But it still has some catching up to do in performance and documentation. For throwing together a simple app and packaging it for Android, I have to give the win to PhoneGap.

Font Features Land in Inkscape Trunk

I’ve just landed basic font features support in the development version of Inkscape. What are font features and why should you be excited? (And maybe why should you not be too excited.)

The letter combination 'st' shown without a ligature and with a 'historical' ligature.

Font Features

Font features support allows one to enable (or disable) the OpenType tables within a given font, allowing you to select alternative glyphs for rendering text.

A series of examples showing the same text with and without applying various OpenType tables.

A sample of font features in action. The font is Linux Biolinum which has reasonable OpenType tables. Try the SVG (with WOFF).

The new CSS Fonts Module Level 3 adds a variety of CSS properties for defining which OpenType tables to enable/disable (as well as having nice examples of each property’s use — this is one of the more readable W3C specifications). Inkscape trunk supports the ‘font-variants-liguatures’, ‘font-variant-caps’, ‘font-variant-numeric’, ‘font-variant-position’, and ‘font-feature-settings’ properties. The properties can be set under the Variants tab in the Text and Font dialog.

The 'Variants' Tab in the 'Text and Fonts' dialog showing a series of buttons to select which font features are enabled.

The Variants tab in the Text and Font dialog.

Why you shouldn’t be too excited

Being able to enable various font features within a font is quite exciting but there are quite a few caveats at the moment:

  • One must use a trunk build of Inkscape linked with the latest unstable version of Pango (1.37.1 or greater).
  • Font feature support in fonts is usually minimal and often buggy. It’s hard to know what OpenType tables are available in which fonts.
  • Browser support is sparse. Firefox has rather good support. Chrome support seems limited to ligatures.
  • Correct display of alternative glyphs requires that the same font as used in content creation is used for rendering. On the Web the best way to do this is to use WOFF but Inkscape has no support for using User fonts (this is a future goal of Inkscape but will require considerable work).


I would like to thank: Behdad Esfahbod, maintainer of Pango for adding the code to Pango to make accessing the OpenType tables possible. Thanks as well to Matthias Clasen and Akira Togoh who are the source of the patch to Pango. Thanks also to all the people that supported the Inkscape Hackfest in Toronto where I was able to meet and discuss Pango issues with Behdad in person and also where the idea of adding font feature support to Inkscape germinated.

June 22, 2015

Penultimate Kickstarter voting results

Two weeks before voting closes we’re at a response rate of 91.38%: 604 of 661 possible votes. If you’re eligible to vote and haven’t done so yet, you have until 10am CEST on July 6 to make the response rate even higher! Note that no-award backers who have pledged 15 euros or more can also vote, though they haven’t received a survey. If this is you, please send mail to irina@krita.org, either with your vote or to ask for the list.

We collected enough pledges for nine whole stretch goals. Two 1500-euro backers each added a stretch goal of their own: one already in the list (“Update the look & feel of the layer docker” which is at #6, meaning that #10, “Stacked brushes” got in as well) and one off-list, “Lazy Brush” — you can see how it works here.

The table below shows the penultimate results, with in the last column the related phabricator task. To access phabricator you will need a KDE identity account, which can be made at identity.kde.org. If you have a forum account, you already have made a KDE identity account. Use this login information in the ‘LDAP’ login area. The phabricator tasks are where we discuss the requirements of each feature. This means that all considerations about the implementation are mentioned here. You can subscribe to a phabricator task to get e-mail updates on it.

Votes Stretch goal Phabricator Task
0 N/A Extra Lazy Brush: interactive tool for coloring the image in a couple of strokes T372
1 116 19.02% 10. Animated file formats export: animated gif, animated png and spritemaps T116
2 54 8.85% 8. Rulers and guides: drag out guides from the rulers and generate, save and load common sets of guides. Save guides with the document. T114
3 50 8.20% 1. Multiple layer selection improvements T105
4 47 7.70% 19. Make it possible to edit brush tips in Krita T125
5 41 6.72% 21. Implement a Heads-Up-Display to manipulate the common brush settings: opacity, size, flow and others. T127
6 38 6.23% 2. Update the look & feel of the layer docker panel (1500 euro stretch goal) T106
7 36 5.90% 22. Fuzzy strokes: make the stroke consistent, but add randomness between strokes. T166
8 33 5.41% 5. Improve grids: add a grid docker, add new grid definitions, snap to grid T109
9 31 5.08% 6. Manage palettes and color swatches T112
10 28 4.59% 18. Stacked brushes: stack two or more brushes together and use them in one stroke T124

And these didn’t make it, but we’re keeping them for next time:

  Votes   Stretch goal
11 23 3.77% 4. Select presets using keyboard shortcuts
12 19 3.11% 13. Scale from center pivot: right now, we transform from the corners, not the pivot point.
13 18 2.95% 9. Composition helps: vector objects that you can place and that help with creating rules of thirds, spiral, golden mean and other compositions.
14 18 2.95% 7. Implement a Heads-Up-Display for easy manipulation of the view
15 16 2.62% 20. Select textures on the fly to use in textured brushes
16 9 1.48% 15. HDR gradients
17 9 1.48% 11. Add precision to the layer move tool
18 8 1.31% 17. Gradient map filter
19 5 0.82% 16. On-canvas gradient previews
20 5 0.82% 12. Show a tooltip when hovering over a layer with content to show which one you’re going to move.
21 3 0.49% 3. Improve feedback when using more than one color space in a single image
22 3 0.49% 14. Add a gradient editor for stop gradients

June 20, 2015

Call to testers

We work to restoration of multimedia support within Stellarium (playback for audio and video).

Stellarium can playback for audio and video on Linux and Windows (partially?) at the moment. Development team has prepared binary packages for 3 supported platforms for public testing of this feature.

Please check work of GZ_videotest_MP4.ssc and GZ_videotest_WMV.ssc scripts within Stellarium on Windows/OS X (Download page: https://launchpad.net/stellarium/+download)

Ubuntu users (14.10+) can use this PPA for testing - ppa:alexwolf/stellarium-media

Thank you!

RShell tool

Hi :)

As stated by this request report by AbnRanger:

It can be incredibly hard to create some thickness or a shell, in 3D Coat without a tool that gives us that ability, in the Retopo Room. You can see from the video, we currently have to send a one-sided mesh out to another app that has the tool, or spend needless time trying to replicate that, in 3D Coat.

Seems soon will no longer be the case ;)


June 19, 2015

Krita and Bug Week!

It’s been a while since we made a new build of Krita… So, here’s Krita! In all the hectics surrounding the Kickstarter campaign, we worked our tails off to add new features, improvements and fixes, and that caused considerable churn in the code. And that, in turn, meant that the was a bit, well, dot zero! So here’s a with the following improvements:


  • Implemented a composite RGB curve for Curves filter
  • Adding a Fish Eye Vanishing Point assistant.
  • Added concentric ellipse assistant.
  • Have the Settings dialog’s default button only set the defaults for the  currently selected settings page.
  • Added memory configuration options, including the location of the temporary scratch files
  • Add a profiler option: https://userbase.kde.org/Krita/Manual/Preferences/Performance
  • Create a copy of a currently open image (wish 348256)
  • Add a one way pressure sensor(in the sensors) (wish 344753 )
  • Show memory consumption in the statusbar

Fixed Bugs

  • Only set the resolution using tiff tags if they exist, this caused issues with Krita saving JPEG files to .kra.
  • BUG:349078 Fix trimming an image under Filter Layers
  • BUG:324505,294122 Fix Adjustment layers composition
  • Bug 349185 Fix explicitly showing the cursor when the Stabilizer is active
  • Fix showing a floating message when switching MDI subwindows
  • BUG:348533 Fixed a bug when the tools became disabled after new document creation
  • BUG:331708,349108 Fix a crash when redoing actions
  • BUG:348737 Fix copy/pasto: fade isn’t speed
  • BUG:345762 Mirror View now correctly remembers which subwindow is mirrored.
  • BUG:349058 Fixed bug where rulers were only visible on the canvas that was active when the option was first toggled. Fixed similar bugs with Mirror View and Wrap Around Mode.
  • BUG:331708 Fix a crash when trying to redo after canceling a stroke
  • Fixes an issue where some config files may not be picked up by the config system.
  • BUG:299555 Change cursor to “forbidden” when active layer is locked or can’t be edited with the active tool.
  • BUG:345564 Don’t warn about image file being invalid after user cancels “Background Image (overrides color)” dialog while configuring Krita
  • BUG: 348886:Don’t scroll up the list while adding or removing resources to the bundle
  • fix default presets for bristle engine, restoring scale value to 1
  • fixed a small bug in wdglayerproperties.ui that made the color profile not show up properly in the layer properties dialog. Patch by Amadiro, thanks!
  • BUG: 348507 Fix issue with import PDF dialog resolution
  • BUG:347004 Filter preview button difficult to see state
  • BUG:345754 Fixes perspective assistant lockup
  • Remember current meta-data author.
  • BUG:348726 Be more careful when ‘smart’ merging metadata
  • BUG:348652 Correctly initialize the temporary swap file
  • Fix loading PSD files saved in OpenCanvas



Now, that’s not to say that is perfect… And the increased interest in Krita has also led to an increase in reported bugs! We’ve got about 315 open bugs now, which is a record!

In fact, we need help. We need help with what’s called bug triage: checking which bugs are actually duplicates of each other and which bugs are actually reproducible and which bugs are more like wishes than bugs.

And then we need to do something about the bugs that are proper, valid and reproducible! So, we propose to have our first 2015 bug weekend. We’d like to invite everyone to install Krita and go through some bugs in  the bug list and help us triage!

Here’s the list of bugs that need urgent triaging:

Unconfirmed, reopened, need-info Krita Bugs

Let’s get this list to zero!

And of course, there are also bugs that are already confirmed, but might have duplicated in the list above:

Confirmed Krita Bugs

We’re not looking for new bugs — but if you find one, take a moment to read Dmitry’s guide on bug reporting.

Here’s the Bug Hunter Howto, too. Join us this weekend and help us get the bug count down and the bug list manageable! In the coming two weeks, the developers will be busy fixing bugs so we can have a really stable base for all the kickstarter work!

Mosquitoes-hunter by David Revoy

Bug hunter by David Revoy

June 18, 2015

rethinking text handling in GIMP /1

At the beginning of this month, most of the open source graphics applications community convened for the libre graphics meeting in Vienna, Austria. After a one‐year hiatus, the GIMP team was back in force, and so were two of its UI team members, my colleague Kate Price and yours truly. We delivered a lecture about our most recent GIMP project, which we will write up in three parts. Here is the first.

beyond the text tool

This project was the first one in our series of open internships. I had created these last year, combining mentoring, open working and getting serious interaction design work done for the GIMP project.

Dominique Schmidt worked with us on this project, which goal is to rethink everything associated with text handling in GIMP. It would have been cool to have Dominique on stage in Vienna, telling the story himself. But he had this holiday booked; to a tropical destination; and surprisingly he insisted on going. Since projects means teamwork at m+mi works, Kate and I were instead fully able to report from the trenches.

The text project is quite a wide‐ranging one and at the moment of writing it is in‑progress. So there are going to be no magic bullets, or detailed interaction design specs to be presented—yet. Certainly a wide‐ranging project demands a structured approach, else it goes nowhere. It is exactly this structure that we will use to present it here, in this and the follow‑up blogposts.


Step one: compiling a vision for the project. With text—and editing, styling it—being so ubiquitous in computers, it is very easy to get stuck in nuts‑and‐bolts discussions about it. The trick is to concentrate on the big issue: what is the meaning of text in GIMP work? What we needed was a vision: ‘what is it; who is it for and where is the value?’

The vision is compiled out of quite a few elements: of course it has to align with the overall product vision of GIMP; we interviewed the GIMP developers who have worked on text; it includes the GEGL future of non‑linear working; and we held an informal user survey on the developer mailing list—plenty of users there—about the essence of working with text.

building blocks

To show how the resulting vision, worked out, let’s discuss it line‑by‑line:

  • ‘Text in GIMP is always part of the composition—unless it is an annotation.’

This puts text thoroughly in its proper place; it is never the end‑goal, by itself. Also defined is a separate annotation workflow: users adding notes for themselves or for collaboration purposes. This sets us up for a small side project: annotations in GIMP.

  • ‘The canvas is not a page; there is no such thing as paging in GIMP.’

I love this one. The first part was phrased by Dominique, the second by Kate. This puts clear limits on what text functionality GIMP needs: beyond paragraphs, but short of page‐related stuff. Note that ‘paging’ is a verb, it is about working with pages and managing pages.

  • ‘Text is both for reading and used as graphical shapes; meta data in text—mark‑up, semantics—are not supported.’

This puts on equal footing that text is for information transport and just shapes; an excellent example where the GIMP context makes a big difference. The second part excludes any meta data based processing: e.g. auto‐layouting or auto‐image manipulation.

And now, we get to the value section:

  • GIMP users get: minute control over typography and the layout of text on the canvas.’

If there is one thing we learned from surveying users, it is the essence of typography: to control exactly, down to the (sub)pixel, the placement of every text glyph. This control is exerted via the typographical parameters: margins, leading, tracking, kerning, etc. GIMP needs to support the full spectrum of these and support top‑notch typographical workflows.

  • GIMP users get: internationalisation of text handling, for all locales supported by unicode.’

This thoroughly expands our horizon, we have to look at use of text word‐wide: many different writing systems, different writing directions. But it also sets clear limits: if it cannot be represented in unicode, it is not in scope.

  • GIMP users get: text remains editable forever.’

This anchors the GEGL dream in the project: no matter how many heavy graphical treatments have been applied on top of a piece of text, one can always change it and see the treated result immediately. But also included here is a deep understanding of projects and workflows. E.g. Murphy’s law: a mistake in the text is always found at the last moment. Or the fact that clients always keep changing the text, even after the delivery date.

  • GIMP users get: super‐fast workflow, when they are experienced.’

This reflects that GIMP is for graphics production work and the speed‑of‐use requirements that accompany that.

it’s a wrap

And there we have it. Here they are again, together as the vision statement:

  • Text in GIMP is always part of the composition—unless it is an annotation;
  • the canvas is not a page; there is no such thing as paging in GIMP;
  • text is both for reading and used as graphical shapes; meta data in text—mark‑up, semantics—are not supported.

GIMP users get:

  • minute control over typography and the layout of text on the canvas;
  • internationalisation of text handling, for all locales supported by unicode;
  • text remains editable forever;
  • super‐fast workflow, when they are experienced.

Nice and compact, so that it can be used as a tool. But these seven simple sentences pack a punch. Just formulating them has knocked this project into shape. The goals are clear from hereon.

And on that note, I hand over to Kate, who will continue our overview of the steps we took, in part two.

June 17, 2015

Low poly extrude and scale prototype

This is quick alpha test for low poly modeling tools in 3DCoat.
Still there’s a lot of room for improvement from shader to UI, also in selection since there’s currently no selection mechanism rather than freeze values. Is something must be reworked in the future.


June 15, 2015

Interview with Graphos


Could you tell us something about yourself?

My name is Przemek Świszcz. I also publish as Graphos. I’m a drawer and a graphic artist. I do comic strips and illustrations and create in 3D as well.

Do you paint professionally, as a hobby artist, or both?

I draw professionally but it is also my hobby. And fortunately, I can bring it together.

What genre(s) do you work in?

I’m interested mostly in fantasy, science fiction and humorous topics.

Whose work inspires you most — who are your role models as an artist?

Among the many excellent artists, my favorite creators are Grzegorz Rosiński, Janusz Christa, Simon Bisley and Don Rosa. However, not only comics artists but also many others are inspiration for me.

How and when did you get to try digital painting for the first time?

This is connected with computer games. I’m a gamer myself so I combined these two hobbies. That’s the reason why I draw such forms as concept art. I decided to try my hand at digital.

What makes you choose digital over traditional painting?

I still use some traditional techniques like watercolor, acrylic and drawing ink. But digital gives endless possibilities and enables editing. Most of all, it is very handy. I have all works on the computer immediately, there is no need to scan and process. This is especially important with regard to comic books.

How did you find out about Krita?

I found out about Krita when I bought a graphic tablet and I was looking for an appropriate drawing tool. I read lots of positive opinions about this program on the Internet forum www.blender.pl, so I decided to try.

What was your first impression?

My first impression of this program was “Wow, it is really good, very handy and intuitive”.

What do you love about Krita?

I like the fact that Krita is free and being updated and added to all the time, It’s a great and professional tool to create comic strips.

What do you think needs improvement in Krita? Is there anything that really annoys you?

Krita is already a really good computer program. Some errors and crashes appears from time to time but with every new version it’s getting better. I think that tools to create animation could be a great novelty. I’m looking forward to the next version of Krita.

What sets Krita apart from the other tools that you use?

I can already do most of my work with Krita. I use other programs occasionally because some of them have useful options for processing drawings and photos.

If you had to pick one favourite of all your work done in Krita so far, what would it be, and why?

That could be the drawing with the dragon and dwarf or fantasy illustrations in cartoon style with the brawny man. It gives me lots of fun, both drawing it and finding out new possibilities of Krita.

What techniques and brushes did you use in it?

I mainly used draft pencils and draft brushes which turn out to be my favourite tools in Krita.

Where can people see more of your work?

The majority of my works you can find here: http://drawcrowd.com/graphos/projects

Anything else you’d like to share?

Thank you for inviting me. I hope that Krita will acquire more and more users because it is worth it, keep it up :)

June 11, 2015

designing interaction for creative pros /1

Last week at LGM 2015 I did a lecture on one of my fields of specialisation: designing interaction for creatives. There were four sections and I will cover each of them in a separate blog post. Here is part one.

The lecture coincided with the launch of the demo of Metapolator, a project I have been working on since LGM 2014. All the practical examples will be from that project and my designs for it.

see what I mean?

‘So what’s Metapolator?’ you might ask. Well, there is a definition for that:

‘Metapolator is an open web tool for making many fonts. It supports working in a font design space, instead of one glyph, one face, at a time.

‘With Metapolator, “pro” font designers are able to create and edit fonts and font families much faster, with inherent consistency. They gain unique exploration possibilities and the tools to quickly adapt typefaces to different media and domains of use.

‘With Metapolator, typographers gain the possibility to change existing fonts—or even create new ones—to their needs.

‘Metapolator is extendible through plugins and custom specimens. It contains all the tools and fine control that designers need to finish a font.’

theme time

That is the product vision of Metapolator, which I helped to define the moment I got involved with the project. You can read all about that in the making‑of.

One of the key questions answered in a product vision is: who is this for? And with that, I have arrived at what this blog post is about:

Products need a clear, narrow definition of their target users groups. Software for creatives needs a clear definition whether it is for professionals, or not.

Checking the vision, we see that Metapolator user groups are well defined. They are ‘“pro” font designers’ and ‘typographers.’ The former are pro by definition and the latter come with their own full set of baggage; they are pro by implication.

define it like a pro

But what does pro actually mean? And why is it in quotes in the Metapolator vision? Well, the rather down‐to‐earth definition of professional—earning money with an occupation—is not helping us here. There are many making‐the‐rent professionals who are terrible hacks at what they do.

Instead it is useful to think of pros as those who have mastered a craft—a creative craft in our case. Examples of these are drawing, painting; photographing, filming, writing, animating, and editing these; sewing, the list goes on and on.

Making software for creative pros means making it for those who have worked at least 10.000 hours in that field, honing their craft. And also making it for for the apprentices and journeymen who are working to get there. These two groups do not need special ‘training wheels’ modes; they just need to get their hands dirty with the real thing.

the point

The real world just called and left a message:

making it for pros comes at a price.

First of all, it is very demanding—I will cover this in the follow‑up posts. Second, it puts some real limits on who else you can make it for. Making it for…

is perfectly focussed, to meet those demanding needs.
pros + enthusiasts
(the latter also known as prosumers.) This compromises how good one can make it for pros; better keep in check how sprawling that enthusiast faction is allowed to be.
pros + enthusiasts + casual users
forget it, because pros and casual have diametrically opposite needs. There is no room in the UI for both, and with room I mean screen real estate and communication bandwidth.
pros + casual users
for the same reasons one can royally forget about this one too. Enough said.

the fall‐out

You might think: ‘duh, that speaks for itself, just make the right choice and roll with it.’ If it was only that easy. My experience has been that projects really do not like to commit here, especially when they know the consequences outlined above. And when they did make a choice, I have seen the natural tendency to worm out of it later.

I guess that having clear goals is scary for quite a few folks. Having focussed user groups means saying ‘we don’t care about you’ to vast groups of people. Only the visionary think of that as positive.

Furthermore, clear goals are a fast and effective tool to weed out bad ideas, on an industrial scale. That’s good for the product, but upsets the people who came up with these ideas. So they renegotiate on the clear goals, attacking the root of the rejection.

no fudging!

In short: define it; is your software for creatives made for pros, or not? Then compile a set of coherent user groups. In the case of Metapolator the ‘pro’ font designers and typographers fit together beautifully. Once defined, stick with it.

That’s it for part one. Here is part two: a tale of cars.

[editor’s note: Gee Peter, this post contains a lot of talk about pros, but where is the creative angle?] True, the gist this post is valid for all professionals. The upcoming parts will feature more ‘creative’ content, more Metapolator, and illustrations.

writing a product vision for Metapolator

A week ago I kicked off my involvement with the Metapolator project as I always do: with a product vision session. Metapolator is an open project and it was the first time I did the session online, so you have the chance to see the session recording (warning: 2&half hours long), which is a rare opportunity to witness such a highly strategic meeting; normally this is top‐secret stuff.

boom boom

For those not familiar with a product vision, it is a statement that we define as ‘the heartbeat of your product, it is what you are making, reduced down to its core essence.’ A clear vision helps a project to focus, to fight off distractions and to take tough design decisions.

To get a vision on the table I moderate a session with the people who drive the product development, who I simply ask ‘what is it we are making, who is it for, and where is the value?’ The session lasts until I am satisfied with the answers. I then write up the vision statement in a few short paragraphs and fine-tune it with the session participants.

To cut to the chase, here is the product vision statement for Metapolator:

‘Metapolator is an open web tool for making many fonts. It supports working in a font design space, instead of one glyph, one face, at a time.
‘With Metapolator, “pro” font designers are able to create and edit fonts and font families much faster, with inherent consistency. They gain unique exploration possibilities and the tools to quickly adapt typefaces to different media and domains of use.
‘With Metapolator, typographers gain the possibility to change existing fonts—or even create new ones—to their needs.
‘Metapolator is extendible through plugins and custom specimens. It contains all the tools and fine control that designers need to finish a font.’

mass deconstruction

I think that makes it already quite clear what Metapolator is. However, to demonstrate what goes into writing a product vision, and to serve as a more fleshed out vision briefing, I will now discuss it sentence by sentence.

‘Metapolator is an open web tool for making many fonts.’
  • There is no standard template for writing a product vision, the structure it needs is as varied as the projects I work with. But then again it has always worked for me to lead off with a statement of identity; to start answering the question ‘what is it we are making?’ And here we have it.
  • open or libre? This was discussed during the session. At the end Simon Egli, Metapolator founder and driving force, wanted to express that we aim beyond just libre (i.e. open source code) and that ‘open’ also applies to the vibe of the tool on the user side.
  • web‑based: this is not just a statement of the technology used, of the fact that it runs in the browser. It is also a solid commitment that it runs on all desktops—mac, win and linux. And it implies that starting to use Metapolator is as easy as clicking/typing the right URL; nothing more required.
  • tool or application? The former fits better with the fact that font design and typography are master crafts (I can just see the tool in the hand of the master).
  • making or designing fonts? I have learned in the last couple of weeks that there is a font design phase where a designer concentrates on shaping eight strategic characters (for latin fonts). This is followed by a production phase where the whole character set is fleshed out, the spacing between all character pairs set, then different weights (e.g. thin and bold) are derived and maybe also narrow end extended variants. This phase is very laborious and often outsourced. ‘Making’ fonts captures both design and production phases.
  • many fonts: this is the heart of the matter. You can see from the previous point that making fonts is up to now a piecemeal activity. Metapolator is going to change that. It is dedicated to either making many different fonts in a row, or a large font family, even a collection of related families. The implication is that in the user interaction of Metapolator the focus is on making many fonts and the user needs for making many fonts take precedence in all design decisions.
‘It supports working in a font design space, instead of one glyph, one face, at a time.’
  • The first sentence said that Metapolator is going to change the world—by introducing a tool for making many fonts, something not seen before; this second one tells us how.
  • supports is not a word one uses lightly in a vision. ‘Supports XYZ’ does not mean it is just technically possible to do XYZ; it means here that this is going to be a world‐class product to do XYZ, which can only be realised with world‐class user interaction to do XYZ.
  • design space is one of these wonderful things that come up in a product vision session. Super‐user Wei Huang coined the phrase when describing working with the current version of Metapolator. It captures very nicely the working in a continuum that Metapolator supports, as contrasted with the traditional piecemeal approach, represented by ‘one glyph, one face, at a time.’ What is great for a vision is that ‘design space’ captures the vibe that working with metapolator should have, but that it is not explicit on the realisation of it. This means there is room for innovation, through technological R&D and interaction design.
‘With Metapolator, “pro” font designers are able to create and edit fonts and font families much faster, with inherent consistency.’
  • With “pro” font designers we encounter the first user group, starting to answer ‘who is it for?’ “Pro” is in quotes because it is not the earning‑a‐living part that interests us, it is the fact that these people mastered a craft.
  • create and edit balances the two activities; it is not all about creating from scratch.
  • fonts and font families balances making very different fonts with making families; it is not all about the latter.
  • much faster is the first value statement, starting to answer ‘where is the value?’ Metapolator stands for an impressive speed increase in font design and production, by abolishing the piecemeal approach.
  • inherent consistency is the second value statement. Because the work is performed by users in the font design space, where everything is connected and continuous, the conventional user overhead of keeping everything consistent disappears.
‘They gain unique exploration possibilities and the tools to quickly adapt typefaces to different media and domains of use.’
  • exploration possibilities is part feature, part value statement, part field of use and part vibe. All these four are completely different things (e.g. there is inherently zero value in a feature), captured in two words.
  • quickly adapt is a continuation of the ‘much faster’ value statement above, highlighting complementary fields of use for it.
‘With Metapolator, typographers gain the possibility to change existing fonts—or even create new ones—to their needs.’
  • And with typographers we encounter the second user group. These are people who use fonts, with a whole set of typographical skills and expertise implied.
  • possibility to change is the value statement for this user group. This is a huge deal. Normally typographers have neither the skills, nor the time, to modify a font. Metapolator will open up this world to them, with that fast speed and inherent consistency that was mentioned before.
  • create new goes one step further than the previous point. Here we have now a commitment to enable more ambitious typographers (that is what ‘even’ stands for) to create new fonts.
  • to their needs is a context we should be aware of. These typographers will be designing something, anything with text, and that is their main goal. Changing or creating a font is for them a worthwhile way to get it done. But it is only part of their job, not the job. Note that the needs of typographers includes applying some very heavy graphical treatments to fonts.
‘Metapolator is extendible through plugins and custom specimens.’
  • extendible through plugins is one realisation of the ‘open’ aspect mentioned in the first sentence. This makes Metapolator a platform and its extendability will have to be taken into account in every step of its design.
  • custom specimens is slightly borderline to mention in a vision; you could say it is just a feature. I included it because it programs the project to properly support working with type specimens.
‘It contains all the tools and fine control that designers need to finish a font.’
  • all the tools: this was the result of me probing during the vision session whether Metapolator is thought to be part of a tool chain, or independent. This means that it must be designed to work stand‑alone.
  • fine control: again the result of probing, this time whether Metapolator includes the finesse to take care of those important details, on a glyph level. Yes, it all needs to be there.
  • that designers need makes it clear by whose standards the tools and control needs to be made: that of the two user groups.

this space has intentionally been left blank

Just as important as what it says in a product vision is what it doesn’t say. What it does not say Metapolator is, Metapolator is explicitly not. Not a vector drawing application, not a type layout program, not a system font manager, not a tablet or smartphone app.

The list goes on and on, and I am sure some users will come up with highly creative fields of use. That is up to them, maybe it works out or they are able to cover their needs with a plugin they write, or have written for them. For the Metapolator team that is charming to hear, but definitely out of scope.

User groups that are not mentioned, i.e. everybody who is not a “pro” font designer or a typographer, are welcome to check out Metapolator, it is free software. If their needs overlap partly with that of the defined user groups, then Metapolator will work out partly for them. But the needs of all these users are of no concern to the Metapolator team.

If that sounds harsh, then remember what a product vision is for: it helps a project to focus, to fight off distractions and to take tough design decisions. That part starts now.

designing interaction for creative pros /2

Part two of my LGM 2015 lecture (here is part one). It is a tale of cars. For many years I have had these images in my head and used them in my design practice. Let’s check them out.

freude am fahren

First up is the family car:

a catalog shot of a family car source: netcarshow.com

It stands for general software. It is comfortable, safe and general‐purpose. All you need to use it is a minimum of skills, familiarity and practice—in the case of cars this is covered by qualifying for a driving licence.

In the case of software, we are talking casual and enthusiast use. A good example is web browsers. One can start using them with a minimum of skills and practice. After gaining some experience one can comfortably drive use a browser on a daily basis. If a pro web browser exists, then it has escaped my radar.

(It would make a very interesting project, a pro web browser. But first a product maker would have to stand up with a solid vision of pro web browsing; its user groups; and some big innovation that is valuable for these users.


When I think of creative pro interfaces, I think of this:

a rally car blasting around a corner on a rallystage in nature source: imgbuddy.com

The rally car. It is still a car, but… different. It is defined by performance. And from that, we can learn a couple of things.

speed, baby

First, creative pros work fast. They ‘wield the knife’ without doubt. A telltale sign of mastery is the speed of execution. I have this in mind all the time when designing for creative pros.

I vividly remember one of the earliest LGMs, Andy Fitzsimon went on stage and demonstrated combining pixel and vector in one image. The pace was impressive, Andy was performing nearly two operations per second.

Bam bam bam bam. At a tempo of 120 beats per minute; the solid tempo of marching bands and disco. That is the rhythm I aim to support, when designing for creative pros.

command and control

Second, creative pros really know their material, the medium they work with. They can, and need to, work with this material as direct and intimate as possible, in order to fulfil creative or commecial goals. This all can be technology‐assisted, as it is with software, but the technology has to stay out of the way, so that it does not break the bond between master and material.

The material I am talking about is that of film, graphics, music, animation, garments, et cetera. These can be digital, yes. However data and code of the software‐in‐use are not part of a creative pro’s material. Developers are always shocked, angry, then sad to learn this.

Thus Metapolator, has been designed for font designers and typographers who know what makes a font and what makes it tick. They know the role of the strokes, curves, points, the black and the white, and of the spacing. They are experienced in shaping these to get results. It is this material that—by design—Metapolator users access, just that it is organised such that they can work ten times faster.

dog eat dog

Third, it’s a competitive world. Creatives pros are not just in business. Also in zero‐budget circles there are real fun and/or prestigious projects where exactly those with proven creative performance, and ability to deliver, get asked.

Tools and software are in constant competition, also in the world of F/LOSS. It is a constant tussle: which ones provide next‐generation workflows with more speed and/or more room for creativity? Only competitive tools make masters competitive.

the point

Now that we got the picture, here is the conflict. The rules—the law and industry mores—that make good family cars may be a bad idea to apply to rally cars. And what makes rally cars competitive, may simply be illegal for family cars.

Every serious software platform has its HIG (human interface guidelines). It is the law, a spiritual guide and a huge source of security for developers. That is, for general software. It is only partly authoritative for software for creative pros. Because truly sticking to the HIG, while done all in good faith, will render creative pro software non‐competitive.

vorsprung durch technik

Rally cars contain custom parts, handmade from high performance materials like aluminium, titanium, carbon, etc. This is expensive and done because nothing off‐the‐shelf is sufficient.

Similarly creative pro software contains custom widgets, handmade at great expense—in design and development. For a decade I have witnessed that it is a force of nature to end up in that situation. Not for the sake of being cool or different, but all in the name of performance.

tough cookie

So, with loose laws and a natural tendency for custom widgets, can you do just what you like when you make creative pro software? Well no. It is tough, you still have to do the right thing. If this situation makes you feel rather lost, without guidance, then reach out and find yourself an interaction designer who really knows this type of material. Make them your compass.

picture show

To illustrate all this, let’s look at some of my designs for Metapolator.

of a glyph—surrounded by two others—all the points that make up its     skeleton are connected by outward radiating lines to big circular handles

Speed, baby! Big handles to select and move individual points on the skeleton of a glyph (i.e. direct control of the material). During a brainstorm session with Metapolator product visionary Simon Egli, he noticed how the points could be connected by rigid sticks to big handles.

I worked out the design with big (fast) handles available for furious working, but out of the way of the glyph, so it can be continuously evaluated (unbroken workflow).

four sliders for mixing fonts, one is reversed and has its thumb aligned     with another slider

This is a custom slider set for freely mixing master fonts—metapolation—to make new fonts. In this case four fonts, but it has been designed to easily scale up to nine or more; a Metapolator strength (vis‑à‐vis the competition).

One of the sliders—‘Alternate’—is in an “illegal” configuration; it is reversed. This is done to implement the rule that the mix of fonts has to always add up to 100%. There is special coupled behaviour between the sliders to ensure that.

The design of this part included a generous amount of exploration and several major revisions. Standard widgets and following the HIG would not deliver that every sliders setting maps to one unique font mix. Apart from a consistency goal, that is also about maximising input resolution. So I broke some rules and went custom.

a crossing 2-D axies system coupled to a single axis, with at least     3 fonts on each axis, with a font family and a single font instance placed     on them

This is also a metapolation control. In this case a three‐dimensional one involving eight master fonts. Working with that many fonts is really a pro thing; you have to know what you are doing and have the experience to set up, identify and pick the ‘good font’ results.

The long blue arrow is a font family, with nine or so fonts as members. The whole family can be manipulated as one entity (i.e. placed and spanned in this 3D space) as can each member font individually.

glyphs a, b and c set in 3 different fonts, with point selections across them

Final example: complex selections. Across three different fonts and three different glyphs, several points have been selected. Now they can be manipulated at the same time. That is definitely not consumer‑grade.

If that looks easy, I say ‘you’re welcome.’ It takes serious planning ahead in the design to allow this interaction; for the three fonts to appear, editable, at the same time; for deep selections within several glyphs to be possible and manageable—the big handles‑on‐sticks help also here.

vroom, vroom

In short: if there is one thing that I want you to take away from this blog post, then it is that image of the rally car. How different its construction, deployment and handling are. Making software for creative pros means making a product that is definitely not consumer‑grade.

That’s it for part two. Go straight to part three: 50–50, equal opportunities.

design lessons with Daft Punk

I am sure you have noticed the Daft Punk marketing master plan that is taking over all media channels at the moment. And I admit that I am happy to consume—and inhale—anything (semi‐)intelligent that is being written about them.

Yesterday I read this Observer interview with the ‘notoriously shy French duo.’ Afterwards, intuition told me there was something vaguely familiar about what they had said. I checked again and sure enough, plenty of it applies to (interaction) design.

punk rules, OK?

Below are Daft Punk quotes I lifted from the article, followed by what I associate with each. There are also a couple of cameo appearances by hit‑production legend Nile Rodgers.

‘The music that’s being done today has lost its magic and its poetry because it’s rooted in everyday life and is highly technological.’

Wow, not the most hands‑on quote to start with. But I swore that I’d present them in the order they appear in the article. With the mentioned ‘magic and poetry’, I associate fantastic design work. This means sweeping solutions, for which there needs to be at least one designer on the project with a big‐picture view.

Being constantly ‘rooted in everyday life’—e.g. relying on testing (A/B or usability); or working piecemeal, or driven by user requests, or in firefighter mode—shortens the horizons and shrinks the goals. It surely programs the project for mediocrity, i.e. humdrum, incremental solutions.

Every user has to deal every day with software that ‘is highly technological.’ Everybody thinks this sucks. Making software is highly technological when one is staring at code; when thinking about code; when taking prototyping capabilities into account; when technology informs the interaction, verbatim. Designing great interaction means not making any of these mistakes.

‘In early interviews they came across as suspicious and aloof. “It’s because you’re 18 and you feel maybe guilty: why are we chosen to do these things?” says Thomas. “There’s definitely reasons to feel less uncomfortable now. It’s one thing to say you’re going to do it and another to have done it for 20 years.”’

Now that is the voice of experience talking. The first part of it is this early phase; fresh out of school and real (work) life is starting. This suspicion of one’s own talents, entering a company, scene or industry and expecting the folks around you to be like you, see things like you. And then they don’t. Very confusing, who is wrong here?

The second part is having ‘done it for 20 years.’ If that involved a portfolio of successful work; continuous self‐development; the discovery of what a difference ‘being experienced’ makes and getting to know a few peers, then it has become more comfortable to be a designer. Just don’t get too comfortable; make sure every new project you take on challenges and develops you.

‘The only secret to being in control is to have it in the beginning. Retaining control is still hard, but obtaining control is virtually impossible.’

The first level where this holds is getting a design implemented. Quite often developers like to first put some temporary—and highly technological—interaction while they sort out the non‑UI code. The real design will be implemented later. Then time ticks away, the design lands in a drawer and the ‘temporary’ UI gets shipped.

I do not think this is a malicious trick, but it happens so often that I do not buy it anymore. The only secret to getting interaction design implemented is to do it in the beginning.

The second level is that of the overall collaboration; ‘obtaining control is virtually impossible,’ no matter how big a boost a designer has given the project. So one has to start out with control from the beginning, it has to be endowed by the project leadership. And then one has to work hard to retain it.

‘Guy‑Man, who designed the artwork, says that Thomas is the “hands‑on technician” while he is the “filter”: the man who stands back and says oui or non.’

Filter is the stuff designers are made of. In the case of interaction designers it means filtering out of all the things users say, the things they actually need. It means saying non to many things that are simply technologically possible, but useless, and oui to exactly that what realises the product, addresses users needs and is, yes, technologically possible.

Being the filter does not always make you friends, having to say non to cool‐sounding initiatives that in the bigger scheme of things are incredibly unhelpful. But being a yes‑man makes an ineffective designer, with non‑designed results.

Making software is not a game with unlimited time and resources; user interaction is not one with unlimited screen space and communication bandwidth. A filter is crucial.

‘“The genius is never in the writing, it’s in the rewriting,” says Rodgers. “Whenever they put out records I can hear the amount of work that’s gone into them—those microscopically small decisions that other people won’t even think about. It’s cool, but they massage it so it’s not just cool—it’s amazing.”’

I learned some years ago that it is not only the BIG plans and sweeping solutions that make a master designer. It is also in the details. All the tiny details.

All these ‘microscopically small decisions’ have to be taken in the way that strengthen the overall design, or else it will crumble to dust. This creates tension with all the collaborators, who ‘won’t even think about’ these details. They cannot see the point, the crumbling. Masters do.

‘We wish people could be influenced by our approach as much as our output. It’s about breaking the rules and doing something different rather than taking some arrangements we did 10 years ago that have now become a formula.’

Design is not a formula, not a sauce you pour over software. Design is a process, performed by those who can. A designer cannot tell upfront what the design will be like, but knows where to start, what to tackle and when it is done. That sounds trivial, but for non‑designers these four points work exactly opposite.

Apply the design process to a unique (i.e. non‑copycat) project and you will get an appropriate and unique design. Blindly applying this design to another project is by definition inappropriate.

‘“Computers aren’t really music instruments,” he sniffs. “And the only way to listen to it is on a computer as well. Human creativity is the ultimate interface. It’s much more powerful than the mouse or the touch screen.”’

This quote hits the nail on the head by setting the flow of creativity between humans as the baseline and then noting how computer interfaces are completely humbled by it. It is too easy to forget about this when your everyday world is making software.

The truth about software for designers (of music, graphics and other media) is that not much of it is designed—the interaction I mean, although it may look cool. Being software for a niche market makes it armpit of usability material: developers talking directly to users, implementing their feature request in a highly technological way.

To make an end to this sad state of affairs, a design process needs to be introduced that is rooted in a complete—but filtered—understanding of the activity called human creativity.

‘Enjoying the Hollywood analogy, Thomas says Daft Punk were the album’s screenwriters and directors while the guest performers were the actors, but actors who were given licence to write their own lines.’

I am also enjoying that analogy, and the delicate balance that is implied. On the one hand, interaction designers get to create the embodiment of the software ‘out of thin air’ and write it down in some form of specification, the screenplay. Being in the position of seeing how everything is connected, it also falls naturally to them to direct the further realisation, by developers and media designers.

If that sounds very bossy to you, it is balanced by the fact that these developers and media designers already have complete ‘licence to write their own lines.’ For developers every line of code they write is literary theirs.

The delicate balance depends on developers and media designers being able to contribute to the interaction design process—in both meanings of that phrase. And it depends on all written lines fitting the screenplay.

‘“What I worked on was quite bare bones and everything else grew up around me,” says Nile Rodgers. “They just wanted me to be free to play. That’s the way we used to make records back in the day. It almost felt like we’d moved back in time.”’

This is what design processes are about; to create a space where one is free to play. This in the dead‐serious context of solving the problem. Play is used to get around a wall or two that stand between the designer and the solution for making it work.

It takes a ‘quite bare‐bones’ environment to be free: pencil and paper in the case of interaction design. That may ‘feel like moving back in time’ but it is actually really liberating; it offers a great interface for human creativity. Once you got around those walls and hit upon the solution, every part of the design can grow up around what you played.

And on that note, I’ll finish today’s blog post.

12 things you can do to succeed, enterprise edition

Part three of the mini‐series I am running at the moment on the usual social channels—twitter, g+, linkedin and xing—called positive action ships successful products. There, for every wishful thought that persists in the (mobile) software industry, I supply a complementary positive action.

Today’s offering is enterprise grade; let’s turn water into wine. If you are a product maker, or manage a product‐shipping organisation, then you can initiate at least one of these today:

Better go for it, deploy user research and design to ensure that new is really better.
cf. ‘Better play it safe, because it has not been done before.’
Better go for it, ban meetings; get the makers to collaborate in (pairs of) pairs.
cf. ‘Better play it safe, so it won’t cause all these extra rounds of meetings.’
Better go for it, evangelise the new, listen carefully to any needs, ignore naysayers.
cf. ‘Better play it safe, because the first feedback was rather reserved.’
Better go for it, make it an offer that can’t be refused—if it gets nixed, go underground.
cf. ‘Better play it safe, so we get the OK.’
Better go for it, negotiate until you trust that the engineers can build the design.
cf. ‘Better play it safe, because the engineers say it cannot be done.’
Better go for it, it is faster to build a completely new core product from scratch.
cf. ‘Better play it safe, because that code base is spaghetti.’
Better go for it, and enjoy every minute; save time through structure, research + design.
cf. ‘Better play it safe, so we all can go home at five—and on 14:30 (D) / to the pub (GB) on friday.’
Better go for it, because the blame will fall on us anyway.
cf. ‘Better play it safe, because the blame will fall on us.’
Better go for it, once the core product blows away the competition, features can be added.
cf. ‘Better play it safe, so we have time for more features.’
Better go for it, use frequent user testing to debug the innovative design.
cf. ‘Better play it safe, to pass the usability test.’
Better go for it, define a new game, on your terms, and ditch them old millstones.
cf. ‘Better play it safe, to pass the regression test.’
Better go for it, model careers are built on delivering remarkable results.
cf. ‘Better play it safe, to not jeopardise my promotion.’

ask not what this blog can do for you…

Now, what else can you do? First of all, you can spread the word; share this blog post. Second, the series continues, so I invite you to connect via twitter, g+, linkedin, or xing, and get a fresh jolt of positive action every workday.

And third, if you able and willing to take some positive action, then email or call us. We will happy to help you ship successful products.

ps: you can check out part two if you missed it.

a half‑century of success

This is the final instalment of the mini‐series I ran on the usual social channels—twitter, g+, linkedin and xing—called positive action ships successful products. There, for every wishful thought that persists in the (mobile) software industry, I supplied a complementary positive action.

To complete the round number of fifty, I present the final dozen + two of these for your reference. If you are a product maker, or manage a product‐shipping organisation, then you can initiate at least one of these today:

Make the lead designers of your hard‐ and software work as a pair; make them inseparable.
cf. ‘The hardware specs are fixed, now we can start with the software design.’
Define your focus so tightly, it hurts (a bit); deploy it so you ship, instead of discuss.
cf. ‘We spent ages discussing this, trying to find a solution that pleased everyone.’
Make interaction design the backbone of your product realisation; or compete on low, low price.
cf. ‘We thought we could spend a couple of man‐days on the low‐hanging usability fruit.’
Deploy lightweight design and engineering documentation to keep everyone with the programme.
cf. ‘The source is the ultimate documentation.’
Ban hacks, at least from those who are supposed to shape your product for the long term.
cf. ‘There is no need to go for the gold‐taps solution.’
Set a ‘feature budget’ and set it way below bloat; be frugal, spend it on user value.
cf. ‘It does not hurt to have those features as well.’
Set the goal to be competitive on each platform you support—that starts with your interaction.
cf. ‘One code base; fully cross‐platform.’
Root out boilerplate thinking for any product aspect; your design process is your QA.
cf. ‘You have to pick your battles.’
Set up your designers for big impact on the internals of your software, instead of vice versa.
cf. ‘Once you get familiar with the internal workings of our software, it becomes easy to use.’
Define your target user group(s) so tightly, it hurts; focus on their needs, exclusively.
cf. ‘Our specific target user group is: everyone.’
Introduce this KPI: the more your developers think the UI is ‘on the wrong track,’ the better.
cf. ‘Our developers are very experienced; they make the UI of their modules as they see fit.’
Hire those who are able to take your interaction beyond the HIG, once you achieve compliance.
cf. ‘We religiously adhere to the HIG.’
Regularly analyse workarounds adopted by your users; distill from them additional user needs.’
cf. ‘You can do that by [writing, running] a script.’
Make the connection: product–users–tech. Design is the process, the solution and realisation.
cf. ‘What do you mean “it’s all connected”? we just don’t have the time for those bits and pieces.’

ask not what this blog can do for you…

Now, what else can you do? First of all, you can spread the word; share this blog post. Second, I invite you to connect via twitter, g+, linkedin, or xing.

And third, if you able and willing to take some positive action, then email or call us. We will happy to help you ship successful products.

ps: you can check out part three if you missed it.

Krita Lime PPA: always fresh versions for Ubuntu users!

A great piece of news for Ubuntu Krita users is coming today! We have just opened a repository with regular builds of Krita git master!

Link: https://launchpad.net/~dimula73/+archive/krita

The main purpose of this PPA is to provide everyone with an always fresh version of Krita, without the need to update the whole system. Now one can get all the latest Krita features without a delay.

At the moment git master version has at least three features, which are absent in Krita 2.7 Beta1 (and cannot be merged there due to code freeze):

  • New "New Image From Clipboard" dialog with a nice preview widget implemented by our new contributor Matjaž Rous
  • New "pseudo-infinite" canvas feature (read here) for dynamical image resizing
  • New "Overview Docker" which lets you see the whole image at a glance
To install the newest Krita you need to do a few steps:
  1. Check that you don't have any original calligra or krita packages provided by your distribution or project-neon (we don't check that automatically currently)
  2. Add the PPA to repositories list:
    sudo add-apt-repository ppa:dimula73/krita
  3. Update the cache: 
    sudo apt-get update 
  4. Install Krita: 
    sudo sudo apt-get install krita-testing krita-testing-dbg 
Update: (not needed anymore)
After installing this package you should restart X-server to get environment variables updated!

Of course, being based on git-master may sometimes result in a bit of instability, so make sure you report any problems so we can fix them! :)

Interim tally of Kickstarter votes

Only one week after we sent out our Kickstarter survey, 581 of the 661 15-euro-and-up backers (including the PayPal backers) have sent in their votes. This is a response rate of a whopping 87.90%! Here’s the current tally:

  Votes   Stretch goal
1 113 19.45% 10. Animated file formats export: animated gif, animated png and spritemaps
2 53 9.12% 8. Rulers and guides: drag out guides from the rulers and generate, save and load common sets of guides. Save guides with the document.
3 46 7.92% 1. Multiple layer selection improvements
4 45 7.75% 19. Make it possible to edit brush tips in Krita
5 38 6.54% 21. Implement a Heads-Up-Display to manipulate the common brush settings: opacity, size, flow and others.
6 37 6.37% 2. Update the look & feel of the layer docker panel
7 35 6.02% 22. Fuzzy strokes: make the stroke consistent, but add randomness between strokes.
8 30 5.16% 5. Improve grids: add a grid docker, add new grid definitions, snap to grid
9 29 4.99% 6. Manage palettes and color swatches
10 26 4.48% 18. Stacked brushes: stack two or more brushes together and use them in one stroke
11 21 3.61% 4. Select presets using keyboard shortcuts
12 18 3.10% 13. Scale from center pivot: right now, we transform from the corners, not the pivot point.
13 17 2.93% 9. Composition helps: vector objects that you can place and that help with creating rules of thirds, spiral, golden mean and other compositions.
14 17 2.93% 7. Implement a Heads-Up-]Display for easy manipulation of the view
15 15 2.58% 20. Select textures on the fly to use in textured brushes
16 9 1.55% 15. HDR gradients
17 9 1.55% 11. Add precision to the layer move tool
18 7 1.20% 17. Gradient map filter
19 5 0.86% 16. On-canvas gradient previews
20 5 0.86% 12. Show a tooltip when hovering over a layer with content to show which one you’re going to move.
21 3 0.52% 3. Improve feedback when using more than one color space in a single image
22 3 0.52% 14. Add a gradient editor for stop gradients

If you’re entitled to vote and haven’t done so yet, please do! Any vote received on or before July 6, a full month after sending out the survey, will count.

June 10, 2015

Krita 2.9.5 Released

The Kickstarter was a success, but that didn’t keep us from adding new features and fixing bugs! We made quite a bit of progress including adding pass-through mode to group layers, allowing inherit alpha to be used on all layer types, better PSD support, and adding an on-canvas preview of the color being picked. We even added a new brush preset history docker! You can see the full release notes below.

Krita 2.9.5 also fixes a critical bug in Please upgrade if you experience crashes after restarting Krita.

New Features:

  • Add a lightness curve to the per-channel filter (bug 324332)
  • Add a brush preset history docker (bug 322425)
  • Add an all-files option to the file-open dialog
  • Add global light to the layer styles functionality (bug 348178)
  • Allow the user to choose a profile for untagged PNG images (bug 345913, 348014)
  • Add a built-in performance logger
  • Added a default set of paintop preset tags (these are not deletable yet!)
  • Add support for author profiles (default, anonymous, custom) to .kra files
  • Add buttons and actions for layer styles to the Layer docker
  • Add ctrl-f shortcut for re-applying the previously used filter (bug 348119)
  • Warn Intel users that they might have to update their display driver
  • Implement loading/saving of layer styles to PSD files
  • Add support for loading/saving patterns used in layer styles
  • Allow inherit alpha on all types of layers
  • Add a pass-through switch for group layers (bug 347746, 185448)
  • Implement saving of group layers to PSD
  • Add support for WebP (on Linux)
  • Add a shortcut (Ctrl-Shift-N) for edit/paste into New Image (bug 344750)
  • Add on-canvas preview of the current color when picking colors (bug 338128)
  • Add a mypaint-style circle brush outline.
  • Split the cursor configuration into outline selection and cursor selection
  • Add loading and saving transparancy masks to PSD groups

Performance improvements:

  • Remove delay on stroke start when using Krita with a translation

Bug fixes:

  • Fix view rotation menu by adding rotation actions
  • Fix crash when duplicating a global selection mask (bug 348461)
  • Improve the GUI for the advanced color selector settings (wrench icon on Advanced color selector)
  • Fix resetting the number of favorite presets in the popup (bug 344610)
  • Set proper activation flags for the Clear action (bug 34838)
  • Fix several bugs handling multiple documents, views and windows (bug 348341, bug 348162)
  • Fix the limits for document resolution (bug 348339)
  • Fix saving multiple layers with layer styles to .kra files (bug 348178)
  • Fix display of 16 bit/channel RGB images (bug 343765)
  • Fix the P_Graphite_Pencil_grain.gih brush tip file
  • Fix updating the projection when undoing removing a layer (bug 345600)
  • Improve handling of command-line arguments
  • Fix the autosave recovery dialog on Windows
  • Fix creating templates from the current image (bug 348021)
  • Fix layer styles and inherit alpha (bug 347120)
  • Work around crash in the Oxygen widget style when animations are enabled (bug 347367)
  • When loading JPEG files saved by Photoshop, also check the metadata for resolution information (bug 347572)
  • Don’t crash when trying to isolate a transform mask (transform masks cannot be painted on) (bug 347622)
  • Correctly load Burn, Color Burn blending modes from PSD (bug 333454)
  • Allow select-opaque on group layers (bug 347500)
  • Fix clone brush to show the outline even if it’s globally hidden (bug 288194)
  • Fix saving of gradients to layer styles
  • Improve the layout of the sliders in the toolbar
  • Fix loading floating point TIFF files (bug 344334)



Role change: Now snappier

Happy to announce that I'm changing roles at Canonical, moving down the stack to join the Snappy team. It is in some ways a formalization of my most recent work which has been more on application lifecycle and containment than higher level stuff like indicators and other user services. I'll be working on the core snappy team to ensuring that snappy works for a wide variety of use cases, from small sensors embedded in your world to phones to services running in the cloud. For me Snappy formalizes a lot of trends that we're seeing all over computing today so I'm excited to get more involved with it.

To kick things off I'll be working on making Snaps easier to build and maintain using the native dependency systems that exist already for most languages. The beautiful part about bundling is that we no longer have to force our dependency system on others, they can choose what works best for them. But, we still need to make integrating with it easy.

New adventures bringing new challenges are where I like to roam. I'll still be around though, and might even contribute a patch or two to some of my old haunts.

June 09, 2015

released darktable 1.6.7

We are happy to announce that darktable 1.6.7 has been released.

The release notes and relevant downloads can be found attached to this git tag:
Please only use our provided packages ("darktable-1.6.7.*" tar.xz and dmg) not the auto-created tarballs from github ("Source code", zip and tar.gz). The latter are just git snapshots and will not work! Here are the direct links to tar.xz and dmg:

this is another point release in the stable 1.6.x series.

sha256sum darktable-1.6.7.tar.xz
sha256sum darktable-1.6.7.dmg



  • improvements to facebook export
  • interpolation fixups
  • demosaic code cleanups
  • slideshow should handle very small images better
  • improve Olympus lens detection
  • various minor memory leak fixes
  • various other fixes
  • Pentax (K-x) DNG old embedded preview left over is now removed
  • modern OSX display profile handling

camera support

  • Nikon D7200 (both 12bit and 14bit compressed NEFs)
  • Nikon Coolpix P340
  • Canon EOS 750D
  • Canon EOS 760D
  • Canon EOS M2
  • Panasonic DMC-CM1
  • Panasonic DMC-GF7 (4:3 only)
  • Olympus XZ-10
  • Olympus SP570UZ
  • Samsung NX500
  • Fuji F600EXR

aspect ratios

  • Pansonic DMC-G5
  • Panasonic DMC-GM5
  • Panasonic FZ200

white balance presets

  • Nikon D7200
  • Nikon Coolpix P340
  • Panasonic DMC-GM1
  • Panasonic DMC-GM5
  • Olympus E-M10 (updated)
  • Olympus E-PL7
  • Olympus XZ-10

noise profiles

  • Canon Powershot G9
  • Sony A350


  • Nikon D7200
  • Nikon D7000
  • Nikon D750
  • Nikon D90


  • Catalan
  • German
  • Spanish
  • Swedish

June 08, 2015

Adventure Dental

[Adventure Dental] This sign, in Santa Fe, always makes me do a double-take.

Would you go to a dentist or eye doctor named "Adventure Dental"?

Personally, I prefer that my dental and vision visits are as un-adventurous as possible.

June 06, 2015

Blender at SIGGRAPH 2015

Siggraph 2015 is in Los Angeles, downtown, from 9-13 August. This is the highlight of the year for everyone who’s into 3D Computer Graphics. As usual you can find Blender users/developers all over, but especially here:

  • Sunday 3-5 PM: Birds of a Feather (free access)
    – Presentation of last year’s work and upcoming projects by chairman Ton Roosendaal. Includes time for everyone to speak up and share!
    – Viewing of the Cosmos Laundromat open movie (12 minutes)
    – Artists/developers demos and showcase, including several people of the BI crew.
  • Tuesday, Wednesday, Thursday: Tradeshow booth #1111
    Great place to meet, hangout, get demos, or share your feedback with everyone. You can always find plenty of Blender developers and users here

Meeting Point: Lobby or pool bar of hotel Figueroa (to be confirmed). This is one of the first hotels you pass by if you walk to downtown from the Convention Center. The pool bar is a pleasant hangout, open for everyone – just walk into the hotel lobby and take the corridor to the left of the desk.

  • Free Tradeshow tickets.
    Use the coupon code EXHBI9507 and register here.
    Unfortunately the registration system was made by zealot marketeers – ignore all the additional conference things you can purchase, keep clicking and you’ll end up with a free ticket!

June 05, 2015

a half‑century of product fail

This is the final instalment of the mini‐series I ran on the usual social channels—twitter, g+, linkedin and xing—called wishful thinking breeds failed products. It distilled what I have witnessed and heard during 20 years in the (mobile) software industry.

To complete the round number of fifty, I present the final dozen + two wishful thoughts for future reference. I am curious if you recognise some of these:

‘The hardware specs are fixed, now we can start with the software design.’
‘We spent ages discussing this, trying to find a solution that pleased everyone.’
‘We thought we could spend a couple of man‐days on the low‐hanging usability fruit.’
‘The source is the ultimate documentation.’
‘There is no need to go for the gold‐taps solution.’
‘It does not hurt to have those features as well.’
‘One code base; fully cross‐platform.’
‘You have to pick your battles.’
‘Once you get familiar with the internal workings of our software, it becomes easy to use.’
‘Our specific target user group is: everyone.’
‘Our developers are very experienced; they make the UI of their modules as they see fit.’
‘We religiously adhere to the HIG.’
‘You can do that by [writing, running] a script.’
‘What do you mean “it’s all connected”? we just don’t have the time for those bits and pieces.’

ask not what this blog can do for you…

Now, what can you do? First of all, you can spread the word; share this blog post. Second, I invite you to connect via twitter, g+, linkedin, or xing; there is a new series starting, again with a thought every workday.

And third, if you recognise that some of the wishful thinking is practiced at your software project and you can and want to do something about it, then email or call us. We will treat your case in total confidence.

ps: you can check out part three if you missed it.

Time for some Kiki Fanart!

Kiki fanart is always welcome — so here is Banajune‘s take on Kiki!


June 04, 2015

designing interaction for creative pros /3

Part three of my LGM 2015 lecture (here is part one and two). It is about equal opportunities in creative‐pro interaction. To see what I mean, let’s make something: a square.

two‐way street

There are two ways for masters to get the job done. The first way is to start somewhere and to keep chipping away at it until it is right:

creating a square by starting with a rectangle, putting it bottom-left     corner into place, then size the top-right one to perfection heads up: animated gif

So let’s throw in some material, move and size it (bam, bam, bam)—right, done. That was quick and the result is perfect.

like putty

This is called free working; squeeze it until it feels right. It is always hands‑on and I always move both my hands in a moulding motion when I think of it, to remind me what it feels like.

Although done by feeling, it is still fast and furious. Don’t mistake this for ‘trying out’, ‘fiddling’ or ‘let’s see where we end up’; that is for dilettantes. When masters pick up their tools, it is with great confidence that the result they have in mind will be achieved in a predictable, and short, amount of time.

on the other hand…

The second way for masters to get the job done is to plan a bit and then create a precise, parametric, set‑up:

top, bottom, left and right guide lines that mark out the perfect square

This is called a jig. Now the master only has to ‘cut’ once and a perfect result is achieved:

top, bottom, left and right guide lines appear one by one, then the     perfect square appears between them another animated gif

measure twice, cut once

This is called measured working. It is an analytical approach and involves planning ahead. It delivers precise results, to the limits of the medium. You will find it in many places; everywhere where the hands‑on factor is zero, parameters are entered and—bam—the result is achieved in one stroke.

It might be tempting to think that setting up the jig always involves punching in numbers. However also making choices from discrete sets, e.g. picking a color from a set of swatches, is part of it. Thus it is better to talk in general of entering parameters.


I did not make up all this by myself. I am indebted to this very cool book that goes deep into the matter of free and measured working, as practiced for centuries by masters. Luckily it is back in print:

the cover of the book the nature and art of workmanship, by david pye

Once familiar with this duality in how masters work, it can be used to analyse their workflows. For instance while reading this article about Brian Eno working with the band James.

In the sidebar (Eno’s Gear) it says ‘I don’t think he even saves the sounds that he gets. He just knocks them up from scratch every time’ about using one piece of gear, and ‘It’s stuffed full of his own presets’ about another. Reading that, I thought: that has, respectively, the vibe of free and measured working.

I have looped that insight back into my designs of creative‐pro software from then on. That is, giving equal importance to users building a collection of presets and knocking‑it‑up‐from‐scratch for tool set‑ups, configuring the work environment and assets (brush shapes, patterns, gradients, et cetera).

(There are more nuggets of that’s‐how‐masters‐work in the Eno article; see if you can spot them.)

the point

And with that I have arrived at rule numero one of this blog post:

All masters work free and measured; the only thing predictable about it is that it occurs 50–50, with no patterns.

We cannot rely on a given master taking the same route—free or measured—for all the different tasks they perform. It’s a mix, and a different mix for every master. Thus design strategies based on ‘remember if this user tends to do things free or measured’ are flawed.

We cannot rely on a given task being predominantly performed via either route—free or measured—by masters. It’s a mix, a 50–50 mix. Thus design strategies based on ‘analyse the task; is it free or measured?’ are flawed.

same, not same

The same master doing the same task will pick a different route—free or measured—at different times, based on the context they are in. For instance how difficult the overall project is. And for sure their own mood plays a role; are they under stress, are they tired (that night shift meeting that deadline)?

Masters will guesstimate the shortest route to success under the circumstances—and then take it.

dig it

With this 50–50 mix and no patterns, software for creative pros has only one choice:

Equal opportunity: offer every operation that users can perform in—at least—two ways: one free, one measured.

If you now say either ‘man, this will double my software in size’, or ‘yeah, my software already does that’, then my reply is: experience says that once we really start checking, you will see that current creative‐pro software achieves 60–80% equal opportunity.

how low can you go?

The question is not how do we prevent this list of operations from ballooning. It is: are there any more innocent, boring, easy to overlook operations to go on our list? For instance: setting the document size. Yeah boring, but often enough key to the creative result. A crop tool is the free way to do that operation.

From the Brian Eno episode above we have seen that it is not enough to filter the operations list by ‘does it change the creative end result?’ There we saw that meta‐operations (set up tools, configuring the work environment and assets) are also fully in scope.

picture show

To illustrate all this, let’s look at some of my designs for Metapolator.

the parameters panel listing type parameters on both master and glyph level,     for each parameter values, modifications and effective values are listed.     a popup is used to add a math operator (+) to a parameter (tension) a final animated gif

This is measured central: the parameters panel. Literally here parameters are entered and—bam—applied. With the popup action shown the system is taken to the next level. Preferably for wide‐ranging selections, expressions of change (e.g. new value = A × old + B) can be built.

the curve of the blowl stroke of the b glyph is being edited with use of     some big handles

Most on‑canvas interaction is by nature of the free variety. The hands‑on factor is simply up for grabs. In Metapolator this interaction complements the parameter panel shown above to achieve equal opportunity.

a specimen is shown with a text generated out of all letter-pair     combinations out of the word adhesion

Specimens are a huge factor in the Metapolator design. It is the place to evaluate if the typefaces are right. That makes it also the logical place to squeeze it until it is right: free working.

All on‑canvas interaction is performed directly in the specimens for this reason. If that looks natural and normal to you, I say ‘you’re welcome.’ This is completely novel in the field of font design software.

four sliders for mixing fonts, above each slider blue markers, below     each a number equivalent to its setting

Here are these fellows again, the slider set for freely mixing master fonts to make new fonts. These new fonts are shown by the blue markers, so that users can feel the clustering and spread of these new fonts—clearly a component of free working.

The numbers you see are all editable, also quickly in a row. This supports measured working. That number input is straightforward and gives predictable and repeatable results was a big factor for me to choose the algorithm of these sliders over alternatives.

boom, boom

In short: software for creative pros has to offer every operation that users can perform in two ways: one free—squeeze it until it feels right—one measured—involving planning ahead, entering parameters and ‘cutting’ once.

That’s it for part three. Stay tuned for part four: how to be good.




finally I’ve added more interactivity to improve the workflow of CloseHolesRTool in Retopo room, soon will be added surface snapping ;)

June 03, 2015

We’ve done it!

We ended with €30,520 on kickstarter and €3108 through paypal — making for a grand total of €33,628, and that means LOD, Animation and nine stretch goal. We’re so happy. It’s really an amazing result. So, thanks and hugs to all our supporters! And we promise to make Krita better and better — and better!

We’re already working on the surveys, and if you backed through paypal and didn’t get a survey by next week, please mail us. For paypal, we have to do a bit of manual work!That’s all for now, we’re a bit tired after the most intense 30 days of the year :-)

June 02, 2015

Piñon cones!

[Baby piñon cones] I've been having fun wandering the yard looking at piñon cones. We went all last summer without seeing cones on any of our trees, which seemed very mysterious ... though the book I found on piñon pines said they follow a three-year cycle. This year, nearly all of our trees have little yellow-green cones developing.

[piñon spikes with no cones] A few of the trees look like most of our piñons last year: long spikes but no cones developing on any of them. I don't know if it's a difference in the weather this year, or that three-year cycle I read about in the book. I also see on the web that there's a 2-7 year interval between good piñon crops, so clearly there are other factors.

It's going to be fun to see them develop, and to monitor them over the next several years. Maybe we'll actually get some piñon nuts eventually (or piñon jays to steal the nuts). I don't know if baby cones now means nuts later this summer, or not until next summer. Time to check that book out of the library again ...

Fedora Design Team Update (Two for One!)

Fedora Design Team Logo

I have been very occupied in recent weeks with piggies of various shapes, sizes, and missions in life [1], so I missed posting the last design team meeting update. This is going to be a quick two-for-one with mostly links and not any summary at all. I’ve been trying hard to run the meetings so the auto-generated summaries are more usable, but I am always happy for tips on doing this even better from meetbot pros (like you? :) ?)


Fedora Design Team Meeting 19 May 2015

Fedora Design Team Meeting 2 June 2015

See you next time?

Our meetings are every 2 weeks; we send reminders to the design-team mailing list and you can also find out if there is a meeting by checking out the design team category on FedoCal.


[1] Expect some explanation in a few weeks, or look for me or Dan Walsh at the Red Hat Summit later this month. :)

Twenty-four hours to go…

Kickstarter months are much longer than ordinary months. At least, so it seems to us! It’s also a really exciting time. But we’re nearing the finish line now.

The current score is €2675 donated through paypal and €28,463 pledged on Kickstarter! That’s a total if €31,138. That’s seven-and-half stretch goals! Two, however, are already claimed by the choose-your-stretch-goal award.

Big thanks to everyone who has joined to help make Krita better and better!

In any case, time for a last sprint! This time tomorrow morning, the campaign is over!


June 01, 2015

Raw subdivision


Some time ago as requested by an artist, I have implemented a subdivision type useful for low polygon models or hard edges geometry. At that time I was in Cuba and by some reason I can’t remember seems that code wont get into the main trunk. Since I have left all my previous work “behind” I had to re-implement again. but like a painter, the second time you do your artwork it will be different, now I have more experience so the rewrote feature is way better than the lost functionality :) Hope you like it.

May 30, 2015

Google Photos - Can I get out?

Google Photos

Google Photos came out a couple of days ago and well, it looks great.

But it begs the question: what happens with my photos once I hand them over? Should I want to move elsewhere, what are my options?

Question 1: Does it take good care of my photos?

Good news: if you choose to backup originals (the non-free version), everything you put in will come back out unmodified. I tested this with a couple different file types: plain JPEGs, RAW files and movies.

Once uploaded, you can download each file one-by-one through the action buttons on the top-right of your screen:

Photo actions

Downloaded photos have matching checksums, so that’s positive. It does what it promises.

Update: not quite, see below

Question 2: Can I get my photos out?

As mentioned before there’s the download button. This gives you one photo at a time, which isn’t much of an option if you have a rather large library.

You can make a selection and download them as a zip file:

Bulk download

Only downside is that it doesn’t work. Once the selection is large enough, it silently fails.

There is another option, slightly more hidden:

Show in Google Drive

You can enable a magic “Google Photos” folder in the settings menu, which will then show up in Google Drive.

Combined with the desktop app, it allows you to sync back your collection to your machine.

I once again did my comparison test. See if you can spot the problem.

Original file:

$ ls -al _MG_1379.CR2 
-rwxr-xr-x@ 1 ruben  staff  16800206 Oct 10  2012 _MG_1379.CR2*
$ shasum -a 256 _MG_1379.CR2 
fbfb86dac6d24c6b25d931628d24b779f1bb95f9f93c99c5f8c95a8cd100e458  _MG_1379.CR2

File synced from Google Drive:

$ ls -al _MG_1379.CR2 
-rw-------  1 ruben  staff  1989894 May 30 18:38 _MG_1379.CR2
$ shasum -a 256 _MG_1379.CR2 
0769b7e68a092421c5b8176a9c098d4aa326dfae939518ad23d3d62d78d8979a  _MG_1379.CR2

My 16Mb RAW file has been compressed into something under 2Mb. That’s… bad.

Question 3: What about metadata?

Despite all the machine learning and computer vision technology, you’ll still want to label your events manually. There’s no way Google will know that “Trip to Thailand” should actually be labeled “Honeymoon”.

But once you do all that work, can you export the metadata?

As it stands, there doesn’t seem to be any way to do so. No API in sight (for now?).

Update: It’s supported in Google Takeout. But that’s still a manual (and painful) task. I’d love to be able to do continuous backups through an API.


The apps, the syncing, the sharing, it works really really well. But for now it seems to be a one-way story. If you use Google Photos, I highly recommend you keep a copy of your photos elsewhere. You might want them back one day.

What I’d really like to see:

  • A good API that allows access to all metadata. After all, it is my own data.
  • An explanation on why my RAW files were compressed. That’s exactly not what you want with RAW files.

Keeping an eye on it.

Comments | @rubenv on Twitter

3D-Coat 4.5 released!

At Pilgway we are very proud to announce the release of 4.5 version of the cutting edge Digital Sculpting and 3D content creation 3D-Coat.

This particular update has taken us a while to deliver, but we made sure to include a whole LOT of new, great features to make 3D-Coat a more versatile and powerful 3D painting and digital sculpting tool.

Check out our video presentation and a short list of new features implemented in 3D-Coat 4.5 below. Owners of 3D-Coat 4 and 4.1 can upgrade for free.

Important notice! From May 28, 2015 till June 15, 2015 we offer a special launch discount of $45 (US dollars) on Full Professional and the Floating licenses.

Here’s a nice feature list and a quick introduction to PBR materials.

We want to thanks our active community and our restless team at 3D-Coat that will continue to deliver top of the line tools for artists and creators.

May 29, 2015

Why aren't you using github?

Is a question we, Krita developers, get asked a lot. As in, many times a week. Some people are confused enough that they think that github is somehow the "official" place to put git repositories -- more official than projects.kde.org, phabricator.kde.org, git.gnome.org or where-ever else. Github, after all, is so much more convenient: you only need a github account or login with your social media account. It's so much more social, it's so cosy, and no worries about licensing either! So refreshing and modern.

So much better than, say, SourceForge ever was! Evil SourceForge, having failed to make a business out of hosting commercial software development projects is now descending to wrapping existing free software Windows installers in malware-distributing, ad-laden installer wrappers.

The thing is, though, Github might be the cool place to hack on code these days, the favourite place to host your projects: that is exactly what SourceForge was, too, back in the days. And Github's business model is exactly what SourceForge's was. And if that isn't a warning against giving your first-born children in the hands of a big, faceless, profit-oriented, venture-capital-backed company, then I don't know what is!

And yes, I have heard the arguments. Github is so familiar, so convenient, you can always remove your project (until Github decides to resurrect it, of course), it's git, so you're not losing your code revision history! But what about other artefacts: wiki, documents, bugs, tasks? Maybe you can export them now, I haven't checked, but what will you import it into?

I've spent over ten years of my life on Krita. I care about Krita. I don't want to run that sort of risk. One thing I've learned in the course of a mis-spent professional life is that you always should keep the core of your business in your own hands. You shouldn't outsource that!

So, one big reason for not moving Krita's development to github is that I simply do not trust them.

That's a negative reason, but there are also positive reasons. And they all have to do with KDE.

I know that a lot of people like to bitch about KDE -- they like to bitch about the layout of the forum, the performance of the repo browser, the size of the libraries, the releases of new versions of the Plasma Desktop, about fifteen year old conflicts with the FSF (which somehow proves to them that KDE isn't trustworthy...) The fact is that especially in the Linux world, a bunch of people decided ages ago they didn't like KDE, it wasn't their tribe and they apparently find it enjoyable to kick like a mule everytime we do something.

Well, shucks to them.

Then there are people for whom the free software world is a strange place. You don't see something like Corel Painter being hosted together with a bunch of other software on a bigger entity's website. It's confusing! But it's still strange, to many people, to see that Krita shares a bug tracker, a forum, a mailing list platform, a git repository platform with a bunch of other projects that they aren't interested in.

Well, I see that as a learning moment

And not as a hint that we should separate out and... Start using using github? Which would also mean sharing infra with a bunch of other projects, but without any sense of community?

Because that is what make KDE valuable for Krita: the community. KDE is a big community of people who are making free software for end users. All kinds of free software, a wild variety. But KDE as a community is extremely open. Anyone can get a KDE identity, and it doesn't take a lot of effort to actually get commit access to all the source code, to all projects. Once in, you can work on everything.

All the pieces needed to develop software are here: websites, forums, wiki's, bug trackers, repo hosting, mailing lists, continuous-integration, file hosting, todo management, calendaring, collaborative editing, file hosting. The system admin team does an incredible job keeping it all up and running, and the best thing is: we own it. We, the community, own our platforms and our data. We cannot be forced by a venture capitalist to monetize our projects by adding malware installers. We own our stuff, which means we can trust our stuff.

And we can improve our platform: try to improve a closed-source, company-owned platform like github! So suggestions for improvement are welcome: we're now looking into phabricator, which is a very nice platform giving a lot of the advantages of github (but with some weird limitations: it very clearly wasn't made for hosting hundreds of git repos and hundreds of projects!), we're looking into question-and-answers websites. Recently, the continuous integration system got improved a whole bunch. All awesome deveopments!

But moving development to github? Bad idea.

Interview with David Revoy


Could you tell us something about yourself?

I’m a 33-year-old French CG artist. I worked for many industries: traditional-painting, illustration, concept-art, teaching. Maybe you’ve already come across some of my artwork while browsing the web, for example my work on open movies (Sintel, Tears of Steel, Cosmos Laundromat) or on various board games  (Philip Jose Farmer’s ‘The maker of universes’, Lutinfernal, BobbySitter) or book series (Fedeylin, Club of Magic Horse) and artworks like Alice in Wonderland or Yin Yang of World Hunger. Something I think specific about me is that I rarely accept ready-made ideas, I work to build my own opinions. This process leads me to reject many things accepted as normal by my contemporaries: TV, proprietary software, politics, religion… I despair when I hear someone saying “I do this or this because everyone does it”. I like independence, cats and deep blue color.

Do you paint professionally, as a hobby artist, or both?

I’m a happy artist doing both. Nowadays I work mainly on my own web comic, Pepper&Carrot. An open web comic done with Krita and supported by the readers. Managing everything on this project is hard and challenging, but extremely rewarding on a personal level. Pepper&Carrot is the project of my dreams.

What genre(s) do you work in?

I’ve worked in many genres, but currently I’m sticking to a homemade fantasy world for a general audience.

Whose work inspires you most — who are your role models as an artist?

I do not really have a role model, but I’m deeply impressed by artists able to melt the limits between industries, as Yoshitaka Amano did between concept art, illustration and painting.

How did you get to try digital painting for the first time?

My first real digital-painting contact was with Deluxe Paint II on MS-DOS in 1992. As a kid in the nineties, I was very lucky to have a computer at home. Fortunately, my parents and siblings were afraid of the home computer and I had it all to myself. For the younger generation reading this, just imagine: no internet, Windows 3.1, VGA graphics (640x480px, 256 colors).

What makes you choose digital over traditional painting?

I left the school system and my parents’ home at 18 years old. I was too much of a rebel to follow any type of studies and eager to start my own life far from any influence. I first worked as a street portraitist in Avignon then. Outside the tourist season I started to do traditional painting. What I remember was the stock -the physical size of it- over 100 canvases take up a lot of room in a small apartment. I also had long drying times for commissions in oil, and when something wasn’t accepted by a client, I had to start over…

I discovered modern digital painting thanks to my first internet connection around 2000 and the first forums about it. I was amazed: brilliant colors, rich gradients, a lot of fantasy artworks. Before 2000, you had to pay for a book or go to exhibitions to see new artworks. And suddenly many artists were on the internet, and you could see thousands of artworks daily. Forums where starting to open everywhere and CG artist shared tips, tutorials, work-in-progress threads. The internet of CG artist was new, full of hope and full of humanity…

I bought a tablet to start to paint digitally during this period. I didn’t know many things about software, so my first years of digital painting were made with Photoshop Elements (bundled with the tablet). With digital painting, I could experiment with many themes I could never have sold on canvas. Then I met online publishers interested in my digital art and started to work more and more as a digital painter with an official Photoshop licence, Corel Painter, etcetera. In 2003 I ended my career as a traditional painter when a client decided to buy my whole stock of canvas.

How did you find out about Krita?

I first heard about Krita on forum news, around 2007. Krita was a Linux-only program at this time and I was still a Windows user then (I moved to using Gnu/Linux full-time in 2009). I remember I spent time to try to install it and didn’t succeed. I had a dual-boot with Linux-Mint 4.0 and I was already enthusiastic about open-source technologies, especially Blender.

My first contact with drawing in Krita was in 2009 when I was preparing my work as art director on the Sintel project and studied all the open source painting applications on Linux (Gimp, Gimp-painter fork, Mypaint, Qaquarelle, Gogh, Krita, Drawpiles, and even the web-based paint-chat ones). I really wanted to use only open source on GNU/Linux for the concept art. This crazy idea was a big turn in my career, and more when I decided to stick to it after the Sintel project.

I started my first years of 100% GNU/Linux using a mix of Gimp-painter 2.6, Mypaint and Alchemy. I published many tutorials and open DVDs about it: Chaos&Evolutions or Blend&Paint to document all the new tips I found. But Gimp-painter 2.6 was harder and harder to install because all GNU/Linux distributions were pushing Gimp 2.8 as default, and the two versions couldn’t live side by side. I wasn’t happy with Gimp 2.8. It was impossible to paint with it when they released it, and the Gimp-painter features I liked were not merged into the official release. Mypaint on the other side was transitioning in pain to newer technologies and the main developer left the project… I remember I felt stuck for a while, asking myself if my rebel move to only GNU/Linux was worth it. Nothing was really evolving positively about digital painting on GNU/Linux at this time.

Then I decided to start following Krita actively and invest as much time as I could in it. Krita wasn’t popular at all back in the day: 2.2/2.3 wasn’t ready, not for production, and the first years that I used it I started out by accepting the various regressions. I adapted, bug-reported, helped other artists build it, showed the features of new releases, communicated about it and the most important: kept painting with it. It was a good choice. I was convinced by three factors:

  1. the project vision, clearly set up to be a digital-painting application.
  2. the massive energy, passion and time put on it by Boudewijn Rempt, Dmitry Kazakov, Lukáš Tvrdý, Sven Langkamp and many other developers.
  3. the friendly community.

What was your first impression?

It was in 2009, and it was impossible to paint smoothly on a 1000x1000px canvas. Krita already had a lot of features: CMYK, rich brush engines, a single windows interface, selections, transform tool, etcetera… but most of those were half working or broken when you wanted to make real use of it. The project was missing users, beta-testers. I’m proud to have already reported over 200 bugs to the Krita bug tracker since then. Nowadays, I’m sort of part of the Krita team, I even made my first official commit last week.

What do you love about Krita?

This will sound geeky, but probably my favourite feature is the command-line exporter.

~$ krita in.kra –export-filename out.png

This feature is a central key to speed-up my workflow, I included this command in bash scripts to batch transform Krita files to low-res JPGs, hi-res PNG, and so on. It allows me to keep only a single source file in my work folder ; all derived versions (internet version, publisher version) are auto-generated when the .kra source file is changed. This way I’m never afraid that I have to export everything again when I do a single change on a painting source file, or when one of the 16 languages of Pepper&Carrot gets an update. I just do it, save, and everything else, generation, watermarking, ftp upload and so on are automatised.

Check the Source files of Pepper&Carrot if you are curious to see what automatised export output looks like. I wish the command-line export could do a bit more, for example adding the possibility to export top-level groups to multiple files.

What do you think needs improvement in Krita? Is there anything that really annoys you?

Stability needs improvement.

I invite all Krita users who wants to help making Krita more stable to report their bugs, and not expect someone else will do it for them or expect the developers will see it.

But there is one big issue in this process ; the bug-report website is not user friendly at all and not visual. It has many limited features (formatting, inserting pictures or videos). If the Krita project wants to keep trusting the userbase only to do volunteer beta-testing at a professional level, I think the project will need to make the life of the beta-testers easier.

It make me remember how the Mypaint project was also affected by this with the old bug-tracker. When the project moved the bug tracker to Github the amount of new issues reported just went insane. Much discussion happens on it now; avatars of users, formatting with title/bold/italic, inserting pictures make it way more friendly and human. Look at this type of bug-report with image and all: it’s a lot more adapted to how artists, the general audience or visually driven persons might want to report a bug. And I’m also pretty sure it would help developers to better see and solve the issues.

What sets Krita apart from the other tools that you use?

Krita (and digital-painting apps in general, or digital sculpting) are really a different thing from other software. Krita really needs to be realtime between me and the computer. Painting is a realtime experience and, when I paint, I can really feel when Krita doesn’t follow the rhythm. I think that’s why everyone is so happy to see the Krita team working on the performance topic in the kickstarter campaign.

If you had to pick one favourite of all your work done in Krita so far, what would it be, and why?

It would be the the latest episode of Pepper&Carrot. As an artist constantly evolving and changing, the latest piece is probably the one telling more things about where I am right now. Older artworks like the portrait of Charles Darwin or Lecture tell different stories, more near to where I was in 2012.

What techniques and brushes did you use in it?

I used my brush kit on it, and tried to paint directly what I had in mind using almost no extra layers. I painted it flat as I would do for a production concept-art speed painting. Then I refined on the top the level of details and constrained myself to not smooth the result too much.

Where can people see more of your work?

Probably on my portfolio www.davidrevoy.com.

Anything else you’d like to share?

I invite you to network with me on twitter, google+, or deviantArt if you want to chat about Krita or follow my new artwork, tutorials and resources. I also started a Youtube channel with video tutorials about Krita. Do not hesitate to comment and also share your tips or suggestions in the comments, I read them all and often reply. I’m also often connected to the IRC #krita channel on freenode. I’m using the nickname ‘deevad’. See you there!

Command-line builds for Android using ant

I recently needed to update an old Android app that I hadn't touched in years. My Eclipse setup is way out of date, and I've been hearing about more and more projects switching to using command-line builds. I wanted to ditch my fiddly, difficult to install Eclipse setup and switch to something easier to use.

Some of the big open-source packages, like OsmAnd, have switched to gradle for their Java builds. So I tried to install gradle -- and on Debian, apt-get install gradle wanted to pull in a total of 153 packages! Maybe gradle wasn't the best option to pursue.

But there's another option for command-line android builds: ant. When I tried apt-get install ant, since I already have Java installed (I think the relevant package is openjdk-7-jdk), it installed without needing a single additional package. For a small program, that's clearly a better way to go!

Then I needed to create a build directory and move my project into it. That turned out to be fairly easy, too -- certainly compared to the hours it spent setting up an Eclipse environment. Here's how to set up your ant Android build:

First install the Android "Stand-alone SDK Tools" from Installing the Android SDK. This requires a fair amount of clicking around, accepting licenses, and waiting for a long download.

Now install an SDK or two. Use android sdk to install new SDK versions, and android list targets to see what versions you have installed.

Create a new directory for your project, cd into it, and then:

android create project --name YourProject --path . --target android-19 --package tld.yourdomain.YourProject --activity YourProject
Adjust the Android target for the version you want to use.

When this is done, type ant with no arguments to make sure the directory structure was created properly. If it doesn't print errors, that's a good sign.

Check that local.properties has sdk.dir set correctly. It should have picked that up from your environment.

There will be a stub source file in src/tld/yourdomain/YourProject.java. Edit it as needed, or, if you're transferring a project from another build system such as eclipse, copy the existing .java files to that directory.

If you have custom icons for your project, or other resources like layout or menu files, put them in the appropriate directories under res. The directory structure is the same as in eclipse, but unlike an eclipse build, you can edit the files at any time without the build mysteriously breaking.

Signing your app

Now you'll need a key to sign your app. Eclipse generates a debugging key automatically, but ant doesn't. It's better to use a real key anyway, since debugging keys expire and need to be regenerated periodically.

If you don't already have a key, generate one with:

keytool -genkey -v -keystore my-key.keystore -alias mykey -keyalg RSA -sigalg SHA1withRSA -keysize 2048 -validity 10000
It will ask you for a password; be sure to use one you won't forget (or record it somewhere). You can use any filename you want instead of my-key.keystore, and any alias you want instead of mykey.

Now create a file called ant.properties containing these two lines:

Some tutorials tell you to put this in build.properties, but that's outdated and no longer works.

If you forget your key alias, you can find out with this command and the password:

keytool -list -keystore /path/to/my-key.keystore

Optionally, you can also include your key's password:

If you don't, you'll be prompted twice for the password (which echoes on the terminal, so be aware of that if anyone is bored enough to watch over your shoulder as you build packages. I guess build-signing keys aren't considered particularly high security). Of course, you should make sure not to include both the private keystore file and the password in any public code repository.


Finally, you're ready to build!

ant release

If you get an error like:

AndroidManifest.xml:6: error: Error: No resource found that matches the given name (at 'icon' with value '@drawable/ic_launcher').
it's because older eclipse builds wanted icons named icon.png, while ant wants them named ic_launcher.png. You can fix this either by renaming your icons to res/drawable-hdpi/ic_launcher.png (and the same for res/drawable-lpdi and -mdpi), or by removing everything under bin (rm -rf bin/*) and then editing AndroidManifest.xml. If you don't clear bin before rebuilding, bin/AndroidManifest.xml will take precendence over the AndroidManifest.xml in the root, so you might have to edit both files.

After ant release, your binary will be in bin/YourProject-release.apk. If you have an adb connection, you can (re)install it with: adb install -r bin/YourProject-release.apk

Done! So much easier than eclipse, and you can use any editor you want, and check your files into any version control system.

That just leaves the coding part. If only Java development were as easy as Python or C ...

May 27, 2015

SK1 Print Design adding support for Palettes (Colour Swatches)

SK1 Print Design is an interesting project. They found the vector graphics program Sketch was useful to their business, and maintained their own customized version, eventually becoming a project all of their own. I'm not involved with SK1 Print Design myself but I do follow their newsfeed on Facebook, where they regularly post information about their work.

They have added import and export support for a variety of Colour Palettes, including SOC (StarOffice Colours, i.e. the OpenDocument standard used by OpenOffice.org and LibreOffice) and CorelDraw XML Palettes and more. For users who already have CorelDraw this should allow them to reuse their existing Pantone palettes.

They are also continuing their work to merge their SK1 and PrintDesign branches. The next release seems very promising.

ColorHugALS and Sensor HID

As Bastien hinted in his last blog post, we now have some new test firmware for the ColorHugALS device. The ever-awesome Benjamin Tissoires has been hacking on an alternative device firmware, this time implementing the Sensor HID interface that Microsoft is suggesting vendors use for internal ambient light sensors on tablets and laptops for Windows 8.

Implementing this new interface has several advantages:

  • The sensor should “just work” with Windows 8 without a driver
  • The sensor now works with iio-sensor-proxy without writing any interface code
  • We can test the HID code in the kernel with a device we can hack to do strange things
  • colorhug-als1-large

    So, if you want to test the new GNOME ambient light sensor code, flash your ColorHugALS with this file using colorhug-cmd flash-firmware ColorHugALS-SensorHID.bin — the flash process will appear to fail right at the end, but this is just because we’ve not yet written the HID version of the SetFlashSuccess call that instructs the bootloader to start the firmware automatically when inserted. This isn’t actually such a bad thing for an experimental firmware, but means when you remove then insert your ALS device you’ll have to do colorhug-cmd boot-flash to switch from the flashing red LED bootloader mode into the new firmware mode.

    If it’s too broken for you right now, you can go back to the real firmware using colorhug-cmd when in bootloader mode.


    There are still 17 ColorHugALS devices in stock, if you want to buy one for testing. Once they’ve gone, they’re gone, I don’t think I’ll be building another batch unless there’s a lot more demand as right now I’m building them at a loss.

    May 26, 2015

    Interview with Andrei Rudenko

    Could you tell us something about yourself?

    My name is Andrei Rudenko, I’m a freelance illustrator, graduated from the Academy of Fine Arts (as a painter) in Chisinau (Moldova). I have many hobbies, I like icon/UI design, photography, learned a few programming languages and make games in my spare time, and also have about 10 releases on musical labels as 2R. For now I’m trying to improve my skills in illustration and game development.

    Do you paint professionally, as a hobby artist, or both?

    Both, it is good when your hobby is your job.

    What genre(s) do you work in?

    I like surrealism, critical realism. I don’t care about genre much, I think the taste and culture in art is more important.

    Whose work inspires you most — who are your role models as an artist?

    I really like the Renaissance artists, Russian Wanderers, also Jacques-Louis David, Caravaggio, Anthony van Dyck, and Roberto Ferri.

    When did you try digital painting for the first time?

    I think about 2010, trying to paint in Photoshop but I didn’t like that to draw with, and I left it until I found Krita.

    What makes you choose digital over traditional painting?

    Digital painting has its advantages, speed, tools, ctrl+z. For me it is a place for experiments, which I can then use in traditional painting.­

    How did you find out about Krita?

    When I became interested in Linux and open source. I found Krita, it had everything that I needed for a digital painting. For me it is important to repeat that feeling like you paint using traditional materials.

    What was your first impression?

    As soon as I discovered a powerful brush engine. I realized that this is what I was looking for a long time.

    What do you love about Krita?

    I like its tools, as I have already said the brush engine, the large variety of settings. I like the team who are developing Krita, very nice people. And of course it is free.

    What do you think needs improvement in Krita? Is there anything that really annoys you?

    I think better vector graphics tools, for designers. Also make some fixes for pixel art artists.

    What sets Krita apart from the other tools that you use?

    The possibility to customize it the way you like.

    If you had to pick one favourite of all your work done in Krita so far, what would it be, and why?

    Monk for Diablo 3 contest, there is a lot of work and a lot that needs to be done. But Krita gave me everything i needed to make this art.

    What techniques and brushes did you use in it?

    Most of the time I use the color smudge brush (with dulling), like in traditional oil painting. For details a simple circle brush, for leaves I made a special brush with scattering. Almost all brushes I made myself, and also patterns for brushes I made from my texture photos.

    Where can people see more of your work?


    Anything else you’d like to share?

    Thank you for inviting me to this interview. And thank you, Krita team, for Krita. ;)

    Fedora 22 and missing applications

    Quite a few people are going to be installing Fedora 22 in the coming days, searching for things in the software center and not finding what they want. This is because some applications still don’t ship AppData files, which have become compulsory for this release. So far, over 53% of applications shipped in Fedora ship the required software center metadata, up from the original 12% in Fedora 21. If you don’t like this, you can either use dnf to install the package on the command line, or set gsettings set org.gnome.software require-appdata false. If you want to see your application in the software center in the future, please file a bug either upstream or downstream (I’ve already filed a lot of upstream bugs) or even better write the metadata and get it installed either upstream tarball or downstream in the Fedora package. Most upstream and downstream maintainers have shipped the extra software center information, but some others might need a little reminder about it from users.

    May 25, 2015

    Interview with Griatch

    Surprise of Trolls, by Griatch

    Could you tell us something about yourself?

    I, Griatch, am from Sweden. When not doing artwork I am a astrophysicist, mainly doing computer modeling of astronomical objects. I also spend time writing fiction, creating my own music and being the lead developer of Evennia, an open-source, professional-quality library for creating multiplayer text games (muds). I also try to squeeze in a roleplaying game or two now and then, as well as a beer at the local pub.

    Do you paint professionally, as a hobby artist, or both?

    A little bit of both. I’m mainly a hobby painter, but lately I’ve also taken on professional work and I’m currently commissioned to do all artwork and technical illustration for an upcoming book on black holes (to be published in Swedish). Great fun!

    What genre(s) do you work in?

    I try to be pretty broad in my genres and have dabbled in anything from fantasy and horror to sci-fi, comics and still life. I mostly do fantasy, sci-fi and other fantastical imagery but I often go for the mundane aspects of those genres, portraying scenes and characters doing non-epic things. I try to experiment a lot but like to convey or hint at some sort of story in my artwork.

    Whose work inspires you most — who are your role models as an artist?

    There are too many to list, including many involved in the Krita project! One thing you quickly learn as an artist (and in any field, I’ve found) is that no matter how well you think you are doing for yourself, there are always others who are way better at it. Which is great since it means you can learn from them!

    How did you get to try digital painting for the first time?

    I did my first digital drawing with a mouse on an Amiga 500 back in the mid-nineties. I used the classical program Deluxe Paint. You worked in glorious 32 colours (64 with the “halfbrite” hardware hack) on a whopping 320×240 pixel canvas. I made fantasy pictures and a 100+ frame animation in that program, inspired by the old Amiga game Syndicate.

    But even though I used the computer quite a bit for drawing, digital art was at the time something very different from analogue art – pixel art is cool but it is a completely separate style. So I kept doing most my artwork in traditional media until much later.

    What made you choose digital over traditional painting?

    I painted in oils since I was seven and kept doing so up until my university years. I dropped the oils when moving to a small student apartment – I didn’t have the space for the equipment nor the willingness to sleep in the smell. So I drew in charcoal and pencils for many years. I eventually got a Linux machine in the early 2000’s and whereas my first tries with GIMP were abysmal (it was not really useful for me until version 2+), I eventually made my first GIMP images, based on scanned originals. When I got myself a Wacom Graphire tablet I quickly transitioned to using the computer exclusively. With the pen I felt I could do pretty much anything I could on paper, with the added benefits of undo’s and perfect erasing. I’ve not looked back since.

    How did you find out about Krita?

    I’ve known about Krita for a long time, I might have first heard about it around the time I started to complement my GIMP work with MyPaint for painting. Since I exclusively draw in Linux, the open-source painting world is something I try to keep in touch with.

    What was your first impression?

    My first try of Krita was with an early version, before the developers stated their intention of focusing on digital painting. That impression was not very good, to be honest. The program had a very experimental feel to it and felt slow, bloated and unstable. The kind of program you made a mental note of for the future but couldn’t actually use yet. Krita has come a long way since then and today I have no stability or performance issues.

    What do you love about Krita?

    Being a digital painter, I guess I should list the brush engines and nice painting features first here. And these are indeed good. But the feature I find myself most endeared with is the transform tool. After all my years of using GIMP, where applying scale/rotate/flip/morph etc is done by separate tools or even separate filters, Krita’s unified transform tool is refreshing and a joy to use.

    What do you think needs improvement in Krita? Is there anything that really annoys you?

    I do wish more GUI toolkits would support the GTK2 direct-assignment of keyboard shortcuts: Hover over the option in the menu, then click the keyboard shortcut you want to that menu item. Fast and easy, no scrolling/searching through lists of functions deep in the keyboard shortcut settings. I also would like to see keyboard shortcuts assigned to all the favourite brushes so you can swap mid-stroke rather than having to move the pen around on the pop-up menu.

    Apart from this, with the latest releases, most of my previous reservations with the program have melted away actually. Apart from stability concerns, one of the reasons I was slow to adopt Krita in the past was otherwise that Krita seems to want to do it all. Krita has brushes, filters, even vector tools under the same umbrella. I did (and still often do) my painting in MyPaint, my image manipulation in GIMP and my vector graphics in Inkscape – each doing one aspect very well, in traditional Unix/Linux fashion. For the longest time Krita’s role in this workflow was … unclear. However, the latest versions of Krita have improved the integration between its parts a lot, making it actually viable for me to stay in Krita for the entire workflow when creating a raster image.

    The KDE forum and bug reporting infrastructure it relies on hides Krita effectively from view as one of many KDE projects. Compared to the pretty and modern Krita main website, the KDE web pages you reach once you dive deeper are bland and frankly off-putting, a generic place to which I have no particular urge to contribute. That the Krita KDE-forum can’t even downscale an image for you, but requires you to first yourself rescale the image before uploading, is so old-fashioned that it’s clear the place was never originally intended to be hosting art. So yes, this part is an annoyance, unrelated to the program itself as it is.

    What sets Krita apart from the other tools that you use?

    The transform tool mentioned above and the sketch-brush engine which is great fun. The perspective tool is also a very cool addition, just to name a few things. Krita seems to have the development push, support and ambition to create a professional and polished experience. So it will be very interesting to follow its development in the future.

    If you had to pick one favourite of all your work done in Krita so far, what would it be, and why?

    “The Curious Look”. This is a fun image of a recurring character of mine. Whereas I had done images in Krita before, this one was the first I decided to make in Krita from beginning to end.

    What techniques and brushes did you use in it?

    This is completely hand-painted only using one of Krita’s sketch brushes, which I was having great fun with!

    Where can people see more of your work?

    You can find my artwork on DeviantArt here: http://griatch-art.deviantart.com/
    I have made many tutorials for making art in OSS programs: http://griatch-art.deviantart.com/journal/Tutorials-237116359
    I also have a Youtube channel with amply commented timelapse painting videos: https://www.youtube.com/user/griatch/videos

    Anything else you’d like to share?

    Nothing more than wishing the Krita devs good luck with the future development of the program!

    May 24, 2015

    Nostalgic Blend(er) of the past III

    This is the last batch of recovered videos :)


    May 23, 2015

    dupefinder - Removing duplicate files on different machines

    Imagine you have an old and a new computer. You want to get rid of that old computer, but it still contains loads of files. Some of them are already on the new one, some aren’t. You want to get the ones that aren’t: those are the ones you want to copy before tossing the old machine out.

    That was the problem I was faced with. Not willing to do this tedious task of comparing and merging files manually, I decided to wrote a small tool for it. Since it might be useful to others, I’ve made it open-source.

    Introducing dupefinder

    Here’s how it works:

    1. Use dupefinder to generate a catalog of all files on your new machine.
    2. Transfer this catalog to the old machine
    3. Use dupefinder to detect and delete any known duplicate
    4. Anything that remains on the old machine is unique and needs to be transfered to the new machine

    You can get in two ways: there are pre-built binaries on Github or you may use go get:

    go get github.com/rubenv/dupefinder/...

    Usage should be pretty self-explanatory:

    Usage: dupefinder -generate filename folder...
        Generates a catalog file at filename based on one or more folders
    Usage: dupefinder -detect [-dryrun / -rm] filename folder...
        Detects duplicates using a catalog file in on one or more folders
      -detect=false: Detect duplicate files using a catalog
      -dryrun=false: Print what would be deleted
      -generate=false: Generate a catalog file
      -rm=false: Delete detected duplicates (at your own risk!)

    Full source code on Github

    Technical details

    Dupefinder was written using Go, which is my default choice of language nowadays for these kind of tools.

    There’s no doubt that you could use any language to solve this problem, but Go really shines here. The combination of lightweight-threads (goroutines) and message-passing (channels) make it possible to have clean and simple code that is extremely fast.

    Internally, dupefinder looks like this:

    Each of these boxes is a goroutine. There is one hashing routine per CPU core. The arrows indicate channels.

    The beauty of this design is that it’s simple and efficient: the file crawler ensures that there is always work to do for the hashers, the hashers just do one small task (read a file and hash it) and there’s one small task that takes care of processing the results.

    The end-result?

    A multi-threaded design, with no locking misery (the channels take care of that), in what is basically one small source file.

    Any language can be used to get this design, but Go makes it so simple to quickly write this in a correct and (dare I say it?) beautiful way.

    And let’s not forget the simple fact that this trivially compiles to a native binary on pretty much any operationg system that exists. Highly performant cross-platform code with no headaches, in no time.

    The distinct lack of bells and whistles makes Go a bit of an odd duck among modern programming languages. But that’s a good thing. It takes some time to wrap your head around the language, but it’s a truly refreshing experience once you do. If you haven’t done so, I highly recommend playing around with Go.

    Random questions

    Comments | @rubenv on Twitter

    Interview with Mary Winkler

    Could you tell us something about yourself?

    My name is Mary Winkler and I work under the brand Acrylicana. I love coffee, cats, pastels, neons, sunshine, and sparkles.

    Do you paint professionally, as a hobby artist, or both?

    Professionally mostly, but also just because I love creating. If I can make a mark, painting, drawing, crafting, etcetera, I will.

    What genre(s) do you work in?

    Realism, kawaii, stylized, pop art… there’s a lot of terms that define my art, and it has changed and continues to change over time.

    Whose work inspires you most — who are your role models as an artist?

    I adore the work of Peter Max, Macoto, Junko Mizuno, Lisa Frank, Bouguereau, and Erte, as well as artist friends Miss Kika, Anneli Olander, Zambicandy, and Brittany Ngo.

    How did you get to try digital painting for the first time?

    In high school my oldest brother bought me an off-brand graphics tablet, well over a decade ago. I’ve been creating art digitally ever since.

    What makes you choose digital over traditional painting?

    I love both mediums, actually. If I’m pressed for time, working with a client, or just don’t want a mess, digital is the way to be. Most of my work is done digitally. I do love to be able to paint up wood, canvas, or paper with acrylics or watercolors for gallery shows or small pieces to put in my shop.

    How did you find out about Krita?

    I was writing an article for Tuts+ covering drawing and design programs that weren’t made by Adobe. I had some twitter followers mention it and later when the article ran a few people commented about the program because I missed it. Rectified that mistake by painting for three days straight and haven’t shut up about Krita.

    What was your first impression?

    The program immediately detected my tablet (Wacom Cintiq) and while some larger file sizes and my machine can produce a little bit of lag, the program doesn’t freeze on me, crash unexpectedly, or cause weird jagged lines when they should be smooth. Krita’s smooth and lighter than Photoshop, and has such good painting tools!

    What do you love about Krita?

    LOVE the blending tools. I’m used to those of Paint Tool SAI, and finding a program whose brushes are far more customizable and can do more is digital art heaven. Especially an open source one!

    What do you think needs improvement in Krita? Is there anything that really annoys you?

    I know it’s small, but I’d love a zoom tool in the toolbar. I’m happy to push plus and minus, but not seeing the little magnifying glass first thing was something I missed from a new user standpoint.

    What sets Krita apart from the other tools that you use?

    It’s not hogging all of my RAM like Painter or Adobe products can. While it’s lighter than those programs, it’s also packed with more features than something like FireAlpaca or Paint Tool SAI. I have the ability to customize brushes and tools fantastically, and have barely done so so far thanks to kickass default tools.

    If you had to pick one favourite of all your work done in Krita so far, what would it be, and why?

    So far I’ve only done two: the tart piece and a poster design for an upcoming gallery show. I love them both and cannot choose. I do plan on adding hundreds of doodles done in Krita to my harddrive.

    What techniques and brushes did you use in it?

    So far I love the watercolor-style brushes, sparkle brushes, and the blending ones. I’ve been playing with default ones mostly to get the hang of what Krita has to offer. Simply love anything that is intuitive in its use. Immediately I could apply my painting techniques to the program without having to learn new ways to use layers or complex blending or painting styles. It’s like working with acrylics, and I love that.

    Where can people see more of your work?

    You can follow me on behance, instagram, facebook, twitter, and deviantart.

    Anything else you’d like to share?

    I write a lot of tutorials for Tuts+ (http://tutsplus.com/authors/mary-winkler) and add videos occasionally on youtube (https://www.youtube.com/user/acrylicana). I hope to add Krita to my roster of tutorials/courses/process videos soon. :)

    May 22, 2015

    iio-sensor-proxy 1.0 is out!

    Modern (and some less modern) laptops and tablets have a lot of builtin sensors: accelerometer for screen positioning, ambient light sensors to adjust the screen brightness, compass for navigation, proximity sensors to turn off the screen when next to your ear, etc.


    We've supported accelerometers in GNOME/Linux for a number of years, following work on the WeTab. The accelerometer appeared as an input device, and sent kernel events when the orientation of the screen changed.

    Recent devices, especially Windows 8 compatible devices, instead export a HID device, which, under Linux, is handled through the IIO subsystem. So the first version of iio-sensor-proxy took readings from the IIO sub-system and emulated the WeTab's accelerometer: a few too many levels of indirection.

    The 1.0 version of the daemon implements a D-Bus interface, which means we can support more than accelerometers. The D-Bus API, this time, is modelled after the Android and iOS APIs.


    Accelerometers will work in GNOME 3.18 as well as it used to, once a few bugs have been merged[1]. If you need support for older versions of GNOME, you can try using version 0.1 of the proxy.

    Orientation lock in action

    As we've adding ambient light sensor support in the 1.0 release, time to put in practice best practice mentioned by Owen's post about battery usage. We already had code like that in gnome-power-manager nearly 10 years ago, but it really didn't work very well.

    The major problem at the time was that ambient light sensor reading weren't in any particular unit (values had different meanings for different vendors) and the user felt that they were fighting against the computer for the control of the backlight.

    Richard fixed that though, adapting work he did on the ColorHug ALS sensor, and the brightness is now completely in the user's control, and adapts to the user's tastes. This means that we can implement the simplest of UIs for its configuration.

    Power saving in action

    This will be available in the upcoming GNOME 3.17.2 development release.

    Looking ahead

    For future versions, we'll want to export the raw accelerometer readings, so that applications, including games, can make use of them, which might bring up security issues. SDL, Firefox, WebKit could all do with being adapted, in the near future.

    We're also looking at adding compass support (thanks Elad!), which Geoclue will then export to applications, so that location and heading data is collected through a single API.

    Richard and Benjamin Tissoires, of fixing input devices fame, are currently working on making the ColorHug-ALS compatible with Windows 8, meaning it would work out of the box with iio-sensor-proxy.


    We're currently using GitHub for bug and code tracking. Releases are mirrored on freedesktop.org, as GitHub is known to mangle filenames. API documentation is available on developer.gnome.org.

    [1]: gnome-settings-daemon, gnome-shell, and systemd will need patches

    Google taking the SMIL out of SVG.

    Google has recently announced their intention to drop SMIL support in Blink, the rendering engine for Chrome. SMIL is a way to animate SVG’s in a declarative way. Google’s argument is that SMIL animation has not become hugely popular and that Web Animations will provide the same functionality. As a result of this announcement, the SVG working group decided to move SMIL from SVG 2 and into its own specification. One could say that SMIL is on life support at the moment.

    SMIL’s lack of use is most likely due to its lack of support in IE. Microsoft has declared they will not implement SMIL in IE but they have hinted in the past that they are open to a native JS implementation built on top of Web Animations.

    So why would losing SMIL be a great loss?

    1. SMIL declarative animations are easier to write compared to JavaScript or CSS/Web Animations.
    2. SMIL animations are in general more performant.
    3. With SMIL animations one can independently animate different attributes and properties.
    4. JavaScript is not allowed to run inside SVGs in many situations due to security issues so it is not a viable alternative in many cases.
    5. Web Animations don’t replace all the functionality of SMIL. For example, one cannot animate attributes including paths. In particular you won’t be able to do this:
    Morphing Batman logos.

    A variety of Batman logos, animated with SMIL.

    Ironically, YouTube is planning on using SMIL to animate buttons.

    As usual, if you are reading this in a blog aggregator and the images don’t display correctly, try viewing on my blog website. Aggregators don’t play well with SVG.

    (For more on animating paths, see my blog post on path animations.)

    You can read about Google’s intention and the debate that is going at the chromium.org Google group. If you use SMIL or plan to, let Google know that it is important to you.

    A figure just to have a nice image in Google+ (which doesn’t do SVG… another reason to frown):

    Frown face.

    Second stretchgoal reached and new builds!

    We’ve got our second stretchgoal through both Kickstarter and the Paypal donations! We hope we can get many more so that you, our users, get to choose more ways for us to improve Krita. And we have got half a third stretch goal actually implemented: modifier keys for selections!

    Oh — and check out Wolthera’s updated brush packs! There are brush packs for inking, painting, filters (with a new heal brush!), washes, flow-normal maps, doodle brushes, experimental brushes and the awesome lace brush in the SFX brush pack!

    We’ve had a really busy week. We already gave you an idea of our latest test-build on Monday, but we had to hold back because of the revived crash file recovery wizard on windows… that liked to crash. But it’s fixed now, and we’ve got new builds for you!

    So what is exactly new in this build? Especially interesting are all the improvements to PSD import/export support. Yesterday we learned that Katarzyna uses PSD as her working format when working with Krita – we still don’t recommend that, but it’s easier now!

    Check the pass-through switch in the group layer entry in the layerbox!

    Check the pass-through switch in the group layer entry in the layerbox!

    • Dmitry implemented Pass-Through mode for group layers. Note: filter, transform and transparency masks and pass-through mode don’t work together yet, but loading and saving groups from and to PSD now does! Pass-through is not a fake blending mode as in Photoshop: it is a switch on the group layer. See the screenshot!
    • We now can load and save layerstyles, with patterns from PSD files! Get out your dusty PSDs for testing!
    • Use the right Krita blending mode when a PSD image contains Color Burn.
    • Add Lighter Color and Darker Color blending modes and load them from PSD.
    • When using Krita with a translation active on windows, the delay on starting a stroke is a bit less, but we’re still working on eliminating that delay completely.
    • The color picker cursor now shows the currently picked and previous color.
    • Layer styles can now be used with inherit-alpha
    • Fix some issues with finding templates.
    • Work around an issue in the oxygen widget style on Linux that would crash the OpenGL-based canvas due to double initialization
    • Don’t toggle the layer options when right-clicking on a layer icon to get the context menu (patch by Victor Wåhlström)
    • Update the Window menu when a subwindow closes
    • Load newer Photoshop-generated JPG files correctly by reading the resolution information from the TIFF tags as well. (Yes, JPG resolution is marked in the exiv metadata using TFF tags if you save from Photoshop…)
    • Show the image name in the window menu if it hasn’t been saved yet.
    • Don’t crash when trying to apply isolate-layer on a transform mask
    • Add webp support (at least on Linux, untested on Windows)
    • Add a shortcut to edit/paste into a new image. Patch by Tiffany!
    • Fix the autosave recovery dialog on Windows for unnamed autosaves!
    • Added a warning for intel users who may still be dealing with the broken driver. If Krita works fine for you, just click okay. If not, update your drivers!

    New builds for Linux are being created at the moment and will be available through the usual channels.



    From Vista and up, Windows 7 and up is recommended. There is no Windows XP build. If you have a 64 bits version of Windows, don’t use the 32 bits build! The zip files do not need installing, just unpacking, but do not come with the Visual Studio C runtime that is included in the msi installer.


    (Please keep in mind that these builds are unstable and experimental. Stuff is expected not to work. We make them so we know we’re not introducting build problems and to invite hackers to help us with Krita on OSX.)


    A closing holes tool for the re-topology room, with similar flexibility and power as the LiveClay closing holes tools.

    May 21, 2015

    Krita comes to Discworld!

    We found out that the German Discworld covers were made with Krita, and had the privilege to ask the artist to talk about her work!

    (Don’t forget to check out our 2015 Kickstarter campaign as well!)
    Color of Magic z napisami Katarzyna Oleska

    Hi. My name is Katarzyna Oleska and I am an Illustrator working for publishers, magazines and private clients. A couple of months ago, I came across a free program for painters called Krita. My experience of free programs in the past wasn’t great, but to my surprise, Krita was different. At first I was overwhelmed with the number of dockers and settings, but soon found that they were there for a reason. I fell in love with Krita so much that I left my old Corel Painter and started using Krita to paint my commissions. Most of my recent Terry Pratchett covers were painted in Krita.

    How did you get into illustration/book cover painting in the first place?

    I started painting covers back in 2003 when I was still studying architecture. I’d always liked to draw and paint and wanted to see my works in print. So one day I took a chance and e-mailed one of the publishers I wanted to work for. I attached a couple of samples of my works and I got my first job straight away. Pretty lucky. Back then I was still working traditionally but as time went by I bought a tablet and started working digitally.

    Pyramids z napisami Katarzyna Oleska

    How do you find jobs?

    It really depends. Some of the commissions come to me and some I have to chase. If the commission comes to me it’s usually through word of mouth or because the client saw my works online. But I also approach new publishers, send them my work samples, my portfolio etcetera.

    Can you choose which books you illustrate, or do you just do what a publisher throws you?

    Unfortunately I don’t have the comfort of choosing what I want to illustrate. I can refuse politely if I think I can’t deliver a good illustration, for example when I feel my style wouldn’t fit the story. But publishers usually know what I am good at, they know my portfolio and I have never really refused any cover yet.

    How do you determine which scene/character(s) to put on the cover?

    The best decision of which scene or characters to put on the cover can only be made if I know the story so whenever I have a chance to read a book I take it. Being a fan of reading myself, I know how important it is for the cover to reflect the story inside; especially with a series like the Terry Pratchett Discworld novels. I was already a huge Terry Pratchett fan, so that wasn’t a problem.

    When choosing a scene to paint I usually try to analyse where the main focus of the story is. Very often I am tempted to paint a scene that would look amazing on the cover but I catch myself in time and remind myself that this particular scene, though amazing, wouldn’t really sell the story. So I choose the one that will do it better and will also resonate with the title. For example with “Guards, Guards” the only reasonable choice was to paint the Guards running away from a dragon they were trying to track down. Nothing else would really fit.

    Guards Guards z napisami Katarzyna Oleska

    Sometimes, however, it’s impossible to read a book because of a tight deadline or the language it was written in. When that happens I try to make sure I find out as much as possible about the book from the publisher.

    What sets Krita apart from other tools you’ve used?

    The first and most obvious thing is that it’s free. I love than young artists will now have access to such a great tool without spending lots of money. But I would never recommend a program based solely on the price. I have used some free programs and never liked them. They would last a very short time on my computer. With Krita it’s different – I think it’s already a strong competitor to the best known programs on the market.

    For me, Krita feels very natural to use. I have worked both in Photoshop and Painter before and although I like them, I’ve always been hoping to find a program that sits somewhere in between those two. As an illustrator I am mostly interested in paint tools. Photoshop has always seemed too technical and not so intuitive. Painter, while trying to deliver the painterly feel, wasn’t really delivering it. With Krita I feel almost like I’m painting. The number of settings for brushes can be overwhelming at first, but it helps to create brushes that are customized specifically for me. I especially like how Krita manages patterns in brushes.

    Sorcery z napisami Katarzyna Oleska

    What does Krita already do better, and what could make it better still?

    As well as the brushes, I also love the vector tools in Krita. I have never before seen a program where tools would change their characteristics depending on what kind of layer we use them on (paint/vector).

    I also love that I can pick a color with ctrl and dynamically change the size of the brush by holding shift and dragging my pen. I often only have to use my pinky to control these two.

    Rotating the canvas is easy (space-shift) and I am addicted to the mirror tool as I use it to verify the proportions in my paintings (mirroring the image helps spot mistakes). I love that when I’m using two windows for one file the mirror tool only affects one of the windows. The warping tool is also great. I don’t use it much, but I tried it out and I love the way it works. Multiple Brushes and Wrap Around Mode are great too, they make creating patterns so easy. But one of my favourite things is that I can choose my own Advanced Color Setting Shape and Type and that there are so many options that come with it.

    Things that could be improved: when I overwrite a brush preset I cannot keep the old icon I created. Perhaps an option to keep the old icon could be added. Seems like a small problem but when using many brushes I get used to the icon and when it’s gone I have to search for my brush. The other improvement would be the ability to merge multiple layers together.

    Can you give a quick overview of your workflow?

    Sure. I actually prepared a short video that shows how I work. It’s a sketch for Terry Pratchett’s “Wyrd Sisters”. I used the older version of Krita back then but the workflow remains the same.

    Do you work closely with the publisher for a book cover, or do you only deliver a painting so you don’t see the result until it’s published?

    Very often, before I even start sketching, the publisher will send me a draft of the cover’s layout so that I am aware of how much space I have to work with. Sometimes however, when the publisher doesn’t know the final layout, they give me some directions and let me decide how much space I want to leave for the lettering. Usually after I’ve handed them the initial sketch they can correct me, and ask to change the composition a bit. When it comes to the finished illustration I have full control over it until I’ve e-mailed it to the publisher. Once they have approved it, how it looks when it is published is out of my hands. Sometimes they will send me the final version of the cover, so that I know what it will look like in print and I can make some last minute suggestions but I don’t have real control over the cover itself.

    What are the special requirements (colour, resolution, file format) and challenges when you work for print?

    I like to work with bigger formats. I think a painting looks better when painted big and then shrunk to the size of the cover rather than when it’s painted with only small size in mind. A big size forces me to be more precise in details so in the end the image looks more crisp and the quality is better. Besides, the client may in the future want to use the painting for a poster and then I know the painting will look great.

    I usually work with psd files. I use many layers and this is the best file type for me. When I send out the final image I flatten the image and save it as a tiff file. It may be heavier than jpg but there is no loss in quality. Also I work in an RGB mode but I always switch to CMYK in the end to see if I like how it’s going to look in print (CMYK has fewer colors). If necessary I correct any mistakes I see.

    To see more of Katarzyna’s work, visit her site: www.katarzynaoleska.com

    Publishing House: Piper –www.piper.de
    Lettering: Guter Punkt – www.guter-punkt.de

    Twenty years of Qt!

    I first encountered Qt in Linux Journal in 1996. Back then, I wasn't much of programmer: I had written a GPL'ed mail and Usenet client in Visual Basic and was playing around with Linux. I wanted to write a word processor, because that was really missing, back then.

    I tried to use xforms, but that didn't have open source (it was binary only, can you believe it?), and besides, horrible. Since I didn't particularly care about having a GUI, I tried to use curses, which was worse. I had taken a look at Motif years before, so I didn't look again. Sun's OPEN LOOK had a toolkit that looked nice, but wasn't. For work, I had used Delphi and MFC, and had had to make sense of Oracle 2000. None of those were useful for writing a word processor for Linux.

    And then, suddenly, out of the blue (though I remembered some of the names involved with Qt as being involved with my favorite ZX Spectrum emulator), appeared Qt. Qt made sense: the classes were helpfully named, the api's were clear and sensible, the documentation was good, the look and feel worked fine. It had everything you'd need to write a real application. Awesome!

    So I got started and discovered that, in the first place, I didn't know what makes a word processor tick, and in the second place, I didn't know C++... So my project foundered, the way projects tend to do, if you're trying to do stuff all by your lonesome.

    Then I changed jobs, stopped working on a broken-by-design Visual Basic + Oracle laboratory automation system for Touw in Deventer, started working with Tryllian, building Java-based virtual agent systems. Fun! I learned a lot at that job, it's basically where I Was taught programming properly. I discovered Python, too, and loved it! Pity about that weird tkInter toolkit! And I started using KDE as soon as I had a computer with more than 4 megabytes of ram, and KDE used Qt.

    Qt still made sense to me, but I still didn't know C++, though it looked to me that Qt made C++ almost as easy as Java, maybe easier, because there were seriously dumb bits to Java.

    Then PyQt arrived. I cannot figure out anymore when that was: Wikipedia doesn't even tell me when it was first released! But I threw myself into it! Started writing my first tutorials in 1999 and followed up writing a whole book on PyQt. My main project back then was Kura, an alternative to SIL's Shoebox, a linguistic database application that later got handed over to the Ludwig-Maximilians University in Munich.

    I never could make sense out of Java's GUI toolkit: Swing didn't swing it for me. But that was work stuff, and from 2003, I worked on Krita. I started doing my own painting application in PyQt, about the time Martin Renold started MyPaint. I quickly decided that I couldn't do a painting application on my own, just like I couldn't do a word processor on my own. By that time I had taken a good hard look at GTK as well, and concluded that anyone who'd propose to a customer to base a project on GTK should be sued for malpractice. Qt just made so much more sense to me...

    So I found Krita, learned bits of C++, and since then there haven't been many days that I haven't written Qt-based code. And without Qt, I probably would have started a second-hand bookshop or something. Qt not just lets me code with pleasure and profit, it is what keeps me sane, coding!

    May 20, 2015

    Nostalgic Blend(er) of the past II

    Here’s the second batch of recovered videos from Vimeo

    May 18, 2015

    First Target Reached!

    On Sunday, we made the base target for our Kickstarter! Unless too many backers decide to cancel their pledges, funding for making Krita really, really fast and animation support is secure! Now, of course, is not the time to fold the hands and lean back: it would be a pity if we don’t manage to reach a handful or even more stretch goals!

    But having reached this milestone, it’s time to make it easy to back the project through paypal:

    You can choose your reward level in the comment, and from 15 euros you’ll get your stretch goal voting rights, of course!

    Talking about stretch goals… Michael Abrahams surprised us all by submitting a patch on reviewboard that implemented most of the selection tools improvement stretch goal! Shift, alt, shift all, ctrl have been implemented for the polygonal, elliptical and rectangular selection tools. The rest is still todo, so it’s not ready for a build yet.

    We’ve been busy working on fixing other issues as well:

    • Dmitry implemented Pass-Through mode for group layers (note: filter, transform and transparency masks and pass-through mode don’t work together yet, but loading and saving from and to PSD does!
    • When using Krita with a translation active on windows, the delay on starting a stroke is a bit less, but we’re still working on eliminating that delay completely
    • The color picker cursor now shows the currently picked and previous color.
    • We now can load layerstyles (with some limitations) from PSD files. Saving is coming next!
    • Layer styles can now be used with inherit-alpha
    • Fix some issues with finding templates
    • Work around an issue in the oxygen widget style that would crash the OpenGL-based canvas due to double initialization
    • Don’t toggle the layer options when right-clicking on a layer icon to get the context menu (patch by Victor Wåhlström)
    • Update the Window menu when a subwindow closes
    • Load newer PSD-generated JPG files correctly by reading the resolution information from the TIFF tags as well. (Yes, JPG resolution is marked in the exiv metadata using TFF tags…)
    • Show the image name in the window menu if it hasn’t been saved yet.
    • Don’t crash when trying to apply isolate-layer on a transform mask
    • Add webp support (at least on Linux, untested on Windows)
    • Use the right Krita blending mode when a PSD image contains Color Burn.
    • Add Lighter Color and Darker Color blending modes and load them from PSD.
    • Add a shortcut to edit/paste into a new image. Patch by Tiffany!
    • Fix the autosave recovery dialog on Windows for unnamed autosaves

    Unfortunately, all this has left our codebase in a slightly unstable state…  We tried to make new builds, but they just aren’t good enough yet to share! Working on that, though, and hopefully we’ll get there by Wednesday!


    Interview with Evgeniy Krivoshekov


    Could you tell us something about yourself?

    Hi! My name is Evgeniy Krivoshekov, 27 years old, I’m from the Far East of Russia, Khabarovsk. I’m an engineer but have worked as sales manager, storekeeper and web programmer. Now I’m a 3d-modeller! I like to draw, read books, comics and manga, to watch fantastic movies and cartoons and to ride my bicycle.

    Do you paint professionally, as a hobby artist, or both?

    I’m not a pro-artist yet. Drawing is my hobby now but I really want to become a full-time professional artist. I take commissions for drawings occasionally, but not all the time.

    What genre(s) do you work in?

    Fantasy, still life.

    Whose work inspires you most — who are your role models as an artist?

    Wah! So many artists who inspire me!

    I think that I love not the artists but their works. For example: Peter Han’s drawings in traditional technique; Ilya Kuvshinov’s work in photoshop and with anime style; Dave Rapoza, who is an awesome artist who draws in traditional and digital technique with his own style and very detailed; Pascal Campion – his work is full of mood and motion and life! And all those artists who inspire me a little. I like many kinds of art: movies, cartoon, anime, manga and comics, music and all kinds of art inspire me,

    How and when did you get to try digital painting for the first time?

    Hmmmm… I’m not sure but I think that was in 2007 when my father bought our (my family’s) first computer for learning and studying. I was a student, my sister too, and we needed a computer. My first digital tablet was Genius, and the software was Adobe Photoshop CS2.

    What makes you choose digital over traditional painting?

    I don’t choose between digital and traditional drawing – I draw with digital and traditional techniques. I’ve been doing traditional drawing since childhood but digital drawing I think I’m just starting to learn.

    How did you find out about Krita?

    I think it was when I started using Linux about 3-4 years ago. Or when I found out about the artist David Revoy and read about Krita on his website.

    What was your first impression?

    Ow – it was realy cool! Krita’s GUI is like Photoshop but the brushes are like brushes in Sai, wonderful smudge brushes! It was a very fast program and it was made for Linux. I was so happy!

    What do you love about Krita?

    Surprisingly freely configurable interface. I used to draw in MyPaint or GIMP, but it was not so easy and comfortable as in Krita. Awesome smudge brushes, dark theme, Russian support by programmer Dmitriy Kazakov. The wheel with brushes and the color wheel on right-click of the mouse – what a nice idea! The system of dockers.

    What do you think needs improvement in Krita? Is there anything that really annoys you?

    Managing very high resolution files, the stability and especially ANIMATION! I want to do cartoons, that’s why I want an animation toolkit in Krita. It will be so cool to draw cartoons in Krita as in TV Paint. But Krita is so powerful and free.

    What sets Krita apart from the other tools that you use?

    I use Blender, MyPaint, GIMP and Krita but I rarely mix them. MyPaint and GIMP I rarely use, only when I really need them. Blender and Krita are my favourite software. I think that I will soon start to combine them for mix-art: 3d-art+hand-drawing.

    If you had to pick one favourite of all your work done in Krita so far, what would it be, and why?

    I think Frog-rider, Sunny, detailed work with an interesting plot about the merchant on the frog. Funny and simple – everything I like.

    What techniques and brushes did you use in it?

    I used airbrush and circle standard brushes, basic wet brush, fill block and fill circle brushes, ink brush for sketching, my own texture brush and move tool. That’s all I need for drawing. As regards techniques… sometimes I draw by value, sometimes from a sketch with lines, sometimes black and white with colors underneath (layer blending mode) or with colors without shading – it depends on my mood of the moment,

    Where can people see more of your work?

    My daily traditional and digital pieces on Instagram. Some photos, but many more drawings. More art at DeviantArt and Artstation.

    Anything else you’d like to share?

    I just want to say that anyone can draw, it’s all a matter of practice!

    May 17, 2015

    Nostalgic Blend(er) of the past I

    Hi all :)

    Recently found my forgotten account in Vimeo where I posted several years ago (seems like yesterday) my experiments and tinkers. Since I will no longer use or maintain that account I’m uploading them to my active Youtube channel to avoid loosing them in case Vimeo servers drop inactive accounts.

    OMG what a lot of memories they bring me, they still float around in this blog as I started it in 2007 when I called it: True Volumetrics (for Blender) and it has witness my personal growth from a curious kid to …. an older curious kid XD.

    I will never forget at that time my huge lack of resources, it was just a year before, that I could finally bought my first Pentium 4 computer (256 MB RAM and 32 MB Video it was a dream come true at that time in Cuba), with little to none computer programming experience in the past, but a strong love for math and physics since I was studying Nuclear Physics and with a CG passion eroding me inside out for not choosing my perfect career. So, at the third year of Nuclear Physics (2 years before getting my degree!) I took the leap of faith and changed college: I remember it was a drama for me,  Directors, professors and classmates didn’t wanted me to leave as I was showing good promises in the field … making it more difficult for me to make the choice: -what if I’m wrong? what if I’m dropping a unique opportunity career for a mediocre future? cheers to them wherever they are now!

    I think I will never know, and every time I face a life restart I have the very same fears, but at least the chosen path gave me the opportunity to realize my 2  biggest dreams: – Working at the CG industry and become free from the illness of my society.

    Blender was my dream scene and my playground, due to my ingenuity I could not finish many projects there but I acted as a catalyst for them to happen. Instead of asking in forums for features I drafted them, showed them what can be achieved and that it was really possible, so experienced devs could turn them into life. The community opened me their arms and their heart and I still carry them with me, I guess that being open source, I can go back anytime in the future. Blender have long evolve those points and I see with pleasure how is turning into something bigger that the creators, become self sustainable. It has surpassed the critical mass for open source projects to continue live on forever and not be forgotten in the springs of short lived similar projects.

    In those videos also appear my roots at 3DCoat, where I have sprout my first white hairs and I found a nest too and I pushed myself to horizons never expected before :) We can’t have everything we want in life and our lifetime budget is limited :( we get consolation in the hope that, someday in the future we will see again our friends, relatives, lovers and things will be the same but is not. Our life threads diverge and we turn complete strangers again.

    All that remains is nostalgia. 


    May 15, 2015

    Of file modes, umasks and fmasks, and mounting FAT devices

    I have a bunch of devices that use VFAT filesystems. MP3 players, camera SD cards, SD cards in my Android tablet. I mount them through /etc/fstab, and the files always look executable, so when I ls -f them, they all have asterisks after their names. I don't generally execute files on these devices; I'd prefer the files to have a mode that doesn't make them look executable.

    I'd like the files to be mode 644 (or 0644 in most programming languages, since it's an octal, or base 8, number). 644 in binary is 110 100 100, or as the Unix ls command puts it, rw-r--r--.

    There's a directive, fmask, that you can put in fstab entries to control the mode of files when the device is mounted. (Here's Wikipedia's long umask article.) But how do you get from the mode you want the files to be, 644, to the mask?

    The mask (which corresponds to the umask command) represent the bits you don't want to have set. So, for instance, if you don't want the world-execute bit (1) set, you'd put 1 in the mask. If you don't want the world-write bit (2) set, as you likely don't, put 2 in the mask. So that's already a clue that I'm going to want the rightmost byte to be 3: I don't want files mounted from my MP3 player to be either world writable or executable.

    But I also don't want to have to puzzle out the details of all nine bits every time I set an fmask. Isn't there some way I can take the mode I want the files to be -- 644 -- and turn them into the mask I'd need to put in /etc/fstab or set as a umask?

    Fortunately, there is. It seemed like it ought to be straightforward, but it took a little fiddling to get it into a one-line command I can type. I made it a shell function in my .zshrc:

    # What's the complement of a number, e.g. the fmask in fstab to get
    # a given file mode for vfat files? Sample usage: invertmask 755
    invertmask() {
        python -c "print '0%o' % (~(0777 & 0$1) & 0777)"

    This takes whatever argument I give to it -- $1 -- and takes only the three rightmost bytes from it, (0777 & 0$1). It takes the bitwise NOT of that, ~. But the result of that is a negative number, and we only want the three rightmost bytes of the result, (result) & 0777, expressed as an octal number -- which we can do in python by printing it as %o. Whew!

    Here's a shorter, cleaner looking alias that does the same thing, though it's not as clear about what it's doing:

    invertmask1() {
        python -c "print '0%o' % (0777 - 0$1)"

    So now, for my MP3 player I can put this in /etc/fstab:

    UUID=0000-009E /mp3 vfat user,noauto,exec,fmask=133,shortname=lower 0 0

    How to open .pdn files? or: Things I wish I'd known earlier.

    Paint.net is a graphics program that uses its own binary file format .pdn that almost no other program can open. Paint.net has a large community and many plugins are available including a third part plugin that adds support for OpenRaster. Paint.net is written in C# and requires the Microsoft .Net runtime, meaning current versions work only on Windows Vista or later.

    If you need to open PDN files without using Paint.net there is an answer! Lazpaint can open .pdn files and also natively supports OpenRaster. Laz paint is available on Windows, Linux and MacOS X.

    In hindsight using Lazpaint would have been easier than taking a flat image and editing it to recreate the layer information I wanted. Although I respect the work done by Paint.net it is yet another example of time wasted and hassle caused by proprietary file formats and vendor lock-in.

    May 14, 2015

    Result of the work on GCompris is ready..

    As I finished the work for the time allocated by this campaign, here is a video showing the result:

    Of course being only 15% funded, I couldn’t complete the relooking for everything. But at least, I could update all the core components, all the main menu with all activities icons, and a good bunch of activities.

    Thanks again to everyone who helped making this possible; more updates about it later…

    May 12, 2015

    git: Moving partial changes between commits

    Now and then I face the fact that I’ve added changes to a commit I’d like to have moved into a different commit. Here is what you do:

    What’s there

    We have two commits. For illustration purposes I’ve trimmed the log output down:

    $ git log --stat
    commit 19c698a9ee91a5f03f1c3240fc957e6b328931f5
        WIP: adding tests
     parts/tests/functional/conftest.py       |  4 ++--
     parts/tests/functional/test_frobfrob.py  | 43 ++++++++++
     frobfrob.py                              | 14 +++++++++++++-
    commit c7ef6c3014ca9d049dea46fbed44010acf53ae79
        prepare frob frob schemas
     parts/tests/functional/conftest.py           | 31 +++++++++++++
     frobfrob/models.py                           | 32 +++++++++++++
    commit 5b30d351f51fda40d37d2f7dc25d2367bd37845a

    Now I want to move the changes made to conftest.py from commit c7ef6c3014ca9d049dea46fbed44010acf53ae79 into commit 19c698a9ee91a5f03f1c3240fc957e6b328931f5 (or HEAD).

    Pluck out the commit

    In order to pluck out the changes to conftest.py, we’ll reset the file against the previous commit 5b30d351f51fda40d37d2f7dc25d2367bd37845a (you could also use HEAD~3).

    $ git reset 5b30d351f51fda40d37d2f7dc25d2367bd37845a parts/tests/functional/conftest.py
    Unstaged changes after reset:
    M       parts/tests/functional/conftest.py
    $ git status -s
    MM parts/tests/functional/conftest.py

    As you can see, we will have staged changes and unstaged changes. The staged changes remove the additions to the conftest.py file and the unstaged changes add our code to conftest.py

    Remove and Add

    We now create two commits:

    1. Use the staged changes for a new commit which we’ll squash with c7ef6c3014ca9d049dea46fbed44010acf53ae79.
    2. Stage the unstaged changes and create another commit which we’ll squash with 19c698a9ee91a5f03f1c3240fc957e6b328931f5 or HEAD.
    # 1. commit Message is something like: squash: removes changes to conftest.py
    $ git commit
    # 2. commit
    # stage changes
    $ git add -p
    # commit, message will be something like: squash: adds changes to conftest.py
    $ git commit
    # we end up with two additional commits
    $ git log --oneline
    492ff22 Adds changes to conftest
    8485946 removes conftest files
    19c698a WIP: adding tests
    c7ef6c3 prepare frob frob schemas
    Interactive rebase put’s it all together

    Now use an interactive rebase to squash the changes with the right commits:

    $ git rebase -i HEAD~5

    May 11, 2015

    Yet new Close Holes algorithm


    Here’s new closing holes algorithm in action, based on the FillHoles research on convex contour splitting and advancing front triangulation, greatly improving existing tools.

    May 10, 2015

    Sat 2015/May/09

    • Decay

      A beautiful, large, old house in downtown Xalapa, where patina is turning into ruin.

      Decayed door Decayed roof Floor tiles Door latch Decayed door

    May 09, 2015

    Interview with Amelia Hamrick

    duelling with a demon 800px

    Could you tell us something about yourself?

    My name is Amelia Hamrick, and I’m a junior music and fine arts double major at Oklahoma Christian University. I’m actually working towards a masters in library science, but I’d like to get into illustration, concept art and webcomics on the side!

    Do you paint professionally, as a hobby artist, or both?

    I’m still an art student but I hope to work on a professional level. I definitely draw a lot for fun outside of classwork though, so both!

    What genre(s) do you work in?

    Fantasy and sci-fi mostly, though I dabble in other genres!

    Whose work inspires you most — who are your role models as an

    Hmm… In no particular order, Hiromu Arakawa, Mike Mignola, Hayao Miyazaki, Maurice Noble, Bill Watterson, Roy Lichtenstein, Alphonse Mucha… There’s too many to list!

    How and when did you get to try digital painting for the first time?

    I started out trying to color ink drawings in GIMP with a mouse! That never turned out very well, haha. I talked my parents into getting me a little wacom bamboo tablet for Christmas when I was in… 9th grade, I think?

    What makes you choose digital over traditional painting?

    Layers, ctrl-Z, and transform tools, hahaha! I still do a lot of traditional work (I’ve really enjoyed working with gouache) but most of my not-schoolwork art is done digitally now.

    How did you find out about Krita?

    I used to go on occasional Google search sprees for all the latest drawing applications, and I found Krita during one of these about 3 or 4 years ago. My old computer couldn’t handle the windows build, though, and I hadn’t really gotten into Linux yet… I run ubuntuGNOME on my school-provided Macbook now, so I tried Krita again last year when it was just entering version 2.8, and I’ve used it ever since!

    What was your first impression?

    When I tried it for the very first time on an old computer it looked really impressive, but it was just too much for that poor old box, haha. Krita’s performance has improved tremendously!

    What do you love about Krita?

    It combines just about all the features of Photoshop that I’d use with a more streamlined interface, a MUCH better brush engine (loving the color blending and pressing E for erasing with any tool,) stroke smoothing and canvas mirroring like Paint Tool SAI… The feature I take most for granted, though, is the right-click preset palette!

    What do you think needs improvement in Krita? Is there anything that really annoys you?

    I would really love to see a more stable OS X build, as I often try to convince my fellow art students to give Krita a shot but they mostly use OS X and are wary of trying experimental builds. Other than that, the software in its current state is fantastic and I’m really excited for the new features the Kickstarter will bring (especially the animation tools and gradient map!)

    What sets Krita apart from the other tools that you use?

    I guess I’ve already answered this, but it combines features from several different painting programs I’ve tried into one killer app! It’s the only program where I haven’t felt like I’m missing anything from my workflow. And being open-source is the cherry on top!

    If you had to pick one favourite of all your work done in Krita so far, what would it be, and why?

    This poster that I drew for a friend of a scene from her Pathfinder character’s backstory is the most ambitious project I’ve completed in Krita! She won her magical flying-V guitar in a shredding duel with a punk rock demon… how can I pass that mental image up?

    What techniques and brushes did you use in it?

    I used primarily the ink pen with the tilt function (ink_tilt_20) and the hairy brush (bristles_hairy). I sketched and inked first of course, then painted everything in greyscale on one layer and colored on top of that with an overlay layer! I also used the perspective guides quite liberally (though I hadn’t yet figured out how to properly use the ruler assistants, haha)

    Where can people see more of your work?

    I have an art blog on tumblr, and I’m working on getting a proper portfolio website set up!

    Anything else you’d like to share?

    Thank you so much to everyone involved in developing Krita! I wish I could help code… maybe I can volunteer with updating the user manual!

    I’m also currently doing sketch commissions to help fund the Krita kickstarter!

    May 08, 2015

    Improved CloseHoles tool


    Recent developments into QuadFill tool, proving its bulletproof  robustness I found a must to also port a similar algorithm into our closing holes arsenal. The result is quite preomising and equally robust. Our previous tools for the task where quite good, but there was still some remaining “difficult” cases to handle, like the ones I show here. Well, soon that will be the past ;)

    Previous closing holes algorithm where non optimal for this case

    Previous closing holes algorithm where non optimal for this case

    Convex contour partitioning based

    Convex contour partitioning based

    Yet better using flat interpolation for this case.

    Yet better using flat interpolation for this case.





    PIXLS.US Now Live!

    I checked the first post I had made on PIXLS.US while I was building it, and it appears it was around the end of August, 2014. I had probably been working on it for at least a few weeks before that. Basically, it's almost been about 10 months since I started this crazy idea.

    Finally, we are "officially" launched and live. Phew!


    I don't normally ask for things from folks who read what I write here. I'm going to make an exception this time. I spent a lot of time building the infrastructure for what I hope will be an awesome community for free-software photographers.

    So naturally, I want to see it succeed. If you have a moment and don't mind, please consider sharing news of the launch! The more people that know about it, the better for everyone! We can't build a community if folks don't know it's there! :) (Of course, come by and join us yourselves as well!).

    I'll be porting more of my old tutorials over as well as writing new material there (and hopefully getting other talented folks to write as well).

    Thank You!

    Also, I want to take a moment to recognize and thank all of you who either donated or clicked on an ad. Those funds are what helped me pay for the server space to host the site as well as the forums, and will keep ads off the site. I'm basically just rolling any donations back into hosting the site and hopefully finding a way to pay folks for writing in the future. Thank you all!

    May 07, 2015

    Time to kick the tires on the new Fedora websites in staging!

    So a couple of weeks ago I mentioned the work robyduck and the Fedora websites team have been putting in on the new websites for Fedora, primarily, spins.fedoraproject.org and labs.fedoraproject.org. Here’s the handy little diagram I put together back then to explain:

    diagram showing four different fedora sites

    This week, robyduck got the new site designs into staging, which means you can try out the new work-in-progress sites right now and provide us your helpful feedback, suggestions (and dare I suggest it) content contributions to make the sites even better. :)


    Click below to visit the staging site:
    Screenshot from 2015-05-07 17:02:39


    Click below to visit the staging site:
    Screenshot from 2015-05-07 17:02:29

    You may notice as you peruse through the Fedora Labs staging site and the Fedora Spins staging site you’re going to see some bogus stuff. For example, the Robotics Suite page highlights Gimp and Inkscape as included applications. :) This is because a lot of the content is filler content and we need help from the users of these spins and experts in the individual technologies of what we should be featuring and how we should be describing these spins.

    So this is sort of a continuation of our earlier call for help, but this one is really mostly focused on content – we really need your help.


    With the staging sites for spins.fedoraproject.org and labs.fedoraproject.org up and running, we are hoping this will make it easier for folks to understand where we are lacking content and could use some help figuring out what to say about each spin. It helps to see it all in context for every spin.

    This is a good way to contribute to an open source project if you enjoy writing or documentation – we will handle all the details of getting the content into the pages, you would simply need to email us or blog comment (or whatever is easiest for you) the content you are contributing.

    If you are interested in helping us out or even have a particular interest in one of the following spins that is in most need of help, can you get in touch with us and we’ll help you get started?

    • Robotics Suite – needs list of featured applications with short descriptions.
    • Fedora Jam – needs list of featured applications with short descriptions. Could use an updated top-level description (the 2 paragraphs up top) as well.
    • Security Lab – needs list of featured applications with short descriptions.
    • Sugar on a Stick – needs list of featured applications with short descriptions.

    We’d appreciate any help you can provide. Get in touch in the comments to this post!

    Using the Transform Masks



    (This video has subtitles in english)


    Okay, so I’ve wanted to do a tutorial for transform masks for a while now, and this is sorta ending up to be a flower-drawing tutorial. Do note that this tutorial requires you to use Krita 2.9.4 at MINIMUM. It has a certain speed-up that allows you to work with transform masks reliably!

    I like drawing flowers because they are a bit of an unappreciated subject, yet allow for a lot of practice in terms of rendering. Also, you can explore cool tricks in Krita with them.

    Today’s flower is the Azalea flower. These flowers are usually pink to red and appear in clusters, the clusters allow me to exercise with transform masks!

    I got an image from Wikipedia for reference, mostly because it’s public domain, and as an artist I find it important to respect other artists. You can copy it and, if you already have a canvas, edit->paste as new image or new->from clipboard.

    Then, if you didn’t have a new canvas make one. I made an a5 300dpi canvas. This is not very big, but we’re only practicing. I also have the background colour set to a yellow-greyish colour (#CAC5B3), partly because it reminds me of paper, and partly because bright screen white can strain the eyes and make it difficult to focus on values and colours while painting. Also, due to the lack of strain on the eyes, you’ll find yourself soothed a bit. Other artists use #c0c0c0, or even more different values.

    So, if you go to window->tile, you will find that now your reference image and your working canvas are side by side. The reason I am using this instead of the docker is because I am lazy and don’t feel like saving the wikipedia image. We’re not going to touch the image much.

    Let’s get to drawing!


    First we make a bunch of branches. I picked a slightly darker colour here than usual, because I know that I’ll be painting over these branches with the lighter colours later on. Look at the reference how branches are formed.

    azelea_02_drawing flowers

    Then we make an approximation of a single flower on a layer. We make a few of these, all on separate layers.
    We also do not colour pick the red, but we guess at it. This is good practice, so we can learn to analyse a colour as well as how to use our colour selector. If we’d only pick colours, it would be difficult to understand the relationship between them, so it’s best to attempt matching them by eye.


    azelea_03_filling flowers

    I chose to make the flower shape opaque quickly by using the ‘behind’ blending mode. This’ll mean Krita is painting the new pixels behind the old ones. Very useful for quickly filling up shapes, just don’t forget to go back to ‘normal’ once you’re done.

    azelea_04_finished setup

    Now, we’ll put the flowers in the upper left corner, and group them. You can group by making a group layer, and selecting the flower layers in your docker with ctrl+click and dragging them into the group.
    The reason why we’re putting them in the upper left corner is because we’ll be selecting them a lot, and Krita allows you to select layers with ‘R’+Click on the canvas quickly. Just hold ‘R’ and click the pixels belonging to the layer you want, and Krita will select the layer in the layer docker.


    Clone Layers

    Now, we will make clusters.
    What we’ll be doing is that we select a given flower and then make a new clone layer. A clone layer is a layer that is literally a clone of the original. They can’t be edited themselves, but edit the original and the clone layer will follow suit. Clone Layers, and File layers, are our greatest friends when it comes to transform masks, and you’ll see why in a moment.


    You’ll quickly notice that our flowers are not good enough for a cluster: we need far more angles on the profile for example. if only there was a way to transform them… but we can’t do that with clone layers. Or can we?

    Enter Transform Masks!

    Transform Masks are a really powerful feature introduced in 2.9. They are in fact so powerful, that when you first use them, you can’t even begin to grasp where to use them.

    Transform masks allow us to do a transform operation onto a layer, any given layer, and have it be completely dynamic! This includes our clone layer flowers!

    How to use them:

    Right click the layer you want to do the transform on, and add a ‘transform mask’.

    A transform mask should now have been added. You can recognise them by the little ‘scissor’ icon.

    Now, with the transform mask selected, select the transform tool, and rotate our clone layer. Apply the transform.
    You know you’re successful when you can hide the transform mask, and the layer goes back to its original state!

    You can even go and edit your transform! Just activate the transform tool again while on a transform mask, and you will see the original transform so you can edit it. If you go to a different transform operation however, you will reset the transform completely, so watch out.



    We’ll be only using affine transformations in this tutorial (which are the regular and perspective transform), but this can also be done with warp, cage and liquify, which’ll have a bit of a delay (3 seconds to be precise). This is to prevent your computer from being over-occupied with these more complex transforms, so you can keep on painting.

    We continue on making our clusters till we have a nice arrangement.



    Now do the same thing for the leaves.


    Now, if you select the original paint layers and draw on them, you can see that all clone masks are immediately updated!

    Above you can see there’s been a new view added so we can focus on painting the flower and at the same time see how it’ll look. You can make a new view by going window->new view and selecting the name of your current canvas (save first!). Views can be rotated and mirrored differently.

    Now continue painting the original flowers and leaves, and we’ll move over to adding extra shadow to make it seem more lifelike!


    Alpha Inheritance

    We’re now going to use Alpha Inheritance. Alpha inheritance is an ill-understood concept, because a lot of programs use ‘clipping masks’ instead, which clip the layer’s alpha using only the alpha of the first next layer.

    Alpha inheritance, however, uses all layers in a stack, so all the layers in the group that haven’t got alpha inheritance active themselves, or all the layers in the stack when the layer isn’t in a group. Because most people have an opaque layer at the bottom of their layer stack, alpha inheritance doesn’t seem to do much.

    But for us, alpha inheritance is useful, because we can use all clone-layers in a cluster (if you grouped them), transformed or not, for clipping. Just draw a light blue square over all the flowers in a given cluster.


    Then press the last icon in the layer stack, the alpha-inherit button, to activate alpha-inheritance.


    Set the layer to multiply then, so it’ll look like everything’s darker blue.


    Then, with multiply and alpha inheritance on, use an eraser to remove the areas where there should be no shadow.


    For the highlights use exactly the same method, AND exactly the same colour, but instead set the layer to ‘Divide’ (you can find this amongst the ‘Arithmetic’ blending modes). Using Divide has exactly the opposite effect as using multiply with the same colour. The benefit of this is that you can easily set up a complementary harmony in your shadows and highlights using these two.


    Do this with all clusters and leaves, and maybe on the whole plant (you will first need to stick it into a group layer given the background is opaque) and you’re done!

    Transform masks can be used on paint layers, vector layers, group layers, clone layers and even file layers. I hope this tutorial has given you a nice idea on how to use them, and hope to see much more use of the transform masks in the future!

    You can get the file I made here to examine it further! (Caution: It will freeze up Krita if your version is below 2.9.4. The speed-ups in 2.9.4 are due to this file.)

    May 06, 2015

    Tips for passing Google's "Mobile Friendly" tests

    I saw on Slashdot that Google is going to start down-rating sites that don't meet its criteria of "mobile-friendly": Are you ready for Google's 'Mobilegeddon' on Tuesday?. And from the the Slashdot discussion, it was pretty clear that Google's definition included some arbitrary hoops to jump through.

    So I headed over to Google's Mobile-friendly test to check out some of my pages.

    Now, most of my website seemed to me like it ought to be pretty mobile friendly. It's size agnostic: I don't specify any arbitrary page widths in pixels, so most of my pages can resize down as far as necessary (I was under the impression that was what "responsive design" meant for websites, though I've been doing it for many years and it seems now that "responsive design" includes a whole lot of phone-specific tweaks and elaborate CSS for moving things around based on size.) I also don't set font sizes that might make the page less accessible to someone with vision problems -- or to someone on a small screen with high pixel density. So I was pretty confident.

    [Google's mobile-friendly test page] I shouldn't have been. Basically all of my pages failed. And in chasing down some of the problems I've learned a bit about Google's mobile rules, as well as about some weird quirks in how current mobile browsers render websites.

    Basically, all of my pages failed with the same three errors:

    • Text too small to read
    • Links too close together
    • Mobile viewport not set

    What? I wasn't specifying text size at all -- if the text is too small to read with the default font, surely that's a bug in the mobile browser, not a bug in my website. Same with links too close together, when I'm using the browser's default line spacing.

    But it turned out that the first two points were meaningless. They were just a side effect of that third error: the mobile viewport.

    The mandatory meta viewport tag

    It turns out that any page that doesn't add a new meta tag, called "viewport", will automatically fail Google's mobile friendly test and be downranked accordingly. What's that all about?

    Apparently it's originally Apple's fault. iPhones, by default, pretend their screen is 980 pixels wide instead of the actual 320 or 640, and render content accordingly, and so they shrink everything down by a factor of 3 (980/320). They do this assuming that most website designers will set a hard limit of 980 pixels (which I've always considered to be bad design) ... and further assuming that their users care more about seeing the beautiful layout of a website than about reading the website's text.

    And Google apparently felt, at some point during the Android development process, that they should copy Apple in this silly behavior. I'm not sure when Android started doing this; my Android 2.3 Samsung doesn't do it, so it must have happened later than that.

    Anyway, after implementing this, Apple then introduced a meta tag you can add to an HTML file to tell iPhone browsers not to do this scaling, and to display the text at normal text size. There are various forms for this tag, but the most common is:

    <meta name="viewport" content="width=device-width, initial-scale=1">
    (A lot of examples I found on the web at first suggested this: <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> but don't do that -- it prevents people from zooming in to see more detail, and hurts the accessibility of the page, since people who need to zoom in won't be able to. Here's more on that: Stop using the viewport meta tag (until you know how to use it.)

    Just to be clear, Google is telling us that in order not to have our pages downgraded, we have to add a new tag to every page on the web to tell mobile browsers not to do something silly that they shouldn't have been doing in the first place, and which Google implemented to copy a crazy thing Apple was doing.

    How width and initial-scale relate

    Documentation on how width and initial-scale relate to each other, and which takes precedence, are scant. Apple's documentation on the meta viewport tag says that setting initial-scale=1 automatically sets width=device-width. That implies that the two are basically equivalent: that they're only different if you want to do something else, like set a page width in pixels (use width=) or set the width to some ratio of the device width other than 1 (use initial-scale=.

    That means that using initial-scale=1 should imply width=device-width -- yet nearly everyone on the web seems to use both. So I'm doing that, too. Apparently there was once a point to it: some older iPhones had a bug involving switching orientation to landscape mode, and specifying both initial-scale=1 and width=device-width helped, but supposedly that's long since been fixed.

    initial-scale=2, by the way, sets the viewport to half what it would have been otherwise; so if the width would have been 320, it sets it to 160, so you'll see half as much. Why you'd want to set initial-scale to anything besides 1 in a web page, I don't know.

    If the width specified by initial-scale conflicts with that specified by width, supposedly iOS browsers will take the larger of the two, while Android won't accept a width directive less than 320, according to Quirks mode: testing Meta viewport.

    It would be lovely to be able to test this stuff; but my only Android device is running Android 2.3, which doesn't do all this silly zooming out. It does what a sensible small-screen device should do: it shows text at normal, readable size by default, and lets you zoom in or out if you need to.

    (Only marginally related, but interesting if you're doing elaborate stylesheets that take device resolution into account, is A List Apart's discussion, A Pixel Identity Crisis.)

    Control width of images

    [Image with max-width 100%] Once I added meta viewport tags, most of my pages passed the test. But I was seeing something else on some of my photo pages, as well as blog pages where I have inline images:

    • Content wider than screen
    • Links too close together

    Image pages are all about showing an image. Many of my images are wider than 320 pixels ... and thus get flagged as too wide for the screen. Note the scrollbars, and how you can only see a fraction of the image.

    There's a simple way to fix this, and unlike the meta viewport thing, it actually makes sense. The solution is to force images to be no wider than the screen with this little piece of CSS:

    <style type="text/css">
      img { max-width: 100%; height: auto; }

    [Image with max-width 100%] I've been using similar CSS in my RSS reader for several months, and I know how much better it made the web, on news sites that insist on using 1600 pixel wide images inline in stories. So I'm happy to add it to my photo pages. If someone on a mobile browser wants to view every hair in a squirrel's tail, they can still zoom in to the page, or long-press on the image to view it at full resolution. Or rotate to landscape mode.

    The CSS rule works for those wide page banners too. Or you can use overflow: hidden if the right side of your banner isn't all that important.

    Anyway, that takes care of the "page too wide" problem. As for the "Links too close together" even after I added the meta viewport tag, that was just plain bad HTML and CSS, showing that I don't do enough testing on different window sizes. I fixed it so the buttons lay out better and don't draw on top of each other on super narrow screens, which I should have done long ago. Likewise for some layout problems I found on my blog.

    So despite my annoyance with the whole viewport thing, Google's mandate did make me re-examine some pages that really needed fixing, and should have improved my website quite a bit for anyone looking at it on a small screen. I'm glad of that.

    It'll be a while before I have all my pages converted, especially that business of adding the meta tag to all of them. But readers, if you see usability problems with my site, whether on mobile devices or otherwise, please tell me about them!

    Krita 2.9.4 released!

    We’re not just keeping an eye on the kickstarter campaign (three days and almost at 50%! but go ahead and support us by all means, we’re not there yet!), we’re also working hard on Krita itself. Dmitry is busy with improving the performance of clone layers, adding PSD file support to the Layer Styles feature and fixing loading and saving masks to PSD files (we implemented that in October, but broke it subsequently…), and we’ve got a brand new release for you today.

    Well, I made packages for Windows available already on Sunday, but here’s scoop — what’s in, what not! Layer styles, startup speed improvements, memory consumption improvements, bug fixes!

    Big New Things

    And we mean big. This is the first release with the layer styles feature sponsored by last year’s kickstarter!

    • Implement Photoshop layer styles. Note: this is the first version. Some features are not implemented and we load and save only to Krita’s native file format and ASL style library files (not PSD files yet). There is also still a bug with masks and layer styles
    • make start up faster by not waiting for the presets to be loaded (startup times are now 30-50% faster )
    • Big speed improvement when using transform masks and filters. The move tool is about 20% faster.
    • Reduced the  download size of Krita for Windows by 33% (145MB to 97MB). This is the result of cleaning up unused files and fixing translations

    And then there are the bug fixes…

    • Fix the patch count of the color history
    • Lots of fixes to the layout of docker panels, dialogs and other parts of Krita
    • Lots of fixes for special widgets when using the Plastique style
    • Fix issues with resizing the icon size in resource selectors
    • Fix usability issues in the crop tool (reset size settings after doing cropping)
    • Add a function to hide docker titlebars
    • Fix issues with the default settings button
    • Save memory by not loading or saving texture information for brush presets that don’t use textures
    • Automatically add a tag based on the filename for all brush tips from Adobe ABR brush collections
    • Make Export and Save as default to the folder the original file came from
    • Make it possible to switch off compression for layers in kra files (bigger files, but faster saving)
    • Disable opening 32 bit float grayscale TIFF files: we don’t support that yet
    • Fix memory leak when using gradients
    • Fix color serialization from user interface to GMIC (bug 345639)
    • Fix crash when toggling GMIC preview checkbox (bug 344058)
    • Make it possible to re-enable the splash screen
    • Show the label for the sliders inside the slide, to save space.
    • Fix HSV options for the grid and spray brush
    • Don’t show the zoom on-canvas notification while loading an image
    • Fix many memory leaks
    • Fix the specific color selector docker so it doesn’t grow too big
    • Allow the breeze theme to be used on platforms other than KDE
    • Don’t crash when creating a pattern-filled shape if no pattern is selected (bug 346990)
    • Fix loading floating point TIFF files (bug 344334)
    • Fix loading tags for resources from installed bundles
    • Make it possible to ship default tags for our default resources (bug 338134 — needs more work to create a good default definition)
    • Remember the last chosen tag in the resource selectors (bug 346703)
    • Fix bug 346355: don’t say “All presets” in the brush tip selector’s filter



    (Please keep in mind that these builds are unstable and experimental. Stuff is expected not to work. We make them so we know we’re not introducting build problems and to invite hackers to help us with Krita on OSX.)

    May 05, 2015

    Fedora Design Team Update

    Fedora Design Team Logo

    Fedora Design Team Meeting 5 May 2015

    This is a very, very quick summary post:


    • We had three tickets that opened up today – ticket 371 for a sticker design that mleonova picked up, ticket 369 for the flock 2015 t-shirt which riecatnor picked up, and 210 for an updated map graphics which bronwynmowens grabbed.
    • We had some nice “Going to FUDcon” artwork designed by jurankdankkal and gnokki in ticket 359 – good work!!
    • Bronwyn finished her the artwork for her first ticket, ticket 347 which is a series of banners to advertise Fedora on stackexchange.
    • We gave threebean some advice on fedmenu (ticket 374) and I think we came up with some interesting ideas. I am going to copy/pasta the discussion into ticket 374 and we may end up having another discussion about it.
    • kirkB has been making progress on ticket 364 (to update the Design team wiki page) and posted his draft asking for comments / feedback. If you are a design team member please take a look and let him know what you think in the ticket! :)

    See you next time?

    Our meetings are every 2 weeks; we send reminders to the design-team mailing list and you can also find out if there is a meeting by checking out the design team category on FedoCal.

    Telling the user about firmware updates

    A common use-case that has appeared over the last week is that some vendors just want to notify people there is updated firmware available, but they don’t want fwupd to apply it automatically. This might be because an external programmer is required to update, the flashing tool is non-free, or other manual steps are required.

    If anyone is interested in doing this for their device, there are just two USB string descriptors to add, and then it all just magically works once AppStream metadata is supplied. The device doesn’t have to be OpenHardware, so there’s no real excuse.

    May 04, 2015

    Site upgrade

    Hi all


    I’m starting to see the benefits of moving to U.S , chains are falling one by one.My blog is upgraded to farsthary.com , That’s it! plain and easy ;)

    Accessing from previous address will be redirected here. Will be worth the upgrade? what experiences do you have with custom domains?


    Performance and Animation (and more): Join Krita’s 2015 Kickstarter Project

    Let’s make Krita as fast, or faster than Photoshop! That’s this year’s Krita Kickstarter theme — to begin with.

    Last year’s kickstarter was a big success and all the support resulted in the biggest, best Krita release ever, Krita 2.9, with a huge number of exciting features. In fact, this week we’ll be releasing Krita 2.9.4, the first version of Krita with the Photoshop-type layer styles feature included! (As well as speed-ups and dozens of bug fixes…)

    This year, we’re going for two ambitious goals. The first is raw, interactive performance. Painting on a big canvas, with a big brush, with textures and gradients. Krita should become as fast as (dare we say it?) Photoshop! We’ve already gotten a proof of concept working, but it needs a lot of work deep down in the core of Krita’s code. As a result, Krita should also become much more memory-efficient.

    We also learned our lesson from the previous three animation plugin projects: if we want Krita to support traditional hand-drawn animation, we need to put animation right at the core. Not so coincidentally, that’s exactly the same place where we need to work to make Krita’s painting performance outstanding.

    And that’s this year’s big topic: it’s a lot of really hard work, and it needs to be done — and we need your help for that! With your backing, Krita 3.1 will be even better, even faster, even more fun to use.

    If we go over target (and last year we did go over target!), then every 1500 euros will unlock a stretch goal, and our backers will get to vote on the stretch goals, just like last year!

    Check out our kickstarter page here:


    Quadrangulation test

    A quick test of the quadrangulation algorithm for arbitrary contours, I have remapped the functionality to the close holes tools just for development purposes, so don’t take the Interface as is, also the results are not turned into actual geometry for now. Is just to test how well and robust the algorithm can optimally fill any given contour (the holes) with quads. By no means a trivial task. ;)

    What actual tools would you think can benefit from this?


    Bullet 2.83 released and upcoming SIGGRAPH 2015 course


    The new Bullet Physics SDK 2.83 is available from github. The biggest change is the new example browser using OpenGL 3+. For more changes and features, see the docs/BulletQuickstart.pdf as part of the release. For more information and download link, see http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?f=18&t=10527

    Also, our proposal for a course on Bullet got accepted for the upcoming SIGGRAPH 2015 conference in Los Angeles. Hope to see you there!

    May 03, 2015

    Usability and Playability

    I could be programming but instead today I am playing games and watching television and films. I have always been a fan of Tetris which is a classic, but I am continuing to play an annoyingly difficult game, that to be honest, I am not sure I even enjoy all that much, but it is strangely compelling. My interest in usability coincides with my interest in playability. Each area has their own jargon but are very similar, the biggest difference is that games will intentionally make things difficult. Better games go to great lengths to make the difficulties challenging without being frustrating, gradually increasing the difficulty as they progress, and engaging the user without punishing them for mistakes. (Providing save points in a game game is similar to providing an undo system in an application, both make the system more forgiving and the users allow users to recover from mistakes, rather than punishing and them and forcing them to do things all over again.)

    There is a great presentation about making games more juicy (short article including video) which I think most developers will find interesting. Essentially the presentation explains that a game can be improved significantly without adding any core features. The game functionality remains simple but the usability and playability is improved, providing a fuller more immersive experience. The animation added to the game is not merely about showing off, but provides a great level of feedback and interactivity. Theme music and sound effects also add to the experience, and again provide greater feedback to the user. The difference between the game at the start and at the end of the presentation is striking, stunning even.

    I am not suggesting that flashy animation or theme music is a good idea for every application but (if the toolkit and infrastructure already provided is good enough) it is worth reconsidering that a small bit of "juice" like animations or sounds effect could be useful, not just in games, in any program. There are annoying bad examples too but when done correctly it is all about providing more feedback for users, and helping make applications feel more interactive and responsive.
    For a very simple example I have seen a many users accidentally switch from Insert to Overwrite mode and not know how not get out of it, and unfortunately many things must be learned by trial and error. Abiword changes the shape and colour of the cursor (from a vertical line to a red block) and it could potentially also provide a sound effect when switching modes. Food for thought (alternative video link at Youtube).

    Interview with Wolthera


    Could you tell us something about yourself?

    My name is Wolthera, I am 25, studied Game Design and currently studying Humanities, because I want to become a better game designer, and I hope to make games in the future as a job. I also draw comics, though nothing has been published yet.

    I am also part of the Krita team as a volunteer, and aside from fixing bugs and adding simple features, I do a lot of non-programming things like helpdesking, maintaining the manual, writing tutorials, providing resources, making demonstration videos, etcetera. The answers to this artist interview will thus be from a slightly different angle.

    Do you paint professionally, as a hobby artist, or both?

    I mainly paint as a hobby artist, and I am trying to get into professional drawing as either concept artist or game artist, but strangely enough the only gigs I’ve had until now are logo design and UI design.

    What genre(s) do you work in?

    Mostly fantasy, I enjoy the strange things I can do with that.

    Whose work inspires you most — who are your role models as an artist?

    Ah… It’s a bit of a hotchpotch. I really enjoy the Art Nouveau and Romantic artists for their use of colour and linework. In particular art nouveau interests me in the way how they deal with presenting detail to the audience. I enjoy this type of thing also in comics, with a particular interest toward Manga, but I was raised with Franco-Belgian comics which are really impressive in this regard as well.

    I also really like the compositions coming from Impressionist painters and the colour palettes from Expressionist ones, and how you can see both in the more abstract modern arts. Of contemporary art I most enjoy the architectural, and how it deals with space, and that’s largely because of my affinity with game design.

    How did you get to try digital painting for the first time?

    I think, officially this was DR. HALO on DOS, but I don’t recall which version exactly. I do recall making gameboard with it, drawing castle plans and the like. I continued to do the same thing with MS Paint. I later played around with ulead, which was a simple photo editing software, and then my older sister installed Paintshop Pro, and recommended me to get a tablet (which I did, and my graphire 3 is still working)… And then I spent a while colouring in my own scanned drawings. Then I moved over to Photoshop for a few years, after that Paint Tool Sai, I did use GIMP around this time but I never painted with it: the brush engines were not good enough. After that I just tried a lot of different programs, so Illustudio/Manga Studio, Open Canvas, I never enjoyed using Painter, Artrage and Azpainter, so I never really explored those programs. Then my sister showed me MyPaint, which I didn’t think impressive for a long time, until I really tried it out one day and enjoyed the effect I got from Deevad and Ramon’s brushpacks. I was soon making my own brushes then.

    What makes you choose digital over traditional painting?

    Initially it was the ease of using strong colours and having fun without wasting materials. Nowadays it’s about saving space: I don’t have a desk suitable for traditional drawing any more.

    How did you find out about Krita?

    After I played a lot with MyPaint, I heard from people that Krita 2.4 was the shit. When I went to the website at the time (which is the one before the one before the current) it just looked alien and strange, and worse: there was no Windows version, so I couldn’t even try it out. So I spent a few more years having fun with MyPaint alone, but eventually I got tired of its brush engine and wanted to try something more rough. When I checked Krita again, it had two things: a new, considerably more coherent website (the one before this one) and a Windows build. Around that time it was still super unstable and it didn’t work with my tablet. But MyPaint also had tablet problems, so I had no qualms about dual booting to Linux and trying it out there.

    What was your first impression?

    Oh my god, all these cool features! The brush engines still weren’t as high quality as those of the proprietary ones (they are now), and I missed MyPaint’s HSY’ selector(guess who is responsible for adding that to Krita? ;)) , but the brush engines were definitely super fun, and rough, and I could try out new things with it.

    What do you love about Krita?

    One of the things that was in Krita 2.7 was a bug with the Colour Selector: its cursor would automatically turn grey in certain shapes, and that annoyed me. So, in an attempt to find a fix, I tried building Krita using Deevad’s Cat guide. Turns out it wasn’t fixed in master either.

    Then I realised ‘hey, I did programming before, I can read code’ and asked Boudewijn for how to make debug messages in QT, and initially I thought I would just track down the reason the bug happened, but it turned out Krita was comprehensible enough for me to actually fix it, despite me having no prior C++, let alone QT experience.

    And that’s sorta what I really like about it: it’s a tool I can fix, improve and enhance for workflows. And that gave me a lot of agency, which leads to things like the vanishing point assistant, which could not have existed without me having a ton of experience drawing cityscapes and thus knowing the particular problems one faces when making these, and how a computer can complicate that. Other programs’ perspective tools were too simple for me. They assume that you only want to draw one type of perspective with definite sets of vanishing points, while in reality you will need a multitude of points, and this is because the people designing that feature only looked at an art book that barely explains how linear perspective works, without actually going through the workflow and finding the issues. But also, it would not have worked if I wasn’t supported so well by the senior developers in the Krita IRC, who always had time to check my code or to answer my questions, and I may seem overly praiseful of the Krita team, but it’s this support that has led me to spend most of my free time on Krita doing helpdesking, programming, tutorial writing, etc.

    What do you think needs improvement in Krita? Is there anything that really annoys you?

    It’s sometimes really annoying when a bug creeps in that I don’t have the knowhow to fix, but as a user I have no qualms with Krita. Granted, my annoyance gets tempered by the fact I can go in and change things, which is something that relates to how frustration is usually about not being able to change things that annoy you.

    At the other end, I always feel very sad when someone has a problem but I can’t reproduce it or don’t know how to fix it for the user. You want people to just enjoy doing their thing, and it can be frustrating to know a program so well and yet not being able to make a difference. And there’s still things I want to do with the assistants, and I also am sorta adopting the colour management code which could use a couple of improvement, work is never done.

    What sets Krita apart from the other tools that you use?

    I can customise it to an extent I can’t with other programs.

    If you had to pick one favourite of all your work done in Krita so far, what would it be, and why?

    Firebird! It was a drawing I did to test some brushes, and it just ended up really cool.

    What techniques and brushes did you use in it?

    A combination of textures and mix and smudge brushes as well as splatter brushes. I bundled them with my painting pack.

    Where can people see more of your work?

    Most of my 2010 onward work is here: http://wolthera.info/. That was about the time I started to avoid proprietary software. There’s still a couple of Paint Tool Sai and Adobe Illustrator images in there, but it’s mostly traditional or done with some combination of Inkscape, Gimp, MyPaint and Krita. I unfortunately don’t draw enough these days, due to school and the work I do for Krita, but I still open up Krita for things other than testing.

    Anything else you’d like to share?

    Yeah, I have a tutorial blog, which may be interesting to people trying to figure out workflows in Open Source Graphics Software.

    Other than that I hope this was a fun read.

    April 30, 2015

    Do you know robotics?

    Hi :)

    Plea for help here :)


    The websites team and I would like to feature a photo of some real robots that have been programmed and/or built using Fedora as the main banner image for the Fedora Robotics spin – but we don’t know of any specific Fedora robots. We’d even be happy with a picture of a non-Fedora robot at this point.

    If you know someone who is knowledgable about robotics and/or Fedora robotics, and who may have a picture they’d be willing to let us use, can you please get in touch?

    Thanks :)

    Stile style

    On a hike a few weeks ago, we encountered an unusual, and amusing, stile across the trail.

    [Normal stile] It isn't uncommon to see stiles along trails. There are lots of different designs, but their purpose is to allow humans, on foot, an easy way to cross a fence, while making it difficult for vehicles and livestock like cattle to pass through. A common design looks like this, with a break in the fence and "wings" so that anything small enough to make the sharp turn can pass through.

    On a recent hike starting near Buckman, on the Rio Grande, we passed a few stiles with the "wings" design; but one of the stiles we came to had a rather less common design:

    [Wrongly-built stile]

    It was set up so that nothing could pass without climbing over the fence -- and one of the posts which was supposed to hold fence rails was just sitting by itself, with nothing attached to it. [Pathological stile]

    I suspect someone gave a diagram to a welder, and the welder, not being an outdoor person and having no idea of the purpose of a stile, welded it up without giving it much thought. Not very functional ... and not very stilish, either!

    I'm curious whether the error was in the spec, or in the welder's interpretation of it. But alas, I suspect I'll never learn the story behind the stile.

    Giggling, we climbed over the fence and proceeded on our hike up to the very scenic Otowi Peak.

    5 Humanitarian FOSS projects

    Over on opensource.com, I just posted an article on 5 humanitarian FOSS projects to watch, another instalment in the humanitarian FOSS series the site is running. The article covers worthy projects Literacy Bridge, Sahana, HOT, HRDAG and FrontlineSMS.

    A few months ago, we profiled open source projects working to make the world a better place. In this new installment, we present some more humanitarian open source projects to inspire you.

    Read more

    QuadFill tool


    Finally iron out the remaining issues and is done! QuadFill is a tool aimed for quadrangulating an arbitrary 3D contours,  for testing purposes I used holes boundaries which I can easily create and shape in arbitrary forms so i can quickly test and debug the tool. But it will be used in places other than filling holes for which we ave an extensive set of algorithms. So will be more suited for retopo, autopo, and the like. The good thing is that is quite robust and flexible, given any vertex contours it will be quad dominant and produce at most, 1 triangle and the rest will be quads. Of course , that remaining triangle can be easily avoided if in a preprocess step the contour is made of even number of vertices, without loosing generality.

    In previous iterations of this tool I have not addressed the complex contour case, like T-shapes, X-shapes, C, L and the like, non convex forms, causing it to fail at those:

    fail1 mal2Now I have solved the general contour partition, avoiding uneven splitting, interpolating and recursive filling of each convex area. Eventually merging and smoothing/beautifying  the output mesh. Underlying steps are optimal or quasi optimal for initial contour constraints considering edge vertex are unmovable.

    1 2 3


    April 29, 2015

    Updating OpenHardware Firmware 2

    After quite a bit of peer review, it turns out my idea to use the unused serial field wasn’t so awesome. Thanks mostly to Stefan, we have a new proposal.

    For generic USB devices you can use a firmware version extension that is now used by ColorHug, and I hope other projects too in the future. With this the fwupd daemon can obtain the firmware version without claiming the interface on the device and preventing other software from using it straight away.

    To implement the firmware version extension just create an interface descriptor with class code 0xff, subclass code 0x46 and protocol 0x57 pointing to a string descriptor with the firmware version.
    An example commit to the ColorHug2 firmware can be found here. It costs just 21 bytes of ROM which means it’s suitable even for resource-constrained devices like the ColorHugALS. Comments welcome.

    April 28, 2015

    Updating OpenHardware Firmware

    EDIT: Don’t implement this. See the follow-up post.

    One of the use-cases I’ve got for fwupd is for updating firmware on small OpenHardware projects. It doesn’t make sense for each of the projects to write a GUI firmware flash program when most of them are using a simple HID or DFU bootloader to do basically the same thing. We can abstract out the details, and just require the upstream project to provide metadata about what is fixed in each update that we can all share.

    The devil, as they say, is in the details. When enumerating devices, fwupd needs to know the device GUID (usually, just a hardcoded mapping table from USB VID/PID). This certainly could be in a udev rule that can be dropped into the right place when developing a new device, as I don’t want people to have to build a fwupd from git just to update the new shiny device that’s just arrived.

    There are two other things fwupd needs to know. The most important is the current firmware version for a device. There is no specification for this as far as I can tell. ColorHug has a HID command GET_VERSION which returns 3 uint16M numbers for the major, minor and micro versions and other device firmwares have other similarly obvious but different ways of doing it.

    The other is how to switch the device in firmware mode back into bootloader mode so that it can flash a new version. For ColorHug there’s a RESET command, but on other hardware it’s either a custom command sequence, or doing something physical like pressing a secret button with a paperclip or shorting two pins on a PCB.

    I think it would be useful to notify the user that there in an update available, even if we can’t actually do the upgrade without doing some manual step. For this we need to get the current firmware version, ideally without open()ing the device as this will prevent other software from using it straight away. What we can get from the device for free is the device descriptors.

    What I’m going to do for ColorHug is to change the unused device serial string descriptor to “FW:1.2.3″. I’ll also support in fwupd devices changing the product string from “Widget” to “Widget FW:1.2.3″ i.e. we look in the various strings for a token with a “FW:” prefix and use that.

    If that isn’t specified then we can fall back to opening the device and doing a custom command, but when you can ask friendly upstream firmware vendors to make a super small change, it makes things much easier for everyone. Comments welcome.

    released darktable 1.6.6

    We are happy to announce that darktable 1.6.6 has been released. Please note that the 1.6.5 release was broken so 1.6.6 was directly pushed out. Just pretend 1.6.5 had been skipped.

    The release notes and relevant downloads can be found attached to this git tag:
    Please only use our provided packages ("darktable-1.6.6.*" tar.xz and dmg) not the auto-created tarballs from github ("Source code", zip and tar.gz). The latter are just git snapshots and will not work! Here are the direct links to tar.xz and dmg:

    this is another point release in the stable 1.6.x series.

    sha256sum darktable-1.6.6.tar.xz
    sha256sum darktable-1.6.6.dmg


    • fix the Olympus E330 support (which was accidentally broken in 1.6.4)
    • fix white balance reading for the Canon Powershot SX50 HS
    • white balance presets for RICOH GR
    • minor assorted bug fixes (masks, lens correction, profiled denoise, etc)

    Google Summer of Code 2015

    The list of students accepted to the 2015 edition of Google’s Summer of code has just been published. This year, we’ve got two students working on Krita: Jouni and Wolthera. Wolthera has been a Krita developer for quite some time, working on color selectors perspective assistants and more, while Jouni has contributed with bug fixes for 2.9.

    Wolthera is working on an experimental brush engine: a tangent normal map brush engine. A surface normal is a type of vector used to determine how light bounces off a surface. 3d graphics have has a way to encode these in normal-maps. To the human eye, this encoding looks like a colour. This brush engine takes the tilt sensors of a tablet stylus, and treats it like a surface normal, having it output the correct color. This would be a worthwhile asset to Krita because of the interest in hand-painted textures. There’s already quite a bit of progress in her branch! Check out the forum thread, too.


    Jouni will build on the lessons learned from last year’s animation project and integrate animation into Krita’s core. All three of our previous animation plugins were hampered by being designed as a plugin. This time, animation is going right into the deepest layers of Krita. Krita’s native file format will start supporting animations as well. Jouni had already started on animation support before Summer of Code was announced, in fact, and he has got a proof of concept up and running already.


    In fact, two weeks ago, we had our first sprint in Deventer, sponsored by the Krita Foundation, with a hopeful Jouni and Wolthera and prospective mentors Dmitry and Boudewijn, to thresh out the designs for both features and do some pair programming.


    Congrats to Jouni and Wolthera and let’s look forward to an awesome Summer of Code!

    April 25, 2015

    Stellarium 0.13.3 has been released!

    Stellarium 0.13.3 is a stable version that introduces some new features and closes 33 bug and wishlist reports. A lot of work has been done on adding few new DSO catalogs: Barnard (B), Van den Bergh (VdB), Sharpless (Sh 2), H-α emission regions in the Southern Milky Way (RCW), Lynds' Catalogue of Bright Nebulae (LBN), Lynds' Catalogue of Dark Nebulae (LDN), Collinder (Cr) and Melotte (Mel). You can find two new plugins also and one of those plugins introduces the support the new very nice feature - 3D landscapes.

    A huge thanks to the people who helped us a lot by reporting bugs!

    We updated the configuration file and the Solar System file, so if you have an existing Stellarium installation, we strongly recommend to reset the settings after you install the new version (in the Installer).

    Full list of changes:
    - Added Scenery3D plugin: enable support 3D landscapes
    - Added ArchaeoLines plugin: a tool for archaeo-/ethnoastronomical alignment studies
    - Added new DSO catalogs: Barnard (B), Van den Bergh (VdB), Sharpless (Sh 2), H-α emission regions in the Southern Milky Way (RCW), Lynds' Catalogue of Bright Nebulae (LBN), Lynds' Catalogue of Dark Nebulae (LDN), Collinder (Cr) and Melotte (Mel)
    - Added tiny visual improvements for info about comets and minor planets
    - Added Hungarian translation for Aztec skyculture
    - Added Russian translation for Western: H.A. Rey skyculture
    - Added support of meteors for Windows/MSVC packages
    - Added patch for multiscreen setups
    - Added tui/tui_font_color option for change color of text user interface (LP: #1421998)
    - Added new version of GCVS
    - Added implementation of polinomial approximation of time period 1620-2013 for DeltaT by M. Khalid, Mariam Sultana and Faheem Zaidi (2014); http://dx.doi.org/10.1155/2014/480964
    - Added new line on the celestial sphere - opposition/conjunction longitude (LP: #1377606)
    - Added texture for Ceres (LP: #1271380)
    - Extended list of proper names for deep-sky objects
    - Fixed position of Great Red Spot (LP: #490019)
    - Fixed bug in planet shadow shasder (LP: #1405353)
    - Fixed flickering Moon problem (LP: #1411958)
    - Fixed jittering moons (LP: #1416824)
    - Fixed visibility objects on distance over 50 AU. (LP: #1413381)
    - Updated the Spherical projection to be HiDPI aware. (LP: #1385367)
    - Restore unit testing for refraction and extinction. Fixed issue in unit test for DeltaT and fixed small issue for DeltaT.
    - Fixed issue in core.setObserverLocation (to a new Planet travels always 1 second) (LP: #1414463)
    - Fixed issue for cursor, who points to a wrong position after orbit update (LP: #1414824)
    - Fixed ignore the Enter key for online search dialog within Solar System Editor plugin (LP: #1414814)
    - Fixed package issue for Windows XP (LP: #1414233)
    - Fixed crash when trying to select a satellite with invalid orbit (LP: #1307357)
    - Check of updates has been removed (LP: #1414451)
    - Fixed issues in Search Tool (LP: #1416830)
    - Fixed code to update ConfigurationDialog size (LP: #995107)
    - Behavior of JD/MJD has been refactored for Date and Time Dialog (LP: #1417619)
    - Avoid delaying for the telescope control slew commands over TCP (LP: #1418375)
    - Avoid crash when clicking 'Lookup locations on network' checkbox in Locations window (Debian: #779046)
    - Updated bookmarks for Solar System editor plug-in (LP: #1425626)
    - Allowing display the scope marker below the landscape (LP: #1426441)
    - Allow fading of the landscapes without atmosphere (LP: #1420741)
    - Allow change thickness of lines of the constellations (LP: #1028432)

    Cross Platformity

    Several years ago we started porting Calligra to Windows. Supported by NLNet. Some time later, Intel also supported KO to create two Windows versions of Krita, one for tablets, one for convertible ultrabooks and later still, a new version of Calligra Words, Stage and Sheets for convertible ultrabooks. Meanwhile, the Krita Foundation has been publishing Krita on Windows and OSX for some time now. That's a fair amount of experience in puslishing software originally written on Linux on other platforms.

    Let's take a look at the starting position.

    Calligra, or rather KOffice, as it was called when it started out, was created to be a native KDE application. Integrated with the KDE desktop environment, using all the features that KDE offers, ranging from inter-process communication to system-tray notifications, shared plugin loading, mimetype handling, and other resource icon locating. These applications are KDE applications through-and-through.

    There are also some hidden assumptions in the way KDE works on Linux: for instance, that reading thousands of small files on startup isn't a big deal. We Linux users are fortunate in having a choice of really good, really fast file systems, compared to Windows or OSX users.

    So, on Linux, it's not that big a deal if people aren't running the KDE Plasma Desktop, since installing the libraries, the icons, maybe some system settings kcms will mean Krita will run just as well in Gnome as in KDE. It's a pity that some distributions don't make Krita depend on the oxygen icon set, and that others think that installing Krita means users need marble, but that's the way Linux packaging works, or doesn't work.

    Now, there are two reasons for bringing a Linux application to another platform, two ways of going about it and two ways of implementing the port.

    You can port an application to Windows or OSX because you want to use it yourself, as a Linux user in exile, or you can port an application to Windows because you want to gain a user-base on Windows.

    And you can port an application to Windows or OSX by bringing the whole Linux and KDE environment with you, or by making the application as native as possible.

    And finally, you can build on the target platform, with the target platform's native compilers, or you can cross-compile from Linux.

    If you're porting for Linux exiles, the first approach is fine. It's what on Windows is done by cygwin, msys, KDE's emerge tool or KDE's windows installer. It's what FINK or MacPorts provide on OSX: a package manager, all the tools you're used to, all the platform services the application depends on. It's a big undertaking to maintain ports of so many components, and the porting system will often have temporary failures. I'm not saying that it's wasted work: I use KDE's windows installer to get Kate on Windows myself.

    But it's not going to work when you want to build a user base for your application on Windows or OSX. The package managers, the installers are too complicated, too alien and drag in too many unfamiliar things. Even using something as Emerge to build, and then package up the built bits into an installer is problematical, because those bits will still expect the full KDE environment to be available.

    And a Windows user is going to freak out when starting an application starts daemons that keep running. No kded, therefore. Their "protection" software (snake oil, but scary snake oil) will yammer when there's weird inter-process network communication. Bye-bye dbus. For a single application like Krita, a mimetype database is overkill. Loading icons by the hundred-weight, individually gives a bad hit on startup time. And yes, we're getting nastygrams about the number of files we package with Krita versus the number of files Photoshop packs.

    It's really clear to keep in mind what the goal is. Because if you're working together with someone else, and they're of the linuxer-in-exile persuasion, and you're of the native-user persuasion, conflicts will happen all the time. The first crowd won't mind using glib in update-mime-database because, what's the problem? While you'll hate that requirement because building glib on windows and osx ain't easy, and it's a big dependency with a lot of other dependencies that come with it, and all just to be able to figure out that a .jpg file is a jpeg file.

    Most 'native' Windows applications that use 3rd party libraries includes those libraries in their own source tree, either as dll's or as source code. It's easy, you never have to deal with newer versions of libraries breaking your code, you can build everything in one go. For some libraries, it's even the only way: you cannot build the breakpad library outside the source tree of the application that uses it. But for a cross-platform application that also targets Linux distributions, this cannot be done. You cannot include all dependencies in your source tree.

    So, we need to find a way to build all dependencies without dragging in a fake Linux or fake KDE environment. Without dragging in a package manager. One that creates applications that behave as natively as possible.

    What we're currently trying to do is this: build a cmake system that builds Krita's dependencies and then builds krita. CMake's external project system works pretty well for this. It's not as complicated as the Emerge system, though there are similarities, and we're even re-using patches from Emerge for our dependencies.

    Here's the list of all dependencies we currently build:

    • automoc: needed for kdelibs-stripped
    • boost: needed for Krita
    • bzip2: needed for kdelibs-stripped
    • eigen3: needed for Krita
    • exiv2: needed for kdelibs-stripped and Krita
    • expat: needed for exiv2
    • ffi: needed for glib (only on OSX)
    • gettext: needed for glib (only on OSX)
    • giflib: needed for kdelibs-stripped and qt
    • glew: needed for Krita
    • glib: needed for shared_mime_info (only on OSX)
    • gsl: needed for Krita
    • iconv: needed for gettext and exiv2
    • ilmbase: needed for openexr
    • intltool: for glib (only on OSX)
    • jpeg: needed for kdelibs-stripped, qt and krita
    • kdelibs-stripped: specially hacked up version of kdelibs4 that doesn't need openssl, dbus and a whole lot of other things.
    • lcms2: needed for krita
    • libxml2: needed for kdelibs-stripped
    • libxslt2: needed for kdelibs-stripped
    • opencolorio: needed for krita, has it's own 3rd party external projects: tinyxml, yaml
    • openexr: needed for Krita
    • patch: needed on windows only, creates a myptch.exe because patch.exe is banned on Windows...
    • pcre: needed for shared-mime-info
    • perl: needed on Windows to build Qt
    • pkgconfig: needed on OSX to build glib
    • png: needed for Krita and Qt
    • qt: we need to build this ourselves to strip out openssl, qtscript, the database stuff and more, and because we build with a version of Visual C++ that Qt4 doesn't support out of the box
    • shared_mime_info: needed for kdelibs-stripped
    • tiff: needed for Qt and Krita
    • vc: needed for Krita
    • krita: what we finally want...

    And this is what's still missing:

    • kdcraw: would provide camera RAW import
    • poppler: would provide PDF import and export
    • openjpeg: would provide jpeg2000 import and export.

    All this is described here for OSX and here for Windows. My goal is to make a CMake based project that can build everything on OSX and Windows, and on Linux, for Windows in one go. It needs much more work, in fact more time than I actually have... Anything that can slim the number of dependencies would be very welcome!

    And now it's coming full-circle: I actually would like to have installers for Krita that work on Linux, too. Just like Blender or Qt Creator have, a 32 and 64 bits installer that people can download, run and get the latest build of Krita, without weird extra dependencies, without waiting for distributions to pick up the next version of Krita. The system we're building should be able to provide that...

    April 24, 2015

    こんにちは日本! Krita Launches Japanese Site

    We are happy to announce that we have launched a Krita site in Japanese! Over the coming months, this website will be evolving to help the Japanese community stay current with all things Krita. Currently, almost everything online is in English, so it can be difficult for other countries to learn about and use Krita. With this Japanese site, we can provide specialized instructions and resources to help them get started. We are still finishing up translations, but are far enough along that we want to release it in the wild.

    Check it out

    April 23, 2015

    Redesign of spins.fedoraproject.org; Help make your spin rock!

    Robyduck and I have been working on a total revamp of spins.fedoraproject.org. Behold, what spins.fpo looks like today:

    spins.fedoraproject.org front page screenshot

    spins.fedoraproject.org front page screenshot

    Design Suite spin details page screenshot from the current spins.fedoraproject.org.

    Design Suite spin details page screenshot from the current spins.fedoraproject.org.

    Different kinds of spins

    So one issue we have with spins is that there are different *kinds* of spins:

    • Desktop Spins There are desktop spins that each feature a different desktop environment on top of Fedora. While you can install multiple desktop environments by default, most people stick to one most of the time, and you certainly can’t use more than one in a given session. These spins are much more about the environment you use Fedora in rather than applications layered on top.
    • Functional Spins There are functional spins that consist of application bundles and configuration that you could honestly package-group install on any desktop and be able to use productively – Games, Design Suite, Robotics, etc. They are more purpose-directed than the desktop spins, which are more for general computing environments.
    • ARM builds (These aren’t actually spins but fell into the fray as they needed a home too!) Now that ARM is a top-level / supported architecture, we have ARM builds for many versions of Fedora. These images are solely architecture-based and cater to a very specific community and very specific use cases / hardware beyond traditional servers, workstations, and laptops.

    We made a decision to split the desktop spins away from the functional spins. Functional spins will be housed at a new site catered specifically for them: labs.fedoraproject.org. ARM builds will also have their own one-page site with references to important documentation and the Fedora ARM community as well.

    Here’s a rough diagram to illustrate:

    diagram showing four different fedora sites

    Desktop Spins (spins.fpo)

    (These mockups are huge by the way. Sorry :) )

    For the front page of the spins.fedoraproject.org site – since they are all desktops, we thought a full-width, large-size screenshot of what the desktop looks like in that spin would help folks figure out which ones they wanted to explore. (Note this mockup does not include Sugar but Sugar will be included in the final design:)

    spins.fpo mockup

    spins.fpo mockup

    Rather than the tabbed approach we use today, we decided to consolidate all of the information on each spin’s individual details page to a one-pager. Spin SIGs can provide as much or as little data about the spin as they like. There are section they can use to highlight specific apps or features of their desktop, or they can opt to not use that display and instead just focus on the description and support content.

    Desktop spin details page

    Desktop spin details page

    Functional Spins (labs.fpo)

    The functional spins are more domain / goal-oriented than the desktop spins, so the previews on the front page are smaller and don’t necessarily feature desktop screenshots.

    labs.fpo front page mockup

    labs.fpo front page mockup

    Similar to how the desktop spins’ details pages work, the lab spins details pages are one-pagers as compared to their current multi-tab incarnations. Again, the SIGs in charge can get as detailed or as brief as they’d like. Here’s the Design Suite’s details page:

    labs.fpo details page mockup

    labs.fpo details page mockup


    So I’m still sorting out some issues with the usage of the ARM trademark here, so none of this is super-final in terms of the graphic design / lack of trademark notices / disclaimers / etc. This is strictly an incomplete work-in-progress. That being said, I’ve been picking the #fedora-arm folks’ brains a lot lately to understand our ARM offerings, their use cases, and ideal ways to represent them for the target audience. My thinking here is a simple one-pager that lists out all of the options by the major usage categories – headless and desktop computing – and just making it really easy to find the version you need across all of the many available options. The other thing here that the #fedora-devel and #fedora-arm folks suggested are links to the ARM wiki documentation for installing these images as well as references to the Fedora ARM mailing list and IRC channels to provide some support for folks using the page.

    Anyway here’s where that mockup is at now:

    Fedora builds for ARM mockup

    Fedora builds for ARM mockup

    Whoah cool. You guys have it all under control then?



    We need your help. There are so many spins and versions of Fedora we’re juggling here, and neither of us is an expert in all or even most of them. We’re trying to adapt / convert the existing content / assets for these spins/versions of Fedora, but we really need help from the folks who maintain / use these spins to fully develop the content we need for their pages to come out looking great.

    Robyduck sent out a bunch of messages to the various SIGs involved but we haven’t gotten a great response yet. Time is short to get these pages built in time for F22, so we really need all the help we can get. If you are an owner or even interested user in any of the spins featured in these mockups (or ARM,) can you get in touch and help us perfect the content for your spin / ARM build of interest?

    Thanks :)

    By the way, you can follow the process of the mockups here in the git repo for them. Robyduck is coding them up about as fast as I can crank designs out but I am sure he would appreciate some coding assistance too!!