21 Feb 2018

feedPlanet KDE

Article about cmake

Just in case someone is interested: two days ago a very good article about cmake popped up, called It's Time to do CMake Right. There also is a discussion about it on reddit/r/cpp. happy reading

21 Feb 2018 10:21pm GMT

It’s now much easier to be a bug triager

We've just rolled out a significant and welcome policy change to KDE's Bugzilla bug tracker: Everyone with an account may now edit any bug without prior permission. This means that every KDE Bugzilla user can now be a bug triager anytime they want!

So get out there and triage some bugs! Our documentation can be found here. This is one of the easiest and most impactful ways to contribute to KDE, and it doesn't require a significant time commitment. Most bugs can be triaged in a minute or two, and boring downtime is a perfect opportunity for some bug triaging! It's also a great way to ease into development; bug triagers will become familiar with KDE's codebase and encounter small easy-to-fix issues that are the perfect entry points for submitting patches.

If my efforts seem useful and you'd like to see more of them, consider supporting me on Patreon, LiberaPay, or PayPal.

21 Feb 2018 2:16pm GMT


KDAB is sponsoring ACCU, the foremost annual conference in the UK for people interested primarily, but not just, in C++ and C. See the program here.

We're offering registrants to ACCU 10% off any KDAB training in 2018. Sign up!

and Meet us there. continue reading

The post KDAB at ACCU appeared first on KDAB.

21 Feb 2018 1:13pm GMT

emBO++, Bochum, Germany

KDAB is sponsoring this annual Embedded C++ conference and KDAB's Marc Mutz is speaking:
12-03 Midday, Views, views everywhere:

"There's a revolution coming.......`string_view` from C++17, `span` from the Guideline Support Library and `array_view` (targeted at C++2a) are just the beginning..."

Attend and find out more.

KDAB is proud to be sponsoring emBO++, the only event in Europe dedicated to Embedded C++ users. continue reading

The post emBO++, Bochum, Germany appeared first on KDAB.

21 Feb 2018 1:13pm GMT

KDAB’s City Lights Display with Qt 3D


The City Lights demo is an example of Qt 3D being put to novel use to implement a deferred rendering pipeline.

With OpenGL, the number of lights you can show on a screen, also affecting objects in a scene, is limited by the need to use a forward renderer. Using Qt 3D, the geometry considerations can be separated out from the lighting ones, which massively reduces the complexity. This enables the scene in this demo to run on fairly mediocre hardware at 60 frames a second, even though it contains approximately 1500 real time lights.

KDAB Director, Dr Sean Harmer, maintainer of the Qt 3D project, explains.

continue reading

The post KDAB's City Lights Display with Qt 3D appeared first on KDAB.

21 Feb 2018 1:12pm GMT

Exporting 3D content for Qt 3D with Blender

At the heart of every 3D application is geometry. Qt 3D-based 3D applications are no different and require the user to either generate geometry or provide asset files for Qt 3D to load. This blog post demonstrates how Blender and its Python API could be used to write an exporter that generates geometry for Qt 3D.

For those of you not yet too familiar with Qt 3D, let me remind you that Qt 3D is based on an Entity Component System.
A given Entity gets its behavior defined by the various components it aggregates.

Assuming you want to render some 3D content, a renderable entity would be composed like so:

[sourcecode lang="cpp"]
Entity {
components: [
GeometryRenderer {
geometry: ...
Material {}

Loading Geometries with Qt 3D

There are currently 3 ways to incorporate geometry in a Qt 3D application:

Using the default meshes provided by Qt 3D Extras

QConeMesh, QCuboidMesh, QCylinderMesh, QPlaneMesh, QSphereMesh, QTorusMesh

These are all QGeometryRenderer subclasses which take care of generating geometry based on configurable properties. It's up to you to provide a Material that will shade your geometry.

[sourcecode lang="javascript"]
Entity {
components: [
ConeMesh {
rings: 16
slices: 16
topRadius: 0.1
bottomRadius: 1.0
Material {...}

Using QMesh component to load a geometry file

Several backend plugins are available for .obj, .fbx and gltf version 1. The list of plugins will likely grow in the future (work on a gltf version 2 importer is currently ongoing). QMesh is also a QGeometryRenderer subclass, you also need to provide a Material.

[code language="javascript"]
Entity {
components: [
Mesh {
source: "path/to/my/file.obj"
Material {...}

Using QSceneLoader component to load a scene file

QSceneLoader is also plugin based. At the time of writing, one such plugin is based on the Open Asset Importer Library (Assimp) which supports the following formats.

There's also another plugin which supports gltf version 1.

[code language="javascript"]
Entity {
components: [
SceneLoader {
source: "path/to/my/scene.obj"

The subtelty between QMesh and QSceneLoader is that QMesh loads only a single mesh whereas QSceneLoader will load an entire scene. Essentially QSceneLoader will generate a subtree of QEntity with QGeometryRenderer and QMaterial components. The nice thing is that QSceneLoader will also instantiate matching Materials to go with each mesh.

In most cases you'll either use QSceneLoader to load a rather complex scene or, if you know how the scene content is structured, decide yourself on which parts you need and use several QMesh components.


Now this is all fine but you'll often end up with one of these issues:

From a general perspective, the current mechanisms make it tedious for the developer to control a complex scene. They either completely hide away the structure of a loaded subtree or, on the contrary, force you to know exactly what composes your scene and let you do the heavy lifting of deciding which meshes you care about.

If you are after performance, you need to know how your scene is structured, which materials are in use and how large your geometries are. With this information you can decide if you need to:

So what if instead of loading something blindly, we generated Qt 3D content in advance, as part of our tooling or asset conditioning work?


Blender is a free and opensource 3D creation suite. I wouldn't go as far as saying that it's intuitive to use for a newcomer, but it's a really powerful tool. In addition, it provides a powerful Python API which can be used to write importers, exporters or simply automate processes (importing and exporting geometries offline). The nice thing is that the API is documented, the bad thing is that the documentation is mostly a list of methods and members...

How could Blender solve any of the issues we have?

Instead of generating or loading geometry at runtime, I therefore decided I would try to experiment and write an exporter plugin for Blender.
The goal for it would be to generate the QML content for an application (though we could easily extend it to cover C++ as well) and export the geometry buffers to binary files that just need to be read at runtime without requiring any parsing.

This could solve the issues of slow startup caused by parsing text-based files and possibly duplicating effects and materials. This also solves the case of import plugins deployment (as we are now performing this offline) and only shipping binary files that can be read with the readBinaryFile functions on the QML Buffer element. Finally this also gives us the complete structure of our scene.

[sourcecode lang="javascript"]
Buffer {
type: Buffer.VertexBuffer
data: readBinaryFile("qrc:/assets/binaries/bufferdata.bin")

Creating a Blender Exporter Addon

A blender addon can be easily created by subclassing bpy.types.Operator and optionally bpy_extras.io_utils.ExporterHelper which provides convenience helpers as well as a default UI layout.

Overview of an exporter class

  1. Define members from bpy.types.Operator and ExporterHelper
    • bl_idname
      • The addon will be accessible in the Blender API though bpy.ops.bl_idname
    • bl_label
      • The name used on the export button UI
    • filename_ext
      • The name of our format extension if we have one
  2. Set UI properties and export options
    • Blender provides default property types
    • In the Qt3DExporter cases, properties were added to control:
      • whether to export only the selected objects or the whole scene
      • whether to export only the visible objects in the scene
      • whether we want meshes to be grouped in a collection
      • whether we want materials to be grouped in a collection
      • whether we want to export a full Qt3D application or just the
  3. Implement the draw method to lay out our properties
    • Retrieve the operator's layout and add rows and columns
      • We can add labels and reference properties you have previously created
  4. Define the execute method which will be the entry point of our exporter

[sourcecode lang="python"]
class Qt3DExporter(bpy.types.Operator, ExportHelper, OrientationHelper):
"""Qt3D Exporter"""
bl_idname = "export_scene.qt3d_exporter";
bl_label = "Qt3DExporter";
filename_ext = ""

# We set up exporter UI here
use_mesh_modifiers = BoolProperty(
name="Apply Modifiers",
description="Apply modifiers (preview resolution)",

use_selection_only = BoolProperty(
name="Selection Only",
description="Only export selected objects",

def draw(self, context):
layout = self.layout
col = layout.box().column(align=True)
col.label("Nodes", icon="OBJECT_DATA")
col.prop(self, "use_selection_only")
col.prop(self, "use_visible_only")

def execute(self, context):
# Actual exporting work to be done here

def createBlenderMenu(self, context):
self.layout.operator(Qt3DExporter.bl_idname, text="Qt3D (.qml)")

# Register against Blender
def register():

def unregister():


Most of the work will be done in the execute method. When reaching that point you'll want to:

  1. check which options have been selected by the user
  2. retrieve the export path selected
  3. gather data from the blender scene
  4. perform any post processing or conversion
  5. write the exporter data in whichever format you're interested

Parsing Blender Data


We can do a lot of things with the Blender API, the hard part is really finding out what you need

In our particular case we only care (for a first version) about:

Now that we know what we care about, the next part is traversing these collections and converting them to Qt 3D content.


First we need to go over all the meshes in the scene and gather information required to convert these to QGeometryRenderers, QGeometry, QAttributes and QBuffers.

The idea is to go over each Blender mesh and process then as follows:

  1. Triangulate
  2. Apply the modifiers it references
  3. Retrieve vertex data (position, normals, texture coordinates, colors)
    1. Write data into a binary file
    2. Record description of attributes
  4. Compute the indices
    1. For each material being referenced by the blender mesh
      1. Create a submesh (basically a QGeometryRenderer in Qt3D)
      2. For each polygon referenced by the submesh
        1. compute list of indices based on the loops of the polygon
      3. generate and record the IndexAttribute for the submesh
    2. Generate the IndexBuffer based on the sub meshes
    3. Write data into a binary file.

We keep the data we have produced here for later.


Next, we need to gather information about each instance of Material of the scene to later on create and instantiate QMaterial subclasses.

For now the exporter is only recording the name, ambient, diffuse and specular color. Later on I'd like to extend that to either export a shader directly or switch to PBR materials.


Once we've created an intermediary representation for our mesh data and material data, we can proceed with the actual exporting of the scene.

The idea is to retrieve all the objects references by the BlenderScene. Then, from these objects, we can create a hierarchy.

Finally it's just a matter of traversing the tree.

For each object:

What type of object we are dealing with?

All of the above work has been implemented in a dedicated Exporter class. It is instantiated and called in the execute function of our addon which looks like below:

[sourcecode lang="python"]
def execute(self, context):
exportSettings = self.as_keywords()
exportSettings["global_matrix"] = axis_conversion(to_forward=self.axis_forward, to_up=self.axis_up).to_4x4()

self.binaryDirectoryName = "assets/binaries/"
self.shadersDirectoryName = "assets/shaders/"
self.qmlDirectoryName = "qml"

self.userpath = self.properties.filepath
if not os.path.isdir(self.userpath):
self.userpath = os.path.dirname(self.userpath)
msg = "Selecting directory: " + self.userpath
self.report({"INFO"}, msg)

# switch to work dir and create directories
if not os.path.exists(self.binaryDirectoryName):
if not os.path.exists(self.shadersDirectoryName):
if not os.path.exists(self.qmlDirectoryName):

# Save scene into scene
scene = bpy.context.scene

exporter = Exporter(scene, exportSettings)

# Create QML Files

# Create .qrc file

# Create main.cpp

# Create .pro


Does it work?

Well actually it does.

As a test sample I've used a mesh from blendswap

Where to get it?

Here. Usage instructions are provided on the repository. It should work with pretty much any blender scene. Just make sure you have assigned a material to the elements you want to export.

Next steps

continue reading

The post Exporting 3D content for Qt 3D with Blender appeared first on KDAB.

21 Feb 2018 1:12pm GMT

KDAB at Embedded World Nuremberg

Get your free ticket to Embedded World Nuremberg, courtesy of KDAB. Register here with code B377411.
Meet us on the Qt stand, Hall 4-258.

This year we've a training info point where you can find out about our on-site or scheduled, Introductory or Advanced courses in Qt, Modern C++, Qt 3D, OpenGL, Profiling and Debugging and more.

Or you can Ask the Experts if you have technical questions about any of these technologies, and get our latest publications, including a paper on C++ Modernization.

At Embedded World this year we will show the Qt Quick Software Renderer in action on the very competitively priced NXP i.MX6 ULL platform.

Providing a fluid 60fps touch UI and H.264 video decoding is challenging on such hardware, with no GPU or hardware video decoding acceleration. Yet it's very much possible, having the full feature set of Qt at your disposal, even with as little as 64MB of RAM and/or Flash memory. We'll be giving you the full story in a blog post soon:

Qt Quick Software Renderer

Other demos on display:

CCI 1200 Agricultural Machinery Terminal

Qi - Cellular Tissue Imaging in Qt 3D

Qt Automotive Suite

KDAB GammaRay

Clazy Static Code Analyzer

KDAB Hotspot Profiler for C++

See more on our demos here.

Get your free ticket here with code B377411 and meet us on the Qt stand, Hall 4-258. continue reading

The post KDAB at Embedded World Nuremberg appeared first on KDAB.

21 Feb 2018 1:00pm GMT

A Day on Krypton

It's a bird! It's a plane! No, it's a shiny stable-yet-bleeding-edge KDE Plasma distro!

Since Calamares has to run all over the place, and is used in derivatives of all of the "Big Five" Linux distributions, I regularly switch distro's as a development platform. Also because I inevitably blow up the VM while running Calamares, or because an update renders the system useless. At FOSDEM I had the pleasure of chatting with the folks from the SUSE stand about OpenQA and OBS.

(Note, when I originally wrote this I was going to just fiddle around a bit and then return to my Manjaro dev VM; instead it's turned into a week and Krypton is likely to stay lodged on my VMs and spare machines for the foreseeable future.)

Last week I spent the day with openSUSE Krypton, which is a almost-bleeding-edge KDE Plasma desktop (today's version has Plasma 5.11.5) on top of openSUSE's rolling-release, Tumbleweed. Most of my Linux systems (e.g. the kids gaming boxes) run openSUSE of some sort, as did all my work systems at my previous job, but I have not yet used it as a development platform for Calamares. Here's some usage notes.

Day 1 First day with a distro is usually roughly the same: install it, copy some stuff over, install tools, checkout and build Calamares. With Krypton, it's no different.

  1. Installation looks a little wonky here and there. The installer could use a careful go-over by a designer to smooth out lines, reduce drawing glitches, etc. It may have been an artifact of installing in an 800×600 VirtualBox window, but it didn't seem very polished, even if the installer procedure was.
  2. Install basic development tools: zypper in git cmake make gcc gcc-c++. Huh, kdevelop is already installed, that's a good sign (except it seems like it's broken, and can't find the plugin KDevWelcomePage, but see below). Shame Linux systems are otherwise so poorly prepared for being development systems.
  3. Run deploycala.py on the installed system (there's big fat warnings saying never to do that, but I'm the developer and this is a fresh VM, so nyah nyah). Fall over backwards when it turns out that apt-get exists on this system (and invokes zypper via aptitude) so that the deploy script thinks it's on Debian and is going to do all of the wrong things. Debug the script. Figure out dependency names (e.g. it's gcc-c++ on openSUSE, g++ on Debian and just gcc on Arch).
  4. Find there's no PythonQt packaged; while this is a strictly optional dependency, I would like to find a distro that actually ships something usable for PythonQt (seems Arch does, and KaOS).
  5. Build Calamares.
  6. Profit!

So where does that last, profit, step come in? Well, openSUSE has Secure Boot support, while distro's using Calamares generally don't - for the simple reason that Calamares doesn't support it yet. So I'll be peeking at what, and how, openSUSE does it and massaging that into Calamares.

Day 2 Ran an update, hoping that KDevelop would be fixed by now. That's a nice thing about rolling- and bleeding-edge distro's, stuff gets fixed and/or broken on a daily basis. With Krypton, the underlying rolling base is touted as stable while the KDE bits are bleeding-edge. It wasn't, but a quick question in the right IRC channel (#opensuse-kde for Krypton) got me sorted and a fix scheduled for the next build. Well done, Kryptonites.

Spent the day hacking on Calamares, mostly fiddling with other bits-and-pieces rather than doing what I intended to do, which was examine secure boot.

Day 3 Still stable. Today's bleeding-edge update is 112MB, as KDE Plasma is updated to 5.12. I decide to do some ARM development today as well. This is obviously not ideal, since I'm then cross-compiling to aarch64 in a Linux VM running on FreeBSD, but hey. After installing cross-aarch64-gcc7 and adjusting some build instructions that assume Debian naming (e.g. CROSS_COMPILE=aarch64-suse-linux- instead of CROSS_COMPILE=aarch64-linux-gnu-), spent a thoroughly frustrating morning building U-Boot and watching it panic. That's the downside to using very new hardware which isn't supported by anything yet except the OEM's binary-blob package.

Day 4 (after the weekend) A total of 733 package updates today, 810MB to download. They're not kidding about bleeding-edge and up-to-date. In the meantime I've learned that my deploycala script could be much simplified by using the package-manager. Since Calamares is packaged for openSUSE, I could have done zypper mr --enable repo-source ; zypper source-install -d calamares to get the build dependencies for it.

Anyway, after a week I've I have not yet broken the system, it's fast and up-to-date. I'll be keeping this one around. (And if I was looking for something between Krypton and Leap, I'd probably go for GeckoLinux, which uses Calamares - a bit of dogfooding, as it were).

21 Feb 2018 9:54am GMT

OpenStack Summit Vancouver '18: Vote for Speakers

The next OpenStack Summit takes place again in Vancouver (BC, Canada), May 21-25, 2018. The "Vote for Presentations" period started. All proposals are up for community votes. The deadline for your vote is will end February 25 at 11:59pm PST (February 26th at 8:59am CET)

I've submitted two talks this time:
As always: every vote is highly welcome! And don't forget to search for other interesting proposals around Ceph, NFV and OpenStack as e.g. the as always expected to be excellent presentations from Florian Haas [1][2][3].

21 Feb 2018 9:39am GMT

Plasma 5.12.2 bugfix updates for 17.10 backports and 18.04 development release

Users of Kubuntu 17.10 Artful Aardvark can now upgrade via our backports PPA to the 2nd bugfix release (5.12.2) of the Plasma 5.12 LTS release series from KDE.

Likewise, testers of our development release 18.04 Bionic Beaver will receive the update imminently.

The full changelog of fixes for 5.12.2 can be found here.

Users of 17.10:

To update add the following repository to your software sources list:


or if it is already added, the updates should become available via your preferred update method.

The PPA can be added manually in the Konsole terminal with the command:

sudo add-apt-repository ppa:kubuntu-ppa/backports

and packages then updated with

sudo apt update
sudo apt full-upgrade

18.04 testers:

Will receive this via normal updates in the ubuntu main archive

PPA upgrade notes:

~ The Kubuntu backports PPA includes various other backported applications, and KDE Frameworks 5.43, so please be aware that enabling the backports PPA for the 1st time and doing a full upgrade will result in a substantial amount of upgraded packages in addition to Plasma 5.12.

~ The PPA will also continue to receive bugfix updates to Plasma 5.12 when they become available, and further updated KDE applications.

~ While we believe that these packages represent a beneficial and stable update, please bear in mind that they have not been tested as comprehensively as those in the main Ubuntu archive, and are supported only on a limited and informal basis. Should any issues occur, please provide feedback on our mailing list [1], IRC [2], and/or file a bug against our PPA packages [3].

1. Kubuntu-devel mailing list: https://lists.ubuntu.com/mailman/listinfo/kubuntu-devel
2. Kubuntu IRC channels: #kubuntu & #kubuntu-devel on irc.freenode.net
3. Kubuntu ppa bugs: https://bugs.launchpad.net/kubuntu-ppa

21 Feb 2018 8:59am GMT

20 Feb 2018

feedPlanet KDE

Apper 1.0.0 is out!

Apper the package/apps manager based on PackageKit has got it's 1.0.0 version on it's 10th birthday!


Following the PackageKit-Qt 1.0.1 I'm now doing an Apper release to match it's API, Apper source code got ported to Qt5/KF5 but not completed and using some kfsupport classes, now it's code got modernized to C++11, new Qt connect syntax and no code depends on kfsupport, it is also properly using AppStream now, some performance improvements on the package model.

It's now a stand alone application (no longer integrated in system settings), this was due 99% of it's usage being by calling the apper executable and this helped fix a crash due it being a KCM module.

Feature wise I plan to add support to fwupd allowing users to update firmwares with a native tool, but time is short and Cutelyst 2 with HTTP 2 support is my top priority now, but help is welcome!

Download https://download.kde.org/stable/apper/1.0.0/apper-1.0.0.tar.xz.mirrorlist

20 Feb 2018 10:42pm GMT

Qt 5.11 Brings New Accessibility Backend on Windows

Accessibility technology encompasses assistive tools such as screen readers, magnifiers and braille displays, as well as APIs and frameworks that allow applications to expose elements of their UI to such tools.

While some UI widgets provided by the operating system may already be prepared to provide content and metadata to assistive tools, Qt renders UI elements itself. This approach requires a way to expose information about these elements to accessibility frameworks, which would otherwise perceive the applications as sets of empty windows.

To expose information about UI elements on Windows, Qt relied on the legacy Microsoft Active Accessibility framework (MSAA), until Qt 5.10. However, proper framework support was lacking in some areas, and nowadays MSAA has been superseded by a new framework and its use is no longer recommended for new applications.

With release 5.11 we will replace the MSAA accessibility backend with a new implementation based on the more modern Microsoft UI Automation, which superseded MSAA as the de facto standard for accessibility on the Windows platform. UI Automation has been available in all Windows releases since RTM versions of Windows 7 and Server 2008, as well as provided with system updates on Windows XP, Vista and Server 2003.

Since the accessibility changes in Qt 5.11 are internal, existing accessible applications are not expected to require any changes to utilize the improved functionality provided by UI Automation. Compatibility with MSAA-only assistive tools is maintained by bridge components built in the UI Automation framework itself.

One area where immediate improvement resulting from the new approach can be perceived is in the control of Qt-based applications using the built-in virtual keyboard in touchscreen-based Windows computers, like the Microsoft Surface line. In Qt 5.10, compatibility with some UI widgets was limited and events like the automatic showing and hiding of the virtual keyboard were not supported. With Qt 5.11, the same level of functionality available to applications based on native Windows widgets should be expected.

Also, the new UI Automation support in Qt may become useful for application testing, since it can provide metadata and programmatic control of UI elements, which can be leveraged by automated test suites and other tools.

We invite users to test the new accessibility functionality, and to give us feedback by writing to the mailing lists and reporting bugs.

The post Qt 5.11 Brings New Accessibility Backend on Windows appeared first on Qt Blog.

20 Feb 2018 2:36pm GMT

Kdenlive Café tonight and beta AppImage

The last months for Kdenlive have been very quiet from the outside - we were not very active on the bugtracker, did not make a lot of announcements, and the 17.12.x release cycle only contained very few minor bugfixes.

The main reason for this was the huge work that went behind the scenes for a major code refactoring that was required to allow further developments. So after more than a year working on it, we hope to get ready for the 18.04 release!

Tonight we will announce the first public testing beta release for the upcoming 18.04 version. There are some rough edges, it's not ready for production yet as compatibility with older project files is not finalized and a lot of work is still required to fix the many remaining quirks, but we are on good tracks to bring you a modern, stable and enjoyable open source editor.

So if you are interested and want to have a look at our roadmap or try the latest development code in an AppImage, join us tonight at 9pm (CET time - UTC+1) for our 26th Kdenlive Café.

20 Feb 2018 12:32pm GMT

Qt 5.11 Alpha Released

Qt 5.11 Alpha is released today. As usual the official Alpha is a source code delivery only, but later we will offer development snapshots of Qt 5.11 regularly via the online installer.

Please check Qt 5.11 New Features wiki to see what new is coming with Qt 5.11 release. Please note that the feature list is still in progress and not to be considered final before the first Beta release.

Next milestone in our way to final Qt 5.11 release (which is planned to happen in May) will be first Beta release. We are targeting to get it out as soon as possible soon after the Alpha. We will release several Beta releases in similar manner as before, available via the online installer.

Please download the Qt 5.11 Alpha source packages from your Qt Account or from download.qt.io.

Most importantly, remember to give us feedback by writing to the mailing lists and reporting bugs.

The post Qt 5.11 Alpha Released appeared first on Qt Blog.

20 Feb 2018 10:01am GMT

19 Feb 2018

feedPlanet KDE

WireGuard in Google Summer of Code

WireGuard is participating in Google Summer of Code 2018. If you're a student - bachelors, masters, PhD, or otherwise - who would like to be funded this summer for writing interesting kernel code, studying cryptography, building networks, making mobile apps, contributing to the larger open source ecosystem, doing web development, writing documentation, or working on a wide variety of interesting problems, then this may be appealing. You'll be mentored by world-class experts, and the summer will certainly boost your skills. Details are on this page - simply contact the WireGuard team to get a proposal into the pipeline.

19 Feb 2018 2:55pm GMT

Interview with Christine Garner

Could you tell us something about yourself?

I'm 35 years old from Shropshire in Britain. I like comfy socks and tea.

I did Archaeology in University and I love history, mythology, folklore and nature. I've always been drawing from an early age. I graduated in 2003 with an archaeology degree. I taught myself digital art and web coding skills for fun and practical reasons. I used to do self-employed web design and admin type jobs, but in 2013 I became disillusioned with my life and had depression. I took a Foundation art course in 2013 deciding to pursue my artistic passions instead.

Since 2014 I've been practising art like crazy and building up a portfolio of illustration work.

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

Both. I use digital painting to make studies for my illustration work and as a way to experiment. I would love to do paid freelance illustration work should the right opportunity come along. I am happy making my own projects as well, it helps me learn and get better.

What genre(s) do you work in?

I've found I like to draw and paint themes from nature and animals. I read about myths and folklore. I've been working on personal projects about mermaids and river goddesses. It's still in the early stages. I'm developing my style to incorporate more fantasy subjects in the future and mix in my pattern work.

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

I look at archaeology, art history and graphic design for inspiration. I don't have a favourite artist at the moment. There are lots of styles I'm inspired by it's difficult to choose one. I've been looking at folk art more and trying to loosen up with my painting.

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

I tried digital painting for the first time in 2004 when I wanted to texture my own skins for the Maxis Sims game I used to play. I learnt web coding as well so i could share my efforts with people. My sister had a copy of Photoshop 6 which I used, and I had a tiny non-sensitive drawing tablet my mum had given me. My first job as a data entry clerk in a bank (yawn) enabled me to save up and get my first proper Wacom tablet around 2005. I wished I could do something with my Archaeology instead but there were no paid local jobs. From looking on the Internet I saw people made amazing works of art with digital software. I got obsessed with concept art and fantasy art and tried to get better. I used to haunt the CGSociety and GFXArtist and I bought ImagineFX magazine to try and learn all I could on my own. There were not the resources back then that there are now, but it was fun and a good distraction from the rest of my life.

What makes you choose digital over traditional painting?

Digital painting is a versatile medium. When I was starting out it saved me money on buying expensive art materials, and I didn't have any room for doing traditional painting in my small bedroom. I bought a student version of Corel Painter to start with, which was one of my only options back in 2005. This enabled me to try lots of different types of art styles without the mess. Now I have my own house, I have more room and I've collected more art materials I tend to mix using traditional and digital mediums depending on the effect I want. If I want to have the texture of coloured pencils for example, I've found it is easier to do it with coloured pencils first. Over the years I've tried a lot of different digital painting programs and learnt how to do vector art as well.

How did you find out about Krita?

I found out about Krita from surfing on the Internet around 2011. I'd been using MyPaint and heard about Krita from my geeky research. I'm a bit of a geek when it comes to digital art so I like trying different softwares.

What was your first impression?

The first time I tried it I was still a heavy Corel Painter user, but I bookmarked it for future reference seeing it had potential. I tried it again around 2013 and fell in love with it over using Corel Painter. The interface was great, it was much nicer and easier to use than Corel Painter, and it had lovely practical brushes out of the box.

What do you love about Krita?

I love the layer system and the way the brushes work. They are as sensitive as any in more expensive programs, and are as customisable. The mirror tool is fun and I like the seamless pattern feature. I've been so busy I haven't gotten around to trying animation yet, which is a cool feature.

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

I can't think of anything which annoys me about Krita, unless it's a fault of my own hardware setup. Sometimes I'll have to minimise and maximise Krita to get pressure sensitivity back after using different programs while painting. It's probably because I have an Ugee 2150 and I use Windows 10 which keeps doing annoying creator updates. Because I use other software as well (Photoshop CS3, Affinity Designer, Affinity Photo) any weaknesses in Krita can be overcome using those and vice versa.

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

I like the default brushes which come with Krita. In all the other programs I've used I have had to customise and make new brushes or buy brushes to get what I want. There is also a strong community feel about Krita and growing resources. I wrote a long article about why Krita is great for beginners to digital painting on Medium.

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

The gold fish studies, because they were fun to do and turned out pretty well. I want to do more work in the same style.

What techniques and brushes did you use in it?

I used the default brushes. Most of them are by David Revoy. The digital sketch brush is one of my favourites, and the alchemy brush is useful for blocking in areas. First I blocked in the silhouette of the goldfish with an opaque round brush. Then I tool advantage of layer clipping masks to paint within the shape of the goldfish blocking in areas of colour with alchemy brush and the magnetic lasso tool. I also used gradient fills in the early stages to get nice base colour blending for painting the details into. I used different layer styles for shadows (multiply) and highlights (screen / overlay). Start with blocking in, big brushes and go smaller for the details.

Where can people see more of your work?

I have a website at https://thimblefolio.com.

I'm also on the following websites:

Behance: https://www.behance.net/chrisgarnerart
Dribbble: https://dribbble.com/chrisgarnerart
Instagram: https://www.instagram.com/thimblefoliopress/
Tumblr: https://thimblefolio.tumblr.com/
YouTube: https://www.youtube.com/user/cribbyGart/featured
Medium: https://medium.com/@thimblefolio
Society 6: https://society6.com/thimblefoliopress
Curioos: https://www.curioos.com/thimblefolio
Spoonflower: https://www.spoonflower.com/profiles/thimblefolio

Anything else you'd like to share?

Thank you very much to all the people who work on developing and improving Krita, and to everyone who creates tutorials and resources. Its great digital art is accessible for as many people as possible, learning digital painting is a positive and fun thing to do.

19 Feb 2018 8:00am GMT