<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[KDE - sebasgo]]></title><description><![CDATA[a blog about my hacking adventures]]></description><link>https://blog.sebasgo.net/</link><image><url>https://blog.sebasgo.net/favicon.png</url><title>KDE - sebasgo</title><link>https://blog.sebasgo.net/</link></image><generator>Ghost 2.28</generator><lastBuildDate>Tue, 12 Nov 2024 14:33:45 GMT</lastBuildDate><atom:link href="https://blog.sebasgo.net/tag/kde/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[KTouch in KDE Apps 19.08.0]]></title><description><![CDATA[KTouch has received a considerable update with today's release of KDE Apps 19.08.0 introducing a completely redesigned home screen.]]></description><link>https://blog.sebasgo.net/2019/08/15/ktouch-in-kde-sc-19-08-0/</link><guid isPermaLink="false">5acc8afd305ff804c98c970c</guid><category><![CDATA[KDE]]></category><category><![CDATA[KTouch]]></category><dc:creator><![CDATA[Sebastian Gottfried]]></dc:creator><pubDate>Thu, 15 Aug 2019 14:34:54 GMT</pubDate><content:encoded><![CDATA[<p>KTouch, an application to learn and practice touch typing, has received a considerable update with today's release of <a href="https://kde.org/announcements/announce-applications-19.08.0.php">KDE Apps 19.8.0</a>. It includes a complete redesign for the home screen I have done, which is responsible to select the typing lesson to train on.</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.sebasgo.net/content/images/2019/08/ktouch_homescreen-3.png" class="kg-image"><figcaption>The new home screen of KTouch</figcaption></figure><!--kg-card-end: image--><p>There is now a new sidebar offering all the courses KTouch has for a total of 34 different keyboard layouts. In previous versions, KTouch presented only the courses matching the current keyboard layout. Now it is much more obvious how to train on different keyboard layouts than the current one.</p><p>Other improvements in this release include:</p><ul><li>Tab focus works now as expected throughout the application and allows training without reaching for the mouse ever.</li><li>Access to training statistics for individual lessons from the home screen has been added.</li><li>KTouch supports now rendering on HiDPI screens.</li></ul><p>KTouch 19.08.0 is available on <a href="https://flathub.org/apps/details/org.kde.ktouch">Flathub</a>, on the <a href="https://snapcraft.io/ktouch">Snap Store</a>, and is coming to <a href="https://community.kde.org/Get_KDE_Software_on_Your_Linux_Distro">your Linux distribution</a>.</p>]]></content:encoded></item><item><title><![CDATA[LinuxTag 2014]]></title><description><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>Last week I was attending the <a href="http://www.linuxtag.org/2014/">LinuxTag 2014</a> in Berlin. The plan was to give three workshops--each day one--introducing potential contributors into the wonders of KDE development and otherwise enjoy the event. But <a href="http://blog.jospoortvliet.com/">Jos</a> had other plans for me: he convinced me to man the KDE booth in our shared</p>]]></description><link>https://blog.sebasgo.net/2014/05/15/linuxtag-2014/</link><guid isPermaLink="false">5abb47b4305ff804c98c96e2</guid><category><![CDATA[KDE]]></category><dc:creator><![CDATA[Sebastian Gottfried]]></dc:creator><pubDate>Thu, 15 May 2014 17:10:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>Last week I was attending the <a href="http://www.linuxtag.org/2014/">LinuxTag 2014</a> in Berlin. The plan was to give three workshops--each day one--introducing potential contributors into the wonders of KDE development and otherwise enjoy the event. But <a href="http://blog.jospoortvliet.com/">Jos</a> had other plans for me: he convinced me to man the KDE booth in our shared <a href="http://opensuse.org/">OpenSUSE</a>/<a href="http://owncloud.org/">Owncloud</a>/<a href="http://kde.org">KDE</a> area, so that's what I did, at least for most of the time. This rewarded me with lots of feedback from our user base and I was able to help quite some users with their favorite KDE issue. Also I met a few of my fellow KDE contributors and had a chat with them. All in all it was a fun experience.</p>
<p>The workshops themselves were pretty successful. I had not that much guests, but the few who showed up had all a genuine interest in the topic. In case your interested: The slides for the workshop are <a href="https://db.tt/BGf1YjhF">here</a>, the sources of mentioned demo application--yet another clone of the ubiquitous <a href="http://gabrielecirulli.github.io/2048/">2048</a> game--may be obtained from a <a href="http://quickgit.kde.org/?p=scratch%2Fgottfried%2Fk2048.git">scratch repository</a> of mine.</p>
<!--kg-card-end: markdown--><!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[New QML Model Types in kqtquickcharts]]></title><description><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>The plugin now provides three new QML types: <code>ChartModel</code> and <code>Record</code>. The first type implements <code>QAbstractTableModel</code>, so it can directly hooked up with a chart as its source model. The other allows to easily describe the model's data in QML making it trivial to draft a simple QML chart demonstration:</p>]]></description><link>https://blog.sebasgo.net/2014/03/12/new-qml-models-type-in-kqtquickcharts/</link><guid isPermaLink="false">5abb47b4305ff804c98c96e1</guid><category><![CDATA[kqtquickcharts]]></category><category><![CDATA[KDE]]></category><dc:creator><![CDATA[Sebastian Gottfried]]></dc:creator><pubDate>Wed, 12 Mar 2014 20:10:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>The plugin now provides three new QML types: <code>ChartModel</code> and <code>Record</code>. The first type implements <code>QAbstractTableModel</code>, so it can directly hooked up with a chart as its source model. The other allows to easily describe the model's data in QML making it trivial to draft a simple QML chart demonstration:</p>
<pre><code class="language-javascript">import QtQuick 1.1
import org.kde.charts 0.1

Rectangle {
    color: &quot;white&quot;
    width: 800
    height: 400

    ChartModel {
        id: chartModel
        columns: 2

        Record {
            values: [0.1, 0.2]
        }
        Record {
            values: [0.25, 0.3]
        }
        Record {
            values: [0.5, 0.5]
        }
        Record {
            values: [1.0, 0.75]
        }
    }

    Column {
        anchors.fill: parent
        anchors.margins: 20
        spacing: 20

        LineChart {
            model: chartModel
            width: parent.width
            height: parent.height - legend.height - parent.spacing
            pitch: 180
            dimensions: [
                Dimension {
                    id: funDimension
                    color: &quot;#ffd500&quot;
                    dataColumn: 0
                    minimumValue: 0.0
                    maximumValue: 1.0
                    label: &quot;Fun&quot;
                    precision: 0
                    unit: &quot; %&quot;
                    unitFactor: 100.0
                },
                Dimension {
                    id: profitDimension
                    color: &quot;#ff0000&quot;
                    dataColumn: 1
                    minimumValue: 0.0
                    maximumValue: 1.0
                    label: &quot;Profit&quot;
                    precision: 0
                    unit: &quot; %&quot;
                    unitFactor: 100.0
                }
            ]
        }

        Row {
            id: legend
            spacing: 30
            anchors.horizontalCenter: parent.horizontalCenter

            LegendItem {
                dimension: funDimension
            }
            LegendItem {
                dimension: profitDimension
            }
        }
    }
}
</code></pre>
<p>The file can be directly run with <strong>qmlviewer</strong>, in fact I have used it to generate the <a href="https://blog.sebasgo.net/content/images/screenshots/kqtquickcharts/linechart_20140228.png">screenshot</a> in the <a href="https://blog.sebasgo.net/2014/02/28/announcing-kqtquickcharts/">original announcement</a> for this project.<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> There are no C++ components required anymore to leverage the charts plugin.<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup></p>
<p>The way the demo employs <code>ChartModel</code> obviously doesn't reflect how most applications want to use the charts plugin. Static data isn't encountered what often after all. For this case <code>ChartModel</code> offers a set of methods to dynamically manage its data. I am currently developing a second, more complex demo illustrating their use.</p>
<p><strong>Update Mar 12th, 2014:</strong> The seperate <code>Value</code> type is gone by now. I have updated both text and the code sample reflecting changes.</p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>By that time, the model implementation was still in a very early stage and since the demo depends on it, I hadn't published it yet. <a href="#fnref1" class="footnote-backref">↩︎</a></p>
</li>
<li id="fn2" class="footnote-item"><p>Supplying a C++ model is still an option, though. <a href="#fnref2" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
<!--kg-card-end: markdown--><!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Announcing kqtquickcharts]]></title><description><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p><a href="https://projects.kde.org/projects/kde/kdeedu/kqtquickcharts"><strong>kqtquickcharts</strong></a> is a <a href="http://qt-project.org/doc/qt-4.8/qml-intro.html">Qt Quick 1</a> plugin for beautiful and interactive charts. It offers QML elements for line and bar charts to present numeric data from a model implementing the interface of <a href="http://qt-project.org/doc/qt-4.8/qabstracttablemodel.html"><code>QAbstractTableModel</code></a>.</p>
<p><img src="https://blog.sebasgo.net/content/images/screenshots/kqtquickcharts/linechart_20140228.png" alt="kqtquicharts in action"></p>
<p>The plugin will see its first release as a part of KDE Edu with KDE SC 4.</p>]]></description><link>https://blog.sebasgo.net/2014/02/28/announcing-kqtquickcharts/</link><guid isPermaLink="false">5abb47b4305ff804c98c96e0</guid><category><![CDATA[kqtquickcharts]]></category><category><![CDATA[KDE]]></category><dc:creator><![CDATA[Sebastian Gottfried]]></dc:creator><pubDate>Fri, 28 Feb 2014 14:10:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p><a href="https://projects.kde.org/projects/kde/kdeedu/kqtquickcharts"><strong>kqtquickcharts</strong></a> is a <a href="http://qt-project.org/doc/qt-4.8/qml-intro.html">Qt Quick 1</a> plugin for beautiful and interactive charts. It offers QML elements for line and bar charts to present numeric data from a model implementing the interface of <a href="http://qt-project.org/doc/qt-4.8/qabstracttablemodel.html"><code>QAbstractTableModel</code></a>.</p>
<p><img src="https://blog.sebasgo.net/content/images/screenshots/kqtquickcharts/linechart_20140228.png" alt="kqtquicharts in action"></p>
<p>The plugin will see its first release as a part of KDE Edu with KDE SC 4.13 on April 16, 2014. Future efforts will be aimed at making the plugin viable for pure QML applications and to port it to Qt Quick 2.</p>
<p>This project is the result of an effort to make the charts originally developed for KTouch available to a greater audience. The first new application to make use of the components will be <a href="http://techbase.kde.org/Projects/Edu/Artikulate"><strong>artikulate</strong></a>, an upcoming KDE Edu application to improve one's pronunciation skills.</p>
<!--kg-card-end: markdown--><!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[What is new for KTouch in KDE SC 4.12]]></title><description><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>It has been quite a while since my last post. My time available for KDE development has dried up since then considerably, limiting the scope of my work to basic maintenance and user support. Time for actual programming, let alone writing about it, was rather scarce.</p>
<p>Luckily this state has</p>]]></description><link>https://blog.sebasgo.net/2013/11/12/what-is-new-for-ktouch-in-kde-sc-4-dot-12/</link><guid isPermaLink="false">5abb47b4305ff804c98c96df</guid><category><![CDATA[KTouch]]></category><category><![CDATA[KDE]]></category><dc:creator><![CDATA[Sebastian Gottfried]]></dc:creator><pubDate>Tue, 12 Nov 2013 11:55:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>It has been quite a while since my last post. My time available for KDE development has dried up since then considerably, limiting the scope of my work to basic maintenance and user support. Time for actual programming, let alone writing about it, was rather scarce.</p>
<p>Luckily this state has largely come to an end. And on top of that I was invited to attend this year's <a href="http://dot.kde.org/2013/11/11/kde-edu-2013-sprint">KDE Edu sprint</a> in A Coruña. The sprint was, as usual, highly productive and motivating. Many thanks go to the <a href="http://ev.kde.org/">KDE e.V.</a> and <a href="http://www.gpul.org/">GPUL</a> for sponsoring the event, to <a href="http://www.kde-espana.org/">KDE España</a> for covering my traveling expenses and especially to José Millán Soto for organizing the event.</p>
<p>During the sprint, many discussions were held and plans were made, and there was, of course, a decent amount of time to for some serious hacking. For the most part I worked on KTouch, and the time was well spend. I was able complete my main goal for the next version of KTouch, 2.2 to be released with KDE SC 4.12.</p>
<p>So let's see what 4.12 will bring for KTouch.</p>
<h2 id="customlessonsupport">Custom Lesson Support</h2>
<p>The probably most missed feature from old version 1.x days returns to KTouch, only in much improved and extended fashion: an easy way to train on arbitrary text.</p>
<p>Technically spoken, this was possible since 2.0, because users could create their own courses and train on them. But the process is still cumbersome and too complex for the task at hand.<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> In the old days one could just open a text file and get going. A feature like that is clearly missing.</p>
<p>This solved for the next version by introducing a new special course, the <em>Custom Lessons</em> course, always available right next to the normal built-in courses.</p>
<p><img src="https://blog.sebasgo.net/content/images/screenshots/ktouch/homescreen_custom_lessons_20131120.png" alt="Custom lesson selector"></p>
<p>This new special course mostly acts like any other, training and statistics gathering works as usual. Clicking on <em>New Custom Lesson</em> brings up a stripped-down version of the normal lesson editor.</p>
<p><img src="https://blog.sebasgo.net/content/images/screenshots/ktouch/homescreen_custom_lesson_editor_20131120.png" alt="Custom lesson editor"></p>
<p>This has the nice side effect that the usual <a href="http://docs.kde.org/stable/en/kdeedu/ktouch/extending.html#quality_checks">quality checks</a> are also performed for custom lessons. The characters of the lesson text are matched against the current keyboard layout, so the user has a realistic chance to spot special or foreign characters he can't type before hitting them during training.<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup></p>
<p>During my work on the custom lesson editor I took also some time to improve the actual lesson text editing experience. Now the editor has a toolbar allowing to load text files and to reformat lesson texts with long lines so they use the recommended line length.</p>
<p>The custom lessons are stored per user profile and keyboard layout, so one can train on different lessons depending on the specific situation.</p>
<p>One nice side effect of the re-introduction of this feature that KTouch is now finally at least basically usable under every keyboard layout, even for those it offers no courses for.</p>
<h2 id="newcourses">New Courses</h2>
<p>Thanks to the to a some generous contributions KTouch will ship a few new courses:</p>
<ul>
<li>A new Farsi course including the corresponding keyboard layout data. Contributed by Seyed Ali Akbar Najafian.</li>
<li>For the Spanish keyboad layout a new couse in Basque. Contributed by Alexander Gabilondo.</li>
<li>And a course for the rather exotic <a href="http://www.workmanlayout.com/">Workman</a> layout. Contributed by Peter Feigl.</li>
</ul>
<p>Many thanks go to the respective authors!</p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>To do so, one has (1) discover the editor, (2) create a new course, (3) set the keyboard layout for this course to his own and, (4) finally fill it with one or more lessons. Step (3) will scare off any not-so-tech-savvy user, since it requires technical knowledge and failing to do so will render the course inaccessible in the trainer. Also courses are constructed around the assumption that lessons build up on each other. This doesn't hold true for a collection of random training texts. <a href="#fnref1" class="footnote-backref">↩︎</a></p>
</li>
<li id="fn2" class="footnote-item"><p>This feature depends on the presence of keyboard layout data also used by the keyboard visualization. If missing the checks won't be performed and all characters will be valid. <a href="#fnref2" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
<!--kg-card-end: markdown--><!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[February Update for KTouch]]></title><description><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>I have expected the February to become a month full of bug fixing because of the the KTouch's release at the beginning of the month, but I haven't received a single valid bug report to date.<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> Well, except a few which will be addressed by the the feature I</p>]]></description><link>https://blog.sebasgo.net/2013/03/02/february-update-for-ktouch/</link><guid isPermaLink="false">5abb47b4305ff804c98c96de</guid><category><![CDATA[KTouch]]></category><category><![CDATA[KDE]]></category><dc:creator><![CDATA[Sebastian Gottfried]]></dc:creator><pubDate>Sat, 02 Mar 2013 21:35:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>I have expected the February to become a month full of bug fixing because of the the KTouch's release at the beginning of the month, but I haven't received a single valid bug report to date.<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> Well, except a few which will be addressed by the the feature I have been busy working on instead.</p>
<h2 id="lessonrenderingevolved">Lesson Rendering Evolved</h2>
<p>For KTouch 2.0 I have employed a rather simple approach to paint the current training line: for each character of the current line KTouch instantiates a dedicated QML <code>Text</code> item. This way it was easy to apply the styling for the individual states any character can have: placeholder text, typed text, contains a tying error and finally being part of the pre-edit text of some <a href="https://en.wikipedia.org/wiki/Input_method">input methods</a>. It also allowed my to implement the training screen very fast and works well for for Western languages with their simple Latin alphabet.</p>
<p>But this technique shows its deficiencies when used for more complex scripts like <a href="https://en.wikipedia.org/wiki/Arabic_alphabet">Arabic</a> or <a href="https://en.wikipedia.org/wiki/Thai_script">Thai</a>. Because of the use of individual <code>Text</code> items for each character it's impossible to draw <a href="https://en.wikipedia.org/wiki/Typographic_ligature">typographic ligatures</a>. Both of the aforementioned languages rely heavily on them: Arabic joins most letters of a word together, Thai often stacks consecutive letters on top of each other. And for the former it doesn't help either that KTouch currently can't do right-to-left training.</p>
<p>With these issues it is clear KTouch needs new lesson rendering engine.</p>
<p>As of now the new engine is already nearly completed and fixes all the problems outlined above, only a few minor features compared to the old engine and some general code cleanup are still missing. When these are done I will push the changes to the KTouch's central Git repository.</p>
<p>The new engine is now written in C++ as a new custom declarative type. Actually the old and the new approach doesn't differ that much technically: both my custom type and the stock QML <code>Text</code> element leverage a <code>QTextDocument</code> to do the actual text rendering, the difference is only that my component gives me the control over it which I need. And that I now use only one single declarative item for the whole lesson text instead of one per character of the active line and one for each other line.</p>
<p><img src="https://blog.sebasgo.net/content/images/screenshots/ktouch/trainer-ara20130302.png" alt="KTouch with an Arabic lesson"></p>
<p>As one can see it is now possible to properly train on Arabic lessons, even though the alignment of the training text is still incorrect.<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup></p>
<p>One nice side effect of doing all the painting in C++ is that it gives me exact control over the font rendering. KTouch uses scaled font rendering to fit the lesson text into the viewport. In this case it's important to disable <a href="https://en.wikipedia.org/wiki/Font_hinting">hinting</a> at least horizontally, because the rendering hints are calculated before scaling and this results in incorrect <a href="https://en.wikipedia.org/wiki/Letter-spacing">letter-spacing</a>. I consider bad letter-spacing to be a <a href="https://xkcd.com/1015/">major nuisance</a>, so I was happy being finally able address this issue in the new C++ component.</p>
<p><img src="https://blog.sebasgo.net/content/images/screenshots/ktouch/font-rendering-comparison20130302.png" alt="Fully hinted vs. vertically hinted font rendering"></p>
<p>The first line shows the old, fully hinted font rendering, the second the new font rendering where only vertical hinting is applied. As one can easily observe the letters in the second line are much more evenly spaced out.</p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>This either means there are really no issues (rather unlikely) or the existing issues don't get reported. So if you experience problems with KTouch please don't hesitate to report them. <a href="#fnref1" class="footnote-backref">↩︎</a></p>
</li>
<li id="fn2" class="footnote-item"><p>Although the training part of the application has now no problems with right-to-left rendering, the rest of the application has still issues with it. But those are small and easy fix compared to the trainer and will be taken care of soon. <a href="#fnref2" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
<!--kg-card-end: markdown--><!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[January Update for KTouch]]></title><description><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>This also includes the work done on KTouch in December. With the expected Christmas-related development hiatus I didn't feel overly compelled to write a dedicated update.</p>
<p>And it is also the very last update before the upcoming KDE SC 4.10 release. The final tag freeze was already yesterday, so</p>]]></description><link>https://blog.sebasgo.net/2013/01/31/january-update-for-ktouch/</link><guid isPermaLink="false">5abb47b4305ff804c98c96dd</guid><category><![CDATA[KTouch]]></category><category><![CDATA[KDE]]></category><dc:creator><![CDATA[Sebastian Gottfried]]></dc:creator><pubDate>Thu, 31 Jan 2013 22:40:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>This also includes the work done on KTouch in December. With the expected Christmas-related development hiatus I didn't feel overly compelled to write a dedicated update.</p>
<p>And it is also the very last update before the upcoming KDE SC 4.10 release. The final tag freeze was already yesterday, so this report pretty much reflects the state KTouch will be released in.</p>
<h2 id="bugfixes">Bugfixes</h2>
<p>Since November another dozen of different mostly smallish issues have been fixed, among them the very last crash bug I am aware of. It took me forever to get to the bottom of the issue, even if the solution was always right in front of me. In the end it turned out KTouch's resource editor was another victim of <a href="https://bugs.kde.org/show_bug.cgi?id=303228">kdelibs Bug 303228</a>, a bug report I have stumbled over very early on during my investigations. Too bad if one  can't match two backtraces.</p>
<p>Another significant fix is that KTouch is now able to render properly under a Plasma theme with light text on dark backgrounds (<a href="https://bugs.kde.org/show_bug.cgi?id=312082">Bug 312082</a>). No more impossible-to-read labels because of lack of contrast.</p>
<p><img src="https://blog.sebasgo.net/content/images/screenshots/ktouch/scorescreen-dark20130131.png" alt="Screenshot of score screen with dark color scheme"></p>
<h2 id="data">Data</h2>
<p>Thanks to Ludo Beckers KTouch has gained support for the Belgian keyboard layout. As of now we don't have matching course for this layout yet, so unfortunately it is difficult for the user to directly profit from it.</p>
<p>I think the overall data situation may improve, though, once the first release of KTouch 2.0 is out. I hope the <a href="https://blog.sebasgo.net/2012/09/14/the-state-of-ktouch/">new training experience</a> combined with the <a href="https://blog.sebasgo.net/2012/09/21/the-state-of-ktouch-part-ii/">completely overhauled authoring tools</a> are enough of an impetus for new contributors to get some movement in that area.</p>
<!--kg-card-end: markdown--><!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[November Update for KTouch]]></title><description><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>It has been a quite month for KTouch, with the Feature Freeze in place for the greater part of the month. But this doesn't mean nothing has been done at all.</p>
<h2 id="lastfeatures">Last Features</h2>
<p>First, I did some work on the layouting code for the training screen.</p>
<p><img src="https://blog.sebasgo.net/content/images/screenshots/ktouch/trainer20121128.png" alt="Screenshot of KTouch trainer"></p>
<p>Previously KTouch picked a</p>]]></description><link>https://blog.sebasgo.net/2012/11/28/november-update-for-ktouch/</link><guid isPermaLink="false">5abb47b4305ff804c98c96dc</guid><category><![CDATA[KTouch]]></category><category><![CDATA[KDE]]></category><dc:creator><![CDATA[Sebastian Gottfried]]></dc:creator><pubDate>Wed, 28 Nov 2012 15:45:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>It has been a quite month for KTouch, with the Feature Freeze in place for the greater part of the month. But this doesn't mean nothing has been done at all.</p>
<h2 id="lastfeatures">Last Features</h2>
<p>First, I did some work on the layouting code for the training screen.</p>
<p><img src="https://blog.sebasgo.net/content/images/screenshots/ktouch/trainer20121128.png" alt="Screenshot of KTouch trainer"></p>
<p>Previously KTouch picked a font and laid out the sheet so the lesson text fit into it. This approach had a few problems:</p>
<ul>
<li>If the lesson contains very long lines the sheet didn't fit into the view port.</li>
<li>If the window is maximized on large screens the sheet used only a small amount of the available space.</li>
</ul>
<p>The new version does it the other way around: the sheet will always fill the horizontally available space and we scale the text so it fits perfectly in there. Especially the latter was way more complicated to implement when I imagined. Calculating the required scaling factor is easy, but naïvely applying a value to the <code>scale</code> attribute to an QML text element results in severely degraded rendering quality. The default transformation origin is the center. With what, fonts will look <em>very</em> blurry. After setting it to top left corner rendering quality was okay, but still not that crisp like without scaling. Any hints to further improve the quality are welcome. I still think the gained flexibility is worth the price.</p>
<p>Secondly, one thing I have repeatedly observed is that users new to KTouch had problems grasping the training mechanisms of KTouch. Two characteristics in particular stood out in that way:</p>
<ul>
<li>Users have to correct their errors with <code>Backspace</code>.</li>
<li>Finished lines have to be confirmed with <code>Return</code>.</li>
</ul>
<p>The keyboard layout visualization always highlights the key the user has to press to go on, but in this cases this has been proven to be ineffective. Therefore I have implemented an additional hint system to help the user to overcome these hurdles: After three key presses after the users has entered one of the aforementioned conditions the key he has press to solve the problem will be displayed right under the current training line.</p>
<p><img src="https://blog.sebasgo.net/content/images/screenshots/ktouch/trainer-hint20121128.png" alt="Screenshot of key hint in trainer"></p>
<p>I think those hints are hard to ignore and users accustomed to the behavior won't get distracted by them since they won't see them ever.</p>
<h2 id="bugfixes">Bugfixes</h2>
<p>With these two features done I've spend most of my time on fixing bugs. A good dozen of small and not-so-small issues have been resolved. But one pair of fixes is especially important to the user.</p>
<p>With German being my native tongue--a language which only seldomly requires accented characters--I have only realized very late that handling dead key events in QML alone is impossible right now. This is a problem for KTouch because the event handling for the trainer was implemented in QML only. Many languages KTouchs offers courses for are really depended on working dead keys so I have considered that bug of show stopper severity. Now that I've moved the implementation of the event handling to C++, dead keys are no longer a problem.</p>
<p>While I was active in that particular corner of the codebase I also made sure KTouch works fine with CJK input methods. At least in the past their was <a href="https://bugs.kde.org/show_bug.cgi?id=194819">some interest</a> in creating a Chinese course for KTouch, now the technical requirements for that are there.</p>
<h2 id="handbook">Handbook</h2>
<p>Last but not least KTouch got a new handbook. The version of KTouch to be released with KDE SC 4.10 is a complete rewrite having only few similarities to the previous version. So a rewrite was also due for the handbook. Huge kudos go to Yuri Chornoivan who has stepped up to support me in that area and has been the one doing at least 90% of the work. This was not a small task by any means and I think the results speak for themselves.</p>
<p>With that done we are one step closer to the quality I think is required for a successful initial release. Replacing a peace of established software is always a risky endeavor, so I really don't want to release something half-baked. Having a complete and up-to-date handbook is important part of that to me.</p>
<!--kg-card-end: markdown--><!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[New Version of KTouch Merged]]></title><description><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>Today I've finally merged my <code>next</code> branch into the <code>master</code> branch. Lately the differences between the two branches became increasingly huge:</p>
<pre><code class="language-bash">$ git log origin/master..origin/next --oneline --no-merges | wc -l
402
$ git --no-pager diff origin/master..origin/next --shortstat -- src/
 252 files changed, 23468 insertions(+), 14282 deletions(-)</code></pre>]]></description><link>https://blog.sebasgo.net/2012/10/24/new-version-of-ktouch-finally-merged/</link><guid isPermaLink="false">5abb47b4305ff804c98c96db</guid><category><![CDATA[KTouch]]></category><category><![CDATA[KDE]]></category><dc:creator><![CDATA[Sebastian Gottfried]]></dc:creator><pubDate>Wed, 24 Oct 2012 16:00:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>Today I've finally merged my <code>next</code> branch into the <code>master</code> branch. Lately the differences between the two branches became increasingly huge:</p>
<pre><code class="language-bash">$ git log origin/master..origin/next --oneline --no-merges | wc -l
402
$ git --no-pager diff origin/master..origin/next --shortstat -- src/
 252 files changed, 23468 insertions(+), 14282 deletions(-)
</code></pre>
<p>Merging all that into the <code>master</code> branch took a huge pressure from me. After spending all that time I spend on working on KTouch it's really important to me get the fruits of my work out to the end-users. Getting my stuff in the the branch KDE SC 4.10 will be released from is first the important step towards that goal.</p>
<p>My next step is clearing out the <a href="https://bugs.kde.org/buglist.cgi?list_id=259489&amp;query_format=advanced&amp;bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;product=ktouch">Bugzilla entries</a> against KTouch. The vast majority of the bug reports can be closed since they don't apply anymore, and also a fair share of the reported wishes are met by the new version.</p>
<!--kg-card-end: markdown--><!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[KTouch Got a New Score Screen]]></title><description><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>So after finishing a lesson that's that the user is going to see now:</p>
<p><img src="https://blog.sebasgo.net/content/images/screenshots/ktouch/scorescreen20121214.png" alt="New score screen of KTouch"></p>
<p>With the help of the screen the user can review his learning progress and identify his weaknesses. For that a bar diagram visualizing the errors he has made during the training can be summoned:</p>
<p><img src="https://blog.sebasgo.net/content/images/screenshots/ktouch/scorescreen-errors20121214.png" alt="Typing errors in score screen"></p>
<p>If he</p>]]></description><link>https://blog.sebasgo.net/2012/10/14/ktouch-got-a-new-score-screen/</link><guid isPermaLink="false">5abb47b4305ff804c98c96da</guid><category><![CDATA[KTouch]]></category><category><![CDATA[KDE]]></category><dc:creator><![CDATA[Sebastian Gottfried]]></dc:creator><pubDate>Sun, 14 Oct 2012 22:10:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>So after finishing a lesson that's that the user is going to see now:</p>
<p><img src="https://blog.sebasgo.net/content/images/screenshots/ktouch/scorescreen20121214.png" alt="New score screen of KTouch"></p>
<p>With the help of the screen the user can review his learning progress and identify his weaknesses. For that a bar diagram visualizing the errors he has made during the training can be summoned:</p>
<p><img src="https://blog.sebasgo.net/content/images/screenshots/ktouch/scorescreen-errors20121214.png" alt="Typing errors in score screen"></p>
<p>If he has passed the lesson he may choose to start training on the next lesson right away. Otherwise he can repeat the current lesson or return to the home screen.</p>
<p>The score screen was the last large outstanding feature I am targeting for the initial release. With that one done only a few small ones remain I can easily finish until the Feature Freeze on October 25. So it looks like the new version of KTouch will be actually released with KDE SC 4.10 on January 23, 2013.</p>
<!--kg-card-end: markdown--><!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Line Graphs for Qt Quick]]></title><description><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>After finishing the keyboard layout editor here in Randa I've started working on the last remaining big task of the upcoming <a href="https://blog.sebasgo.net/2012/09/12/hello-planet/">new version</a> of KTouch: the summary screen which will be shown after the user has completed a lesson. For that I want to display the user's learning progress with</p>]]></description><link>https://blog.sebasgo.net/2012/09/26/line-graphs-for-qt-quick/</link><guid isPermaLink="false">5abb47b4305ff804c98c96d9</guid><category><![CDATA[KTouch]]></category><category><![CDATA[KDE]]></category><category><![CDATA[Qt Quick]]></category><dc:creator><![CDATA[Sebastian Gottfried]]></dc:creator><pubDate>Wed, 26 Sep 2012 11:00:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>After finishing the keyboard layout editor here in Randa I've started working on the last remaining big task of the upcoming <a href="https://blog.sebasgo.net/2012/09/12/hello-planet/">new version</a> of KTouch: the summary screen which will be shown after the user has completed a lesson. For that I want to display the user's learning progress with pretty diagrams. As there are no ready-made components for Qt Quick for that purpose right now, I've sat down and started to implement my own:</p>
<p><img src="https://blog.sebasgo.net/content/images/screenshots/ktouch/line_graph20120926.png" alt="Line graph demo"></p>
<p>My QML component to render such graphs is actually pretty generic. Here is the complete code for the screenshot above:</p>
<pre><code class="language-javascript">import QtQuick 1.1
import org.kde.plasma.core 0.1 as PlasmaCore
import org.kde.plasma.components 0.1 as PlasmaComponents
import org.kde.ktouch.graph 0.1 as Graph
import ktouch 1.0

Rectangle {
    width: 800
    height: 300
    anchors.centerIn: parent
    color: &quot;white&quot;

    Column {
        anchors {
            fill: parent
            topMargin: 2 * spacing + legend.height
            leftMargin: spacing
            rightMargin: spacing
            bottomMargin: spacing
        }

        spacing: 20

        Graph.LineGraph {
            width: parent.width
            height: parent.height - legend.height - parent.spacing
            model: learningProgressModel

            dimensions: [
                Graph.Dimension {
                    id: accuracyDimension
                    dataColumn: 5
                    color: &quot;#ffb12d&quot;
                    maximumValue: 1.0
                    label: i18n(&quot;Accuracy&quot;)
                    unit: &quot;%&quot;
                    unitFactor: 100
                },
                Graph.Dimension {
                    id: charactersPerMinuteDimension
                    dataColumn: 6
                    color: &quot;#38aef4&quot;
                    maximumValue: 400
                    label: i18n(&quot;Characters per Minute&quot;)
                }
            ]
        }

        Row {
            id: legend
            anchors.horizontalCenter: parent.horizontalCenter
            spacing: 20

            Graph.LegendItem {
                dimension: accuracyDimension
            }
            Graph.LegendItem {
                dimension: charactersPerMinuteDimension
            }
        }
    }
}
</code></pre>
<p>The model used as the data source for the graph—<code>learningProgressModel</code>—is just a normal <code>QAbstractTableModel</code> descendant.</p>
<!--kg-card-end: markdown--><!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[The State of KTouch — Part II]]></title><description><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>This is the second part of my blog post series describing the results of my work on <a href="http://edu.kde.org/applications/all/ktouch/">KTouch</a>. If you haven't read the first part, you can find it <a href="https://blog.sebasgo.net/2012/09/14/the-state-of-ktouch/">here</a>. This time I will write more about the new course and keyboard layout editor.</p>
<p>KTouch can be only as good</p>]]></description><link>https://blog.sebasgo.net/2012/09/21/the-state-of-ktouch-part-ii/</link><guid isPermaLink="false">5abb47b4305ff804c98c96d8</guid><category><![CDATA[KTouch]]></category><category><![CDATA[KDE]]></category><dc:creator><![CDATA[Sebastian Gottfried]]></dc:creator><pubDate>Fri, 21 Sep 2012 19:10:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>This is the second part of my blog post series describing the results of my work on <a href="http://edu.kde.org/applications/all/ktouch/">KTouch</a>. If you haven't read the first part, you can find it <a href="https://blog.sebasgo.net/2012/09/14/the-state-of-ktouch/">here</a>. This time I will write more about the new course and keyboard layout editor.</p>
<p>KTouch can be only as good as the underlying data. Without courses the trainer is basically useless to the user, without the keyboard layouts the visualization of the keyboard during training isn't available. Therefore it's important ships with as much data as possible.</p>
<p>Currently there is support for 39 keyboard layouts and there are 39 courses for 30 keyboard layouts. Unfortunately the quality of the course material varies a lot. There are a few courses of truly outstanding quality, but the most courses have been auto-generated out of dictionaries. Their quality ranges from passable to unusable. Of course none of those have full phrases or sentences in the training data, or provide even complete short texts to train on. A course containing such elements is much more effective and fun to learn.</p>
<p>Therefore I really would like to see more human-created high-quality courses in KTouch. As I can't do anything about it personally (The German courses are already excellent, the only language I feel sufficiently proficient in to write training texts in.) the only thing I can do is to provide the tools to make creating them as easy as possible.</p>
<p><img src="https://blog.sebasgo.net/content/images/screenshots/ktouch/course_editor20120921.png" alt="Screenshot of course editor"></p>
<p>That's a screenshot of the new course editor with one of the problematic courses loaded showing one of the built-in quality-assurance checks: if a lesson contains characters not available in that lesson, because they are not among the configured new characters of this lesson or any previous one, they are highlighted in red. There is also a check for too long lines.</p>
<p>On the left side their is a list over all data files KTouch knows about, built-in and user-created alike. If the user selects a built-in resource the editor will degrade to a simple viewer, though. If the user selects a keyboard layout the program will adapt appropriately.</p>
<p><img src="https://blog.sebasgo.net/content/images/screenshots/ktouch/keyboard_layout_editor20120921.png" alt="Screenshot of keyboard layout editor"></p>
<p>The keyboard layout editor is still a bit unfinished, though: currently there is no way to edit the characters on a key yet.</p>
<!--kg-card-end: markdown--><!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[The State of KTouch — Part I]]></title><description><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>This post will tell you more about the new features touch typing trainer component of the upcoming version of KTouch, but before I come to that, I will write a little bit about the approach I took to design the new user interface.</p>
<h2 id="designprinciples">Design Principles</h2>
<p>Actually this boils down to</p>]]></description><link>https://blog.sebasgo.net/2012/09/14/the-state-of-ktouch/</link><guid isPermaLink="false">5abb47b4305ff804c98c96d7</guid><category><![CDATA[KTouch]]></category><category><![CDATA[KDE]]></category><dc:creator><![CDATA[Sebastian Gottfried]]></dc:creator><pubDate>Fri, 14 Sep 2012 13:00:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>This post will tell you more about the new features touch typing trainer component of the upcoming version of KTouch, but before I come to that, I will write a little bit about the approach I took to design the new user interface.</p>
<h2 id="designprinciples">Design Principles</h2>
<p>Actually this boils down to two simple points:</p>
<h3 id="actlikeagame">Act like a game</h3>
<p>Learning touch typing is boring enough, the application one uses to achieve this goal should make the experience as much funny as possible while not getting in the way. A good way to do so is to borrow some of principles from video games which render them as engaging and addicting as they are.</p>
<h3 id="keepitsimple">Keep it simple</h3>
<p>Learning touch typing should be possible for every literate person. After all, KTouch is an educational application targeted at especially at pupils. So knowledge about technical details like the existence of keyboard layouts can't be assumed. The user interface hast to be designed accordingly.</p>
<h2 id="thenewfeatures">The New Features</h2>
<p>The new user interface is split into several screens, each responsible for a certain feature set. This keeps the complexity low, because it reduces the amount of controls visible at any given time and guides the user on their way through the application.</p>
<h3 id="1thewelcomescreen">1. The Welcome Screen</h3>
<p>{% img /images/screenshots/ktouch/welcome20120914.png%}</p>
<p>This is very first thing a new user of KTouch will see and it is the only setup necessary to start training. It should be pretty much self-explanatory.</p>
<h3 id="2thehomescreen">2. The Home Screen</h3>
<p><img src="https://blog.sebasgo.net/content/images/screenshots/ktouch/homescreen20120914.png" alt="KTouch Home Screen"></p>
<p>From here the user picks a lesson to train on out of the courses matching their current system keyboard layout. It also provides access to profile managment, the keyboard layout and course editor and the configuration dialogs.</p>
<h3 id="3thetrainer">3. The Trainer</h3>
<p><img src="https://blog.sebasgo.net/content/images/screenshots/ktouch/trainer20120914.png" alt="Screenshot of the KTouch trainer"></p>
<p>That's the part of the application a typical user will spend the most time on. Therefore extra effort went into this screen to make its operation as smooth as possible. Every dynamic part of the user interface is animated in a nice and unobtrusive way. Small features, like stopping the time when the window looses its focus, help to improve the overall training experience. Users wanting an absolute minimum of distraction while training may choose to hide the keyboard and now also the real-time statistics readings in the application settings.</p>
<h3 id="thereismore">There is more</h3>
<p>Careful readers will have noticed, that I mentioned an editor component — this one deserves a post on its own.</p>
<p>After completing a lesson, the user won't return immediately to the home screen. Instead a special summary and statistics screen is shown. Right now it is still largely unfinished, so no screenshot right now.</p>
<p>The good news is that the KDE e.V. gave me the opportunity to attend to the upcoming Randa 2012 sprint. Looking at my todo list, this summary screen will be among my top priority tasks I want to work on in Randa.</p>
<p>Organizing a sprint of this scale costs a lot of money. So if you able to donate some money, please do so. For me as a volunteer developer such an event is an exceptional opportunity, your donation makes it possible. Thank you!</p>
<!--kg-card-end: markdown--><!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Hello, Planet]]></title><description><![CDATA[I've been developing for KDE for quite a while now, so I figured I should start blogging about what I'm up to. This being my first post I think it's best I introduce myself and write about what I have been able to achieve so far.]]></description><link>https://blog.sebasgo.net/2012/09/12/hello-planet/</link><guid isPermaLink="false">5abb47b4305ff804c98c96d6</guid><category><![CDATA[KDE]]></category><category><![CDATA[KTouch]]></category><dc:creator><![CDATA[Sebastian Gottfried]]></dc:creator><pubDate>Wed, 12 Sep 2012 08:25:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><!--kg-card-begin: markdown--><p>I've been developing for KDE for quite a while now, so I figured I should start blogging about what I'm up to. This being my first post I think it's best I introduce myself and write about what I have been able to achieve so far.</p>
<p>My name is Sebastian Gottfried, I'm currently studying Computer Science and in November 2011 I've started hacking on  <a href="http://edu.kde.org/applications/all/ktouch/">KTouch</a>. My main incentive was to learn and master new technologies, this time my main interest was <a href="http://qt-project.org/wiki/Qt_Quick">Qt Quick</a>. Why did I choose this project in particular? First I gained much personal  profit from this application as I've successfully learned touch typing with it. Secondly the application was basically unmaintained and in a state deserving a facelift. Being a game-like application of some sort Qt Quick seemed to be the obvious choice to tackle such a task. Lastly I thought rewriting KTouch's user interface was a big enough task to actually learn something and small enough to remain achievable.</p>
<p>Well, ten months later my code is still not in a releasable state. Maybe I underestimated a bit the amount of work necessary, but there is continuous progress and the current plan is to release this new version with KDE SC 4.10. For the time being, here's a screenshot documenting the current state of my version.</p>
<p><img src="https://blog.sebasgo.net/content/images/screenshots/ktouch/20120911.png" alt="KTouch development screenshot"></p>
<p>As one can see the difference to the currently released version of KTouch is quite dramatic. I will write about the new features and my plans in more detail in future posts. If anyone wants to try it out: the code lives in <a href="https://projects.kde.org/projects/kde/kdeedu/ktouch/repository/show?rev=next">KTouch's Git repository</a> in the branch <code>next</code>.</p>
<!--kg-card-end: markdown--><!--kg-card-end: markdown-->]]></content:encoded></item></channel></rss>