<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://techbase.kde.org/skins/common/feed.css?0.2"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://techbase.kde.org/api.php?action=feedcontributions&amp;user=Cbs&amp;feedformat=atom</id>
		<title>KDE TechBase - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://techbase.kde.org/api.php?action=feedcontributions&amp;user=Cbs&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Special:Contributions/Cbs"/>
		<updated>2013-06-19T18:17:16Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.20.2</generator>

	<entry>
		<id>http://techbase.kde.org/Schedules/KDE4/4.3_Feature_Plan</id>
		<title>Schedules/KDE4/4.3 Feature Plan</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Schedules/KDE4/4.3_Feature_Plan"/>
				<updated>2008-11-28T10:07:14Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: Typo: Suuport-&amp;gt;Support&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of planned features for the 4.3 release.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
* [[Schedules/KDE4/4.3 Release Schedule]]&lt;br /&gt;
* [[Schedules/KDE4/4.2 Feature Plan]]&lt;br /&gt;
* [[Schedules/KDE4/4.3 Release Goals]]&lt;br /&gt;
&lt;br /&gt;
Legend:&lt;br /&gt;
* todo =&amp;gt; not started yet&lt;br /&gt;
* in-progress =&amp;gt; started, but not completed yet&lt;br /&gt;
* done =&amp;gt; completed&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Other =&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Project !! Description !! Contact&lt;br /&gt;
{{FeatureTodo|Akonadi|Various Akonadi related items can be found here http://techbase.kde.org/Projects/PIM/Akonadi#Scheduled_for_4.3|kde-pim@kde.org|Akonadi Developers}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= kdelibs =&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Project !! Description !! Contact&lt;br /&gt;
{{FeatureTodo|KLocale|Investigate adding Currency Code and currency minor units support based on ISO 4217 (http://en.wikipedia.org/wiki/ISO_4217).|john@layt.net|John Layt}}&lt;br /&gt;
{{FeatureTodo|KCalenderSystem|Add new astronomical calculation support classes to be used in kdelibs to build new astronomically based calendar systems, and in kdepim to build new version of libkholiday.|john@layt.net|John Layt}}&lt;br /&gt;
{{FeatureTodo|KCalenderSystem|Add new calendar systems: Indian Civil (Saka), Ethiopean, Chinese, Pure Julian, Pure Gregorian, etc.|john@layt.net|John Layt}}&lt;br /&gt;
{{FeatureTodo|KDEPrint|If no file printing support in Qt4.5, migrate FilePrinter class from Okular to enable file printing for all apps via QPrinter.  To be discussed on k-c-d first.|john@layt.net|John Layt}}&lt;br /&gt;
{{FeatureTodo|KDEPrint|Add framework for standard actions for 'Send to...' for e-mail, fax, etc by printing to PDF/PS.|john@layt.net|John Layt}}&lt;br /&gt;
{{FeatureTodo|new bookmark system|Port KBookmarks to akonadi/nepomuk. Will need help on this. [[Projects/PIM/Akonadi/Bookmarks|Details]]|xavier.vello@gmail.com|Xavier Vello}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= kdebase-workspace =&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Project !! Description !! Contact&lt;br /&gt;
&lt;br /&gt;
|- border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border&lt;br /&gt;
! colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center&amp;quot; |Non-Plasma, Non-KWin&lt;br /&gt;
{{FeatureTodo|Kxkb|Support for keyboard hotplugging|rysin:AT:kde.org|Andriy Rysin}}&lt;br /&gt;
{{FeatureTodo|Kxkb|Support for languages in keyboard layout descriptions|rysin:AT:kde.org|Andriy Rysin}}&lt;br /&gt;
&lt;br /&gt;
|- border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border&lt;br /&gt;
! colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center&amp;quot; |KRunner&lt;br /&gt;
&lt;br /&gt;
|- border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border&lt;br /&gt;
! colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center&amp;quot; |Plasma - Priority Features&lt;br /&gt;
&lt;br /&gt;
|- border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border&lt;br /&gt;
! colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center&amp;quot; |Plasma&lt;br /&gt;
{{FeatureTodo|Now Playing data engine|Support for MPD|kde:AT:randomguy3.me.uk|Alex Merry}}&lt;br /&gt;
|- border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border&lt;br /&gt;
! colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center&amp;quot; |KWin - Core&lt;br /&gt;
{{FeatureTodo|KWin|Rework of the KWin desktop effect system settings GUI|lmurray@undefinedfire.com|Lucas Murray}}&lt;br /&gt;
{{FeatureTodo|KWin|ARGB support for decorations|lmurray@undefinedfire.com|Lucas Murray}}&lt;br /&gt;
|- border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border&lt;br /&gt;
! colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center&amp;quot; |KWin - Desktop Effects&lt;br /&gt;
{{FeatureInProgress|KWin|Improved mouse mark/scribble effect|lmurray@undefinedfire.com|Lucas Murray}}&lt;br /&gt;
{{FeatureTodo|KWin|Make PresentWindows effect available for other effects (e.g. Desktop Grid)|kde@martin-graesslin.com|Martin Gräßlin}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= kdepimlibs =&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Project !! Description !! Contact&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= kdenetwork =&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Project !! Description !! Contact&lt;br /&gt;
{{FeatureTodo|Kopete|Jabber Jingle video support|detlev.casanova@gmail.com|Detlev Casanova}}&lt;br /&gt;
{{FeatureTodo|Kopete|Jabber Jingle ICE support|detlev.casanova@gmail.com|Detlev Casanova}}&lt;br /&gt;
{{FeatureInProgress|Kopete|Contacts plasmoid|earthwings@gentoo.org|Dennis Nienhüser}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= kdepim =&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Project !! Description !! Contact&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= kdeutils =&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Project !! Description !! Contact&lt;br /&gt;
{{FeatureTodo|printer-applet|Restore feature parity with KDEPrint3 where possible.|john@layt.net|John Layt}}&lt;br /&gt;
{{FeatureTodo|Okteta|make editing capability to Decoding table |kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add Kate-like search tool|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for import by drop, both url and data|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|copy again puts also a value or char variant of the data to clipboard|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for memory mapping of files|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add further export formats like s-record and intel 16|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
{{FeatureTodo|Okteta|add support for jobs like io, printing, string search or filter|kossebau@kde.org|Friedrich W. H. Kossebau}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= kdebindings =&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Project !! Description !! Contact&lt;br /&gt;
{{FeatureTodo|krossjava|Integrate into e.g. SuperKaramba and fix issues that show up.|mail@dipe.org|Sebastian Sauer}}&lt;br /&gt;
{{FeatureTodo|krossjava|Documentation++|mail@dipe.org|Sebastian Sauer}}&lt;br /&gt;
{{FeatureTodo|krossfalcon|Documentation++|mail@dipe.org|Sebastian Sauer}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= kdegames =&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Project !! Description !! Contact&lt;br /&gt;
{{FeatureTodo|KSpaceDuel|rewrite AI code|dirkrathlev@gmx.de|Dirk Rathlev}}&lt;br /&gt;
{{FeatureTodo|KsirK|rewrite AI code or at least correct most problems related in bug #170777. Volunteers wanted!|kleag@free.fr|Gaël de Chalendar}}&lt;br /&gt;
{{FeatureTodo|KsirK|Previous/Next in start new game as described in bug #170774|kleag@free.fr|Gaël de Chalendar}}&lt;br /&gt;
{{FeatureTodo|KsirK|Polish the skin editor (doc, contextual help, ...)|kleag@free.fr|Gaël de Chalendar}}&lt;br /&gt;
{{FeatureTodo|KsirK|Boost playing over Jabber|kleag@free.fr|Gaël de Chalendar}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= kdeadmin =&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Project !! Description !! Contact&lt;br /&gt;
{{FeatureTodo|KGrubEditor|Integrate KGrubEditor into KDE Admin http://sourceforge.net/projects/kgrubeditor. Approved by Nicolas Ternisien &amp;lt;nicolas.ternisien@gmail.com&amp;gt; |artemis_dot_fowl_dot_2007@gmail_dot_com|Konstantinos Smanis}}&lt;br /&gt;
{{FeatureTodo|Guidance|Port Guidance to KDE 4, and move it to KDE Admin http://www.simonzone.com/software/guidance/.|nicolas.ternisien@gmail.com|Nicolas Ternisien}}&lt;br /&gt;
{{FeatureTodo|system-config-printer-kde|Restore feature parity with KDEPrint3 where possible.|john@layt.net|john Layt}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= kdesdk =&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Project !! Description !! Contact&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= kdeedu =&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Project !! Description !! Contact&lt;br /&gt;
{{FeatureTodo|Kalzium|Port Kalzium's periodic table to use new QGraphicsView.|marcus@cryos.org|Marcus D. Hanwell}}&lt;br /&gt;
{{FeatureTodo|Kalzium|Remove the libavogadro snapshot, depend on libavogadro directly.|jacob@math.jussieu.fr|Benoit Jacob}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= kdemultimedia =&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Project !! Description !! Contact&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= kdeaccessibility =&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Project !! Description !! Contact&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= kdegraphics =&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Project !! Description !! Contact&lt;br /&gt;
{{FeatureInProgress|Okular|Generator for Mobipocket format|qbast@go2.pl|Jakub Stachowski}}&lt;br /&gt;
{{FeatureInProgress|strigi|Thumbnailer and analyzer for Mobipocket format|qbast@go2.pl|Jakub Stachowski}}&lt;br /&gt;
{{FeatureInProgress|strigi|Thumbnailer and analyzer for epub format|qbast@go2.pl|Jakub Stachowski}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= kdebase-runtime =&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Project !! Description !! Contact&lt;br /&gt;
{{FeatureTodo|kio_bookmarks|Refactoring using the new bookmarks system and qt/plasma for displaying|xavier.vello@gmail.com|Xavier Vello}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= kdebase-apps =&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Project !! Description !! Contact&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= kdeplasma-addons =&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: gray solid 1px; border-collapse: collapse; text-align: left; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; white-space:nowrap;&amp;quot;&lt;br /&gt;
! Status !! Project !! Description !! Contact&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Decibel/GettingStarted</id>
		<title>Development/Tutorials/Decibel/GettingStarted</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Decibel/GettingStarted"/>
				<updated>2008-05-25T10:19:05Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: /* Accounthandling */ - link to walkthrough section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TutorialBrowser|&lt;br /&gt;
&lt;br /&gt;
series=Decibel Tutorial|&lt;br /&gt;
&lt;br /&gt;
name=Getting Started with Decibel|&lt;br /&gt;
&lt;br /&gt;
pre=[http://mindview.net/Books/TICPP/ThinkingInCPP2e.html C++], [http://www.trolltech.com/products/qt/ Qt]| &lt;br /&gt;
next=[[Development/Tutorials/Decibel/Handling_TextChannels|Handling TextChannels]]| &lt;br /&gt;
&lt;br /&gt;
reading=|&lt;br /&gt;
}}&lt;br /&gt;
= Getting started with Decibel =&lt;br /&gt;
&lt;br /&gt;
This is a short tutorial describing how to set up the Decibel realtime communication system. It is intended for developers interested in working on or with Decibel.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''Decibel is no IM client. You can not use Decibel to chat with your friends without additional software!''&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''This guide assumes that you have the telepathy Gabble connection manager installed which enables Jabber access. Other connection managers may work as well, but are not as well tested. Telepathy Gabble is part of most recent linux distributions and can be found [http://telepathy.freedesktop.org/releases/telepathy-gabble/ here].''&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
All demos shipped with Decibel require the Decibel daemon to be up and running. After building Decibel this daemon is located in {{path|src/server/decibel}}. The daemon does (so far) not fork and blocks the terminal it is run from: Very useful behaviour when debugging problems.&lt;br /&gt;
&lt;br /&gt;
The Decibel daemon in turn requires an active D-Bus session bus. This is a precondition for all KDE 4 applications, so it is mentioned for completeness sake only.&lt;br /&gt;
&lt;br /&gt;
== Walkthrough ==&lt;br /&gt;
&lt;br /&gt;
This section describes a sequence of command line demos recommended to try and test decibel.&lt;br /&gt;
&lt;br /&gt;
# Make one or more of your accounts known to the Account Manager in Decibel. (see decibel_registeraccount_demo).&lt;br /&gt;
# List all stored accounts and find the account handle. (See decibel_listaccounts_demo).&lt;br /&gt;
# Set the desired presence state of an account to &amp;quot;online&amp;quot; using decibel_setpresence_demo.&lt;br /&gt;
# Have someone connect to and send a &amp;quot;ping?&amp;quot; message to your now online account. Decibel will launch a ping-handler which in turn will reply with a &amp;quot;pong!&amp;quot;. See decibel_simpleclient_demo).&lt;br /&gt;
# Use Decibel to connect to other accounts. See decibel_chatstarter_demo.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''Steps 1 to 3 can be done using the account manager KControl module as well. Run &amp;lt;tt&amp;gt;kcmshell4 decibel_accountmanager&amp;lt;/tt&amp;gt; if you prefer to use this more convenient method.''&lt;br /&gt;
&lt;br /&gt;
== Demos ==&lt;br /&gt;
&lt;br /&gt;
=== Accounthandling ===&lt;br /&gt;
&lt;br /&gt;
The demos in {{path|demos/accounthandling}} are showing how to manipulate the account storage of the Decibel daemon. They can be used as simple command line tools to manipulate accounts known to Decibel.&lt;br /&gt;
&lt;br /&gt;
Please note that the accountmanager KControl Module that is installed together with Decibel provides the same functionality as these command line demos. See the [[Development/Tutorials/Decibel/GettingStarted#Walkthrough|Walkthrough section]] for instructions on how to use the KControl module.&lt;br /&gt;
&lt;br /&gt;
==== decibel_registeraccount_demo ====&lt;br /&gt;
&lt;br /&gt;
'''Warning:''' When ''not'' using KDE4, then passwords that are part of the account data are stored in clear text in the configuration files of the Decibel daemon. When KDE4 is found during configuration of Decibel then KWallet is used to store passwords in a secure location.&lt;br /&gt;
&lt;br /&gt;
This demo registers an account with the Decibel daemon. Note that this command does ''not'' create new accounts and can only register already existing accounts with Decibel.&lt;br /&gt;
&lt;br /&gt;
The demo expects several sets of key-value pairs. These are of the following form: &amp;lt;tt&amp;gt;key=type:value&amp;lt;/tt&amp;gt; where type is either &amp;lt;tt&amp;gt;i&amp;lt;/tt&amp;gt; for integer values or &amp;lt;tt&amp;gt;s&amp;lt;/tt&amp;gt; for string values. Other types are not supported by this simplistic demo.&lt;br /&gt;
&lt;br /&gt;
You must register all the keys the connection manager you wish to use for the account requires (see the documentation of the connection manager for a complete list). In addition to those settings Decibel requires a further key-value pair: &amp;lt;tt&amp;gt;decibel_protocol&amp;lt;/tt&amp;gt; of type &amp;lt;tt&amp;gt;s&amp;lt;/tt&amp;gt; containing the protocol this account is for.&lt;br /&gt;
&lt;br /&gt;
==== decibel_deleteaccount_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo removes a account from Decibel's account storage. This demo expects a account handle (see decibel_listaccounts_demo) and removes the account associated with that handle.&lt;br /&gt;
&lt;br /&gt;
==== decibel_listaccounts_demo ====&lt;br /&gt;
&lt;br /&gt;
The listaccounts demo prints a list of all accounts known to Decibel together with the account handle associated with it. It expects no parameters.&lt;br /&gt;
&lt;br /&gt;
==== decibel_setpresence_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo is used to manipulate the presence state of an account managed by Decibel.&lt;br /&gt;
&lt;br /&gt;
It expects two parameters and accepts an optional third. The first is the handle to the account to change (see decibel_listaccounts_demo). The second is the new presence level. This is an integer value in the range of 1 to 6. 1 is Offline, 2 Available, 3 Away, 4 XA, 5 Hidden and 6 Busy.&lt;br /&gt;
&lt;br /&gt;
The optional third argument is a presence message.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Changing the presence state from 1 to any other valid value causes Decibel to create a connection to the server the account is for. Changing from a valid value not equal to 1 to 1 disconnects the account again.&lt;br /&gt;
&lt;br /&gt;
=== Protocolhandling ===&lt;br /&gt;
&lt;br /&gt;
The demos in {{path|demos/protocolhandling}} can be used to examine various settings on the Telepathy Connection Managers.&lt;br /&gt;
&lt;br /&gt;
==== decibel_listcms_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo lists all Telepathy Connection Managers installed in the system. This demo does not expect any parameters.&lt;br /&gt;
&lt;br /&gt;
==== decibel_supportedprotocols_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo lists all protocols supported by Telepathy Connection Managers installed on the system. This demo does not expect any parameters.&lt;br /&gt;
&lt;br /&gt;
==== decibel_listcmsfor_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo lists all Telepathy Connection Managers installed in the system that support a protocol. This protocol has to be given as the first parameter to the demo.&lt;br /&gt;
&lt;br /&gt;
==== decibel_defaultcmfor_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo expects a protocol name as its only argument. It reports the Telepathy connection manager configured in Decibel to handle all connections made using this protocol.&lt;br /&gt;
&lt;br /&gt;
==== decibel_setdefaultcmfor_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo expects two parameters. The first is a protocol name and the second a name of a Telepathy Connection Manager installed.&lt;br /&gt;
&lt;br /&gt;
Using this demo the Connection Manager used by Decibel to handle a protocol can be changed. By default one of the possible Connection Managers is chosen for each protocol supported.&lt;br /&gt;
&lt;br /&gt;
=== Contacthandling ===&lt;br /&gt;
&lt;br /&gt;
The demos in {{path|demos/contacthandling}} can be used to create connections to contacts. Decibel communicates with the users personal information management (PIM) system to get contact data and identifies contacts by the IDs they got in that system.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Proper integration into KDE4's Akonadi is still in development.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If you have not choosen to integrate Decibel with the KDE 4 environment then the SimplisticContactConnector was configured to provide a really simplistic contact management tool. It reads contact data from an INI file in {{path|~/.decibel_contact_data.ini}}. For the contacthandling demos to work you need to set up some contacts in this file. See {{path|docs/examples/decibel_contact_data.ini}} for an example file.&lt;br /&gt;
&lt;br /&gt;
==== decibel_chatstarter_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo expects an account handle (see decibel_listaccounts_demo) and a contact ID from the connected PIM system (or the INI file of the SimplisticContactConnector).&lt;br /&gt;
&lt;br /&gt;
I will cause Decibel to bring up the account associated with the account handle checks whether the contact of the given ID is on line and sends him a little ping-message.&lt;br /&gt;
&lt;br /&gt;
=== simpleclient ===&lt;br /&gt;
&lt;br /&gt;
By default the decibel_simpleclient_demo is started on incoming (jabber) connections by the Decibel daemon. It uses D-Bus activation for this, so a .service file needs to be installed into a D-Bus service directory. During installation Decibel creates such a file (in {{path|demos/simpleclient}} of the build directory) and installs it into {{path|share/dbus-1/services}}. This directory should work out fine if Decibel is installed alongside KDE4.&lt;br /&gt;
&lt;br /&gt;
If the simpleclient is not started on incoming jabber channels, then you might want to copy the .service file into the {{path|~/.local/dbus-1/services}} directory and try again.&lt;br /&gt;
&lt;br /&gt;
As its name advertises this client is pretty simple: It sends a &amp;quot;pong!&amp;quot;&lt;br /&gt;
message in response to every &amp;quot;ping?&amp;quot; message it receives.&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Decibel/GettingStarted</id>
		<title>Development/Tutorials/Decibel/GettingStarted</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Decibel/GettingStarted"/>
				<updated>2008-05-25T10:14:00Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: /* Walkthrough */ minor style changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TutorialBrowser|&lt;br /&gt;
&lt;br /&gt;
series=Decibel Tutorial|&lt;br /&gt;
&lt;br /&gt;
name=Getting Started with Decibel|&lt;br /&gt;
&lt;br /&gt;
pre=[http://mindview.net/Books/TICPP/ThinkingInCPP2e.html C++], [http://www.trolltech.com/products/qt/ Qt]| &lt;br /&gt;
next=[[Development/Tutorials/Decibel/Handling_TextChannels|Handling TextChannels]]| &lt;br /&gt;
&lt;br /&gt;
reading=|&lt;br /&gt;
}}&lt;br /&gt;
= Getting started with Decibel =&lt;br /&gt;
&lt;br /&gt;
This is a short tutorial describing how to set up the Decibel realtime communication system. It is intended for developers interested in working on or with Decibel.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''Decibel is no IM client. You can not use Decibel to chat with your friends without additional software!''&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''This guide assumes that you have the telepathy Gabble connection manager installed which enables Jabber access. Other connection managers may work as well, but are not as well tested. Telepathy Gabble is part of most recent linux distributions and can be found [http://telepathy.freedesktop.org/releases/telepathy-gabble/ here].''&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
All demos shipped with Decibel require the Decibel daemon to be up and running. After building Decibel this daemon is located in {{path|src/server/decibel}}. The daemon does (so far) not fork and blocks the terminal it is run from: Very useful behaviour when debugging problems.&lt;br /&gt;
&lt;br /&gt;
The Decibel daemon in turn requires an active D-Bus session bus. This is a precondition for all KDE 4 applications, so it is mentioned for completeness sake only.&lt;br /&gt;
&lt;br /&gt;
== Walkthrough ==&lt;br /&gt;
&lt;br /&gt;
This section describes a sequence of command line demos recommended to try and test decibel.&lt;br /&gt;
&lt;br /&gt;
# Make one or more of your accounts known to the Account Manager in Decibel. (see decibel_registeraccount_demo).&lt;br /&gt;
# List all stored accounts and find the account handle. (See decibel_listaccounts_demo).&lt;br /&gt;
# Set the desired presence state of an account to &amp;quot;online&amp;quot; using decibel_setpresence_demo.&lt;br /&gt;
# Have someone connect to and send a &amp;quot;ping?&amp;quot; message to your now online account. Decibel will launch a ping-handler which in turn will reply with a &amp;quot;pong!&amp;quot;. See decibel_simpleclient_demo).&lt;br /&gt;
# Use Decibel to connect to other accounts. See decibel_chatstarter_demo.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''Steps 1 to 3 can be done using the account manager KControl module as well. Run &amp;lt;tt&amp;gt;kcmshell4 decibel_accountmanager&amp;lt;/tt&amp;gt; if you prefer to use this more convenient method.''&lt;br /&gt;
&lt;br /&gt;
== Demos ==&lt;br /&gt;
&lt;br /&gt;
=== Accounthandling ===&lt;br /&gt;
&lt;br /&gt;
The demos in {{path|demos/accounthandling}} are showing how to manipulate the account storage of the Decibel daemon. They can be used as simple command line tools to manipulate accounts known to Decibel.&lt;br /&gt;
&lt;br /&gt;
Please note that the accountmanager KControl Module that is installed together with Decibel provides the same functionality as these command line demos. See the Walkthrough section for instructions on how to use the KControl module.&lt;br /&gt;
&lt;br /&gt;
==== decibel_registeraccount_demo ====&lt;br /&gt;
&lt;br /&gt;
'''Warning:''' When ''not'' using KDE4, then passwords that are part of the account data are stored in clear text in the configuration files of the Decibel daemon. When KDE4 is found during configuration of Decibel then KWallet is used to store passwords in a secure location.&lt;br /&gt;
&lt;br /&gt;
This demo registers an account with the Decibel daemon. Note that this command does ''not'' create new accounts and can only register already existing accounts with Decibel.&lt;br /&gt;
&lt;br /&gt;
The demo expects several sets of key-value pairs. These are of the following form: &amp;lt;tt&amp;gt;key=type:value&amp;lt;/tt&amp;gt; where type is either &amp;lt;tt&amp;gt;i&amp;lt;/tt&amp;gt; for integer values or &amp;lt;tt&amp;gt;s&amp;lt;/tt&amp;gt; for string values. Other types are not supported by this simplistic demo.&lt;br /&gt;
&lt;br /&gt;
You must register all the keys the connection manager you wish to use for the account requires (see the documentation of the connection manager for a complete list). In addition to those settings Decibel requires a further key-value pair: &amp;lt;tt&amp;gt;decibel_protocol&amp;lt;/tt&amp;gt; of type &amp;lt;tt&amp;gt;s&amp;lt;/tt&amp;gt; containing the protocol this account is for.&lt;br /&gt;
&lt;br /&gt;
==== decibel_deleteaccount_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo removes a account from Decibel's account storage. This demo expects a account handle (see decibel_listaccounts_demo) and removes the account associated with that handle.&lt;br /&gt;
&lt;br /&gt;
==== decibel_listaccounts_demo ====&lt;br /&gt;
&lt;br /&gt;
The listaccounts demo prints a list of all accounts known to Decibel together with the account handle associated with it. It expects no parameters.&lt;br /&gt;
&lt;br /&gt;
==== decibel_setpresence_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo is used to manipulate the presence state of an account managed by Decibel.&lt;br /&gt;
&lt;br /&gt;
It expects two parameters and accepts an optional third. The first is the handle to the account to change (see decibel_listaccounts_demo). The second is the new presence level. This is an integer value in the range of 1 to 6. 1 is Offline, 2 Available, 3 Away, 4 XA, 5 Hidden and 6 Busy.&lt;br /&gt;
&lt;br /&gt;
The optional third argument is a presence message.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Changing the presence state from 1 to any other valid value causes Decibel to create a connection to the server the account is for. Changing from a valid value not equal to 1 to 1 disconnects the account again.&lt;br /&gt;
&lt;br /&gt;
=== Protocolhandling ===&lt;br /&gt;
&lt;br /&gt;
The demos in {{path|demos/protocolhandling}} can be used to examine various settings on the Telepathy Connection Managers.&lt;br /&gt;
&lt;br /&gt;
==== decibel_listcms_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo lists all Telepathy Connection Managers installed in the system. This demo does not expect any parameters.&lt;br /&gt;
&lt;br /&gt;
==== decibel_supportedprotocols_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo lists all protocols supported by Telepathy Connection Managers installed on the system. This demo does not expect any parameters.&lt;br /&gt;
&lt;br /&gt;
==== decibel_listcmsfor_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo lists all Telepathy Connection Managers installed in the system that support a protocol. This protocol has to be given as the first parameter to the demo.&lt;br /&gt;
&lt;br /&gt;
==== decibel_defaultcmfor_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo expects a protocol name as its only argument. It reports the Telepathy connection manager configured in Decibel to handle all connections made using this protocol.&lt;br /&gt;
&lt;br /&gt;
==== decibel_setdefaultcmfor_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo expects two parameters. The first is a protocol name and the second a name of a Telepathy Connection Manager installed.&lt;br /&gt;
&lt;br /&gt;
Using this demo the Connection Manager used by Decibel to handle a protocol can be changed. By default one of the possible Connection Managers is chosen for each protocol supported.&lt;br /&gt;
&lt;br /&gt;
=== Contacthandling ===&lt;br /&gt;
&lt;br /&gt;
The demos in {{path|demos/contacthandling}} can be used to create connections to contacts. Decibel communicates with the users personal information management (PIM) system to get contact data and identifies contacts by the IDs they got in that system.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Proper integration into KDE4's Akonadi is still in development.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If you have not choosen to integrate Decibel with the KDE 4 environment then the SimplisticContactConnector was configured to provide a really simplistic contact management tool. It reads contact data from an INI file in {{path|~/.decibel_contact_data.ini}}. For the contacthandling demos to work you need to set up some contacts in this file. See {{path|docs/examples/decibel_contact_data.ini}} for an example file.&lt;br /&gt;
&lt;br /&gt;
==== decibel_chatstarter_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo expects an account handle (see decibel_listaccounts_demo) and a contact ID from the connected PIM system (or the INI file of the SimplisticContactConnector).&lt;br /&gt;
&lt;br /&gt;
I will cause Decibel to bring up the account associated with the account handle checks whether the contact of the given ID is on line and sends him a little ping-message.&lt;br /&gt;
&lt;br /&gt;
=== simpleclient ===&lt;br /&gt;
&lt;br /&gt;
By default the decibel_simpleclient_demo is started on incoming (jabber) connections by the Decibel daemon. It uses D-Bus activation for this, so a .service file needs to be installed into a D-Bus service directory. During installation Decibel creates such a file (in {{path|demos/simpleclient}} of the build directory) and installs it into {{path|share/dbus-1/services}}. This directory should work out fine if Decibel is installed alongside KDE4.&lt;br /&gt;
&lt;br /&gt;
If the simpleclient is not started on incoming jabber channels, then you might want to copy the .service file into the {{path|~/.local/dbus-1/services}} directory and try again.&lt;br /&gt;
&lt;br /&gt;
As its name advertises this client is pretty simple: It sends a &amp;quot;pong!&amp;quot;&lt;br /&gt;
message in response to every &amp;quot;ping?&amp;quot; message it receives.&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Decibel/GettingStarted</id>
		<title>Development/Tutorials/Decibel/GettingStarted</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Decibel/GettingStarted"/>
				<updated>2008-05-25T10:10:08Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: Walkthrough - fix list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TutorialBrowser|&lt;br /&gt;
&lt;br /&gt;
series=Decibel Tutorial|&lt;br /&gt;
&lt;br /&gt;
name=Getting Started with Decibel|&lt;br /&gt;
&lt;br /&gt;
pre=[http://mindview.net/Books/TICPP/ThinkingInCPP2e.html C++], [http://www.trolltech.com/products/qt/ Qt]| &lt;br /&gt;
next=[[Development/Tutorials/Decibel/Handling_TextChannels|Handling TextChannels]]| &lt;br /&gt;
&lt;br /&gt;
reading=|&lt;br /&gt;
}}&lt;br /&gt;
= Getting started with Decibel =&lt;br /&gt;
&lt;br /&gt;
This is a short tutorial describing how to set up the Decibel realtime communication system. It is intended for developers interested in working on or with Decibel.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''Decibel is no IM client. You can not use Decibel to chat with your friends without additional software!''&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''This guide assumes that you have the telepathy Gabble connection manager installed which enables Jabber access. Other connection managers may work as well, but are not as well tested. Telepathy Gabble is part of most recent linux distributions and can be found [http://telepathy.freedesktop.org/releases/telepathy-gabble/ here].''&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
All demos shipped with Decibel require the Decibel daemon to be up and running. After building Decibel this daemon is located in {{path|src/server/decibel}}. The daemon does (so far) not fork and blocks the terminal it is run from: Very useful behaviour when debugging problems.&lt;br /&gt;
&lt;br /&gt;
The Decibel daemon in turn requires an active D-Bus session bus. This is a precondition for all KDE 4 applications, so it is mentioned for completeness sake only.&lt;br /&gt;
&lt;br /&gt;
== Walkthrough ==&lt;br /&gt;
&lt;br /&gt;
This section gives a recommended sequence of command line demos to try.&lt;br /&gt;
&lt;br /&gt;
# Make one or more of your accounts known to the Account Manager in Decibel. (see decibel_registeraccount_demo).&lt;br /&gt;
# List all stored accounts and find the account handle. (See decibel_listaccounts_demo).&lt;br /&gt;
# Set the desired presence state of an account to &amp;quot;online&amp;quot; using decibel_setpresence_demo.&lt;br /&gt;
# Have someone connect to your now online account and have him send a &amp;quot;ping?&amp;quot; message. Decibel will launch a ping-handler which in turn will reply with a &amp;quot;pong!&amp;quot;. See decibel_simpleclient_demo).&lt;br /&gt;
# Use Decibel to connect to other accounts. See decibel_chatstarter_demo.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''Steps 1 to 3 can be done using the account manager KControl module as well. Run &amp;lt;tt&amp;gt;kcmshell4 decibel_accountmanager&amp;lt;/tt&amp;gt; if you prefer to use this more convenient method.''&lt;br /&gt;
&lt;br /&gt;
== Demos ==&lt;br /&gt;
&lt;br /&gt;
=== Accounthandling ===&lt;br /&gt;
&lt;br /&gt;
The demos in {{path|demos/accounthandling}} are showing how to manipulate the account storage of the Decibel daemon. They can be used as simple command line tools to manipulate accounts known to Decibel.&lt;br /&gt;
&lt;br /&gt;
Please note that the accountmanager KControl Module that is installed together with Decibel provides the same functionality as these command line demos. See the Walkthrough section for instructions on how to use the KControl module.&lt;br /&gt;
&lt;br /&gt;
==== decibel_registeraccount_demo ====&lt;br /&gt;
&lt;br /&gt;
'''Warning:''' When ''not'' using KDE4, then passwords that are part of the account data are stored in clear text in the configuration files of the Decibel daemon. When KDE4 is found during configuration of Decibel then KWallet is used to store passwords in a secure location.&lt;br /&gt;
&lt;br /&gt;
This demo registers an account with the Decibel daemon. Note that this command does ''not'' create new accounts and can only register already existing accounts with Decibel.&lt;br /&gt;
&lt;br /&gt;
The demo expects several sets of key-value pairs. These are of the following form: &amp;lt;tt&amp;gt;key=type:value&amp;lt;/tt&amp;gt; where type is either &amp;lt;tt&amp;gt;i&amp;lt;/tt&amp;gt; for integer values or &amp;lt;tt&amp;gt;s&amp;lt;/tt&amp;gt; for string values. Other types are not supported by this simplistic demo.&lt;br /&gt;
&lt;br /&gt;
You must register all the keys the connection manager you wish to use for the account requires (see the documentation of the connection manager for a complete list). In addition to those settings Decibel requires a further key-value pair: &amp;lt;tt&amp;gt;decibel_protocol&amp;lt;/tt&amp;gt; of type &amp;lt;tt&amp;gt;s&amp;lt;/tt&amp;gt; containing the protocol this account is for.&lt;br /&gt;
&lt;br /&gt;
==== decibel_deleteaccount_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo removes a account from Decibel's account storage. This demo expects a account handle (see decibel_listaccounts_demo) and removes the account associated with that handle.&lt;br /&gt;
&lt;br /&gt;
==== decibel_listaccounts_demo ====&lt;br /&gt;
&lt;br /&gt;
The listaccounts demo prints a list of all accounts known to Decibel together with the account handle associated with it. It expects no parameters.&lt;br /&gt;
&lt;br /&gt;
==== decibel_setpresence_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo is used to manipulate the presence state of an account managed by Decibel.&lt;br /&gt;
&lt;br /&gt;
It expects two parameters and accepts an optional third. The first is the handle to the account to change (see decibel_listaccounts_demo). The second is the new presence level. This is an integer value in the range of 1 to 6. 1 is Offline, 2 Available, 3 Away, 4 XA, 5 Hidden and 6 Busy.&lt;br /&gt;
&lt;br /&gt;
The optional third argument is a presence message.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Changing the presence state from 1 to any other valid value causes Decibel to create a connection to the server the account is for. Changing from a valid value not equal to 1 to 1 disconnects the account again.&lt;br /&gt;
&lt;br /&gt;
=== Protocolhandling ===&lt;br /&gt;
&lt;br /&gt;
The demos in {{path|demos/protocolhandling}} can be used to examine various settings on the Telepathy Connection Managers.&lt;br /&gt;
&lt;br /&gt;
==== decibel_listcms_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo lists all Telepathy Connection Managers installed in the system. This demo does not expect any parameters.&lt;br /&gt;
&lt;br /&gt;
==== decibel_supportedprotocols_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo lists all protocols supported by Telepathy Connection Managers installed on the system. This demo does not expect any parameters.&lt;br /&gt;
&lt;br /&gt;
==== decibel_listcmsfor_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo lists all Telepathy Connection Managers installed in the system that support a protocol. This protocol has to be given as the first parameter to the demo.&lt;br /&gt;
&lt;br /&gt;
==== decibel_defaultcmfor_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo expects a protocol name as its only argument. It reports the Telepathy connection manager configured in Decibel to handle all connections made using this protocol.&lt;br /&gt;
&lt;br /&gt;
==== decibel_setdefaultcmfor_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo expects two parameters. The first is a protocol name and the second a name of a Telepathy Connection Manager installed.&lt;br /&gt;
&lt;br /&gt;
Using this demo the Connection Manager used by Decibel to handle a protocol can be changed. By default one of the possible Connection Managers is chosen for each protocol supported.&lt;br /&gt;
&lt;br /&gt;
=== Contacthandling ===&lt;br /&gt;
&lt;br /&gt;
The demos in {{path|demos/contacthandling}} can be used to create connections to contacts. Decibel communicates with the users personal information management (PIM) system to get contact data and identifies contacts by the IDs they got in that system.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Proper integration into KDE4's Akonadi is still in development.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If you have not choosen to integrate Decibel with the KDE 4 environment then the SimplisticContactConnector was configured to provide a really simplistic contact management tool. It reads contact data from an INI file in {{path|~/.decibel_contact_data.ini}}. For the contacthandling demos to work you need to set up some contacts in this file. See {{path|docs/examples/decibel_contact_data.ini}} for an example file.&lt;br /&gt;
&lt;br /&gt;
==== decibel_chatstarter_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo expects an account handle (see decibel_listaccounts_demo) and a contact ID from the connected PIM system (or the INI file of the SimplisticContactConnector).&lt;br /&gt;
&lt;br /&gt;
I will cause Decibel to bring up the account associated with the account handle checks whether the contact of the given ID is on line and sends him a little ping-message.&lt;br /&gt;
&lt;br /&gt;
=== simpleclient ===&lt;br /&gt;
&lt;br /&gt;
By default the decibel_simpleclient_demo is started on incoming (jabber) connections by the Decibel daemon. It uses D-Bus activation for this, so a .service file needs to be installed into a D-Bus service directory. During installation Decibel creates such a file (in {{path|demos/simpleclient}} of the build directory) and installs it into {{path|share/dbus-1/services}}. This directory should work out fine if Decibel is installed alongside KDE4.&lt;br /&gt;
&lt;br /&gt;
If the simpleclient is not started on incoming jabber channels, then you might want to copy the .service file into the {{path|~/.local/dbus-1/services}} directory and try again.&lt;br /&gt;
&lt;br /&gt;
As its name advertises this client is pretty simple: It sends a &amp;quot;pong!&amp;quot;&lt;br /&gt;
message in response to every &amp;quot;ping?&amp;quot; message it receives.&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Decibel/GettingStarted</id>
		<title>Development/Tutorials/Decibel/GettingStarted</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Decibel/GettingStarted"/>
				<updated>2008-05-25T10:07:30Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: /* Requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TutorialBrowser|&lt;br /&gt;
&lt;br /&gt;
series=Decibel Tutorial|&lt;br /&gt;
&lt;br /&gt;
name=Getting Started with Decibel|&lt;br /&gt;
&lt;br /&gt;
pre=[http://mindview.net/Books/TICPP/ThinkingInCPP2e.html C++], [http://www.trolltech.com/products/qt/ Qt]| &lt;br /&gt;
next=[[Development/Tutorials/Decibel/Handling_TextChannels|Handling TextChannels]]| &lt;br /&gt;
&lt;br /&gt;
reading=|&lt;br /&gt;
}}&lt;br /&gt;
= Getting started with Decibel =&lt;br /&gt;
&lt;br /&gt;
This is a short tutorial describing how to set up the Decibel realtime communication system. It is intended for developers interested in working on or with Decibel.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''Decibel is no IM client. You can not use Decibel to chat with your friends without additional software!''&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''This guide assumes that you have the telepathy Gabble connection manager installed which enables Jabber access. Other connection managers may work as well, but are not as well tested. Telepathy Gabble is part of most recent linux distributions and can be found [http://telepathy.freedesktop.org/releases/telepathy-gabble/ here].''&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
All demos shipped with Decibel require the Decibel daemon to be up and running. After building Decibel this daemon is located in {{path|src/server/decibel}}. The daemon does (so far) not fork and blocks the terminal it is run from: Very useful behaviour when debugging problems.&lt;br /&gt;
&lt;br /&gt;
The Decibel daemon in turn requires an active D-Bus session bus. This is a precondition for all KDE 4 applications, so it is mentioned for completeness sake only.&lt;br /&gt;
&lt;br /&gt;
== Walkthrough ==&lt;br /&gt;
&lt;br /&gt;
This section gives a recommended sequence of command line demos to try.&lt;br /&gt;
&lt;br /&gt;
# Make one or more of your accounts known to the Account Manager in Decibel. (see decibel_registeraccount_demo).&lt;br /&gt;
&lt;br /&gt;
# List all stored accounts and find the account handle. (See decibel_listaccounts_demo).&lt;br /&gt;
&lt;br /&gt;
# Set the desired presence state of an account to &amp;quot;online&amp;quot; using decibel_setpresence_demo.&lt;br /&gt;
&lt;br /&gt;
# Have someone connect to your now online account and have him send a &amp;quot;ping?&amp;quot; message. Decibel will launch a ping-handler which in turn will reply with a &amp;quot;pong!&amp;quot;. See decibel_simpleclient_demo).&lt;br /&gt;
&lt;br /&gt;
# Use Decibel to connect to other accounts. See decibel_chatstarter_demo.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''Steps 1 to 3 can be done using the account manager KControl module as well. Run &amp;lt;tt&amp;gt;kcmshell4 decibel_accountmanager&amp;lt;/tt&amp;gt; if you prefer to use this more convenient method.''&lt;br /&gt;
&lt;br /&gt;
== Demos ==&lt;br /&gt;
&lt;br /&gt;
=== Accounthandling ===&lt;br /&gt;
&lt;br /&gt;
The demos in {{path|demos/accounthandling}} are showing how to manipulate the account storage of the Decibel daemon. They can be used as simple command line tools to manipulate accounts known to Decibel.&lt;br /&gt;
&lt;br /&gt;
Please note that the accountmanager KControl Module that is installed together with Decibel provides the same functionality as these command line demos. See the Walkthrough section for instructions on how to use the KControl module.&lt;br /&gt;
&lt;br /&gt;
==== decibel_registeraccount_demo ====&lt;br /&gt;
&lt;br /&gt;
'''Warning:''' When ''not'' using KDE4, then passwords that are part of the account data are stored in clear text in the configuration files of the Decibel daemon. When KDE4 is found during configuration of Decibel then KWallet is used to store passwords in a secure location.&lt;br /&gt;
&lt;br /&gt;
This demo registers an account with the Decibel daemon. Note that this command does ''not'' create new accounts and can only register already existing accounts with Decibel.&lt;br /&gt;
&lt;br /&gt;
The demo expects several sets of key-value pairs. These are of the following form: &amp;lt;tt&amp;gt;key=type:value&amp;lt;/tt&amp;gt; where type is either &amp;lt;tt&amp;gt;i&amp;lt;/tt&amp;gt; for integer values or &amp;lt;tt&amp;gt;s&amp;lt;/tt&amp;gt; for string values. Other types are not supported by this simplistic demo.&lt;br /&gt;
&lt;br /&gt;
You must register all the keys the connection manager you wish to use for the account requires (see the documentation of the connection manager for a complete list). In addition to those settings Decibel requires a further key-value pair: &amp;lt;tt&amp;gt;decibel_protocol&amp;lt;/tt&amp;gt; of type &amp;lt;tt&amp;gt;s&amp;lt;/tt&amp;gt; containing the protocol this account is for.&lt;br /&gt;
&lt;br /&gt;
==== decibel_deleteaccount_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo removes a account from Decibel's account storage. This demo expects a account handle (see decibel_listaccounts_demo) and removes the account associated with that handle.&lt;br /&gt;
&lt;br /&gt;
==== decibel_listaccounts_demo ====&lt;br /&gt;
&lt;br /&gt;
The listaccounts demo prints a list of all accounts known to Decibel together with the account handle associated with it. It expects no parameters.&lt;br /&gt;
&lt;br /&gt;
==== decibel_setpresence_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo is used to manipulate the presence state of an account managed by Decibel.&lt;br /&gt;
&lt;br /&gt;
It expects two parameters and accepts an optional third. The first is the handle to the account to change (see decibel_listaccounts_demo). The second is the new presence level. This is an integer value in the range of 1 to 6. 1 is Offline, 2 Available, 3 Away, 4 XA, 5 Hidden and 6 Busy.&lt;br /&gt;
&lt;br /&gt;
The optional third argument is a presence message.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Changing the presence state from 1 to any other valid value causes Decibel to create a connection to the server the account is for. Changing from a valid value not equal to 1 to 1 disconnects the account again.&lt;br /&gt;
&lt;br /&gt;
=== Protocolhandling ===&lt;br /&gt;
&lt;br /&gt;
The demos in {{path|demos/protocolhandling}} can be used to examine various settings on the Telepathy Connection Managers.&lt;br /&gt;
&lt;br /&gt;
==== decibel_listcms_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo lists all Telepathy Connection Managers installed in the system. This demo does not expect any parameters.&lt;br /&gt;
&lt;br /&gt;
==== decibel_supportedprotocols_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo lists all protocols supported by Telepathy Connection Managers installed on the system. This demo does not expect any parameters.&lt;br /&gt;
&lt;br /&gt;
==== decibel_listcmsfor_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo lists all Telepathy Connection Managers installed in the system that support a protocol. This protocol has to be given as the first parameter to the demo.&lt;br /&gt;
&lt;br /&gt;
==== decibel_defaultcmfor_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo expects a protocol name as its only argument. It reports the Telepathy connection manager configured in Decibel to handle all connections made using this protocol.&lt;br /&gt;
&lt;br /&gt;
==== decibel_setdefaultcmfor_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo expects two parameters. The first is a protocol name and the second a name of a Telepathy Connection Manager installed.&lt;br /&gt;
&lt;br /&gt;
Using this demo the Connection Manager used by Decibel to handle a protocol can be changed. By default one of the possible Connection Managers is chosen for each protocol supported.&lt;br /&gt;
&lt;br /&gt;
=== Contacthandling ===&lt;br /&gt;
&lt;br /&gt;
The demos in {{path|demos/contacthandling}} can be used to create connections to contacts. Decibel communicates with the users personal information management (PIM) system to get contact data and identifies contacts by the IDs they got in that system.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Proper integration into KDE4's Akonadi is still in development.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If you have not choosen to integrate Decibel with the KDE 4 environment then the SimplisticContactConnector was configured to provide a really simplistic contact management tool. It reads contact data from an INI file in {{path|~/.decibel_contact_data.ini}}. For the contacthandling demos to work you need to set up some contacts in this file. See {{path|docs/examples/decibel_contact_data.ini}} for an example file.&lt;br /&gt;
&lt;br /&gt;
==== decibel_chatstarter_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo expects an account handle (see decibel_listaccounts_demo) and a contact ID from the connected PIM system (or the INI file of the SimplisticContactConnector).&lt;br /&gt;
&lt;br /&gt;
I will cause Decibel to bring up the account associated with the account handle checks whether the contact of the given ID is on line and sends him a little ping-message.&lt;br /&gt;
&lt;br /&gt;
=== simpleclient ===&lt;br /&gt;
&lt;br /&gt;
By default the decibel_simpleclient_demo is started on incoming (jabber) connections by the Decibel daemon. It uses D-Bus activation for this, so a .service file needs to be installed into a D-Bus service directory. During installation Decibel creates such a file (in {{path|demos/simpleclient}} of the build directory) and installs it into {{path|share/dbus-1/services}}. This directory should work out fine if Decibel is installed alongside KDE4.&lt;br /&gt;
&lt;br /&gt;
If the simpleclient is not started on incoming jabber channels, then you might want to copy the .service file into the {{path|~/.local/dbus-1/services}} directory and try again.&lt;br /&gt;
&lt;br /&gt;
As its name advertises this client is pretty simple: It sends a &amp;quot;pong!&amp;quot;&lt;br /&gt;
message in response to every &amp;quot;ping?&amp;quot; message it receives.&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Decibel/GettingStarted</id>
		<title>Development/Tutorials/Decibel/GettingStarted</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Decibel/GettingStarted"/>
				<updated>2008-05-25T10:06:54Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: /* Requirements */ fixed typo: no far -&amp;gt; so far&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TutorialBrowser|&lt;br /&gt;
&lt;br /&gt;
series=Decibel Tutorial|&lt;br /&gt;
&lt;br /&gt;
name=Getting Started with Decibel|&lt;br /&gt;
&lt;br /&gt;
pre=[http://mindview.net/Books/TICPP/ThinkingInCPP2e.html C++], [http://www.trolltech.com/products/qt/ Qt]| &lt;br /&gt;
next=[[Development/Tutorials/Decibel/Handling_TextChannels|Handling TextChannels]]| &lt;br /&gt;
&lt;br /&gt;
reading=|&lt;br /&gt;
}}&lt;br /&gt;
= Getting started with Decibel =&lt;br /&gt;
&lt;br /&gt;
This is a short tutorial describing how to set up the Decibel realtime communication system. It is intended for developers interested in working on or with Decibel.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''Decibel is no IM client. You can not use Decibel to chat with your friends without additional software!''&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''This guide assumes that you have the telepathy Gabble connection manager installed which enables Jabber access. Other connection managers may work as well, but are not as well tested. Telepathy Gabble is part of most recent linux distributions and can be found [http://telepathy.freedesktop.org/releases/telepathy-gabble/ here].''&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
All demos shipped with Decibel require the Decibel daemon to be up and running. After building Decibel this daemon is located in {{path|src/server/decibel}}. The daemon does (so far) not fork and blocks the terminal it is run from: Very useful behaviour when debugging problems.&lt;br /&gt;
&lt;br /&gt;
The Decibel daemon in turn requires a active D-Bus session bus. This is a precondition for all KDE 4 applications, so it is mentioned for completeness sake only.&lt;br /&gt;
&lt;br /&gt;
== Walkthrough ==&lt;br /&gt;
&lt;br /&gt;
This section gives a recommended sequence of command line demos to try.&lt;br /&gt;
&lt;br /&gt;
# Make one or more of your accounts known to the Account Manager in Decibel. (see decibel_registeraccount_demo).&lt;br /&gt;
&lt;br /&gt;
# List all stored accounts and find the account handle. (See decibel_listaccounts_demo).&lt;br /&gt;
&lt;br /&gt;
# Set the desired presence state of an account to &amp;quot;online&amp;quot; using decibel_setpresence_demo.&lt;br /&gt;
&lt;br /&gt;
# Have someone connect to your now online account and have him send a &amp;quot;ping?&amp;quot; message. Decibel will launch a ping-handler which in turn will reply with a &amp;quot;pong!&amp;quot;. See decibel_simpleclient_demo).&lt;br /&gt;
&lt;br /&gt;
# Use Decibel to connect to other accounts. See decibel_chatstarter_demo.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''Steps 1 to 3 can be done using the account manager KControl module as well. Run &amp;lt;tt&amp;gt;kcmshell4 decibel_accountmanager&amp;lt;/tt&amp;gt; if you prefer to use this more convenient method.''&lt;br /&gt;
&lt;br /&gt;
== Demos ==&lt;br /&gt;
&lt;br /&gt;
=== Accounthandling ===&lt;br /&gt;
&lt;br /&gt;
The demos in {{path|demos/accounthandling}} are showing how to manipulate the account storage of the Decibel daemon. They can be used as simple command line tools to manipulate accounts known to Decibel.&lt;br /&gt;
&lt;br /&gt;
Please note that the accountmanager KControl Module that is installed together with Decibel provides the same functionality as these command line demos. See the Walkthrough section for instructions on how to use the KControl module.&lt;br /&gt;
&lt;br /&gt;
==== decibel_registeraccount_demo ====&lt;br /&gt;
&lt;br /&gt;
'''Warning:''' When ''not'' using KDE4, then passwords that are part of the account data are stored in clear text in the configuration files of the Decibel daemon. When KDE4 is found during configuration of Decibel then KWallet is used to store passwords in a secure location.&lt;br /&gt;
&lt;br /&gt;
This demo registers an account with the Decibel daemon. Note that this command does ''not'' create new accounts and can only register already existing accounts with Decibel.&lt;br /&gt;
&lt;br /&gt;
The demo expects several sets of key-value pairs. These are of the following form: &amp;lt;tt&amp;gt;key=type:value&amp;lt;/tt&amp;gt; where type is either &amp;lt;tt&amp;gt;i&amp;lt;/tt&amp;gt; for integer values or &amp;lt;tt&amp;gt;s&amp;lt;/tt&amp;gt; for string values. Other types are not supported by this simplistic demo.&lt;br /&gt;
&lt;br /&gt;
You must register all the keys the connection manager you wish to use for the account requires (see the documentation of the connection manager for a complete list). In addition to those settings Decibel requires a further key-value pair: &amp;lt;tt&amp;gt;decibel_protocol&amp;lt;/tt&amp;gt; of type &amp;lt;tt&amp;gt;s&amp;lt;/tt&amp;gt; containing the protocol this account is for.&lt;br /&gt;
&lt;br /&gt;
==== decibel_deleteaccount_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo removes a account from Decibel's account storage. This demo expects a account handle (see decibel_listaccounts_demo) and removes the account associated with that handle.&lt;br /&gt;
&lt;br /&gt;
==== decibel_listaccounts_demo ====&lt;br /&gt;
&lt;br /&gt;
The listaccounts demo prints a list of all accounts known to Decibel together with the account handle associated with it. It expects no parameters.&lt;br /&gt;
&lt;br /&gt;
==== decibel_setpresence_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo is used to manipulate the presence state of an account managed by Decibel.&lt;br /&gt;
&lt;br /&gt;
It expects two parameters and accepts an optional third. The first is the handle to the account to change (see decibel_listaccounts_demo). The second is the new presence level. This is an integer value in the range of 1 to 6. 1 is Offline, 2 Available, 3 Away, 4 XA, 5 Hidden and 6 Busy.&lt;br /&gt;
&lt;br /&gt;
The optional third argument is a presence message.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Changing the presence state from 1 to any other valid value causes Decibel to create a connection to the server the account is for. Changing from a valid value not equal to 1 to 1 disconnects the account again.&lt;br /&gt;
&lt;br /&gt;
=== Protocolhandling ===&lt;br /&gt;
&lt;br /&gt;
The demos in {{path|demos/protocolhandling}} can be used to examine various settings on the Telepathy Connection Managers.&lt;br /&gt;
&lt;br /&gt;
==== decibel_listcms_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo lists all Telepathy Connection Managers installed in the system. This demo does not expect any parameters.&lt;br /&gt;
&lt;br /&gt;
==== decibel_supportedprotocols_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo lists all protocols supported by Telepathy Connection Managers installed on the system. This demo does not expect any parameters.&lt;br /&gt;
&lt;br /&gt;
==== decibel_listcmsfor_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo lists all Telepathy Connection Managers installed in the system that support a protocol. This protocol has to be given as the first parameter to the demo.&lt;br /&gt;
&lt;br /&gt;
==== decibel_defaultcmfor_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo expects a protocol name as its only argument. It reports the Telepathy connection manager configured in Decibel to handle all connections made using this protocol.&lt;br /&gt;
&lt;br /&gt;
==== decibel_setdefaultcmfor_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo expects two parameters. The first is a protocol name and the second a name of a Telepathy Connection Manager installed.&lt;br /&gt;
&lt;br /&gt;
Using this demo the Connection Manager used by Decibel to handle a protocol can be changed. By default one of the possible Connection Managers is chosen for each protocol supported.&lt;br /&gt;
&lt;br /&gt;
=== Contacthandling ===&lt;br /&gt;
&lt;br /&gt;
The demos in {{path|demos/contacthandling}} can be used to create connections to contacts. Decibel communicates with the users personal information management (PIM) system to get contact data and identifies contacts by the IDs they got in that system.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Proper integration into KDE4's Akonadi is still in development.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If you have not choosen to integrate Decibel with the KDE 4 environment then the SimplisticContactConnector was configured to provide a really simplistic contact management tool. It reads contact data from an INI file in {{path|~/.decibel_contact_data.ini}}. For the contacthandling demos to work you need to set up some contacts in this file. See {{path|docs/examples/decibel_contact_data.ini}} for an example file.&lt;br /&gt;
&lt;br /&gt;
==== decibel_chatstarter_demo ====&lt;br /&gt;
&lt;br /&gt;
This demo expects an account handle (see decibel_listaccounts_demo) and a contact ID from the connected PIM system (or the INI file of the SimplisticContactConnector).&lt;br /&gt;
&lt;br /&gt;
I will cause Decibel to bring up the account associated with the account handle checks whether the contact of the given ID is on line and sends him a little ping-message.&lt;br /&gt;
&lt;br /&gt;
=== simpleclient ===&lt;br /&gt;
&lt;br /&gt;
By default the decibel_simpleclient_demo is started on incoming (jabber) connections by the Decibel daemon. It uses D-Bus activation for this, so a .service file needs to be installed into a D-Bus service directory. During installation Decibel creates such a file (in {{path|demos/simpleclient}} of the build directory) and installs it into {{path|share/dbus-1/services}}. This directory should work out fine if Decibel is installed alongside KDE4.&lt;br /&gt;
&lt;br /&gt;
If the simpleclient is not started on incoming jabber channels, then you might want to copy the .service file into the {{path|~/.local/dbus-1/services}} directory and try again.&lt;br /&gt;
&lt;br /&gt;
As its name advertises this client is pretty simple: It sends a &amp;quot;pong!&amp;quot;&lt;br /&gt;
message in response to every &amp;quot;ping?&amp;quot; message it receives.&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Talk:Policies</id>
		<title>Talk:Policies</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Talk:Policies"/>
				<updated>2008-02-04T16:01:35Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: New page: Does it make sense to add a binary compatibility policy? I know that the libs are compatible until KDE 5 but this &amp;quot;Binary compatibility is not required. i18n string changes are allowed&amp;quot; on...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Does it make sense to add a binary compatibility policy? I know that the libs are compatible until KDE 5 but this &amp;quot;Binary compatibility is not required. i18n string changes are allowed&amp;quot; on [[Schedules/KDE4/4.1_Release_Schedule]] was confusing until I found &amp;quot;Workspace interface freeze (source and binary compatibility until KDE 4.1)&amp;quot; on [[Schedules/KDE4/4.0_Release_Schedule]]. Apparently there are 2 binary compatibility guarantees. One for the libs which lasts over the entire 4 series and one for the workspace which lasts from 4.0 to 4.1 (and presumably then 4.1 to 4.2)&lt;br /&gt;
&lt;br /&gt;
--[[User:Cbs|Cbs]]&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Kross/Introduction</id>
		<title>Development/Tutorials/Kross/Introduction</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Kross/Introduction"/>
				<updated>2008-01-08T02:10:06Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: /* Advantage of Kross over other solutions */ Made first sentences bold&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The [http://kross.dipe.org Kross] scripting framework provides full [http://www.python.org/ Python], [http://www.ruby-lang.org/ Ruby] and [http://xmelegance.org/kjsembed KDE JavaScript] scripting support. The goal was&lt;br /&gt;
to limit the work needed on applications to have them fully scriptable and to provide a modular way to transparently integrate additional interpreters and in that way extend your application with a new scripting-backend without any new line of code and even without any recompile. To achieve this internally Qt's introspection-functionality like signals, slots, properties, enums, QVariant, QObject, QMetaObject, QMetaType, etc. are used to deal with functionality at runtime.&lt;br /&gt;
&lt;br /&gt;
===What Kross is===&lt;br /&gt;
Kross is a modular scripting framework that provides a complete framework to embed scripting interpreters like Python, Ruby and JavaScript transparently into native applications to bridge the static and dynamic worlds together.&lt;br /&gt;
&lt;br /&gt;
Scripting interpreters are plugins that are loaded dynamicly on demand at runtime by the Kross framework. The application that uses Kross to provide scripting functionality to the user does not need to know anything about the interpreter, itself or any other backend-details. All the application needs to know is that there exists scripting code that should be executed. Kross will then take care of it.&lt;br /&gt;
&lt;br /&gt;
===What Kross is not===&lt;br /&gt;
Kross does not implement its own scripting language, rather, it provides access to already existing solutions. Kross does not implement a complete Toolkit-binding, rather, it provides access to already existing solutions like PyQt/PyKDE or TkInter for Python or Korundum/QtRuby for Ruby. Kross does not auto-generate code, it is not needed to maintain any configuration files, and it does not come with yet another bindings-API. All it does is to connect things transparently together and to offer optional access to already existing technologies.&lt;br /&gt;
&lt;br /&gt;
===Reuse and choice are the goals===&lt;br /&gt;
There exists a wide range of solutions to deal with scripting. Programming languages like Python have enjoyed years of evolution and a large community around them with 3rd-party modules for nearly everything. The same goes for a lot of other languages where there sometimes exists a special function that is only available to a particular language, and where each language comes with its own way of doing things. Each user may have their own preference for what scripting language they like to use, and over time, may have acquired skills in some specific areas.&lt;br /&gt;
&lt;br /&gt;
Rather than limiting users to only one specific language with its own way of doing things, Kross offers a flexible way of supporting multiple programming languages without additional code and maintenance work, at the application level. Kross allows the user to choose what they like and know the most, and it minimizes the entry-barrier to get his things done and to be able to contribute to one's own solutions significantly.&lt;br /&gt;
&lt;br /&gt;
===Supported interpreters===&lt;br /&gt;
As of today Python, Ruby and JavaScript are supported. While all of them are passing the unittests, current state is, that Python is the most complete one followed by Ruby which is near the same state and finally JavaScript which needs some more tweaks to be as rock-stable as the other both implementations.&lt;br /&gt;
&lt;br /&gt;
Work on progress are krossjava (thanks to google for supporting this plugin within the Google Summer of Code 2007) that implements support for the Java Virtual Machine and krossfalcon that implements support for The Falcon Programming Language.&lt;br /&gt;
&lt;br /&gt;
For sure any interpreter-plugin you may like to implement is very welcome. At the end the open source world is about choices :)&lt;br /&gt;
&lt;br /&gt;
===Advantage of Kross over other solutions===&lt;br /&gt;
* '''Scripting interpreter independent.''' Kross does not implement an interpreter, it provides access to already existing interpreters. You don't limit your users to a particular scripting language, each user is free to decide which scripting language is best suited.&lt;br /&gt;
* '''Real embedding.''' Rather then communicating with scripting backends e.g. over stdin/stdout or D-Bus Kross does come with plugins that really embed the interpreters and deal with them on the native C/C++ code level to gain optimal performance and flexibility.&lt;br /&gt;
* '''Kross is fast.''' Kross had a bit of luck to be adopted by Krita so early since one of the top-priorities Krita had on a scripting backend was performance. During the years we managed to increase the speed to a level where it's hard to see a difference to native in C/C++ written code.&lt;br /&gt;
* '''Kross is platform-independent.''' From the beginning Kross was designed with platform-independence in mind. This is the result of the origins of Kross - it started as Kexi plugin, and Kexi itself runs at least on Linux, Windows and Mac since it's early days.&lt;br /&gt;
* '''Kross is stable and well proven.''' Before Kross finally landed in kdelibs it was in use in KOffice for 3 major releases and was thus &amp;quot;tested&amp;quot; by a wide range of users worldwide.&lt;br /&gt;
* '''A lot of documentation, scripts and applications are using Kross already today.''' The latter guarantees that Kross offers the solution for many scenarios.&lt;br /&gt;
* '''Kross can be easily extended with a new scripting interpreter.''' There are no changes needed to the applications. So, whatever hype we are able to see in the next few years, we are ready to fullfit the possible user-requests for them without much pain.&lt;br /&gt;
* '''Kross benefits from applications.''' The synergy-effect if multiple applications are sharing the same interpreter plugin implementations ensures that bugs are discovered and fixed as soon as possible. Also each app is able to profit if someone writes for example a plugin for the LUA-interpreter each app is able to use the new backend without any recompile.&lt;br /&gt;
* '''Kross reuses existing technologies as much as possible.''' There is no need for code-generation at compile time and no new &amp;quot;bindings API&amp;quot; is introduced since we are reusing the Qt Meta-Object System. You are able to throw in a QObject and a script is able to connect with the signals, call slots as there are functions, access enumerations, get/set properties or pass QObject/QWidget instances around as there are classes.&lt;br /&gt;
* '''The interpreter backend is very flexible.''' Each interpreter's plugin is able to decide on its own how to implement the bridging functionality. If you like for example to have it more &amp;quot;pythonic&amp;quot; by using the decorators introduced in Python 2.4, you are free to implement it and each app that uses Kross will profit by beeing able to use such decorators from now on.&lt;br /&gt;
* '''Kross will stay backward-compatible.''' Kross is part of kdelibs and thus follows strict policies to provide backward-compatibility at least during the lifetime of KDE4.&lt;br /&gt;
&lt;br /&gt;
==The Interpreter plugins==&lt;br /&gt;
&lt;br /&gt;
Kross offers a plugin-interface to integrate interpreter backends like Python, Ruby and KDE-Javascript. They are loaded on demand at runtime. Neither the application nor Kross needs to know any details about the backends. This clear separation between the application and scripting details enables at the one hand, to deal with scripting at an abstract level without being bound to only one backend, and at the other hand makes it easy to integrate scripting into an already existing application.&lt;br /&gt;
&lt;br /&gt;
Each interpreter plugin needs to implement two abstract classes;&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/interpreter.h?view=markup Kross::Interpreter] class is a singleton controlled by the     [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/manager.h?view=markup Kross::Manager] and could be used to setup the interpreter or do other things to share functionality between instances of the Script class.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/script.h?view=markup Kross::Script] class handles exactly one script instance. An application is able to deal with multiple scripts at the same time where each of them has it's own instance of the Kross::Script class controlled by an instance of the more abstract [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/action.h?view=markup Kross::Action] class.&lt;br /&gt;
&lt;br /&gt;
===Python===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/ Python plugin] implements access to the [http://www.python.org/ Python] scripting language.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/unittest.py?view=markup unittest.py] Python script file implements unittests for common functionality. For the unittests kross does use a special test-application that got compiled if cmake -DKDE4_BUILD_TESTS=1 was used for kdelibs. You are able to run the unittest with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd kdelibs/kross/test&lt;br /&gt;
./krosstest unittest.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other scripts are...&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/testkross.py?view=markup testkross.py] Python script file demonstrates how to use Kross to execute some JavaScript code within a python script.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/testguitk.py?view=markup testguitk.py] Python script file that creates and displays a modal dialog using the TkInter GUI-toolkit.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/testguiqt.py?view=markup testguiqt.py] Python script file shows how to use PyQt while the [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/testguiform.py?view=markup testguiform.py] uses the Kross Form module.&lt;br /&gt;
&lt;br /&gt;
The krosspython plugin consists of...&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythoninterpreter.h?view=markup Kross::PythonInterpreter] class implements [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/interpreter.h?view=markup Kross::Interpreter] for the Python interpreter backend and implements the createScript factory method to create [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonscript.h?view=markup Kross::PythonScript] instances.&lt;br /&gt;
*  The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonscript.h?view=markup Kross::PythonScript] class implements [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/script.h?view=markup Kross::Script] for the Python backend to provide the functionality to execute Python code within a script-container.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonmodule.h?view=markup Kross::PythonModule] class is the __main__ Python environment used as global object namespace. This module is shared between the different [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonscript.h?view=markup Kross::PythonScript] instances which run in there own module namespace. The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonmodule.h?view=markup Kross::PythonModule] also spends access to the the whole Kross functionality and manages all the @a Kross::PythonExtension modules.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonextension.h?view=markup Kross::PythonExtension] class implements a Py::Object to wrap a QObject instance into the world of Python.&lt;br /&gt;
* Within [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonvariant.h?view=markup Kross::PythonVariant] the Kross::PythonType helper class is used to cast between QVariant and Py::Object values while the Kross::PythonMetaTypeFactory helper class is used as factory within [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonextension.h?view=markup Kross::PythonExtension] to translate an argument into a Kross::MetaType needed for QGenericArgument's data pointer.&lt;br /&gt;
&lt;br /&gt;
===Ruby===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/ Ruby plugin] implements access to the [http://www.ruby-lang.org/ Ruby] scripting language.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/unittest.rb?view=markup unittest.rb] Ruby script file implements unittests for common functionality. For the unittests kross does use a special test-application that got compiled if cmake -DKDE4_BUILD_TESTS=1 was used for kdelibs. You are able to run the unittest with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd kdelibs/kross/test&lt;br /&gt;
./krosstest unittest.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The krossruby plugin consists of...&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyinterpreter.h?view=markup Kross::RubyInterpreter] class implements [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/interpreter.h?view=markup Kross::Interpreter] for the Ruby interpreter backend and provides with the createScript a factory method to create [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyscript.h?view=markup Kross::RubyScript] instances.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyscript.h?view=markup Kross::RubyScript] class implements [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/script.h?view=markup Kross::Script] for the Ruby backend to provide the functionality to execute Ruby code within a script-container.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubymodule.h?view=markup Kross::RubyModule] class is the __main__ Ruby environment used as global object namespace. This module is shared between the different [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyscript.h?view=markup Kross::RubyScript] instances which run in there own module namespace. The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubymodule.h?view=markup Kross::RubyModule] also spends access to the the whole Kross functionality and manages all the @a Kross::RubyExtension modules.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyextension.h?view=markup Kross::RubyExtension] class implements a Ruby VALUE object to wrap a QObject instance into the world of Ruby.&lt;br /&gt;
* Within [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyvariant.h?view=markup Kross::RubyVariant] the Kross::RubyType helper class is used to cast between QVariant and Ruby VALUE values while the Kross::RubyMetaTypeFactory helper class is used as factory within [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyextension.h?view=markup Kross::RubyExtension] to translate an argument into a Kross::MetaType needed for QGenericArgument's data pointer.&lt;br /&gt;
&lt;br /&gt;
===JavaScript===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/kjs KDE JavaScript plugin] uses the in kdelibs4 included Kjs and KjsEmbed4 frameworks to provide access to the JavaScript language.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/unittest.js?view=markup unittest.js] KDE-JavaScript script file implements unittests for common functionality. For the unittests kross does use a special test-application that got compiled if cmake -DKDE4_BUILD_TESTS=1 was used for kdelibs. You are able to run the unittest with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd kdelibs/kross/test&lt;br /&gt;
./krosstest unittest.js&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For details about KDE-JavaScript see...&lt;br /&gt;
* [http://websvn.kde.org/trunk/KDE/kdelibs/kjs/README?view=markup Kjs readme]&lt;br /&gt;
* [http://websvn.kde.org/trunk/KDE/kdelibs/kjs/ Kjs svn]&lt;br /&gt;
* [http://xmelegance.org/kjsembed KjsEmbed home]&lt;br /&gt;
* [https://mail.kde.org/mailman/listinfo/kjsembed KjsEmbed mailinglist]&lt;br /&gt;
* [http://websvn.kde.org/trunk/KDE/kdelibs/kjsembed/ KjsEmbed svn]&lt;br /&gt;
&lt;br /&gt;
===Java===&lt;br /&gt;
&lt;br /&gt;
The [[Projects/Summer_of_Code/2007/Projects/KrossJava|Google Summer of Code 2007]] did provide us the [http://websvn.kde.org/trunk/playground/bindings/krossjava/ krossjava] backend for Java :-)&lt;br /&gt;
&lt;br /&gt;
===Falcon===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/playground/bindings/krossfalcon/ krossfalcon] plugin does implement access to [http://www.falconpl.org The Falcon Programming Language].&lt;br /&gt;
&lt;br /&gt;
==The Module plugins==&lt;br /&gt;
&lt;br /&gt;
Modules are plugins loaded on demand at runtime to provide additional functionality. They only provide a factory to create and return a QObject instance that is then exposed to the scripting backend.&lt;br /&gt;
&lt;br /&gt;
Since Qt's introspection functionality is used, we are able to throw in just {{qt|QObject}}'s and have them act as classes/objects within a scripting backend. Slots are membermethods while properties and enumerations are membervariables. If your application also likes to offer [http://hal.freedesktop.org/wiki/Software/dbus D-Bus] support it may be an idea to reuse the {{qt|QDBusAbstractAdaptor}} implementations your application has also for scripting, like for example [[Development/Tutorials/KSpread_Scripting|KSpread]] did.&lt;br /&gt;
&lt;br /&gt;
Let's take a look at the following code that implements the MyObject class which inherits from QObject;&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;&lt;br /&gt;
class MyObject : public QObject {&lt;br /&gt;
  Q_OBJECT&lt;br /&gt;
  Q_PROPERTY(QString name READ name WRITE setName)&lt;br /&gt;
  public:&lt;br /&gt;
    MyObject(QObject* parent = 0) : QObject(parent) {}&lt;br /&gt;
    virtual ~MyObject() {}&lt;br /&gt;
    QString name() const { return objectName(); }&lt;br /&gt;
    void setName(const QString&amp;amp; name) {&lt;br /&gt;
      return setObjectName(name);&lt;br /&gt;
    }&lt;br /&gt;
  public slots:&lt;br /&gt;
    QObject* create(const QString&amp;amp; name,&lt;br /&gt;
                    QObject* parent=0) {&lt;br /&gt;
      MyObject* obj = new MyObject(parent);&lt;br /&gt;
      obj-&amp;gt;setObjectName(name);&lt;br /&gt;
      return obj;&lt;br /&gt;
    }&lt;br /&gt;
    QObject* parent() const { return QObject::parent(); }&lt;br /&gt;
    void setParent(QObject* parent) {&lt;br /&gt;
      QObject::setParent(parent);&lt;br /&gt;
      emit parentChanged(); &lt;br /&gt;
    }&lt;br /&gt;
  signals:&lt;br /&gt;
    void parentChanged();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
extern &amp;quot;C&amp;quot; {&lt;br /&gt;
  KDE_EXPORT QObject* krossmodule() {&lt;br /&gt;
    return new MyObject();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
At the bottom the krossmodule() function will be called by Kross and returns an instance of MyObject that is then exposed to the scripting backend.&lt;br /&gt;
&lt;br /&gt;
Then we just need to have our myobject.h and myobject.cpp files, filled with the content above, defined in the CMakeLists.txt file. The library needs to be named &amp;quot;krossmodule...&amp;quot; where the &amp;quot;...&amp;quot; is then the name the module is accessible as. For our example we use &amp;quot;krossmodulemyobjectmod&amp;quot; and therefore we are able to access the module if installed as &amp;quot;myobjectmod&amp;quot;. The example does not depend on Kross, so you may like to replace ${KROSS_INCLUDES} with whatever else your module depends on.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
include_directories(${CMAKE_SOURCE_DIR}&lt;br /&gt;
  ${KROSS_INCLUDES})&lt;br /&gt;
set(krossmodulemyobjectmod_PART_SRCS&lt;br /&gt;
  myobject.cpp)&lt;br /&gt;
kde4_add_plugin(krossmodulemyobjectmod&lt;br /&gt;
  ${krossmodulemyobjectmod_PART_SRCS})&lt;br /&gt;
target_link_libraries(krossmodulemyobjectmod&lt;br /&gt;
  ${KDE4_KDECORE_LIBS} ${KDE4_KROSSCORE_LIBS})&lt;br /&gt;
install(TARGETS krossmodulemyobjectmod&lt;br /&gt;
  DESTINATION ${PLUGIN_INSTALL_DIR})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Python sample code accesses then the module at runtime and uses the QObject, calls it's slots and properties and connects a signal with a python function (e.g. save as file named &amp;quot;myobjecttest.py&amp;quot; and execute with &amp;quot;kross ./myobjecttest.py&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
#!/usr/bin/env kross&lt;br /&gt;
import Kross&lt;br /&gt;
m = Kross.module(&amp;quot;myobjectmod&amp;quot;)&lt;br /&gt;
m.name = &amp;quot;MyObjectModuleName&amp;quot;&lt;br /&gt;
obj1 = m.create(&amp;quot;OtherObjectName&amp;quot;)&lt;br /&gt;
def myCallbackFunc(args):&lt;br /&gt;
    print &amp;quot;The parent of obj1 changed&amp;quot;&lt;br /&gt;
obj1.connect(&amp;quot;parentChanged()&amp;quot;,myCallbackFunc)&lt;br /&gt;
obj1.setParent(m)&lt;br /&gt;
print &amp;quot;%s %s&amp;quot; % (obj1.name,obj1.parent().name)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Manager, GuiClient, Action==&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/manager.h?view=markup Kross::Manager] class is a singleton that provides access to the interpreters, to actions and to the modules. The Kross::Manager is available within scripting code as module named &amp;quot;Kross&amp;quot;. Following Python script uses the Kross module to create a new Kross::Action instance, fills it with JavaScript code and executes that JavaScript code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
#!/usr/bin/env kross&lt;br /&gt;
import Kross&lt;br /&gt;
a = Kross.action(&amp;quot;MyKjsScript&amp;quot;)&lt;br /&gt;
a.setInterpreter(&amp;quot;javascript&amp;quot;)&lt;br /&gt;
a.setCode(&amp;quot;println(\&amp;quot;Hello world from Kjs\&amp;quot;);&amp;quot;)&lt;br /&gt;
a.trigger()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/guiclient.h?view=markup Kross::GuiClient] class implements KXMLGUIClient to provide GUI functionality, handling of XML configuration files on a more abstract level and offers some predefined actions that could be optionally used in your application.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/action.h?view=markup Kross::Action] class offers an abstract container to deal with scripts like a single standalone scriptfile. Each action holds a reference to the by the matching [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/interpreter.h?view=markup Kross::Interpreter] instance created by [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/script.h?view=markup Kross::Script] instance. Following Python script accesses the Kross module and the self variable which is our Kross::Action instance that provides the context for the running Python script.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
#!/usr/bin/env kross&lt;br /&gt;
import Kross&lt;br /&gt;
print &amp;quot;objectName=%s&amp;quot; % Kross.objectName()&lt;br /&gt;
print &amp;quot;interpreters=%s&amp;quot; % Kross.interpreters()&lt;br /&gt;
print &amp;quot;objectName=%s&amp;quot; % self.objectName()&lt;br /&gt;
print &amp;quot;text=%s&amp;quot; % self.text&lt;br /&gt;
print &amp;quot;enabled=%s&amp;quot; % self.enabled&lt;br /&gt;
print &amp;quot;currentPath=%s&amp;quot; % self.currentPath()&lt;br /&gt;
print &amp;quot;interpreter=%s&amp;quot; % self.interpreter()&lt;br /&gt;
print &amp;quot;description=%s&amp;quot; % self.description()&lt;br /&gt;
print &amp;quot;code=%s&amp;quot; % self.code()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D-Bus and Kross==&lt;br /&gt;
&lt;br /&gt;
With the [http://doc.trolltech.com/4.2/qtdbus.html QtDBus module] Qt provides a library that a Qt/KDE application is able to use to make Inter-Process Communication using the [http://dbus.freedesktop.org D-BUS protocol].&lt;br /&gt;
&lt;br /&gt;
The QtDBus module uses the Qt Signals and Slots mechanism. Applications that like to provide parts of their functionality to the D-Bus world are able to do so by implementing classes that inherit from the {{qt|QDBusAbstractAdaptor}} class.&lt;br /&gt;
&lt;br /&gt;
Kross is able to reuse such by an application provided bindings. So, once your application supports D-Bus, Kross is able to reuse those already existing code and offers transparent access to the scripting-backends to them. How does this differ from e.g. the python-dbus package? Well, first method-calls don't go through the dbus-socket and then it's not dbus-related at all except, that we are able to reuse what your application offers anyway: a clean interface to the outside world. But that's not all, we are not limited to what's possible with D-Bus. We are also able to exchange instance-pointers to QObject or QWidget instances.&lt;br /&gt;
&lt;br /&gt;
For an example you may like to take a look at how it was done in the KSpread [http://websvn.kde.org/trunk/koffice/kspread/plugins/scripting/ScriptingModule.cpp?view=markup ScriptingModule] class.&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Kross/Introduction</id>
		<title>Development/Tutorials/Kross/Introduction</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Kross/Introduction"/>
				<updated>2008-01-08T01:56:24Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: /* Advantage of Kross over other solutions */ tried to remove user==male assumption from text and made some minor editorial changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The [http://kross.dipe.org Kross] scripting framework provides full [http://www.python.org/ Python], [http://www.ruby-lang.org/ Ruby] and [http://xmelegance.org/kjsembed KDE JavaScript] scripting support. The goal was&lt;br /&gt;
to limit the work needed on applications to have them fully scriptable and to provide a modular way to transparently integrate additional interpreters and in that way extend your application with a new scripting-backend without any new line of code and even without any recompile. To achieve this internally Qt's introspection-functionality like signals, slots, properties, enums, QVariant, QObject, QMetaObject, QMetaType, etc. are used to deal with functionality at runtime.&lt;br /&gt;
&lt;br /&gt;
===What Kross is===&lt;br /&gt;
Kross is a modular scripting framework that provides a complete framework to embed scripting interpreters like Python, Ruby and JavaScript transparently into native applications to bridge the static and dynamic worlds together.&lt;br /&gt;
&lt;br /&gt;
Scripting interpreters are plugins that are loaded dynamicly on demand at runtime by the Kross framework. The application that uses Kross to provide scripting functionality to the user does not need to know anything about the interpreter, itself or any other backend-details. All the application needs to know is that there exists scripting code that should be executed. Kross will then take care of it.&lt;br /&gt;
&lt;br /&gt;
===What Kross is not===&lt;br /&gt;
Kross does not implement its own scripting language, rather, it provides access to already existing solutions. Kross does not implement a complete Toolkit-binding, rather, it provides access to already existing solutions like PyQt/PyKDE or TkInter for Python or Korundum/QtRuby for Ruby. Kross does not auto-generate code, it is not needed to maintain any configuration files, and it does not come with yet another bindings-API. All it does is to connect things transparently together and to offer optional access to already existing technologies.&lt;br /&gt;
&lt;br /&gt;
===Reuse and choice are the goals===&lt;br /&gt;
There exists a wide range of solutions to deal with scripting. Programming languages like Python have enjoyed years of evolution and a large community around them with 3rd-party modules for nearly everything. The same goes for a lot of other languages where there sometimes exists a special function that is only available to a particular language, and where each language comes with its own way of doing things. Each user may have their own preference for what scripting language they like to use, and over time, may have acquired skills in some specific areas.&lt;br /&gt;
&lt;br /&gt;
Rather than limiting users to only one specific language with its own way of doing things, Kross offers a flexible way of supporting multiple programming languages without additional code and maintenance work, at the application level. Kross allows the user to choose what they like and know the most, and it minimizes the entry-barrier to get his things done and to be able to contribute to one's own solutions significantly.&lt;br /&gt;
&lt;br /&gt;
===Supported interpreters===&lt;br /&gt;
As of today Python, Ruby and JavaScript are supported. While all of them are passing the unittests, current state is, that Python is the most complete one followed by Ruby which is near the same state and finally JavaScript which needs some more tweaks to be as rock-stable as the other both implementations.&lt;br /&gt;
&lt;br /&gt;
Work on progress are krossjava (thanks to google for supporting this plugin within the Google Summer of Code 2007) that implements support for the Java Virtual Machine and krossfalcon that implements support for The Falcon Programming Language.&lt;br /&gt;
&lt;br /&gt;
For sure any interpreter-plugin you may like to implement is very welcome. At the end the open source world is about choices :)&lt;br /&gt;
&lt;br /&gt;
===Advantage of Kross over other solutions===&lt;br /&gt;
* Scripting interpreter independent. Kross does not implement an interpreter, it provides access to already existing interpreters. You don't limit your users to a particular scripting language, each user is free to decide which scripting language is best suited.&lt;br /&gt;
* Real embedding. Rather then communicating with scripting backends e.g. over stdin/stdout or D-Bus Kross does come with plugins that really embed the interpreters and deal with them on the native C/C++ code level to gain optimal performance and flexibility.&lt;br /&gt;
* Kross is fast. Kross had a bit of luck to be adopted by Krita so early since one of the top-priorities Krita had on a scripting backend was performance. During the years we managed to increase the speed to a level where it's hard to see a difference to native in C/C++ written code.&lt;br /&gt;
* Kross was designed from the beginning with platform-independence in mind. This is the result of the origins of Kross - it started as Kexi plugin, and Kexi itself runs at least on Linux, Windows and Mac since it's early days.&lt;br /&gt;
* Kross is stable and well proven. Before Kross finally landed in kdelibs it was in use in KOffice for 3 major releases and was thus &amp;quot;tested&amp;quot; by a wide range of users worldwide.&lt;br /&gt;
* A lot of documentation, scripts and applications are using Kross already today. The latter guarantees that Kross offers the solution for many scenarios.&lt;br /&gt;
* Kross could be easily extended with a new scripting interpreter. There are no changes needed to the applications. So, whatever hype we are able to see in the next few years, we are ready to fullfit the possible user-requests for them without much pain.&lt;br /&gt;
* The synergy-effect if multiple applications are sharing the same interpreter plugin implementations ensures that bugs are discovered and fixed as soon as possible. Also each app is able to profit if someone writes for example a plugin for the LUA-interpreter each app is able to use the new backend without any recompile.&lt;br /&gt;
* Kross does reuse existing technologies as much as possible. There is no need for code-generation at compile time and no new &amp;quot;bindings API&amp;quot; is introduced since we are reusing the Qt Meta-Object System. You are able to throw in a QObject and a script is able to connect with the signals, call slots as there are functions, access enumerations, get/set properties or pass QObject/QWidget instances around as there are classes.&lt;br /&gt;
* The interpreter backend is very flexible since each interpreter's plugin is able to decide on its own how to implement the bridging functionality. If you like for example to have it more &amp;quot;pythonic&amp;quot; by using the decorators introduced in Python 2.4, you are free to implement it and each app that uses Kross will profit by beeing able to use such decorators from now on.&lt;br /&gt;
* Kross will stay backward-compatible because as part of kdelibs it needs to follow strict policies and needs to provide backward-compatibility at least during the lifetime of KDE4.&lt;br /&gt;
&lt;br /&gt;
==The Interpreter plugins==&lt;br /&gt;
&lt;br /&gt;
Kross offers a plugin-interface to integrate interpreter backends like Python, Ruby and KDE-Javascript. They are loaded on demand at runtime. Neither the application nor Kross needs to know any details about the backends. This clear separation between the application and scripting details enables at the one hand, to deal with scripting at an abstract level without being bound to only one backend, and at the other hand makes it easy to integrate scripting into an already existing application.&lt;br /&gt;
&lt;br /&gt;
Each interpreter plugin needs to implement two abstract classes;&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/interpreter.h?view=markup Kross::Interpreter] class is a singleton controlled by the     [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/manager.h?view=markup Kross::Manager] and could be used to setup the interpreter or do other things to share functionality between instances of the Script class.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/script.h?view=markup Kross::Script] class handles exactly one script instance. An application is able to deal with multiple scripts at the same time where each of them has it's own instance of the Kross::Script class controlled by an instance of the more abstract [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/action.h?view=markup Kross::Action] class.&lt;br /&gt;
&lt;br /&gt;
===Python===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/ Python plugin] implements access to the [http://www.python.org/ Python] scripting language.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/unittest.py?view=markup unittest.py] Python script file implements unittests for common functionality. For the unittests kross does use a special test-application that got compiled if cmake -DKDE4_BUILD_TESTS=1 was used for kdelibs. You are able to run the unittest with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd kdelibs/kross/test&lt;br /&gt;
./krosstest unittest.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other scripts are...&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/testkross.py?view=markup testkross.py] Python script file demonstrates how to use Kross to execute some JavaScript code within a python script.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/testguitk.py?view=markup testguitk.py] Python script file that creates and displays a modal dialog using the TkInter GUI-toolkit.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/testguiqt.py?view=markup testguiqt.py] Python script file shows how to use PyQt while the [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/testguiform.py?view=markup testguiform.py] uses the Kross Form module.&lt;br /&gt;
&lt;br /&gt;
The krosspython plugin consists of...&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythoninterpreter.h?view=markup Kross::PythonInterpreter] class implements [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/interpreter.h?view=markup Kross::Interpreter] for the Python interpreter backend and implements the createScript factory method to create [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonscript.h?view=markup Kross::PythonScript] instances.&lt;br /&gt;
*  The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonscript.h?view=markup Kross::PythonScript] class implements [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/script.h?view=markup Kross::Script] for the Python backend to provide the functionality to execute Python code within a script-container.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonmodule.h?view=markup Kross::PythonModule] class is the __main__ Python environment used as global object namespace. This module is shared between the different [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonscript.h?view=markup Kross::PythonScript] instances which run in there own module namespace. The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonmodule.h?view=markup Kross::PythonModule] also spends access to the the whole Kross functionality and manages all the @a Kross::PythonExtension modules.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonextension.h?view=markup Kross::PythonExtension] class implements a Py::Object to wrap a QObject instance into the world of Python.&lt;br /&gt;
* Within [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonvariant.h?view=markup Kross::PythonVariant] the Kross::PythonType helper class is used to cast between QVariant and Py::Object values while the Kross::PythonMetaTypeFactory helper class is used as factory within [http://websvn.kde.org/trunk/KDE/kdebindings/python/krosspython/pythonextension.h?view=markup Kross::PythonExtension] to translate an argument into a Kross::MetaType needed for QGenericArgument's data pointer.&lt;br /&gt;
&lt;br /&gt;
===Ruby===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/ Ruby plugin] implements access to the [http://www.ruby-lang.org/ Ruby] scripting language.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/unittest.rb?view=markup unittest.rb] Ruby script file implements unittests for common functionality. For the unittests kross does use a special test-application that got compiled if cmake -DKDE4_BUILD_TESTS=1 was used for kdelibs. You are able to run the unittest with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd kdelibs/kross/test&lt;br /&gt;
./krosstest unittest.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The krossruby plugin consists of...&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyinterpreter.h?view=markup Kross::RubyInterpreter] class implements [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/interpreter.h?view=markup Kross::Interpreter] for the Ruby interpreter backend and provides with the createScript a factory method to create [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyscript.h?view=markup Kross::RubyScript] instances.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyscript.h?view=markup Kross::RubyScript] class implements [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/script.h?view=markup Kross::Script] for the Ruby backend to provide the functionality to execute Ruby code within a script-container.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubymodule.h?view=markup Kross::RubyModule] class is the __main__ Ruby environment used as global object namespace. This module is shared between the different [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyscript.h?view=markup Kross::RubyScript] instances which run in there own module namespace. The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubymodule.h?view=markup Kross::RubyModule] also spends access to the the whole Kross functionality and manages all the @a Kross::RubyExtension modules.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyextension.h?view=markup Kross::RubyExtension] class implements a Ruby VALUE object to wrap a QObject instance into the world of Ruby.&lt;br /&gt;
* Within [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyvariant.h?view=markup Kross::RubyVariant] the Kross::RubyType helper class is used to cast between QVariant and Ruby VALUE values while the Kross::RubyMetaTypeFactory helper class is used as factory within [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/krossruby/rubyextension.h?view=markup Kross::RubyExtension] to translate an argument into a Kross::MetaType needed for QGenericArgument's data pointer.&lt;br /&gt;
&lt;br /&gt;
===JavaScript===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/kjs KDE JavaScript plugin] uses the in kdelibs4 included Kjs and KjsEmbed4 frameworks to provide access to the JavaScript language.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/test/unittest.js?view=markup unittest.js] KDE-JavaScript script file implements unittests for common functionality. For the unittests kross does use a special test-application that got compiled if cmake -DKDE4_BUILD_TESTS=1 was used for kdelibs. You are able to run the unittest with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd kdelibs/kross/test&lt;br /&gt;
./krosstest unittest.js&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For details about KDE-JavaScript see...&lt;br /&gt;
* [http://websvn.kde.org/trunk/KDE/kdelibs/kjs/README?view=markup Kjs readme]&lt;br /&gt;
* [http://websvn.kde.org/trunk/KDE/kdelibs/kjs/ Kjs svn]&lt;br /&gt;
* [http://xmelegance.org/kjsembed KjsEmbed home]&lt;br /&gt;
* [https://mail.kde.org/mailman/listinfo/kjsembed KjsEmbed mailinglist]&lt;br /&gt;
* [http://websvn.kde.org/trunk/KDE/kdelibs/kjsembed/ KjsEmbed svn]&lt;br /&gt;
&lt;br /&gt;
===Java===&lt;br /&gt;
&lt;br /&gt;
The [[Projects/Summer_of_Code/2007/Projects/KrossJava|Google Summer of Code 2007]] did provide us the [http://websvn.kde.org/trunk/playground/bindings/krossjava/ krossjava] backend for Java :-)&lt;br /&gt;
&lt;br /&gt;
===Falcon===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/playground/bindings/krossfalcon/ krossfalcon] plugin does implement access to [http://www.falconpl.org The Falcon Programming Language].&lt;br /&gt;
&lt;br /&gt;
==The Module plugins==&lt;br /&gt;
&lt;br /&gt;
Modules are plugins loaded on demand at runtime to provide additional functionality. They only provide a factory to create and return a QObject instance that is then exposed to the scripting backend.&lt;br /&gt;
&lt;br /&gt;
Since Qt's introspection functionality is used, we are able to throw in just {{qt|QObject}}'s and have them act as classes/objects within a scripting backend. Slots are membermethods while properties and enumerations are membervariables. If your application also likes to offer [http://hal.freedesktop.org/wiki/Software/dbus D-Bus] support it may be an idea to reuse the {{qt|QDBusAbstractAdaptor}} implementations your application has also for scripting, like for example [[Development/Tutorials/KSpread_Scripting|KSpread]] did.&lt;br /&gt;
&lt;br /&gt;
Let's take a look at the following code that implements the MyObject class which inherits from QObject;&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;&lt;br /&gt;
class MyObject : public QObject {&lt;br /&gt;
  Q_OBJECT&lt;br /&gt;
  Q_PROPERTY(QString name READ name WRITE setName)&lt;br /&gt;
  public:&lt;br /&gt;
    MyObject(QObject* parent = 0) : QObject(parent) {}&lt;br /&gt;
    virtual ~MyObject() {}&lt;br /&gt;
    QString name() const { return objectName(); }&lt;br /&gt;
    void setName(const QString&amp;amp; name) {&lt;br /&gt;
      return setObjectName(name);&lt;br /&gt;
    }&lt;br /&gt;
  public slots:&lt;br /&gt;
    QObject* create(const QString&amp;amp; name,&lt;br /&gt;
                    QObject* parent=0) {&lt;br /&gt;
      MyObject* obj = new MyObject(parent);&lt;br /&gt;
      obj-&amp;gt;setObjectName(name);&lt;br /&gt;
      return obj;&lt;br /&gt;
    }&lt;br /&gt;
    QObject* parent() const { return QObject::parent(); }&lt;br /&gt;
    void setParent(QObject* parent) {&lt;br /&gt;
      QObject::setParent(parent);&lt;br /&gt;
      emit parentChanged(); &lt;br /&gt;
    }&lt;br /&gt;
  signals:&lt;br /&gt;
    void parentChanged();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
extern &amp;quot;C&amp;quot; {&lt;br /&gt;
  KDE_EXPORT QObject* krossmodule() {&lt;br /&gt;
    return new MyObject();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
At the bottom the krossmodule() function will be called by Kross and returns an instance of MyObject that is then exposed to the scripting backend.&lt;br /&gt;
&lt;br /&gt;
Then we just need to have our myobject.h and myobject.cpp files, filled with the content above, defined in the CMakeLists.txt file. The library needs to be named &amp;quot;krossmodule...&amp;quot; where the &amp;quot;...&amp;quot; is then the name the module is accessible as. For our example we use &amp;quot;krossmodulemyobjectmod&amp;quot; and therefore we are able to access the module if installed as &amp;quot;myobjectmod&amp;quot;. The example does not depend on Kross, so you may like to replace ${KROSS_INCLUDES} with whatever else your module depends on.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
include_directories(${CMAKE_SOURCE_DIR}&lt;br /&gt;
  ${KROSS_INCLUDES})&lt;br /&gt;
set(krossmodulemyobjectmod_PART_SRCS&lt;br /&gt;
  myobject.cpp)&lt;br /&gt;
kde4_add_plugin(krossmodulemyobjectmod&lt;br /&gt;
  ${krossmodulemyobjectmod_PART_SRCS})&lt;br /&gt;
target_link_libraries(krossmodulemyobjectmod&lt;br /&gt;
  ${KDE4_KDECORE_LIBS} ${KDE4_KROSSCORE_LIBS})&lt;br /&gt;
install(TARGETS krossmodulemyobjectmod&lt;br /&gt;
  DESTINATION ${PLUGIN_INSTALL_DIR})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Python sample code accesses then the module at runtime and uses the QObject, calls it's slots and properties and connects a signal with a python function (e.g. save as file named &amp;quot;myobjecttest.py&amp;quot; and execute with &amp;quot;kross ./myobjecttest.py&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
#!/usr/bin/env kross&lt;br /&gt;
import Kross&lt;br /&gt;
m = Kross.module(&amp;quot;myobjectmod&amp;quot;)&lt;br /&gt;
m.name = &amp;quot;MyObjectModuleName&amp;quot;&lt;br /&gt;
obj1 = m.create(&amp;quot;OtherObjectName&amp;quot;)&lt;br /&gt;
def myCallbackFunc(args):&lt;br /&gt;
    print &amp;quot;The parent of obj1 changed&amp;quot;&lt;br /&gt;
obj1.connect(&amp;quot;parentChanged()&amp;quot;,myCallbackFunc)&lt;br /&gt;
obj1.setParent(m)&lt;br /&gt;
print &amp;quot;%s %s&amp;quot; % (obj1.name,obj1.parent().name)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Manager, GuiClient, Action==&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/manager.h?view=markup Kross::Manager] class is a singleton that provides access to the interpreters, to actions and to the modules. The Kross::Manager is available within scripting code as module named &amp;quot;Kross&amp;quot;. Following Python script uses the Kross module to create a new Kross::Action instance, fills it with JavaScript code and executes that JavaScript code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
#!/usr/bin/env kross&lt;br /&gt;
import Kross&lt;br /&gt;
a = Kross.action(&amp;quot;MyKjsScript&amp;quot;)&lt;br /&gt;
a.setInterpreter(&amp;quot;javascript&amp;quot;)&lt;br /&gt;
a.setCode(&amp;quot;println(\&amp;quot;Hello world from Kjs\&amp;quot;);&amp;quot;)&lt;br /&gt;
a.trigger()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/guiclient.h?view=markup Kross::GuiClient] class implements KXMLGUIClient to provide GUI functionality, handling of XML configuration files on a more abstract level and offers some predefined actions that could be optionally used in your application.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/action.h?view=markup Kross::Action] class offers an abstract container to deal with scripts like a single standalone scriptfile. Each action holds a reference to the by the matching [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/interpreter.h?view=markup Kross::Interpreter] instance created by [http://websvn.kde.org/trunk/KDE/kdelibs/kross/core/script.h?view=markup Kross::Script] instance. Following Python script accesses the Kross module and the self variable which is our Kross::Action instance that provides the context for the running Python script.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
#!/usr/bin/env kross&lt;br /&gt;
import Kross&lt;br /&gt;
print &amp;quot;objectName=%s&amp;quot; % Kross.objectName()&lt;br /&gt;
print &amp;quot;interpreters=%s&amp;quot; % Kross.interpreters()&lt;br /&gt;
print &amp;quot;objectName=%s&amp;quot; % self.objectName()&lt;br /&gt;
print &amp;quot;text=%s&amp;quot; % self.text&lt;br /&gt;
print &amp;quot;enabled=%s&amp;quot; % self.enabled&lt;br /&gt;
print &amp;quot;currentPath=%s&amp;quot; % self.currentPath()&lt;br /&gt;
print &amp;quot;interpreter=%s&amp;quot; % self.interpreter()&lt;br /&gt;
print &amp;quot;description=%s&amp;quot; % self.description()&lt;br /&gt;
print &amp;quot;code=%s&amp;quot; % self.code()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D-Bus and Kross==&lt;br /&gt;
&lt;br /&gt;
With the [http://doc.trolltech.com/4.2/qtdbus.html QtDBus module] Qt provides a library that a Qt/KDE application is able to use to make Inter-Process Communication using the [http://dbus.freedesktop.org D-BUS protocol].&lt;br /&gt;
&lt;br /&gt;
The QtDBus module uses the Qt Signals and Slots mechanism. Applications that like to provide parts of their functionality to the D-Bus world are able to do so by implementing classes that inherit from the {{qt|QDBusAbstractAdaptor}} class.&lt;br /&gt;
&lt;br /&gt;
Kross is able to reuse such by an application provided bindings. So, once your application supports D-Bus, Kross is able to reuse those already existing code and offers transparent access to the scripting-backends to them. How does this differ from e.g. the python-dbus package? Well, first method-calls don't go through the dbus-socket and then it's not dbus-related at all except, that we are able to reuse what your application offers anyway: a clean interface to the outside world. But that's not all, we are not limited to what's possible with D-Bus. We are also able to exchange instance-pointers to QObject or QWidget instances.&lt;br /&gt;
&lt;br /&gt;
For an example you may like to take a look at how it was done in the KSpread [http://websvn.kde.org/trunk/koffice/kspread/plugins/scripting/ScriptingModule.cpp?view=markup ScriptingModule] class.&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Talk:Projects/Documentation/KDE4</id>
		<title>Talk:Projects/Documentation/KDE4</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Talk:Projects/Documentation/KDE4"/>
				<updated>2007-09-02T23:49:40Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: New page: I wanted do add a link to the style guide. Is this the most recent version? http://l10n.kde.org/docs/styleguide/index.html  ---~~~&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I wanted do add a link to the style guide. Is this the most recent version?&lt;br /&gt;
http://l10n.kde.org/docs/styleguide/index.html&lt;br /&gt;
&lt;br /&gt;
---[[User:Cbs|Cbs]]&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Policies/Application_Lifecycle</id>
		<title>Policies/Application Lifecycle</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Policies/Application_Lifecycle"/>
				<updated>2007-09-01T18:50:25Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: small style changes in the explanation of the review process&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When you want to start a new application (or remove an old application), you want to know where you should place it in the Subversion repository. This document describes where to go in which stage of your application.&lt;br /&gt;
&lt;br /&gt;
See [[#Stage 3: The end]] for instructions on how to deal with old, unmaintained applications.&lt;br /&gt;
&lt;br /&gt;
In a diagram it all comes down to:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:svnguidelines.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Stage 1: The start ===&lt;br /&gt;
The start of a new application can take place on a local disk, in a local repository or any other way. Another option is provided by KDE in the special {{path|/trunk/playground}} folder in the repository where everyone is free to commit ones own application. You can request a SVN account at sysadmin and after that you can import your project in the subfolder of your choice.&lt;br /&gt;
&lt;br /&gt;
It is not meant as a backup area, so you should not develop your application somewhere else and only sync the changes now and then to KDE's repository.&lt;br /&gt;
&lt;br /&gt;
As soon as you start releasing your software and match the criteria for the next stage, you should consider moving your application folder to the next stage. &lt;br /&gt;
&lt;br /&gt;
Because playground is something like an 'experimental' area, there is only a small amount of applications that make it to the next stage. To keep the playground area accessible and a bit organized, we have created a {{path|/tag/unmaintained/N}} (where 'N' is the KDE  major version the application was written for; e.g. 4 for KDE4 applications). If you do not want to continue your application, move it to that place in the repository. If you do not know how, contact the current contactperson which is mentioned at the bottom of this document.&lt;br /&gt;
&lt;br /&gt;
Whenever an application has not received a commit for one complete year, you will be contacted via email to discuss if you want to continue the application or if it has died. In the latter case or when the email bounces, it will be moved to {{path|/tag/unmaintained/N/}}.&lt;br /&gt;
&lt;br /&gt;
This also applies to the currently no longer used /trunk/kdenonbeta area.&lt;br /&gt;
&lt;br /&gt;
=== Stage 2: Stable ===&lt;br /&gt;
When you have made one of more releases and want to continue to develop it, the term 'playground' does no longer apply to you. That is the right time to move out of here. There are two options to move to: extragear and one of the KDE main modules. If you want to move to one of the KDE main modules, you will get released with KDE. That also means you have to respect that release schedule. The fact you want your program in KDE main modules is not enough and others have to agree is valuable to have it. &lt;br /&gt;
In extragear you are on your own. You make the releases whenever you want and you have to talk to the translators about your release schedule. In the future it might be possible to be released together with the KDE main modules. But at this moment this is not possible.&lt;br /&gt;
&lt;br /&gt;
Whatever you choose, there are some rules to follow before you are allowed to move to either location: &lt;br /&gt;
* There should be user documentation in docbook format&lt;br /&gt;
* There should be developers documentation in the form of apidox for libraries you can check this at [http://www.englishbreakfastnetwork.org/ ebn]&lt;br /&gt;
* There should be no krazy code checker issues reported. Again, you can check that at [http://www.englishbreakfastnetwork.org/ ebn]. There is also a [[Development/Tutorials/Code_Checking|tutorial on using Krazy]] available here on TechBase.&lt;br /&gt;
* If possible, there should have been a basic usability review of your application. Usability people are hard to get, so this is not crucial.&lt;br /&gt;
* You should have checked for basic problems with a profiler. I hope we will get a tutorial on how to do this soon&lt;br /&gt;
* Your application should be [[Development/Tutorials/Localization/i18n|completely translatable]]. &lt;br /&gt;
&lt;br /&gt;
When you decide you want to move to this second stage, move your application to {{path|/trunk/kdereview}} and announce the move on '''kde-core-devel@kde.org'''. In the announcement address the above issues and state where you want your application to move to (which KDE main module or extragear). Extragear only requires general approval on kde-core-devel. A main module requires approval from the community who manages that module (e.g. the kdepim module requires approval from the kdepim community).&lt;br /&gt;
&lt;br /&gt;
The move to kdereview starts a two week review period during which the community can object to your proposal or request additional changes. If there are no objections or requested changes after this two week period, you are allowed to move your application to the place you requested. If your intention is to move to a main module you must additionally get approval from the module maintainer(s) who manage that module.&lt;br /&gt;
&lt;br /&gt;
If changes are requested, you can leave your application in kdereview while you are actively working on those issues. If you lack the time to work on the changes, move your application back to playground. Once the requested changes are completed, announce to kde-core-devel that you have completed the requested changes and wait for another week for objections.&lt;br /&gt;
&lt;br /&gt;
Kdereview is only meant as a transitional place from playground to the main modules or extrager. In no case can kdereview be a permanent place to develop your application.&lt;br /&gt;
&lt;br /&gt;
=== Stage 3: The end ===&lt;br /&gt;
Whenever you decide to stop developing the application and that leaves the application without developers, please announce that to kde-core-devel. If nobody stands up to take over maintainership within two weeks, the application has to be moved to the {{path|/trunk/unmaintained/N/}} area as every application in the KDE main modules and in extragear needs to have a maintainer to stay there.&lt;br /&gt;
&lt;br /&gt;
=== Translations ===&lt;br /&gt;
For each move in subversion, the translation files of each language need to move as well. Because this requires a complete checkout of the l10n folder and some knowledge about the structure, you can ask the release-team ('''release-team@kde.org''') to move them. Send a simple mail with the information required to do the move, for example: 'move {{path|/playground/somewhere/someapp}} to {{path|/kdereview/someapp}}'.&lt;br /&gt;
If you want to help out with these kinds of moves, please send a mail! You are welcome to help out.&lt;br /&gt;
&lt;br /&gt;
=== Contact ===&lt;br /&gt;
If you need any help regarding this, please contact Tom Albers ('''tomalbers@kde.nl''')&lt;br /&gt;
&lt;br /&gt;
[[Category:Policies]]&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Talk:Policies/Application_Lifecycle</id>
		<title>Talk:Policies/Application Lifecycle</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Talk:Policies/Application_Lifecycle"/>
				<updated>2007-09-01T18:08:58Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: New page: Does this &amp;quot;There should be developers documentation in the form of apidox for libraries you can check this at ebn&amp;quot; mean that it can only be checked for libraries, i.e. &amp;quot;There should be dev...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Does this &amp;quot;There should be developers documentation in the form of apidox for libraries you can check this at ebn&amp;quot; mean that it can only be checked for libraries, i.e. &amp;quot;There should be developers documentation in the form of apidox . For libraries you can check this at ebn&amp;quot; or that it only applies to libraries, i.e. &amp;quot;For libraries there should be developers documentation in the form of apidox. You can check this at ebn&amp;quot;&lt;br /&gt;
&lt;br /&gt;
---[[User:Cbs|Cbs]]&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Policies/Application_Lifecycle</id>
		<title>Policies/Application Lifecycle</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Policies/Application_Lifecycle"/>
				<updated>2007-09-01T18:04:52Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: /* Stage 2: Stable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When you want to start a new application (or remove an old application), you want to know where you should place it in the Subversion repository. This document describes where to go in which stage of your application.&lt;br /&gt;
&lt;br /&gt;
See [[#Stage 3: The end]] for instructions on how to deal with old, unmaintained applications.&lt;br /&gt;
&lt;br /&gt;
In a diagram it all comes down to:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:svnguidelines.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Stage 1: The start ===&lt;br /&gt;
The start of a new application can take place on a local disk, in a local repository or any other way. Another option is provided by KDE in the special {{path|/trunk/playground}} folder in the repository where everyone is free to commit ones own application. You can request a SVN account at sysadmin and after that you can import your project in the subfolder of your choice.&lt;br /&gt;
&lt;br /&gt;
It is not meant as a backup area, so you should not develop your application somewhere else and only sync the changes now and then to KDE's repository.&lt;br /&gt;
&lt;br /&gt;
As soon as you start releasing your software and match the criteria for the next stage, you should consider moving your application folder to the next stage. &lt;br /&gt;
&lt;br /&gt;
Because playground is something like an 'experimental' area, there is only a small amount of applications that make it to the next stage. To keep the playground area accessible and a bit organized, we have created a {{path|/tag/unmaintained/N}} (where 'N' is the KDE  major version the application was written for; e.g. 4 for KDE4 applications). If you do not want to continue your application, move it to that place in the repository. If you do not know how, contact the current contactperson which is mentioned at the bottom of this document.&lt;br /&gt;
&lt;br /&gt;
Whenever an application has not received a commit for one complete year, you will be contacted via email to discuss if you want to continue the application or if it has died. In the latter case or when the email bounces, it will be moved to {{path|/tag/unmaintained/N/}}.&lt;br /&gt;
&lt;br /&gt;
This also applies to the currently no longer used /trunk/kdenonbeta area.&lt;br /&gt;
&lt;br /&gt;
=== Stage 2: Stable ===&lt;br /&gt;
When you have made one of more releases and want to continue to develop it, the term 'playground' does no longer apply to you. That is the right time to move out of here. There are two options to move to: extragear and one of the KDE main modules. If you want to move to one of the KDE main modules, you will get released with KDE. That also means you have to respect that release schedule. The fact you want your program in KDE main modules is not enough and others have to agree is valuable to have it. &lt;br /&gt;
In extragear you are on your own. You make the releases whenever you want and you have to talk to the translators about your release schedule. In the future it might be possible to be released together with the KDE main modules. But at this moment this is not possible.&lt;br /&gt;
&lt;br /&gt;
Whatever you choose, there are some rules to follow before you are allowed to move to either location: &lt;br /&gt;
* There should be user documentation in docbook format&lt;br /&gt;
* There should be developers documentation in the form of apidox for libraries you can check this at [http://www.englishbreakfastnetwork.org/ ebn]&lt;br /&gt;
* There should be no krazy code checker issues reported. Again, you can check that at [http://www.englishbreakfastnetwork.org/ ebn]. There is also a [[Development/Tutorials/Code_Checking|tutorial on using Krazy]] available here on TechBase.&lt;br /&gt;
* If possible, there should have been a basic usability review of your application. Usability people are hard to get, so this is not crucial.&lt;br /&gt;
* You should have checked for basic problems with a profiler. I hope we will get a tutorial on how to do this soon&lt;br /&gt;
* Your application should be [[Development/Tutorials/Localization/i18n|completely translatable]]. &lt;br /&gt;
&lt;br /&gt;
When you decide you want to move to this second stage, you move your application to {{path|/trunk/kdereview}}. Then you sent an announcement to '''kde-core-devel@kde.org''' that you have done that, address above issues and make clear where you want to move to (which kde main module or extragear). Extragear only requires general approval on kde-core-devel, while going into, for instance, kdepim requires approval from the kdepim community who manage that module.&lt;br /&gt;
&lt;br /&gt;
Then the two weeks review period starts. In those two weeks people can object to your proposal or request additional changes. When there are no objections after the two week period, you are allowed to move your application to the place you decided to go. If your intention is to move to a main module you must get approval from the module maintainer(s) who manage that module.&lt;br /&gt;
&lt;br /&gt;
If there are changes requested, you can make them while in kdereview. But only as long as you are working on those issues. If you decide to let it rest for a month for example, you should move it back to playground. When the requested changes are completed, announce it again to kde-core-devel and wait for one week for objections.&lt;br /&gt;
&lt;br /&gt;
In no case kdereview can be a permanent place to develop your application.&lt;br /&gt;
&lt;br /&gt;
=== Stage 3: The end ===&lt;br /&gt;
Whenever you decide to stop developing the application and that leaves the application without developers, please announce that to kde-core-devel. If nobody stands up to take over maintainership within two weeks, the application has to be moved to the {{path|/trunk/unmaintained/N/}} area as every application in the KDE main modules and in extragear needs to have a maintainer to stay there.&lt;br /&gt;
&lt;br /&gt;
=== Translations ===&lt;br /&gt;
For each move in subversion, the translation files of each language need to move as well. Because this requires a complete checkout of the l10n folder and some knowledge about the structure, you can ask the release-team ('''release-team@kde.org''') to move them. Send a simple mail with the information required to do the move, for example: 'move {{path|/playground/somewhere/someapp}} to {{path|/kdereview/someapp}}'.&lt;br /&gt;
If you want to help out with these kinds of moves, please send a mail! You are welcome to help out.&lt;br /&gt;
&lt;br /&gt;
=== Contact ===&lt;br /&gt;
If you need any help regarding this, please contact Tom Albers ('''tomalbers@kde.nl''')&lt;br /&gt;
&lt;br /&gt;
[[Category:Policies]]&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Plasma</id>
		<title>Projects/Plasma</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Plasma"/>
				<updated>2007-08-29T21:55:15Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: fix page to point to correctly spelled one&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Developer Coordination ==&lt;br /&gt;
;[[/Tasks|Current tasks]]&lt;br /&gt;
;[[/Package|Plasmagik packages]]&lt;br /&gt;
;[[/Theme|Plasma::Theme]]&lt;br /&gt;
;[[/Widgets|Interactive widgets provided by libplasma]]&lt;br /&gt;
;[[/Architecture|Plasma Architecture]]&lt;br /&gt;
;[[/PIG|The P.I.G. (Plasma Interface Guidelines)]]&lt;br /&gt;
;[[/ZUI|The ZUI. (Zooming User Interface)]]&lt;br /&gt;
&lt;br /&gt;
== Plasmoids ==&lt;br /&gt;
;[[/Clock|Clock plasmoid design]]&lt;br /&gt;
;[[/Calendar|Calendar plasmoid design]]&lt;br /&gt;
;[[/TaskMan|Task Manager plasmoid design]]&lt;br /&gt;
&lt;br /&gt;
== Raptor ==&lt;br /&gt;
;[[/Menu|Raptor menu plasmoid design]]&lt;br /&gt;
&lt;br /&gt;
== Meetings ==&lt;br /&gt;
Summaries and logs of scheduled plasma meetings can be found on the following pages:&lt;br /&gt;
;[[/20070207|February 21, 2007]]&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Plasma/Architecture</id>
		<title>Projects/Plasma/Architecture</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Plasma/Architecture"/>
				<updated>2007-08-29T21:54:21Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: Projects/Plasma/Architucture moved to Projects/Plasma/Architecture: fix spelling mistake.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Plasma should be able to have different themes for same data.For example there should be 10 different Clocks, while all of them are showing one thing: Time.&lt;br /&gt;
So Plasma Provides Data Engines. Data Engines will provide Data for Plasmoids.&lt;br /&gt;
&lt;br /&gt;
So to have a Clock Plasmoid:&lt;br /&gt;
&lt;br /&gt;
Plasma --&amp;gt; Time Data Engine&lt;br /&gt;
                                           |---&amp;gt; Clock Plasmoid 1&lt;br /&gt;
                                           |---&amp;gt; Clock Plasmoid 2&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Distribution_Packages</id>
		<title>Getting Started/Distribution Packages</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Distribution_Packages"/>
				<updated>2007-08-20T19:54:00Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: /* Kubuntu */ changed alpha to beta&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Many distributions provide KDE SVN (KDE 4) and Qt packages, so that if you're simply porting your application to KDE4, then you don't have to worry about compiling kdelibs and kdebase frequently in order to keep up-to-date. Here's the information for a few different distributions:&lt;br /&gt;
&lt;br /&gt;
== openSUSE == &lt;br /&gt;
&lt;br /&gt;
openSUSE's KDE team has very regular (every few days) KDE SVN packages built. Currently packages are built for ''all'' things in KDE's branch/. &lt;br /&gt;
&lt;br /&gt;
Instructions:  http://opensuse.org/KDE4&lt;br /&gt;
&lt;br /&gt;
== Arch Linux == &lt;br /&gt;
&lt;br /&gt;
Arch has weekly updates of kdelibs, kdebase, and kdepimlibs.&lt;br /&gt;
&lt;br /&gt;
Instructions:  http://bbs.archlinux.org/viewtopic.php?id=28856&lt;br /&gt;
&lt;br /&gt;
== Kubuntu ==&lt;br /&gt;
&lt;br /&gt;
Kubuntu packages all the development snapshot releases of KDE4, and these are released in different repositories. The latest one is below.&lt;br /&gt;
&lt;br /&gt;
Instructions:  http://kubuntu.org/announcements/kde4-beta1.php&lt;br /&gt;
&lt;br /&gt;
== Gentoo ==&lt;br /&gt;
&lt;br /&gt;
The kde portage overlay has kde-base/kde*-9999.4 SVN monolithic ebuilds.&lt;br /&gt;
&lt;br /&gt;
Instructions:  http://overlays.gentoo.org/proj/kde/wiki&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Plasma/Menu</id>
		<title>Projects/Plasma/Menu</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Plasma/Menu"/>
				<updated>2007-08-20T00:39:36Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: /* Raptor design spec... */ Make 'Coding guidelines' not stretch over line&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Raptor.png|550px]]&lt;br /&gt;
== Current Development ==&lt;br /&gt;
The Demonstration applet for Raptor can be found in KDE SVN (http://websvn.kde.org/trunk/playground/base/kbfx_plasma/). You can run this applet under KDE3 to see few of the features we want to have on Raptor.&lt;br /&gt;
&lt;br /&gt;
== Raptor design spec... ==&lt;br /&gt;
The main goal of Raptor is to deliver a ''unique menu'' for KDE, that is ''easy to use yet also eye-candy and with customisable look and feel''&lt;br /&gt;
&lt;br /&gt;
The Main goal of Raptor Design (technically) is to abstract the source of the data.&lt;br /&gt;
The Data Source is implemented as DataSource Class. The DataSource Class itself is implemented directly in LibPlasma.&lt;br /&gt;
      &lt;br /&gt;
The loading of the Data Source is handled by the Data Engine, which is found as DataEngine Class also in Libplasma... which knows how to handle the Source. Thus it is possible to create and hook in other Plugins as wished, without changing the main Code of Raptor.&lt;br /&gt;
      &lt;br /&gt;
Raptor will load the Plasma DataEngines through an Interface to gain access to the DataSources. By specifying these interface for Raptor, and a plugin handler, others can write their own plugins with datasources and -engines and add it in Raptors configuration. Raptor then tells the plugins to deliver data via the interface (updateData or sthg) and the plugin sends these data in the form that it fits through the interface into it.&lt;br /&gt;
&lt;br /&gt;
'''RaptorMenu Areas'''&lt;br /&gt;
&lt;br /&gt;
There will be 5 basic areas of the Menu: The header, The footer, The categories pane, The elements pane and a shortstart bar. Each of them can&lt;br /&gt;
be configured separately: will they be displayed (available for header, footer, shortstart), where, how many rows it contains (available for shortstart, elements)&lt;br /&gt;
and which of the possible parts and plugins are loaded (does the header display a user logo or not, are there further plugins in the categories bar?, which&lt;br /&gt;
buttons are displayed in the footer, lock, logout, standby, restart?)&lt;br /&gt;
&lt;br /&gt;
'''RaptorMenu Behaviour'''&lt;br /&gt;
&lt;br /&gt;
Since Raptor is a Plasmoid, resizing will be handled automatically.&lt;br /&gt;
      &lt;br /&gt;
The first category/plugin that is opened at the press of the startmenu can be either the one with thomas' AI logic or any of the loaded categories. The proposed AI Logic of Thomas can be found at the end of the spec, as it is kind of a subproject...&lt;br /&gt;
&lt;br /&gt;
Search will be done via Strigi, Tenor  (even beagle is possible with a plugin)  or any other search engine that is configured. The search results will be kept&lt;br /&gt;
in the category &amp;quot;search&amp;quot;, even if another category/plugin is selected, until a new search is started.&lt;br /&gt;
&lt;br /&gt;
Additionally to the scroll solution as it is now, we will provide other options, a kind of vertical adjusting wheel at the right side of the elements pane.&lt;br /&gt;
&lt;br /&gt;
Instead of having some kind of context menu popping up, the right-clicked element / category could just turn around and present the options on the back&lt;br /&gt;
of the graphic of this Element.&lt;br /&gt;
&lt;br /&gt;
Category handling can optionally be done via tagging instead of building a tree. We tag the elements with one to n tags, and it appears as soon as the tag&lt;br /&gt;
is called. This concept is further refined by a rating on the assignment between tag and element, so that OpenOffice.Org Writer can be rated 5 on the tag&lt;br /&gt;
write, but 4 on the tag OpenOffice.Org. We will then use this rating for sorting the elements. Depending how the labels are set, a task oriented start menu can be realized easily. We should predeliver a set of common label schemes.&lt;br /&gt;
&lt;br /&gt;
'''Raptor Searching'''&lt;br /&gt;
&lt;br /&gt;
Until Tenor is ready, Raptor will depend on the Strigi Search Plugin to provide searching capabilities.&lt;br /&gt;
As Strigi and Tenor will evolve and develop further, the searching capabilities of Raptor will also evolve and improve.&lt;br /&gt;
The search engine will provide Raptor with a DataEngine, and each search element abstracts a DataSource, so that the results can be remote or local, inside tar files or in locally mounted remote shares, such as NFS or samba. The Source of the search results does not matter for Raptor.&lt;br /&gt;
&lt;br /&gt;
'''In Short'''&lt;br /&gt;
&lt;br /&gt;
1.) The Menu will have Skin support. The user / artists can make raster (png like) and vector (svg like) themes for Raptor.&lt;br /&gt;
&lt;br /&gt;
2.) The user will be able to blend / change the color of the skin.&lt;br /&gt;
&lt;br /&gt;
3.) The user can also change the layout of the menu elements.&lt;br /&gt;
&lt;br /&gt;
4.) The menu can have fancy effects like Fire and Rain :-)&lt;br /&gt;
&lt;br /&gt;
5.) Configuration should be done in the Plasma-manner....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Coding Guide lines'''&lt;br /&gt;
&lt;br /&gt;
Please read kdebase/workspace/plasma/HACKING for coding guidelines. and Try to follow this so that the plasma code is very clear and clean.&lt;br /&gt;
&lt;br /&gt;
== Raptor AI Engine ==&lt;br /&gt;
Raptor was the most intelligent Dinosaur those days - and it's the duty of our team to make our Plasmic-Raptor intelligent as well. &lt;br /&gt;
&lt;br /&gt;
Most of the Menu ideas came up during the last year provided a &amp;quot;My Favorite&amp;quot; function, whereby the applications were added to it by simple click counts, saved in a ini based data base. The application with the highest click count was the Favorite. &lt;br /&gt;
&lt;br /&gt;
But one big problem with this approach is that we are not collecting data about ''when'' each of the application are executed and ''how'' they are executed. What we found from Celeste Paul's (KDE Usability Expert) work on the Menu system Usability paper was, that Applications are executed more often using the command line on *nix systems, or via other methods like quick launch or desktop shortcuts. Therefore, the methods used for Kmenu will not work for Raptor. &lt;br /&gt;
&lt;br /&gt;
Thomas Lübking  was developing a new approach for this problem during the past year or so with his so called ALI menu concept and a prototype was shipped with his famous Baghira theme. In this section, Thomas envisions a new and unique solution to a prehistoric problem.&lt;br /&gt;
&lt;br /&gt;
Here is the functional description he emailed: &lt;br /&gt;
&lt;br /&gt;
Each entry is attached to a 24 elements vector (or a 2x24 matrix to separate&lt;br /&gt;
week and weekend).&lt;br /&gt;
The vector entries represent the probability of the app to be chosen at the&lt;br /&gt;
current time (whether we scale it to [0,1] or [0,100] or [0,100000] doesn't&lt;br /&gt;
matter at the moment)&lt;br /&gt;
NOTICE that this is NOT the final rank!&lt;br /&gt;
Everytime the user updates the filter string, the apps are matched against&lt;br /&gt;
the filter string (IMPORTANT: one can save a lot of CPU by detecting filter&lt;br /&gt;
refinements and check only the left apps. And presented ordered by their&lt;br /&gt;
rank. (so the most probable app at this time that fits the editline-&amp;gt;text()&lt;br /&gt;
is displayed on top, it will make sense to limit the displayed app amount,&lt;br /&gt;
say 20 or so)&lt;br /&gt;
&lt;br /&gt;
'''Ranking:'''&lt;br /&gt;
&lt;br /&gt;
There will be four conditions checked, concluded in the final rank.&lt;br /&gt;
&lt;br /&gt;
1. Is there allready a RUNNING INSTANCE in most cases you won't open the same app twice via the launcher, e.g. konqueror opens new windows itself etc. - kwrite may be an exception beneath others what will hopefully (depends on the parameters) be catched by.&lt;br /&gt;
&lt;br /&gt;
2. The probability of the app to be running at THIS TIME from the 24v entries.&lt;br /&gt;
&lt;br /&gt;
3. The probability of the app to be run in THIS ENVIRONMENT. This assumes that applications are usually called to work together.&lt;br /&gt;
Examples: i often open kwrite to manipulate scripts or code and in addition a konsole to test them. - if you dial up, you'll have demand for konqueror/kmail after calling kppp, etc.&lt;br /&gt;
Thus the AI will check for each candidate the correlation to other running apps (i.e. does the running time of the candidate cover the running time of the running app.&lt;br /&gt;
&lt;br /&gt;
4. The probability of the app to fit the USER TYPE Simple keyword ranking: as keywords/tags should be attached to app entries (rather than a group entry, to allow multigrouping) we collect infos about what kind of apps the user runs through keyword probabilities (is he a developer, artist, scientist,... and does the candidate have this keyword)&lt;br /&gt;
(We could bring in the keyword ranking here - what is currently NOT supported by the FDO desktop file definition?)&lt;br /&gt;
&lt;br /&gt;
 =&amp;gt;  NOTICE THAT THIS COULD DEMAND A GUIDE ON KEYWORD USAGE!!&lt;br /&gt;
&lt;br /&gt;
'''The running time stats:'''&lt;br /&gt;
&lt;br /&gt;
The resolution will be hours.&lt;br /&gt;
&lt;br /&gt;
- Everytime the user launches an app, its stats get a pushup during its runtime (so if the app runs from 16:00 to 18:00 the 16th and 17th entry will get a full pushup)&lt;br /&gt;
&lt;br /&gt;
- Every new day ALL entries will be faded away (e.g. multiply by 0.9 - similar to the ant algorithm, a constant factor may be a bad idea ;)&lt;br /&gt;
&lt;br /&gt;
- As the data is classified (24h entries instead of seamless or point information) we'll add the pushup to the hour entry relative to it's running&lt;br /&gt;
time in this hour and read out it linearily combined to catch hour breaks&lt;br /&gt;
&lt;br /&gt;
 Example:&lt;br /&gt;
 &lt;br /&gt;
 Assume the app runs from 16:13 to 17:48 and we grant a 10% pushup - i.e.&lt;br /&gt;
 multiply with 1.1 for 1h runtime.&lt;br /&gt;
 We'll grant (60-13)/60*1.1 to the 16th and 48/60*1.1 to the 17th entry.&lt;br /&gt;
 When we wanna know the probability for the app to run around 16:42 will use&lt;br /&gt;
 48/60*p[17] + 12*p[16] (i.e. a linear combination between the hour centers)&lt;br /&gt;
 To clarify the reason: assume you usually run an app at 16:00, thus the&lt;br /&gt;
 pushup goes to the 16th entry but should be taken into account when the app&lt;br /&gt;
 is started on 15:59:59 once (this is an extreme example of course)&lt;br /&gt;
&lt;br /&gt;
 (This is not necessarily complete =)&lt;br /&gt;
&lt;br /&gt;
== Presentation (Technical part) ==&lt;br /&gt;
&lt;br /&gt;
'''RaptorMenu Areas'''&lt;br /&gt;
&lt;br /&gt;
There will be 5 basic areas of the Menu: The header, The footer, The categories pane, The elements pane and a shortstart bar. Each of them can&lt;br /&gt;
be configurated seperately: will they be displayed (available for header, footer, shortstart), where, how many rows it contains (available for shortstart, elements)&lt;br /&gt;
and which of the possible parts and plugins are loaded (does the header display a user logo or not, are there further plugins in the categories bar?, which&lt;br /&gt;
buttons are displayed in the footer, lock, logout, standby, restart?)&lt;br /&gt;
&lt;br /&gt;
This section aims to define the coding of the presentation of the above-mentionned Areas. Here are the first inputs, what it will actually contain:&lt;br /&gt;
&lt;br /&gt;
*A basic Abstract Item ( we already have this in the form of QGSItem, but we need to add some methods of it's own... so we need to inherit from QGSItem and make an abstract class). Lets call it RaptorVizAbstractItem class or some thing like this&lt;br /&gt;
*Each Raptor item derived from this abstract items will be sensitive to input events. it will have support for displaying progress and ranking also and has to take in configuration options for each item: like delete / rename etc... There must also be accessibility options available like zoom level for each item.&lt;br /&gt;
*We will use data structures to store such items ( maybe a link list connecting each of the items, so that item grouping is possible and it's also possible to apply input to the whole group ... We can also try to link multiple groups and stack in one on top of the other ... but this would be manged by a layout manager  so that things are in proper order.  this way we can also support moving a large view around like on kickoff... what we're trying to see is if we can try to move around in 3D... We're not sure yet :-) ... But based on Thomas comments, the AI agent will completely remove the need for a hierarchy in the menu, though we must still provide it as options to users who really want hierarchies.&lt;br /&gt;
*Next...we will also have some special QGSItems for input fields and also for button types.&lt;br /&gt;
*On top off all that we can have a 3rd Effects layer..where we can have some nice FX for those who like to have those. Water and fire are just two such things which would be nice... But it wouldn't be enabled by default... The user may enable it via config, if he wants it.&lt;br /&gt;
== TOM - Task Oriented Menu ==&lt;br /&gt;
&lt;br /&gt;
 What is TOM?&lt;br /&gt;
&lt;br /&gt;
TOM stands for Task Oriented Menu and is a work in progress that will become a&lt;br /&gt;
viable alternative to the current KMenu. Its goals include:&lt;br /&gt;
&lt;br /&gt;
* Be task oriented&lt;br /&gt;
* Be simple and clear to use&lt;br /&gt;
* Create a smaller but usable menu&lt;br /&gt;
* Limited configurability through sensible defaults&lt;br /&gt;
* Have all configuration needs built right into the menu, including:&lt;br /&gt;
* Editor dialogs that can be called up from entries in the menu&lt;br /&gt;
* Context menus accessed by RMB clicking on a task for powerusers&lt;br /&gt;
* Allow locking down of menus through immutable settings&lt;br /&gt;
* Obeys Kicker and KDE Kiosk settings&lt;br /&gt;
* By making the TOM group of kickerrc immutable all config is removed&lt;br /&gt;
* By making a task group's rc file immutable, config options are removed&lt;br /&gt;
* Not require any modifications to the KDE menu system (applnk, etc)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
What is a &amp;quot;Task Oriented Menu&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
A task oriented menu displays it's entries as &amp;quot;things to do&amp;quot; (or tasks) rather&lt;br /&gt;
than simply listing all items that are available. Each of these tasks has an&lt;br /&gt;
application or command associated with it, and this associated command can be&lt;br /&gt;
changed without changing the task name or placement within the menu. The tasks&lt;br /&gt;
are grouped by function and may map to programs, documents or actions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Todo list&lt;br /&gt;
&lt;br /&gt;
Editor dialogs&lt;br /&gt;
Make the Destination entries work (only Run A Command is done)&lt;br /&gt;
Populate and track Recent Applications menu entries&lt;br /&gt;
* Application launching should be caught somewhere in the KDE libs, ala&lt;br /&gt;
Recent Documents&lt;br /&gt;
Writing out of config files to reflect runtime changes (deleted entries, etc)&lt;br /&gt;
* This requires keeping track of the config files used in creating the menu&lt;br /&gt;
KDEDIR merging&lt;br /&gt;
* KDEDIRS are already consulted for taskgroups, but groups of the same name&lt;br /&gt;
should be merged&lt;br /&gt;
Sane merging of menuext entries&lt;br /&gt;
* &amp;quot;Recent&amp;quot; items should go into the recent section&lt;br /&gt;
* Replace TOM's builin recent docs with the menuext version?&lt;br /&gt;
* Create a Recent Applications menuext?&lt;br /&gt;
* Add a way to quickly add/remove menuext items from TOM&lt;br /&gt;
(ala &amp;quot;Modify These Tasks&amp;quot;)&lt;br /&gt;
Check for updates on launch and bring them down/install them if they exist&lt;br /&gt;
* this includes new apps installed on the local box showing up in the menu&lt;br /&gt;
* &amp;quot;Get cool stuff&amp;quot; integration?&lt;br /&gt;
Further refinement of wording / ordering in main menu (a perpetual TODO ;)&lt;br /&gt;
Creation of real-world task groups&lt;br /&gt;
Support plugins which can add arbitrary functionality to the menu&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Debate list&lt;br /&gt;
&lt;br /&gt;
What should be the default task entry format be:&lt;br /&gt;
a) Task Name&lt;br /&gt;
b) Task Name (App Name)&lt;br /&gt;
c) App Name (Task Name) &amp;lt;-- silly option =)&lt;br /&gt;
Should &amp;quot;Run A Command...&amp;quot; be replaced by an inline combobox?&lt;br /&gt;
Pros: It's more obvious and will work even if kdesktop is gone. The widget&lt;br /&gt;
is already written (in tom.cc)&lt;br /&gt;
Cons: It makes it stand out too much over other entries, takes up more room&lt;br /&gt;
and isn't as powerful as the full minicli&lt;br /&gt;
&lt;br /&gt;
---Part above is pasted from a Mail from Aaron Seigo&lt;br /&gt;
&lt;br /&gt;
Design and Architecture&lt;br /&gt;
&lt;br /&gt;
''Basic requirements''&lt;br /&gt;
&lt;br /&gt;
* Config is stored in an XML&lt;br /&gt;
* This XML is saved by the config-sets name&lt;br /&gt;
* This/these XML is/are read and delivered to KBFX via Plugin&lt;br /&gt;
* The plugin should be able to merge multiple XML config setting files&lt;br /&gt;
* KBFX should be able to run multiple TOM plugins&lt;br /&gt;
* It should be possible to use further plugins right in the TOM Plugin -&amp;gt; The reasons are explained later&lt;br /&gt;
&lt;br /&gt;
''Store config as XML''&lt;br /&gt;
&lt;br /&gt;
* Easy to edit&lt;br /&gt;
* Can be extended in a simple way&lt;br /&gt;
* Structured&lt;br /&gt;
* Support for foreign charsets&lt;br /&gt;
&lt;br /&gt;
''Save by the config-set name''&lt;br /&gt;
&lt;br /&gt;
The idea is that one can easily transfer settings and import them to test without having to delete the carefully prepared own configuration.&lt;br /&gt;
&lt;br /&gt;
This/these XML is/are read and delivered to KBFX via Plugin&lt;br /&gt;
&lt;br /&gt;
The normal manner to make sure that changes and improvements can be delivered without actually touching the framework&lt;br /&gt;
&lt;br /&gt;
The plugin should be able to merge multiple XML config setting files during runtime&lt;br /&gt;
&lt;br /&gt;
Imagine a computer used by a group of persons. I explain by means of the following family:&lt;br /&gt;
&lt;br /&gt;
# Father, uses Office-Functionality, uses Graphics and his digicam, the Internet and occasionnaly plays games&lt;br /&gt;
# Mother, uses Office-Functionality, the Internet and occasionaly plays games&lt;br /&gt;
# 17yrs old son, geek and student, uses Office-Functionality, graphics and his digicam, the Internet, plays games, develops, and administers the computer&lt;br /&gt;
# 14yrs old son, student, uses Office functionality, Internet, plays games&lt;br /&gt;
&lt;br /&gt;
They each have their own accounts. They each don't want to see the things they don't use. It would now be possible to have an XML for each of them. But 2 yrs later, the 17 yrs old leaves home, and the younger brother takes over system maintenance. Now he needs these progs. So the older one would have to set up the tom for system maintenance for his younger brother, who doesn't care of developping and gaming.&lt;br /&gt;
&lt;br /&gt;
But if we provide possibility to hook in multiple XMLs per Plugin and merge them during runtime, they could have a baseXML with office and Internet functionality, a graphics XML for Graphics and Digicam, an XML for the games, an XML for developing and an XML for administration.&lt;br /&gt;
&lt;br /&gt;
If a TaskGroup tag exists in multiple of those XMLs, it is only shown once, with the Tasks of all of those XML's. So the taskgroup could be &amp;quot;Write&amp;quot; and have the elements e.g. &amp;quot;a letter&amp;quot; from the office XML and &amp;quot;c++ code&amp;quot; from the developer XML. So redundant TaskGroups can be avoided and place can be saved.&lt;br /&gt;
&lt;br /&gt;
Another scenario could be that a programmer writes a program set and -as enthusiast KBFX user- provides the TOM XML straight with it. No need to reconfigure KBFX TOM for the use with those programs, just hook in the new XML as well.&lt;br /&gt;
&lt;br /&gt;
The Config editor should be able to merge multiple XML config setting fixed.&lt;br /&gt;
&lt;br /&gt;
Now imagine that a user X is absolutely enthusiast of the program set of the above developer. But he has already created (for other programs) a task group name he likes better and also fits this developer's new program set. So he should be able to say &amp;quot;Import into XML&amp;quot;, indicate in which Settings to import, from which file to import. He is then shown a list of all TaskGroups and Tasks of the XML with the import data, having checkboxes where he can select which parts (TaskGroups and/or Tasks) should be imported in the config editor, and subsequently, where in his original XML (for TaskGroups, which order, or as a subtaskgroup, for tasks into which task groups) he wants to import it to.&lt;br /&gt;
&lt;br /&gt;
This makes the whole handling of new elements easier and gives developers the possibility to deliver the settings right with the programs.&lt;br /&gt;
&lt;br /&gt;
KBFX should be able to run multiple TOM plugins.&lt;br /&gt;
&lt;br /&gt;
That's a personal preference that - however - seems important to me. If we take the family from above as an example again. The older son - being a geek - loved tweaking the pc and did a lot of administration. The younger - in this scenario - has taken over the task of system maintenance. He is savvy enough to do it, but being no geek, it's just once in a while he touches the administration. In the example above, the old son had all in the things in the same plugin instance. He used system maintenance often, so it was not disturbing to have that lot of entries in his tom. The younger however, is a different story. As he only seldom does administration, it slows down his access to the things he really needs (by simply existing there) without bringing him advantages. So he unloads the administration XML, adds a new instance of TOM at the bottom of the KBFX Plugins and hooks it in there. He can now use the Tom at the top for his regular work and just once in a while opens tom2 with the administration XML to do system maintenance. It's still around, accessible in KBFX, but not there, where he usually starts the tasks he uses day by day, so without making him scroll longer for his applications.&lt;br /&gt;
&lt;br /&gt;
XML Definition&lt;br /&gt;
&lt;br /&gt;
I am no XML guru at all. I avoid the work to research a valid header definition. Instead I'll just concentrate on the content. The tags I use are (Please note that the text in red is the tags):&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&amp;lt;TOM&amp;gt;&lt;br /&gt;
  &amp;lt;TaskGroup: Browse&amp;gt;&lt;br /&gt;
    &amp;lt;Name&amp;gt;&lt;br /&gt;
      &amp;lt;locale:de&amp;gt;Durchstöbere...&amp;lt;/locale&amp;gt;&lt;br /&gt;
      &amp;lt;locale:en&amp;gt;Browse...&amp;lt;/locale&amp;gt;&lt;br /&gt;
    &amp;lt;/Name&amp;gt;&lt;br /&gt;
    &amp;lt;TaskAction: Internet&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;&lt;br /&gt;
        &amp;lt;locale:de&amp;gt;das Internet (WWW)&amp;lt;/locale&amp;gt;&lt;br /&gt;
        &amp;lt;locale:en&amp;gt;the Internet (WWW)&amp;lt;/locale&amp;gt;&lt;br /&gt;
      &amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Program&amp;gt;/usr/bin/firefox.sh&amp;lt;/Program&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Firefox&amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;Description&amp;gt;&lt;br /&gt;
        &amp;lt;locale:de&amp;gt;Surfen Sie im Internet&amp;lt;/locale&amp;gt;&lt;br /&gt;
        &amp;lt;locale:en&amp;gt;Surf the Web&amp;lt;/locale&amp;gt;&lt;br /&gt;
      &amp;lt;/Description&amp;gt;&lt;br /&gt;
    &amp;lt;/TaskAction&amp;gt;&lt;br /&gt;
    &amp;lt;Plugin: Contact&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;&lt;br /&gt;
        &amp;lt;locale:en&amp;gt;Contact...&amp;lt;/locale&amp;gt;&lt;br /&gt;
        &amp;lt;locale:de&amp;gt;Kontaktiere&amp;lt;/locale&amp;gt;&lt;br /&gt;
      &amp;lt;/Name&amp;gt;&lt;br /&gt;
      &amp;lt;PluginLoad&amp;gt;ContactPlugin&amp;lt;/PluginLoad&amp;gt;&lt;br /&gt;
    &amp;lt;/Plugin&amp;gt;&lt;br /&gt;
  &amp;lt;/TaskGroup&amp;gt;&lt;br /&gt;
&amp;lt;/TOM&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The TaskGroup default attribute is the name used internally, not displayed&lt;br /&gt;
* The locale default attribute is the iso code of the language, and is taken to display the names and descriptions according to the country settings. If no locale tag for the language is found, the language tag without language attribute should be taken - if one exists - or the one with the en attribute. The element itself should probably be in &amp;quot;&amp;quot;&lt;br /&gt;
* The Program tag contains the command line to be executed upon launch&lt;br /&gt;
* Probably, a sort order mechanism should be implemented as well, either with an tag or by means of a rating with tags&lt;br /&gt;
* The XML should be UTF16 for foreign charset support&lt;br /&gt;
&lt;br /&gt;
''Things to be considered''&lt;br /&gt;
&lt;br /&gt;
* One Thing that should be considered is that - as long as the XML's are not delivered by the distributors, it can happen that Programs disappear. The logical solution would be to mark them with white X in a red circle, and if one clicks on it, he is given 3 choices:&lt;br /&gt;
** Search for the file that was linked&lt;br /&gt;
** Delete the entry&lt;br /&gt;
** Assign another Program to that task&lt;br /&gt;
* Personal Setting files should be stored in /home/user/kbfx, and we should provide an export function that copies that file to /usr/share/kbfx somewhere&lt;br /&gt;
* Loading should always have the two paths prepared as proposals for people to find it quickly&lt;br /&gt;
* Having a possibility to enter plugins somewhere in tom would be nice and feasible, I think. Example: Tasks write (tagged , organize (tag , Contact (tagged with the information to hook that in. That could - when a contact plugin exists, listing contacts and possibilities to contact them - then let you contact the matching contact directly.&lt;br /&gt;
* Instead of runtime-merging of multiple XML's, a personal XML could be created during the time you add another XML to the plugin. This - however - should have the origin marked to offer the possibility of sending these modifications back to the origin file.&lt;br /&gt;
* To have a real TOM, we should also include a Plugin (right hooked into tom) importing the todo list of the user's PIM. It would then&lt;br /&gt;
** launch the PIM, and display the task, if it has no attachments &lt;br /&gt;
** Open the attached file, if one file is attached&lt;br /&gt;
** Open a list with the attached files, if multiple files are attached&lt;br /&gt;
** This came to mind as I do actually work with the todo a lot...&lt;br /&gt;
&lt;br /&gt;
== The Raptor Team ==&lt;br /&gt;
&lt;br /&gt;
Note: The team is open to everyone who wants to contribute. Not only developers are welcome, but everyone thinking he/she can contribute (as for example Dracor, who doesn't code at all). So if you want to join, join the panel-dev mailing list and mention that you want to join the RaptorMenu team, as well as what do you think you can/will contribute (is it coding, a special area there, or is it helping to refine the concept?)&lt;br /&gt;
&lt;br /&gt;
'''Plasma Team Lead:'''&lt;br /&gt;
&lt;br /&gt;
Aaron Seigo&lt;br /&gt;
&lt;br /&gt;
'''Raptor Maintainers:'''&lt;br /&gt;
&lt;br /&gt;
Siraj Razick&lt;br /&gt;
&lt;br /&gt;
Thomas Lübking&lt;br /&gt;
&lt;br /&gt;
'''Developers'''&lt;br /&gt;
&lt;br /&gt;
[[User:Phobosk|PhobosK]] (Co-Maintainter and Distribution Management)&lt;br /&gt;
&lt;br /&gt;
Christoffer Brodd-Reijer (PSP integration and Backend development (Author of KPsPManager))&lt;br /&gt;
&lt;br /&gt;
Buddhika &amp;quot;Bud&amp;quot; Siddhisena&lt;br /&gt;
&lt;br /&gt;
Fathi &amp;quot;Fabo&amp;quot; Boudra&lt;br /&gt;
&lt;br /&gt;
Yanis (Usability and Accessibility Development) &lt;br /&gt;
&lt;br /&gt;
'''UI Design and Usability'''&lt;br /&gt;
&lt;br /&gt;
Mensur &amp;quot;Nookie&amp;quot; Zahirovic&lt;br /&gt;
&lt;br /&gt;
'''Documentation, technical docs'''&lt;br /&gt;
&lt;br /&gt;
[[User:Dracor|Nathanael &amp;quot;Dracor&amp;quot; Gogniat]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Advice and Guidance and Development Support'''&lt;br /&gt;
 Stephen Kulow (Kickoff)&lt;br /&gt;
 Vandenoever (Strigi)&lt;br /&gt;
 Raptor Thanks Oxygen-team for the extended support&lt;br /&gt;
&lt;br /&gt;
== Current State of the Project ==&lt;br /&gt;
&lt;br /&gt;
''Keys''&lt;br /&gt;
*In progress = +&lt;br /&gt;
*Complete    = *&lt;br /&gt;
*Not started = -&lt;br /&gt;
&lt;br /&gt;
''Tasks''&lt;br /&gt;
*Design of Menu AI Engine *&lt;br /&gt;
*AI Engine Plugin +&lt;br /&gt;
*Design UI  (Nookie) +         &lt;br /&gt;
*Documentation (Dracor) + &lt;br /&gt;
*Build System +&lt;br /&gt;
&lt;br /&gt;
Progress (5. july 2007)&lt;br /&gt;
&lt;br /&gt;
*Raptor Widget Elements ---------------------60 %&lt;br /&gt;
*Raptor Data Engines ------------------------90 %&lt;br /&gt;
*Raptor Data Sources ------------------------60 %&lt;br /&gt;
*Raptor Plugin Interface ----------------Complete&lt;br /&gt;
*Raptor XML UI component --------------------50 %&lt;br /&gt;
*Raptor Plugin TOM (Task Oriented Menu-------10 %&lt;br /&gt;
*Raptor Apps Plugin --------------------------1 %&lt;br /&gt;
&lt;br /&gt;
''Progress Report Fri Sep 29 2006,''&lt;br /&gt;
&lt;br /&gt;
Things completed: &lt;br /&gt;
*Port of the initial applet code to KDE4 kicker and loading the plasmoid has worked well.&lt;br /&gt;
*Cmake based build system is working and initial folder structures are created and commited to KDE svn trunk/playground/base/raptor/&lt;br /&gt;
*Thomas is working on the AI engine and he has started work and we can expect to see a commit soon on svn&lt;br /&gt;
*Nookie has made some mocks and in the process of completing the mock so that it can be published on the spec&lt;br /&gt;
*Oxygen-team member is making a logo/icon for Raptor and initial contacts were made by fabo &lt;br /&gt;
*The spec was read by Aaron and Vandenoever and waiting comments &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Siraj Razick'''&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Policies/Application_Lifecycle</id>
		<title>Policies/Application Lifecycle</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Policies/Application_Lifecycle"/>
				<updated>2007-08-13T09:55:25Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: /* Stage 1: The start */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When you want to start a new application, you want to know where you should place it in the Subversion repository. This document describes where to go in which stage of your application.&lt;br /&gt;
&lt;br /&gt;
In a diagram it all comes down to:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:svnguidelines.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Stage 1: The start ===&lt;br /&gt;
The start of a new application can take place on a local disk, in a local repository or any other way. Another option is provided by KDE in the special {{path|/trunk/playground}} folder in the repository where everyone is free to commit ones own application. You can request a SVN account at sysadmin and after that you can import your project in the subfolder of your choice.&lt;br /&gt;
&lt;br /&gt;
It is not meant as a backup area, so you should not develop your application somewhere else and only sync the changes now and then to KDE's repository.&lt;br /&gt;
&lt;br /&gt;
As soon as you start releasing your software and match the criteria for the next stage, you should consider moving your application folder to the next stage. &lt;br /&gt;
&lt;br /&gt;
Because playground is something like an 'experimental' area, there is only a small amount of applications that make it to the next stage. To keep the playground area accessible and a bit organized, we have created a {{path|/tag/unmaintained/N}} (where 'N' is the KDE  major version the application was written for; e.g. 4 for KDE4 applications). If you do not want to continue your application, move it to that place in the repository. If you do not know how, contact the current contactperson which is mentioned at the bottom of this document.&lt;br /&gt;
&lt;br /&gt;
Whenever an application has not received a commit for one complete year, you will be contacted via email to discuss if you want to continue the application or if it has died. In the latter case or when the email bounces, it will be moved to {{path|/tag/unmaintained/N/}}.&lt;br /&gt;
&lt;br /&gt;
This also applies to the currently no longer used /trunk/kdenonbeta area.&lt;br /&gt;
&lt;br /&gt;
=== Stage 2: Stable ===&lt;br /&gt;
When you have made one of more releases and want to continue to develop it, the term 'playground' does no longer apply to you. That is the right time to move out of here. There are two options to move to: extragear and one of the KDE main modules. If you want to move to one of the KDE main modules, you will get released with KDE. That also means you have to respect that release schedule. The fact you want your program in KDE main modules is not enough and others have to agree is valuable to have it. &lt;br /&gt;
In extragear you are on your own. You make the releases whenever you want and you have to talk to the translators about your release schedule. In the future it might be possible to be released together with the KDE main modules. But at this moment this is not possible.&lt;br /&gt;
&lt;br /&gt;
Whatever you choose, there are some rules to follow before you are allowed to move to either location: &lt;br /&gt;
* There should be user documentation in the form a docbook&lt;br /&gt;
* There should be developers documentation in the form of apidox for libraries you can check this at [http://www.englishbreakfastnetwork.org/ ebn]&lt;br /&gt;
* There should be no krazy code checker issues reported. Again, you can check that at [http://www.englishbreakfastnetwork.org/ ebn]. There is also a [[Development/Tutorials/Code_Checking|tutorial on using Krazy]] available here on TechBase.&lt;br /&gt;
* If possible, there should have been a basic usability review of your application. Usability people are hard to get, so this is not crucial.&lt;br /&gt;
* You should have checked for basic problems with a profiler. I hope we will get a tutorial on how to do this soon&lt;br /&gt;
* Your application should be [[Development/Tutorials/Localization/i18n|completely translatable]]. &lt;br /&gt;
&lt;br /&gt;
When you decide you want to move to this second stage, you move your application to {{path|/trunk/kdereview}}. Then you sent an announcement to '''kde-core-devel@kde.org''' that you have done that, address above issues and make clear where you want to move to (which kde main module or extragear). Extragear only requires general approval on kde-core-devel, while going into, for instance, kdepim requires approval from the kdepim community who manage that module.&lt;br /&gt;
&lt;br /&gt;
Then the two weeks review period starts. In those two weeks people can object to your proposal or request additional changes. When there are no objections after the two week period, you are allowed to move your application to the place you decided to go. If your intention is to move to a main module you must get approval from the module maintainer(s) who manage that module.&lt;br /&gt;
&lt;br /&gt;
If there are changes requested, you can make them while in kdereview. But only as long as you are working on those issues. If you decide to let it rest for a month for example, you should move it back to playground. When the requested changes are completed, announce it again to kde-core-devel and wait for one week for objections.&lt;br /&gt;
&lt;br /&gt;
In no case kdereview can be a permanent place to develop your application.&lt;br /&gt;
&lt;br /&gt;
=== Stage 3: The end ===&lt;br /&gt;
Whenever you decide to stop developing the application and that leaves the application without developers, please announce that to kde-core-devel. If nobody stands up to take over maintainership within two weeks, the application has to be moved to the {{path|/trunk/unmaintained/N/}} area as every application in the KDE main modules and in extragear needs to have a maintainer to stay there.&lt;br /&gt;
&lt;br /&gt;
=== Translations ===&lt;br /&gt;
For each move in subversion, the translation files of each language need to move as well. Because this requires a complete checkout of the l10n folder and some knowledge about the structure, you can ask the release-team ('''release-team@kde.org''') to move them. Send a simple mail with the information required to do the move, for example: 'move {{path|/playground/somewhere/someapp}} to {{path|/kdereview/someapp}}'.&lt;br /&gt;
If you want to help out with these kinds of moves, please send a mail! You are welcome to help out.&lt;br /&gt;
&lt;br /&gt;
=== Contact ===&lt;br /&gt;
If you need any help regarding this, please contact Tom Albers ('''tomalbers@kde.nl''')&lt;br /&gt;
&lt;br /&gt;
[[Category:Policies]]&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Plasma/PIG</id>
		<title>Projects/Plasma/PIG</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Plasma/PIG"/>
				<updated>2007-07-28T20:34:05Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: /* Category Names */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What These Guidelines (Will) Cover ==&lt;br /&gt;
&lt;br /&gt;
This document is a place to collect all the &amp;quot;do&amp;quot;s, &amp;quot;don't&amp;quot;s and &amp;quot;how to&amp;quot;s for interface elements in Plasma, particularly applets and plasmoids.&lt;br /&gt;
&lt;br /&gt;
== Category Names ==&lt;br /&gt;
&lt;br /&gt;
The following are acceptable known entries for plasmoids and applets. If your applet does not fall within one of the following categories, leave the category field empty (it will be automatically categories under &amp;quot;Miscellaneous&amp;quot; for the time being) and contact the Plasma development team to have a suitable category added to the list (at which point you may then use that category).&lt;br /&gt;
&lt;br /&gt;
*'''Date and Time''' clocks, calendars, scheduling, etc&lt;br /&gt;
*'''Environment &amp;amp; Weather''' add-ons that display information regarding the weather or other environmentally related data&lt;br /&gt;
*'''Examples''' samples that are not meant for production systems&lt;br /&gt;
*'''File System''' anything that operates on files or the file system as it's primary purpose, such as file watchers or directory listings. Simply using a file as storage does not qualify the add-on for this category.&lt;br /&gt;
*'''Graphics''' for add-ons where displaying images, photos or graphical eye candy is the primary purpose&lt;br /&gt;
*'''Language''' add-ons whose primary purpose is language related, such as dictionaries and translators.&lt;br /&gt;
*'''Mapping''' geography and geographic data add-ons&lt;br /&gt;
*'''Online Services''' add-ons that provide an interface to online services such as social networking or blogging sites. If there is another more appropriate category for the add-on given the topic (e.g. mapping if the applet's purpose is to show maps), even if the data is retrieved from the Internet prefer that other category over this one.&lt;br /&gt;
*'''System Information''' display and interaction with information about the computer such as network activity, hardware health, memory usage, etc&lt;br /&gt;
*'''Windows and Tasks''' managers for application windows and/or tasks, such as taskbars&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Questions from a futur plasmoid programmer. I find those categories ambiguous. For instance:&lt;br /&gt;
&lt;br /&gt;
* Where would go &amp;quot;Disc Usage&amp;quot; applet go? File System? It's listing mount-points and how much free space is left on each... Or &amp;quot;System Information&amp;quot;?&lt;br /&gt;
* Where goes an applet that display the cover art and music information of the currently playing track in Amarok? Or any media-center related plasmoid. I propose to add a category &amp;quot;Multimedia&amp;quot;.&lt;br /&gt;
* Where would go a &amp;quot;Live Road Traffic&amp;quot; plasmoid: &amp;quot;Environment &amp;amp; Weather&amp;quot;, or &amp;quot;mapping&amp;quot;? Environment is quite vague&lt;br /&gt;
* Shouldn't &amp;quot;Date and Time&amp;quot; be renamed &amp;quot;Date &amp;amp; Time&amp;quot;, and &amp;quot;Windows and Tasks&amp;quot; &amp;quot;Windows &amp;amp; Tasks&amp;quot;, to keep consistency?&lt;br /&gt;
&lt;br /&gt;
== Theming ==&lt;br /&gt;
&lt;br /&gt;
== Animation ==&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
== Status Notifications ==&lt;br /&gt;
&lt;br /&gt;
== Packaging Conventions ==&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Cbs</id>
		<title>User:Cbs</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Cbs"/>
				<updated>2007-06-23T22:47:42Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User_talk:Cbs</id>
		<title>User talk:Cbs</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User_talk:Cbs"/>
				<updated>2007-06-23T22:47:07Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Discussion? ==&lt;br /&gt;
&lt;br /&gt;
Sorry, but I don't feel TechBase the ideal place where start such discussions, neither to be used as personal log for those kinds of stuff.&lt;br /&gt;
This is a '''developer''' wiki, with developer and ISVs informations. -- [[user:Pino|pino]] 00:30, 24 June 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
I understand and I have not the slightest intention to leave it here. I wanted to start it at wiki.kde.org (which is down). I was not aware that my user page would be subject to any interest at all. I just wanted a wiki page to test the markup. I am sorry if I was out of line.&lt;br /&gt;
--[[User:Cbs|Cbs]] 00:47, 24 June 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Cbs</id>
		<title>User:Cbs</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Cbs"/>
				<updated>2007-06-23T22:41:01Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Putting this here while I search for a better space. Also wiki.kde.org is down with a database crash.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= The Porting discussion =&lt;br /&gt;
A blog post by Nikolaj Hald Nielsen [http://amarok.kde.org/blog/archives/429-Amarok-2-on-windows-A-rant.html about Amarok 2 on windows] sparked replies from [http://aseigo.blogspot.com/2007/06/hoping-and-wishing.html Aaron Seigo], [http://digested.blogspot.com/2007/06/buy-high-sell-low.html Derek] [http://digested.blogspot.com/2007/06/compromises.html Kite] and [http://chehrlic.blogspot.com/2007/06/funny-discussion.html Christian Ehrlicher] as well as a lot of people commenting on these articles. In fact, this topic has had great response in 2004, when Aaron Seigo asked [http://aseigo.blogspot.com/2004/12/how-to-kill-open-source-on-desktop.html &amp;quot;how to kill the open source on the desktop?&amp;quot;] and received roughly 170 comments. This page tries to present an overview of the arguments as well as an outlook on challenges and possible strategies. I will also post all the open questions that came to my mind. Enjoy&lt;br /&gt;
&lt;br /&gt;
Disclaimer: Not all of these arguments reflect my personal opinion, nor do I claim that they are right. I merely try to collect the more reasonable ones. Feel free to add missing ones. I personally think that if it is not too much effort to port KDE applications, it will happen anyways and is not necessarily a bad thing. Just so you know.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+Summary of Arguments&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Arguments in Favour / Hopes'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Arguments against / Fears'''&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|'''Migration issues'''&lt;br /&gt;
|-&lt;br /&gt;
|KDE applications on Windows make switching to Linux easier. In fact, they allow Windows users to make baby steps on their way to Linux adoption, switching one application at a time. For a lot of people, this makes switching '''possible''' because once they have migrated to the applications, they can start thinking about migrating the OS.&lt;br /&gt;
|While switching is '''possible''' it also becomes '''uneccessary''' because windows now runs both the Linux apps '''as well as the Windows apps.''' In fact, we are increasing the value of Windows for no good reason, since Microsoft is not friendly towards Open Source.&lt;br /&gt;
|-&lt;br /&gt;
|If people have a good reason to stay on Windows, like 3rd party applications or hardware support, chances are that they would not have come over to Linux full time anyways. At least they now have '''an open source alternative''' if they have to stay on Windows.&lt;br /&gt;
By bringing KDE to Windows, we can make it painless to move to linux with tools such as [http://developer.kde.org/summerofcode/kamion.html Kamion] since we now where all the data is saved. The importance is that we let the '''users decide''' when to switch (i.e. when they feel that Linux is ready.&lt;br /&gt;
|If switching is painless, people might '''switch back''', e.g. to get around dual booting. For windows users there is '''no incentive any more''' and some people prefer windows for hardware compatibility and games.&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|'''User/Developer base'''&lt;br /&gt;
|-&lt;br /&gt;
|We have to opportunity to '''reach more users''' because it is easier to make people try out a KDE application if it runs on windows. A greater user base will help us '''find more bugs'''.&lt;br /&gt;
|KDE/Linux does not stand to gain if Windows only bugs are found (there are bound to be a number of them). Also windows users are not (yet) familiar with reporting bugs, since it hardly exists for commercial software, additionally the tools required for effective bug reporting (compiler/debugger) are harder to install on windows. The increased user base will thus be of '''little benefit'''.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Cbs</id>
		<title>User:Cbs</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Cbs"/>
				<updated>2007-06-23T22:38:17Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: /* The Porting discussion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Putting this here while I search for a better space. Also wiki.kde.org is down with a database crash.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= The Porting discussion =&lt;br /&gt;
A blog post by Nikolaj Hald Nielsen [http://amarok.kde.org/blog/archives/429-Amarok-2-on-windows-A-rant.html about Amarok 2 on windows] sparked replies from [http://aseigo.blogspot.com/2007/06/hoping-and-wishing.html Aaron Seigo], [http://digested.blogspot.com/2007/06/buy-high-sell-low.html Derek] [http://digested.blogspot.com/2007/06/compromises.html Kite] and [http://chehrlic.blogspot.com/2007/06/funny-discussion.html Christian Ehrlicher] as well as a lot of people commenting on these articles. In fact, this topic has had great response in 2004, when Aaron Seigo asked [http://aseigo.blogspot.com/2004/12/how-to-kill-open-source-on-desktop.html &amp;quot;how to kill the open source on the desktop?&amp;quot;] and received roughly 170 comments. This page tries to present an overview of the arguments as well as an outlook on challenges and possible strategies. I will also post all the open questions that came to my mind. Enjoy&lt;br /&gt;
&lt;br /&gt;
Disclaimer: Not all of these arguments reflect my personal opinion, nor do I claim that they are right. I merely try to collect the more reasonable ones. Feel free to add missing ones. I personally think that if it is not too much effort to port KDE applications, it will happen anyways and is not necessarily a bad thing. Just so you know.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+Summary of Arguments&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Arguments in Favour / Hopes'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Arguments against / Fears'''&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|'''Migration issues'''&lt;br /&gt;
|-&lt;br /&gt;
|KDE applications on Windows make switching to Linux easier. In fact, they allow Windows users to make baby steps on their way to Linux adoption, switching one application at a time. For a lot of people, this makes switching '''possible''' because once they have migrated to the applications, they can start thinking about migrating the OS.&lt;br /&gt;
|While switching is '''possible''' it also becomes '''uneccessary''' because windows now runs both the Linux apps '''as well as the Windows apps.''' In fact, we are increasing the value of Windows for no good reason, since Microsoft is not friendly towards Open Source.&lt;br /&gt;
|-&lt;br /&gt;
|If people have a good reason to stay on Windows, like 3rd party applications or hardware support, chances are that they would not have come over to Linux full time anyways.&lt;br /&gt;
By bringing KDE to windows, we can make it painless to move to linux with tools such as [http://developer.kde.org/summerofcode/kamion.html Kamion] since we now where all the data is saved. The importance is that we let the '''users decide''' when to switch (i.e. when they feel that Linux is ready.&lt;br /&gt;
|If switching is painless, people might '''switch back''', e.g. to get around dual booting. For windows users there is '''no incentive any more''' and some people prefer windows for hardware compatibility and games.&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|'''User/Developer base'''&lt;br /&gt;
|-&lt;br /&gt;
|We have to opportunity to '''reach more users''' because it is easier to make people try out a KDE application if it runs on windows. A greater user base will help us '''find more bugs'''.&lt;br /&gt;
|KDE/Linux does not stand to gain if Windows only bugs are found (there are bound to be a number of them). Also windows users are not (yet) familiar with reporting bugs, since it hardly exists for commercial software, additionally the tools required for effective bug reporting (compiler/debugger) are harder to install on windows. The increased user base will thus be of '''little benefit'''.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Cbs</id>
		<title>User:Cbs</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Cbs"/>
				<updated>2007-06-23T21:54:15Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: Start the discussion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Putting this here while I search for a better space. Also wiki.kde.org is down with a database crash.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= The Porting discussion =&lt;br /&gt;
A blog post by Nikolaj Hald Nielsen [http://amarok.kde.org/blog/archives/429-Amarok-2-on-windows-A-rant.html about Amarok 2 on windows] sparked replies from [http://aseigo.blogspot.com/2007/06/hoping-and-wishing.html Aaron Seigo], [http://digested.blogspot.com/2007/06/buy-high-sell-low.html Derek] [http://digested.blogspot.com/2007/06/compromises.html Kite] and [http://chehrlic.blogspot.com/2007/06/funny-discussion.html Christian Ehrlicher] as well as a lot of people commenting on these articles. In fact, this topic has had great response in 2004, when Aaron Seigo asked [http://aseigo.blogspot.com/2004/12/how-to-kill-open-source-on-desktop.html &amp;quot;how to kill the open source on the desktop?&amp;quot;] and received roughly 170 comments. This page tries to present an overview of the arguments as well as an outlook on challenges and possible strategies. I will also post all the open questions that came to my mind. Enjoy.&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Schedules/KDE4/4.0_Module_Status</id>
		<title>Schedules/KDE4/4.0 Module Status</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Schedules/KDE4/4.0_Module_Status"/>
				<updated>2007-06-12T20:31:43Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: /* kdegraphics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is used by the KDE4 Release Team to keep track of the current state of the KDE4 release process.&lt;br /&gt;
&lt;br /&gt;
== Moving / Removing Applications ==&lt;br /&gt;
&lt;br /&gt;
Here is a quick checklist for moving or removing an application:&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
Documentation for each application is kept in the {{path|doc/}} folder in the top level of the module. Be sure to move or remove the associated documentation when you move or remove an application.&lt;br /&gt;
&lt;br /&gt;
=== i18n ===&lt;br /&gt;
When moving or removing applications from a module, be sure to move or remove the relevant pot files for the application in the {{path|/trunk/l10n-kde4/templates/messages}}&lt;br /&gt;
and {{path|/trunk/l10n-kde4/templates/docmessages}} folders. Then make sure you add entries to {{path|/trunk/l10n-kde4/scripts/process_orphans.txt}} that note what was done.&lt;br /&gt;
&lt;br /&gt;
There is no need to checkout everything from l10n-kde4, just the {{path|templates}} and {{path|scripts}} folders.&lt;br /&gt;
&lt;br /&gt;
=== Build System ===&lt;br /&gt;
&lt;br /&gt;
Remember to edit all the relevant CMakeLists.txt files in both the origin and destination modules when moving an application.&lt;br /&gt;
&lt;br /&gt;
== Module Status ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Module !! Description !! Release&amp;amp;nbsp;Maintainer !! Status&lt;br /&gt;
|-&lt;br /&gt;
| [http://websvn.kde.org/trunk/KDE/kdelibs kdelibs] || KDE foundational libraries || ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://websvn.kde.org/trunk/KDE/kdepimlibs kdepimlibs] || KDE personal information libraries || [mailto:winter@kde.org Allen Winter] ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://websvn.kde.org/trunk/KDE/kdebase kdebase] || Runtime, workspace and essential apps || ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://websvn.kde.org/trunk/KDE/kdeaccessibility kdeaccessibility] || Accessibility applications || [mailto:gunnar@schmi-dt.de Gunnar Schmi Dt] ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://websvn.kde.org/trunk/KDE/kdeartwork kdeartwork] || Additional icons, styles, etc. || ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://websvn.kde.org/trunk/KDE/kdeadmin kdeadmin] || Tools for system administration || ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://websvn.kde.org/trunk/KDE/kdeedu kdeedu] || Applications with educational content ||[mailto:annma@kde.org Anne-Marie Mahfouf] || Most applications ported&lt;br /&gt;
|-&lt;br /&gt;
| [http://websvn.kde.org/trunk/KDE/kdegames kdegames] || Entertainment || [mailto:johann.ollivierlapeyre@gmail.com Johann Ollivier-Lapeyre] ||100% compile, unmaintained and too-low quality games removed.&lt;br /&gt;
|-&lt;br /&gt;
| [http://websvn.kde.org/trunk/KDE/kdegraphics kdegraphics] || Graphics viewing and editing || ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://websvn.kde.org/trunk/KDE/kdemultimedia kdemultimedia] || Audio and video applications || ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://websvn.kde.org/trunk/KDE/kdenetwork kdenetwork] || Network-centric apps (IM, remote desktop, etc) || [mailto:uwolfer@kde.org Urs Wolfer] || not fully ported, needs lots of work&lt;br /&gt;
|-&lt;br /&gt;
| [http://websvn.kde.org/trunk/KDE/kdepim kdepim] || Groupware || [mailto:winter@kde.org Allen Winter] || not fully ported, needs lots of work&lt;br /&gt;
|-&lt;br /&gt;
| [http://websvn.kde.org/trunk/KDE/kdesdk kdesdk] || Tools for software development || ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://websvn.kde.org/trunk/KDE/kdetoys kdetoys] || Fun distractions || ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://websvn.kde.org/trunk/KDE/kdeutils kdeutils] || Miscellaneous utilities || ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://websvn.kde.org/trunk/KDE/kdevelop kdevelop] || IDE || [mailto:mattr@kde.org Matt Rogers] || Ported. In development.&lt;br /&gt;
|-&lt;br /&gt;
| [http://websvn.kde.org/trunk/KDE/kdewebdev kdewebdev] || Web development tool suite || [mailto:amantia@kde.org Andras Mantia]|| Partly ported, needs lot of work.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Pending Application Issues ==&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color: lightgreen;&amp;quot;&amp;gt;'''Green'''&amp;lt;/span&amp;gt;: discussed and approved&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color: #ffc642;&amp;quot;&amp;gt;'''Orange'''&amp;lt;/span&amp;gt;: discussed, but pending on or blocked by other issues&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color: #ff4242;&amp;quot;&amp;gt;'''Red'''&amp;lt;/span&amp;gt;: no progress made at this point&lt;br /&gt;
&lt;br /&gt;
=== kdeedu ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Application !! Request !! Request&amp;amp;nbsp;By !! App&amp;amp;nbsp;Contact !! Status&lt;br /&gt;
|-  style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| Marble || Move into module after being ported to KDE || Torsten Rahn || Torsten Rahn || Move completed&lt;br /&gt;
|-  style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| KAlgebra || Move into module after being ported to KDE || Aleix Pol || Aleix Pol || Move completed&lt;br /&gt;
|-  style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| KLatin || Move to blackhole || kdeedu devels || unmaintained || Black hole&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== kdegames ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Application !! Request !! Request&amp;amp;nbsp;By !! App&amp;amp;nbsp;Contact !! Status&lt;br /&gt;
|-  style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| KSquares || Move into module || Matt Williams || Matt Williams || Move Complete&lt;br /&gt;
|-  style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| Kiriki || Move into module || Albert Astals Cid || Albert Astals Cid || Move Complete&lt;br /&gt;
|-  style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| atlantik / atlantikdesigner || Remove from module || KDE Games Team || KDE Games Team || Move Complete&lt;br /&gt;
|-  style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| kfouleggs || Remove from module || KDE Games Team || KDE Games Team || Move Complete&lt;br /&gt;
|-  style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| klickety || Remove from module || KDE Games Team || KDE Games Team || Move Complete&lt;br /&gt;
|-  style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| kpoker || Remove from module || KDE Games Team || KDE Games Team || Move Complete&lt;br /&gt;
|-  style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| kenolaba || Remove from module || KDE Games Team || KDE Games Team || Move Complete&lt;br /&gt;
|-  style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| kasteroids || Remove from module || KDE Games Team || KDE Games Team || Move Complete&lt;br /&gt;
|-  style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| ksnake || Remove from module || KDE Games Team || KDE Games Team || Move Complete&lt;br /&gt;
|-  style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| ksokoban || Remove from module || KDE Games Team || KDE Games Team || Move Complete&lt;br /&gt;
|-  style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| kjumpingcube || Remove from module || KDE Games Team || KDE Games Team || Move Complete&lt;br /&gt;
|-  style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| ktron || Remove from module || KDE Games Team || KDE Games Team || Move Complete&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== kdegraphics ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Application !! Request !! Request By !! App Contact !! Status&lt;br /&gt;
|- style=&amp;quot;background-color: #ffc642;&amp;quot;&lt;br /&gt;
| KGhostview || Move to extragear pending GS support in Okular (currently WIP) || Aaron&amp;amp;nbsp;Seigo || Luís-Pedro&amp;amp;nbsp;Coelho || Pending&lt;br /&gt;
|- style=&amp;quot;background-color: #ffc642;&amp;quot;&lt;br /&gt;
| KFax || Move to extragear pending G3/G4 raw TIFF file supoprt in Okular || Aaron Seigo || || Pending&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== kdenetwork ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Application !! Request !! Request By !! App Contact !! Status&lt;br /&gt;
|-  style=&amp;quot;background-color: #ff4242&amp;quot;&lt;br /&gt;
| KNewsTicker || Determine if still needed with Plasma || Urs Wolfer || Frerich Raabe || TBD&lt;br /&gt;
|-  style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| KWiFiManager || Remove. Solid based solution, NetworkManager from kdebase || Urs&amp;amp;nbsp;Wolfer || Stefan&amp;amp;nbsp;Winter || Done&lt;br /&gt;
|-  style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| KDict || Remove. || Urs&amp;amp;nbsp;Wolfer || - || Done&lt;br /&gt;
|- style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| KGet|| Move back to module from branch || KGet Team || [mailto:kget@kde.org KGet Team] || Done&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== kdepim ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Application !! Request !! Request By !! App Contact !! Status&lt;br /&gt;
|- style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| Kabcclient || Move into module || Kevin&amp;amp;nbsp;Krammer || Kevin&amp;amp;nbsp;Krammer || Approved and ported. Needs a handbook, apidox, and cleanup&lt;br /&gt;
|- style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| kmobiletools || Move into module || Marco&amp;amp;nbsp;Gulino || Marco&amp;amp;nbsp;Gulino || Move complete.&lt;br /&gt;
|- style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| kpilot || Resurrect || Adriaan&amp;amp;nbsp;de&amp;amp;nbsp;Groot || Adriaan&amp;amp;nbsp;de&amp;amp;nbsp;Groot || Move complete.&lt;br /&gt;
|- style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| kandy || Remove from module || PIM team || PIM team || Approved and removed.&lt;br /&gt;
|- style=&amp;quot;background-color: lightgreen;&amp;quot;&lt;br /&gt;
| kmobile || Remove from module || PIM team || PIM team || Approved and removed.&lt;br /&gt;
|- style=&amp;quot;background-color: orange;&amp;quot;&lt;br /&gt;
| khalkhi || Move into module || Friedrich&amp;amp;nbsp;Kossebau || Friedrich&amp;amp;nbsp;Kossebau || Approved. Port incomplete. 4.1?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== kdesdk ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Application !! Request !! Request&amp;amp;nbsp;By !! App&amp;amp;nbsp;Contact !! Status&lt;br /&gt;
|-  style=&amp;quot;background-color: #ffc642;&amp;quot;&lt;br /&gt;
| Kaider || Move into module, replace KBabel ||colspan=2 align=center| Nick&amp;amp;nbsp;Shaforostoff || In playground&lt;br /&gt;
|- style=&amp;quot;background-color: #ffc642;&amp;quot;&lt;br /&gt;
| KBabel || Remove ||colspan=2 align=center|Nick Shaforostoff || Pending Kaider&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/SuperKaramba</id>
		<title>Development/Tutorials/SuperKaramba</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/SuperKaramba"/>
				<updated>2007-04-25T09:24:29Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: /* TkInter with Python */, style change in beginning paragraph to emphasize that pyqt is better&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==SuperKaramba==&lt;br /&gt;
&lt;br /&gt;
===Intro===&lt;br /&gt;
&lt;br /&gt;
[http://netdragon.sourceforge.net SuperKaramba] is a tool that allows one to easily create functionality enhancement modules on a [http://www.kde.org KDE desktop]. Such modules are interactive programs written in [http://www.python.org Python] or [http://www.ruby-lang.org/ Ruby] that are usually embedded directly into the background and do not disturb the normal view of the desktop.&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
&lt;br /&gt;
* [http://netdragon.sourceforge.net Homepage]&lt;br /&gt;
* [http://netdragon.sourceforge.net/sinfo.html Basic Tutorial for Theme Creators]&lt;br /&gt;
* [http://netdragon.sourceforge.net/api.html API-Reference]&lt;br /&gt;
* [http://websvn.kde.org/trunk/KDE/kdeutils/superkaramba/examples/ Examples]&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
===A clock sample with Ruby and Python===&lt;br /&gt;
&lt;br /&gt;
Let's take a look at one of them, the &lt;br /&gt;
[http://websvn.kde.org/trunk/KDE/kdeutils/superkaramba/examples/rubyclock/clock.rb?view=markup clock.rb]&lt;br /&gt;
theme written in Ruby. The theme just displays the current time in a RichText widget.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require 'karamba'&lt;br /&gt;
&lt;br /&gt;
def initWidget(widget)&lt;br /&gt;
    Karamba.resizeWidget(widget, 300, 120)&lt;br /&gt;
    @richtext = Karamba.createRichText(widget, Time.now.to_s)&lt;br /&gt;
    Karamba.moveRichText(widget, @richtext, 10, 10)&lt;br /&gt;
    Karamba.setRichTextWidth(widget, @richtext, 280)&lt;br /&gt;
    Karamba.redrawWidget(widget)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
def widgetUpdated(widget)&lt;br /&gt;
    Karamba.changeRichText(widget, @richtext, Time.now.to_s)&lt;br /&gt;
    Karamba.redrawWidget(widget)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The initWidget method will be called once if the widget got initialized. Here we setup the RichText widget where we display the current time in. The widgetUpdated will be called each second once (the interval is defined in the [http://websvn.kde.org/trunk/KDE/kdeutils/superkaramba/examples/rubyclock/clock.theme?view=markup clock.theme] themefile) and just updates the text display in the RichText widget with the new time.&lt;br /&gt;
&lt;br /&gt;
Let's take a look at another theme. The [http://websvn.kde.org/trunk/KDE/kdeutils/superkaramba/examples/text/text.py?view=markup text.py] theme written in Python just displays some text widgets. We take this is example to create our own script, that does the same as the [http://websvn.kde.org/trunk/KDE/kdeutils/superkaramba/examples/rubyclock/clock.rb?view=markup clock.rb] above, that is to display the current time within a text widget.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import karamba, time&lt;br /&gt;
&lt;br /&gt;
text = None&lt;br /&gt;
&lt;br /&gt;
def initWidget(widget):&lt;br /&gt;
    text = karamba.createText(widget, 0, 20, 200, 20, &amp;quot;Text meter&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def widgetUpdated(widget):&lt;br /&gt;
    t = time.strftime(&amp;quot;%Y-%M-%d %H:%M.%S&amp;quot;)&lt;br /&gt;
    karamba.changeText(widget, text, t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the initWidget method we create our text widget that is updated once per second (or per interval as defined in the matching theme file) at the widgetUpdated method to display the new current time.&lt;br /&gt;
&lt;br /&gt;
more infos at...&lt;br /&gt;
* [http://www.kde-look.org/index.php?xcontentmode=38 Themes]&lt;br /&gt;
* [http://www.biodesign.com.ar/blog/?cat=2 More Themes]&lt;br /&gt;
&lt;br /&gt;
===Forms and Modules===&lt;br /&gt;
&lt;br /&gt;
Modules are libraries loaded on demand provided by Kross. One of them is the [http://websvn.kde.org/trunk/KDE/kdelibs/kross/modules/form.h?view=markup forms] module that implements some basic dialog and widget functionality. To display just a simple messagebox or load widgets from a UI-file those module can be used within all supported scripting languages.&lt;br /&gt;
&lt;br /&gt;
The following sample Python script demonstrates how to display a messagebox.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import karamba&lt;br /&gt;
&lt;br /&gt;
def widgetClicked(widget, x, y, button):&lt;br /&gt;
    import Kross&lt;br /&gt;
    forms = Kross.module(&amp;quot;forms&amp;quot;)&lt;br /&gt;
    if button == 1: #left&lt;br /&gt;
        forms.showMessageBox(&amp;quot;Information&amp;quot;,&lt;br /&gt;
            &amp;quot;The Caption&amp;quot;,&amp;quot;The Message&amp;quot;)&lt;br /&gt;
    elif button == 2: #middle&lt;br /&gt;
        forms.showMessageBox(&amp;quot;Error&amp;quot;,&lt;br /&gt;
            &amp;quot;The Caption&amp;quot;,&amp;quot;The Message&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While the next sample Python script displays a dialog with an embedded &amp;quot;Open File&amp;quot; widget.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import karamba&lt;br /&gt;
&lt;br /&gt;
def widgetClicked(widget, x, y, button):&lt;br /&gt;
    import Kross&lt;br /&gt;
    forms = Kross.module(&amp;quot;forms&amp;quot;)&lt;br /&gt;
    dialog = forms.createDialog(&amp;quot;MyDialog&amp;quot;)&lt;br /&gt;
    dialog.setButtons(&amp;quot;Ok|Cancel&amp;quot;)&lt;br /&gt;
    openpage = dialog.addPage(&lt;br /&gt;
        &amp;quot;Open&amp;quot;,&amp;quot;Open File&amp;quot;,&amp;quot;fileopen&amp;quot;)&lt;br /&gt;
    openwidget = forms.createFileWidget(&lt;br /&gt;
        openpage, &amp;quot;kfiledialog:///openfile&amp;quot;)&lt;br /&gt;
    openwidget.setMode(&amp;quot;Opening&amp;quot;)&lt;br /&gt;
    openwidget.setFilter(&lt;br /&gt;
        &amp;quot;*.txt|Text Files\n*|All Files&amp;quot;)&lt;br /&gt;
    result = dialog.exec_loop()&lt;br /&gt;
    if result:&lt;br /&gt;
        print openwidget.selectedFile()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Connect with KSpread===&lt;br /&gt;
&lt;br /&gt;
The following sample uses KSpread to read a OpenDocument spreadsheet file and to display it within a table.&lt;br /&gt;
&lt;br /&gt;
For this we are loading the [[Development/Tutorials/KSpread_Scripting|KSpread Scripting]] library and control it. Compared to dbus we don't need a running KSpread instance but just load and use the library direct (so, you still need to have KSpread installed).&lt;br /&gt;
&lt;br /&gt;
While the sample is written in Python, the other supported backends like Ruby are able to access the whole same rich API.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import karamba&lt;br /&gt;
&lt;br /&gt;
# The OpenDocument spreadsheet file to read.&lt;br /&gt;
filename = &amp;quot;/home/kde4/kspreaddocument.ods&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#this is called when your widget is initialized&lt;br /&gt;
def initWidget(widget):&lt;br /&gt;
    # Import Kross and fetch the KSpread module.&lt;br /&gt;
    import Kross&lt;br /&gt;
    kspread = Kross.module(&amp;quot;kspread&amp;quot;)&lt;br /&gt;
    if not kspread:&lt;br /&gt;
        raise &amp;quot;KSpread is not installed&amp;quot;&lt;br /&gt;
    # Try to open the file.&lt;br /&gt;
    if not kspread.openUrl(filename):&lt;br /&gt;
        raise &amp;quot;Failed to open %s&amp;quot; % filename&lt;br /&gt;
    # Get the sheet we like to display.&lt;br /&gt;
    sheet = kspread.sheetByName( kspread.sheetNames()[0] )&lt;br /&gt;
    text = &amp;quot;&amp;lt;table&amp;gt;\n&amp;quot;&lt;br /&gt;
    # Iterate now through all cells on the sheet.&lt;br /&gt;
    for row in range(1, sheet.lastRow() + 1):&lt;br /&gt;
        # Put the content of the row into the record-list.&lt;br /&gt;
        record = []&lt;br /&gt;
        for col in range(sheet.lastColumn() + 1, 1, -1):&lt;br /&gt;
            value = sheet.text(col, row)&lt;br /&gt;
            if value or len(record) &amp;gt; 0:&lt;br /&gt;
                record.insert(0,value)&lt;br /&gt;
        # If the record has at least one cell print it.&lt;br /&gt;
        if len(record) &amp;gt; 0:&lt;br /&gt;
            text += &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;&lt;br /&gt;
            for r in record:&lt;br /&gt;
                text += &amp;quot;&amp;lt;td&amp;gt;%s&amp;lt;/td&amp;gt;&amp;quot; % r&lt;br /&gt;
            text += &amp;quot;&amp;lt;/tr&amp;gt;\n&amp;quot;&lt;br /&gt;
    text += &amp;quot;&amp;lt;/table&amp;gt;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Create the richtext widget to display the text.&lt;br /&gt;
    richtext = karamba.createRichText(widget, text)&lt;br /&gt;
    karamba.moveRichText(widget, richtext, 10, 10)&lt;br /&gt;
    karamba.setRichTextWidth(widget, richtext, 345)&lt;br /&gt;
    karamba.redrawWidget(widget)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
more infos at...&lt;br /&gt;
* [[Development/Tutorials/KWord_Scripting|KWord Scripting]]&lt;br /&gt;
* [[Development/Tutorials/KSpread_Scripting|KSpread Scripting]]&lt;br /&gt;
* [[Development/Tutorials/Krita_Scripting|Krita Scripting]]&lt;br /&gt;
&lt;br /&gt;
===TkInter with Python===&lt;br /&gt;
&lt;br /&gt;
While you are able to use [http://www.riverbankcomputing.co.uk/pyqt/ PyQt4] which not only does look nicer but also provides the nice Qt-API pythonized, you are also able to use the default toolkit Python comes with, that is TkInter.&lt;br /&gt;
&lt;br /&gt;
The following sample just displays a TkInter &amp;quot;hello world&amp;quot; dialog if you click on the widget.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import karamba&lt;br /&gt;
&lt;br /&gt;
def widgetClicked(widget, x, y, button):&lt;br /&gt;
    from Tkinter import *&lt;br /&gt;
    root = Tk()&lt;br /&gt;
    w = Label(root, text=&amp;quot;Hello, world!&amp;quot;)&lt;br /&gt;
    w.pack()&lt;br /&gt;
    root.mainloop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
more infos at...&lt;br /&gt;
* [http://docs.python.org/lib/module-Tkinter.html Tkinter, Python interface to Tcl/Tk]&lt;br /&gt;
* [http://wiki.python.org/moin/TkInter Python Tkinter]&lt;br /&gt;
* [http://www.pythonware.com/library/tkinter/introduction/ An Introduction to Tkinter]&lt;br /&gt;
&lt;br /&gt;
===QtRuby/Korundum with Ruby===&lt;br /&gt;
&lt;br /&gt;
The following sample script written in Ruby demonstrates that you are able to use [http://rubyforge.org/projects/korundum/ QtRuby/Korundum] within your Ruby scripts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require 'karamba'&lt;br /&gt;
require 'Qt'&lt;br /&gt;
&lt;br /&gt;
class Dialog &amp;lt; Qt::Dialog&lt;br /&gt;
    def initialize&lt;br /&gt;
        super()&lt;br /&gt;
        self.windowTitle = 'Hello World'&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
def widgetClicked(widget, x, y, button)&lt;br /&gt;
    dialog = Dialog.new&lt;br /&gt;
    dialog.exec&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The script does implement only the widgetClicked function that got called if the user clicks on the widget. What we do within that function is to create an instance of the Dialog class that implements a QDialog using QtRuby and then execute that modal dialog.&lt;br /&gt;
&lt;br /&gt;
more infos at...&lt;br /&gt;
* [[Development/Tutorials/Qt4_Ruby_Tutorial|Qt4 Ruby Tutorial]]&lt;br /&gt;
* [[Development/Languages/Ruby|Ruby Development Languages]]&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Getting_Started/Sources/Subversion</id>
		<title>Getting Started/Sources/Subversion</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Getting_Started/Sources/Subversion"/>
				<updated>2007-04-03T22:44:12Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: make the sentence read a bit better&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TutorialBrowser|&lt;br /&gt;
&lt;br /&gt;
series=Getting Started|&lt;br /&gt;
&lt;br /&gt;
name=Using Subversion With KDE|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
&lt;br /&gt;
This is a quick KDE-specific introduction for using subversion to access files and software in KDE's repositories. For comprehensive coverage of Subversion we recommend reading the book&lt;br /&gt;
&amp;quot;[http://svnbook.red-bean.com/ Version Control with Subversion]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
&lt;br /&gt;
In order to use the KDE Subversion repository, you will need two things:&lt;br /&gt;
&lt;br /&gt;
# A Subversion client program&lt;br /&gt;
# An account in our repository&lt;br /&gt;
&lt;br /&gt;
Note: For anonymous read-only access use protocol &amp;quot;svn&amp;quot;, no &amp;quot;yourname@&amp;quot; and server &amp;quot;anonsvn.kde.org&amp;quot; instead below.&lt;br /&gt;
&lt;br /&gt;
'''Installing Subversion:''' instructions on installing the client are not&lt;br /&gt;
presented here. Refer to your system installation instructions to find out how&lt;br /&gt;
you can install Subversion. You will need version 1.1 at least. If you are&lt;br /&gt;
compiling from sources and want to access the KDE repository by https&lt;br /&gt;
(and not by svn+ssh), you will need SSL and ZLIB supports,&lt;br /&gt;
so you will need the &amp;lt;tt&amp;gt;--with-ssl --with-zlib&amp;lt;/tt&amp;gt; options.&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can install one of the many graphical clients out there.&lt;br /&gt;
This tutorial is intended for people using the &amp;lt;tt&amp;gt;svn&amp;lt;/tt&amp;gt; program only, referring&lt;br /&gt;
to tasks accomplished with the usual &amp;lt;tt&amp;gt;cvs&amp;lt;/tt&amp;gt; program.&lt;br /&gt;
&lt;br /&gt;
'''Getting an account:''' if you had a CVS&lt;br /&gt;
account before, it has been migrated to the new Subversion client. If&lt;br /&gt;
you didn't, refer to the [[Contribute/Get_a_SVN_Account|corresponding tutorial]] how to get one.&lt;br /&gt;
&lt;br /&gt;
Note: if you have lost your CVS password, there are simple ways to retrieve&lt;br /&gt;
it. Use [http://ktown.kde.org/~coolo/cvspwd.c cvspwd.c] or&lt;br /&gt;
[http://kdab.net/~dfaure/cvs-unscramble cvs-unscramble] (Perl).&lt;br /&gt;
&lt;br /&gt;
== The KDE repository structure ==&lt;br /&gt;
&lt;br /&gt;
 svn.kde.org/home/kde&lt;br /&gt;
&lt;br /&gt;
That's the address of the KDE Subversion repository. The repository is served by&lt;br /&gt;
HTTPS or SVN+SSH protocol, which means your password is secure against third-party&lt;br /&gt;
eavesdropping.&lt;br /&gt;
&lt;br /&gt;
The SSL certificate md5 fingerprint for the repositories:&lt;br /&gt;
 F6BF EDE2 D016 D1B2   4F18 742E 2C8F B7EF&lt;br /&gt;
&lt;br /&gt;
The SSL certificate sha1 fingerprint for the repositories:&lt;br /&gt;
 e1:e6:41:96:3c:eb:ae:78:e2:73:0d:a2:32:2f:6b:21:13:bf:3d:0f&lt;br /&gt;
&lt;br /&gt;
For people using svn+ssh, here's the fingerprint of the server's RSA key:&lt;br /&gt;
 86:f3:66:06:20:74:81:d0:1b:b4:2f:25:03:f7:8e:fb&lt;br /&gt;
&lt;br /&gt;
The repository is organised in main directories:&lt;br /&gt;
&lt;br /&gt;
# /branches&lt;br /&gt;
# /tags&lt;br /&gt;
# /trunk&lt;br /&gt;
&lt;br /&gt;
You can explore the repository structure at [http://websvn.kde.org/ http://websvn.kde.org/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The top-level directory /trunk ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;/trunk&amp;lt;/tt&amp;gt;&lt;br /&gt;
top-level subdirectory is where the main development for KDE occurs.&lt;br /&gt;
What you will find here is what will become the next KDE release, and&lt;br /&gt;
its associated programs. Here you will also find the &amp;lt;tt&amp;gt;www&amp;lt;/tt&amp;gt; module,&lt;br /&gt;
which contains webpages for KDE's site and related ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;/trunk&amp;lt;/tt&amp;gt; is further subdivided into these sub-directories:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tt&amp;gt;KDE/&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;KDE itself, what will become the next public release. It contains the following modules:&lt;br /&gt;
**'''arts''' - Soundserver (removed in KDE 4)&lt;br /&gt;
**'''kde-common''' - Common admin/ directory&lt;br /&gt;
**'''kdelibs''' - KDE basic libraries, used by all KDE programs&lt;br /&gt;
**'''kdebase''' - KDE base programs, like the KDE Control Center, Kicker (the panel) and Konqueror (the web browser)&lt;br /&gt;
**'''kdeaccessibility''' - Accessibility files&lt;br /&gt;
**'''kdeaddons''' - Add-ons and plug-ins to KDE programs&lt;br /&gt;
**'''kdeadmin''' - KDE Administration applications&lt;br /&gt;
**'''kdeartwork''' - Images, themes, sounds and other art files&lt;br /&gt;
**'''kdebindings''' - Bindings for languages other than C++&lt;br /&gt;
**'''kdeedu''' - KDE Educational applications&lt;br /&gt;
**'''kdegames''' - KDE Games&lt;br /&gt;
**'''kdegraphics''' - KDE Graphical applications&lt;br /&gt;
**'''kdemultimedia''' - KDE Multimedia applications&lt;br /&gt;
**'''kdenetwork''' - KDE Networking applications&lt;br /&gt;
**'''kdepim''' - KDE Personal Information Management applications&lt;br /&gt;
**'''kdesdk''' - KDE Software Development Kit applications&lt;br /&gt;
**'''kdetoys''' - KDE toy applications&lt;br /&gt;
**'''kdevelop''' - The KDevelop program&lt;br /&gt;
**'''kdeutils''' - KDE General utilities&lt;br /&gt;
**'''kdewebdev''' - KDE Web development applications&lt;br /&gt;
*&amp;lt;tt&amp;gt;bugs/&amp;lt;/tt&amp;gt;&lt;br /&gt;
:[http://bugs.kde.org/ Bugzilla] files&lt;br /&gt;
*&amp;lt;tt&amp;gt;developer.kde.org/&amp;lt;/tt&amp;gt;&lt;br /&gt;
:The content of developer.kde.org&lt;br /&gt;
*&amp;lt;tt&amp;gt;extragear/&amp;lt;/tt&amp;gt;&lt;br /&gt;
:KDE programs outside the main KDE releases.&lt;br /&gt;
*&amp;lt;tt&amp;gt;kdereview/&amp;lt;/tt&amp;gt;&lt;br /&gt;
:Temporary home for KDE applications that are believed to have reached release-quality. From here, once all major issues are resolved, applications are moved either to &amp;lt;tt&amp;gt;/trunk/KDE/&amp;lt;/tt&amp;gt; or to &amp;lt;tt&amp;gt;/trunk/extragear/&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;kdesupport/&amp;lt;/tt&amp;gt;&lt;br /&gt;
:Supporting applications and libraries for KDE&lt;br /&gt;
*&amp;lt;tt&amp;gt;koffice/&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;The KDE Office suite, containing the programs:&lt;br /&gt;
**'''karbon'''&lt;br /&gt;
**'''kchart'''&lt;br /&gt;
**'''kexi'''&lt;br /&gt;
**'''kformula'''&lt;br /&gt;
**'''kivio'''&lt;br /&gt;
**'''koshell'''&lt;br /&gt;
**'''kplato'''&lt;br /&gt;
**'''kpresenter'''&lt;br /&gt;
**'''krita'''&lt;br /&gt;
**'''kspread'''&lt;br /&gt;
**'''kugar'''&lt;br /&gt;
**'''kword'''&lt;br /&gt;
*&amp;lt;tt&amp;gt;konstruct/&amp;lt;/tt&amp;gt;&lt;br /&gt;
:Konstruct, the KDE build program&lt;br /&gt;
*&amp;lt;tt&amp;gt;l10n/&amp;lt;/tt&amp;gt;&lt;br /&gt;
:Translations&lt;br /&gt;
*&amp;lt;tt&amp;gt;playground/&amp;lt;/tt&amp;gt;&lt;br /&gt;
:The KDE playground: applications being developed, but not having yet reached release-quality.&lt;br /&gt;
*&amp;lt;tt&amp;gt;qt-copy/&amp;lt;/tt&amp;gt;&lt;br /&gt;
:The convenience copy of [http://www.trolltech.com/ Trolltech's] Qt library, which KDE is based upon.&lt;br /&gt;
*&amp;lt;tt&amp;gt;tests/&amp;lt;/tt&amp;gt;&lt;br /&gt;
:khtml, KOffice and ksvg testcases&lt;br /&gt;
*&amp;lt;tt&amp;gt;valgrind/&amp;lt;/tt&amp;gt;&lt;br /&gt;
:The Valgrind application, which is hosted on the KDE repository, but that is not part of KDE itself.  Note that newer versions of Valgrind are developed on their own repository.  The KDE Valgrind modules only holds up to Valgrind 2.4.&lt;br /&gt;
*&amp;lt;tt&amp;gt;www/&amp;lt;/tt&amp;gt;&lt;br /&gt;
:Webpages for the KDE site (and related sites). Write access to this directory is restricted.&lt;br /&gt;
&lt;br /&gt;
=== The top-level directory &amp;lt;tt&amp;gt;/tags&amp;lt;/tt&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This&lt;br /&gt;
directory contains the official releases of the programs maintained and&lt;br /&gt;
developed in the KDE repository. Each individual application has a&lt;br /&gt;
subdirectory here. Inside it, you will find the release numbers.&lt;br /&gt;
&lt;br /&gt;
For instance, the KDE 3.4.0 code can be found under &amp;lt;tt&amp;gt;/tags/KDE/3.4.0/&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== The top-level directory &amp;lt;tt&amp;gt;/branches&amp;lt;/tt&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This directory contains the branch versions of the applications after a major release.&lt;br /&gt;
&lt;br /&gt;
Most&lt;br /&gt;
KDE applications adhere to the philosphy that new features (as well as&lt;br /&gt;
new user-visible strings) are added only to the next release cycle &amp;amp;#8212;&lt;br /&gt;
the one that lives in &amp;lt;tt&amp;gt;/trunk/&amp;lt;/tt&amp;gt;. However, bugfixes are applied to all&lt;br /&gt;
applications, even after release.&lt;br /&gt;
&lt;br /&gt;
In&lt;br /&gt;
order to do that, a branch is created at the moment of the release,&lt;br /&gt;
indicating the state of the files at that time. Bugfixes are then&lt;br /&gt;
checked in to those files. Those branches are the ones in &amp;lt;tt&amp;gt;/branches/&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For instance, the KDE 3.4.x branch can be found under &amp;lt;tt&amp;gt;/branches/KDE/3.4/&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The subdirectories you will find inside &amp;lt;tt&amp;gt;/branches&amp;lt;/tt&amp;gt; are the&lt;br /&gt;
application subdirs, like &amp;lt;tt&amp;gt;akregator/&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;amarok/&amp;lt;/tt&amp;gt;,&lt;br /&gt;
&amp;lt;tt&amp;gt;arts/&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;k3b/&amp;lt;/tt&amp;gt;, etc. You will also find a &amp;lt;tt&amp;gt;KDE/&amp;lt;/tt&amp;gt;&lt;br /&gt;
subdir, containing the official KDE releases since time immemorial.&lt;br /&gt;
&lt;br /&gt;
One special subdir is found in &amp;lt;tt&amp;gt;/branches&amp;lt;/tt&amp;gt;: &amp;lt;tt&amp;gt;work/&amp;lt;/tt&amp;gt;. This&lt;br /&gt;
subdir contains the so-called &amp;quot;work branches&amp;quot;, that is, branches containing&lt;br /&gt;
features being worked on, sometimes highly experimental. Multi-application&lt;br /&gt;
work branches always are checked in to &amp;lt;tt&amp;gt;/branches/work/&amp;lt;/tt&amp;gt;, but&lt;br /&gt;
single-application branches may be found in each application's subdir. That&lt;br /&gt;
is a decision left to the developers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Checking out and updating ==&lt;br /&gt;
&lt;br /&gt;
=== Checking out ===&lt;br /&gt;
In order to check out something with Subversion, you use the &amp;lt;tt&amp;gt;checkout&amp;lt;/tt&amp;gt; subcommand.&lt;br /&gt;
&lt;br /&gt;
'''WARNING:''' If you checkout trunk/KDE/ or branches/KDE/foo/ you will download complete kde-i18n!&lt;br /&gt;
&lt;br /&gt;
Suppose you wanted to check out only KDevelop from the KDE repository. You would do:&lt;br /&gt;
&lt;br /&gt;
CVS command:&lt;br /&gt;
 cvs -d :pserver:yourname@cvs.kde.org:/home/kde login&lt;br /&gt;
 cvs -d :pserver:yourname@cvs.kde.org:/home/kde checkout kdevelop&lt;br /&gt;
&lt;br /&gt;
Subversion command:&lt;br /&gt;
&lt;br /&gt;
CVS users currently using ssh access, should use protocol svn+ssh,&lt;br /&gt;
CVS users currently using password access, should use protocol https&lt;br /&gt;
in the following.&lt;br /&gt;
&lt;br /&gt;
 svn checkout &amp;amp;lt;protocol&amp;amp;gt;://&amp;amp;lt;username&amp;amp;gt;@svn.kde.org/home/kde/trunk/KDE/kdevelop&lt;br /&gt;
&lt;br /&gt;
=== Updating ===&lt;br /&gt;
&lt;br /&gt;
In order to update, you use the &amp;lt;tt&amp;gt;update&amp;lt;/tt&amp;gt; subcommand.&lt;br /&gt;
&lt;br /&gt;
This is no different from CVS: you change into your checked out copy and issue a &amp;lt;tt&amp;gt;svn update&amp;lt;/tt&amp;gt; (or, shorter, &amp;lt;tt&amp;gt;svn up&amp;lt;/tt&amp;gt;) command.&lt;br /&gt;
&lt;br /&gt;
== Knowing the status of a file ==&lt;br /&gt;
&lt;br /&gt;
To know which local files you had modified, in CVS most people did&lt;br /&gt;
 cvs up&lt;br /&gt;
and looked at the files with '''M''', this does not work with svn so you have to do&lt;br /&gt;
 svn status&lt;br /&gt;
to know the status of the files.&lt;br /&gt;
&lt;br /&gt;
== Committing to the repository ==&lt;br /&gt;
&lt;br /&gt;
Just like in CVS, committing to the Subversion repository is accomplished&lt;br /&gt;
with the &amp;lt;tt&amp;gt;commit&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;checkin&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;ci&amp;lt;/tt&amp;gt; for short) subcommands.&lt;br /&gt;
&lt;br /&gt;
CVS command:&lt;br /&gt;
 cvs commit&lt;br /&gt;
 # or&lt;br /&gt;
 cvs ci&lt;br /&gt;
 # or&lt;br /&gt;
 cvs ci filename.cpp&lt;br /&gt;
&lt;br /&gt;
Subversion command:&lt;br /&gt;
 svn commit&lt;br /&gt;
 # or&lt;br /&gt;
 svn ci&lt;br /&gt;
 # or&lt;br /&gt;
 svn ci filename.cpp&lt;br /&gt;
&lt;br /&gt;
This way, &amp;lt;tt&amp;gt;svn&amp;lt;/tt&amp;gt; will launch the editor specified in &amp;lt;tt&amp;gt;$SVN_EDITOR&amp;lt;/tt&amp;gt; for you&lt;br /&gt;
to compose the commit message. If you prefer, you can give &amp;lt;tt&amp;gt;svn&amp;lt;/tt&amp;gt; the -m&lt;br /&gt;
oprtion with your full message:&lt;br /&gt;
&lt;br /&gt;
 svn ci -m &amp;quot;Updating protocol to conform to HTTP/1.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Ignoring files ==&lt;br /&gt;
&lt;br /&gt;
Subversion stores ignored files per directory. To edit the ignored&lt;br /&gt;
files of the directory you are currently in, do&lt;br /&gt;
  svn propedit svn:ignore .&lt;br /&gt;
that will launch your editor, write there the names of the files you want to&lt;br /&gt;
ignore, one file per line. Once you are done, do a commit so the ignored list&lt;br /&gt;
file gets updated on the server.&lt;br /&gt;
&lt;br /&gt;
A lot of files were ignored in CVS with help from global ignore list which&lt;br /&gt;
is not supported yet by SVN. You can wait for svn 1.3 or you need to add the&lt;br /&gt;
ignore list to the [miscellany] group in your {{path|~/.subversion/config}} (all in&lt;br /&gt;
one line):&lt;br /&gt;
&lt;br /&gt;
 global-ignores = *.o *.lo *.la .*.rej *.rej .*~ *~ .#* #*# .DS_Store *.moc&lt;br /&gt;
 *.moc.cc *.moc.cpp config.log config.status config.cache *.gmo .deps .libs&lt;br /&gt;
 SunWS_cache *.lo *.la *.rpo *.la.closure *_la_closure.cpp *_la_closure.cc&lt;br /&gt;
 *_la_closure.cxx *.all_cc.cc *.all_cpp.cpp *.all_C.C *.all_cxx.cxx&lt;br /&gt;
 *_meta_unload.cc *_meta_unload.h *_meta_unload.cpp *_meta_unload.C&lt;br /&gt;
 *_meta_unload.cxx index.cache.bz2 .memdump Makefile.rules.in Makefile.calls.in&lt;br /&gt;
 Makefile.rules Makefile.calls autom4te.cache *.kidl&lt;br /&gt;
&lt;br /&gt;
== Working with multiple revisions and branches ==&lt;br /&gt;
&lt;br /&gt;
Unlike CVS, Subversion doesn't generate a revision number for each file&lt;br /&gt;
modified. Instead, the full repository is versioned, as a whole. This way, a&lt;br /&gt;
given revision number represents the state the repository was on a given date.&lt;br /&gt;
In other words, a revision number is like a timestamp (in fact, the Subversion&lt;br /&gt;
server uses this fact to search for dates in the repository faster).&lt;br /&gt;
&lt;br /&gt;
So, for instance, when you check out the KDE repository, Subversion will&lt;br /&gt;
tell you the following:&lt;br /&gt;
&lt;br /&gt;
 Updated to revision 403821.&lt;br /&gt;
&lt;br /&gt;
This means that the latest revision available at the time of the operation&lt;br /&gt;
was 403821. If you make a modification and commit, Subversion will update the&lt;br /&gt;
server-side revision and will inform you of it. Like CVS, only the committed&lt;br /&gt;
files will be updated: you will need run &amp;lt;tt&amp;gt;cvs up&amp;lt;/tt&amp;gt; to update the rest of the&lt;br /&gt;
files.&lt;br /&gt;
&lt;br /&gt;
If you want to retrieve a specific revision of a file, you can use the &amp;lt;tt&amp;gt;-r&amp;lt;/tt&amp;gt;&lt;br /&gt;
switch. Besides the revision number itself, -r accepts a number of other&lt;br /&gt;
possibilities:&lt;br /&gt;
  &lt;br /&gt;
* The revision number: for example, use -r 403819 to retrieve that version&lt;br /&gt;
* '''BASE''': the revision you updated to&lt;br /&gt;
* '''COMMITTED''': the revision a file was last modified, before BASE&lt;br /&gt;
* '''PREV''': the revision of the previous commit to the file before COMMITTED&lt;br /&gt;
* '''HEAD''': the most recent revision available in the server&lt;br /&gt;
* '''{ date }''': between curly brackets, you can specify a date for searching the closest revisions&lt;br /&gt;
&lt;br /&gt;
The following illustrates the evolution of the keywords:&lt;br /&gt;
&lt;br /&gt;
# You run &amp;lt;tt&amp;gt;svn up&amp;lt;/tt&amp;gt; to update to the latest available revision. Suppose Subversion tells you it updated to revision 403821. This means that HEAD and BASE are 403821.&lt;br /&gt;
# You modify file README and commit it. Suppose Subversion tells you it committed revision 403822. This means HEAD, BASE and COMMITTED are 403822.&lt;br /&gt;
# You modify the file again and commit it. Now PREV is 403822, but HEAD, BASE and COMMITTED are updated to a new value (suppose it's 403823).&lt;br /&gt;
# Now someone else modifies the repository, and you update your working copy. If Subversion tells you it updated to 403824, this means now HEAD and BASE are moved to 403824 (but PREV and COMMITTED stay the same)&lt;br /&gt;
# If someone modifies the README file now, HEAD is moved. The other keywords stay the same for you, until you update. At this time, we will have HEAD = 403825 (the latest available revision), BASE = 403824 (the revision you last updated to), COMMITTED = 403823 (the revision of the latest change to the file when you last updated) and PREV = 403822 (the revision of the change before COMMITTED)&lt;br /&gt;
&lt;br /&gt;
Those keywords are useful to retrieve logs and diffs for commits to the&lt;br /&gt;
repository.&lt;br /&gt;
&lt;br /&gt;
If you want to see the difference between your working copy and BASE, you&lt;br /&gt;
can run:&lt;br /&gt;
&lt;br /&gt;
 svn diff&lt;br /&gt;
&lt;br /&gt;
This is a very fast operation, since Subversion keeps a local copy of BASE.&lt;br /&gt;
It doesn't need a network connection to accomplish this operation.&lt;br /&gt;
&lt;br /&gt;
If you want to see the difference between your local copy and the latest&lt;br /&gt;
available on the server, you will run:&lt;br /&gt;
&lt;br /&gt;
 svn diff -r HEAD&lt;br /&gt;
&lt;br /&gt;
If you want to see what has changed in the repository since you've last updated, you can use:&lt;br /&gt;
 svn diff -r BASE:HEAD&lt;br /&gt;
&lt;br /&gt;
If you want to see the last change to a file before BASE, you can use:&lt;br /&gt;
 svn diff -r PREV:BASE&lt;br /&gt;
 # or&lt;br /&gt;
 svn diff -r PREV:COMMITTED&lt;br /&gt;
&lt;br /&gt;
That is also valid for the &amp;lt;tt&amp;gt;svn log&amp;lt;/tt&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
== Linking in subdirectories from other places ==&lt;br /&gt;
&lt;br /&gt;
It can happen you would like to include a copy of a subdirectory from another place, but just for convenience, not for developing the code in there. Of course it should be updated automatically whenever the original changes. Subversion can help you. You need to edit the property &amp;lt;tt&amp;gt;svn:external&amp;lt;/tt&amp;gt; of the directory the subdirectory should be added to. So for the current directory you use&lt;br /&gt;
 svn propedit svn:externals .&lt;br /&gt;
and then enter lines of the form&lt;br /&gt;
 libkhalkhi svn://anonsvn.kde.org/home/kde/trunk/playground/pim/khalkhi&lt;br /&gt;
Updating will now fetch &amp;lt;tt&amp;gt;/trunk/playground/pim/khalkhi&amp;lt;/tt&amp;gt; into the subdirectoy &amp;lt;tt&amp;gt;libkhalkhi&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{warning|Beware that you cannot commit changes you did to the local copy of the external subdirectory, it is just a readonly copy.}}&lt;br /&gt;
&lt;br /&gt;
You use &amp;lt;tt&amp;gt;svn://anonsvn.kde.org&amp;lt;/tt&amp;gt; and not another protocol, because &amp;lt;tt&amp;gt;anonsvn.kde.org&amp;lt;/tt&amp;gt; is accessible to everyone. Using &amp;lt;tt&amp;gt;https:&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;svn+ssh:&amp;lt;/tt&amp;gt; would only work for users of that protocol. There are still some small disadvantage with &amp;lt;tt&amp;gt;anonsvn.kde.org&amp;lt;/tt&amp;gt;: It is not always in synchronization with &amp;lt;tt&amp;gt;svn.kde.org&amp;lt;/tt&amp;gt;, so updates in the original branch may take a while to appear on &amp;lt;tt&amp;gt;anonsvn.kde.org&amp;lt;/tt&amp;gt;. And some strict firewalls are blocking the &amp;lt;tt&amp;gt;svn:&amp;lt;/tt&amp;gt; protocol.&lt;br /&gt;
&lt;br /&gt;
A special case in KDE 3 is the subdirectory &amp;lt;tt&amp;gt;admin&amp;lt;/tt&amp;gt;, containing the KDE 3 build utilities. It is linked in to the top directory in all modules, and maintained in &amp;lt;tt&amp;gt;/branches/KDE/3.5/kde-common&amp;lt;/tt&amp;gt;. For &amp;lt;tt&amp;gt;admin&amp;lt;/tt&amp;gt; the KDE subversion server is configured to allow readonly access for everyone, so if you see&lt;br /&gt;
 admin https://svn.kde.org/home/kde/branches/KDE/3.5/kde-common/admin&lt;br /&gt;
there is no need to change this.&lt;br /&gt;
&lt;br /&gt;
== More information on the kde wiki ==&lt;br /&gt;
&lt;br /&gt;
See [http://wiki.kde.org/tiki-index.php?page=KDE%20Subversion%20HOWTO the KDE wiki] for more&lt;br /&gt;
information about subversion in KDE&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Schedules/KDE_3.5_Release_Schedule</id>
		<title>Schedules/KDE 3.5 Release Schedule</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Schedules/KDE_3.5_Release_Schedule"/>
				<updated>2007-01-23T14:57:52Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: /* January 23rd, 2007: Expected release date of KDE 3.5.6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;KDE 3.5 is the fifth (and this time really last) feature release in the KDE 3.x series.&lt;br /&gt;
All dates given here are subject to revision, but we will try our best to stick to them if possible.&lt;br /&gt;
[mailto:coolo@kde.org Stephan Kulow] is acting as release coordinator for the 3.5 releases.&lt;br /&gt;
&lt;br /&gt;
== KDE 3.5.0 ==&lt;br /&gt;
&lt;br /&gt;
===August 1st, 2005: Officially close of feature list===&lt;br /&gt;
The list of features for KDE 3.5 should already be settled by then, but after that date are only KDE 4 features. At this date, /branches/KDE/3.5 is frozen for feature commits that are not listed in the [[KDE 3.5 Feature Plan|feature plan]].&lt;br /&gt;
&lt;br /&gt;
===August 5th, 2005: Alpha 1 prepared===&lt;br /&gt;
Alpha 1 will be source only - without translations.&lt;br /&gt;
&lt;br /&gt;
===August 25th, 2005: branches/KDE/3.5 is feature frozen===&lt;br /&gt;
The 3.5 branch is frozen for feature commits. Only bugfixes are to be committed. Still, binary compatibility is not required, i18n string changes are allowed.&lt;br /&gt;
&lt;br /&gt;
===September 5th, 2005: Message Freeze===&lt;br /&gt;
After this date the same message freeze applies as for released versions (i.e. only previously untranslated strings or clear errors in strings can be fixed - no new strings).&lt;br /&gt;
&lt;br /&gt;
===September 10th, 2005: tags/KDE/3.5-beta1 created===&lt;br /&gt;
The 3.5 branch is tagged as Beta 1 and is frozen for nonurgent commits till 14th.&lt;br /&gt;
&lt;br /&gt;
===September 13th, 2005: Beta1 is prepared===&lt;br /&gt;
Beta 1 is prepared and released after some initial testing. The incoming bugs will be reviewed for their severity.&lt;br /&gt;
&lt;br /&gt;
===October 9th, 2005: tags/KDE/3.5-beta2 created===&lt;br /&gt;
The 3.5 branch is tagged as Beta 2 and is frozen for nonurgent commits till 12th.&lt;br /&gt;
&lt;br /&gt;
===October 12th, 2005: Beta2 is prepared===&lt;br /&gt;
Beta 2 is prepared and released after some initial testing. The incoming bugs will be reviewed for their severity.&lt;br /&gt;
&lt;br /&gt;
===November 7th, 2005: Total release freeze===&lt;br /&gt;
This is the very last for commiting anything that isn't reviewed on the development lists. If in doubt, ask the release coordinator.&lt;br /&gt;
&lt;br /&gt;
===November 9th, 2005: Release Candidate 1===&lt;br /&gt;
Targetted date for first release candidate and then wait for show stoppers to appear.&lt;br /&gt;
&lt;br /&gt;
===November 29th, 2005: Targetted Release Date===&lt;br /&gt;
&lt;br /&gt;
== KDE 3.5.1 ==&lt;br /&gt;
    &lt;br /&gt;
===January 20th, 2006: Tagging KDE 3.5.1===&lt;br /&gt;
&lt;br /&gt;
== KDE 3.5.2 ==&lt;br /&gt;
&lt;br /&gt;
===February 26th, 2006: Message and documentation freeze===&lt;br /&gt;
&lt;br /&gt;
===March 17th, 2006: Tagging KDE 3.5.2===&lt;br /&gt;
&lt;br /&gt;
== KDE 3.5.3 ==&lt;br /&gt;
&lt;br /&gt;
===May 23th, 2006: Tagging KDE 3.5.3===&lt;br /&gt;
&lt;br /&gt;
== KDE 3.5.4 ==&lt;br /&gt;
&lt;br /&gt;
===July 10th, 2006: Message and documentation freeze===&lt;br /&gt;
&lt;br /&gt;
===July 24th, 2006: Tagging KDE 3.5.4===&lt;br /&gt;
&lt;br /&gt;
== KDE 3.5.5 ==&lt;br /&gt;
&lt;br /&gt;
===August 8th, 2006: Partial lift of message and documentation freeze===&lt;br /&gt;
For the GUI strings (also known as messages), you can fix typos and make small &lt;br /&gt;
changes to them. You can also add new error messages to improve error &lt;br /&gt;
feedback to users. (Adding other kinds of messages are not allowed. In case &lt;br /&gt;
of questions or doubts, please ask the kde-i18n-doc@kde.org mailing list.)&lt;br /&gt;
For the documentation, the changes should also be rather small, except when &lt;br /&gt;
fixing inaccurate or outdated documentation. You can also port documentation &lt;br /&gt;
that has been prepared in the trunk/KDE modules. (If you change any &lt;br /&gt;
documentation for the KDE 3.5 branch, please be sure that the change is also &lt;br /&gt;
in the corresponding module of trunk/KDE. However you can do a little later, &lt;br /&gt;
in case that you would not have much time during the lift period.)&lt;br /&gt;
&lt;br /&gt;
===September 18th, 2006: Message and documentation freeze===&lt;br /&gt;
&lt;br /&gt;
===October 1st-3rd, 2006: Tagging KDE 3.5.5===&lt;br /&gt;
The actual date depends on how well the Release Coordinator returns from Dublin.&lt;br /&gt;
&lt;br /&gt;
===October 10th, 2006: Expected release date of KDE 3.5.5===&lt;br /&gt;
&lt;br /&gt;
===October 12th, 2006: Partial lift of message and documentation freeze===&lt;br /&gt;
For the GUI strings (also known as messages), you can fix typos and make small changes to them. You can also add new error messages to improve error feedback to users. (Adding other kinds of messages are not allowed. In case of questions or doubts, please ask the kde-i18n-doc@kde.org mailing list.) &lt;br /&gt;
&lt;br /&gt;
For the documentation, the changes should also be rather small, except when fixing inaccurate or outdated documentation. You can also port documentation that has been prepared in the trunk/KDE modules. (If you change any documentation for the KDE 3.5 branch, please be sure that the change is also in the corresponding module of trunk/KDE. However you can do a little later, in case that you would not have much time during the lift period.) &lt;br /&gt;
&lt;br /&gt;
== KDE 3.5.6 ==&lt;br /&gt;
&lt;br /&gt;
===December 16th, 2006: Message and documentation freeze===&lt;br /&gt;
After this date the same message freeze applies as for released versions (i.e. only previously untranslated strings or clear errors in strings can be fixed - no new strings).&lt;br /&gt;
&lt;br /&gt;
===January 15th, 2007: Tagging KDE 3.5.6===&lt;br /&gt;
&lt;br /&gt;
===January 23rd, 2007: Expected release date of KDE 3.5.6===&lt;br /&gt;
'''Status'''': DELAYED! - See also: {{Bug|140307}}&lt;br /&gt;
&lt;br /&gt;
==Frequently Asked Questions==&lt;br /&gt;
;What's the deal with that feature-plan?:In the past, there were a lot of complaints about a rather long &amp;quot;freeze period&amp;quot;, so this is an attempt to address this issue. Basically the idea is that you add an entry about what feature you want to finish in the 3.5 timeframe and mark it as done when you completed it. This helps me to get an overview about the outstanding changes and in return allows you to work on the missing parts even in the &amp;quot;freeze period&amp;quot;.&amp;lt;br /&amp;gt;The feature-plan is open for commits till August 1st 2005. ''Later additions'' require review first. I will try to respect outstanding entries in the release schedule.&amp;lt;br /&amp;gt;Please understand that although this gives you greater freedom over SVN, it also requires more discipline in making sure that your additions don't have unwanted side effects.&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Solid/Introduction</id>
		<title>Development/Tutorials/Solid/Introduction</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Solid/Introduction"/>
				<updated>2007-01-23T00:07:11Z</updated>
		
		<summary type="html">&lt;p&gt;Cbs: /* Listing Devices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is Solid ==&lt;br /&gt;
Solid is the new hardware device framework for KDE 4 that features, among other things, a hardware discovery layer which allows you to detect and use devices regardless of operating system or architecture. You can learn more about the Solid project at [http://solid.kde.org solid.kde.org].&lt;br /&gt;
&lt;br /&gt;
== Who is this tutorial for? ==&lt;br /&gt;
This tutorial is written for developers looking to use the Solid hardware discovery layer within their applications.  It can also serve as a good starting point for developers looking to start working on the Solid framework.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
* A working KDE4 development environment. Documentation on setting up a KDE environment can be found [[Getting_Started|here]].&lt;br /&gt;
&lt;br /&gt;
== Listing Devices ==&lt;br /&gt;
Our first program will be a simple console based app that gets a list of all the hardware devices and prints them out to the screen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;&lt;br /&gt;
    Solid::DeviceManager &amp;amp;manager = Solid::DeviceManager::self();&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This gets us the device manager.  All the devices are queried through and returned from the device manager.  Once we have the list of devices we can interact with them as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;foreach( Solid::Device device, manager.allDevices() )&lt;br /&gt;
{&lt;br /&gt;
    //print the name of device&lt;br /&gt;
    kDebug() &amp;lt;&amp;lt; device.udi() &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
device.udi() returns the Unique Device Identifier for the device as a QString. Even if you have more than one identical device, the UDI is guaranteed to be unique.  For example if you have a MythTV box with two PVR-250 T.V. capture cards in it, you will be able to refer to card #1 by it's UDI and card #2 by it's UDI.&lt;br /&gt;
&lt;br /&gt;
The complete program along with the CMake files necessary to build it can be found under &amp;quot;[http://websvn.kde.org/trunk/KDE/kdelibs/solid/examples/tutorial1/ kdelibs/solid/examples/tutorial1/]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Searching for specific devices ==&lt;br /&gt;
This second program makes uses of filters built into the solid framework.  Using these filters you can list only devices according to supported capabilities, sub-devices of a given parent, and various predicates.  In our example we'll be limiting our list to only audio hardware.  A full list of capabilities can be viewed under the Solid::Capability namespace.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;Solid::DeviceManager &amp;amp;manager = Solid::DeviceManager::self();&lt;br /&gt;
DeviceList devices = manager.findDevicesFromQuery( &amp;quot;&amp;quot;,&lt;br /&gt;
    Solid::Capability::AudioHw );&lt;br /&gt;
//get a list of all devices that are AudioHw&lt;br /&gt;
foreach ( Solid::Device device, devices )&lt;br /&gt;
{&lt;br /&gt;
    kDebug() &amp;lt;&amp;lt; device.udi() &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example Solid::DeviceManager::findDevicesFromQuery looks for a device with any parent and the Solid::Capability::AudioHw capability.  If we had wanted to specify an AudioHw device with the parent &amp;quot;real_specific_parent&amp;quot; it would look like this:&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;code cppqt&amp;gt;manager.findDevicesFromQuery( &amp;quot;real_specific_parent&amp;quot;, &lt;br /&gt;
                              Solid::Capability::AudioHw )&amp;lt;/code&amp;gt;&lt;br /&gt;
The complete program along with the CMake files required to build it can be found under &amp;quot;[http://websvn.kde.org/trunk/KDE/kdelibs/solid/examples/tutorial2/ kdelibs/solid/examples/tutorial2/]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== What do we do with a device once we get it? ==&lt;br /&gt;
Now that we got a device, what do we do with it?  First lets look at the relationship between the Solid::Device and Solid::Capability. A Solid::Device can contain many Solid::Capability.  A device can be tested to have a capability in the following way:&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;Solid::DeviceManager &amp;amp;manager = Solid::DeviceManager::self();&lt;br /&gt;
    &lt;br /&gt;
//get a Processor&lt;br /&gt;
Solid::DeviceList list = manager.findDevicesFromQuery( &amp;quot;&amp;quot;,&lt;br /&gt;
                             Solid::Capability::Processor );&lt;br /&gt;
&lt;br /&gt;
//take the first Processor&lt;br /&gt;
Solid::Device device = list[0];&lt;br /&gt;
if ( device.is&amp;lt;Solid::Processor&amp;gt;() ) {&lt;br /&gt;
    kDebug() &amp;lt;&amp;lt; &amp;quot;We've got a processor!&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
} else {&lt;br /&gt;
    kDebug() &amp;lt;&amp;lt; &amp;quot;Device is not a processor.&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To actually use this device as a processor we need to do the following:&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;&lt;br /&gt;
    Solid::Processor *processor = device.as&amp;lt;Solid::Processor&amp;gt;();&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
The complete program along with the CMake files required to build it can be found under &amp;quot;[http://websvn.kde.org/trunk/KDE/kdelibs/solid/examples/tutorial3/ kdelibs/solid/examples/tutorial3/]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Category:C++]]&lt;/div&gt;</summary>
		<author><name>Cbs</name></author>	</entry>

	</feed>