CINXE.COM

January 2015 – David Edmundson's Web Log

<!DOCTYPE html> <html lang="en-US" class="no-js"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width"> <link rel="profile" href="http://gmpg.org/xfn/11"> <link rel="pingback" href="http://blog.davidedmundson.co.uk/xmlrpc.php"> <!--[if lt IE 9]> <script src="http://blog.davidedmundson.co.uk/wp-content/themes/twentyfifteen/js/html5.js"></script> <![endif]--> <script>(function(html){html.className = html.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script> <title>January 2015 &#8211; David Edmundson&#039;s Web Log</title> <meta name='robots' content='max-image-preview:large' /> <link rel='dns-prefetch' href='//fonts.googleapis.com' /> <link href='https://fonts.gstatic.com' crossorigin rel='preconnect' /> <link rel="alternate" type="application/rss+xml" title="David Edmundson&#039;s Web Log &raquo; Feed" href="http://blog.davidedmundson.co.uk/feed/" /> <link rel="alternate" type="application/rss+xml" title="David Edmundson&#039;s Web Log &raquo; Comments Feed" href="http://blog.davidedmundson.co.uk/comments/feed/" /> <script type="text/javascript"> window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/14.0.0\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/14.0.0\/svg\/","svgExt":".svg","source":{"concatemoji":"http:\/\/blog.davidedmundson.co.uk\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.1.1"}}; /*! This file is auto-generated */ !function(e,a,t){var n,r,o,i=a.createElement("canvas"),p=i.getContext&&i.getContext("2d");function s(e,t){var a=String.fromCharCode,e=(p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,e),0,0),i.toDataURL());return p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,t),0,0),e===i.toDataURL()}function c(e){var t=a.createElement("script");t.src=e,t.defer=t.type="text/javascript",a.getElementsByTagName("head")[0].appendChild(t)}for(o=Array("flag","emoji"),t.supports={everything:!0,everythingExceptFlag:!0},r=0;r<o.length;r++)t.supports[o[r]]=function(e){if(p&&p.fillText)switch(p.textBaseline="top",p.font="600 32px Arial",e){case"flag":return s([127987,65039,8205,9895,65039],[127987,65039,8203,9895,65039])?!1:!s([55356,56826,55356,56819],[55356,56826,8203,55356,56819])&&!s([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]);case"emoji":return!s([129777,127995,8205,129778,127999],[129777,127995,8203,129778,127999])}return!1}(o[r]),t.supports.everything=t.supports.everything&&t.supports[o[r]],"flag"!==o[r]&&(t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&t.supports[o[r]]);t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&!t.supports.flag,t.DOMReady=!1,t.readyCallback=function(){t.DOMReady=!0},t.supports.everything||(n=function(){t.readyCallback()},a.addEventListener?(a.addEventListener("DOMContentLoaded",n,!1),e.addEventListener("load",n,!1)):(e.attachEvent("onload",n),a.attachEvent("onreadystatechange",function(){"complete"===a.readyState&&t.readyCallback()})),(e=t.source||{}).concatemoji?c(e.concatemoji):e.wpemoji&&e.twemoji&&(c(e.twemoji),c(e.wpemoji)))}(window,document,window._wpemojiSettings); </script> <style type="text/css"> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style> <link rel='stylesheet' id='wp-block-library-css' href='http://blog.davidedmundson.co.uk/wp-includes/css/dist/block-library/style.min.css?ver=6.1.1' type='text/css' media='all' /> <link rel='stylesheet' id='classic-theme-styles-css' href='http://blog.davidedmundson.co.uk/wp-includes/css/classic-themes.min.css?ver=1' type='text/css' media='all' /> <style id='global-styles-inline-css' type='text/css'> body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--duotone--dark-grayscale: url('#wp-duotone-dark-grayscale');--wp--preset--duotone--grayscale: url('#wp-duotone-grayscale');--wp--preset--duotone--purple-yellow: url('#wp-duotone-purple-yellow');--wp--preset--duotone--blue-red: url('#wp-duotone-blue-red');--wp--preset--duotone--midnight: url('#wp-duotone-midnight');--wp--preset--duotone--magenta-yellow: url('#wp-duotone-magenta-yellow');--wp--preset--duotone--purple-green: url('#wp-duotone-purple-green');--wp--preset--duotone--blue-orange: url('#wp-duotone-blue-orange');--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;}:where(.is-layout-flex){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} .wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;} :where(.wp-block-columns.is-layout-flex){gap: 2em;} .wp-block-pullquote{font-size: 1.5em;line-height: 1.6;} </style> <link rel='stylesheet' id='twentyfifteen-fonts-css' href='https://fonts.googleapis.com/css?family=Noto+Sans%3A400italic%2C700italic%2C400%2C700%7CNoto+Serif%3A400italic%2C700italic%2C400%2C700%7CInconsolata%3A400%2C700&#038;subset=latin%2Clatin-ext' type='text/css' media='all' /> <link rel='stylesheet' id='genericons-css' href='http://blog.davidedmundson.co.uk/wp-content/plugins/jetpack/_inc/genericons/genericons/genericons.css?ver=3.1' type='text/css' media='all' /> <link rel='stylesheet' id='twentyfifteen-style-css' href='http://blog.davidedmundson.co.uk/wp-content/themes/twentyfifteen/style.css?ver=6.1.1' type='text/css' media='all' /> <!--[if lt IE 9]> <link rel='stylesheet' id='twentyfifteen-ie-css' href='http://blog.davidedmundson.co.uk/wp-content/themes/twentyfifteen/css/ie.css?ver=20141010' type='text/css' media='all' /> <![endif]--> <!--[if lt IE 8]> <link rel='stylesheet' id='twentyfifteen-ie7-css' href='http://blog.davidedmundson.co.uk/wp-content/themes/twentyfifteen/css/ie7.css?ver=20141010' type='text/css' media='all' /> <![endif]--> <script type='text/javascript' src='http://blog.davidedmundson.co.uk/wp-includes/js/jquery/jquery.min.js?ver=3.6.1' id='jquery-core-js'></script> <script type='text/javascript' src='http://blog.davidedmundson.co.uk/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.3.2' id='jquery-migrate-js'></script> <link rel="https://api.w.org/" href="http://blog.davidedmundson.co.uk/wp-json/" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://blog.davidedmundson.co.uk/xmlrpc.php?rsd" /> <link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://blog.davidedmundson.co.uk/wp-includes/wlwmanifest.xml" /> <meta name="generator" content="WordPress 6.1.1" /> <style type="text/css">.recentcomments a{display:inline !important;padding:0 !important;margin:0 !important;}</style></head> <body class="archive date"> <div id="page" class="hfeed site"> <a class="skip-link screen-reader-text" href="#content">Skip to content</a> <div id="sidebar" class="sidebar"> <header id="masthead" class="site-header" role="banner"> <div class="site-branding"> <p class="site-title"><a href="http://blog.davidedmundson.co.uk/" rel="home">David Edmundson&#039;s Web Log</a></p> <p class="site-description">Just another WordPress site</p> <button class="secondary-toggle">Menu and widgets</button> </div><!-- .site-branding --> </header><!-- .site-header --> <div id="secondary" class="secondary"> <div id="widget-area" class="widget-area" role="complementary"> <aside id="search-2" class="widget widget_search"><form role="search" method="get" class="search-form" action="http://blog.davidedmundson.co.uk/"> <label> <span class="screen-reader-text">Search for:</span> <input type="search" class="search-field" placeholder="Search &hellip;" value="" name="s" /> </label> <input type="submit" class="search-submit screen-reader-text" value="Search" /> </form></aside> <aside id="recent-posts-2" class="widget widget_recent_entries"> <h2 class="widget-title">Recent Posts</h2> <ul> <li> <a href="http://blog.davidedmundson.co.uk/blog/metrics-in-kde-are-they-useful/">Metrics in KDE &#8211; Are they useful?</a> </li> <li> <a href="http://blog.davidedmundson.co.uk/blog/kde-store-content/">Trusting content on the KDE Store</a> </li> <li> <a href="http://blog.davidedmundson.co.uk/blog/kde-6-uk-release-party/">KDE 6 UK Release Party</a> </li> <li> <a href="http://blog.davidedmundson.co.uk/blog/plasma-6-0-alpha-what-this-means/">Plasma 6.0 Alpha &#8211; What this means</a> </li> <li> <a href="http://blog.davidedmundson.co.uk/blog/qt6_wayland_robustness/">QtWayland 6.6 Brings Robustness Through Compositor Handoffs</a> </li> </ul> </aside><aside id="recent-comments-2" class="widget widget_recent_comments"><h2 class="widget-title">Recent Comments</h2><ul id="recentcomments"><li class="recentcomments"><span class="comment-author-link"><a href='https://geek.co.il' rel='external nofollow ugc' class='url'>Oded</a></span> on <a href="http://blog.davidedmundson.co.uk/blog/plasma-and-the-systemd-startup/#comment-14156">Plasma and the systemd startup</a></li><li class="recentcomments"><span class="comment-author-link"><a href='http://htts://www.cadiznews.co.uk' rel='external nofollow ugc' class='url'>my blog</a></span> on <a href="http://blog.davidedmundson.co.uk/blog/powered-by-swiss-cheese-my-plans-for-randa/#comment-13612">Powered By Swiss Cheese &#8211; My Plans For Randa</a></li><li class="recentcomments"><span class="comment-author-link">Orel</span> on <a href="http://blog.davidedmundson.co.uk/blog/plasma-and-the-systemd-startup/#comment-13338">Plasma and the systemd startup</a></li><li class="recentcomments"><span class="comment-author-link">mirage335</span> on <a href="http://blog.davidedmundson.co.uk/blog/plasma-and-the-systemd-startup/#comment-13327">Plasma and the systemd startup</a></li><li class="recentcomments"><span class="comment-author-link">robert</span> on <a href="http://blog.davidedmundson.co.uk/blog/running-kwin-wayland-on-nvidia/#comment-13253">Running kwin wayland on Nvidia</a></li></ul></aside><aside id="archives-2" class="widget widget_archive"><h2 class="widget-title">Archives</h2> <ul> <li><a href='http://blog.davidedmundson.co.uk/blog/2024/08/'>August 2024</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2024/03/'>March 2024</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2024/02/'>February 2024</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2023/11/'>November 2023</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2023/09/'>September 2023</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2023/08/'>August 2023</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2023/03/'>March 2023</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2021/05/'>May 2021</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2020/10/'>October 2020</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2020/09/'>September 2020</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2020/07/'>July 2020</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2020/06/'>June 2020</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2019/10/'>October 2019</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2018/11/'>November 2018</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2018/07/'>July 2018</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2018/04/'>April 2018</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2017/10/'>October 2017</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2017/09/'>September 2017</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2017/08/'>August 2017</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2016/09/'>September 2016</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2016/06/'>June 2016</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2016/03/'>March 2016</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2016/02/'>February 2016</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2015/10/'>October 2015</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2015/09/'>September 2015</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2015/08/'>August 2015</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2015/07/'>July 2015</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2015/06/'>June 2015</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2015/04/'>April 2015</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2015/03/'>March 2015</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2015/02/'>February 2015</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2015/01/' aria-current="page">January 2015</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2014/12/'>December 2014</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2014/11/'>November 2014</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2014/10/'>October 2014</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2014/09/'>September 2014</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2014/08/'>August 2014</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2013/12/'>December 2013</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2013/11/'>November 2013</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2013/10/'>October 2013</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2013/09/'>September 2013</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2013/08/'>August 2013</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2013/05/'>May 2013</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2013/04/'>April 2013</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2013/03/'>March 2013</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2013/02/'>February 2013</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2013/01/'>January 2013</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2012/12/'>December 2012</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2012/10/'>October 2012</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2012/09/'>September 2012</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2012/08/'>August 2012</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2012/07/'>July 2012</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2012/06/'>June 2012</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2012/05/'>May 2012</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2012/04/'>April 2012</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2012/03/'>March 2012</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2012/02/'>February 2012</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2012/01/'>January 2012</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2011/12/'>December 2011</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2011/11/'>November 2011</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2011/10/'>October 2011</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2011/08/'>August 2011</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2011/07/'>July 2011</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2011/05/'>May 2011</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2011/03/'>March 2011</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2011/02/'>February 2011</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2011/01/'>January 2011</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2010/12/'>December 2010</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2009/12/'>December 2009</a></li> <li><a href='http://blog.davidedmundson.co.uk/blog/2009/09/'>September 2009</a></li> </ul> </aside><aside id="categories-2" class="widget widget_categories"><h2 class="widget-title">Categories</h2> <ul> <li class="cat-item cat-item-3"><a href="http://blog.davidedmundson.co.uk/blog/category/blog/">Blog</a> </li> <li class="cat-item cat-item-1"><a href="http://blog.davidedmundson.co.uk/blog/category/kde/">kde</a> </li> <li class="cat-item cat-item-4"><a href="http://blog.davidedmundson.co.uk/blog/category/other/">Other</a> </li> <li class="cat-item cat-item-2"><a href="http://blog.davidedmundson.co.uk/blog/category/software/">Software</a> </li> </ul> </aside><aside id="meta-2" class="widget widget_meta"><h2 class="widget-title">Meta</h2> <ul> <li><a href="http://blog.davidedmundson.co.uk/wp-login.php">Log in</a></li> <li><a href="http://blog.davidedmundson.co.uk/feed/">Entries feed</a></li> <li><a href="http://blog.davidedmundson.co.uk/comments/feed/">Comments feed</a></li> <li><a href="https://wordpress.org/">WordPress.org</a></li> </ul> </aside> </div><!-- .widget-area --> </div><!-- .secondary --> </div><!-- .sidebar --> <div id="content" class="site-content"> <section id="primary" class="content-area"> <main id="main" class="site-main" role="main"> <header class="page-header"> <h1 class="page-title">Month: <span>January 2015</span></h1> </header><!-- .page-header --> <article id="post-89" class="post-89 post type-post status-publish format-standard hentry category-blog category-kde"> <header class="entry-header"> <h2 class="entry-title"><a href="http://blog.davidedmundson.co.uk/blog/plasmoid-tutorial-1/" rel="bookmark">Plasmoid Tutorial 1</a></h2> </header><!-- .entry-header --> <div class="entry-content"> <p>With Plasma 5.2 out I wanted to update the tutorials on how to write a Plasmoid. Going through all of the steps from hello world, to using Plasma Components to configuration through to differing form factors.</p> <p>It made sense to publish them as blog posts before I copy them to the wiki. </p> <p>Behold, the first rather wordy blog post in a series of 7.</p> <h2>Intro</h2> <p>With Plasma5 we have embraced QML as our technology of choice. It is the only method of writing the UI for plasmoids.</p> <p>Whilst Plasma4 offered a range of language, QML is the only way of interacting with QtQuick, the technology that powers the Plasma Shell. By using this we we get to provide a better developer experience as there is a wealth of existing QML resources. Some of the best links are:</p> <ul> <li>http://doc.qt.io/qt-5/qml-tutorial1.html</li> <li>http://qmlbook.org/</li> </ul> <p>Before you get started with writing plasmoids, it is recommended to read through the basics of these and have a bit of playing to get used to the language.</p> <p>Writing plasmoids is effectively the same as writing any other QtQuick QML, with a few extensions:</p> <ul> <li>We have a specific folder structure with metadata for our plasmashell to be able to load the files.</li> <li>We provide a massive collection of libraries that extend the QtQuick library both with functionality and widgets that blend in with the Plasma theme.</li> <li>Special API exists to interact with the shell, allowing you to save configurations or set default sizes.</li> </ul> <p>In this series of tutorials we'll go through the steps of writing a real plasmoid from scratch, using some of the plasma libraries.</p> <p>By the end we should have a completely working, deployable RSS reader.</p> <h2>Hello world</h2> <p>Initial Folder Structure</p> <p>Plasmoids follow the simple KPackage structure. In the top-most folder there should be a file titled metadata.desktop and a single folder called "contents".</p> <p>Inside the contents folder we place all our QML, assets and other additional files. We split the contents into subdirectories: config, data and ui to make things easier.</p> <p>In our tutorial we will be making an RSS reader so everything is named appropriately to that.</p> <p>The basic directory structure should be as follows:</p> <p>myrssplasmoid/metadata.desktop<br /> myrssplasmoid/contents/ui/main.qml</p> <h3>metadata.desktop</h3> <pre style='color:#1f1c1b;background-color:#ffffff;'> <b>[Desktop Entry]</b> <span style='color:#0057ae;'>Name</span>=RSS Plasmoid <span style='color:#0057ae;'>Comment</span>=Shows RSS Feeds <span style='color:#0057ae;'>Encoding</span>=UTF-8 <span style='color:#0057ae;'>Icon</span>=applications-rss <span style='color:#0057ae;'>ServiceTypes</span>=Plasma/Applet <span style='color:#0057ae;'>Type</span>=Service <span style='color:#0057ae;'>X-KDE-PluginInfo-Author</span>=David Edmundson <span style='color:#0057ae;'>X-KDE-PluginInfo-Email</span>=davidedmundson@kde.org <span style='color:#0057ae;'>X-KDE-PluginInfo-Name</span>=org.example.rssplasmoid <span style='color:#0057ae;'>X-KDE-PluginInfo-License</span>=LGPL <span style='color:#0057ae;'>X-KDE-PluginInfo-Version</span>=1.0 <span style='color:#0057ae;'>X-KDE-PluginInfo-Website</span>=http://techbase.kde.org <span style='color:#0057ae;'>X-Plasma-API</span>=declarativeappletscript <span style='color:#0057ae;'>X-Plasma-MainScript</span>=ui/main.qml </pre> <p>Most of the fields here should be fairly self explanatory.<br /> If in doubt, copy this and change the relevant fields.</p> <h3>main.qml</h3> <pre style='color:#1f1c1b;background-color:#ffffff;'> <b>import</b><span style='color:#bf0303;'> QtQuick 2.0</span> <span style='color:#008000;'>Item</span> { Text { <span style='color:#006e28;'>anchors</span>.<span style='color:#644a9b;'>centerIn</span>: parent <span style='color:#0057ae;'>text</span>: <span style='color:#bf0303;'>&quot;Hello World!&quot;</span>; } } </pre> <p>Providing you have followed the recommended reading this should be fairly self-explanatory, we have a text item in the middle of the plasmoid which will say "Hello World".</p> <p>Over the next few tutorials this will get somewhat larger, we will also see some of the problems with this example; here translations aren't implemented and the text won't match the Plasma theme colour.</p> <h2>Installation</h2> <p>From the directory above run</p> <p>plasmapkg2 --install myrssplasmoid</p> <p>It should now be visible in the plasmashell in the "Add widgets" option along with every other plasmoid.</p> <p>We can then it to our desktop or panel like any other installed plasmoid.</p> <p><img decoding="async" src="http://static.davidedmundson.co.uk/blog/plasmatutorial/tutorial1.png" You will see that that the border and handles are automatically added, and that it is automatically sized to fit the implicit size of the text. <h2>Next</h2> <p>Next tutorial, we will cover getting data from external sources.</p> </div><!-- .entry-content --> <footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="http://blog.davidedmundson.co.uk/blog/plasmoid-tutorial-1/" rel="bookmark"><time class="entry-date published" datetime="2015-01-28T12:36:15+00:00">January 28, 2015</time><time class="updated" datetime=""></time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="http://blog.davidedmundson.co.uk/blog/category/blog/" rel="category tag">Blog</a>, <a href="http://blog.davidedmundson.co.uk/blog/category/kde/" rel="category tag">kde</a></span><span class="comments-link"><a href="http://blog.davidedmundson.co.uk/blog/plasmoid-tutorial-1/#comments">7 Comments<span class="screen-reader-text"> on Plasmoid Tutorial 1</span></a></span> </footer><!-- .entry-footer --> </article><!-- #post-## --> <article id="post-88" class="post-88 post type-post status-publish format-standard hentry category-blog category-kde"> <header class="entry-header"> <h2 class="entry-title"><a href="http://blog.davidedmundson.co.uk/blog/plasma-5-2-beta-coming/" rel="bookmark">Plasma 5.2 Beta Coming</a></h2> </header><!-- .entry-header --> <div class="entry-content"> <p>The Plamsa 5.2 beta will be tagged on Thursday this week. If you have any pending features or changes that are going to affect artwork or strings that should be in the release please make sure they get merged ASAP.</p> </div><!-- .entry-content --> <footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="http://blog.davidedmundson.co.uk/blog/plasma-5-2-beta-coming/" rel="bookmark"><time class="entry-date published" datetime="2015-01-06T06:59:15+00:00">January 6, 2015</time><time class="updated" datetime=""></time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="http://blog.davidedmundson.co.uk/blog/category/blog/" rel="category tag">Blog</a>, <a href="http://blog.davidedmundson.co.uk/blog/category/kde/" rel="category tag">kde</a></span><span class="comments-link"><a href="http://blog.davidedmundson.co.uk/blog/plasma-5-2-beta-coming/#respond">Leave a comment<span class="screen-reader-text"> on Plasma 5.2 Beta Coming</span></a></span> </footer><!-- .entry-footer --> </article><!-- #post-## --> </main><!-- .site-main --> </section><!-- .content-area --> </div><!-- .site-content --> <footer id="colophon" class="site-footer" role="contentinfo"> <div class="site-info"> <a href="https://wordpress.org/">Proudly powered by WordPress</a> </div><!-- .site-info --> </footer><!-- .site-footer --> </div><!-- .site --> <script type='text/javascript' src='http://blog.davidedmundson.co.uk/wp-content/themes/twentyfifteen/js/skip-link-focus-fix.js?ver=20141010' id='twentyfifteen-skip-link-focus-fix-js'></script> <script type='text/javascript' id='twentyfifteen-script-js-extra'> /* <![CDATA[ */ var screenReaderText = {"expand":"<span class=\"screen-reader-text\">expand child menu<\/span>","collapse":"<span class=\"screen-reader-text\">collapse child menu<\/span>"}; /* ]]> */ </script> <script type='text/javascript' src='http://blog.davidedmundson.co.uk/wp-content/themes/twentyfifteen/js/functions.js?ver=20150330' id='twentyfifteen-script-js'></script> </body> </html> <!-- Dynamic page generated in 0.097 seconds. --> <!-- Cached page generated by WP-Super-Cache on 2024-12-01 01:34:13 --> <!-- super cache -->

Pages: 1 2 3 4 5 6 7 8 9 10