<?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=Zander&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=Zander&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Special:Contributions/Zander"/>
		<updated>2013-05-21T21:56:01Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.20.2</generator>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Localization/i18n_Semantics</id>
		<title>Development/Tutorials/Localization/i18n Semantics</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Localization/i18n_Semantics"/>
				<updated>2012-03-22T12:23:18Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Abstract ==&lt;br /&gt;
&lt;br /&gt;
Typical way of formatting user visible strings in application interfaces, for a long time has been that of plain text or at most visual markup like HTML tags. In most textual content environments, shift to ''semantic'' markup has been recognized as superior to visual (for example, the Docbook XML for documentation). Why not go down the same road for UI strings?&lt;br /&gt;
&lt;br /&gt;
{{Note|A [http://people.ubuntu.com/~apachelogger/misc/i18nccheatsheet.png handy cheat sheet] for the KUIT semantic markup language has been prepared by apachelogger.}}&lt;br /&gt;
&lt;br /&gt;
== Semantic Markup by Examples ==&lt;br /&gt;
&lt;br /&gt;
In the semantic model, user interface strings are marked for their ''context'', and text elements within for their ''meaning'' rather than visual appearance. Consider few i18n examples of usual, non-semantic format:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18n(&amp;quot;Move&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
i18n(&amp;quot;Descending&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
i18n(&amp;quot;&amp;lt;qt&amp;gt;&amp;lt;b&amp;gt;%1&amp;lt;/b&amp;gt; does not exist&amp;lt;/qt&amp;gt;&amp;quot;, fname);&lt;br /&gt;
&lt;br /&gt;
i18n(&amp;quot;&amp;lt;h1&amp;gt;History Sidebar&amp;lt;/h1&amp;gt; You can configure the history sidebar here.&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using KDE UI Text (KUIT for short) semantic markup, these strings would be formated like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18nc(&amp;quot;@action:button&amp;quot;, &amp;quot;Move&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
i18nc(&amp;quot;@item:inmenu&amp;quot;, &amp;quot;Descending&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
i18nc(&amp;quot;@info&amp;quot;, &amp;quot;&amp;lt;filename&amp;gt;%1&amp;lt;/filename&amp;gt; does not exist&amp;quot;, fname);&lt;br /&gt;
&lt;br /&gt;
i18nc(&amp;quot;@info:whatsthis&amp;quot;,&lt;br /&gt;
      &amp;quot;&amp;lt;title&amp;gt;History Sidebar&amp;lt;/title&amp;gt;&amp;quot;&lt;br /&gt;
      &amp;quot;&amp;lt;para&amp;gt;You can configure the history sidebar here.&amp;lt;/para&amp;gt;&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Two distinct differences between ordinary and KUIT markup can be observed.&lt;br /&gt;
&lt;br /&gt;
The first is the use of context i18n calls, the &amp;lt;tt&amp;gt;i18nc()&amp;lt;/tt&amp;gt;, to convey the usage context of the string by means of the ''context marker''. The first message above, &amp;quot;Move&amp;quot;, has been assigned the &amp;lt;tt&amp;gt;@action:button&amp;lt;/tt&amp;gt; marker, where &amp;lt;tt&amp;gt;@action&amp;lt;/tt&amp;gt; is the ''semantic role'' which describes the text as an action to be taken (e.g. operation on data or opening of a new dialog), and &amp;lt;tt&amp;gt;:button&amp;lt;/tt&amp;gt; is the ''interface subcue'' saying that this text is displayed on a pushbutton widget. The second message, &amp;quot;Descending&amp;quot;, has been marked as semantically a list item (&amp;lt;tt&amp;gt;@item&amp;lt;/tt&amp;gt;), displayed in a menu (&amp;lt;tt&amp;gt;:inmenu&amp;lt;/tt&amp;gt;). The interface subcue can be left out if none is appropriate, as has been done in the third message.&lt;br /&gt;
&lt;br /&gt;
The other difference is the use of the semantic tags, which convey the meaning of a word or phrase within the text. The &amp;lt;tt&amp;gt;&amp;lt;filename&amp;gt;%1&amp;lt;/filename&amp;gt;&amp;lt;/tt&amp;gt; part of the third message tells that the substituted text is the name of a file. The &amp;lt;tt&amp;gt;&amp;lt;title&amp;gt;&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;&amp;lt;para&amp;gt;&amp;lt;/tt&amp;gt; tags in the last message clearly lay out structure of a longer informational text.&lt;br /&gt;
&lt;br /&gt;
{{note|The context marker can be added when within some of the standard XML sources too. In Qt Designer forms (&amp;lt;tt&amp;gt;.ui&amp;lt;/tt&amp;gt; files), each text label to a widget has &amp;lt;tt&amp;gt;comment&amp;lt;/tt&amp;gt; attribute (presented as &amp;quot;disambiguation&amp;quot; property within Designer, or &amp;quot;comment&amp;quot; prior to Qt 4.5), which can be used in the same manner as context argument of &amp;lt;tt&amp;gt;i18nc()&amp;lt;/tt&amp;gt; call. Similarly, in the KXmlGui (&amp;lt;tt&amp;gt;.rc&amp;lt;/tt&amp;gt;) and KConfigXT (&amp;lt;tt&amp;gt;.kcfg&amp;lt;/tt&amp;gt;) files, tags &amp;lt;tt&amp;gt;&amp;lt;text&amp;gt;&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;label&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;whatsthis&amp;lt;/tt&amp;gt; can have a &amp;lt;tt&amp;gt;context&amp;lt;/tt&amp;gt; attribute. For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;label context=&amp;quot;@label&amp;quot;&amp;gt;Hide trivial details&amp;lt;/label&amp;gt;&lt;br /&gt;
&amp;lt;whatsthis context=&amp;quot;@info:whatsthis&amp;quot;&amp;gt;Option to hide drivel&amp;lt;/whatsthis&amp;gt;&lt;br /&gt;
&amp;lt;text context=&amp;quot;@item:inmenu&amp;quot;&amp;gt;&amp;amp;amp;New...&amp;lt;/text&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Even when a context marker is present, sometimes the programmer may want to provide an additional &amp;quot;free-form&amp;quot; description to translators, in order to shed more light on particularly ambiguous strings. The free-form description is just separated by a whitespace from the context marker proper, like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18nc(&amp;quot;@item:inmenu Sorting order&amp;quot;, &amp;quot;Descending&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One particularly useful and yet general piece of free-form description, is the title under which the message is grouped -- the menu title for actions in menu, the group title of set of radio-buttons, the listbox label for items in list, etc. For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
iconSizeBox = new QGroupBox(i18nc(&amp;quot;@title:group&amp;quot;, &amp;quot;Icon Size&amp;quot;), this);&lt;br /&gt;
//...&lt;br /&gt;
iconSize1 = new QRadioButton(i18nc(&amp;quot;@option:radio Icon Size&amp;quot;, &amp;quot;Small&amp;quot;), this);&lt;br /&gt;
iconSize2 = new QRadioButton(i18nc(&amp;quot;@option:radio Icon Size&amp;quot;, &amp;quot;Medium&amp;quot;), this);&lt;br /&gt;
iconSize3 = new QRadioButton(i18nc(&amp;quot;@option:radio Icon Size&amp;quot;, &amp;quot;Large&amp;quot;), this);&lt;br /&gt;
//...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advantages of Semantic Markup ==&lt;br /&gt;
&lt;br /&gt;
KUIT markup has advantages both to users and to translators of applications that make use of it.&lt;br /&gt;
&lt;br /&gt;
For the users, the use of semantic tags means consistent formatting of same kinds of text. A notorious example of inconsistent visual formatting are filenames and paths, which are sometimes put in as is, sometimes in quotes (and ordinary quotes at that, rather than proper English fancy quotes), and sometimes in bold tags. Furthermore, the text within the tag may be modified when semantically marked; for example, the standard &amp;quot;/&amp;quot; path delimiters in a &amp;lt;tt&amp;gt;&amp;lt;filename&amp;gt;&amp;lt;/tt&amp;gt; text will be substituted for platform specific ones.&lt;br /&gt;
&lt;br /&gt;
Translators will benefit from both context markers and tags. For the &amp;lt;tt&amp;gt;@action&amp;lt;/tt&amp;gt; role of the &amp;quot;Move&amp;quot; string in the example above, the translator may use command form of the verb, while gerund form (like &amp;quot;Moving&amp;quot;) may be more appropriate for the &amp;lt;tt&amp;gt;@title&amp;lt;/tt&amp;gt; role, which would be used if the string was title of the menu, window, etc. The interface subcue, like &amp;lt;tt&amp;gt;:button&amp;lt;/tt&amp;gt; above, if present, additionally enables the translator to mentally picture the actual runtime GUI. Tags within the text will also benefit translators, as they may clarify the structure of the sentence, especially in presence of placeholder substitutions.&lt;br /&gt;
&lt;br /&gt;
Context markers also serve a technical purpose: they decide whether what form of visual formatting is used. For example, any &amp;lt;tt&amp;gt;@title&amp;lt;/tt&amp;gt; role will use plain text, whereas &amp;lt;tt&amp;gt;@info&amp;lt;/tt&amp;gt; will frequently produce rich text, depending on the subcue.&lt;br /&gt;
&lt;br /&gt;
None the least, semantic markup removes the burden from programmers of thinking about the visual formatting to apply, like &amp;quot;''Should I put the path in quotes or &amp;amp;lt;b&amp;gt;?''&amp;quot;, or &amp;quot;''Should the title be &amp;amp;lt;h2&amp;gt; or &amp;amp;lt;h3&amp;gt;?''&amp;quot;, and so on.&lt;br /&gt;
&lt;br /&gt;
== Context Markers ==&lt;br /&gt;
&lt;br /&gt;
Context marker consist of the semantic role and the interface subcue, in the form of &amp;lt;tt&amp;gt;@role:subcue&amp;lt;/tt&amp;gt;. Each message should be given a role, but the subcue may be left out. The subcue should be given only when the string clearly maps to the user interface element that it describes.&lt;br /&gt;
&lt;br /&gt;
Every role/subcue combination determines the default visual formatting of resulting string, whether it comes out as plain or rich text. See the section on [[#Limitations to Semantic Markup|limitations]] for a way to override the default formatting when necessary.&lt;br /&gt;
&lt;br /&gt;
{{warning|Roles and subcues in the context marker cannot be specified at will, but must be drawn from the sets defined below. This is important for several reasons, one being that translators have deliberated about and agreed upon the meanings of presented sets, rather than having to second-guess arbitrary combinations.}}&lt;br /&gt;
&lt;br /&gt;
KUIT defines the following roles and subcues (with notes on default visual formatting):&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;@action&amp;lt;/tt&amp;gt;&lt;br /&gt;
: Text to all clickable widgets that cause some action to be performed, like an operation on the data, view restructuring, or opening a dialog. The button texts and menu entries (except submenu titles) all fall into this category.&lt;br /&gt;
:&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:button&amp;lt;/tt&amp;gt; - pushbuttons in windows and dialogs&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:inmenu&amp;lt;/tt&amp;gt; - menu entries that perform an action&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:intoolbar&amp;lt;/tt&amp;gt; - toolbar buttons&lt;br /&gt;
:&lt;br /&gt;
: All &amp;lt;tt&amp;gt;@action&amp;lt;/tt&amp;gt; markers are formatted as '''plain text''' by default.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;@title&amp;lt;/tt&amp;gt;&lt;br /&gt;
: Text that is semantically a title in the interface. These would include window titles, menu titles, tab names, option group names in configuration dialogs, and column and row names in list views.&lt;br /&gt;
:&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:window&amp;lt;/tt&amp;gt; - window title (also dock name)&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:menu&amp;lt;/tt&amp;gt; - menu name&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:tab&amp;lt;/tt&amp;gt; - tab name&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:group&amp;lt;/tt&amp;gt; - option group&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:column&amp;lt;/tt&amp;gt; - column name&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:row&amp;lt;/tt&amp;gt; - row name&lt;br /&gt;
:&lt;br /&gt;
: All &amp;lt;tt&amp;gt;@title&amp;lt;/tt&amp;gt; markers are formatted as '''plain text''' by default.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;@option&amp;lt;/tt&amp;gt;&lt;br /&gt;
: Text to options which user can turn on and off, or choose between. These are the labels to checkboxes (either in dialogs or in menus) and radio buttons.&lt;br /&gt;
:&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:check&amp;lt;/tt&amp;gt; - checkbox label&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:radio&amp;lt;/tt&amp;gt; - radio-button label&lt;br /&gt;
:&lt;br /&gt;
: All &amp;lt;tt&amp;gt;@option&amp;lt;/tt&amp;gt; markers are formatted as '''plain text''' by default.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;@label&amp;lt;/tt&amp;gt;&lt;br /&gt;
: Text labels to various widgets in the interface, which are none of &amp;lt;tt&amp;gt;@action&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;@title&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;@option&amp;lt;/tt&amp;gt;. These include labels to sliders, spinboxes, combo, list and text boxes, font and color choosers.&lt;br /&gt;
:&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:slider&amp;lt;/tt&amp;gt; - slider labels (but end-ranges are @item:inrange!)&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:spinbox&amp;lt;/tt&amp;gt; - spinbox labels&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:listbox&amp;lt;/tt&amp;gt; - list and combo boxes&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:textbox&amp;lt;/tt&amp;gt; - text and edit boxes&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:chooser&amp;lt;/tt&amp;gt; - chooser widgets (fonts, colors, etc.)&lt;br /&gt;
:&lt;br /&gt;
: All &amp;lt;tt&amp;gt;@label&amp;lt;/tt&amp;gt; markers are formatted as '''plain text''' by default.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;@item&amp;lt;/tt&amp;gt;&lt;br /&gt;
: Strings that can be considered one from a range of possibilities or properties. Entries in listings, dropdown and combo boxes are obvious, but also some menu items (e.g. encoding selection, sort orderings), end-labels to ranges (e.g. high/low, more/less), inserts into longer texts, and properites (e.g. file types, permissions) frequently displayed in tabular form (e.g. column views, property dialogs).&lt;br /&gt;
:&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:inmenu&amp;lt;/tt&amp;gt; - items presented as menu entries&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:inlistbox&amp;lt;/tt&amp;gt; - items in list and combo boxes&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:intable&amp;lt;/tt&amp;gt; - items presented in table-like forms&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:inrange&amp;lt;/tt&amp;gt; - range labels to sliders, etc.&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:intext&amp;lt;/tt&amp;gt; - words and phrases inserted into other messages&lt;br /&gt;
:&lt;br /&gt;
: All &amp;lt;tt&amp;gt;@item&amp;lt;/tt&amp;gt; markers are formatted as '''plain text''' by default.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;@info&amp;lt;/tt&amp;gt;&lt;br /&gt;
: General texts for user's information, that do not fall under any of the previous roles. These are for example tooltip and &amp;quot;What's This?&amp;quot; texts, text in message boxes, fields in status bar, and strings in progress dialogs.&lt;br /&gt;
:&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:tooltip&amp;lt;/tt&amp;gt; - hovering tooltips&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:whatsthis&amp;lt;/tt&amp;gt; - &amp;quot;What's This?&amp;quot; explanations of widgets&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:status&amp;lt;/tt&amp;gt; - texts in status displays (e.g. in status bar)&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:progress&amp;lt;/tt&amp;gt; - the current state of ongoing process&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:tipoftheday&amp;lt;/tt&amp;gt; - introductory tips on application startup&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:credit&amp;lt;/tt&amp;gt; - contributor names and their contributions&lt;br /&gt;
:: &amp;lt;tt&amp;gt;:shell&amp;lt;/tt&amp;gt; - info output to the terminal, rather than to GUI&lt;br /&gt;
:&lt;br /&gt;
: Standalone &amp;lt;tt&amp;gt;@info&amp;lt;/tt&amp;gt;, without a subcue, is formatted as '''rich text''' by default; the same holds for &amp;lt;tt&amp;gt;:tooltip&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;:whatsthis&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;:tipoftheday&amp;lt;/tt&amp;gt; subcues. With &amp;lt;tt&amp;gt;:status&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;:progress&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;:credit&amp;lt;/tt&amp;gt;, '''plain text''' is produced. &amp;lt;tt&amp;gt;:shell&amp;lt;/tt&amp;gt; produces '''terminal text''' (like plain, but with possible shell escape sequences).&lt;br /&gt;
&lt;br /&gt;
== Semantic Tags ==&lt;br /&gt;
&lt;br /&gt;
KUIT semantic tags come in several logical groups:&lt;br /&gt;
* ''phrase tags'' - those that ascribe meaning to certain phrases and inserts&lt;br /&gt;
* ''sentence tags'' - which describe the purpose of a complete sentence in text&lt;br /&gt;
* ''structure tags'' - used to order longer text into paragraphs, titles, etc.&lt;br /&gt;
&lt;br /&gt;
=== Phrase tags ===&lt;br /&gt;
&lt;br /&gt;
Phrase tags will by default not admit any subtags; where some subtags can be used, it is so indicated. KUIT defines the folowing phrase tags:&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;application&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: Name of an application.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18nc(&amp;quot;@action:inmenu&amp;quot;,&lt;br /&gt;
      &amp;quot;Open with &amp;lt;application&amp;gt;%1&amp;lt;/application&amp;gt;&amp;quot;, appName);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;bcode&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: Line-breaking body of code, for short listings.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18nc(&amp;quot;@info:whatsthis&amp;quot;,&lt;br /&gt;
      &amp;quot;You can try the following snippet:&amp;lt;bcode&amp;gt;&amp;quot;&lt;br /&gt;
      &amp;quot;\\begin{equation}&amp;quot;&lt;br /&gt;
      &amp;quot;  C_{x_i} = \\frac{C_z^2}{e \\pi \\lambda}&amp;quot;&lt;br /&gt;
      &amp;quot;\\end{equation}&amp;quot;&lt;br /&gt;
      &amp;quot;&amp;lt;/bcode&amp;gt;&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;command&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: Name of shell command or system call. Its man section can be provided via &amp;lt;tt&amp;gt;section&amp;lt;/tt&amp;gt; attribute.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18nc(&amp;quot;@info&amp;quot;,&lt;br /&gt;
      &amp;quot;This will call &amp;lt;command&amp;gt;%1&amp;lt;/command&amp;gt; internally.&amp;quot;, cmdName);&lt;br /&gt;
&lt;br /&gt;
i18nc(&amp;quot;@info&amp;quot;,&lt;br /&gt;
      &amp;quot;Consult man entry for &amp;lt;command section='1'&amp;gt;%1&amp;lt;/command&amp;gt;&amp;quot;, cmdName);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;email&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: Email address. Without attributes, the tag text is the address. Address can also be given with &amp;lt;tt&amp;gt;address&amp;lt;/tt&amp;gt; attribute, in which case the tag text is the name or description attached to the address.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18nc(&amp;quot;@info&amp;quot;,&lt;br /&gt;
      &amp;quot;Send bug reports to &amp;lt;email&amp;gt;%1&amp;lt;/email&amp;gt;.&amp;quot;, emailNull);&lt;br /&gt;
&lt;br /&gt;
i18nc(&amp;quot;@info&amp;quot;,&lt;br /&gt;
      &amp;quot;Send praises to &amp;lt;email address='%1'&amp;gt;the author&amp;lt;/email&amp;gt;.&amp;quot;, emailMy);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
: The construct will be hyperlinked in rich text format.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;emphasis&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: Emphasize a word or phrase in the text.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18nc(&amp;quot;@info:progress&amp;quot;,&lt;br /&gt;
      &amp;quot;Checking &amp;lt;emphasis&amp;gt;feedback&amp;lt;/emphasis&amp;gt; circuits...&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:  For strong emphasis, attribute &amp;lt;tt&amp;gt;strong&amp;lt;/tt&amp;gt; (since KDE 4.3) may be used, with value &amp;lt;tt&amp;gt;1&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;yes&amp;lt;/tt&amp;gt;, or &amp;lt;tt&amp;gt;true&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;envar&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: Environment variable. The $ sign will be prepended automatically in formatted text.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18nc(&amp;quot;@info&amp;quot;,&lt;br /&gt;
      &amp;quot;Assure that your &amp;lt;envar&amp;gt;PATH&amp;lt;/envar&amp;gt; is properly set.&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;filename&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: File or folder name or path. The path separators will be transformed into what is native to the platform.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18nc(&amp;quot;@info&amp;quot;, &amp;quot;Cannot read &amp;lt;filename&amp;gt;%1&amp;lt;/filename&amp;gt;.&amp;quot;, filename);&lt;br /&gt;
&lt;br /&gt;
i18nc(&amp;quot;@info&amp;quot;,&lt;br /&gt;
      &amp;quot;&amp;lt;filename&amp;gt;&amp;lt;envar&amp;gt;HOME&amp;lt;/envar&amp;gt;/.foorc&amp;lt;/filename&amp;gt; does not exist.&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
: The &amp;lt;tt&amp;gt;&amp;lt;envar&amp;gt;&amp;lt;/tt&amp;gt; can be used as subtag.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;icode&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: Inline code, like shell command lines.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18nc(&amp;quot;@info:tooltip&amp;quot;,&lt;br /&gt;
      &amp;quot;Execute &amp;lt;icode&amp;gt;svn merge&amp;lt;/icode&amp;gt; on selected revisions.&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
: The &amp;lt;tt&amp;gt;&amp;lt;placeholder&amp;gt;&amp;lt;/tt&amp;gt; can be used as subtag.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;interface&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: Path to GUI interface element. If there is more than one element in the path, use &amp;quot;|&amp;quot; or &amp;quot;-&amp;gt;&amp;quot; to delimit elements, which will be converted into canonical delimiter.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18nc(&amp;quot;@info:whatsthis&amp;quot;,&lt;br /&gt;
      &amp;quot;If you make a mistake, click &amp;quot;&lt;br /&gt;
      &amp;quot;&amp;lt;interface&amp;gt;Reset&amp;lt;/interface&amp;gt; to start again.&amp;quot;);&lt;br /&gt;
i18nc(&amp;quot;@info:whatsthis&amp;quot;,&lt;br /&gt;
      &amp;quot;The line colors can be changed under &amp;quot;&lt;br /&gt;
      &amp;quot;&amp;lt;interface&amp;gt;Settings-&amp;gt;Visuals&amp;lt;/interface&amp;gt;.&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;link&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: Link to a URL-addressable resource. Without attributes, the tag text is the URL; alternatively, the URL can be given by &amp;lt;tt&amp;gt;url&amp;lt;/tt&amp;gt; attribute, and then the tag text serves as description.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18nc(&amp;quot;@info:tooltip&amp;quot;,&lt;br /&gt;
      &amp;quot;Go to &amp;lt;link&amp;gt;%1&amp;lt;/link&amp;gt; website.&amp;quot;, urlKDE);&lt;br /&gt;
&lt;br /&gt;
i18nc(&amp;quot;@info:tooltip&amp;quot;,&lt;br /&gt;
      &amp;quot;Go to &amp;lt;link url='%1'&amp;gt;the KDE website&amp;lt;/link&amp;gt;.&amp;quot;, urlKDE);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
: The variant with URL/description separation is preferred when applicable. The construct will be hyperlinked in rich text format.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;message&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: An external message to be reported to the user.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18nc(&amp;quot;@info&amp;quot;,&lt;br /&gt;
      &amp;quot;The fortune cookie says: &amp;lt;message&amp;gt;%1&amp;lt;/message&amp;gt;&amp;quot;, trouble);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;nl&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: Line break, counterpart to HTML's &amp;lt;tt&amp;gt;&amp;amp;lt;br/&amp;amp;gt;&amp;lt;/tt&amp;gt;. In plain text it will format as a newline character, and in rich text as &amp;lt;tt&amp;gt;&amp;amp;lt;br/&amp;amp;gt;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18nc(&amp;quot;@info&amp;quot;,&lt;br /&gt;
      &amp;quot;Do you really want to delete:&amp;lt;nl/&amp;gt;&amp;quot;&lt;br /&gt;
      &amp;quot;&amp;lt;filename&amp;gt;%1&amp;lt;/filename&amp;gt;&amp;quot;, fileName);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;numid&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: By default, numbers supplied as arguments to i18n calls are formatted into localized form. If the number is supposed to be a numeric identifier instead, like a port number, use this tag to signal numeric-id environment.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18nc(&amp;quot;@info:progress&amp;quot;,&lt;br /&gt;
      &amp;quot;Connecting to &amp;lt;numid&amp;gt;%1&amp;lt;/numid&amp;gt;...&amp;quot;, portNo);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;placeholder&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: A placeholder text, either something to be replaced by the user, or a generic item in a list.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18nc(&amp;quot;@info&amp;quot;,&lt;br /&gt;
      &amp;quot;Replace &amp;lt;placeholder&amp;gt;name&amp;lt;/placeholder&amp;gt; with your name.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
i18nc(&amp;quot;@item:inlistbox&amp;quot;,&lt;br /&gt;
      &amp;quot;&amp;lt;placeholder&amp;gt;All images&amp;lt;/placeholder&amp;gt;&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;resource&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: General named resource. Names of documents, sessions, projects, toolbars, plugins, schemes and themes, accounts, etc.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18nc(&amp;quot;@info&amp;quot;, &amp;quot;Apply color scheme &amp;lt;resource&amp;gt;%1&amp;lt;/resource&amp;gt;?&amp;quot;, colScheme);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;shortcut&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: Combination of keys to press. Separate the keys by &amp;quot;+&amp;quot; or &amp;quot;-&amp;quot;, and the shortcut will be converted into canonical form.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18nc(&amp;quot;@info:whatsthis&amp;quot;,&lt;br /&gt;
      &amp;quot;Cycle through layouts using &amp;lt;shortcut&amp;gt;Alt+Space&amp;lt;/shortcut&amp;gt;.&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sentence tags ===&lt;br /&gt;
&lt;br /&gt;
Sentence tags mark complete sentences in text, and will admit any phrase tags as subtags. The following are defined:&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;note&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: The sentence is a side note of significance to the topic.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18nc(&amp;quot;@info&amp;quot;,&lt;br /&gt;
      &amp;quot;Probably the best known of all duck species is the Mallard. &amp;quot;&lt;br /&gt;
      &amp;quot;It breeds throughout the temperate areas around the world. &amp;quot;&lt;br /&gt;
      &amp;quot;&amp;lt;note&amp;gt;Most domestic ducks are derived from Mallard.&amp;lt;/note&amp;gt;&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
: Do not explicitly add &amp;quot;Note:&amp;quot;, it will be added automatically. If you really need other label than &amp;quot;Note&amp;quot;, use attribute &amp;lt;tt&amp;gt;label&amp;lt;/tt&amp;gt;, e.g. &amp;lt;tt&amp;gt;&amp;quot;&amp;lt;note label='Trivia'&amp;gt;...&amp;lt;/note&amp;gt;&amp;quot;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;warning&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: The sentence is a warning.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18nc(&amp;quot;@info&amp;quot;,&lt;br /&gt;
      &amp;quot;Really delete this key?&amp;quot;&lt;br /&gt;
      &amp;quot;&amp;lt;warning&amp;gt;This cannot be undone.&amp;lt;/warning&amp;gt;&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
: Do not explicitly add &amp;quot;Warning:&amp;quot;, it will be added automatically. If you really need other label than &amp;quot;Warning&amp;quot;, use attribute &amp;lt;tt&amp;gt;label&amp;lt;/tt&amp;gt;, e.g. &amp;lt;tt&amp;gt;&amp;quot;&amp;lt;warning label='Danger'&amp;gt;...&amp;lt;/warning&amp;gt;&amp;quot;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Structure tags ===&lt;br /&gt;
&lt;br /&gt;
Structure tags are used to split longer texts into titles, paragraphs, and lists. By default they can contain any phrase or sentence tags, unless indicated otherwise.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;para&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: Text paragraph.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;title&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: The title of the text. Must be the first tag if present, but can be omitted.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;subtitle&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: Subtitle in the text. Must be followed by at least one &amp;lt;tt&amp;gt;&amp;amp;lt;para&amp;amp;gt;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;list&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: List of items. Can contain only &amp;lt;tt&amp;gt;&amp;amp;lt;item&amp;amp;gt;&amp;lt;/tt&amp;gt; as subtags. List is considered an element of the paragraph, so the &amp;lt;tt&amp;gt;&amp;amp;lt;list&amp;amp;gt;&amp;lt;/tt&amp;gt; must be found inside &amp;lt;tt&amp;gt;&amp;amp;lt;para&amp;amp;gt;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;&amp;amp;lt;item&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: List item.&lt;br /&gt;
&lt;br /&gt;
If any of the structure tags is present, then there must be no text outside of structure tags. The following is not valid KUIT markup:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
// invalid markup&lt;br /&gt;
i18nc(&amp;quot;@info&amp;quot;,&lt;br /&gt;
      &amp;quot;&amp;lt;title&amp;gt;History Sidebar&amp;lt;/title&amp;gt;&amp;quot;&lt;br /&gt;
      &amp;quot;You can configure the history sidebar here.&amp;quot;); // &amp;lt;para&amp;gt; missing&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limitations to Semantic Markup ==&lt;br /&gt;
&lt;br /&gt;
Semantic markup cannot be used in &amp;quot;dumb&amp;quot; strings, which do not pass through KDE's i18n subsystem. These would be, for example, strings in &amp;lt;tt&amp;gt;.desktop&amp;lt;/tt&amp;gt; format files. But ''not'' the strings in UI files, as in Qt Designer they can be equipped with both context markers (via comment field to text properties) and semantic tags.&lt;br /&gt;
&lt;br /&gt;
Qt's rich text HTML tags can be used concurrently with KUIT tags, but this is not advised unless necessary. They may be needed, for example, to create tables or insert images, as KUIT does not implement this functionality at the moment.&lt;br /&gt;
&lt;br /&gt;
Sometimes, the visual formatting may not be quite appropriate for the output device; every role/subcue combination has a preset default formatting. For example, if the &amp;lt;tt&amp;gt;@info&amp;lt;/tt&amp;gt; role is applied to a string which is used in a widget that does not handle rich text, it will come out with HTML tags displayed verbatim. To handle this, visual formatting can be explicitly signaled by &amp;lt;tt&amp;gt;/''format''&amp;lt;/tt&amp;gt; modifier appended to context marker:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp-qt&amp;quot;&amp;gt;&lt;br /&gt;
i18nc(&amp;quot;@info/plain&amp;quot;,&lt;br /&gt;
      &amp;quot;&amp;lt;filename&amp;gt;%1&amp;lt;/filename&amp;gt; does not exist&amp;quot;, fname);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Presently, the possible format modifiers are &amp;lt;tt&amp;gt;/plain&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;/rich&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/term&amp;lt;/tt&amp;gt; (for terminal format, possible use of escape sequences).&lt;br /&gt;
&lt;br /&gt;
To specify context in kpartgui rc file use context attribute (&amp;lt;text context=&amp;quot;@title:menu&amp;quot;&amp;gt;File&amp;lt;/text&amp;gt;). A context-aware version of I18N_NOOP is I18N_NOOP2.&lt;br /&gt;
&lt;br /&gt;
== Should I Go For Semantic Markup? ==&lt;br /&gt;
&lt;br /&gt;
Admittedly, KUIT markup is an additional thing to be learned and applied throughout the course of development. By now you may be wondering if it is worthwile to invest time into that, particularly in view of two cases:&lt;br /&gt;
* starting work on a new application, and&lt;br /&gt;
* porting messages in existing applications.&lt;br /&gt;
&lt;br /&gt;
You are strongly advised to use KUIT for new code. Compared to the total time spent on code, writing UI messages is only a small fraction. Context markers will help translators a lot, and message tags will provide consistent visual text formatting to your application.&lt;br /&gt;
&lt;br /&gt;
When modifying existing code, there are two issues. First, obviously it is a daunting task to go through hundreds (or worse) of messages and equip them with semantic markup. Second, by changing the messages, the translators too will have to review their existing translations; however, it is not expected that the porting will take so &amp;quot;epic&amp;quot; proportions that the translators cannot keep up. Sumarily, feel free to do as you see fit.&lt;br /&gt;
&lt;br /&gt;
Additionally, for porting, keep in mind that it is not all-or-nothing proposal. Any amount of semantic messages are useful to translators, and users can only see the difference for the better. Thus, for example, deciding to make all ''new'' messages semantic and slowly over time fix old messages, is a perfectly fine strategy.&lt;br /&gt;
&lt;br /&gt;
To make your job easier, there is an i18n-checker script that will report the problems in KUIT markup, as well as check some other i18n nuances. It is run daily on KDE code repository-wide as part Krazy-framework, but you can also run it locally on your code. It can be found in {{path|trunk/quality/krazy2/plugins/general/i18ncheckarg}}. Furthermore, as of this moment Krazy checks only C++ sources, while when you run the script locally, some of the XML sources containing translatable strings will be checked as well. &amp;lt;tt&amp;gt;i18ncheckarg&amp;lt;/tt&amp;gt; requires Perl libxml bindings, which are probably already packaged for your distribution (Debian package is libxml-libxml-perl).&lt;br /&gt;
&lt;br /&gt;
{{note|By default &amp;lt;tt&amp;gt;i18ncheckarg&amp;lt;/tt&amp;gt; takes a single filename to check, but using &amp;lt;tt&amp;gt;--allsources&amp;lt;/tt&amp;gt; option you can provide as many file or directory paths as you wish; typically you would give top directory path to your sources. Also, to report all missing context markers use &amp;lt;tt&amp;gt;--ctxmark&amp;lt;/tt&amp;gt; option, or otherwise missing markers will be reported only if some threshold of marked-to-total number of messages in a file is reached.}}&lt;br /&gt;
&lt;br /&gt;
Last but not the least, there is also a chic-effect to the KUIT. Its wide use, together with some under-the-hood elements on translators' disposal, will make KDE4's i18n layer without peer in free or proprietary software world. Insofar as you consider localization excellence an important part of the overall KDE excellence, this is something that may also tip your decision :) -- Your Friendly Translator.&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Zander</id>
		<title>User:Zander</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Zander"/>
				<updated>2011-01-17T21:10:42Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Thomas Zander'''&amp;lt;br&amp;gt;&lt;br /&gt;
KOffice developer&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/MovetoGit</id>
		<title>Projects/MovetoGit</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/MovetoGit"/>
				<updated>2011-01-17T21:09:32Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the page for co-ordinating KDE's move to [http://git-scm.com/ Git].&lt;br /&gt;
&lt;br /&gt;
If you're interested in helping, you should join the [https://mail.kde.org/mailman/listinfo/kde-scm-interest kde-scm-interest@kde.org] mailinglist and [irc://chat.freenode.net/kde-git #kde-git] on freenode.&lt;br /&gt;
&lt;br /&gt;
Meetings are wednesdays, 19:30 UTC, in #kde-git.&lt;br /&gt;
&lt;br /&gt;
'''New! [http://community.kde.org/Sysadmin/DeveloperAccessForRuleWriting The best way you can help us migrate]'''&lt;br /&gt;
&lt;br /&gt;
=The Plan=&lt;br /&gt;
&lt;br /&gt;
KDE is, eventually, moving to Git. We will be using gitolite + Redmine + reviewboard on our own servers.&lt;br /&gt;
&lt;br /&gt;
In the summer of 2009, [http://gitorious.org/amarok Amarok] moved to Gitorious to test the waters and find problems that would affect KDE.&lt;br /&gt;
&lt;br /&gt;
After it has been decided in Jun 2010 to use our own servers, Amarok and Konversation moved to git.kde.org/projects.kde.org to test the waters and find problems that would affect KDE.&lt;br /&gt;
&lt;br /&gt;
Once those problems have been solved, all of KDE will be able to switch.&lt;br /&gt;
&lt;br /&gt;
A full schedule for the git infrastructure can be found [http://community.kde.org/Sysadmin/GitInfrastructureLaunch here].&lt;br /&gt;
&lt;br /&gt;
==Why?==&lt;br /&gt;
&lt;br /&gt;
Git offers many advantages over svn, including offline commits and much easier to keep a feature branch up-to-date. Many KDE developers are already using git-svn, but this tool has its limitations. We want to have the full power of Git available, and we have people willing to do the work necessary to migrate.&lt;br /&gt;
&lt;br /&gt;
==How?==&lt;br /&gt;
&lt;br /&gt;
When we move, KDE's svn repository will be migrated into several Git repos, all on git.kde.org. Main modules such as kdelibs and kdebase will each become one repository. Projects in extragear will each have their own repository. The projects.kde.org site will have a list (lists?) of all these repositories using the redmine project wiki. Scripts will be provided for downloading, say, all of extragear, so &amp;quot;moving&amp;quot; a project from kdereview to extragear would simply involve editing a file kept online that defined the location of projects.&lt;br /&gt;
Details on the reasoning behind this layout is available [[Projects/MoveToGit/Layout|here]].&lt;br /&gt;
&lt;br /&gt;
A few things will stay in subversion - currently websites, translations and manuals. It's possible they could move to Git later, but they won't be part of the mass migration.&lt;br /&gt;
&lt;br /&gt;
All KDE developers will in principle be able to use their existing &amp;quot;svn&amp;quot; accounts. Developers using HTTPS ideally would request their HTTPS SVN account to be converted to SSH as that makes it easiest for the KDE sysadmins, but alternatively they can also just provide a public key. At some point the KDE sysadmins are going to send everybody with a HTTPS SVN account an email with a link to a web app to collect their key (see http://www.omat.nl/2010/06/13/sysamin-update-your-email-address/).&lt;br /&gt;
&lt;br /&gt;
From the times when gitorious.org was the preferred hosting solution, a procedure to move a project from svn to gitorious.org can be found in [[Projects/MoveToGit/StepsToMove|Steps to follow for Moving]].&lt;br /&gt;
Many points probably still apply, but have to be updated.&lt;br /&gt;
&lt;br /&gt;
=Blockers=&lt;br /&gt;
&lt;br /&gt;
Tasks that need to get done before we can migrate&lt;br /&gt;
&lt;br /&gt;
==Setup git.kde.org==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' Eike, Jeff, Sysadmin team&lt;br /&gt;
&lt;br /&gt;
'''Status:''' ''Progressing''&lt;br /&gt;
&lt;br /&gt;
: It [http://lists.kde.org/?l=kde-scm-interest&amp;amp;m=127612957219466&amp;amp;w=2 has been decided] to use gitolite + Redmine + reviewboard on our own servers rather than gitorious.org.  Sysadmin team is preparing git.kde.org for this.&lt;br /&gt;
&lt;br /&gt;
==Write / update importing rules for svn2git==&lt;br /&gt;
{{Progress bar|35}}&lt;br /&gt;
'''Owner:''' see below - volunteers needed!&lt;br /&gt;
&lt;br /&gt;
'''Status:''' ''sho: ???, tumaix:started to read the docs, cryos: getting started [2010-01-06]''&lt;br /&gt;
&lt;br /&gt;
:The importer is on gitorious.org as svn2git we have a set of rules to tell the importer what svn dirs turn into which git repos and those need constant updating whenever a new branch or tag or project is created. Currently the rules are mostly a rough draft, as seen by the large amount of rule-editing that had to be done for Konversation and Amarok. This has not been done for quite some time and so someone should rsync the svn repo run svn2git and fix the rules and importer whenever the import stops.&lt;br /&gt;
&lt;br /&gt;
:This is a very big task, too big for one person; it's probably best to tackle it one module at a time&lt;br /&gt;
&lt;br /&gt;
:To get started on a module, read [[Projects/MoveToGit/UsingSvn2Git|Using Svn2Git]]&lt;br /&gt;
&lt;br /&gt;
:TZander has done the koffice ruleset as of 2009-01-06&lt;br /&gt;
&lt;br /&gt;
:Jpwhiting has finished (more or less) the kdeaccessibility ruleset 2010-01-24.&lt;br /&gt;
&lt;br /&gt;
:aavci has done the k3b ruleset as of 2010-01-27&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
progress details:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!repo&lt;br /&gt;
!owner&lt;br /&gt;
!%&lt;br /&gt;
!comments&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdeaccessibility&lt;br /&gt;
|jpwhiting&lt;br /&gt;
|99&lt;br /&gt;
|&amp;quot;more or less&amp;quot;?&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdeadmin&lt;br /&gt;
|ruphy&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdeartwork&lt;br /&gt;
|ruphy&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdebase&lt;br /&gt;
|ruphy&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdebindings&lt;br /&gt;
|pumphaus/Arno Rehn&lt;br /&gt;
|100&lt;br /&gt;
|All written, converted and migrated&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdeedu&lt;br /&gt;
|cryos?&lt;br /&gt;
|10&lt;br /&gt;
|[[http://community.kde.org/KDE_Edu#Git_Migration]]&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdeedu/marble&lt;br /&gt;
|jmho&lt;br /&gt;
|100&lt;br /&gt;
|Contains: trunk with moves (playground-&amp;gt;kdereview-&amp;gt;kdeedu), regular kde branches/tags and the following other branches: marble-0.4, gsoc-2009 and geodata-nt. Checking done: gitk --all, verify-git-from-svn&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdeexamples&lt;br /&gt;
|ruphy&lt;br /&gt;
|50&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdegames&lt;br /&gt;
|jobermayr&lt;br /&gt;
|95&lt;br /&gt;
|coolo or mueller do not give me required information for old tags :-(&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdegraphics&lt;br /&gt;
|ruphy&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdelibs&lt;br /&gt;
|ruphy&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdemultimedia&lt;br /&gt;
|eean&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdenetwork&lt;br /&gt;
| grundleborg&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdepim&lt;br /&gt;
|tnyblom&lt;br /&gt;
|100&lt;br /&gt;
|Donen.&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdepim-runtime&lt;br /&gt;
|tnyblom&lt;br /&gt;
|100&lt;br /&gt;
|Done&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdepimlibs&lt;br /&gt;
|tnyblom&lt;br /&gt;
|100&lt;br /&gt;
|Awaits 4.6.0 release&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdeplasma-addons&lt;br /&gt;
|asouza&lt;br /&gt;
|95&lt;br /&gt;
|Verifying&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdesdk&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdetoys&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdeutils&lt;br /&gt;
|jobermayr&lt;br /&gt;
|95&lt;br /&gt;
|coolo or mueller do not give me required information for old tags :-(&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdewebdev&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|extragear/sdk/kdevelop&lt;br /&gt;
| apaku&lt;br /&gt;
| 95&lt;br /&gt;
| trunk and branches complete, need to cleanup tags from cvs days.&lt;br /&gt;
|-&lt;br /&gt;
|extragear/sdk/kdevplatform&lt;br /&gt;
| apaku&lt;br /&gt;
| 100&lt;br /&gt;
| done, all tags seem fine all branches are there&lt;br /&gt;
|-&lt;br /&gt;
|extragear/sdk/kdevelop-plugins&lt;br /&gt;
| nsams&lt;br /&gt;
| 100&lt;br /&gt;
| done&lt;br /&gt;
|-&lt;br /&gt;
|extragear/sdk/quanta&lt;br /&gt;
| nsams&lt;br /&gt;
| 99&lt;br /&gt;
| done&lt;br /&gt;
|-&lt;br /&gt;
|extragear/utils/krecipes&lt;br /&gt;
| santa&lt;br /&gt;
| 85&lt;br /&gt;
| Branches are done, I'm working on tags.&lt;br /&gt;
|-&lt;br /&gt;
|extragear/*/*&lt;br /&gt;
|&lt;br /&gt;
|xx&lt;br /&gt;
|expand the *'s later (let's focus on the base modules first)&lt;br /&gt;
|-&lt;br /&gt;
|kde-common&lt;br /&gt;
|mattr&lt;br /&gt;
|75&lt;br /&gt;
|analyzing import history&lt;br /&gt;
|-&lt;br /&gt;
|kdesupport&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|kdesupport/soprano&lt;br /&gt;
|cgiboudeaux&lt;br /&gt;
|100&lt;br /&gt;
|Ready to migrate&lt;br /&gt;
|-&lt;br /&gt;
|kdesupport/attica&lt;br /&gt;
|cgiboudeaux&lt;br /&gt;
|100&lt;br /&gt;
|Ready to migrate&lt;br /&gt;
|-&lt;br /&gt;
|koffice&lt;br /&gt;
|tzander&lt;br /&gt;
|100&lt;br /&gt;
|Migrated&lt;br /&gt;
|-&lt;br /&gt;
|promo&lt;br /&gt;
|ruphy&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|quality&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tests&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Requirements of KDEPIM and KDAB ==&lt;br /&gt;
&lt;br /&gt;
{{Progress bar|90}}&lt;br /&gt;
'''Owner:''' Stephen Kelly&lt;br /&gt;
&lt;br /&gt;
'''Status:''' ''Proposed workflow identified. Partially depends on KDE policies regarding branches and merging. Gathering estimates for porting of tooling from svn to git. People unfamiliar with the tool are starting to learn to use it.''&lt;br /&gt;
&lt;br /&gt;
'''Estimated completion date''': End of May.&lt;br /&gt;
&lt;br /&gt;
'''Summary of issues'''&lt;br /&gt;
&lt;br /&gt;
* Clean slate&lt;br /&gt;
** The existing backlog of commits which need to be merged or ported to trunk needs to be empty before the change to git so that nothing gets lost. This is a lot of work and will take time. ''Estimate'' 10 calendar weeks.&lt;br /&gt;
* Technical difficulties and limitations.&lt;br /&gt;
** Up to KDE 3.5 there was one kdepim module. For the KDE4 cycle, this was split into kdepimlibs and kdepim. For the above mentioned merging to be possible, it makes sense for both to be in the same git module. This poses extra difficulty to the svn2git script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Email threads'''&lt;br /&gt;
&lt;br /&gt;
* Mid-January thread on scm-interest: http://thread.gmane.org/gmane.comp.kde.devel.pim/26726&lt;br /&gt;
* Early March thread on kde-core-devel (Till email): http://thread.gmane.org/gmane.comp.kde.devel.core/63915/focus=63970&lt;br /&gt;
* Early March thread on kde-core-devel (Till follow-up):&lt;br /&gt;
http://thread.gmane.org/gmane.comp.kde.devel.core/63915/focus=64069&lt;br /&gt;
&lt;br /&gt;
'''Resolved Issues'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Branch maintenance workflow '''Resolution: http://thread.gmane.org/gmane.comp.kde.scm-interest/1310'''&lt;br /&gt;
** KDAB maintains several branches of legacy versions of KDE for enterprise customer deployments. [http://websvn.kde.org:80/branches/kdepim/enterprise/ Enterprise 3.5] [http://websvn.kde.org:80/branches/kdepim/enterprise4/ Enterprise 4 (based on KDE 4.2)]. The current KDEPIM trunk known as Enterprise 5 and is Akonadi based.&lt;br /&gt;
** Periodically (weekly or so), tags are created from the enterprise branches with bugfixes. http://websvn.kde.org:80/tags/kdepim/ Customers can download the tagged versions with the latest updates. Fixes are merged from the Enterprise 3.5 branch, and into trunk (which sometimes involves a lot of work, as the fix must be ported to Akonadi). Additionally, fixes get merged in the other direction. From official KDE modules into the Enterprise branches.&lt;br /&gt;
** Some fixes from Enterprise 3.5 should not be merged into Enterprise 4 for reasons such as no longer being reproducible. Some fixes do not get merged for a long time because they require so much work that porting the fix or feature is deffered. There needs to be a list of commits which should never be merged (blocked commits), and commits which should be merged, but have not been merged yet. The tool [[Development/Tools/svnmerge.py|svnmerge]] is used to facilitate this. svnmerge uses svn properties to maintain lists of commits that are blocked and that have already been integrated. See for example the svn-blocked and svn-integrated properties here: http://websvn.kde.org:80/trunk/KDE/kdepim/. The lists of commits available to be merged into the various branches are here: http://www.kdab.com/~thomas/avail/&lt;br /&gt;
** There needs to be a way in git to keep track of what commits have been merged, what commits need to be merged, and what commits are blocked. There needs to be a way of merging only specific commits from a branch, but not all, and not blocked commits. Proposed solutions:&lt;br /&gt;
*** git cherry-pick allows 'merging' of individual commits, but does not record where the commits came from. Instead it creates a new commit without any reference to where it came from. This alone is unsuitable.&lt;br /&gt;
*** branch per fix. This would lead to an explosion of branches which is not a problem in git as all commits are branches. It may make gitk un-navigatable. There would need to be a naming convention such as komo-merge-&amp;lt;fixname&amp;gt; for branches which should be merged. The commands &amp;lt;tt&amp;gt;git checkout 4.5 &amp;amp;&amp;amp; git merge $(git branch -a | grep -E ^origin/komo-merge)&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;git checkout enterprise4.5 &amp;amp;&amp;amp; git merge $(git branch -a | grep -E ^origin/komo-merge)&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;git checkout master &amp;amp;&amp;amp; git merge $(git branch -a | grep -E ^origin/komo-merge)&amp;lt;/tt&amp;gt;. That could of course be optimized, but gets the point across. If the code has changed so much that the branch is unmergable, but the fix still needs to be in trunk, the system breaks down.&lt;br /&gt;
*** Custom git command with flat text files representing the same information as svnmerge, that is lists of blocked and integrated commits. This is most likely to be a workable solution, possibly together with conventional branch naming.&lt;br /&gt;
* Internal Tools and external customer tools and workflows&lt;br /&gt;
** KDAB is a consumer of KDE software, but also has downstream customers fetching software from where it is developed. That is, KDE SVN. For example packages are created from the tags in tags/kdepim. Some of these downstreams are less close to KDE and depend on current workflows. If KDE SVN is not the place to get those updates anymore, this needs to be communicated to those downstreams, and the tools updated. ''Estimate'' 1 week to port the tools.&lt;br /&gt;
*** Internally used tools have been updated and are now being used to access git repos such as dbus.&lt;br /&gt;
* Other commitments&lt;br /&gt;
** Project deadlines and other commitments prevent the possibility of blocking off time to work on git migration when so many other things need to be done which have milestones separate to KDE cycles. The required work to convert to git can't be prioritized as highly, and so will take more time.&lt;br /&gt;
*** Most of the technical work regarding migration of kdepim repos has been completed by community member Torgny Nyblom.&lt;br /&gt;
* Tool knowledge&lt;br /&gt;
** People who don't currently know how to use git need to get familiar with it so that transitioning will be nearly seamless, and not result in too much development slowdown.&lt;br /&gt;
*** Workshops and use of git-svn have been used to bring developers up to speed on how to use git at some level.&lt;br /&gt;
&lt;br /&gt;
=Nice to have before the migration=&lt;br /&gt;
&lt;br /&gt;
==Push log==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' sysadmin&lt;br /&gt;
&lt;br /&gt;
'''Status:''' finished&lt;br /&gt;
&lt;br /&gt;
It's a push log, similar to a local repository's reflog.&lt;br /&gt;
&lt;br /&gt;
---------------&lt;br /&gt;
&lt;br /&gt;
For every push, log:&lt;br /&gt;
 - who pushed (not the Unix username, which will be &amp;quot;git&amp;quot;)&lt;br /&gt;
 - which branch heads changed (what from, what to)&lt;br /&gt;
 - which tags were created&lt;br /&gt;
 - the state of all other branches and tags&lt;br /&gt;
&lt;br /&gt;
Just use git commit-tree with the empty tree and save everything in the commit &lt;br /&gt;
message, one after the other.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
Gitolite includes this functionality inbuilt to itself, although all repositories are logged in the same file - bcooksley&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Script for downloading virtual KDE hierarchies==&lt;br /&gt;
{{Progress bar|99}}&lt;br /&gt;
'''Owner''': &lt;br /&gt;
&lt;br /&gt;
'''Status:''' &lt;br /&gt;
&lt;br /&gt;
:we already have kdesvn-build, build-tool and mr: three good tools for managing repos.&lt;br /&gt;
&lt;br /&gt;
Most people use kdesrc-build; it will neither eat babies nor kittens. it has options for updating everything or individual modules, can do fetch-only or build-only, etc..&lt;br /&gt;
Command-line options for updating the configuration would be a nice addition.&lt;br /&gt;
&lt;br /&gt;
TODO: details on mr and build-tool&lt;br /&gt;
&lt;br /&gt;
note: scripty also has its own list of repos. it's just in a rather weird bash file.&lt;br /&gt;
&lt;br /&gt;
'''Discussion:''' &lt;br /&gt;
&lt;br /&gt;
As far as I can see, kdesvn-build is able to do it, it should be just a matter of providing a configuration. As I'm not using build-tool, I can't say anything about it. --jmho&lt;br /&gt;
&lt;br /&gt;
'''Links'''&lt;br /&gt;
*[http://kdesvn-build.kde.org/ kdesvn-build]&lt;br /&gt;
*[[Projects/MovetoGit/MassCloneScript]]&lt;br /&gt;
*[http://rubyforge.org/projects/build-tool/ build-tool]&lt;br /&gt;
*TODO: link to mr&lt;br /&gt;
&lt;br /&gt;
==pre-receive hooks==&lt;br /&gt;
{{Progress bar|50}}&lt;br /&gt;
'''Owner:''' ''volunteers needed!!''&lt;br /&gt;
&lt;br /&gt;
* Line endings and encodings&lt;br /&gt;
&lt;br /&gt;
'''Discussion:'''&lt;br /&gt;
this got accidentally marked as done or something, but it's not.&lt;br /&gt;
&lt;br /&gt;
This has now been ported to Git - bcooksley&lt;br /&gt;
&lt;br /&gt;
Note however that it doesn't look for a .gitattributes file yet - patches welcome ( see sysadmin/repo-management on git.kde.org )&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
&amp;gt; &amp;gt; As for line-endings, be careful because Git is different from Subversion.&lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;gt; different how?&lt;br /&gt;
&lt;br /&gt;
Just ensure that all files are stored as LF only, except if there's a &lt;br /&gt;
.gitattributes file saying &amp;quot;-crlf&amp;quot; (i.e., allow it to have CRLF).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Snapshot to read-only svn==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:'''&lt;br /&gt;
&lt;br /&gt;
:It's work, but maybe some people would like it. NEEDED for documentation, in order to get it back into SVN for the translators/scripty/?&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:Could be done with a git-svn gateway presumably? -Mike Arthur 19/10/2009 16:04&lt;br /&gt;
&lt;br /&gt;
:if we leave the docbook stuff in svn, we can avoid this a bit longer. --[[User:Chani|Chani]] 23:21, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Scripty operates on a git clone of the repo's. No need for this item imho -- toma&lt;br /&gt;
&lt;br /&gt;
==[[Development/Tutorials/Git|Techbase Documentation]]==&lt;br /&gt;
'''Owner:''' Chani, greeneg, - ''please help out!''&lt;br /&gt;
{{Progress bar|10}}&lt;br /&gt;
&lt;br /&gt;
:At least minimal documentation about how to checkout, how to request a merge needed, other git documentation and links to other git information would be very useful also.&lt;br /&gt;
&lt;br /&gt;
:see the [[Development/Tutorials/Git|Git Tutorial Page]]. help wanted!!&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Setup git mirrors for cloning==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' sysadmin&lt;br /&gt;
:Re-purpose the anonsvn servers. This item might be a blocker.&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
:sysadmin will add mirrors as needed and is prepared for it. -- toma&lt;br /&gt;
&lt;br /&gt;
==Local pre-commit hooks==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' argonel&lt;br /&gt;
&lt;br /&gt;
:A set of recommended local hooks that give useful warnings could be nice to have.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
...on the other hand, if we get a lot of bikeshedding about what hooks, then it won't be so nice. so I'd put this in the &amp;quot;very optional&amp;quot; pile. --[[User:Chani|Chani]] 19:10, 16 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=Post-migration Issues=&lt;br /&gt;
&lt;br /&gt;
==Website Branding==&lt;br /&gt;
{{Progress bar|50|text=(initial ideas on the table)}}&lt;br /&gt;
'''Owner:''' ruphy&lt;br /&gt;
&lt;br /&gt;
:KDE Gitorious should be branded accordingly, and should be reachable from git.kde.org as well as kde.gitorious.org&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
Is this section still necessary at all? Perhaps some branding has to be done for redmine or cgit, but I don't know. --jmho&lt;br /&gt;
&lt;br /&gt;
Neverendingo is looking at this as needed --toma&lt;br /&gt;
&lt;br /&gt;
=Unscheduled &amp;amp; Open=&lt;br /&gt;
&lt;br /&gt;
==Allow tagging without involving sysadmins==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
&lt;br /&gt;
'''Owner:''' sysadmin&lt;br /&gt;
&lt;br /&gt;
:Gitolite allows sysadmin to permit certain people on certain repos only to manage both branches and tag without needing force push rights.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Account setup for Gitolite==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
&lt;br /&gt;
'''Owner:''' ''sysadmin''&lt;br /&gt;
&lt;br /&gt;
:Accounts for existing SVN accounts which use SSH for access have been automatically granted access to Gitolite. Those who are still using HTTPS need to file a sysadmin bug to change their SVN account to SSH and will recieve Git access automatically.&lt;br /&gt;
&lt;br /&gt;
==post-update hooks==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' ''morice'' ''Ian Monroe''&lt;br /&gt;
&lt;br /&gt;
:* License checker&lt;br /&gt;
&lt;br /&gt;
'''Discussion:'''&lt;br /&gt;
We have a fairly complete set of post-update hooks now. See [http://gitorious.org/remotehook remotehook]. However, it would be nice to have a system that lives on the Gitorious server and/or requires less manual maintenance. But its certainly workable and no longer a blocker.&lt;br /&gt;
&lt;br /&gt;
Working fine in the new setup, --toma&lt;br /&gt;
&lt;br /&gt;
=Completed Tasks=&lt;br /&gt;
&lt;br /&gt;
==Get rid of svn:externals==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' David Faure&lt;br /&gt;
&lt;br /&gt;
'''Status:''' ''???''&lt;br /&gt;
&lt;br /&gt;
:not possible with git, broken by design.&lt;br /&gt;
&lt;br /&gt;
::&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
Exists, but ignorable:&lt;br /&gt;
* kdesupport shared-desktop-ontologies (temporary)&lt;br /&gt;
* playground/utils strigi-chemical/test/ctfr&lt;br /&gt;
* playground/devtools kdevelop4-extra-plugins/php/parser/generated/kdevelop-pg-qt&lt;br /&gt;
* playground/devtools kdevelop4-extra-plugins/python/parser/generated/kdevelop-pg-qt&lt;br /&gt;
* playground/devtools kdevelop4-extra-plugins/qmake/parser/generated/kdevelop-pg-qt&lt;br /&gt;
* playground/devtools kommander-plugins/database3/admin&lt;br /&gt;
* playground/devtools kommander-plugins/database/admin&lt;br /&gt;
* playground/devtools kommander-plugins/datetimefuncs/admin&lt;br /&gt;
* playground/devtools kommander-plugins/htmlpart/admin&lt;br /&gt;
* playground/devtools kommander-plugins/httpform/admin&lt;br /&gt;
* playground/devtools kommander-plugins/kparts/admin&lt;br /&gt;
* playground/devtools kommander-plugins/qtactionproxy/admin&lt;br /&gt;
* playground/devtools kommander-plugins/timewidget/admin&lt;br /&gt;
* playground/devtools kommander-plugins/webkit3/admin&lt;br /&gt;
* playground/devtools kpackagemaker/admin&lt;br /&gt;
&lt;br /&gt;
==EBN==&lt;br /&gt;
{{Progress bar|95}}&lt;br /&gt;
'''Owner:''' ''drf''&lt;br /&gt;
&lt;br /&gt;
'''Status:''' ''Amarok has EBN checks''&lt;br /&gt;
&lt;br /&gt;
:EBN's krazy checks currently run on kde's svn repo; it needs upgrading to download and check our git repos too.&lt;br /&gt;
&lt;br /&gt;
:This would be easier if there was a repo-list that EBN could parse, as it can no longer just svn up to get everything.&lt;br /&gt;
&lt;br /&gt;
==Talk to people using other distros about git==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' Sebas, Eike&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
* Gentoo: They seem to be prepared for moving their live SVN packages to git; their package manager has easily-reusable classes to fetch from an SCM and moving the ebuilds to using the git class rather than the SVN class should be easy. Positive comments to that end from people in #gentoo-kde.&lt;br /&gt;
* Fedora: Some unhappyness about git because SVN allows them to remotely produce a diff between two SVN URLs (or two revisions of one and the same URL) without making a checkout first, while git requires making a clone. Kevin Kofler (IRC nick Kevin_Kofler, #fedora-kde) says this will make their packager work harder.&lt;br /&gt;
* Debian: Is indifferent about the SCM switch.&lt;br /&gt;
&lt;br /&gt;
==Post Update hooks==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' ''morice, johan, mattr&lt;br /&gt;
&lt;br /&gt;
:List of scripts needed:&lt;br /&gt;
:* BUG/CCMAIL&lt;br /&gt;
:* email/CIA&lt;br /&gt;
&lt;br /&gt;
:Gitorious needs to provide a way for hooks to be called; KDE needs to write said hooks.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:There is a branch of gitorious called web-hooks http://gitorious.org/gitorious/mainline/commits/web-hooks --Panagiotis Papadopoulos 1 November 2009&lt;br /&gt;
:Same situation as commit emails. I can do it but it doesn't scale well and a Gitorious-supported solution would be nicer. --[[User:Eean|eean]] 16:07, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Reviewboard==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' darktears&lt;br /&gt;
&lt;br /&gt;
This should be easily done with Gitorious web interface and merge requests actually.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:but reviewboard has features gitorious (right now) doesn't, like commenting on specific lines and not having to set up a merge request. --chani&lt;br /&gt;
::Also email notifications when someone reviews are needed --thomasz&lt;br /&gt;
:We're working on this for someone else right now, so pretty soon --johan-s&lt;br /&gt;
:I consider the latest changes to gitorious to finish this. If more reviewboard features are still needed, and git supports reviewboard, I think this is something we can look at doing post-conversion. --Ian Monroe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Gitorious Needs a feature to disable merge request emails for certain repos==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' [http://gitorious.org/gitorious Gitorious]&lt;br /&gt;
&lt;br /&gt;
Have a sensible system for merge request emails.  This is now in place - you can join groups, chose whether to have emails on a per repo basis, etc.&lt;br /&gt;
&lt;br /&gt;
==SSH blocked in corporations and universities.==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' ''Unknown''&lt;br /&gt;
&lt;br /&gt;
:Some universities tend to block the SSH port. There should be a workaround to use SSH on some different port. github.com already runs a SSH server on port 443. But that assumes you are using a proxy. It has been found that this hasn't worked with a lot of people, especially those who have a direct connection to the internet ( so some transparent blocking by the ISP ). It would be great if (almost) every KDE developer were to be asked to check if other ports work before KDE made the switch. Otherwise there could be an automated email where the git patches could be sent, and appropriately patched to the right location too.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:http://blog.gitorious.org/2009/10/20/stuck-behind-a-firewall/, and there's always been HTTP cloning (although the current impl. in Git is a bit on the slow side) --johan-s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Talk to windows guys about git.==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:'''  aseigo&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
They aren't huge fans of git, but are using it. They require a single mainline and can't cope with multiple branches. Otherwise, it's workable, even if it will take an adjustment period.&lt;br /&gt;
&lt;br /&gt;
==pre-commit hooks==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' ''(unknown)''&lt;br /&gt;
&lt;br /&gt;
:acltest, docbook, EOL/UTF-8&lt;br /&gt;
&lt;br /&gt;
:A web hook isn't good enough for these because they have to run and return whether to allow the push, for every single push to every KDE repo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:gitorious guys said they *might* be willing to allow a few scripts on their server for KDE as a special exception, iirc. --chani&lt;br /&gt;
&lt;br /&gt;
:: Yes, at least for basic things, heavier things like doc building would probably have to be mirrored (goes for pre/post) --johan-s&lt;br /&gt;
&lt;br /&gt;
:It turns out that acl and docbook might not be needed so long as web and docs/ stuff stays in svn.&lt;br /&gt;
&lt;br /&gt;
:: Here's where to find the current scripts - http://websvn.kde.org/trunk/kde-common/svn/hooks/ --[[User:Argonel|Argonel]] 23:06, 11 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So: this is actually done because it needs no longer to be done? (boud)&lt;br /&gt;
&lt;br /&gt;
::Apparently, so; moving to complete. (aseigo)&lt;br /&gt;
&lt;br /&gt;
= other notes =&lt;br /&gt;
&lt;br /&gt;
==kde-common/accounts==&lt;br /&gt;
&lt;br /&gt;
Someone said: KDE accounts file is no longer necessary---used for mapping svn ID -&amp;gt; email, but we have that now from Gitorious.&lt;br /&gt;
Answer from David Faure: I strongly disagree. We still need a KDE accounts file. This is very useful for finding people's email addresses, and having an overview on the number of active kde contributors; and if we keep it we can even have a kdepim resource again for filling an addressbook from it, for completion in kmail's composer (so you can write to any other kde contributor by just typing his/her name). It's also used for populating automatically the kde-cvs-announce mailing-list, for announcements. kde-common/accounts is our family tree (well, list), let's not get rid of it.&lt;br /&gt;
&lt;br /&gt;
Here's my proposal for a kde-common/accounts replacement for the git era: We write a post-receive hook that looks at every commit and records all known email addresses for a given real name as well as the commit hash and date of when an address was last encountered. We can then present that data in the form of a file like kde-common/accounts, or write a web interface to query it (with nice links to the commits on Gitorious, etc.) --Eike (Sho_ on IRC)&lt;br /&gt;
&lt;br /&gt;
To clear up possible confusion: The author information for a given commit is baked into the commit object itself, and comes from the configuration of the git repository it was created in. It is unrelated to any Gitorious account. Due to the distributed nature of Git, the one who uses his Gitorious account to push a commit need not be the same who created it. If Developer A creates a commit in his local clone and Developer B fetches it into his local clone directly from Developer A's machine and then pushes it into the public repo, the repo will only show a commit from Developer A. The Gitorious website will show that Developer B has pushed up a commit from Developer A, but that data is not contained in the repository. Thus collecting only Gitorious accounts and their mail addresses is insufficient. --Eike&lt;br /&gt;
&lt;br /&gt;
==Random==&lt;br /&gt;
http://mail.kde.org/pipermail/dot-stories/2005-May/000509.html might be a good guide on what docs we need.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
some of this stuff was from the list from GCDS that was in this email [http://markmail.org/message/u6eqfjece7fibfyo http://markmail.org/message/u6eqfjece7fibfyo]&lt;br /&gt;
&lt;br /&gt;
==IRC Meetings==&lt;br /&gt;
* [[Projects/MovetoGit/Meeting1111|Minutes]] of meeting 11 November 2009&lt;br /&gt;
* [[Projects/MovetoGit/Meeting1118|Next meeting]] 18:00, 25 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
= jobs =&lt;br /&gt;
''TODO merge this with the todolists above''&lt;br /&gt;
&lt;br /&gt;
michael jansen: talking to kdesvn-build/mpyne&lt;br /&gt;
:--Done? -&amp;gt; http://kdesvn-build.kde.org/releases/kdesvn-build-1.10.php -- Panagiotis Papadopoulos 1 November 2009&lt;br /&gt;
::Yes, but the __kdesvn-build-remote used in the impl isn't pleasant for users already on git so it still needs more work for them. [[User:Mpyne|Mpyne]] 20:32, 11 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
jonas: domain name &lt;br /&gt;
&lt;br /&gt;
chani: techbase docs for scripty &lt;br /&gt;
&lt;br /&gt;
sebas/lydia/leo: communication with teams! tell people! keeping track that &lt;br /&gt;
everything is being done.&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/MovetoGit</id>
		<title>Projects/MovetoGit</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/MovetoGit"/>
				<updated>2010-03-08T19:46:59Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Write / update importing rules for svn2git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the page for co-ordinating KDE's move to [http://git-scm.com/ Git].&lt;br /&gt;
&lt;br /&gt;
If you're interested in helping, you should join the [https://mail.kde.org/mailman/listinfo/kde-scm-interest kde-scm-interest@kde.org] mailinglist and [irc://chat.freenode.net/kde-git #kde-git] on freenode.&lt;br /&gt;
&lt;br /&gt;
Meetings are wednesdays, 19:30 UTC, in #kde-git.&lt;br /&gt;
&lt;br /&gt;
=The Plan=&lt;br /&gt;
&lt;br /&gt;
KDE is, eventually, moving to Git. We will be using [http://gitorious.org/ gitorious.org] servers, with funding from Nokia. We will also have our own mirrors using existing KDE servers.&lt;br /&gt;
&lt;br /&gt;
We are working with the Gitorious people to ensure their server will meet all our needs as well as everyone's privacy requirements. The distributed nature of Git will make it easy for us to migrate off gitorious.org at any time should the need arise (but that's unlikely :).&lt;br /&gt;
&lt;br /&gt;
In the summer of 2009, [http://gitorious.org/amarok Amarok] moved to Gitorious to test the waters and find problems that would affect KDE. Once those problems have been solved, all of KDE will be able to switch.&lt;br /&gt;
&lt;br /&gt;
==Why?==&lt;br /&gt;
&lt;br /&gt;
Git offers many advantages over svn, including offline commits and much easier to keep a feature branch up-to-date. Many KDE developers are already using git-svn, but this tool has its limitations. We want to have the full power of Git available, and we have people willing to do the work necessary to migrate.&lt;br /&gt;
&lt;br /&gt;
==How?==&lt;br /&gt;
&lt;br /&gt;
When we move, KDE's svn repository will be migrated into several Git repos, all on gitorious.org. Main modules such as kdelibs and kdebase will each become one repository. Projects in extragear will each have their own repository. The kde.gitorious.org site will have a list (lists?) of all these repositories using the builtin project wiki. Scripts will be provided for downloading, say, all of extragear, so &amp;quot;moving&amp;quot; a project from kdereview to extragear would simply involve editing a file kept online that defined the location of projects.&lt;br /&gt;
&lt;br /&gt;
A few things will stay in subversion - currently websites, translations and manuals. It's possible they could move to Git later, but they won't be part of the mass migration.&lt;br /&gt;
&lt;br /&gt;
On Gitorious, all KDE developers will be part of the [http://gitorious.org/+kde-developers kde-developers group]. Developers in this group are required to set their &amp;quot;full name&amp;quot; for their Gitorious account to their real name. If you want to be in this group, file a bugreport for sysadmin on bugs.kde.org. :)&lt;br /&gt;
&lt;br /&gt;
The procedure to move a project from svn to gitorious.org can be found in [[Projects/MoveToGit/StepsToMove|Steps to follow for Moving]].&lt;br /&gt;
&lt;br /&gt;
=Blockers=&lt;br /&gt;
&lt;br /&gt;
Tasks that need to get done before we can migrate&lt;br /&gt;
&lt;br /&gt;
==SLA for gitorious.org==&lt;br /&gt;
{{Progress bar|30}}&lt;br /&gt;
'''Owner:''' aseigo, frank&lt;br /&gt;
&lt;br /&gt;
'''Status:''' ''Progressing well; will take a while''&lt;br /&gt;
&lt;br /&gt;
: The SLA terms need to be documented as well as who will be footing the bill, if any. TZander has talked to Shortcut AS and sent the relevant information (eg cost) to the KDE eV board.&lt;br /&gt;
&lt;br /&gt;
: aseigo and Frank (and someone?) had a meeting with Shortcut people during tokamak. They asked for a rather large sum of money; negotiations are continuing, but we might want to consider hosting our own server...&lt;br /&gt;
&lt;br /&gt;
==Write / update importing rules for svn2git==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' see below - volunteers needed!&lt;br /&gt;
&lt;br /&gt;
'''Status:''' ''sandsmark: stuck on a svn2git bug. sho: ???, tumaix:started to read the docs, cryos: getting started [2010-01-06]''&lt;br /&gt;
&lt;br /&gt;
:The importer is on gitorious.org as svn2git we have a set of rules to tell the importer what svn dirs turn into which git repos and those need constant updating whenever a new branch or tag or project is created. Currently the rules are mostly a rough draft, as seen by the large amount of rule-editing that had to be done for Konversation and Amarok. This has not been done for quite some time and so someone should rsync the svn repo run svn2git and fix the rules and importer whenever the import stops.&lt;br /&gt;
&lt;br /&gt;
:This is a very big task, too big for one person; it's probably best to tackle it one module at a time&lt;br /&gt;
&lt;br /&gt;
:To get started on a module, read [[Projects/MoveToGit/UsingSvn2Git|Using Svn2Git]]&lt;br /&gt;
&lt;br /&gt;
:TZander has done the koffice ruleset as of 2009-01-06&lt;br /&gt;
&lt;br /&gt;
:Jpwhiting has finished (more or less) the kdeaccessibility ruleset 2010-01-24.&lt;br /&gt;
&lt;br /&gt;
:aavci has done the k3b ruleset as of 2010-01-27&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
progress details:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!repo&lt;br /&gt;
!owner&lt;br /&gt;
!%&lt;br /&gt;
!comments&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdeaccessibility&lt;br /&gt;
|jpwhiting&lt;br /&gt;
|99&lt;br /&gt;
|&amp;quot;more or less&amp;quot;?&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdeadmin&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdeartwork&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdebase&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdebindings&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdeedu&lt;br /&gt;
|cryos?&lt;br /&gt;
|?&lt;br /&gt;
|update me!&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdeexamples&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdegames&lt;br /&gt;
|tumaix?&lt;br /&gt;
|?&lt;br /&gt;
|update me!&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdegraphics&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdelibs&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdemultimedia&lt;br /&gt;
|eean&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdenetwork&lt;br /&gt;
| grundleborg&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdepim&lt;br /&gt;
|tnyblom&lt;br /&gt;
|0&lt;br /&gt;
|Just getting started Help needed.&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdepimlibs&lt;br /&gt;
|tnyblom&lt;br /&gt;
|0&lt;br /&gt;
|Just getting started Help needed.&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdeplasma-addons&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdesdk&lt;br /&gt;
|mattr&lt;br /&gt;
|0&lt;br /&gt;
|just starting&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdetoys&lt;br /&gt;
|mattr&lt;br /&gt;
|0&lt;br /&gt;
|just starting&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdeutils&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SC/kdewebdev&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|extragear/sdk/kdevelop&lt;br /&gt;
| apaku&lt;br /&gt;
| 85&lt;br /&gt;
| Misses history from KDE3.3 and older (KDevelop3.2), probably something with layout-changes, might need recurse-action but don't know how to do it.&lt;br /&gt;
|-&lt;br /&gt;
|extragear/sdk/kdevplatform&lt;br /&gt;
| apaku&lt;br /&gt;
| 100&lt;br /&gt;
| done, all tags seem fine all branches are there&lt;br /&gt;
|-&lt;br /&gt;
|extragear/*/*&lt;br /&gt;
|&lt;br /&gt;
|xx&lt;br /&gt;
|expand the *'s later (let's focus on the base modules first)&lt;br /&gt;
|-&lt;br /&gt;
|kde-common&lt;br /&gt;
|mattr&lt;br /&gt;
|0&lt;br /&gt;
|just starting&lt;br /&gt;
|-&lt;br /&gt;
|kdesupport&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|koffice&lt;br /&gt;
|tzander&lt;br /&gt;
|85&lt;br /&gt;
|All but tags are done&lt;br /&gt;
|-&lt;br /&gt;
|promo&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|quality&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|tests&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Requirements of KDEPIM and KDAB ==&lt;br /&gt;
&lt;br /&gt;
{{Progress bar|10}}&lt;br /&gt;
'''Owner:''' till (To be reassigned)&lt;br /&gt;
&lt;br /&gt;
'''Status:''' ''Requirements of tools and for workflow identified. Someone from KDAB will be nominated to co-ordinate and communicate specific requirements''&lt;br /&gt;
&lt;br /&gt;
'''Summary of issues'''&lt;br /&gt;
&lt;br /&gt;
* Branch maintenance workflow&lt;br /&gt;
** KDAB maintains several branches of legacy versions of KDE for enterprise customer deployments. [http://websvn.kde.org:80/branches/kdepim/enterprise/ Enterprise 3.5] [http://websvn.kde.org:80/branches/kdepim/enterprise4/ Enterprise 4 (based on KDE 4.2)]. The current KDEPIM trunk known as Enterprise 5 and is Akonadi based.&lt;br /&gt;
** Periodically (weekly or so), tags are created from the enterprise branches with bugfixes. http://websvn.kde.org:80/tags/kdepim/ Customers can download the tagged versions with the latest updates. Fixes are merged from the Enterprise 3.5 branch, and into trunk (which sometimes involves a lot of work, as the fix must be ported to Akonadi). Additionally, fixes get merged in the other direction. From official KDE modules into the Enterprise branches.&lt;br /&gt;
** Some fixes from Enterprise 3.5 should not be merged into Enterprise 4 for reasons such as no longer being reproducible. Some fixes do not get merged for a long time because they require so much work that porting the fix or feature is deffered. There needs to be a list of commits which should never be merged (blocked commits), and commits which should be merged, but have not been merged yet. The tool [[Development/Tools/svnmerge.py|svnmerge]] is used to facilitate this. svnmerge uses svn properties to maintain lists of commits that are blocked and that have already been integrated. See for example the svn-blocked and svn-integrated properties here: http://websvn.kde.org:80/trunk/KDE/kdepim/. The lists of commits available to be merged into the various branches are here: http://www.kdab.com/~thomas/avail/&lt;br /&gt;
** There needs to be a way in git to keep track of what commits have been merged, what commits need to be merged, and what commits are blocked. There needs to be a way of merging only specific commits from a branch, but not all, and not blocked commits. Proposed solutions:&lt;br /&gt;
*** git cherry-pick allows 'merging' of individual commits, but does not record where the commits came from. Instead it creates a new commit without any reference to where it came from. This alone is unsuitable.&lt;br /&gt;
*** branch per fix. This would lead to an explosion of branches which is not a problem in git as all commits are branches. It may make gitk un-navigatable. There would need to be a naming convention such as komo-merge-&amp;lt;fixname&amp;gt; for branches which should be merged. The commands &amp;lt;tt&amp;gt;git checkout 4.5 &amp;amp;&amp;amp; git merge $(git branch -a | grep -E ^origin/komo-merge)&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;git checkout enterprise4.5 &amp;amp;&amp;amp; git merge $(git branch -a | grep -E ^origin/komo-merge)&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;git checkout master &amp;amp;&amp;amp; git merge $(git branch -a | grep -E ^origin/komo-merge)&amp;lt;/tt&amp;gt;. That could of course be optimized, but gets the point across. If the code has changed so much that the branch is unmergable, but the fix still needs to be in trunk, the system breaks down.&lt;br /&gt;
*** Custom git command with flat text files representing the same information as svnmerge, that is lists of blocked and integrated commits. This is most likely to be a workable solution, possibly together with conventional branch naming.&lt;br /&gt;
* Clean slate&lt;br /&gt;
** The existing backlog of commits which need to be merged or ported to trunk needs to be empty before the change to git so that nothing gets lost. This is a lot of work and will take time.&lt;br /&gt;
* Internal Tools and external customer tools and workflows&lt;br /&gt;
** KDAB is a consumer of KDE software, but also has downstream customers fetching software from where it is developed. That is, KDE SVN. For example packages are created from the tags in tags/kdepim. Some of these downstreams are less close to KDE and depend on current workflows. If KDE SVN is not the place to get those updates anymore, this needs to be communicated to those downstreams, and the tools updated.&lt;br /&gt;
** People who don't currently know how to use git need to get familiar with it so that transitioning will be nearly seamless, and not result in too much development slowdown.&lt;br /&gt;
* Other commitments&lt;br /&gt;
** Project deadlines and other commitments prevent the possiblity of blocking off time to work on git migration when so many other things need to be done which have milestones separate to KDE cycles. The required work to convert to git can't be prioritized as highly, and so will take more time.&lt;br /&gt;
* Technical difficulties and limitations.&lt;br /&gt;
** Up to KDE 3.5 there was one kdepim module. For the KDE4 cycle, this was split into kdepimlibs and kdepim. For the above mentioned merging to be possible, it makes sense for both to be in the same git module. This poses extra difficulty to the svn2git script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Email threads'''&lt;br /&gt;
&lt;br /&gt;
* Mid-January thread on scm-interest: http://thread.gmane.org/gmane.comp.kde.devel.pim/26726&lt;br /&gt;
* Early March thread on kde-core-devel (Till email): http://thread.gmane.org/gmane.comp.kde.devel.core/63915/focus=63970&lt;br /&gt;
* Early March thread on kde-core-devel (Till follow-up):&lt;br /&gt;
http://thread.gmane.org/gmane.comp.kde.devel.core/63915/focus=64069&lt;br /&gt;
&lt;br /&gt;
=Nice to have before the migration=&lt;br /&gt;
&lt;br /&gt;
==Push log==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' nobody!!&lt;br /&gt;
&lt;br /&gt;
'''Status:''' argonel had a hd failure :( [2010-01-06]&lt;br /&gt;
&lt;br /&gt;
:Gitorious records who pushed each commit.  This is useful information because commits themselves can say anything, and there are legitimate reasons to push commits with another person's name.&lt;br /&gt;
&lt;br /&gt;
:Internally, Gitorious stores this information in an SQL database, and the information is viewable through the web interface.  However we want a way to backup this information for the case that Gitorious suddenly go offline.&lt;br /&gt;
&lt;br /&gt;
:quotes from the mailing list:&lt;br /&gt;
&lt;br /&gt;
&amp;gt; How about every repo has, by convention, a &amp;quot;commits&amp;quot; branch and&lt;br /&gt;
&amp;gt; a post commit hook that ensures whatever meta info is required,&lt;br /&gt;
&amp;gt; however it can be gleaned, is also checked into that commits branch.&lt;br /&gt;
&amp;gt; A bit like how gitosis uses a repo to store auth/acl info to help&lt;br /&gt;
&amp;gt; manage the other repos.&lt;br /&gt;
&lt;br /&gt;
That's exactly my idea. And of course it won't be named commits, because we're &lt;br /&gt;
not talking about commits.&lt;br /&gt;
&lt;br /&gt;
It's a push log, similar to a local repository's reflog.&lt;br /&gt;
&lt;br /&gt;
---------------&lt;br /&gt;
&lt;br /&gt;
For every push, log:&lt;br /&gt;
 - who pushed (not the Unix username, which will be &amp;quot;git&amp;quot;)&lt;br /&gt;
 - which branch heads changed (what from, what to)&lt;br /&gt;
 - which tags were created&lt;br /&gt;
 - the state of all other branches and tags&lt;br /&gt;
&lt;br /&gt;
Just use git commit-tree with the empty tree and save everything in the commit &lt;br /&gt;
message, one after the other.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
This does not require help from gitorious.org until the script is actually written: it's just another pre-receive hook for them to install on their servers.&lt;br /&gt;
it *might* also be possible to run it as a post-receive hook (in which case we can do the whole thing ourselves).&lt;br /&gt;
&lt;br /&gt;
if we self-host, then we won't need this.&lt;br /&gt;
&lt;br /&gt;
==Script for downloading virtual KDE hierarchies==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner''': &lt;br /&gt;
&lt;br /&gt;
'''Status:''' &lt;br /&gt;
&lt;br /&gt;
:Let's start over on this.&lt;br /&gt;
what we already have: two build scripts for kde; kdesvn-build and build-tool.&lt;br /&gt;
what we want: an easy way for people to get large chunks of kde, without thinking about what urls the repos come from or having to look things up.&lt;br /&gt;
&lt;br /&gt;
do kde-svnbuild and build-tool satisfy this well enough?&lt;br /&gt;
or do we want a computer-readable file listing all the repos too?&lt;br /&gt;
&lt;br /&gt;
btw, scripty has its own list of repos already. it's just in a rather weird bash file.&lt;br /&gt;
&lt;br /&gt;
'''Links'''&lt;br /&gt;
[http://kdesvn-build.kde.org/]&lt;br /&gt;
[[Projects/MovetoGit/MassCloneScript]]&lt;br /&gt;
[http://rubyforge.org/projects/build-tool/]&lt;br /&gt;
&lt;br /&gt;
==pre-receive hooks==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' ''volunteers needed!!''&lt;br /&gt;
&lt;br /&gt;
* Line endings and encodings&lt;br /&gt;
&lt;br /&gt;
'''Discussion:'''&lt;br /&gt;
this got accidentally marked as done or something, but it's not.&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
&amp;gt; &amp;gt; As for line-endings, be careful because Git is different from Subversion.&lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;gt; different how?&lt;br /&gt;
&lt;br /&gt;
Just ensure that all files are stored as LF only, except if there's a &lt;br /&gt;
.gitattributes file saying &amp;quot;-crlf&amp;quot; (i.e., allow it to have CRLF).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Snapshot to read-only svn==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:'''&lt;br /&gt;
&lt;br /&gt;
:It's work, but maybe some people would like it. NEEDED for documentation, in order to get it back into SVN for the translators/scripty/?&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:Could be done with a git-svn gateway presumably? -Mike Arthur 19/10/2009 16:04&lt;br /&gt;
&lt;br /&gt;
:if we leave the docbook stuff in svn, we can avoid this a bit longer. --[[User:Chani|Chani]] 23:21, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==[[Development/Tutorials/Git|Techbase Documentation]]==&lt;br /&gt;
'''Owner:''' Chani, greeneg, - ''please help out!''&lt;br /&gt;
{{Progress bar|10}}&lt;br /&gt;
&lt;br /&gt;
:At least minimal documentation about how to checkout, how to get a Gitorious account, how to request a merge needed, other git documentation and links to other git information would be very useful also.&lt;br /&gt;
&lt;br /&gt;
:see the [[Development/Tutorials/Git|Git Tutorial Page]]. help wanted!!&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Setup git mirrors for cloning==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' No one (help!)&lt;br /&gt;
:Re-purpose the anonsvn servers. This item might be a blocker.&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Local pre-commit hooks==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' argonel&lt;br /&gt;
&lt;br /&gt;
:A set of recommended local hooks that give useful warnings could be nice to have.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
...on the other hand, if we get a lot of bikeshedding about what hooks, then it won't be so nice. so I'd put this in the &amp;quot;very optional&amp;quot; pile. --[[User:Chani|Chani]] 19:10, 16 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=Post-migration Issues=&lt;br /&gt;
&lt;br /&gt;
==Website Branding==&lt;br /&gt;
{{Progress bar|2|text=(initial ideas on the table)}}&lt;br /&gt;
'''Owner:''' ruphy&lt;br /&gt;
&lt;br /&gt;
:KDE Gitorious should be branded accordingly, and should be reachable from git.kde.org as well as kde.gitorious.org&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
=Unscheduled &amp;amp; Open=&lt;br /&gt;
&lt;br /&gt;
==Allow tagging without involving sysadmins==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
&lt;br /&gt;
'''Owner:''' johan&lt;br /&gt;
&lt;br /&gt;
:Pushing a tag currently requires permissions to do a force push, which is a repository-wide checkbox that can only be toggled by a kde-developers admin. Thus the workflow for a dev wanting to do a release tag for his app is to ask an admin to enable force pushing, then to push his tag, and then to tell the admin he can disable force pushing again. This doesn't scale, is insecure, and at odds with KDE's open access policy when it comes to managing the repos (right now in SVN, you need sysadmin to create an app dir in /tags for you, but don't have to ask permission for every individual tag). Johan has promised a solution for this.&lt;br /&gt;
&lt;br /&gt;
:Notable discussion points on kde-scm-interest:&lt;br /&gt;
:http://mail.kde.org/pipermail/kde-scm-interest/2009-November/000782.html&lt;br /&gt;
:http://mail.kde.org/pipermail/kde-scm-interest/2009-November/000784.html&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Account setup on Gitorious==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
&lt;br /&gt;
'''Owner:''' ''eean, johan, boud, dario''&lt;br /&gt;
&lt;br /&gt;
:Creating an account on Gitorious isn't hard, but asking to be added to the KDE group is inconvenient. For the migration we should set up a system (via email or wiki?) where developers can ask to have an account autocreated for them, or add their existing Gitorious account to a list to be added to the group. Once this is in place an announcement should be sent to all svn accounts explaining the process, and privacy information.&lt;br /&gt;
&lt;br /&gt;
:Basically the currently method of using Bugzilla works fine now and works fine in the longterm. But in the transition month when hundreds of accounts must be created or added, we need a better system. Its important to make it as easy as possible so that we don't lose anyone in the shuffle.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
: I think most people have made their own accounts by now. this isn't really needed.&lt;br /&gt;
&lt;br /&gt;
==post-update hooks==&lt;br /&gt;
{{Progress bar|90}}&lt;br /&gt;
'''Owner:''' ''morice'' ''Ian Monroe''&lt;br /&gt;
&lt;br /&gt;
:* License checker&lt;br /&gt;
&lt;br /&gt;
'''Discussion:'''&lt;br /&gt;
We have a fairly complete set of post-update hooks now. See [http://gitorious.org/remotehook remotehook]. However, it would be nice to have a system that lives on the Gitorious server and/or requires less manual maintenance. But its certainly workable and no longer a blocker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Completed Tasks=&lt;br /&gt;
&lt;br /&gt;
==Get rid of svn:externals==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' David Faure&lt;br /&gt;
&lt;br /&gt;
'''Status:''' ''???''&lt;br /&gt;
&lt;br /&gt;
:not possible with git, broken by design.&lt;br /&gt;
&lt;br /&gt;
::&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
Exists, but ignorable:&lt;br /&gt;
* kdesupport shared-desktop-ontologies (temporary)&lt;br /&gt;
* playground/utils strigi-chemical/test/ctfr&lt;br /&gt;
* playground/devtools kdevelop4-extra-plugins/php/parser/generated/kdevelop-pg-qt&lt;br /&gt;
* playground/devtools kdevelop4-extra-plugins/python/parser/generated/kdevelop-pg-qt&lt;br /&gt;
* playground/devtools kdevelop4-extra-plugins/qmake/parser/generated/kdevelop-pg-qt&lt;br /&gt;
* playground/devtools kommander-plugins/database3/admin&lt;br /&gt;
* playground/devtools kommander-plugins/database/admin&lt;br /&gt;
* playground/devtools kommander-plugins/datetimefuncs/admin&lt;br /&gt;
* playground/devtools kommander-plugins/htmlpart/admin&lt;br /&gt;
* playground/devtools kommander-plugins/httpform/admin&lt;br /&gt;
* playground/devtools kommander-plugins/kparts/admin&lt;br /&gt;
* playground/devtools kommander-plugins/qtactionproxy/admin&lt;br /&gt;
* playground/devtools kommander-plugins/timewidget/admin&lt;br /&gt;
* playground/devtools kommander-plugins/webkit3/admin&lt;br /&gt;
* playground/devtools kpackagemaker/admin&lt;br /&gt;
&lt;br /&gt;
==EBN==&lt;br /&gt;
{{Progress bar|95}}&lt;br /&gt;
'''Owner:''' ''drf''&lt;br /&gt;
&lt;br /&gt;
'''Status:''' ''Amarok has EBN checks''&lt;br /&gt;
&lt;br /&gt;
:EBN's krazy checks currently run on kde's svn repo; it needs upgrading to download and check our git repos too.&lt;br /&gt;
&lt;br /&gt;
:This would be easier if there was a repo-list that EBN could parse, as it can no longer just svn up to get everything.&lt;br /&gt;
&lt;br /&gt;
==Talk to people using other distros about git==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' Sebas, Eike&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
* Gentoo: They seem to be prepared for moving their live SVN packages to git; their package manager has easily-reusable classes to fetch from an SCM and moving the ebuilds to using the git class rather than the SVN class should be easy. Positive comments to that end from people in #gentoo-kde.&lt;br /&gt;
* Fedora: Some unhappyness about git because SVN allows them to remotely produce a diff between two SVN URLs (or two revisions of one and the same URL) without making a checkout first, while git requires making a clone. Kevin Kofler (IRC nick Kevin_Kofler, #fedora-kde) says this will make their packager work harder.&lt;br /&gt;
* Debian: Is indifferent about the SCM switch.&lt;br /&gt;
&lt;br /&gt;
==Post Update hooks==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' ''morice, johan, mattr&lt;br /&gt;
&lt;br /&gt;
:List of scripts needed:&lt;br /&gt;
:* BUG/CCMAIL&lt;br /&gt;
:* email/CIA&lt;br /&gt;
&lt;br /&gt;
:Gitorious needs to provide a way for hooks to be called; KDE needs to write said hooks.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:There is a branch of gitorious called web-hooks http://gitorious.org/gitorious/mainline/commits/web-hooks --Panagiotis Papadopoulos 1 November 2009&lt;br /&gt;
:Same situation as commit emails. I can do it but it doesn't scale well and a Gitorious-supported solution would be nicer. --[[User:Eean|eean]] 16:07, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Opt-in privacy exception required for kde-developers==&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' ''Gitorious'', ''KDE e.V. Board'', ''eean''&lt;br /&gt;
&lt;br /&gt;
:KDE sysadmins need access to some information that Shortcut could not give them due to their privacy policy. Examples include an email list of all the developers and SQL-level access to information about all the repos in KDE (since it stores who pushes what, information not stored in the git repo itself).&lt;br /&gt;
&lt;br /&gt;
:Such requirements will likely be put into the contract with Shortcut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
:So the e.V. Board is an owner since this is a legal/contract/money issue. Added myself only because I'm shepherding the issue. --[[User:Eean|eean]] 16:16, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; &lt;br /&gt;
&lt;br /&gt;
:'''We will not get sql access to the information. For the alternative solution see the Push Log issue'''&lt;br /&gt;
&lt;br /&gt;
==Reviewboard==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' darktears&lt;br /&gt;
&lt;br /&gt;
This should be easily done with Gitorious web interface and merge requests actually.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:but reviewboard has features gitorious (right now) doesn't, like commenting on specific lines and not having to set up a merge request. --chani&lt;br /&gt;
::Also email notifications when someone reviews are needed --thomasz&lt;br /&gt;
:We're working on this for someone else right now, so pretty soon --johan-s&lt;br /&gt;
:I consider the latest changes to gitorious to finish this. If more reviewboard features are still needed, and git supports reviewboard, I think this is something we can look at doing post-conversion. --Ian Monroe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Gitorious Needs a feature to disable merge request emails for certain repos==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' [http://gitorious.org/gitorious Gitorious]&lt;br /&gt;
&lt;br /&gt;
Have a sensible system for merge request emails.  This is now in place - you can join groups, chose whether to have emails on a per repo basis, etc.&lt;br /&gt;
&lt;br /&gt;
==SSH blocked in corporations and universities.==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' ''Unknown''&lt;br /&gt;
&lt;br /&gt;
:Some universities tend to block the SSH port. There should be a workaround to use SSH on some different port. github.com already runs a SSH server on port 443. But that assumes you are using a proxy. It has been found that this hasn't worked with a lot of people, especially those who have a direct connection to the internet ( so some transparent blocking by the ISP ). It would be great if (almost) every KDE developer were to be asked to check if other ports work before KDE made the switch. Otherwise there could be an automated email where the git patches could be sent, and appropriately patched to the right location too.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:http://blog.gitorious.org/2009/10/20/stuck-behind-a-firewall/, and there's always been HTTP cloning (although the current impl. in Git is a bit on the slow side) --johan-s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Talk to windows guys about git.==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:'''  aseigo&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
They aren't huge fans of git, but are using it. They require a single mainline and can't cope with multiple branches. Otherwise, it's workable, even if it will take an adjustment period.&lt;br /&gt;
&lt;br /&gt;
==pre-commit hooks==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' ''(unknown)''&lt;br /&gt;
&lt;br /&gt;
:acltest, docbook, EOL/UTF-8&lt;br /&gt;
&lt;br /&gt;
:A web hook isn't good enough for these because they have to run and return whether to allow the push, for every single push to every KDE repo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:gitorious guys said they *might* be willing to allow a few scripts on their server for KDE as a special exception, iirc. --chani&lt;br /&gt;
&lt;br /&gt;
:: Yes, at least for basic things, heavier things like doc building would probably have to be mirrored (goes for pre/post) --johan-s&lt;br /&gt;
&lt;br /&gt;
:It turns out that acl and docbook might not be needed so long as web and docs/ stuff stays in svn.&lt;br /&gt;
&lt;br /&gt;
:: Here's where to find the current scripts - http://websvn.kde.org/trunk/kde-common/svn/hooks/ --[[User:Argonel|Argonel]] 23:06, 11 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So: this is actually done because it needs no longer to be done? (boud)&lt;br /&gt;
&lt;br /&gt;
::Apparently, so; moving to complete. (aseigo)&lt;br /&gt;
&lt;br /&gt;
= other notes =&lt;br /&gt;
&lt;br /&gt;
==kde-common/accounts==&lt;br /&gt;
&lt;br /&gt;
Someone said: KDE accounts file is no longer necessary---used for mapping svn ID -&amp;gt; email, but we have that now from Gitorious.&lt;br /&gt;
Answer from David Faure: I strongly disagree. We still need a KDE accounts file. This is very useful for finding people's email addresses, and having an overview on the number of active kde contributors; and if we keep it we can even have a kdepim resource again for filling an addressbook from it, for completion in kmail's composer (so you can write to any other kde contributor by just typing his/her name). It's also used for populating automatically the kde-cvs-announce mailing-list, for announcements. kde-common/accounts is our family tree (well, list), let's not get rid of it.&lt;br /&gt;
&lt;br /&gt;
Here's my proposal for a kde-common/accounts replacement for the git era: We write a post-receive hook that looks at every commit and records all known email addresses for a given real name as well as the commit hash and date of when an address was last encountered. We can then present that data in the form of a file like kde-common/accounts, or write a web interface to query it (with nice links to the commits on Gitorious, etc.) --Eike (Sho_ on IRC)&lt;br /&gt;
&lt;br /&gt;
To clear up possible confusion: The author information for a given commit is baked into the commit object itself, and comes from the configuration of the git repository it was created in. It is unrelated to any Gitorious account. Due to the distributed nature of Git, the one who uses his Gitorious account to push a commit need not be the same who created it. If Developer A creates a commit in his local clone and Developer B fetches it into his local clone directly from Developer A's machine and then pushes it into the public repo, the repo will only show a commit from Developer A. The Gitorious website will show that Developer B has pushed up a commit from Developer A, but that data is not contained in the repository. Thus collecting only Gitorious accounts and their mail addresses is insufficient. --Eike&lt;br /&gt;
&lt;br /&gt;
==Random==&lt;br /&gt;
http://mail.kde.org/pipermail/dot-stories/2005-May/000509.html might be a good guide on what docs we need.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
some of this stuff was from the list from GCDS that was in this email [http://markmail.org/message/u6eqfjece7fibfyo http://markmail.org/message/u6eqfjece7fibfyo]&lt;br /&gt;
&lt;br /&gt;
==IRC Meetings==&lt;br /&gt;
* [[Projects/MovetoGit/Meeting1111|Minutes]] of meeting 11 November 2009&lt;br /&gt;
* [[Projects/MovetoGit/Meeting1118|Next meeting]] 18:00, 25 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
= jobs =&lt;br /&gt;
''TODO merge this with the todolists above''&lt;br /&gt;
&lt;br /&gt;
michael jansen: talking to kdesvn-build/mpyne&lt;br /&gt;
:--Done? -&amp;gt; http://kdesvn-build.kde.org/releases/kdesvn-build-1.10.php -- Panagiotis Papadopoulos 1 November 2009&lt;br /&gt;
::Yes, but the __kdesvn-build-remote used in the impl isn't pleasant for users already on git so it still needs more work for them. [[User:Mpyne|Mpyne]] 20:32, 11 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
jonas: domain name &lt;br /&gt;
&lt;br /&gt;
ML: convert to SSH&lt;br /&gt;
&lt;br /&gt;
chani: techbase docs for scripty &lt;br /&gt;
&lt;br /&gt;
sebas/lydia/leo: communication with teams! tell people! keeping track that &lt;br /&gt;
everything is being done.&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/MovetoGit</id>
		<title>Projects/MovetoGit</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/MovetoGit"/>
				<updated>2009-12-02T21:57:26Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Random */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the page for co-ordinating KDE's move to [http://git-scm.com/ Git].&lt;br /&gt;
&lt;br /&gt;
If you're interested in helping, you should join the [https://mail.kde.org/mailman/listinfo/kde-scm-interest scm-interest@kde.org] mailinglist and [irc://chat.freenode.net/kde-git #kde-git] on freenode.&lt;br /&gt;
&lt;br /&gt;
=The Plan=&lt;br /&gt;
&lt;br /&gt;
KDE is, eventually, moving to Git. We will be using [https://gitorious.org/ gitorious.org] servers, with funding from Nokia. We will also have our own mirrors using existing KDE servers.&lt;br /&gt;
&lt;br /&gt;
We are working with the Gitorious people to ensure their server will meet all our needs as well as everyone's privacy requirements. The distributed nature of Git will make it easy for us to migrate off gitorious.org at any time should the need arise (but that's unlikely :).&lt;br /&gt;
&lt;br /&gt;
In the summer of 2009, [http://gitorious.org/amarok Amarok] moved to Gitorious to test the waters and find problems that would affect KDE. Once those problems have been solved, all of KDE will be able to switch.&lt;br /&gt;
&lt;br /&gt;
==Why?==&lt;br /&gt;
&lt;br /&gt;
Git offers many advantages over svn, including offline commits and much easier to keep a feature branch up-to-date. Many KDE developers are already using git-svn, but this tool has its limitations. We want to have the full power of Git available, and we have people willing to do the work necessary to migrate.&lt;br /&gt;
&lt;br /&gt;
==How?==&lt;br /&gt;
&lt;br /&gt;
When we move, KDE's svn repository will be migrated into several Git repos, all on gitorious.org. Main modules such as kdelibs and kdebase will each become one repository. Projects in extragear will each have their own repository. The kde.gitorious.org site will have a list (lists?) of all these repositories using the builtin project wiki. Scripts will be provided for downloading, say, all of extragear, so &amp;quot;moving&amp;quot; a project from kdereview to extragear would simply involve editing a file kept online that defined the location of projects.&lt;br /&gt;
&lt;br /&gt;
A few things will stay in subversion - currently websites, translations and manuals. It's possible they could move to Git later, but they won't be part of the mass migration.&lt;br /&gt;
&lt;br /&gt;
On Gitorious, all KDE developers will be part of the [http://gitorious.org/+kde-developers kde-developers group]. Developers in this group are required to set their &amp;quot;full name&amp;quot; for their Gitorious account to their real name. If you are not in this group or do not have an account, a system will be set up to simplify the process. Or you can just go to Gitorious yourself, create an account, and ask to be added to the group. :)&lt;br /&gt;
&lt;br /&gt;
=Blockers=&lt;br /&gt;
&lt;br /&gt;
Tasks that need to get done before we can migrate&lt;br /&gt;
&lt;br /&gt;
==SLA for gitorious.org==&lt;br /&gt;
{{Progress bar|20}}&lt;br /&gt;
'''Owner:''' aseigo, TZander&lt;br /&gt;
&lt;br /&gt;
: The SLA terms need to be documented as well as who will be footing the bill, if any. TZander will be taking the discussion to people internal @ Qt to discuss this as there was a tentative understanding that cooperation is forthcoming there.&lt;br /&gt;
&lt;br /&gt;
==Gitorious Needs a feature to disable merge request emails for certain repos==&lt;br /&gt;
{{Progress bar|10}}&lt;br /&gt;
'''Owner:''' [http://gitorious.org/gitorious Gitorious]&lt;br /&gt;
&lt;br /&gt;
:Everyone added to the [http://gitorious.org/+kde-developers kde-developers] group gets an e-mail when anyone makes a merge request to any of our projects. This is undesirable (as most KDE devs are not Amarok devs and many other permutations). A solution for this will have to be developed on Gitorious before all of KDE goes to Gitorious.&lt;br /&gt;
&lt;br /&gt;
:Johan will be working on this at the next Gitorious sprint.&lt;br /&gt;
&lt;br /&gt;
:Requirements:&lt;br /&gt;
:*be able to emulate commit-fitler features, or have it feed commits into the kde-commits and the current commit-filter can be used. ''This req could also be fulfilled by the 'post-commit' todo item.''&lt;br /&gt;
:*allow sysadmins to email all KDE account holders&lt;br /&gt;
:*be able to subscribe to specific projects and their merge requests&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:At a minimum, users need the ability to choose which projects to get email from. It would be really awesome to have more fine-grained control, though, like the [http://commitfilter.kde.org/ commitfilter]. konqueror and kwin and plasma will all be in the same git repo but I only want merge requests for one of them. --Chani&lt;br /&gt;
::One solution there is to have Gitorious send all email to kde-commits and we can continue using commit-filter. Probably a good idea to set that up to keep continuity regardless. --[[User:Eean|eean]] 16:16, 12 November 2009 (UTC)&lt;br /&gt;
:::keeping commitfilter working is good, but merge-requests aren't commits... can commit-filter be upgraded to handle them? [[User:Chani|Chani]] 23:19, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:put progress to 10 since Gitorious folks are working on it. :) --[[User:Eean|eean]] 16:21, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Write / update importing rules for svn2git==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' morice, tzander - volunteers wanted!&lt;br /&gt;
&lt;br /&gt;
:The importer is on gitorious.org as svn2git we have a set of rules to tell the importer what svn dirs turn into which git repos and those need constant updating whenever a new branch or tag or project is created. This has not been done for quite some time and so someone should rsync the svn repo run svn2git and fix the rules and importer whenever the import stops.&lt;br /&gt;
&lt;br /&gt;
This process will need to be repeated every so often until we're ready to do the migration.&lt;br /&gt;
&lt;br /&gt;
==Script for downloading virtual KDE hierarchies==&lt;br /&gt;
{{Progress bar|5}}&lt;br /&gt;
'''Owner''': Michael Jansen (mjansen)&lt;br /&gt;
:One goal for the whole project is to support how people use KDE SVN as much as possible. One issue is that people often check out 'extragear/multimedia' or 'kdesupport' as a whole. However with git extragear, playground, kdesupport etc projects are going to be split up and are essentially going to exist as a flat list on Gitorious.&lt;br /&gt;
:The proposed solution is have a computer-readable file (eg XML) that only sysadmins could edit. It would define a tree of projects mirroring the current SVN tree. A script would then be able to easily perform operations like 'remote update', 'pull', 'clone' on multiple repos at once, in the same way users are able to checkout or update 'extragear' all at once.&lt;br /&gt;
:More info is at the [[Projects/MovetoGit/MassCloneScript|scripts development page]]. The tool itself is hosted at: http://rubyforge.org/projects/build-tool/.&lt;br /&gt;
&lt;br /&gt;
:Morice-net will help mjansen with testing once the extensions have been finished.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
:Progress 5 since we have a spec. :) --[[User:Eean|eean]]&lt;br /&gt;
:Ok now the plan is basically that mjansen will extend his build script to allow clone-only and to update its recipes from an online source. The recipes have the advantage of defining all the build deps as well, so we would end up with official documentation of build dependencies, something thats often been missing. --[[User:Eean|eean]] 17:18, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''Link'''&lt;br /&gt;
http://techbase.kde.org/Projects/MovetoGit/MassCloneScript&lt;br /&gt;
&lt;br /&gt;
==Push log==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' nobody!!&lt;br /&gt;
&lt;br /&gt;
:we need a record of who pushed what, because commit ids can be anything (and there are legitimate reasons to push commits with another person's name).  could whoever remember how that discussion ended please fill in the details here?&lt;br /&gt;
&lt;br /&gt;
==post-commit hooks==&lt;br /&gt;
{{Progress bar|25}}&lt;br /&gt;
'''Owner:''' ''(morice, dario, johan) maybe?? volunteers needed!!''&lt;br /&gt;
&lt;br /&gt;
:List of scripts needed:&lt;br /&gt;
:* BUG/CCMAIL&lt;br /&gt;
:* email/CIA&lt;br /&gt;
:* license header checks&lt;br /&gt;
:* EBN (dario)&lt;br /&gt;
&lt;br /&gt;
:Gitorious needs to provide a way for hooks to be called; KDE needs to write said hooks.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:There is a branch of gitorious called web-hooks http://gitorious.org/gitorious/mainline/commits/web-hooks --Panagiotis Papadopoulos 1 November 2009&lt;br /&gt;
:Same situation as commit emails. I can do it but it doesn't scale well and a Gitorious-supported solution would be nicer. --[[User:Eean|eean]] 16:07, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Get rid of svn:externals==&lt;br /&gt;
{{Progress bar|40}}&lt;br /&gt;
'''Owner:''' David Faure&lt;br /&gt;
&lt;br /&gt;
:not possible with git, broken by design.&lt;br /&gt;
&lt;br /&gt;
::&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:Is there a list of instances of svn::externals anywhere?- -[[User:Yokem55|Yokem55]] 19:27, 1 November 2009 (UTC)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: kdesupport is clean. kdebase still has an ugly one, nuno and others agreed to duplicate the little bit of shared code iirc, but it wasn't done.&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: ok, what is the ugly one in kdebase?&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: oxygenhelper stuff&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: ok, can i also have a number to stick on the progress bar?&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; Med: indeed.&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: you sound like a manager :-)&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; &amp;quot;I want numbers!&amp;quot; :-)&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: lol&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: i have two d10 here, i'll just roll them :p\&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: and 22% it is :p&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: actually most externals are in extragear and playground. the main modules have only 3 left AFAICS.&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: so for the main modules, I solved 2/5, which is 40% :-)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:::--[[User:Argonel|Argonel]] 03:04, 14 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=Nice to have before the migration=&lt;br /&gt;
&lt;br /&gt;
==Snapshot to read-only svn==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:'''&lt;br /&gt;
&lt;br /&gt;
:It's work, but maybe some people would like it. NEEDED for documentation, in order to get it back into SVN for the translators/scripty/?&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:Could be done with a git-svn gateway presumably? -Mike Arthur 19/10/2009 16:04&lt;br /&gt;
&lt;br /&gt;
:if we leave the docbook stuff in svn, we can avoid this a bit longer. --[[User:Chani|Chani]] 23:21, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==[[Development/Tutorials/Git|Techbase Documentation]]==&lt;br /&gt;
'''Owner:''' Chani, greeneg, - ''please help out!''&lt;br /&gt;
{{Progress bar|10}}&lt;br /&gt;
&lt;br /&gt;
:At least minimal documentation about how to checkout, how to get a Gitorious account, how to request a merge needed, other git documentation and links to other git information would be very useful also.&lt;br /&gt;
&lt;br /&gt;
:see the [[Development/Tutorials/Git|Git Tutorial Page]]. help wanted!!&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Setup git mirrors for cloning==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' No one (help!)&lt;br /&gt;
:Re-purpose the anonsvn servers. This item might be a blocker.&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Talk to people using other distros about git==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' Sebas, Eike&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
* Gentoo: They seem to be prepared for moving their live SVN packages to git; their package manager has easily-reusable classes to fetch from an SCM and moving the ebuilds to using the git class rather than the SVN class should be easy. Positive comments to that end from people in #gentoo-kde.&lt;br /&gt;
* Fedora: Some unhappyness about git because SVN allows them to remotely produce a diff between two SVN URLs, without making a checkout / git clone first. Kevin Kofler (IRC nick Kevin_Kofler, #fedora-kde) says this will make their packager work harder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Post-migration Issues=&lt;br /&gt;
&lt;br /&gt;
==Website Branding==&lt;br /&gt;
{{Progress bar|2|text=(initial ideas on the table)}}&lt;br /&gt;
'''Owner:''' ruphy&lt;br /&gt;
&lt;br /&gt;
:KDE Gitorious should be branded accordingly, and should be reachable from git.kde.org as well as kde.gitorious.org&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
=Unscheduled &amp;amp; Open=&lt;br /&gt;
&lt;br /&gt;
==Allow tagging without involving sysadmins==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
&lt;br /&gt;
'''Owner:''' johan&lt;br /&gt;
&lt;br /&gt;
:Pushing a tag currently requires permissions to do a force push, which is a repository-wide checkbox that can only be toggled by a kde-developers admin. Thus the workflow for a dev wanting to do a release tag for his app is to ask an admin to enable force pushing, then to push his tag, and then to tell the admin he can disable force pushing again. This doesn't scale, is insecure, and at odds with KDE's open access policy when it comes to managing the repos (right now in SVN, you need sysadmin to create an app dir in /tags for you, but don't have to ask permission for every individual tag). Johan has promised a solution for this.&lt;br /&gt;
&lt;br /&gt;
:Notable discussion points on kde-scm-interest:&lt;br /&gt;
:http://mail.kde.org/pipermail/kde-scm-interest/2009-November/000782.html&lt;br /&gt;
:http://mail.kde.org/pipermail/kde-scm-interest/2009-November/000784.html&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Account setup on Gitorious==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
&lt;br /&gt;
'''Owner:''' ''eean, johan, boud, dario''&lt;br /&gt;
&lt;br /&gt;
:Creating an account on Gitorious isn't hard, but asking to be added to the KDE group is inconvenient. For the migration we should set up a system (via email or wiki?) where developers can ask to have an account autocreated for them, or add their existing Gitorious account to a list to be added to the group. Once this is in place an announcement should be sent to all svn accounts explaining the process, and privacy information.&lt;br /&gt;
&lt;br /&gt;
:Basically the currently method of using Bugzilla works fine now and works fine in the longterm. But in the transition month when hundreds of accounts must be created or added, we need a better system. Its important to make it as easy as possible so that we don't lose anyone in the shuffle.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Update bugs.kde.org's account-request page==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' ''???''&lt;br /&gt;
&lt;br /&gt;
:When people get new svn accounts it would make sense for them to join the kde-developers group too.&lt;br /&gt;
&lt;br /&gt;
:We also need a standard way for existing svn users to request to join kde-developers. This must include an explanation of the requirements for joining the group, (iirc, just that your gitorious display name is set to your real name)&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:After the initial migration the request page probably should be re-purposed to essentially mean nothing but putting the user in that group.  People can request merges without being part of the group, so its likely to get less usage after we get the current set of users added.&lt;br /&gt;
&lt;br /&gt;
=Completed Tasks=&lt;br /&gt;
&lt;br /&gt;
==Opt-in privacy exception required for kde-developers==&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' ''Gitorious'', ''KDE e.V. Board'', ''eean''&lt;br /&gt;
&lt;br /&gt;
:KDE sysadmins need access to some information that Shortcut could not give them due to their privacy policy. Examples include an email list of all the developers and SQL-level access to information about all the repos in KDE (since it stores who pushes what, information not stored in the git repo itself).&lt;br /&gt;
&lt;br /&gt;
:Such requirements will likely be put into the contract with Shortcut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
:So the e.V. Board is an owner since this is a legal/contract/money issue. Added myself only because I'm shepherding the issue. --[[User:Eean|eean]] 16:16, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; &lt;br /&gt;
&lt;br /&gt;
:'''We will not get sql access to the information. For the alternative solution see the Push Log issue'''&lt;br /&gt;
&lt;br /&gt;
==Reviewboard==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' darktears&lt;br /&gt;
&lt;br /&gt;
This should be easily done with Gitorious web interface and merge requests actually.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:but reviewboard has features gitorious (right now) doesn't, like commenting on specific lines and not having to set up a merge request. --chani&lt;br /&gt;
::Also email notifications when someone reviews are needed --thomasz&lt;br /&gt;
:We're working on this for someone else right now, so pretty soon --johan-s&lt;br /&gt;
:I consider the latest changes to gitorious to finish this. If more reviewboard features are still needed, and git supports reviewboard, I think this is something we can look at doing post-conversion. --Ian Monroe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SSH blocked in corporations and universities.==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' ''Unknown''&lt;br /&gt;
&lt;br /&gt;
:Some universities tend to block the SSH port. There should be a workaround to use SSH on some different port. github.com already runs a SSH server on port 443. But that assumes you are using a proxy. It has been found that this hasn't worked with a lot of people, especially those who have a direct connection to the internet ( so some transparent blocking by the ISP ). It would be great if (almost) every KDE developer were to be asked to check if other ports work before KDE made the switch. Otherwise there could be an automated email where the git patches could be sent, and appropriately patched to the right location too.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:http://blog.gitorious.org/2009/10/20/stuck-behind-a-firewall/, and there's always been HTTP cloning (although the current impl. in Git is a bit on the slow side) --johan-s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Talk to windows guys about git.==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:'''  aseigo&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
They aren't huge fans of git, but are using it. They require a single mainline and can't cope with multiple branches. Otherwise, it's workable, even if it will take an adjustment period.&lt;br /&gt;
&lt;br /&gt;
==pre-commit hooks==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' ''(unknown)''&lt;br /&gt;
&lt;br /&gt;
:acltest, docbook, EOL/UTF-8&lt;br /&gt;
&lt;br /&gt;
:A web hook isn't good enough for these because they have to run and return whether to allow the push, for every single push to every KDE repo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:gitorious guys said they *might* be willing to allow a few scripts on their server for KDE as a special exception, iirc. --chani&lt;br /&gt;
&lt;br /&gt;
:: Yes, at least for basic things, heavier things like doc building would probably have to be mirrored (goes for pre/post) --johan-s&lt;br /&gt;
&lt;br /&gt;
:It turns out that acl and docbook might not be needed so long as web and docs/ stuff stays in svn.&lt;br /&gt;
&lt;br /&gt;
:: Here's where to find the current scripts - http://websvn.kde.org/trunk/kde-common/svn/hooks/ --[[User:Argonel|Argonel]] 23:06, 11 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So: this is actually done because it needs no longer to be done? (boud)&lt;br /&gt;
&lt;br /&gt;
::Apparently, so; moving to complete. (aseigo)&lt;br /&gt;
= other notes =&lt;br /&gt;
&lt;br /&gt;
==Random==&lt;br /&gt;
&lt;br /&gt;
KDE accounts file is no longer necessary---used for mapping svn ID -&amp;gt; email, but we have that now from Gitorious.&lt;br /&gt;
&lt;br /&gt;
http://mail.kde.org/pipermail/dot-stories/2005-May/000509.html might be a good guide on what docs we need.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
some of this stuff was from the list from GCDS that was in this email [http://markmail.org/message/u6eqfjece7fibfyo http://markmail.org/message/u6eqfjece7fibfyo]&lt;br /&gt;
&lt;br /&gt;
==IRC Meetings==&lt;br /&gt;
* [[Projects/MovetoGit/Meeting1111|Minutes]] of meeting 11 November 2009&lt;br /&gt;
* [[Projects/MovetoGit/Meeting1118|Next meeting]] 18:00, 25 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
= jobs =&lt;br /&gt;
''TODO merge this with the todolists above''&lt;br /&gt;
&lt;br /&gt;
michael jansen: talking to kdesvn-build/mpyne&lt;br /&gt;
:--Done? -&amp;gt; http://kdesvn-build.kde.org/releases/kdesvn-build-1.10.php -- Panagiotis Papadopoulos 1 November 2009&lt;br /&gt;
::Yes, but the __kdesvn-build-remote used in the impl isn't pleasant for users already on git so it still needs more work for them. [[User:Mpyne|Mpyne]] 20:32, 11 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
jonas: domain name &lt;br /&gt;
&lt;br /&gt;
ML: convert to SSH&lt;br /&gt;
&lt;br /&gt;
chani: techbase docs for scripty &lt;br /&gt;
&lt;br /&gt;
sebas/lydia/leo: communication with teams! tell people! keeping track that &lt;br /&gt;
everything is being done.&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/MovetoGit</id>
		<title>Projects/MovetoGit</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/MovetoGit"/>
				<updated>2009-12-02T21:56:46Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* jobs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the page for co-ordinating KDE's move to [http://git-scm.com/ Git].&lt;br /&gt;
&lt;br /&gt;
If you're interested in helping, you should join the [https://mail.kde.org/mailman/listinfo/kde-scm-interest scm-interest@kde.org] mailinglist and [irc://chat.freenode.net/kde-git #kde-git] on freenode.&lt;br /&gt;
&lt;br /&gt;
=The Plan=&lt;br /&gt;
&lt;br /&gt;
KDE is, eventually, moving to Git. We will be using [https://gitorious.org/ gitorious.org] servers, with funding from Nokia. We will also have our own mirrors using existing KDE servers.&lt;br /&gt;
&lt;br /&gt;
We are working with the Gitorious people to ensure their server will meet all our needs as well as everyone's privacy requirements. The distributed nature of Git will make it easy for us to migrate off gitorious.org at any time should the need arise (but that's unlikely :).&lt;br /&gt;
&lt;br /&gt;
In the summer of 2009, [http://gitorious.org/amarok Amarok] moved to Gitorious to test the waters and find problems that would affect KDE. Once those problems have been solved, all of KDE will be able to switch.&lt;br /&gt;
&lt;br /&gt;
==Why?==&lt;br /&gt;
&lt;br /&gt;
Git offers many advantages over svn, including offline commits and much easier to keep a feature branch up-to-date. Many KDE developers are already using git-svn, but this tool has its limitations. We want to have the full power of Git available, and we have people willing to do the work necessary to migrate.&lt;br /&gt;
&lt;br /&gt;
==How?==&lt;br /&gt;
&lt;br /&gt;
When we move, KDE's svn repository will be migrated into several Git repos, all on gitorious.org. Main modules such as kdelibs and kdebase will each become one repository. Projects in extragear will each have their own repository. The kde.gitorious.org site will have a list (lists?) of all these repositories using the builtin project wiki. Scripts will be provided for downloading, say, all of extragear, so &amp;quot;moving&amp;quot; a project from kdereview to extragear would simply involve editing a file kept online that defined the location of projects.&lt;br /&gt;
&lt;br /&gt;
A few things will stay in subversion - currently websites, translations and manuals. It's possible they could move to Git later, but they won't be part of the mass migration.&lt;br /&gt;
&lt;br /&gt;
On Gitorious, all KDE developers will be part of the [http://gitorious.org/+kde-developers kde-developers group]. Developers in this group are required to set their &amp;quot;full name&amp;quot; for their Gitorious account to their real name. If you are not in this group or do not have an account, a system will be set up to simplify the process. Or you can just go to Gitorious yourself, create an account, and ask to be added to the group. :)&lt;br /&gt;
&lt;br /&gt;
=Blockers=&lt;br /&gt;
&lt;br /&gt;
Tasks that need to get done before we can migrate&lt;br /&gt;
&lt;br /&gt;
==SLA for gitorious.org==&lt;br /&gt;
{{Progress bar|20}}&lt;br /&gt;
'''Owner:''' aseigo, TZander&lt;br /&gt;
&lt;br /&gt;
: The SLA terms need to be documented as well as who will be footing the bill, if any. TZander will be taking the discussion to people internal @ Qt to discuss this as there was a tentative understanding that cooperation is forthcoming there.&lt;br /&gt;
&lt;br /&gt;
==Gitorious Needs a feature to disable merge request emails for certain repos==&lt;br /&gt;
{{Progress bar|10}}&lt;br /&gt;
'''Owner:''' [http://gitorious.org/gitorious Gitorious]&lt;br /&gt;
&lt;br /&gt;
:Everyone added to the [http://gitorious.org/+kde-developers kde-developers] group gets an e-mail when anyone makes a merge request to any of our projects. This is undesirable (as most KDE devs are not Amarok devs and many other permutations). A solution for this will have to be developed on Gitorious before all of KDE goes to Gitorious.&lt;br /&gt;
&lt;br /&gt;
:Johan will be working on this at the next Gitorious sprint.&lt;br /&gt;
&lt;br /&gt;
:Requirements:&lt;br /&gt;
:*be able to emulate commit-fitler features, or have it feed commits into the kde-commits and the current commit-filter can be used. ''This req could also be fulfilled by the 'post-commit' todo item.''&lt;br /&gt;
:*allow sysadmins to email all KDE account holders&lt;br /&gt;
:*be able to subscribe to specific projects and their merge requests&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:At a minimum, users need the ability to choose which projects to get email from. It would be really awesome to have more fine-grained control, though, like the [http://commitfilter.kde.org/ commitfilter]. konqueror and kwin and plasma will all be in the same git repo but I only want merge requests for one of them. --Chani&lt;br /&gt;
::One solution there is to have Gitorious send all email to kde-commits and we can continue using commit-filter. Probably a good idea to set that up to keep continuity regardless. --[[User:Eean|eean]] 16:16, 12 November 2009 (UTC)&lt;br /&gt;
:::keeping commitfilter working is good, but merge-requests aren't commits... can commit-filter be upgraded to handle them? [[User:Chani|Chani]] 23:19, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:put progress to 10 since Gitorious folks are working on it. :) --[[User:Eean|eean]] 16:21, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Write / update importing rules for svn2git==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' morice, tzander - volunteers wanted!&lt;br /&gt;
&lt;br /&gt;
:The importer is on gitorious.org as svn2git we have a set of rules to tell the importer what svn dirs turn into which git repos and those need constant updating whenever a new branch or tag or project is created. This has not been done for quite some time and so someone should rsync the svn repo run svn2git and fix the rules and importer whenever the import stops.&lt;br /&gt;
&lt;br /&gt;
This process will need to be repeated every so often until we're ready to do the migration.&lt;br /&gt;
&lt;br /&gt;
==Script for downloading virtual KDE hierarchies==&lt;br /&gt;
{{Progress bar|5}}&lt;br /&gt;
'''Owner''': Michael Jansen (mjansen)&lt;br /&gt;
:One goal for the whole project is to support how people use KDE SVN as much as possible. One issue is that people often check out 'extragear/multimedia' or 'kdesupport' as a whole. However with git extragear, playground, kdesupport etc projects are going to be split up and are essentially going to exist as a flat list on Gitorious.&lt;br /&gt;
:The proposed solution is have a computer-readable file (eg XML) that only sysadmins could edit. It would define a tree of projects mirroring the current SVN tree. A script would then be able to easily perform operations like 'remote update', 'pull', 'clone' on multiple repos at once, in the same way users are able to checkout or update 'extragear' all at once.&lt;br /&gt;
:More info is at the [[Projects/MovetoGit/MassCloneScript|scripts development page]]. The tool itself is hosted at: http://rubyforge.org/projects/build-tool/.&lt;br /&gt;
&lt;br /&gt;
:Morice-net will help mjansen with testing once the extensions have been finished.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
:Progress 5 since we have a spec. :) --[[User:Eean|eean]]&lt;br /&gt;
:Ok now the plan is basically that mjansen will extend his build script to allow clone-only and to update its recipes from an online source. The recipes have the advantage of defining all the build deps as well, so we would end up with official documentation of build dependencies, something thats often been missing. --[[User:Eean|eean]] 17:18, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''Link'''&lt;br /&gt;
http://techbase.kde.org/Projects/MovetoGit/MassCloneScript&lt;br /&gt;
&lt;br /&gt;
==Push log==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' nobody!!&lt;br /&gt;
&lt;br /&gt;
:we need a record of who pushed what, because commit ids can be anything (and there are legitimate reasons to push commits with another person's name).  could whoever remember how that discussion ended please fill in the details here?&lt;br /&gt;
&lt;br /&gt;
==post-commit hooks==&lt;br /&gt;
{{Progress bar|25}}&lt;br /&gt;
'''Owner:''' ''(morice, dario, johan) maybe?? volunteers needed!!''&lt;br /&gt;
&lt;br /&gt;
:List of scripts needed:&lt;br /&gt;
:* BUG/CCMAIL&lt;br /&gt;
:* email/CIA&lt;br /&gt;
:* license header checks&lt;br /&gt;
:* EBN (dario)&lt;br /&gt;
&lt;br /&gt;
:Gitorious needs to provide a way for hooks to be called; KDE needs to write said hooks.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:There is a branch of gitorious called web-hooks http://gitorious.org/gitorious/mainline/commits/web-hooks --Panagiotis Papadopoulos 1 November 2009&lt;br /&gt;
:Same situation as commit emails. I can do it but it doesn't scale well and a Gitorious-supported solution would be nicer. --[[User:Eean|eean]] 16:07, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Get rid of svn:externals==&lt;br /&gt;
{{Progress bar|40}}&lt;br /&gt;
'''Owner:''' David Faure&lt;br /&gt;
&lt;br /&gt;
:not possible with git, broken by design.&lt;br /&gt;
&lt;br /&gt;
::&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:Is there a list of instances of svn::externals anywhere?- -[[User:Yokem55|Yokem55]] 19:27, 1 November 2009 (UTC)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: kdesupport is clean. kdebase still has an ugly one, nuno and others agreed to duplicate the little bit of shared code iirc, but it wasn't done.&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: ok, what is the ugly one in kdebase?&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: oxygenhelper stuff&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: ok, can i also have a number to stick on the progress bar?&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; Med: indeed.&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: you sound like a manager :-)&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; &amp;quot;I want numbers!&amp;quot; :-)&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: lol&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: i have two d10 here, i'll just roll them :p\&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: and 22% it is :p&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: actually most externals are in extragear and playground. the main modules have only 3 left AFAICS.&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: so for the main modules, I solved 2/5, which is 40% :-)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:::--[[User:Argonel|Argonel]] 03:04, 14 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=Nice to have before the migration=&lt;br /&gt;
&lt;br /&gt;
==Snapshot to read-only svn==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:'''&lt;br /&gt;
&lt;br /&gt;
:It's work, but maybe some people would like it. NEEDED for documentation, in order to get it back into SVN for the translators/scripty/?&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:Could be done with a git-svn gateway presumably? -Mike Arthur 19/10/2009 16:04&lt;br /&gt;
&lt;br /&gt;
:if we leave the docbook stuff in svn, we can avoid this a bit longer. --[[User:Chani|Chani]] 23:21, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==[[Development/Tutorials/Git|Techbase Documentation]]==&lt;br /&gt;
'''Owner:''' Chani, greeneg, - ''please help out!''&lt;br /&gt;
{{Progress bar|10}}&lt;br /&gt;
&lt;br /&gt;
:At least minimal documentation about how to checkout, how to get a Gitorious account, how to request a merge needed, other git documentation and links to other git information would be very useful also.&lt;br /&gt;
&lt;br /&gt;
:see the [[Development/Tutorials/Git|Git Tutorial Page]]. help wanted!!&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Setup git mirrors for cloning==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' No one (help!)&lt;br /&gt;
:Re-purpose the anonsvn servers. This item might be a blocker.&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Talk to people using other distros about git==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' Sebas, Eike&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
* Gentoo: They seem to be prepared for moving their live SVN packages to git; their package manager has easily-reusable classes to fetch from an SCM and moving the ebuilds to using the git class rather than the SVN class should be easy. Positive comments to that end from people in #gentoo-kde.&lt;br /&gt;
* Fedora: Some unhappyness about git because SVN allows them to remotely produce a diff between two SVN URLs, without making a checkout / git clone first. Kevin Kofler (IRC nick Kevin_Kofler, #fedora-kde) says this will make their packager work harder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Post-migration Issues=&lt;br /&gt;
&lt;br /&gt;
==Website Branding==&lt;br /&gt;
{{Progress bar|2|text=(initial ideas on the table)}}&lt;br /&gt;
'''Owner:''' ruphy&lt;br /&gt;
&lt;br /&gt;
:KDE Gitorious should be branded accordingly, and should be reachable from git.kde.org as well as kde.gitorious.org&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
=Unscheduled &amp;amp; Open=&lt;br /&gt;
&lt;br /&gt;
==Allow tagging without involving sysadmins==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
&lt;br /&gt;
'''Owner:''' johan&lt;br /&gt;
&lt;br /&gt;
:Pushing a tag currently requires permissions to do a force push, which is a repository-wide checkbox that can only be toggled by a kde-developers admin. Thus the workflow for a dev wanting to do a release tag for his app is to ask an admin to enable force pushing, then to push his tag, and then to tell the admin he can disable force pushing again. This doesn't scale, is insecure, and at odds with KDE's open access policy when it comes to managing the repos (right now in SVN, you need sysadmin to create an app dir in /tags for you, but don't have to ask permission for every individual tag). Johan has promised a solution for this.&lt;br /&gt;
&lt;br /&gt;
:Notable discussion points on kde-scm-interest:&lt;br /&gt;
:http://mail.kde.org/pipermail/kde-scm-interest/2009-November/000782.html&lt;br /&gt;
:http://mail.kde.org/pipermail/kde-scm-interest/2009-November/000784.html&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Account setup on Gitorious==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
&lt;br /&gt;
'''Owner:''' ''eean, johan, boud, dario''&lt;br /&gt;
&lt;br /&gt;
:Creating an account on Gitorious isn't hard, but asking to be added to the KDE group is inconvenient. For the migration we should set up a system (via email or wiki?) where developers can ask to have an account autocreated for them, or add their existing Gitorious account to a list to be added to the group. Once this is in place an announcement should be sent to all svn accounts explaining the process, and privacy information.&lt;br /&gt;
&lt;br /&gt;
:Basically the currently method of using Bugzilla works fine now and works fine in the longterm. But in the transition month when hundreds of accounts must be created or added, we need a better system. Its important to make it as easy as possible so that we don't lose anyone in the shuffle.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Update bugs.kde.org's account-request page==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' ''???''&lt;br /&gt;
&lt;br /&gt;
:When people get new svn accounts it would make sense for them to join the kde-developers group too.&lt;br /&gt;
&lt;br /&gt;
:We also need a standard way for existing svn users to request to join kde-developers. This must include an explanation of the requirements for joining the group, (iirc, just that your gitorious display name is set to your real name)&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:After the initial migration the request page probably should be re-purposed to essentially mean nothing but putting the user in that group.  People can request merges without being part of the group, so its likely to get less usage after we get the current set of users added.&lt;br /&gt;
&lt;br /&gt;
=Completed Tasks=&lt;br /&gt;
&lt;br /&gt;
==Opt-in privacy exception required for kde-developers==&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' ''Gitorious'', ''KDE e.V. Board'', ''eean''&lt;br /&gt;
&lt;br /&gt;
:KDE sysadmins need access to some information that Shortcut could not give them due to their privacy policy. Examples include an email list of all the developers and SQL-level access to information about all the repos in KDE (since it stores who pushes what, information not stored in the git repo itself).&lt;br /&gt;
&lt;br /&gt;
:Such requirements will likely be put into the contract with Shortcut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
:So the e.V. Board is an owner since this is a legal/contract/money issue. Added myself only because I'm shepherding the issue. --[[User:Eean|eean]] 16:16, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; &lt;br /&gt;
&lt;br /&gt;
:'''We will not get sql access to the information. For the alternative solution see the Push Log issue'''&lt;br /&gt;
&lt;br /&gt;
==Reviewboard==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' darktears&lt;br /&gt;
&lt;br /&gt;
This should be easily done with Gitorious web interface and merge requests actually.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:but reviewboard has features gitorious (right now) doesn't, like commenting on specific lines and not having to set up a merge request. --chani&lt;br /&gt;
::Also email notifications when someone reviews are needed --thomasz&lt;br /&gt;
:We're working on this for someone else right now, so pretty soon --johan-s&lt;br /&gt;
:I consider the latest changes to gitorious to finish this. If more reviewboard features are still needed, and git supports reviewboard, I think this is something we can look at doing post-conversion. --Ian Monroe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SSH blocked in corporations and universities.==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' ''Unknown''&lt;br /&gt;
&lt;br /&gt;
:Some universities tend to block the SSH port. There should be a workaround to use SSH on some different port. github.com already runs a SSH server on port 443. But that assumes you are using a proxy. It has been found that this hasn't worked with a lot of people, especially those who have a direct connection to the internet ( so some transparent blocking by the ISP ). It would be great if (almost) every KDE developer were to be asked to check if other ports work before KDE made the switch. Otherwise there could be an automated email where the git patches could be sent, and appropriately patched to the right location too.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:http://blog.gitorious.org/2009/10/20/stuck-behind-a-firewall/, and there's always been HTTP cloning (although the current impl. in Git is a bit on the slow side) --johan-s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Talk to windows guys about git.==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:'''  aseigo&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
They aren't huge fans of git, but are using it. They require a single mainline and can't cope with multiple branches. Otherwise, it's workable, even if it will take an adjustment period.&lt;br /&gt;
&lt;br /&gt;
==pre-commit hooks==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' ''(unknown)''&lt;br /&gt;
&lt;br /&gt;
:acltest, docbook, EOL/UTF-8&lt;br /&gt;
&lt;br /&gt;
:A web hook isn't good enough for these because they have to run and return whether to allow the push, for every single push to every KDE repo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:gitorious guys said they *might* be willing to allow a few scripts on their server for KDE as a special exception, iirc. --chani&lt;br /&gt;
&lt;br /&gt;
:: Yes, at least for basic things, heavier things like doc building would probably have to be mirrored (goes for pre/post) --johan-s&lt;br /&gt;
&lt;br /&gt;
:It turns out that acl and docbook might not be needed so long as web and docs/ stuff stays in svn.&lt;br /&gt;
&lt;br /&gt;
:: Here's where to find the current scripts - http://websvn.kde.org/trunk/kde-common/svn/hooks/ --[[User:Argonel|Argonel]] 23:06, 11 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So: this is actually done because it needs no longer to be done? (boud)&lt;br /&gt;
&lt;br /&gt;
::Apparently, so; moving to complete. (aseigo)&lt;br /&gt;
= other notes =&lt;br /&gt;
&lt;br /&gt;
==Random==&lt;br /&gt;
convert all accounts to SSH??&lt;br /&gt;
multiple git repos joined??&lt;br /&gt;
- use repo tool from android?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KDE accounts file is no longer necessary---used for mapping svn ID -&amp;gt; email, but we have that now from Gitorious.&lt;br /&gt;
&lt;br /&gt;
http://mail.kde.org/pipermail/dot-stories/2005-May/000509.html might be a good guide on what docs we need.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
some of this stuff was from the list from GCDS that was in this email [http://markmail.org/message/u6eqfjece7fibfyo http://markmail.org/message/u6eqfjece7fibfyo]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRC Meetings==&lt;br /&gt;
* [[Projects/MovetoGit/Meeting1111|Minutes]] of meeting 11 November 2009&lt;br /&gt;
* [[Projects/MovetoGit/Meeting1118|Next meeting]] 18:00, 25 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
= jobs =&lt;br /&gt;
''TODO merge this with the todolists above''&lt;br /&gt;
&lt;br /&gt;
michael jansen: talking to kdesvn-build/mpyne&lt;br /&gt;
:--Done? -&amp;gt; http://kdesvn-build.kde.org/releases/kdesvn-build-1.10.php -- Panagiotis Papadopoulos 1 November 2009&lt;br /&gt;
::Yes, but the __kdesvn-build-remote used in the impl isn't pleasant for users already on git so it still needs more work for them. [[User:Mpyne|Mpyne]] 20:32, 11 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
jonas: domain name &lt;br /&gt;
&lt;br /&gt;
ML: convert to SSH&lt;br /&gt;
&lt;br /&gt;
chani: techbase docs for scripty &lt;br /&gt;
&lt;br /&gt;
sebas/lydia/leo: communication with teams! tell people! keeping track that &lt;br /&gt;
everything is being done.&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/MovetoGit</id>
		<title>Projects/MovetoGit</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/MovetoGit"/>
				<updated>2009-12-02T21:52:27Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Update bugs.kde.org's account-request page */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the page for co-ordinating KDE's move to [http://git-scm.com/ Git].&lt;br /&gt;
&lt;br /&gt;
If you're interested in helping, you should join the [https://mail.kde.org/mailman/listinfo/kde-scm-interest scm-interest@kde.org] mailinglist and [irc://chat.freenode.net/kde-git #kde-git] on freenode.&lt;br /&gt;
&lt;br /&gt;
=The Plan=&lt;br /&gt;
&lt;br /&gt;
KDE is, eventually, moving to Git. We will be using [https://gitorious.org/ gitorious.org] servers, with funding from Nokia. We will also have our own mirrors using existing KDE servers.&lt;br /&gt;
&lt;br /&gt;
We are working with the Gitorious people to ensure their server will meet all our needs as well as everyone's privacy requirements. The distributed nature of Git will make it easy for us to migrate off gitorious.org at any time should the need arise (but that's unlikely :).&lt;br /&gt;
&lt;br /&gt;
In the summer of 2009, [http://gitorious.org/amarok Amarok] moved to Gitorious to test the waters and find problems that would affect KDE. Once those problems have been solved, all of KDE will be able to switch.&lt;br /&gt;
&lt;br /&gt;
==Why?==&lt;br /&gt;
&lt;br /&gt;
Git offers many advantages over svn, including offline commits and much easier to keep a feature branch up-to-date. Many KDE developers are already using git-svn, but this tool has its limitations. We want to have the full power of Git available, and we have people willing to do the work necessary to migrate.&lt;br /&gt;
&lt;br /&gt;
==How?==&lt;br /&gt;
&lt;br /&gt;
When we move, KDE's svn repository will be migrated into several Git repos, all on gitorious.org. Main modules such as kdelibs and kdebase will each become one repository. Projects in extragear will each have their own repository. The kde.gitorious.org site will have a list (lists?) of all these repositories using the builtin project wiki. Scripts will be provided for downloading, say, all of extragear, so &amp;quot;moving&amp;quot; a project from kdereview to extragear would simply involve editing a file kept online that defined the location of projects.&lt;br /&gt;
&lt;br /&gt;
A few things will stay in subversion - currently websites, translations and manuals. It's possible they could move to Git later, but they won't be part of the mass migration.&lt;br /&gt;
&lt;br /&gt;
On Gitorious, all KDE developers will be part of the [http://gitorious.org/+kde-developers kde-developers group]. Developers in this group are required to set their &amp;quot;full name&amp;quot; for their Gitorious account to their real name. If you are not in this group or do not have an account, a system will be set up to simplify the process. Or you can just go to Gitorious yourself, create an account, and ask to be added to the group. :)&lt;br /&gt;
&lt;br /&gt;
=Blockers=&lt;br /&gt;
&lt;br /&gt;
Tasks that need to get done before we can migrate&lt;br /&gt;
&lt;br /&gt;
==SLA for gitorious.org==&lt;br /&gt;
{{Progress bar|20}}&lt;br /&gt;
'''Owner:''' aseigo, TZander&lt;br /&gt;
&lt;br /&gt;
: The SLA terms need to be documented as well as who will be footing the bill, if any. TZander will be taking the discussion to people internal @ Qt to discuss this as there was a tentative understanding that cooperation is forthcoming there.&lt;br /&gt;
&lt;br /&gt;
==Gitorious Needs a feature to disable merge request emails for certain repos==&lt;br /&gt;
{{Progress bar|10}}&lt;br /&gt;
'''Owner:''' [http://gitorious.org/gitorious Gitorious]&lt;br /&gt;
&lt;br /&gt;
:Everyone added to the [http://gitorious.org/+kde-developers kde-developers] group gets an e-mail when anyone makes a merge request to any of our projects. This is undesirable (as most KDE devs are not Amarok devs and many other permutations). A solution for this will have to be developed on Gitorious before all of KDE goes to Gitorious.&lt;br /&gt;
&lt;br /&gt;
:Johan will be working on this at the next Gitorious sprint.&lt;br /&gt;
&lt;br /&gt;
:Requirements:&lt;br /&gt;
:*be able to emulate commit-fitler features, or have it feed commits into the kde-commits and the current commit-filter can be used. ''This req could also be fulfilled by the 'post-commit' todo item.''&lt;br /&gt;
:*allow sysadmins to email all KDE account holders&lt;br /&gt;
:*be able to subscribe to specific projects and their merge requests&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:At a minimum, users need the ability to choose which projects to get email from. It would be really awesome to have more fine-grained control, though, like the [http://commitfilter.kde.org/ commitfilter]. konqueror and kwin and plasma will all be in the same git repo but I only want merge requests for one of them. --Chani&lt;br /&gt;
::One solution there is to have Gitorious send all email to kde-commits and we can continue using commit-filter. Probably a good idea to set that up to keep continuity regardless. --[[User:Eean|eean]] 16:16, 12 November 2009 (UTC)&lt;br /&gt;
:::keeping commitfilter working is good, but merge-requests aren't commits... can commit-filter be upgraded to handle them? [[User:Chani|Chani]] 23:19, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:put progress to 10 since Gitorious folks are working on it. :) --[[User:Eean|eean]] 16:21, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Write / update importing rules for svn2git==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' morice, tzander - volunteers wanted!&lt;br /&gt;
&lt;br /&gt;
:The importer is on gitorious.org as svn2git we have a set of rules to tell the importer what svn dirs turn into which git repos and those need constant updating whenever a new branch or tag or project is created. This has not been done for quite some time and so someone should rsync the svn repo run svn2git and fix the rules and importer whenever the import stops.&lt;br /&gt;
&lt;br /&gt;
This process will need to be repeated every so often until we're ready to do the migration.&lt;br /&gt;
&lt;br /&gt;
==Script for downloading virtual KDE hierarchies==&lt;br /&gt;
{{Progress bar|5}}&lt;br /&gt;
'''Owner''': Michael Jansen (mjansen)&lt;br /&gt;
:One goal for the whole project is to support how people use KDE SVN as much as possible. One issue is that people often check out 'extragear/multimedia' or 'kdesupport' as a whole. However with git extragear, playground, kdesupport etc projects are going to be split up and are essentially going to exist as a flat list on Gitorious.&lt;br /&gt;
:The proposed solution is have a computer-readable file (eg XML) that only sysadmins could edit. It would define a tree of projects mirroring the current SVN tree. A script would then be able to easily perform operations like 'remote update', 'pull', 'clone' on multiple repos at once, in the same way users are able to checkout or update 'extragear' all at once.&lt;br /&gt;
:More info is at the [[Projects/MovetoGit/MassCloneScript|scripts development page]]. The tool itself is hosted at: http://rubyforge.org/projects/build-tool/.&lt;br /&gt;
&lt;br /&gt;
:Morice-net will help mjansen with testing once the extensions have been finished.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
:Progress 5 since we have a spec. :) --[[User:Eean|eean]]&lt;br /&gt;
:Ok now the plan is basically that mjansen will extend his build script to allow clone-only and to update its recipes from an online source. The recipes have the advantage of defining all the build deps as well, so we would end up with official documentation of build dependencies, something thats often been missing. --[[User:Eean|eean]] 17:18, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''Link'''&lt;br /&gt;
http://techbase.kde.org/Projects/MovetoGit/MassCloneScript&lt;br /&gt;
&lt;br /&gt;
==Push log==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' nobody!!&lt;br /&gt;
&lt;br /&gt;
:we need a record of who pushed what, because commit ids can be anything (and there are legitimate reasons to push commits with another person's name).  could whoever remember how that discussion ended please fill in the details here?&lt;br /&gt;
&lt;br /&gt;
==post-commit hooks==&lt;br /&gt;
{{Progress bar|25}}&lt;br /&gt;
'''Owner:''' ''(morice, dario, johan) maybe?? volunteers needed!!''&lt;br /&gt;
&lt;br /&gt;
:List of scripts needed:&lt;br /&gt;
:* BUG/CCMAIL&lt;br /&gt;
:* email/CIA&lt;br /&gt;
:* license header checks&lt;br /&gt;
:* EBN (dario)&lt;br /&gt;
&lt;br /&gt;
:Gitorious needs to provide a way for hooks to be called; KDE needs to write said hooks.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:There is a branch of gitorious called web-hooks http://gitorious.org/gitorious/mainline/commits/web-hooks --Panagiotis Papadopoulos 1 November 2009&lt;br /&gt;
:Same situation as commit emails. I can do it but it doesn't scale well and a Gitorious-supported solution would be nicer. --[[User:Eean|eean]] 16:07, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Get rid of svn:externals==&lt;br /&gt;
{{Progress bar|40}}&lt;br /&gt;
'''Owner:''' David Faure&lt;br /&gt;
&lt;br /&gt;
:not possible with git, broken by design.&lt;br /&gt;
&lt;br /&gt;
::&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:Is there a list of instances of svn::externals anywhere?- -[[User:Yokem55|Yokem55]] 19:27, 1 November 2009 (UTC)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: kdesupport is clean. kdebase still has an ugly one, nuno and others agreed to duplicate the little bit of shared code iirc, but it wasn't done.&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: ok, what is the ugly one in kdebase?&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: oxygenhelper stuff&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: ok, can i also have a number to stick on the progress bar?&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; Med: indeed.&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: you sound like a manager :-)&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; &amp;quot;I want numbers!&amp;quot; :-)&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: lol&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: i have two d10 here, i'll just roll them :p\&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: and 22% it is :p&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: actually most externals are in extragear and playground. the main modules have only 3 left AFAICS.&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: so for the main modules, I solved 2/5, which is 40% :-)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:::--[[User:Argonel|Argonel]] 03:04, 14 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=Nice to have before the migration=&lt;br /&gt;
&lt;br /&gt;
==Snapshot to read-only svn==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:'''&lt;br /&gt;
&lt;br /&gt;
:It's work, but maybe some people would like it. NEEDED for documentation, in order to get it back into SVN for the translators/scripty/?&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:Could be done with a git-svn gateway presumably? -Mike Arthur 19/10/2009 16:04&lt;br /&gt;
&lt;br /&gt;
:if we leave the docbook stuff in svn, we can avoid this a bit longer. --[[User:Chani|Chani]] 23:21, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==[[Development/Tutorials/Git|Techbase Documentation]]==&lt;br /&gt;
'''Owner:''' Chani, greeneg, - ''please help out!''&lt;br /&gt;
{{Progress bar|10}}&lt;br /&gt;
&lt;br /&gt;
:At least minimal documentation about how to checkout, how to get a Gitorious account, how to request a merge needed, other git documentation and links to other git information would be very useful also.&lt;br /&gt;
&lt;br /&gt;
:see the [[Development/Tutorials/Git|Git Tutorial Page]]. help wanted!!&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Setup git mirrors for cloning==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' No one (help!)&lt;br /&gt;
:Re-purpose the anonsvn servers. This item might be a blocker.&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Talk to people using other distros about git==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' Sebas, Eike&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
* Gentoo: They seem to be prepared for moving their live SVN packages to git; their package manager has easily-reusable classes to fetch from an SCM and moving the ebuilds to using the git class rather than the SVN class should be easy. Positive comments to that end from people in #gentoo-kde.&lt;br /&gt;
* Fedora: Some unhappyness about git because SVN allows them to remotely produce a diff between two SVN URLs, without making a checkout / git clone first. Kevin Kofler (IRC nick Kevin_Kofler, #fedora-kde) says this will make their packager work harder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Post-migration Issues=&lt;br /&gt;
&lt;br /&gt;
==Website Branding==&lt;br /&gt;
{{Progress bar|2|text=(initial ideas on the table)}}&lt;br /&gt;
'''Owner:''' ruphy&lt;br /&gt;
&lt;br /&gt;
:KDE Gitorious should be branded accordingly, and should be reachable from git.kde.org as well as kde.gitorious.org&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
=Unscheduled &amp;amp; Open=&lt;br /&gt;
&lt;br /&gt;
==Allow tagging without involving sysadmins==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
&lt;br /&gt;
'''Owner:''' johan&lt;br /&gt;
&lt;br /&gt;
:Pushing a tag currently requires permissions to do a force push, which is a repository-wide checkbox that can only be toggled by a kde-developers admin. Thus the workflow for a dev wanting to do a release tag for his app is to ask an admin to enable force pushing, then to push his tag, and then to tell the admin he can disable force pushing again. This doesn't scale, is insecure, and at odds with KDE's open access policy when it comes to managing the repos (right now in SVN, you need sysadmin to create an app dir in /tags for you, but don't have to ask permission for every individual tag). Johan has promised a solution for this.&lt;br /&gt;
&lt;br /&gt;
:Notable discussion points on kde-scm-interest:&lt;br /&gt;
:http://mail.kde.org/pipermail/kde-scm-interest/2009-November/000782.html&lt;br /&gt;
:http://mail.kde.org/pipermail/kde-scm-interest/2009-November/000784.html&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Account setup on Gitorious==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
&lt;br /&gt;
'''Owner:''' ''eean, johan, boud, dario''&lt;br /&gt;
&lt;br /&gt;
:Creating an account on Gitorious isn't hard, but asking to be added to the KDE group is inconvenient. For the migration we should set up a system (via email or wiki?) where developers can ask to have an account autocreated for them, or add their existing Gitorious account to a list to be added to the group. Once this is in place an announcement should be sent to all svn accounts explaining the process, and privacy information.&lt;br /&gt;
&lt;br /&gt;
:Basically the currently method of using Bugzilla works fine now and works fine in the longterm. But in the transition month when hundreds of accounts must be created or added, we need a better system. Its important to make it as easy as possible so that we don't lose anyone in the shuffle.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Update bugs.kde.org's account-request page==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' ''???''&lt;br /&gt;
&lt;br /&gt;
:When people get new svn accounts it would make sense for them to join the kde-developers group too.&lt;br /&gt;
&lt;br /&gt;
:We also need a standard way for existing svn users to request to join kde-developers. This must include an explanation of the requirements for joining the group, (iirc, just that your gitorious display name is set to your real name)&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:After the initial migration the request page probably should be re-purposed to essentially mean nothing but putting the user in that group.  People can request merges without being part of the group, so its likely to get less usage after we get the current set of users added.&lt;br /&gt;
&lt;br /&gt;
=Completed Tasks=&lt;br /&gt;
&lt;br /&gt;
==Opt-in privacy exception required for kde-developers==&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' ''Gitorious'', ''KDE e.V. Board'', ''eean''&lt;br /&gt;
&lt;br /&gt;
:KDE sysadmins need access to some information that Shortcut could not give them due to their privacy policy. Examples include an email list of all the developers and SQL-level access to information about all the repos in KDE (since it stores who pushes what, information not stored in the git repo itself).&lt;br /&gt;
&lt;br /&gt;
:Such requirements will likely be put into the contract with Shortcut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
:So the e.V. Board is an owner since this is a legal/contract/money issue. Added myself only because I'm shepherding the issue. --[[User:Eean|eean]] 16:16, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; &lt;br /&gt;
&lt;br /&gt;
:'''We will not get sql access to the information. For the alternative solution see the Push Log issue'''&lt;br /&gt;
&lt;br /&gt;
==Reviewboard==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' darktears&lt;br /&gt;
&lt;br /&gt;
This should be easily done with Gitorious web interface and merge requests actually.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:but reviewboard has features gitorious (right now) doesn't, like commenting on specific lines and not having to set up a merge request. --chani&lt;br /&gt;
::Also email notifications when someone reviews are needed --thomasz&lt;br /&gt;
:We're working on this for someone else right now, so pretty soon --johan-s&lt;br /&gt;
:I consider the latest changes to gitorious to finish this. If more reviewboard features are still needed, and git supports reviewboard, I think this is something we can look at doing post-conversion. --Ian Monroe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SSH blocked in corporations and universities.==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' ''Unknown''&lt;br /&gt;
&lt;br /&gt;
:Some universities tend to block the SSH port. There should be a workaround to use SSH on some different port. github.com already runs a SSH server on port 443. But that assumes you are using a proxy. It has been found that this hasn't worked with a lot of people, especially those who have a direct connection to the internet ( so some transparent blocking by the ISP ). It would be great if (almost) every KDE developer were to be asked to check if other ports work before KDE made the switch. Otherwise there could be an automated email where the git patches could be sent, and appropriately patched to the right location too.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:http://blog.gitorious.org/2009/10/20/stuck-behind-a-firewall/, and there's always been HTTP cloning (although the current impl. in Git is a bit on the slow side) --johan-s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Talk to windows guys about git.==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:'''  aseigo&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
They aren't huge fans of git, but are using it. They require a single mainline and can't cope with multiple branches. Otherwise, it's workable, even if it will take an adjustment period.&lt;br /&gt;
&lt;br /&gt;
==pre-commit hooks==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' ''(unknown)''&lt;br /&gt;
&lt;br /&gt;
:acltest, docbook, EOL/UTF-8&lt;br /&gt;
&lt;br /&gt;
:A web hook isn't good enough for these because they have to run and return whether to allow the push, for every single push to every KDE repo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:gitorious guys said they *might* be willing to allow a few scripts on their server for KDE as a special exception, iirc. --chani&lt;br /&gt;
&lt;br /&gt;
:: Yes, at least for basic things, heavier things like doc building would probably have to be mirrored (goes for pre/post) --johan-s&lt;br /&gt;
&lt;br /&gt;
:It turns out that acl and docbook might not be needed so long as web and docs/ stuff stays in svn.&lt;br /&gt;
&lt;br /&gt;
:: Here's where to find the current scripts - http://websvn.kde.org/trunk/kde-common/svn/hooks/ --[[User:Argonel|Argonel]] 23:06, 11 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So: this is actually done because it needs no longer to be done? (boud)&lt;br /&gt;
&lt;br /&gt;
::Apparently, so; moving to complete. (aseigo)&lt;br /&gt;
= other notes =&lt;br /&gt;
&lt;br /&gt;
==Random==&lt;br /&gt;
convert all accounts to SSH??&lt;br /&gt;
multiple git repos joined??&lt;br /&gt;
- use repo tool from android?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KDE accounts file is no longer necessary---used for mapping svn ID -&amp;gt; email, but we have that now from Gitorious.&lt;br /&gt;
&lt;br /&gt;
http://mail.kde.org/pipermail/dot-stories/2005-May/000509.html might be a good guide on what docs we need.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
some of this stuff was from the list from GCDS that was in this email [http://markmail.org/message/u6eqfjece7fibfyo http://markmail.org/message/u6eqfjece7fibfyo]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRC Meetings==&lt;br /&gt;
* [[Projects/MovetoGit/Meeting1111|Minutes]] of meeting 11 November 2009&lt;br /&gt;
* [[Projects/MovetoGit/Meeting1118|Next meeting]] 18:00, 25 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
= jobs =&lt;br /&gt;
''TODO merge this with the todolists above''&lt;br /&gt;
&lt;br /&gt;
michael jansen: talking to kdesvn-build/mpyne&lt;br /&gt;
:--Done? -&amp;gt; http://kdesvn-build.kde.org/releases/kdesvn-build-1.10.php -- Panagiotis Papadopoulos 1 November 2009&lt;br /&gt;
::Yes, but the __kdesvn-build-remote used in the impl isn't pleasant for users already on git so it still needs more work for them. [[User:Mpyne|Mpyne]] 20:32, 11 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
thiago and sebas: funding &lt;br /&gt;
&lt;br /&gt;
jonas: domain name &lt;br /&gt;
&lt;br /&gt;
thiago: actually convert :D (ThomasZ put some work in the converter tool to make it easier to use; see his 'svn2git' project on gitorious.org)&lt;br /&gt;
&lt;br /&gt;
ML: convert to SSH&lt;br /&gt;
&lt;br /&gt;
chani: techbase docs for scripty &lt;br /&gt;
&lt;br /&gt;
thiago: pre/post-commit hooks &lt;br /&gt;
&lt;br /&gt;
sebas/lydia/leo: communication with teams! tell people! keeping track that &lt;br /&gt;
everything is being done.&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/MovetoGit</id>
		<title>Projects/MovetoGit</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/MovetoGit"/>
				<updated>2009-12-02T21:48:53Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Account setup on Gitorious */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the page for co-ordinating KDE's move to [http://git-scm.com/ Git].&lt;br /&gt;
&lt;br /&gt;
If you're interested in helping, you should join the [https://mail.kde.org/mailman/listinfo/kde-scm-interest scm-interest@kde.org] mailinglist and [irc://chat.freenode.net/kde-git #kde-git] on freenode.&lt;br /&gt;
&lt;br /&gt;
=The Plan=&lt;br /&gt;
&lt;br /&gt;
KDE is, eventually, moving to Git. We will be using [https://gitorious.org/ gitorious.org] servers, with funding from Nokia. We will also have our own mirrors using existing KDE servers.&lt;br /&gt;
&lt;br /&gt;
We are working with the Gitorious people to ensure their server will meet all our needs as well as everyone's privacy requirements. The distributed nature of Git will make it easy for us to migrate off gitorious.org at any time should the need arise (but that's unlikely :).&lt;br /&gt;
&lt;br /&gt;
In the summer of 2009, [http://gitorious.org/amarok Amarok] moved to Gitorious to test the waters and find problems that would affect KDE. Once those problems have been solved, all of KDE will be able to switch.&lt;br /&gt;
&lt;br /&gt;
==Why?==&lt;br /&gt;
&lt;br /&gt;
Git offers many advantages over svn, including offline commits and much easier to keep a feature branch up-to-date. Many KDE developers are already using git-svn, but this tool has its limitations. We want to have the full power of Git available, and we have people willing to do the work necessary to migrate.&lt;br /&gt;
&lt;br /&gt;
==How?==&lt;br /&gt;
&lt;br /&gt;
When we move, KDE's svn repository will be migrated into several Git repos, all on gitorious.org. Main modules such as kdelibs and kdebase will each become one repository. Projects in extragear will each have their own repository. The kde.gitorious.org site will have a list (lists?) of all these repositories using the builtin project wiki. Scripts will be provided for downloading, say, all of extragear, so &amp;quot;moving&amp;quot; a project from kdereview to extragear would simply involve editing a file kept online that defined the location of projects.&lt;br /&gt;
&lt;br /&gt;
A few things will stay in subversion - currently websites, translations and manuals. It's possible they could move to Git later, but they won't be part of the mass migration.&lt;br /&gt;
&lt;br /&gt;
On Gitorious, all KDE developers will be part of the [http://gitorious.org/+kde-developers kde-developers group]. Developers in this group are required to set their &amp;quot;full name&amp;quot; for their Gitorious account to their real name. If you are not in this group or do not have an account, a system will be set up to simplify the process. Or you can just go to Gitorious yourself, create an account, and ask to be added to the group. :)&lt;br /&gt;
&lt;br /&gt;
=Blockers=&lt;br /&gt;
&lt;br /&gt;
Tasks that need to get done before we can migrate&lt;br /&gt;
&lt;br /&gt;
==SLA for gitorious.org==&lt;br /&gt;
{{Progress bar|20}}&lt;br /&gt;
'''Owner:''' aseigo, TZander&lt;br /&gt;
&lt;br /&gt;
: The SLA terms need to be documented as well as who will be footing the bill, if any. TZander will be taking the discussion to people internal @ Qt to discuss this as there was a tentative understanding that cooperation is forthcoming there.&lt;br /&gt;
&lt;br /&gt;
==Gitorious Needs a feature to disable merge request emails for certain repos==&lt;br /&gt;
{{Progress bar|10}}&lt;br /&gt;
'''Owner:''' [http://gitorious.org/gitorious Gitorious]&lt;br /&gt;
&lt;br /&gt;
:Everyone added to the [http://gitorious.org/+kde-developers kde-developers] group gets an e-mail when anyone makes a merge request to any of our projects. This is undesirable (as most KDE devs are not Amarok devs and many other permutations). A solution for this will have to be developed on Gitorious before all of KDE goes to Gitorious.&lt;br /&gt;
&lt;br /&gt;
:Johan will be working on this at the next Gitorious sprint.&lt;br /&gt;
&lt;br /&gt;
:Requirements:&lt;br /&gt;
:*be able to emulate commit-fitler features, or have it feed commits into the kde-commits and the current commit-filter can be used. ''This req could also be fulfilled by the 'post-commit' todo item.''&lt;br /&gt;
:*allow sysadmins to email all KDE account holders&lt;br /&gt;
:*be able to subscribe to specific projects and their merge requests&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:At a minimum, users need the ability to choose which projects to get email from. It would be really awesome to have more fine-grained control, though, like the [http://commitfilter.kde.org/ commitfilter]. konqueror and kwin and plasma will all be in the same git repo but I only want merge requests for one of them. --Chani&lt;br /&gt;
::One solution there is to have Gitorious send all email to kde-commits and we can continue using commit-filter. Probably a good idea to set that up to keep continuity regardless. --[[User:Eean|eean]] 16:16, 12 November 2009 (UTC)&lt;br /&gt;
:::keeping commitfilter working is good, but merge-requests aren't commits... can commit-filter be upgraded to handle them? [[User:Chani|Chani]] 23:19, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:put progress to 10 since Gitorious folks are working on it. :) --[[User:Eean|eean]] 16:21, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Write / update importing rules for svn2git==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' morice, tzander - volunteers wanted!&lt;br /&gt;
&lt;br /&gt;
:The importer is on gitorious.org as svn2git we have a set of rules to tell the importer what svn dirs turn into which git repos and those need constant updating whenever a new branch or tag or project is created. This has not been done for quite some time and so someone should rsync the svn repo run svn2git and fix the rules and importer whenever the import stops.&lt;br /&gt;
&lt;br /&gt;
This process will need to be repeated every so often until we're ready to do the migration.&lt;br /&gt;
&lt;br /&gt;
==Script for downloading virtual KDE hierarchies==&lt;br /&gt;
{{Progress bar|5}}&lt;br /&gt;
'''Owner''': Michael Jansen (mjansen)&lt;br /&gt;
:One goal for the whole project is to support how people use KDE SVN as much as possible. One issue is that people often check out 'extragear/multimedia' or 'kdesupport' as a whole. However with git extragear, playground, kdesupport etc projects are going to be split up and are essentially going to exist as a flat list on Gitorious.&lt;br /&gt;
:The proposed solution is have a computer-readable file (eg XML) that only sysadmins could edit. It would define a tree of projects mirroring the current SVN tree. A script would then be able to easily perform operations like 'remote update', 'pull', 'clone' on multiple repos at once, in the same way users are able to checkout or update 'extragear' all at once.&lt;br /&gt;
:More info is at the [[Projects/MovetoGit/MassCloneScript|scripts development page]]. The tool itself is hosted at: http://rubyforge.org/projects/build-tool/.&lt;br /&gt;
&lt;br /&gt;
:Morice-net will help mjansen with testing once the extensions have been finished.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
:Progress 5 since we have a spec. :) --[[User:Eean|eean]]&lt;br /&gt;
:Ok now the plan is basically that mjansen will extend his build script to allow clone-only and to update its recipes from an online source. The recipes have the advantage of defining all the build deps as well, so we would end up with official documentation of build dependencies, something thats often been missing. --[[User:Eean|eean]] 17:18, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''Link'''&lt;br /&gt;
http://techbase.kde.org/Projects/MovetoGit/MassCloneScript&lt;br /&gt;
&lt;br /&gt;
==Push log==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' nobody!!&lt;br /&gt;
&lt;br /&gt;
:we need a record of who pushed what, because commit ids can be anything (and there are legitimate reasons to push commits with another person's name).  could whoever remember how that discussion ended please fill in the details here?&lt;br /&gt;
&lt;br /&gt;
==post-commit hooks==&lt;br /&gt;
{{Progress bar|25}}&lt;br /&gt;
'''Owner:''' ''(morice, dario, johan) maybe?? volunteers needed!!''&lt;br /&gt;
&lt;br /&gt;
:List of scripts needed:&lt;br /&gt;
:* BUG/CCMAIL&lt;br /&gt;
:* email/CIA&lt;br /&gt;
:* license header checks&lt;br /&gt;
:* EBN (dario)&lt;br /&gt;
&lt;br /&gt;
:Gitorious needs to provide a way for hooks to be called; KDE needs to write said hooks.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:There is a branch of gitorious called web-hooks http://gitorious.org/gitorious/mainline/commits/web-hooks --Panagiotis Papadopoulos 1 November 2009&lt;br /&gt;
:Same situation as commit emails. I can do it but it doesn't scale well and a Gitorious-supported solution would be nicer. --[[User:Eean|eean]] 16:07, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Get rid of svn:externals==&lt;br /&gt;
{{Progress bar|40}}&lt;br /&gt;
'''Owner:''' David Faure&lt;br /&gt;
&lt;br /&gt;
:not possible with git, broken by design.&lt;br /&gt;
&lt;br /&gt;
::&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:Is there a list of instances of svn::externals anywhere?- -[[User:Yokem55|Yokem55]] 19:27, 1 November 2009 (UTC)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: kdesupport is clean. kdebase still has an ugly one, nuno and others agreed to duplicate the little bit of shared code iirc, but it wasn't done.&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: ok, what is the ugly one in kdebase?&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: oxygenhelper stuff&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: ok, can i also have a number to stick on the progress bar?&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; Med: indeed.&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: you sound like a manager :-)&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; &amp;quot;I want numbers!&amp;quot; :-)&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: lol&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: i have two d10 here, i'll just roll them :p\&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: and 22% it is :p&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: actually most externals are in extragear and playground. the main modules have only 3 left AFAICS.&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: so for the main modules, I solved 2/5, which is 40% :-)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:::--[[User:Argonel|Argonel]] 03:04, 14 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=Nice to have before the migration=&lt;br /&gt;
&lt;br /&gt;
==Snapshot to read-only svn==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:'''&lt;br /&gt;
&lt;br /&gt;
:It's work, but maybe some people would like it. NEEDED for documentation, in order to get it back into SVN for the translators/scripty/?&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:Could be done with a git-svn gateway presumably? -Mike Arthur 19/10/2009 16:04&lt;br /&gt;
&lt;br /&gt;
:if we leave the docbook stuff in svn, we can avoid this a bit longer. --[[User:Chani|Chani]] 23:21, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==[[Development/Tutorials/Git|Techbase Documentation]]==&lt;br /&gt;
'''Owner:''' Chani, greeneg, - ''please help out!''&lt;br /&gt;
{{Progress bar|10}}&lt;br /&gt;
&lt;br /&gt;
:At least minimal documentation about how to checkout, how to get a Gitorious account, how to request a merge needed, other git documentation and links to other git information would be very useful also.&lt;br /&gt;
&lt;br /&gt;
:see the [[Development/Tutorials/Git|Git Tutorial Page]]. help wanted!!&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Setup git mirrors for cloning==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' No one (help!)&lt;br /&gt;
:Re-purpose the anonsvn servers. This item might be a blocker.&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Talk to people using other distros about git==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' Sebas, Eike&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
* Gentoo: They seem to be prepared for moving their live SVN packages to git; their package manager has easily-reusable classes to fetch from an SCM and moving the ebuilds to using the git class rather than the SVN class should be easy. Positive comments to that end from people in #gentoo-kde.&lt;br /&gt;
* Fedora: Some unhappyness about git because SVN allows them to remotely produce a diff between two SVN URLs, without making a checkout / git clone first. Kevin Kofler (IRC nick Kevin_Kofler, #fedora-kde) says this will make their packager work harder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Post-migration Issues=&lt;br /&gt;
&lt;br /&gt;
==Website Branding==&lt;br /&gt;
{{Progress bar|2|text=(initial ideas on the table)}}&lt;br /&gt;
'''Owner:''' ruphy&lt;br /&gt;
&lt;br /&gt;
:KDE Gitorious should be branded accordingly, and should be reachable from git.kde.org as well as kde.gitorious.org&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
=Unscheduled &amp;amp; Open=&lt;br /&gt;
&lt;br /&gt;
==Allow tagging without involving sysadmins==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
&lt;br /&gt;
'''Owner:''' johan&lt;br /&gt;
&lt;br /&gt;
:Pushing a tag currently requires permissions to do a force push, which is a repository-wide checkbox that can only be toggled by a kde-developers admin. Thus the workflow for a dev wanting to do a release tag for his app is to ask an admin to enable force pushing, then to push his tag, and then to tell the admin he can disable force pushing again. This doesn't scale, is insecure, and at odds with KDE's open access policy when it comes to managing the repos (right now in SVN, you need sysadmin to create an app dir in /tags for you, but don't have to ask permission for every individual tag). Johan has promised a solution for this.&lt;br /&gt;
&lt;br /&gt;
:Notable discussion points on kde-scm-interest:&lt;br /&gt;
:http://mail.kde.org/pipermail/kde-scm-interest/2009-November/000782.html&lt;br /&gt;
:http://mail.kde.org/pipermail/kde-scm-interest/2009-November/000784.html&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Account setup on Gitorious==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
&lt;br /&gt;
'''Owner:''' ''eean, johan, boud, dario''&lt;br /&gt;
&lt;br /&gt;
:Creating an account on Gitorious isn't hard, but asking to be added to the KDE group is inconvenient. For the migration we should set up a system (via email or wiki?) where developers can ask to have an account autocreated for them, or add their existing Gitorious account to a list to be added to the group. Once this is in place an announcement should be sent to all svn accounts explaining the process, and privacy information.&lt;br /&gt;
&lt;br /&gt;
:Basically the currently method of using Bugzilla works fine now and works fine in the longterm. But in the transition month when hundreds of accounts must be created or added, we need a better system. Its important to make it as easy as possible so that we don't lose anyone in the shuffle.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Update bugs.kde.org's account-request page==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' ''???''&lt;br /&gt;
&lt;br /&gt;
:When people get new svn accounts it would make sense for them to join the kde-developers group too.&lt;br /&gt;
&lt;br /&gt;
:We also need a standard way for existing svn users to request to join kde-developers. This must include an explanation of the requirements for joining the group, (iirc, just that your gitorious display name is set to your real name)&lt;br /&gt;
&lt;br /&gt;
=Completed Tasks=&lt;br /&gt;
&lt;br /&gt;
==Opt-in privacy exception required for kde-developers==&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' ''Gitorious'', ''KDE e.V. Board'', ''eean''&lt;br /&gt;
&lt;br /&gt;
:KDE sysadmins need access to some information that Shortcut could not give them due to their privacy policy. Examples include an email list of all the developers and SQL-level access to information about all the repos in KDE (since it stores who pushes what, information not stored in the git repo itself).&lt;br /&gt;
&lt;br /&gt;
:Such requirements will likely be put into the contract with Shortcut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
:So the e.V. Board is an owner since this is a legal/contract/money issue. Added myself only because I'm shepherding the issue. --[[User:Eean|eean]] 16:16, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; &lt;br /&gt;
&lt;br /&gt;
:'''We will not get sql access to the information. For the alternative solution see the Push Log issue'''&lt;br /&gt;
&lt;br /&gt;
==Reviewboard==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' darktears&lt;br /&gt;
&lt;br /&gt;
This should be easily done with Gitorious web interface and merge requests actually.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:but reviewboard has features gitorious (right now) doesn't, like commenting on specific lines and not having to set up a merge request. --chani&lt;br /&gt;
::Also email notifications when someone reviews are needed --thomasz&lt;br /&gt;
:We're working on this for someone else right now, so pretty soon --johan-s&lt;br /&gt;
:I consider the latest changes to gitorious to finish this. If more reviewboard features are still needed, and git supports reviewboard, I think this is something we can look at doing post-conversion. --Ian Monroe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SSH blocked in corporations and universities.==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' ''Unknown''&lt;br /&gt;
&lt;br /&gt;
:Some universities tend to block the SSH port. There should be a workaround to use SSH on some different port. github.com already runs a SSH server on port 443. But that assumes you are using a proxy. It has been found that this hasn't worked with a lot of people, especially those who have a direct connection to the internet ( so some transparent blocking by the ISP ). It would be great if (almost) every KDE developer were to be asked to check if other ports work before KDE made the switch. Otherwise there could be an automated email where the git patches could be sent, and appropriately patched to the right location too.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:http://blog.gitorious.org/2009/10/20/stuck-behind-a-firewall/, and there's always been HTTP cloning (although the current impl. in Git is a bit on the slow side) --johan-s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Talk to windows guys about git.==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:'''  aseigo&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
They aren't huge fans of git, but are using it. They require a single mainline and can't cope with multiple branches. Otherwise, it's workable, even if it will take an adjustment period.&lt;br /&gt;
&lt;br /&gt;
==pre-commit hooks==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' ''(unknown)''&lt;br /&gt;
&lt;br /&gt;
:acltest, docbook, EOL/UTF-8&lt;br /&gt;
&lt;br /&gt;
:A web hook isn't good enough for these because they have to run and return whether to allow the push, for every single push to every KDE repo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:gitorious guys said they *might* be willing to allow a few scripts on their server for KDE as a special exception, iirc. --chani&lt;br /&gt;
&lt;br /&gt;
:: Yes, at least for basic things, heavier things like doc building would probably have to be mirrored (goes for pre/post) --johan-s&lt;br /&gt;
&lt;br /&gt;
:It turns out that acl and docbook might not be needed so long as web and docs/ stuff stays in svn.&lt;br /&gt;
&lt;br /&gt;
:: Here's where to find the current scripts - http://websvn.kde.org/trunk/kde-common/svn/hooks/ --[[User:Argonel|Argonel]] 23:06, 11 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So: this is actually done because it needs no longer to be done? (boud)&lt;br /&gt;
&lt;br /&gt;
::Apparently, so; moving to complete. (aseigo)&lt;br /&gt;
= other notes =&lt;br /&gt;
&lt;br /&gt;
==Random==&lt;br /&gt;
convert all accounts to SSH??&lt;br /&gt;
multiple git repos joined??&lt;br /&gt;
- use repo tool from android?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KDE accounts file is no longer necessary---used for mapping svn ID -&amp;gt; email, but we have that now from Gitorious.&lt;br /&gt;
&lt;br /&gt;
http://mail.kde.org/pipermail/dot-stories/2005-May/000509.html might be a good guide on what docs we need.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
some of this stuff was from the list from GCDS that was in this email [http://markmail.org/message/u6eqfjece7fibfyo http://markmail.org/message/u6eqfjece7fibfyo]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRC Meetings==&lt;br /&gt;
* [[Projects/MovetoGit/Meeting1111|Minutes]] of meeting 11 November 2009&lt;br /&gt;
* [[Projects/MovetoGit/Meeting1118|Next meeting]] 18:00, 25 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
= jobs =&lt;br /&gt;
''TODO merge this with the todolists above''&lt;br /&gt;
&lt;br /&gt;
michael jansen: talking to kdesvn-build/mpyne&lt;br /&gt;
:--Done? -&amp;gt; http://kdesvn-build.kde.org/releases/kdesvn-build-1.10.php -- Panagiotis Papadopoulos 1 November 2009&lt;br /&gt;
::Yes, but the __kdesvn-build-remote used in the impl isn't pleasant for users already on git so it still needs more work for them. [[User:Mpyne|Mpyne]] 20:32, 11 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
thiago and sebas: funding &lt;br /&gt;
&lt;br /&gt;
jonas: domain name &lt;br /&gt;
&lt;br /&gt;
thiago: actually convert :D (ThomasZ put some work in the converter tool to make it easier to use; see his 'svn2git' project on gitorious.org)&lt;br /&gt;
&lt;br /&gt;
ML: convert to SSH&lt;br /&gt;
&lt;br /&gt;
chani: techbase docs for scripty &lt;br /&gt;
&lt;br /&gt;
thiago: pre/post-commit hooks &lt;br /&gt;
&lt;br /&gt;
sebas/lydia/leo: communication with teams! tell people! keeping track that &lt;br /&gt;
everything is being done.&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/MovetoGit</id>
		<title>Projects/MovetoGit</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/MovetoGit"/>
				<updated>2009-12-02T21:48:33Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Allow tagging without involving sysadmins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the page for co-ordinating KDE's move to [http://git-scm.com/ Git].&lt;br /&gt;
&lt;br /&gt;
If you're interested in helping, you should join the [https://mail.kde.org/mailman/listinfo/kde-scm-interest scm-interest@kde.org] mailinglist and [irc://chat.freenode.net/kde-git #kde-git] on freenode.&lt;br /&gt;
&lt;br /&gt;
=The Plan=&lt;br /&gt;
&lt;br /&gt;
KDE is, eventually, moving to Git. We will be using [https://gitorious.org/ gitorious.org] servers, with funding from Nokia. We will also have our own mirrors using existing KDE servers.&lt;br /&gt;
&lt;br /&gt;
We are working with the Gitorious people to ensure their server will meet all our needs as well as everyone's privacy requirements. The distributed nature of Git will make it easy for us to migrate off gitorious.org at any time should the need arise (but that's unlikely :).&lt;br /&gt;
&lt;br /&gt;
In the summer of 2009, [http://gitorious.org/amarok Amarok] moved to Gitorious to test the waters and find problems that would affect KDE. Once those problems have been solved, all of KDE will be able to switch.&lt;br /&gt;
&lt;br /&gt;
==Why?==&lt;br /&gt;
&lt;br /&gt;
Git offers many advantages over svn, including offline commits and much easier to keep a feature branch up-to-date. Many KDE developers are already using git-svn, but this tool has its limitations. We want to have the full power of Git available, and we have people willing to do the work necessary to migrate.&lt;br /&gt;
&lt;br /&gt;
==How?==&lt;br /&gt;
&lt;br /&gt;
When we move, KDE's svn repository will be migrated into several Git repos, all on gitorious.org. Main modules such as kdelibs and kdebase will each become one repository. Projects in extragear will each have their own repository. The kde.gitorious.org site will have a list (lists?) of all these repositories using the builtin project wiki. Scripts will be provided for downloading, say, all of extragear, so &amp;quot;moving&amp;quot; a project from kdereview to extragear would simply involve editing a file kept online that defined the location of projects.&lt;br /&gt;
&lt;br /&gt;
A few things will stay in subversion - currently websites, translations and manuals. It's possible they could move to Git later, but they won't be part of the mass migration.&lt;br /&gt;
&lt;br /&gt;
On Gitorious, all KDE developers will be part of the [http://gitorious.org/+kde-developers kde-developers group]. Developers in this group are required to set their &amp;quot;full name&amp;quot; for their Gitorious account to their real name. If you are not in this group or do not have an account, a system will be set up to simplify the process. Or you can just go to Gitorious yourself, create an account, and ask to be added to the group. :)&lt;br /&gt;
&lt;br /&gt;
=Blockers=&lt;br /&gt;
&lt;br /&gt;
Tasks that need to get done before we can migrate&lt;br /&gt;
&lt;br /&gt;
==SLA for gitorious.org==&lt;br /&gt;
{{Progress bar|20}}&lt;br /&gt;
'''Owner:''' aseigo, TZander&lt;br /&gt;
&lt;br /&gt;
: The SLA terms need to be documented as well as who will be footing the bill, if any. TZander will be taking the discussion to people internal @ Qt to discuss this as there was a tentative understanding that cooperation is forthcoming there.&lt;br /&gt;
&lt;br /&gt;
==Gitorious Needs a feature to disable merge request emails for certain repos==&lt;br /&gt;
{{Progress bar|10}}&lt;br /&gt;
'''Owner:''' [http://gitorious.org/gitorious Gitorious]&lt;br /&gt;
&lt;br /&gt;
:Everyone added to the [http://gitorious.org/+kde-developers kde-developers] group gets an e-mail when anyone makes a merge request to any of our projects. This is undesirable (as most KDE devs are not Amarok devs and many other permutations). A solution for this will have to be developed on Gitorious before all of KDE goes to Gitorious.&lt;br /&gt;
&lt;br /&gt;
:Johan will be working on this at the next Gitorious sprint.&lt;br /&gt;
&lt;br /&gt;
:Requirements:&lt;br /&gt;
:*be able to emulate commit-fitler features, or have it feed commits into the kde-commits and the current commit-filter can be used. ''This req could also be fulfilled by the 'post-commit' todo item.''&lt;br /&gt;
:*allow sysadmins to email all KDE account holders&lt;br /&gt;
:*be able to subscribe to specific projects and their merge requests&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:At a minimum, users need the ability to choose which projects to get email from. It would be really awesome to have more fine-grained control, though, like the [http://commitfilter.kde.org/ commitfilter]. konqueror and kwin and plasma will all be in the same git repo but I only want merge requests for one of them. --Chani&lt;br /&gt;
::One solution there is to have Gitorious send all email to kde-commits and we can continue using commit-filter. Probably a good idea to set that up to keep continuity regardless. --[[User:Eean|eean]] 16:16, 12 November 2009 (UTC)&lt;br /&gt;
:::keeping commitfilter working is good, but merge-requests aren't commits... can commit-filter be upgraded to handle them? [[User:Chani|Chani]] 23:19, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:put progress to 10 since Gitorious folks are working on it. :) --[[User:Eean|eean]] 16:21, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Write / update importing rules for svn2git==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' morice, tzander - volunteers wanted!&lt;br /&gt;
&lt;br /&gt;
:The importer is on gitorious.org as svn2git we have a set of rules to tell the importer what svn dirs turn into which git repos and those need constant updating whenever a new branch or tag or project is created. This has not been done for quite some time and so someone should rsync the svn repo run svn2git and fix the rules and importer whenever the import stops.&lt;br /&gt;
&lt;br /&gt;
This process will need to be repeated every so often until we're ready to do the migration.&lt;br /&gt;
&lt;br /&gt;
==Script for downloading virtual KDE hierarchies==&lt;br /&gt;
{{Progress bar|5}}&lt;br /&gt;
'''Owner''': Michael Jansen (mjansen)&lt;br /&gt;
:One goal for the whole project is to support how people use KDE SVN as much as possible. One issue is that people often check out 'extragear/multimedia' or 'kdesupport' as a whole. However with git extragear, playground, kdesupport etc projects are going to be split up and are essentially going to exist as a flat list on Gitorious.&lt;br /&gt;
:The proposed solution is have a computer-readable file (eg XML) that only sysadmins could edit. It would define a tree of projects mirroring the current SVN tree. A script would then be able to easily perform operations like 'remote update', 'pull', 'clone' on multiple repos at once, in the same way users are able to checkout or update 'extragear' all at once.&lt;br /&gt;
:More info is at the [[Projects/MovetoGit/MassCloneScript|scripts development page]]. The tool itself is hosted at: http://rubyforge.org/projects/build-tool/.&lt;br /&gt;
&lt;br /&gt;
:Morice-net will help mjansen with testing once the extensions have been finished.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
:Progress 5 since we have a spec. :) --[[User:Eean|eean]]&lt;br /&gt;
:Ok now the plan is basically that mjansen will extend his build script to allow clone-only and to update its recipes from an online source. The recipes have the advantage of defining all the build deps as well, so we would end up with official documentation of build dependencies, something thats often been missing. --[[User:Eean|eean]] 17:18, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''Link'''&lt;br /&gt;
http://techbase.kde.org/Projects/MovetoGit/MassCloneScript&lt;br /&gt;
&lt;br /&gt;
==Push log==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' nobody!!&lt;br /&gt;
&lt;br /&gt;
:we need a record of who pushed what, because commit ids can be anything (and there are legitimate reasons to push commits with another person's name).  could whoever remember how that discussion ended please fill in the details here?&lt;br /&gt;
&lt;br /&gt;
==post-commit hooks==&lt;br /&gt;
{{Progress bar|25}}&lt;br /&gt;
'''Owner:''' ''(morice, dario, johan) maybe?? volunteers needed!!''&lt;br /&gt;
&lt;br /&gt;
:List of scripts needed:&lt;br /&gt;
:* BUG/CCMAIL&lt;br /&gt;
:* email/CIA&lt;br /&gt;
:* license header checks&lt;br /&gt;
:* EBN (dario)&lt;br /&gt;
&lt;br /&gt;
:Gitorious needs to provide a way for hooks to be called; KDE needs to write said hooks.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:There is a branch of gitorious called web-hooks http://gitorious.org/gitorious/mainline/commits/web-hooks --Panagiotis Papadopoulos 1 November 2009&lt;br /&gt;
:Same situation as commit emails. I can do it but it doesn't scale well and a Gitorious-supported solution would be nicer. --[[User:Eean|eean]] 16:07, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Get rid of svn:externals==&lt;br /&gt;
{{Progress bar|40}}&lt;br /&gt;
'''Owner:''' David Faure&lt;br /&gt;
&lt;br /&gt;
:not possible with git, broken by design.&lt;br /&gt;
&lt;br /&gt;
::&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:Is there a list of instances of svn::externals anywhere?- -[[User:Yokem55|Yokem55]] 19:27, 1 November 2009 (UTC)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: kdesupport is clean. kdebase still has an ugly one, nuno and others agreed to duplicate the little bit of shared code iirc, but it wasn't done.&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: ok, what is the ugly one in kdebase?&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: oxygenhelper stuff&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: ok, can i also have a number to stick on the progress bar?&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; Med: indeed.&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: you sound like a manager :-)&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; &amp;quot;I want numbers!&amp;quot; :-)&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: lol&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: i have two d10 here, i'll just roll them :p\&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: and 22% it is :p&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: actually most externals are in extragear and playground. the main modules have only 3 left AFAICS.&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: so for the main modules, I solved 2/5, which is 40% :-)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:::--[[User:Argonel|Argonel]] 03:04, 14 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=Nice to have before the migration=&lt;br /&gt;
&lt;br /&gt;
==Snapshot to read-only svn==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:'''&lt;br /&gt;
&lt;br /&gt;
:It's work, but maybe some people would like it. NEEDED for documentation, in order to get it back into SVN for the translators/scripty/?&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:Could be done with a git-svn gateway presumably? -Mike Arthur 19/10/2009 16:04&lt;br /&gt;
&lt;br /&gt;
:if we leave the docbook stuff in svn, we can avoid this a bit longer. --[[User:Chani|Chani]] 23:21, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==[[Development/Tutorials/Git|Techbase Documentation]]==&lt;br /&gt;
'''Owner:''' Chani, greeneg, - ''please help out!''&lt;br /&gt;
{{Progress bar|10}}&lt;br /&gt;
&lt;br /&gt;
:At least minimal documentation about how to checkout, how to get a Gitorious account, how to request a merge needed, other git documentation and links to other git information would be very useful also.&lt;br /&gt;
&lt;br /&gt;
:see the [[Development/Tutorials/Git|Git Tutorial Page]]. help wanted!!&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Setup git mirrors for cloning==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' No one (help!)&lt;br /&gt;
:Re-purpose the anonsvn servers. This item might be a blocker.&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Talk to people using other distros about git==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' Sebas, Eike&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
* Gentoo: They seem to be prepared for moving their live SVN packages to git; their package manager has easily-reusable classes to fetch from an SCM and moving the ebuilds to using the git class rather than the SVN class should be easy. Positive comments to that end from people in #gentoo-kde.&lt;br /&gt;
* Fedora: Some unhappyness about git because SVN allows them to remotely produce a diff between two SVN URLs, without making a checkout / git clone first. Kevin Kofler (IRC nick Kevin_Kofler, #fedora-kde) says this will make their packager work harder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Post-migration Issues=&lt;br /&gt;
&lt;br /&gt;
==Website Branding==&lt;br /&gt;
{{Progress bar|2|text=(initial ideas on the table)}}&lt;br /&gt;
'''Owner:''' ruphy&lt;br /&gt;
&lt;br /&gt;
:KDE Gitorious should be branded accordingly, and should be reachable from git.kde.org as well as kde.gitorious.org&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
=Unscheduled &amp;amp; Open=&lt;br /&gt;
&lt;br /&gt;
==Allow tagging without involving sysadmins==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
&lt;br /&gt;
'''Owner:''' johan&lt;br /&gt;
&lt;br /&gt;
:Pushing a tag currently requires permissions to do a force push, which is a repository-wide checkbox that can only be toggled by a kde-developers admin. Thus the workflow for a dev wanting to do a release tag for his app is to ask an admin to enable force pushing, then to push his tag, and then to tell the admin he can disable force pushing again. This doesn't scale, is insecure, and at odds with KDE's open access policy when it comes to managing the repos (right now in SVN, you need sysadmin to create an app dir in /tags for you, but don't have to ask permission for every individual tag). Johan has promised a solution for this.&lt;br /&gt;
&lt;br /&gt;
:Notable discussion points on kde-scm-interest:&lt;br /&gt;
:http://mail.kde.org/pipermail/kde-scm-interest/2009-November/000782.html&lt;br /&gt;
:http://mail.kde.org/pipermail/kde-scm-interest/2009-November/000784.html&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Account setup on Gitorious==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Depends on:''' Opt-in privacy exception required for kde-developers&lt;br /&gt;
&lt;br /&gt;
'''Owner:''' ''eean, johan, boud, dario''&lt;br /&gt;
&lt;br /&gt;
:Creating an account on Gitorious isn't hard, but asking to be added to the KDE group is inconvenient. For the migration we should set up a system (via email or wiki?) where developers can ask to have an account autocreated for them, or add their existing Gitorious account to a list to be added to the group. Once this is in place an announcement should be sent to all svn accounts explaining the process, and privacy information.&lt;br /&gt;
&lt;br /&gt;
:Basically the currently method of using Bugzilla works fine now and works fine in the longterm. But in the transition month when hundreds of accounts must be created or added, we need a better system. Its important to make it as easy as possible so that we don't lose anyone in the shuffle.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Update bugs.kde.org's account-request page==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' ''???''&lt;br /&gt;
&lt;br /&gt;
:When people get new svn accounts it would make sense for them to join the kde-developers group too.&lt;br /&gt;
&lt;br /&gt;
:We also need a standard way for existing svn users to request to join kde-developers. This must include an explanation of the requirements for joining the group, (iirc, just that your gitorious display name is set to your real name)&lt;br /&gt;
&lt;br /&gt;
=Completed Tasks=&lt;br /&gt;
&lt;br /&gt;
==Opt-in privacy exception required for kde-developers==&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' ''Gitorious'', ''KDE e.V. Board'', ''eean''&lt;br /&gt;
&lt;br /&gt;
:KDE sysadmins need access to some information that Shortcut could not give them due to their privacy policy. Examples include an email list of all the developers and SQL-level access to information about all the repos in KDE (since it stores who pushes what, information not stored in the git repo itself).&lt;br /&gt;
&lt;br /&gt;
:Such requirements will likely be put into the contract with Shortcut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
:So the e.V. Board is an owner since this is a legal/contract/money issue. Added myself only because I'm shepherding the issue. --[[User:Eean|eean]] 16:16, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; &lt;br /&gt;
&lt;br /&gt;
:'''We will not get sql access to the information. For the alternative solution see the Push Log issue'''&lt;br /&gt;
&lt;br /&gt;
==Reviewboard==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' darktears&lt;br /&gt;
&lt;br /&gt;
This should be easily done with Gitorious web interface and merge requests actually.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:but reviewboard has features gitorious (right now) doesn't, like commenting on specific lines and not having to set up a merge request. --chani&lt;br /&gt;
::Also email notifications when someone reviews are needed --thomasz&lt;br /&gt;
:We're working on this for someone else right now, so pretty soon --johan-s&lt;br /&gt;
:I consider the latest changes to gitorious to finish this. If more reviewboard features are still needed, and git supports reviewboard, I think this is something we can look at doing post-conversion. --Ian Monroe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SSH blocked in corporations and universities.==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' ''Unknown''&lt;br /&gt;
&lt;br /&gt;
:Some universities tend to block the SSH port. There should be a workaround to use SSH on some different port. github.com already runs a SSH server on port 443. But that assumes you are using a proxy. It has been found that this hasn't worked with a lot of people, especially those who have a direct connection to the internet ( so some transparent blocking by the ISP ). It would be great if (almost) every KDE developer were to be asked to check if other ports work before KDE made the switch. Otherwise there could be an automated email where the git patches could be sent, and appropriately patched to the right location too.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:http://blog.gitorious.org/2009/10/20/stuck-behind-a-firewall/, and there's always been HTTP cloning (although the current impl. in Git is a bit on the slow side) --johan-s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Talk to windows guys about git.==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:'''  aseigo&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
They aren't huge fans of git, but are using it. They require a single mainline and can't cope with multiple branches. Otherwise, it's workable, even if it will take an adjustment period.&lt;br /&gt;
&lt;br /&gt;
==pre-commit hooks==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' ''(unknown)''&lt;br /&gt;
&lt;br /&gt;
:acltest, docbook, EOL/UTF-8&lt;br /&gt;
&lt;br /&gt;
:A web hook isn't good enough for these because they have to run and return whether to allow the push, for every single push to every KDE repo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:gitorious guys said they *might* be willing to allow a few scripts on their server for KDE as a special exception, iirc. --chani&lt;br /&gt;
&lt;br /&gt;
:: Yes, at least for basic things, heavier things like doc building would probably have to be mirrored (goes for pre/post) --johan-s&lt;br /&gt;
&lt;br /&gt;
:It turns out that acl and docbook might not be needed so long as web and docs/ stuff stays in svn.&lt;br /&gt;
&lt;br /&gt;
:: Here's where to find the current scripts - http://websvn.kde.org/trunk/kde-common/svn/hooks/ --[[User:Argonel|Argonel]] 23:06, 11 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So: this is actually done because it needs no longer to be done? (boud)&lt;br /&gt;
&lt;br /&gt;
::Apparently, so; moving to complete. (aseigo)&lt;br /&gt;
= other notes =&lt;br /&gt;
&lt;br /&gt;
==Random==&lt;br /&gt;
convert all accounts to SSH??&lt;br /&gt;
multiple git repos joined??&lt;br /&gt;
- use repo tool from android?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KDE accounts file is no longer necessary---used for mapping svn ID -&amp;gt; email, but we have that now from Gitorious.&lt;br /&gt;
&lt;br /&gt;
http://mail.kde.org/pipermail/dot-stories/2005-May/000509.html might be a good guide on what docs we need.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
some of this stuff was from the list from GCDS that was in this email [http://markmail.org/message/u6eqfjece7fibfyo http://markmail.org/message/u6eqfjece7fibfyo]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRC Meetings==&lt;br /&gt;
* [[Projects/MovetoGit/Meeting1111|Minutes]] of meeting 11 November 2009&lt;br /&gt;
* [[Projects/MovetoGit/Meeting1118|Next meeting]] 18:00, 25 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
= jobs =&lt;br /&gt;
''TODO merge this with the todolists above''&lt;br /&gt;
&lt;br /&gt;
michael jansen: talking to kdesvn-build/mpyne&lt;br /&gt;
:--Done? -&amp;gt; http://kdesvn-build.kde.org/releases/kdesvn-build-1.10.php -- Panagiotis Papadopoulos 1 November 2009&lt;br /&gt;
::Yes, but the __kdesvn-build-remote used in the impl isn't pleasant for users already on git so it still needs more work for them. [[User:Mpyne|Mpyne]] 20:32, 11 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
thiago and sebas: funding &lt;br /&gt;
&lt;br /&gt;
jonas: domain name &lt;br /&gt;
&lt;br /&gt;
thiago: actually convert :D (ThomasZ put some work in the converter tool to make it easier to use; see his 'svn2git' project on gitorious.org)&lt;br /&gt;
&lt;br /&gt;
ML: convert to SSH&lt;br /&gt;
&lt;br /&gt;
chani: techbase docs for scripty &lt;br /&gt;
&lt;br /&gt;
thiago: pre/post-commit hooks &lt;br /&gt;
&lt;br /&gt;
sebas/lydia/leo: communication with teams! tell people! keeping track that &lt;br /&gt;
everything is being done.&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/MovetoGit</id>
		<title>Projects/MovetoGit</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/MovetoGit"/>
				<updated>2009-12-02T21:46:48Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Snapshot to read-only svn */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the page for co-ordinating KDE's move to [http://git-scm.com/ Git].&lt;br /&gt;
&lt;br /&gt;
If you're interested in helping, you should join the [https://mail.kde.org/mailman/listinfo/kde-scm-interest scm-interest@kde.org] mailinglist and [irc://chat.freenode.net/kde-git #kde-git] on freenode.&lt;br /&gt;
&lt;br /&gt;
=The Plan=&lt;br /&gt;
&lt;br /&gt;
KDE is, eventually, moving to Git. We will be using [https://gitorious.org/ gitorious.org] servers, with funding from Nokia. We will also have our own mirrors using existing KDE servers.&lt;br /&gt;
&lt;br /&gt;
We are working with the Gitorious people to ensure their server will meet all our needs as well as everyone's privacy requirements. The distributed nature of Git will make it easy for us to migrate off gitorious.org at any time should the need arise (but that's unlikely :).&lt;br /&gt;
&lt;br /&gt;
In the summer of 2009, [http://gitorious.org/amarok Amarok] moved to Gitorious to test the waters and find problems that would affect KDE. Once those problems have been solved, all of KDE will be able to switch.&lt;br /&gt;
&lt;br /&gt;
==Why?==&lt;br /&gt;
&lt;br /&gt;
Git offers many advantages over svn, including offline commits and much easier to keep a feature branch up-to-date. Many KDE developers are already using git-svn, but this tool has its limitations. We want to have the full power of Git available, and we have people willing to do the work necessary to migrate.&lt;br /&gt;
&lt;br /&gt;
==How?==&lt;br /&gt;
&lt;br /&gt;
When we move, KDE's svn repository will be migrated into several Git repos, all on gitorious.org. Main modules such as kdelibs and kdebase will each become one repository. Projects in extragear will each have their own repository. The kde.gitorious.org site will have a list (lists?) of all these repositories using the builtin project wiki. Scripts will be provided for downloading, say, all of extragear, so &amp;quot;moving&amp;quot; a project from kdereview to extragear would simply involve editing a file kept online that defined the location of projects.&lt;br /&gt;
&lt;br /&gt;
A few things will stay in subversion - currently websites, translations and manuals. It's possible they could move to Git later, but they won't be part of the mass migration.&lt;br /&gt;
&lt;br /&gt;
On Gitorious, all KDE developers will be part of the [http://gitorious.org/+kde-developers kde-developers group]. Developers in this group are required to set their &amp;quot;full name&amp;quot; for their Gitorious account to their real name. If you are not in this group or do not have an account, a system will be set up to simplify the process. Or you can just go to Gitorious yourself, create an account, and ask to be added to the group. :)&lt;br /&gt;
&lt;br /&gt;
=Blockers=&lt;br /&gt;
&lt;br /&gt;
Tasks that need to get done before we can migrate&lt;br /&gt;
&lt;br /&gt;
==SLA for gitorious.org==&lt;br /&gt;
{{Progress bar|20}}&lt;br /&gt;
'''Owner:''' aseigo, TZander&lt;br /&gt;
&lt;br /&gt;
: The SLA terms need to be documented as well as who will be footing the bill, if any. TZander will be taking the discussion to people internal @ Qt to discuss this as there was a tentative understanding that cooperation is forthcoming there.&lt;br /&gt;
&lt;br /&gt;
==Gitorious Needs a feature to disable merge request emails for certain repos==&lt;br /&gt;
{{Progress bar|10}}&lt;br /&gt;
'''Owner:''' [http://gitorious.org/gitorious Gitorious]&lt;br /&gt;
&lt;br /&gt;
:Everyone added to the [http://gitorious.org/+kde-developers kde-developers] group gets an e-mail when anyone makes a merge request to any of our projects. This is undesirable (as most KDE devs are not Amarok devs and many other permutations). A solution for this will have to be developed on Gitorious before all of KDE goes to Gitorious.&lt;br /&gt;
&lt;br /&gt;
:Johan will be working on this at the next Gitorious sprint.&lt;br /&gt;
&lt;br /&gt;
:Requirements:&lt;br /&gt;
:*be able to emulate commit-fitler features, or have it feed commits into the kde-commits and the current commit-filter can be used. ''This req could also be fulfilled by the 'post-commit' todo item.''&lt;br /&gt;
:*allow sysadmins to email all KDE account holders&lt;br /&gt;
:*be able to subscribe to specific projects and their merge requests&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:At a minimum, users need the ability to choose which projects to get email from. It would be really awesome to have more fine-grained control, though, like the [http://commitfilter.kde.org/ commitfilter]. konqueror and kwin and plasma will all be in the same git repo but I only want merge requests for one of them. --Chani&lt;br /&gt;
::One solution there is to have Gitorious send all email to kde-commits and we can continue using commit-filter. Probably a good idea to set that up to keep continuity regardless. --[[User:Eean|eean]] 16:16, 12 November 2009 (UTC)&lt;br /&gt;
:::keeping commitfilter working is good, but merge-requests aren't commits... can commit-filter be upgraded to handle them? [[User:Chani|Chani]] 23:19, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:put progress to 10 since Gitorious folks are working on it. :) --[[User:Eean|eean]] 16:21, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Write / update importing rules for svn2git==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' morice, tzander - volunteers wanted!&lt;br /&gt;
&lt;br /&gt;
:The importer is on gitorious.org as svn2git we have a set of rules to tell the importer what svn dirs turn into which git repos and those need constant updating whenever a new branch or tag or project is created. This has not been done for quite some time and so someone should rsync the svn repo run svn2git and fix the rules and importer whenever the import stops.&lt;br /&gt;
&lt;br /&gt;
This process will need to be repeated every so often until we're ready to do the migration.&lt;br /&gt;
&lt;br /&gt;
==Script for downloading virtual KDE hierarchies==&lt;br /&gt;
{{Progress bar|5}}&lt;br /&gt;
'''Owner''': Michael Jansen (mjansen)&lt;br /&gt;
:One goal for the whole project is to support how people use KDE SVN as much as possible. One issue is that people often check out 'extragear/multimedia' or 'kdesupport' as a whole. However with git extragear, playground, kdesupport etc projects are going to be split up and are essentially going to exist as a flat list on Gitorious.&lt;br /&gt;
:The proposed solution is have a computer-readable file (eg XML) that only sysadmins could edit. It would define a tree of projects mirroring the current SVN tree. A script would then be able to easily perform operations like 'remote update', 'pull', 'clone' on multiple repos at once, in the same way users are able to checkout or update 'extragear' all at once.&lt;br /&gt;
:More info is at the [[Projects/MovetoGit/MassCloneScript|scripts development page]]. The tool itself is hosted at: http://rubyforge.org/projects/build-tool/.&lt;br /&gt;
&lt;br /&gt;
:Morice-net will help mjansen with testing once the extensions have been finished.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
:Progress 5 since we have a spec. :) --[[User:Eean|eean]]&lt;br /&gt;
:Ok now the plan is basically that mjansen will extend his build script to allow clone-only and to update its recipes from an online source. The recipes have the advantage of defining all the build deps as well, so we would end up with official documentation of build dependencies, something thats often been missing. --[[User:Eean|eean]] 17:18, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''Link'''&lt;br /&gt;
http://techbase.kde.org/Projects/MovetoGit/MassCloneScript&lt;br /&gt;
&lt;br /&gt;
==Push log==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' nobody!!&lt;br /&gt;
&lt;br /&gt;
:we need a record of who pushed what, because commit ids can be anything (and there are legitimate reasons to push commits with another person's name).  could whoever remember how that discussion ended please fill in the details here?&lt;br /&gt;
&lt;br /&gt;
==post-commit hooks==&lt;br /&gt;
{{Progress bar|25}}&lt;br /&gt;
'''Owner:''' ''(morice, dario, johan) maybe?? volunteers needed!!''&lt;br /&gt;
&lt;br /&gt;
:List of scripts needed:&lt;br /&gt;
:* BUG/CCMAIL&lt;br /&gt;
:* email/CIA&lt;br /&gt;
:* license header checks&lt;br /&gt;
:* EBN (dario)&lt;br /&gt;
&lt;br /&gt;
:Gitorious needs to provide a way for hooks to be called; KDE needs to write said hooks.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:There is a branch of gitorious called web-hooks http://gitorious.org/gitorious/mainline/commits/web-hooks --Panagiotis Papadopoulos 1 November 2009&lt;br /&gt;
:Same situation as commit emails. I can do it but it doesn't scale well and a Gitorious-supported solution would be nicer. --[[User:Eean|eean]] 16:07, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Get rid of svn:externals==&lt;br /&gt;
{{Progress bar|40}}&lt;br /&gt;
'''Owner:''' David Faure&lt;br /&gt;
&lt;br /&gt;
:not possible with git, broken by design.&lt;br /&gt;
&lt;br /&gt;
::&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:Is there a list of instances of svn::externals anywhere?- -[[User:Yokem55|Yokem55]] 19:27, 1 November 2009 (UTC)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: kdesupport is clean. kdebase still has an ugly one, nuno and others agreed to duplicate the little bit of shared code iirc, but it wasn't done.&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: ok, what is the ugly one in kdebase?&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: oxygenhelper stuff&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: ok, can i also have a number to stick on the progress bar?&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; Med: indeed.&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: you sound like a manager :-)&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; &amp;quot;I want numbers!&amp;quot; :-)&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: lol&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: i have two d10 here, i'll just roll them :p\&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: and 22% it is :p&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: actually most externals are in extragear and playground. the main modules have only 3 left AFAICS.&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: so for the main modules, I solved 2/5, which is 40% :-)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:::--[[User:Argonel|Argonel]] 03:04, 14 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=Nice to have before the migration=&lt;br /&gt;
&lt;br /&gt;
==Snapshot to read-only svn==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:'''&lt;br /&gt;
&lt;br /&gt;
:It's work, but maybe some people would like it. NEEDED for documentation, in order to get it back into SVN for the translators/scripty/?&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:Could be done with a git-svn gateway presumably? -Mike Arthur 19/10/2009 16:04&lt;br /&gt;
&lt;br /&gt;
:if we leave the docbook stuff in svn, we can avoid this a bit longer. --[[User:Chani|Chani]] 23:21, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==[[Development/Tutorials/Git|Techbase Documentation]]==&lt;br /&gt;
'''Owner:''' Chani, greeneg, - ''please help out!''&lt;br /&gt;
{{Progress bar|10}}&lt;br /&gt;
&lt;br /&gt;
:At least minimal documentation about how to checkout, how to get a Gitorious account, how to request a merge needed, other git documentation and links to other git information would be very useful also.&lt;br /&gt;
&lt;br /&gt;
:see the [[Development/Tutorials/Git|Git Tutorial Page]]. help wanted!!&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Setup git mirrors for cloning==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' No one (help!)&lt;br /&gt;
:Re-purpose the anonsvn servers. This item might be a blocker.&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Talk to people using other distros about git==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' Sebas, Eike&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
* Gentoo: They seem to be prepared for moving their live SVN packages to git; their package manager has easily-reusable classes to fetch from an SCM and moving the ebuilds to using the git class rather than the SVN class should be easy. Positive comments to that end from people in #gentoo-kde.&lt;br /&gt;
* Fedora: Some unhappyness about git because SVN allows them to remotely produce a diff between two SVN URLs, without making a checkout / git clone first. Kevin Kofler (IRC nick Kevin_Kofler, #fedora-kde) says this will make their packager work harder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Post-migration Issues=&lt;br /&gt;
&lt;br /&gt;
==Website Branding==&lt;br /&gt;
{{Progress bar|2|text=(initial ideas on the table)}}&lt;br /&gt;
'''Owner:''' ruphy&lt;br /&gt;
&lt;br /&gt;
:KDE Gitorious should be branded accordingly, and should be reachable from git.kde.org as well as kde.gitorious.org&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
=Unscheduled &amp;amp; Open=&lt;br /&gt;
&lt;br /&gt;
==Allow tagging without involving sysadmins==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Depends on:''' Opt-in privacy exception required for kde-developers&lt;br /&gt;
&lt;br /&gt;
'''Owner:''' johan&lt;br /&gt;
&lt;br /&gt;
:Pushing a tag currently requires permissions to do a force push, which is a repository-wide checkbox that can only be toggled by a kde-developers admin. Thus the workflow for a dev wanting to do a release tag for his app is to ask an admin to enable force pushing, then to push his tag, and then to tell the admin he can disable force pushing again. This doesn't scale, is insecure, and at odds with KDE's open access policy when it comes to managing the repos (right now in SVN, you need sysadmin to create an app dir in /tags for you, but don't have to ask permission for every individual tag). Johan has promised a solution for this.&lt;br /&gt;
&lt;br /&gt;
:Notable discussion points on kde-scm-interest:&lt;br /&gt;
:http://mail.kde.org/pipermail/kde-scm-interest/2009-November/000782.html&lt;br /&gt;
:http://mail.kde.org/pipermail/kde-scm-interest/2009-November/000784.html&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Account setup on Gitorious==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Depends on:''' Opt-in privacy exception required for kde-developers&lt;br /&gt;
&lt;br /&gt;
'''Owner:''' ''eean, johan, boud, dario''&lt;br /&gt;
&lt;br /&gt;
:Creating an account on Gitorious isn't hard, but asking to be added to the KDE group is inconvenient. For the migration we should set up a system (via email or wiki?) where developers can ask to have an account autocreated for them, or add their existing Gitorious account to a list to be added to the group. Once this is in place an announcement should be sent to all svn accounts explaining the process, and privacy information.&lt;br /&gt;
&lt;br /&gt;
:Basically the currently method of using Bugzilla works fine now and works fine in the longterm. But in the transition month when hundreds of accounts must be created or added, we need a better system. Its important to make it as easy as possible so that we don't lose anyone in the shuffle.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Update bugs.kde.org's account-request page==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' ''???''&lt;br /&gt;
&lt;br /&gt;
:When people get new svn accounts it would make sense for them to join the kde-developers group too.&lt;br /&gt;
&lt;br /&gt;
:We also need a standard way for existing svn users to request to join kde-developers. This must include an explanation of the requirements for joining the group, (iirc, just that your gitorious display name is set to your real name)&lt;br /&gt;
&lt;br /&gt;
=Completed Tasks=&lt;br /&gt;
&lt;br /&gt;
==Opt-in privacy exception required for kde-developers==&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' ''Gitorious'', ''KDE e.V. Board'', ''eean''&lt;br /&gt;
&lt;br /&gt;
:KDE sysadmins need access to some information that Shortcut could not give them due to their privacy policy. Examples include an email list of all the developers and SQL-level access to information about all the repos in KDE (since it stores who pushes what, information not stored in the git repo itself).&lt;br /&gt;
&lt;br /&gt;
:Such requirements will likely be put into the contract with Shortcut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
:So the e.V. Board is an owner since this is a legal/contract/money issue. Added myself only because I'm shepherding the issue. --[[User:Eean|eean]] 16:16, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; &lt;br /&gt;
&lt;br /&gt;
:'''We will not get sql access to the information. For the alternative solution see the Push Log issue'''&lt;br /&gt;
&lt;br /&gt;
==Reviewboard==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' darktears&lt;br /&gt;
&lt;br /&gt;
This should be easily done with Gitorious web interface and merge requests actually.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:but reviewboard has features gitorious (right now) doesn't, like commenting on specific lines and not having to set up a merge request. --chani&lt;br /&gt;
::Also email notifications when someone reviews are needed --thomasz&lt;br /&gt;
:We're working on this for someone else right now, so pretty soon --johan-s&lt;br /&gt;
:I consider the latest changes to gitorious to finish this. If more reviewboard features are still needed, and git supports reviewboard, I think this is something we can look at doing post-conversion. --Ian Monroe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SSH blocked in corporations and universities.==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' ''Unknown''&lt;br /&gt;
&lt;br /&gt;
:Some universities tend to block the SSH port. There should be a workaround to use SSH on some different port. github.com already runs a SSH server on port 443. But that assumes you are using a proxy. It has been found that this hasn't worked with a lot of people, especially those who have a direct connection to the internet ( so some transparent blocking by the ISP ). It would be great if (almost) every KDE developer were to be asked to check if other ports work before KDE made the switch. Otherwise there could be an automated email where the git patches could be sent, and appropriately patched to the right location too.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:http://blog.gitorious.org/2009/10/20/stuck-behind-a-firewall/, and there's always been HTTP cloning (although the current impl. in Git is a bit on the slow side) --johan-s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Talk to windows guys about git.==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:'''  aseigo&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
They aren't huge fans of git, but are using it. They require a single mainline and can't cope with multiple branches. Otherwise, it's workable, even if it will take an adjustment period.&lt;br /&gt;
&lt;br /&gt;
==pre-commit hooks==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' ''(unknown)''&lt;br /&gt;
&lt;br /&gt;
:acltest, docbook, EOL/UTF-8&lt;br /&gt;
&lt;br /&gt;
:A web hook isn't good enough for these because they have to run and return whether to allow the push, for every single push to every KDE repo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:gitorious guys said they *might* be willing to allow a few scripts on their server for KDE as a special exception, iirc. --chani&lt;br /&gt;
&lt;br /&gt;
:: Yes, at least for basic things, heavier things like doc building would probably have to be mirrored (goes for pre/post) --johan-s&lt;br /&gt;
&lt;br /&gt;
:It turns out that acl and docbook might not be needed so long as web and docs/ stuff stays in svn.&lt;br /&gt;
&lt;br /&gt;
:: Here's where to find the current scripts - http://websvn.kde.org/trunk/kde-common/svn/hooks/ --[[User:Argonel|Argonel]] 23:06, 11 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So: this is actually done because it needs no longer to be done? (boud)&lt;br /&gt;
&lt;br /&gt;
::Apparently, so; moving to complete. (aseigo)&lt;br /&gt;
= other notes =&lt;br /&gt;
&lt;br /&gt;
==Random==&lt;br /&gt;
convert all accounts to SSH??&lt;br /&gt;
multiple git repos joined??&lt;br /&gt;
- use repo tool from android?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KDE accounts file is no longer necessary---used for mapping svn ID -&amp;gt; email, but we have that now from Gitorious.&lt;br /&gt;
&lt;br /&gt;
http://mail.kde.org/pipermail/dot-stories/2005-May/000509.html might be a good guide on what docs we need.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
some of this stuff was from the list from GCDS that was in this email [http://markmail.org/message/u6eqfjece7fibfyo http://markmail.org/message/u6eqfjece7fibfyo]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRC Meetings==&lt;br /&gt;
* [[Projects/MovetoGit/Meeting1111|Minutes]] of meeting 11 November 2009&lt;br /&gt;
* [[Projects/MovetoGit/Meeting1118|Next meeting]] 18:00, 25 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
= jobs =&lt;br /&gt;
''TODO merge this with the todolists above''&lt;br /&gt;
&lt;br /&gt;
michael jansen: talking to kdesvn-build/mpyne&lt;br /&gt;
:--Done? -&amp;gt; http://kdesvn-build.kde.org/releases/kdesvn-build-1.10.php -- Panagiotis Papadopoulos 1 November 2009&lt;br /&gt;
::Yes, but the __kdesvn-build-remote used in the impl isn't pleasant for users already on git so it still needs more work for them. [[User:Mpyne|Mpyne]] 20:32, 11 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
thiago and sebas: funding &lt;br /&gt;
&lt;br /&gt;
jonas: domain name &lt;br /&gt;
&lt;br /&gt;
thiago: actually convert :D (ThomasZ put some work in the converter tool to make it easier to use; see his 'svn2git' project on gitorious.org)&lt;br /&gt;
&lt;br /&gt;
ML: convert to SSH&lt;br /&gt;
&lt;br /&gt;
chani: techbase docs for scripty &lt;br /&gt;
&lt;br /&gt;
thiago: pre/post-commit hooks &lt;br /&gt;
&lt;br /&gt;
sebas/lydia/leo: communication with teams! tell people! keeping track that &lt;br /&gt;
everything is being done.&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/MovetoGit</id>
		<title>Projects/MovetoGit</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/MovetoGit"/>
				<updated>2009-12-02T19:13:56Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Gitorious Needs a New Contact Framework */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the page for co-ordinating KDE's move to [http://git-scm.com/ Git].&lt;br /&gt;
&lt;br /&gt;
If you're interested in helping, you should join the [https://mail.kde.org/mailman/listinfo/kde-scm-interest scm-interest@kde.org] mailinglist and [irc://chat.freenode.net/kde-git #kde-git] on freenode.&lt;br /&gt;
&lt;br /&gt;
=The Plan=&lt;br /&gt;
&lt;br /&gt;
KDE is, eventually, moving to Git. We will be using [https://gitorious.org/ gitorious.org] servers, with funding from Nokia. We will also have our own mirrors using existing KDE servers.&lt;br /&gt;
&lt;br /&gt;
We are working with the Gitorious people to ensure their server will meet all our needs as well as everyone's privacy requirements. The distributed nature of Git will make it easy for us to migrate off gitorious.org at any time should the need arise (but that's unlikely :).&lt;br /&gt;
&lt;br /&gt;
In the summer of 2009, [http://gitorious.org/amarok Amarok] moved to Gitorious to test the waters and find problems that would affect KDE. Once those problems have been solved, all of KDE will be able to switch.&lt;br /&gt;
&lt;br /&gt;
==Why?==&lt;br /&gt;
&lt;br /&gt;
Git offers many advantages over svn, including offline commits and much easier to keep a feature branch up-to-date. Many KDE developers are already using git-svn, but this tool has its limitations. We want to have the full power of Git available, and we have people willing to do the work necessary to migrate.&lt;br /&gt;
&lt;br /&gt;
==How?==&lt;br /&gt;
&lt;br /&gt;
When we move, KDE's svn repository will be migrated into several Git repos, all on gitorious.org. Main modules such as kdelibs and kdebase will each become one repository. Projects in extragear will each have their own repository. The kde.gitorious.org site will have a list (lists?) of all these repositories using the builtin project wiki. Scripts will be provided for downloading, say, all of extragear, so &amp;quot;moving&amp;quot; a project from kdereview to extragear would simply involve editing a file kept online that defined the location of projects.&lt;br /&gt;
&lt;br /&gt;
A few things will stay in subversion - currently websites, translations and manuals. It's possible they could move to Git later, but they won't be part of the mass migration.&lt;br /&gt;
&lt;br /&gt;
On Gitorious, all KDE developers will be part of the [http://gitorious.org/+kde-developers kde-developers group]. Developers in this group are required to set their &amp;quot;full name&amp;quot; for their Gitorious account to their real name. If you are not in this group or do not have an account, a system will be set up to simplify the process. Or you can just go to Gitorious yourself, create an account, and ask to be added to the group. :)&lt;br /&gt;
&lt;br /&gt;
=Blockers=&lt;br /&gt;
&lt;br /&gt;
Tasks that need to get done before we can migrate&lt;br /&gt;
&lt;br /&gt;
==Gitorious Needs a feature to disable merge request emails for certain repos==&lt;br /&gt;
{{Progress bar|10}}&lt;br /&gt;
'''Owner:''' [http://gitorious.org/gitorious Gitorious]&lt;br /&gt;
&lt;br /&gt;
:Everyone added to the [http://gitorious.org/+kde-developers kde-developers] group gets an e-mail when anyone makes a merge request to any of our projects. This is undesirable (as most KDE devs are not Amarok devs and many other permutations). A solution for this will have to be developed on Gitorious before all of KDE goes to Gitorious.&lt;br /&gt;
&lt;br /&gt;
:Johan will be working on this at the next Gitorious sprint.&lt;br /&gt;
&lt;br /&gt;
:Requirements:&lt;br /&gt;
:*be able to emulate commit-fitler features, or have it feed commits into the kde-commits and the current commit-filter can be used. ''This req could also be fulfilled by the 'post-commit' todo item.''&lt;br /&gt;
:*allow sysadmins to email all KDE account holders&lt;br /&gt;
:*be able to subscribe to specific projects and their merge requests&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:At a minimum, users need the ability to choose which projects to get email from. It would be really awesome to have more fine-grained control, though, like the [http://commitfilter.kde.org/ commitfilter]. konqueror and kwin and plasma will all be in the same git repo but I only want merge requests for one of them. --Chani&lt;br /&gt;
::One solution there is to have Gitorious send all email to kde-commits and we can continue using commit-filter. Probably a good idea to set that up to keep continuity regardless. --[[User:Eean|eean]] 16:16, 12 November 2009 (UTC)&lt;br /&gt;
:::keeping commitfilter working is good, but merge-requests aren't commits... can commit-filter be upgraded to handle them? [[User:Chani|Chani]] 23:19, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:put progress to 10 since Gitorious folks are working on it. :) --[[User:Eean|eean]] 16:21, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Write / update importing rules for svn2git==&lt;br /&gt;
&lt;br /&gt;
The importer is on gitorious.org as svn2git we have a set of rules to tell the importer what svn dirs turn into which git repos and those need constant updating whenever a new branch or tag or project is created. This has not been done for quite some time and so someone should rsync the svn repo run svn2git and fix the rules and importer whenever the import stops.&lt;br /&gt;
&lt;br /&gt;
==Script for downloading virtual KDE hierarchies==&lt;br /&gt;
{{Progress bar|5}}&lt;br /&gt;
'''Owner''': Michael Jansen (mjansen)&lt;br /&gt;
:One goal for the whole project is to support how people use KDE SVN as much as possible. One issue is that people often check out 'extragear/multimedia' or 'kdesupport' as a whole. However with git extragear, playground, kdesupport etc projects are going to be split up and are essentially going to exist as a flat list on Gitorious.&lt;br /&gt;
:The proposed solution is have a computer-readable file (eg XML) that only sysadmins could edit. It would define a tree of projects mirroring the current SVN tree. A script would then be able to easily perform operations like 'remote update', 'pull', 'clone' on multiple repos at once, in the same way users are able to checkout or update 'extragear' all at once.&lt;br /&gt;
:More info is at the [[Projects/MovetoGit/MassCloneScript|scripts development page]]. The tool itself is hosted at: http://rubyforge.org/projects/build-tool/.&lt;br /&gt;
&lt;br /&gt;
:Morice-net will help mjansen with testing once the extensions have been finished.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
:Progress 5 since we have a spec. :) --[[User:Eean|eean]]&lt;br /&gt;
:Ok now the plan is basically that mjansen will extend his build script to allow clone-only and to update its recipes from an online source. The recipes have the advantage of defining all the build deps as well, so we would end up with official documentation of build dependencies, something thats often been missing. --[[User:Eean|eean]] 17:18, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
'''Link'''&lt;br /&gt;
http://techbase.kde.org/Projects/MovetoGit/MassCloneScript&lt;br /&gt;
&lt;br /&gt;
==Push log==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' thiago maybe?&lt;br /&gt;
&lt;br /&gt;
:we need a record of who pushed what, because commit ids can be anything (and there are legitimate reasons to push commits with another person's name).  could whoever remember how that discussion ended please fill in the details here?&lt;br /&gt;
&lt;br /&gt;
==pre-commit hooks==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' ''(unknown)''&lt;br /&gt;
&lt;br /&gt;
:acltest, docbook, EOL/UTF-8&lt;br /&gt;
&lt;br /&gt;
:A web hook isn't good enough for these because they have to run and return whether to allow the push, for every single push to every KDE repo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:gitorious guys said they *might* be willing to allow a few scripts on their server for KDE as a special exception, iirc. --chani&lt;br /&gt;
&lt;br /&gt;
:: Yes, at least for basic things, heavier things like doc building would probably have to be mirrored (goes for pre/post) --johan-s&lt;br /&gt;
&lt;br /&gt;
:It turns out that acl and docbook might not be needed so long as web and docs/ stuff stays in svn.&lt;br /&gt;
&lt;br /&gt;
:: Here's where to find the current scripts - http://websvn.kde.org/trunk/kde-common/svn/hooks/ --[[User:Argonel|Argonel]] 23:06, 11 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So: this is actually done because it needs no longer to be done? (boud)&lt;br /&gt;
&lt;br /&gt;
==post-commit hooks==&lt;br /&gt;
{{Progress bar|25}}&lt;br /&gt;
'''Owner:''' ''morice, dario, johan''&lt;br /&gt;
&lt;br /&gt;
:* BUG/CCMAIL&lt;br /&gt;
:* email/CIA&lt;br /&gt;
:* license header checks&lt;br /&gt;
:* EBN (dario)&lt;br /&gt;
&lt;br /&gt;
:Gitorious needs to provide a way for hooks to be called; KDE needs to write said hooks.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:There is a branch of gitorious called web-hooks http://gitorious.org/gitorious/mainline/commits/web-hooks --Panagiotis Papadopoulos 1 November 2009&lt;br /&gt;
:Same situation as commit emails. I can do it but it doesn't scale well and a Gitorious-supported solution would be nicer. --[[User:Eean|eean]] 16:07, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Get rid of svn:externals==&lt;br /&gt;
{{Progress bar|40}}&lt;br /&gt;
'''Owner:''' David Faure&lt;br /&gt;
&lt;br /&gt;
:not possible with git, broken by design.&lt;br /&gt;
&lt;br /&gt;
::&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:Is there a list of instances of svn::externals anywhere?- -[[User:Yokem55|Yokem55]] 19:27, 1 November 2009 (UTC)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: kdesupport is clean. kdebase still has an ugly one, nuno and others agreed to duplicate the little bit of shared code iirc, but it wasn't done.&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: ok, what is the ugly one in kdebase?&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: oxygenhelper stuff&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: ok, can i also have a number to stick on the progress bar?&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; Med: indeed.&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: you sound like a manager :-)&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; &amp;quot;I want numbers!&amp;quot; :-)&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: lol&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: i have two d10 here, i'll just roll them :p\&lt;br /&gt;
        &amp;amp;amp;lt;argonel&amp;amp;amp;gt; dfaure: and 22% it is :p&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: actually most externals are in extragear and playground. the main modules have only 3 left AFAICS.&lt;br /&gt;
        &amp;amp;amp;lt;dfaure&amp;amp;amp;gt; argonel: so for the main modules, I solved 2/5, which is 40% :-)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:::--[[User:Argonel|Argonel]] 03:04, 14 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Snapshot to read-only svn==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' Simon&lt;br /&gt;
&lt;br /&gt;
:It's work, but maybe some people would like it. NEEDED for documentation, in order to get it back into SVN for the translators/scripty/?&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:Could be done with a git-svn gateway presumably? -Mike Arthur 19/10/2009 16:04&lt;br /&gt;
&lt;br /&gt;
:if we leave the docbook stuff in svn, we can avoid this a bit longer. --[[User:Chani|Chani]] 23:21, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==[[Development/Tutorials/Git|Techbase Documentation]]==&lt;br /&gt;
'''Owner:''' Chani, greeneg, - ''please help out!''&lt;br /&gt;
{{Progress bar|10}}&lt;br /&gt;
&lt;br /&gt;
:At least minimal documentation about how to checkout, how to get a Gitorious account, how to request a merge needed, other git documentation and links to other git information would be very useful also.&lt;br /&gt;
&lt;br /&gt;
:see the [[Development/Tutorials/Git|Git Tutorial Page]]. help wanted!!&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
=Nice to have before the migration:=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Setup git mirrors for cloning==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' No one (help!)&lt;br /&gt;
:Re-purpose the anonsvn servers. This item might be a blocker.&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
==Talk to people using other distros about git==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' Sebas&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Talk to windows guys about git.==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:'''  Danimo&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Post-migration Issues=&lt;br /&gt;
&lt;br /&gt;
==Website Branding==&lt;br /&gt;
{{Progress bar|2|text=(initial ideas on the table)}}&lt;br /&gt;
'''Owner:''' ruphy&lt;br /&gt;
&lt;br /&gt;
:KDE Gitorious should be branded accordingly, and should be reachable from git.kde.org as well as kde.gitorious.org&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
=Unscheduled &amp;amp; Open=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Account setup on Gitorious==&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Depends on:''' Opt-in privacy exception required for kde-developers&lt;br /&gt;
&lt;br /&gt;
'''Owner:''' ''eean, johan, boud, dario''&lt;br /&gt;
&lt;br /&gt;
:Creating an account on Gitorious isn't hard, but asking to be added to the KDE group is inconvenient. For the migration we should set up a system (via email or wiki?) where developers can ask to have an account autocreated for them, or add their existing Gitorious account to a list to be added to the group. Once this is in place an announcement should be sent to all svn accounts explaining the process, and privacy information.&lt;br /&gt;
&lt;br /&gt;
:Basically the currently method of using Bugzilla works fine now and works fine in the longterm. But in the transition month when hundreds of accounts must be created or added, we need a better system. Its important to make it as easy as possible so that we don't lose anyone in the shuffle.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
=Completed Tasks=&lt;br /&gt;
&lt;br /&gt;
==Opt-in privacy exception required for kde-developers==&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
{{Progress bar|0}}&lt;br /&gt;
'''Owner:''' ''Gitorious'', ''KDE e.V. Board'', ''eean''&lt;br /&gt;
&lt;br /&gt;
:KDE sysadmins need access to some information that Shortcut could not give them due to their privacy policy. Examples include an email list of all the developers and SQL-level access to information about all the repos in KDE (since it stores who pushes what, information not stored in the git repo itself).&lt;br /&gt;
&lt;br /&gt;
:Such requirements will likely be put into the contract with Shortcut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
:So the e.V. Board is an owner since this is a legal/contract/money issue. Added myself only because I'm shepherding the issue. --[[User:Eean|eean]] 16:16, 12 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/strike&amp;gt; &lt;br /&gt;
&lt;br /&gt;
:'''We will not get sql access to the information. For the alternative solution see the Push Log issue'''&lt;br /&gt;
&lt;br /&gt;
==Reviewboard==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' darktears&lt;br /&gt;
&lt;br /&gt;
This should be easily done with Gitorious web interface and merge requests actually.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:but reviewboard has features gitorious (right now) doesn't, like commenting on specific lines and not having to set up a merge request. --chani&lt;br /&gt;
::Also email notifications when someone reviews are needed --thomasz&lt;br /&gt;
:We're working on this for someone else right now, so pretty soon --johan-s&lt;br /&gt;
:I consider the latest changes to gitorious to finish this. If more reviewboard features are still needed, and git supports reviewboard, I think this is something we can look at doing post-conversion. --Ian Monroe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SSH blocked in corporations and universities.==&lt;br /&gt;
{{Progress bar|100}}&lt;br /&gt;
'''Owner:''' ''Unknown''&lt;br /&gt;
&lt;br /&gt;
:Some universities tend to block the SSH port. There should be a workaround to use SSH on some different port. github.com already runs a SSH server on port 443. But that assumes you are using a proxy. It has been found that this hasn't worked with a lot of people, especially those who have a direct connection to the internet ( so some transparent blocking by the ISP ). It would be great if (almost) every KDE developer were to be asked to check if other ports work before KDE made the switch. Otherwise there could be an automated email where the git patches could be sent, and appropriately patched to the right location too.&lt;br /&gt;
&lt;br /&gt;
'''Discussion'''&lt;br /&gt;
&lt;br /&gt;
:http://blog.gitorious.org/2009/10/20/stuck-behind-a-firewall/, and there's always been HTTP cloning (although the current impl. in Git is a bit on the slow side) --johan-s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= other notes =&lt;br /&gt;
&lt;br /&gt;
==Random==&lt;br /&gt;
convert all accounts to SSH??&lt;br /&gt;
multiple git repos joined??&lt;br /&gt;
- use repo tool from android?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KDE accounts file is no longer necessary---used for mapping svn ID -&amp;gt; email, but we have that now from Gitorious.&lt;br /&gt;
&lt;br /&gt;
http://mail.kde.org/pipermail/dot-stories/2005-May/000509.html might be a good guide on what docs we need.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
some of this stuff was from the list from GCDS that was in this email [http://markmail.org/message/u6eqfjece7fibfyo http://markmail.org/message/u6eqfjece7fibfyo]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRC Meetings==&lt;br /&gt;
* [[Projects/MovetoGit/Meeting1111|Minutes]] of meeting 11 November 2009&lt;br /&gt;
* [[Projects/MovetoGit/Meeting1118|Next meeting]] 18:00, 25 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
= jobs =&lt;br /&gt;
''TODO merge this with the todolists above''&lt;br /&gt;
&lt;br /&gt;
michael jansen: talking to kdesvn-build/mpyne&lt;br /&gt;
:--Done? -&amp;gt; http://kdesvn-build.kde.org/releases/kdesvn-build-1.10.php -- Panagiotis Papadopoulos 1 November 2009&lt;br /&gt;
::Yes, but the __kdesvn-build-remote used in the impl isn't pleasant for users already on git so it still needs more work for them. [[User:Mpyne|Mpyne]] 20:32, 11 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
thiago and sebas: funding &lt;br /&gt;
&lt;br /&gt;
jonas: domain name &lt;br /&gt;
&lt;br /&gt;
thiago: actually convert :D (ThomasZ put some work in the converter tool to make it easier to use; see his 'svn2git' project on gitorious.org)&lt;br /&gt;
&lt;br /&gt;
ML: convert to SSH&lt;br /&gt;
&lt;br /&gt;
chani: techbase docs for scripty &lt;br /&gt;
&lt;br /&gt;
thiago: pre/post-commit hooks &lt;br /&gt;
&lt;br /&gt;
sebas/lydia/leo: communication with teams! tell people! keeping track that &lt;br /&gt;
everything is being done.&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/KWord_Scripting</id>
		<title>Development/Tutorials/KWord Scripting</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/KWord_Scripting"/>
				<updated>2009-04-17T08:59:57Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Intro */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Intro==&lt;br /&gt;
&lt;br /&gt;
KWord2.0 uses [[Development/Languages/Kross|Kross]] to provide scripting with [http://www.python.org/ Python], [http://www.ruby-lang.org/ Ruby] and [http://xmelegance.org/kjsembed KDE JavaScript].&lt;br /&gt;
&lt;br /&gt;
With the 2.0 release the scripts Application Programming Interface (API) is unsupported and unfinished and known to change. Use the API at your own risk! When the API is stable you can depend on future versions not breaking your scripts, this support is not present in the 2.0 release of KWord.&lt;br /&gt;
&lt;br /&gt;
===The Scripting Plugin===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/ KWord Scripting Plugin] implements a plugin to dynamic access the scripting functionality from within KWord.&lt;br /&gt;
&lt;br /&gt;
* The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/KWScriptingPart.h?view=markup KWScriptingPart] class implements a KPart component to integrate scripting as plugin into KWord.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/Module.h?view=markup Scripting::Module] class enables access to the KWord functionality from within the scripting backends.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/FrameSet.h?view=markup FrameSet] and [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/Frame.h?view=markup Frame] classes are holding the content that is displayed on screen.&lt;br /&gt;
* The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/TextDocument.h?view=markup TextDocument] class represents a QTextDocument within the Scribe text-engine KWord uses to enable editing of text content. The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/TextCursor.h?view=markup TextCursor] implements a control structure for the successive traversal of content within such a TextDocument .&lt;br /&gt;
&lt;br /&gt;
===Scripting Handbook===&lt;br /&gt;
&lt;br /&gt;
The [http://kross.dipe.org/dox/kword.html KWord Scripting Handbook] ([http://kross.dipe.org/dox/kword.pdf PDF]) contains a full reference of the functionality accessible from within the scripting backends.&lt;br /&gt;
&lt;br /&gt;
The Handbook is generated from the sourcecode using doxygen and KWord's [[Development/Tutorials/KWord_Scripting#Import_combined_Doxygen_XML_File|Import Doxygen XML File]] python script.&lt;br /&gt;
&lt;br /&gt;
==Samples==&lt;br /&gt;
&lt;br /&gt;
=== Load and save documents ===&lt;br /&gt;
&lt;br /&gt;
Following Python script demonstrates how to load and save files;&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
KWord.document().openURL(&amp;quot;/home/myuser/myDoc.odt&amp;quot;)&lt;br /&gt;
KWord.document().saveAs(&amp;quot;/home/myuser/myDocCopy.odt&amp;quot;)&lt;br /&gt;
KWord.document().saveAs(&amp;quot;/home/myuser/myDocAsText.txt&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All slots and signals within the [http://websvn.kde.org/trunk/koffice/libs/kofficecore/KoDocumentAdaptor.h?view=markup KoDocumentAdaptor] are accessible as KWord.document().&lt;br /&gt;
&lt;br /&gt;
=== Import and export content ===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_importfile.py?view=markup sample_importfile.py] Python script implements import of content from a text or html file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
doc = KWord.mainFrameSet().document()&lt;br /&gt;
f = open(&amp;quot;/home/myuser/mytextfile.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
doc.setText( ' '.join(f.readlines()) )&lt;br /&gt;
#doc.setHtml( ' '.join(f.readlines()) )&lt;br /&gt;
f.close()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_exportfile.py?view=markup sample_exportfile.py] Python script implements export of content to a text or html file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
doc = KWord.mainFrameSet().document()&lt;br /&gt;
f = open(&amp;quot;/home/myuser/mytextfile.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
f.write( doc.toText() )&lt;br /&gt;
#f.write( doc.toHtml() )&lt;br /&gt;
f.close()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Framesets, Frames and Shapes ===&lt;br /&gt;
&lt;br /&gt;
The following python script adds a polygon shape and then prints the name and the ID of each shape.&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
KWord.addFrame(&amp;quot;mypoly&amp;quot;, &amp;quot;KoRegularPolygonShape&amp;quot;)&lt;br /&gt;
for i in range( KWord.frameCount() ):&lt;br /&gt;
    f = KWord.frame(i)&lt;br /&gt;
    print &amp;quot;%s %s&amp;quot; % (f.frameSet().name(),f.shapeId())&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_insertshape.py?view=markup sample_insertshape.py] Python script implements inserting of a shape into the document.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
textshape = KWord.addTextFrame(&amp;quot;MyTextShape&amp;quot;)&lt;br /&gt;
textshape.document().setText(&amp;quot;Some text&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_allshapes.py?view=markup sample_allshapes.py] Python script just adds all shapes into the document.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
for shapeId in KWord.shapeKeys():&lt;br /&gt;
    frame = KWord.addFrame(&amp;quot;myshape&amp;quot;, shapeId)&lt;br /&gt;
    if frame:&lt;br /&gt;
        frame.setTextRunAround(frame.RunThrough)&lt;br /&gt;
        frame.setPosition(200, 50)&lt;br /&gt;
        frame.resize(160, 80)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Text content ===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_text.py?view=markup sample_text.py] Python script demonstrates usage of the text engine.&lt;br /&gt;
&lt;br /&gt;
The following python sample adds some text at the end of the main framesets document.&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
doc = KWord.mainFrameSet().document()&lt;br /&gt;
cursor = doc.rootFrame().lastCursorPosition()&lt;br /&gt;
cursor.insertHtml(&amp;quot;&amp;lt;b&amp;gt;Some text&amp;lt;/b&amp;gt;&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This python sample adds some text and sets the page header and the page footer.&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
doc = KWord.mainFrameSet().document()&lt;br /&gt;
doc.lastCursor().insertHtml(&amp;quot;Even more &amp;lt;b&amp;gt;Hello World&amp;lt;/b&amp;gt;&amp;quot;)&lt;br /&gt;
KWord.firstPageHeaderFrameSet().document().setText(&amp;quot;Header&amp;quot;)&lt;br /&gt;
KWord.firstPageFooterFrameSet().document().setText(&amp;quot;Footer&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Python sample that prints the url and some metainformations of the document.&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
print KWord.document().url()&lt;br /&gt;
print KWord.document().documentInfoTitle()&lt;br /&gt;
print KWord.document().documentInfoAuthorName()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_lists_html.py?view=markup sample_lists_html.py] Python script demonstrates how to create lists with HTML.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_lists_cursor.py?view=markup sample_lists_cursor.py] Python script demonstrates how to create lists with a cursor.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_tables.py?view=markup sample_tables.py] Python script demonstrates how to deal with tables.&lt;br /&gt;
&lt;br /&gt;
=== KoStore and XML ===&lt;br /&gt;
&lt;br /&gt;
The following python sample does demonstrate how to print the element-names of all xml-files that are within the KWord KoStore backend (see [http://websvn.kde.org/trunk/koffice/libs/kokross/KoScriptingOdf.h?view=markup KoScriptingOdf.h]) for our current document.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
store = KWord.store()&lt;br /&gt;
reader = store.open(&amp;quot;META-INF/manifest.xml&amp;quot;)&lt;br /&gt;
if not reader:&lt;br /&gt;
    raise &amp;quot;Failed to read the mainfest&amp;quot;&lt;br /&gt;
paths = []&lt;br /&gt;
for i in range( reader.count() ):&lt;br /&gt;
    if reader.type(i) == &amp;quot;text/xml&amp;quot;:&lt;br /&gt;
        paths.append( reader.path(i) )&lt;br /&gt;
for p in paths:&lt;br /&gt;
    reader = store.open(p)&lt;br /&gt;
    if not reader:&lt;br /&gt;
        raise &amp;quot;Failed to read %s&amp;quot; % p&lt;br /&gt;
    def onElement():&lt;br /&gt;
        print reader.name()&lt;br /&gt;
    reader.connect(&amp;quot;onElement()&amp;quot;, onElement)&lt;br /&gt;
    reader.start()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_variables.py?view=markup sample_variables.py] Python script demonstrates how to handle variables.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
doc = KWord.mainFrameSet().document()&lt;br /&gt;
for v in doc.variableNames():&lt;br /&gt;
    print &amp;quot;name=%s value=%s&amp;quot; % (v, doc.variableValue(v))&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/variable_readfile.py?view=markup variable_readfile.py] Python script to read a variable from a file.&lt;br /&gt;
&lt;br /&gt;
=== KWord ===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_cursor.rb?view=markup sample_cursor.rb] Ruby script demonstrates how to control the cursor.&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_actions.py?view=markup sample_actions.py] Python script demonstrates usage of actions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
KWord.shell().slotFileNew()&lt;br /&gt;
KWord.mainWindow().setCaption(&amp;quot;My Caption&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_toolactions.py?view=markup sample_toolactions.py] Python script demonstrates how to trigger actions the current tool provides.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
tool = KWord.tool()&lt;br /&gt;
for n in tool.actionNames():&lt;br /&gt;
    print &amp;quot;%s: %s&amp;quot; % (n, tool.actionText(n))&lt;br /&gt;
    tool.triggerAction(n)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/sample_progressbar.py?view=markup sample_progressbar.py] Python script demonstrates how to use the progressbar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import KWord&lt;br /&gt;
for i in range(1,101):&lt;br /&gt;
    KWord.shell().slotProgress(i)&lt;br /&gt;
KWord.shell().slotProgress(-1)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/onlinehelp.py?view=markup onlinehelp.py] Python script uses the KHTML Part to display the KWord Scripting online help.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code python&amp;gt;&lt;br /&gt;
import Kross&lt;br /&gt;
forms = Kross.module(&amp;quot;forms&amp;quot;)&lt;br /&gt;
dialog = forms.createDialog(&amp;quot;KHTML Part&amp;quot;)&lt;br /&gt;
page = dialog.addPage(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
url = &amp;quot;http://wiki.koffice.org&amp;quot;&lt;br /&gt;
part = forms.loadPart(page, &amp;quot;libkhtmlpart&amp;quot;, url)&lt;br /&gt;
dialog.exec_loop()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scripts ==&lt;br /&gt;
&lt;br /&gt;
=== Import from a Text or HTML File ===&lt;br /&gt;
&lt;br /&gt;
The python script [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/importfile.py?view=markup importfile.py] allows to import content from text- or html-files.&lt;br /&gt;
&lt;br /&gt;
=== Import combined Doxygen XML File ===&lt;br /&gt;
&lt;br /&gt;
The python script [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/importdoxyxml.py?view=markup importdoxyxml.py] implements import of combined doxygen XML files into KWord.&lt;br /&gt;
&lt;br /&gt;
As example this got used to generate the KSpread Scripting API-Reference. This is done by running doxygen with the [http://websvn.kde.org/trunk/koffice/kspread/plugins/scripting/docs/ KSpread doxygen file].&lt;br /&gt;
&lt;br /&gt;
We are able to produce from within the commandline the handbook like demonstrated bellow;&lt;br /&gt;
    cd kspread/plugins/scripting/docs&lt;br /&gt;
    doxygen kspreadscripting.doxyfile&lt;br /&gt;
    cd xml&lt;br /&gt;
    xsltproc combine.xslt index.xml | importdoxyxml.py kspread.html&lt;br /&gt;
&lt;br /&gt;
You are also able to just generate a combined doxygen XML file with;&lt;br /&gt;
    cd kspread/plugins/scripting/docs&lt;br /&gt;
    doxygen kspreadscripting.doxyfile&lt;br /&gt;
    cd xml&lt;br /&gt;
    xsltproc combine.xslt index.xml &amp;gt; ~/mydoxygen.xml&lt;br /&gt;
&lt;br /&gt;
Such a combined doxygen XML file can then be imported into our running KWord instance by running &amp;quot;Import Doxygen XML File&amp;quot; python script from the Tools/Scripts-menu.&lt;br /&gt;
&lt;br /&gt;
=== Import File with OpenOffice.org UNO ===&lt;br /&gt;
&lt;br /&gt;
The python script [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/ooimport.py?view=markup ooimport.py] uses the PyUNO module to access OpenOffice.org and import content from any by OpenOffice.org supported fileformat.&lt;br /&gt;
For this an optional hidden OpenOffice.org instance need to be started. Then the script connects as client to this OpenOffice.org server instance and controls it. If the script got executed and the connecting to the server failed, then it will startup such a hidden OpenOffice.org server instance and shuts it down again once the work is done.&lt;br /&gt;
&lt;br /&gt;
If the script got executed from within KWord (e.g. by using the &amp;quot;Tools=&amp;gt;Script Manager&amp;quot;) the following dialog is displayed. The user chooses the file he likes to import and may also able to change settings related to how the connection to OpenOffice.org should be established. Then a progressdialog will be displayed while in the background we try to connect with OpenOffice.org and let it load the file and pass the content back to KWord.&lt;br /&gt;
&lt;br /&gt;
[[Image:kwordscriptingooimport.jpg]]&lt;br /&gt;
&lt;br /&gt;
That way KWord is able to optional use the OpenOffice.org import-filters to import content from file formats like;&lt;br /&gt;
&lt;br /&gt;
OpenDocument Text (*.odt), OpenDocument Text Template (*.ott), OpenOffice.org 1.0 Text Document (*.sxw), OpenOffice.org 1.0 Text Document Template (*.stw), Microsoft Word 95/97/2000/XP (*.doc), Microsoft Word 95/97/2000/XP Template (*.dot), Microsoft Word 2003 XML (*.xml), Rich Text Format (*.rtf), Text (*.txt), HTML Document (*.html *.htm), DocBook (*.xml), StarWriter 1.0 - 5.0 (*.sdw), StarWriter 3.0 - 5.0 Templates (*.vor), WordPerfect Document (*.wpd), Lotus WordPro Document (*.lwp), Ichitaro 8/9/10/11 (*.jtd), Ichitaro 8/9/10/11 Template (*.jtt), Hangul WP 97 (*.hwp), WPS 2000/Office 1.0 (*.wps), etc.&lt;br /&gt;
&lt;br /&gt;
=== Export to a Text or HTML File ===&lt;br /&gt;
&lt;br /&gt;
The python script [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/exportfile.py?view=markup exportfile.py] allows to export content to text- or html-files.&lt;br /&gt;
&lt;br /&gt;
=== XML Viewer ===&lt;br /&gt;
&lt;br /&gt;
The python script [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/xmlviewer.py?view=markup xmlviewer.py] to view the ISO OpenDocumentText XML representation of the current document displayed in KWord.&lt;br /&gt;
&lt;br /&gt;
The XML Viewer does also allow to open the XML of the current document with an external application like KWrite or KXMLEditor. The &amp;quot;Compare...&amp;quot; button enables to compare the current XML with the XML of another ODT file.&lt;br /&gt;
&lt;br /&gt;
[[Image:kwordxmlviewer.jpg]]&lt;br /&gt;
&lt;br /&gt;
=== Document Structure Viewer ===&lt;br /&gt;
&lt;br /&gt;
The [http://websvn.kde.org/trunk/koffice/kword/plugins/scripting/scripts/doctree.rb?view=markup doctree.rb] QtRuby script implement a document structur viewer.&lt;br /&gt;
&lt;br /&gt;
The viewer displays the framesets, frames, documents and there objects as tree where each node may provide additional functionality like a collection of properties, text or styles.&lt;br /&gt;
&lt;br /&gt;
[[Image:kwordscriptingdoctree.jpg]]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Talk:Projects/Summer_of_Code/2009/Ideas</id>
		<title>Talk:Projects/Summer of Code/2009/Ideas</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Talk:Projects/Summer_of_Code/2009/Ideas"/>
				<updated>2009-03-18T13:34:09Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Work on GTK+ integration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Google calender support for Akonadi/KOrganizer ===&lt;br /&gt;
I don't have sufficient knowledge of the codebase to write up a full blown proposal, but since GSoC is sponsored by google and for KDE, wouldn't this be a perfect project for it? I seen where akondi devs have talked about GCal support, but I haven't seen anything come of it. Full co-operation between kontact and Google apps would be a dream come true -- When I'm forced to use a non-linux box, I could just open up google and everything I need would be there -- from email to calendars to rss feeds. If only GCal supported &amp;quot;Todo&amp;quot;'s.... I suppose the only problem here is if this project would be doable in the constraints of GSoC.&lt;br /&gt;
&lt;br /&gt;
Comment by krake:&lt;br /&gt;
This is already being worked on [http://websvn.kde.org/trunk/playground/pim/googledata/ here].&lt;br /&gt;
&lt;br /&gt;
=== KMail HTML support ===&lt;br /&gt;
&lt;br /&gt;
Shouldn't this SoC be based on porting the composer to be based off of WebKit/KHTML with contentEdtiable? It is the only way KMail is ever going to properly support rich email creation.  The current composer is about 5 years behind the times in capabilities because it is based off of QRichTextEdit.&lt;br /&gt;
&lt;br /&gt;
== Work on GTK+ application integration into KDE ==&lt;br /&gt;
&lt;br /&gt;
Work on the GTK+ projects that use the Qt theming API and the KDE api for GTK/Gnome applications to improve integration of those gnome apps into the kde desktop.&lt;br /&gt;
&lt;br /&gt;
This is done for: theming, file dialogs ,Open/Save file, OK/Cancel vs the gnome way Cancel/OK buttons.&lt;br /&gt;
&lt;br /&gt;
Yes I know those are not part of official KDE4 but IMHO those are needed and many people use them. It would be very benefical to KDE to improve things in those projects and maybe even support them officially. And without KDE support those have no chance to be part of GSoC2009. If anyone says it should be done on GNOME/GTK+ front  I do agree but sadly I don't think they care enough about KDE to do so.&lt;br /&gt;
&lt;br /&gt;
http://www.kde-apps.org/content/show.php?content=36077 &lt;br /&gt;
http://gtk-qt.ecs.soton.ac.uk/&lt;br /&gt;
In general it is about improving how GTK+ apps integrate when running in KDE4 desktop, so be aware that KDE might not have any mentors for this.&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Talk:Projects/Summer_of_Code/2009/Ideas</id>
		<title>Talk:Projects/Summer of Code/2009/Ideas</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Talk:Projects/Summer_of_Code/2009/Ideas"/>
				<updated>2009-03-18T13:11:25Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Work on GTK+ integration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Google calender support for Akonadi/KOrganizer ===&lt;br /&gt;
I don't have sufficient knowledge of the codebase to write up a full blown proposal, but since GSoC is sponsored by google and for KDE, wouldn't this be a perfect project for it? I seen where akondi devs have talked about GCal support, but I haven't seen anything come of it. Full co-operation between kontact and Google apps would be a dream come true -- When I'm forced to use a non-linux box, I could just open up google and everything I need would be there -- from email to calendars to rss feeds. If only GCal supported &amp;quot;Todo&amp;quot;'s.... I suppose the only problem here is if this project would be doable in the constraints of GSoC.&lt;br /&gt;
&lt;br /&gt;
Comment by krake:&lt;br /&gt;
This is already being worked on [http://websvn.kde.org/trunk/playground/pim/googledata/ here].&lt;br /&gt;
&lt;br /&gt;
=== KMail HTML support ===&lt;br /&gt;
&lt;br /&gt;
Shouldn't this SoC be based on porting the composer to be based off of WebKit/KHTML with contentEdtiable? It is the only way KMail is ever going to properly support rich email creation.  The current composer is about 5 years behind the times in capabilities because it is based off of QRichTextEdit.&lt;br /&gt;
&lt;br /&gt;
== Work on GTK+ integration ==&lt;br /&gt;
&lt;br /&gt;
GNOME since Qt4.5 has a nice integration for Qt4 apps with QGTKStyle. This is done for: theming, file dialogs ,Open/Save file, OK/Cancel vs the gnome way Cancel/OK buttons. Similiar projects exist for KDE4: GTKQtEngines, Kgtk.&lt;br /&gt;
Yes I know those are not part of official KDE4 but IMHO those are needed and many people use them. It would be very benefical to KDE to improve things in those projects and maybe even support them officially. And without KDE support those have no chance to be part of GSoC2009. If anyone says it should be done on GNOME/GTK+ front  I do agree but sadly I don't think they care enough about KDE to do so.&lt;br /&gt;
&lt;br /&gt;
Just for consideration.  &amp;lt;Ehm; these projects are part of Qt and quite complete already; whats the SoC project here? (TZndr)&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/KOffice_Overview</id>
		<title>Development/Tutorials/KOffice Overview</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/KOffice_Overview"/>
				<updated>2009-03-18T10:56:15Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Inline Objects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;KOffice has gotten more and more configurable through plugins over time, which is a really good thing as 3rd party developers can extend KOffice using dedicated code for their purpose.&lt;br /&gt;
&lt;br /&gt;
You will learn what functionality you can place in each plugin type so you can choose wisely.  There is a general guide to writing plugins and each type has a tutorial showing how to create a new plugin of that type.&lt;br /&gt;
&lt;br /&gt;
well, not all required info is there yet; but this is the idea :)  Anyone want to help?&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Generic Information ==&lt;br /&gt;
Plugins are a design technique with a series of steps that will lead you to a loadable plugin.  If you want to know more its is interresting to read an overview at [[Development/Tutorials/Generic KOffice Plugin Creation|Generic KOffice Plugin Creation]]&lt;br /&gt;
&lt;br /&gt;
== Shapes ==&lt;br /&gt;
In KOffice shapes are document content.  This content can be manipulated by the user and can be shown on screen or printed.  The fact that they are plugins means that a new content types can be added to documents by just installing the plugin and starting your favorite KOffice application.&lt;br /&gt;
To get a feel for what a shape is, here are some examples of existing shapes, sometimes referred to as Flake shapes because shapes are one of the two main parts of the Flake library.&lt;br /&gt;
&lt;br /&gt;
We have a PathShape which is a generic vector shape capable of showing and printing any sort of vector art like SVG or EPS vector graphics.&lt;br /&gt;
&lt;br /&gt;
There is a Text plugin that is capable of showing marked up text with a huge feature set including HTML capabilities and a big part of the more extensive OpenDocument format.&lt;br /&gt;
&lt;br /&gt;
KSpread exports a tableShape, to allow a spread-sheet table to be embedded in other KOffice applications.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs-flake/classKoShapeRegistry.html KoShapeRegistry]&lt;br /&gt;
&lt;br /&gt;
The tutorial on how to write your own shape plugins can be found at [[Development/Tutorials/Write a Flake Plugin|Write a Flake Plugin]]&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
A tool is a plugin that handles user input and can manipulate either the general application data, or can manipulate a specific shape.&lt;br /&gt;
All user input mouse and keyboard events that are send to the document area (canvas), will be passed to the active tool.  The active tool can use them to, for example, move shapes around or rotate them. If you combine a tool with a shape plugin you can make the tool manipulate the data of the shape.  A good example is the text tool which is bundled with the text shape.  The text tool takes all keyboard events and thereby lets the user type text in the text shape.&lt;br /&gt;
&lt;br /&gt;
This gives a clear separation of control and content.  The shape holds the content and a tool is required to control that content.&lt;br /&gt;
&lt;br /&gt;
In general there are two types of Tools;&lt;br /&gt;
* generic tools that are not associated with a shape plugin.  Its rare that you will create such plugins, though we still need a 'measure' tool that falls in that category.&lt;br /&gt;
* bundled tools that come with a specific flake shape and is made to manipulate that shapes data.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs-flake/classKoToolRegistry.html KoToolRegistry]&lt;br /&gt;
&lt;br /&gt;
The tutorial on how to write your own shape plugins can be found at [[Development/Tutorials/Write a Flake Plugin|Write a Flake Plugin]]&lt;br /&gt;
&lt;br /&gt;
== Dockers ==&lt;br /&gt;
&lt;br /&gt;
Plugins that provide a docker are basically plugins that provide a graphical user interface element for KOffice applications.  In KOffice2 the focus on toolbars and dialogs will be less as they have been proven to be confusing to users because they clutter the interface.&lt;br /&gt;
Instead the focus is shifted to widgets that can be docked along the sides of a document window but also moved to be a separate window. The real change is that, unlike dialogs, they don't have an 'Ok' button but instead change the content life and immediately.&lt;br /&gt;
Examples of dockers are; the toolbox, the shape selector and the tool-options but also the color selector.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs/classKoDockRegistry.html KoDockRegistry]&lt;br /&gt;
&lt;br /&gt;
Within KOffice dockers could also be written in a scripting language like Python or Ruby. The [[Development/Tutorials/KSpread_Scripting#Scripting_Docker_Widgets|KSpread Scripting Docker]] tutorial shows how it was done within KSpread.&lt;br /&gt;
&lt;br /&gt;
=== Considerations ===&lt;br /&gt;
Dockers should never be passed a document or a view in the constructor.  The reasons for that is simple; the lifetime of the docker is longer then the lifetime of the document and also of the view.&lt;br /&gt;
&lt;br /&gt;
The proper way to do this is to let the application tell you there is a new document or a new image, etc. And listen on that.&lt;br /&gt;
This involves a couple of steps;&lt;br /&gt;
* The application should use the KoCanvasResourceProvider to put content on. Like the current layer, the current document etc.&lt;br /&gt;
* The docker should (also) inherit from KoCanvasObserver which means it will get notified when its canvas changes.&lt;br /&gt;
* Using the KoCanvasBase received from the KoCanvasObserver it can fetch the document from the KoCanvasResourceProvider.  It can also connect to the provider to be informed about any changes.&lt;br /&gt;
&lt;br /&gt;
An extra tip is to use the KoCanvasResource::DocumentIsLoading boolean, dockers should listen to it to avoid doing work while the document is loading.&lt;br /&gt;
&lt;br /&gt;
== Colorspaces ==&lt;br /&gt;
&lt;br /&gt;
== File Filters ==&lt;br /&gt;
&lt;br /&gt;
== Text Plugins ==&lt;br /&gt;
&lt;br /&gt;
The text component used in all KOffice applications has a set of plugins itself. These plugins allow the possibility to enhance the content as well as allow to enhance the editing experience.  Use Inline object plugins to write content such as inline variables and bookmarks.  Use Text Editing plugins to be able to replace the text a user types while he types it. For example for autocorrection.&lt;br /&gt;
&lt;br /&gt;
=== Inline Objects ===&lt;br /&gt;
&lt;br /&gt;
The plugins of this type effectively become a character in the text document.  What this means is that a user can insert an inline object and the plugin can decide the size and content of the character inserted.&lt;br /&gt;
A good example of inline objects are variables.  A variable can have a name and a value and altering the value of a variable will then change the value in the text all over the document. This is done by an inline object that shows the full text of the variable, but in the document it behaves as it is one big character that can't be split over lines or otherwise edited.&lt;br /&gt;
&lt;br /&gt;
An inline object does not have to have content, it can just be a placeholder as well. Which makes it ideal for things like in-text comments/annotations and Bookmarks.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs-kotext/classKoInlineObjectRegistry.html KoInlineObjectRegistry]&lt;br /&gt;
&lt;br /&gt;
=== Text Editing ===&lt;br /&gt;
&lt;br /&gt;
The text editing plugins are all about handling user input while (s)he is editing the text. A plugin can do near everything with the typed text, including altering it and adding markup.&lt;br /&gt;
The plugin gives events when a word and when a paragraph has been finished. Which is ideal for autocorrection and autoreplacement of text.&lt;br /&gt;
&lt;br /&gt;
Examples of usages of this plugin type are; a word count in a docker updated continuesly, auto correction of text, replacing formatted text with calculated values or custom shape plugins.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs-kotext/classKoTextEditingRegistry.html KoTextEditingRegistry]&lt;br /&gt;
&lt;br /&gt;
== Krita's plugins ==&lt;br /&gt;
* filters (effects)&lt;br /&gt;
* paintop (plugin that are in charge of painting when the user uses a drawing tool)&lt;br /&gt;
* viewplugin (aka misc)&lt;br /&gt;
See [http://docs.kde.org/development/en/koffice/krita/developers-plugins.html Krita's handbook]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/KOffice_Overview</id>
		<title>Development/Tutorials/KOffice Overview</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/KOffice_Overview"/>
				<updated>2009-03-18T10:14:42Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Inline Objects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;KOffice has gotten more and more configurable through plugins over time, which is a really good thing as 3rd party developers can extend KOffice using dedicated code for their purpose.&lt;br /&gt;
&lt;br /&gt;
You will learn what functionality you can place in each plugin type so you can choose wisely.  There is a general guide to writing plugins and each type has a tutorial showing how to create a new plugin of that type.&lt;br /&gt;
&lt;br /&gt;
well, not all required info is there yet; but this is the idea :)  Anyone want to help?&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Generic Information ==&lt;br /&gt;
Plugins are a design technique with a series of steps that will lead you to a loadable plugin.  If you want to know more its is interresting to read an overview at [[Development/Tutorials/Generic KOffice Plugin Creation|Generic KOffice Plugin Creation]]&lt;br /&gt;
&lt;br /&gt;
== Shapes ==&lt;br /&gt;
In KOffice shapes are document content.  This content can be manipulated by the user and can be shown on screen or printed.  The fact that they are plugins means that a new content types can be added to documents by just installing the plugin and starting your favorite KOffice application.&lt;br /&gt;
To get a feel for what a shape is, here are some examples of existing shapes, sometimes referred to as Flake shapes because shapes are one of the two main parts of the Flake library.&lt;br /&gt;
&lt;br /&gt;
We have a PathShape which is a generic vector shape capable of showing and printing any sort of vector art like SVG or EPS vector graphics.&lt;br /&gt;
&lt;br /&gt;
There is a Text plugin that is capable of showing marked up text with a huge feature set including HTML capabilities and a big part of the more extensive OpenDocument format.&lt;br /&gt;
&lt;br /&gt;
KSpread exports a tableShape, to allow a spread-sheet table to be embedded in other KOffice applications.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs-flake/classKoShapeRegistry.html KoShapeRegistry]&lt;br /&gt;
&lt;br /&gt;
The tutorial on how to write your own shape plugins can be found at [[Development/Tutorials/Write a Flake Plugin|Write a Flake Plugin]]&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
A tool is a plugin that handles user input and can manipulate either the general application data, or can manipulate a specific shape.&lt;br /&gt;
All user input mouse and keyboard events that are send to the document area (canvas), will be passed to the active tool.  The active tool can use them to, for example, move shapes around or rotate them. If you combine a tool with a shape plugin you can make the tool manipulate the data of the shape.  A good example is the text tool which is bundled with the text shape.  The text tool takes all keyboard events and thereby lets the user type text in the text shape.&lt;br /&gt;
&lt;br /&gt;
This gives a clear separation of control and content.  The shape holds the content and a tool is required to control that content.&lt;br /&gt;
&lt;br /&gt;
In general there are two types of Tools;&lt;br /&gt;
* generic tools that are not associated with a shape plugin.  Its rare that you will create such plugins, though we still need a 'measure' tool that falls in that category.&lt;br /&gt;
* bundled tools that come with a specific flake shape and is made to manipulate that shapes data.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs-flake/classKoToolRegistry.html KoToolRegistry]&lt;br /&gt;
&lt;br /&gt;
The tutorial on how to write your own shape plugins can be found at [[Development/Tutorials/Write a Flake Plugin|Write a Flake Plugin]]&lt;br /&gt;
&lt;br /&gt;
== Dockers ==&lt;br /&gt;
&lt;br /&gt;
Plugins that provide a docker are basically plugins that provide a graphical user interface element for KOffice applications.  In KOffice2 the focus on toolbars and dialogs will be less as they have been proven to be confusing to users because they clutter the interface.&lt;br /&gt;
Instead the focus is shifted to widgets that can be docked along the sides of a document window but also moved to be a separate window. The real change is that, unlike dialogs, they don't have an 'Ok' button but instead change the content life and immediately.&lt;br /&gt;
Examples of dockers are; the toolbox, the shape selector and the tool-options but also the color selector.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs/classKoDockRegistry.html KoDockRegistry]&lt;br /&gt;
&lt;br /&gt;
Within KOffice dockers could also be written in a scripting language like Python or Ruby. The [[Development/Tutorials/KSpread_Scripting#Scripting_Docker_Widgets|KSpread Scripting Docker]] tutorial shows how it was done within KSpread.&lt;br /&gt;
&lt;br /&gt;
=== Considerations ===&lt;br /&gt;
Dockers should never be passed a document or a view in the constructor.  The reasons for that is simple; the lifetime of the docker is longer then the lifetime of the document and also of the view.&lt;br /&gt;
&lt;br /&gt;
The proper way to do this is to let the application tell you there is a new document or a new image, etc. And listen on that.&lt;br /&gt;
This involves a couple of steps;&lt;br /&gt;
* The application should use the KoCanvasResourceProvider to put content on. Like the current layer, the current document etc.&lt;br /&gt;
* The docker should (also) inherit from KoCanvasObserver which means it will get notified when its canvas changes.&lt;br /&gt;
* Using the KoCanvasBase received from the KoCanvasObserver it can fetch the document from the KoCanvasResourceProvider.  It can also connect to the provider to be informed about any changes.&lt;br /&gt;
&lt;br /&gt;
An extra tip is to use the KoCanvasResource::DocumentIsLoading boolean, dockers should listen to it to avoid doing work while the document is loading.&lt;br /&gt;
&lt;br /&gt;
== Colorspaces ==&lt;br /&gt;
&lt;br /&gt;
== File Filters ==&lt;br /&gt;
&lt;br /&gt;
== Text Plugins ==&lt;br /&gt;
&lt;br /&gt;
The text component used in all KOffice applications has a set of plugins itself. These plugins allow the possibility to enhance the content as well as allow to enhance the editing experience.  Use Inline object plugins to write content such as inline variables and bookmarks.  Use Text Editing plugins to be able to replace the text a user types while he types it. For example for autocorrection.&lt;br /&gt;
&lt;br /&gt;
=== Inline Objects ===&lt;br /&gt;
&lt;br /&gt;
The plugins of this type effectively become a character in the text document.  What this means is that a user can insert an inline object and the plugin can decide the size and content of the character inserted.&lt;br /&gt;
A good example of inline objects are variables.  A variable can have a name and a value and altering the value of a variable will then change the value in the text all over the document. This is done by an inline object that shows the full text of the variable, but in the document it behaves as it is one big character that can't be split over lines or otherwise edited.&lt;br /&gt;
&lt;br /&gt;
An inline object does not have to have content, it can just be a placeholder as well. Which makes it ideal for things like in-text comments/annotations and Bookmarks.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs-kotext/classKoVariableRegistry.html KoInlineObjectRegistry]&lt;br /&gt;
&lt;br /&gt;
=== Text Editing ===&lt;br /&gt;
&lt;br /&gt;
The text editing plugins are all about handling user input while (s)he is editing the text. A plugin can do near everything with the typed text, including altering it and adding markup.&lt;br /&gt;
The plugin gives events when a word and when a paragraph has been finished. Which is ideal for autocorrection and autoreplacement of text.&lt;br /&gt;
&lt;br /&gt;
Examples of usages of this plugin type are; a word count in a docker updated continuesly, auto correction of text, replacing formatted text with calculated values or custom shape plugins.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs-kotext/classKoTextEditingRegistry.html KoTextEditingRegistry]&lt;br /&gt;
&lt;br /&gt;
== Krita's plugins ==&lt;br /&gt;
* filters (effects)&lt;br /&gt;
* paintop (plugin that are in charge of painting when the user uses a drawing tool)&lt;br /&gt;
* viewplugin (aka misc)&lt;br /&gt;
See [http://docs.kde.org/development/en/koffice/krita/developers-plugins.html Krita's handbook]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/KOffice_Overview</id>
		<title>Development/Tutorials/KOffice Overview</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/KOffice_Overview"/>
				<updated>2009-03-18T10:13:22Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Text Editing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;KOffice has gotten more and more configurable through plugins over time, which is a really good thing as 3rd party developers can extend KOffice using dedicated code for their purpose.&lt;br /&gt;
&lt;br /&gt;
You will learn what functionality you can place in each plugin type so you can choose wisely.  There is a general guide to writing plugins and each type has a tutorial showing how to create a new plugin of that type.&lt;br /&gt;
&lt;br /&gt;
well, not all required info is there yet; but this is the idea :)  Anyone want to help?&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Generic Information ==&lt;br /&gt;
Plugins are a design technique with a series of steps that will lead you to a loadable plugin.  If you want to know more its is interresting to read an overview at [[Development/Tutorials/Generic KOffice Plugin Creation|Generic KOffice Plugin Creation]]&lt;br /&gt;
&lt;br /&gt;
== Shapes ==&lt;br /&gt;
In KOffice shapes are document content.  This content can be manipulated by the user and can be shown on screen or printed.  The fact that they are plugins means that a new content types can be added to documents by just installing the plugin and starting your favorite KOffice application.&lt;br /&gt;
To get a feel for what a shape is, here are some examples of existing shapes, sometimes referred to as Flake shapes because shapes are one of the two main parts of the Flake library.&lt;br /&gt;
&lt;br /&gt;
We have a PathShape which is a generic vector shape capable of showing and printing any sort of vector art like SVG or EPS vector graphics.&lt;br /&gt;
&lt;br /&gt;
There is a Text plugin that is capable of showing marked up text with a huge feature set including HTML capabilities and a big part of the more extensive OpenDocument format.&lt;br /&gt;
&lt;br /&gt;
KSpread exports a tableShape, to allow a spread-sheet table to be embedded in other KOffice applications.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs-flake/classKoShapeRegistry.html KoShapeRegistry]&lt;br /&gt;
&lt;br /&gt;
The tutorial on how to write your own shape plugins can be found at [[Development/Tutorials/Write a Flake Plugin|Write a Flake Plugin]]&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
A tool is a plugin that handles user input and can manipulate either the general application data, or can manipulate a specific shape.&lt;br /&gt;
All user input mouse and keyboard events that are send to the document area (canvas), will be passed to the active tool.  The active tool can use them to, for example, move shapes around or rotate them. If you combine a tool with a shape plugin you can make the tool manipulate the data of the shape.  A good example is the text tool which is bundled with the text shape.  The text tool takes all keyboard events and thereby lets the user type text in the text shape.&lt;br /&gt;
&lt;br /&gt;
This gives a clear separation of control and content.  The shape holds the content and a tool is required to control that content.&lt;br /&gt;
&lt;br /&gt;
In general there are two types of Tools;&lt;br /&gt;
* generic tools that are not associated with a shape plugin.  Its rare that you will create such plugins, though we still need a 'measure' tool that falls in that category.&lt;br /&gt;
* bundled tools that come with a specific flake shape and is made to manipulate that shapes data.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs-flake/classKoToolRegistry.html KoToolRegistry]&lt;br /&gt;
&lt;br /&gt;
The tutorial on how to write your own shape plugins can be found at [[Development/Tutorials/Write a Flake Plugin|Write a Flake Plugin]]&lt;br /&gt;
&lt;br /&gt;
== Dockers ==&lt;br /&gt;
&lt;br /&gt;
Plugins that provide a docker are basically plugins that provide a graphical user interface element for KOffice applications.  In KOffice2 the focus on toolbars and dialogs will be less as they have been proven to be confusing to users because they clutter the interface.&lt;br /&gt;
Instead the focus is shifted to widgets that can be docked along the sides of a document window but also moved to be a separate window. The real change is that, unlike dialogs, they don't have an 'Ok' button but instead change the content life and immediately.&lt;br /&gt;
Examples of dockers are; the toolbox, the shape selector and the tool-options but also the color selector.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs/classKoDockRegistry.html KoDockRegistry]&lt;br /&gt;
&lt;br /&gt;
Within KOffice dockers could also be written in a scripting language like Python or Ruby. The [[Development/Tutorials/KSpread_Scripting#Scripting_Docker_Widgets|KSpread Scripting Docker]] tutorial shows how it was done within KSpread.&lt;br /&gt;
&lt;br /&gt;
=== Considerations ===&lt;br /&gt;
Dockers should never be passed a document or a view in the constructor.  The reasons for that is simple; the lifetime of the docker is longer then the lifetime of the document and also of the view.&lt;br /&gt;
&lt;br /&gt;
The proper way to do this is to let the application tell you there is a new document or a new image, etc. And listen on that.&lt;br /&gt;
This involves a couple of steps;&lt;br /&gt;
* The application should use the KoCanvasResourceProvider to put content on. Like the current layer, the current document etc.&lt;br /&gt;
* The docker should (also) inherit from KoCanvasObserver which means it will get notified when its canvas changes.&lt;br /&gt;
* Using the KoCanvasBase received from the KoCanvasObserver it can fetch the document from the KoCanvasResourceProvider.  It can also connect to the provider to be informed about any changes.&lt;br /&gt;
&lt;br /&gt;
An extra tip is to use the KoCanvasResource::DocumentIsLoading boolean, dockers should listen to it to avoid doing work while the document is loading.&lt;br /&gt;
&lt;br /&gt;
== Colorspaces ==&lt;br /&gt;
&lt;br /&gt;
== File Filters ==&lt;br /&gt;
&lt;br /&gt;
== Text Plugins ==&lt;br /&gt;
&lt;br /&gt;
The text component used in all KOffice applications has a set of plugins itself. These plugins allow the possibility to enhance the content as well as allow to enhance the editing experience.  Use Inline object plugins to write content such as inline variables and bookmarks.  Use Text Editing plugins to be able to replace the text a user types while he types it. For example for autocorrection.&lt;br /&gt;
&lt;br /&gt;
=== Inline Objects ===&lt;br /&gt;
&lt;br /&gt;
The plugins of this type effectively become a character in the text document.  What this means is that a user can insert an inline object and the plugin can decide the size and content of the character inserted.&lt;br /&gt;
A good example of inline objects are variables.  A variable can have a name and a value and altering the value of a variable will then change the value in the text all over the document. This is done by an inline object that shows the full text of the variable, but in the document it behaves as it is one big character that can't be split over lines or otherwise edited.&lt;br /&gt;
&lt;br /&gt;
An inline object does not have to have content, it can just be a placeholder as well. Which makes it ideal for things like in-text comments/annotations and Bookmarks.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs/classKoInlineObjectRegistry.html KoInlineObjectRegistry]&lt;br /&gt;
&lt;br /&gt;
=== Text Editing ===&lt;br /&gt;
&lt;br /&gt;
The text editing plugins are all about handling user input while (s)he is editing the text. A plugin can do near everything with the typed text, including altering it and adding markup.&lt;br /&gt;
The plugin gives events when a word and when a paragraph has been finished. Which is ideal for autocorrection and autoreplacement of text.&lt;br /&gt;
&lt;br /&gt;
Examples of usages of this plugin type are; a word count in a docker updated continuesly, auto correction of text, replacing formatted text with calculated values or custom shape plugins.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs-kotext/classKoTextEditingRegistry.html KoTextEditingRegistry]&lt;br /&gt;
&lt;br /&gt;
== Krita's plugins ==&lt;br /&gt;
* filters (effects)&lt;br /&gt;
* paintop (plugin that are in charge of painting when the user uses a drawing tool)&lt;br /&gt;
* viewplugin (aka misc)&lt;br /&gt;
See [http://docs.kde.org/development/en/koffice/krita/developers-plugins.html Krita's handbook]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Summer_of_Code/2009/Ideas</id>
		<title>Projects/Summer of Code/2009/Ideas</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Summer_of_Code/2009/Ideas"/>
				<updated>2009-02-25T22:09:28Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Project: Improvments in KMail's HTML support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Guidelines ==&lt;br /&gt;
===Information for Students===&lt;br /&gt;
&lt;br /&gt;
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at. &lt;br /&gt;
&lt;br /&gt;
Being accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. Simply copying and pasting an idea here will not work. On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out.&lt;br /&gt;
&lt;br /&gt;
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!&lt;br /&gt;
&lt;br /&gt;
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.&lt;br /&gt;
&lt;br /&gt;
===Adding a Proposal===&lt;br /&gt;
When adding an idea to this section, please try to include the following data:&lt;br /&gt;
:* if the application is not widely known, a description of what it does and where its code lives&lt;br /&gt;
:* a brief explanation&lt;br /&gt;
:* the expected results&lt;br /&gt;
:* pre-requisites for working on your project&lt;br /&gt;
:* if applicable, links to more information or discussions&lt;br /&gt;
:* mailing list or IRC channel for your application/library/module&lt;br /&gt;
:* your name and email address for contact (if you're willing to be a mentor)&lt;br /&gt;
&lt;br /&gt;
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.&lt;br /&gt;
==Ideas==&lt;br /&gt;
===Plasma===&lt;br /&gt;
[http://plasma.kde.org Website] - [https://mail.kde.org/mailman/listinfo/panel-dev Mailing list] - IRC channel: #plasma on Freenode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Project: Network Enabling Plasma::Service====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
The Service should be able to parse WSDL files and let Plasmoids connect to the described Webservices as well as optionally announce itself to the local network over uPnp and/or zeroconf. Finally, a Service that announces itself and can send a widget over the wire to another Plasma instance would complete this project.&lt;br /&gt;
&lt;br /&gt;
====Project: Simple Media Center components====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Plasma could offer a Media center mode, where features a really simple ui to browse media files and plasmoids that shows the actual media. All should be operable with mouse, keyboard or a simple remote control. the work could consist in building the whole thing or just writing a plasmoid able to browse media files, that is the most important missing part.&lt;br /&gt;
Mockups for it by Nuno Pinheiro can be seen [http://img213.imageshack.us/img213/3200/image3231picturefz5.png here] and [http://img26.imageshack.us/img26/3407/image323musicoloectionck2.png here]&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
An applet to browse and thumbnail media files, like the first mockup and control the actual media viewing applets, like the media player applet or the picture frame applet. At this stage the functionality will be really minimum&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:'''&lt;br /&gt;
Knowledge of C++ and some familiarity with Qt especially QGraphicsView related classes.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
Marco Martin (notmart a gmail dot org), or other Plasma developers. Contact at plasma-devel@kde.org or #plasma on freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: Plasmate====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
PlasMate is an application that gives people a way to start creating scripted plasmoids without worrying about anything except making their bits. It hides the whole metadata.desktop thing, the package layout details, making a Plasmoid package (aka &amp;quot;zipping up the directory&amp;quot;), uploading content and version control system.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
Working application that one can do the tasks described above, making it easy to create and distribute a scripted plasmoid.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:'''&lt;br /&gt;
Knowledge of C++ and familiarity with Qt (QWidgets and QGraphicsView related classes).&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
Artur Duque de Souza (morpheuz a gmail dot org), or other Plasma developers. Contact at plasma-devel@kde.org or #plasma on freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: Qt Kinetic + Plasma====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
A layer over Qt Kinetic to provide a standardized set of &amp;quot;out of the box&amp;quot; &lt;br /&gt;
animations and bring them into libplasma. The work will be done with the Plasma developers to make this API as efficient as possible. The work will be based on Kinetic, the next framework for animations in Qt.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
We can kill Plasma::Animator class. The goal is to bring fancy effects/animations in Plasma to have one of the best desktop ever.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:'''&lt;br /&gt;
Knowledge of C++, familiarity with QGraphicsView related classes and some familiarity with animations bits.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
Alexis Ménard (alexis.menard at nokia dot com) or Artur Duque de Souza (morpheuz a gmail dot org). Contact at plasma-devel@kde.org or #plasma on freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: Eduactional layout====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
A set of Containments and Plasmoids specifically designed for primary school &lt;br /&gt;
students.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
A simplified panel containment that contains basic launchers and user feedback &lt;br /&gt;
for the student, a widget that allows teachers to provide context-specific &lt;br /&gt;
sets of applications and documents to the student (context being a combination &lt;br /&gt;
of the student logged in and the current class subject), a widget that &lt;br /&gt;
provides some basic teacher-&amp;gt;student communication and status (e.g. what the &lt;br /&gt;
current assignment is, how long the student has been logged in, etc) and &lt;br /&gt;
optionally some widgets that work with KDE edu apps.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:'''&lt;br /&gt;
Knowledge of C++.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
Plasma team. Contact at plasma-devel@kde.org or #plasma on freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: Desktop dock====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
A MacOS style dock containment.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
A containment that provides a similar user experience to the MacOS dock: &lt;br /&gt;
application launchers that are also task bar entries when the application is &lt;br /&gt;
active and a separate area for widgets such as the trash, battery, etc.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:'''&lt;br /&gt;
Knowledge of C++.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
Plasma team. Contact at plasma-devel@kde.org or #plasma on freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: Kdm frontend using plasma====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
A log-in screen layout manager for KDM that uses libplasma.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
A KDM screen that is rendered completely using Plasma. This means both using &lt;br /&gt;
libplasma in KDM for the log in screen as well as writing Plasmoids for &lt;br /&gt;
entering the user name and password, listing users, session switching, etc. &lt;br /&gt;
Some of these widgets already exist for the desktop shell, so in some cases &lt;br /&gt;
this will be simply integrating existing Plasmoids, but in other cases will &lt;br /&gt;
mean writing new ones from the ground up.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:'''&lt;br /&gt;
Knowledge of C++.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
Plasma team. Contact at plasma-devel@kde.org or #plasma on freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: Raptor====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Raptor aims to deliver a new kind of launch menu system for KDE. It is designed with usability and beauty in mind.&lt;br /&gt;
Raptor-Menu does not try to be the final answer to the menu question, instead aspires to be the best answer we can give, merging many ideas form modern desktop launch menus.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
http://www.raptor-menu.org/&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:'''&lt;br /&gt;
Knowledge of C++.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
Plasma team. Contact at plasma-devel@kde.org or #plasma on freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: New Widget Explorer====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
A new widget explorer that supports both our own widgets as well as others &lt;br /&gt;
more seamlessly.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
A usable and pretty browser for widgets that allows a user to see an icon or &lt;br /&gt;
snapshot of the widget, select a widget to be placed in a containment, search &lt;br /&gt;
for a widget based on name/description, sort the widgets into categories, rate &lt;br /&gt;
widgets and provide ways to launch the online browsers and installers for both &lt;br /&gt;
native Plasmoids as well as third party tools such as Google Gadgets (which is &lt;br /&gt;
already supported in the Package class). All the required support &lt;br /&gt;
functionality already exists, this project is really about creating a &lt;br /&gt;
beautiful and dynamic user interface for looking through a widget catalog that &lt;br /&gt;
looks &amp;quot;Plasma&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:'''&lt;br /&gt;
Knowledge of C++.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
Plasma team. Contact at plasma-devel@kde.org or #plasma on freenode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Project: D-Bus Interface====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
A comprehensive set of D-Bus interfaces for the plasma-desktop Plasma shell.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
The D-Bus interface must provide access to the Corona (DestkopCorona class), &lt;br /&gt;
which in turn will list all existing Containments and allow Containments to be &lt;br /&gt;
added, removed, saved, etc.&lt;br /&gt;
&lt;br /&gt;
A D-Bus interface for each existing Containment will be made available as &lt;br /&gt;
well, which will provide a standard set of tools including listing, adding and &lt;br /&gt;
removing widgets as well as positioning and sizing for PanelContaiments. Ways &lt;br /&gt;
to control the wallpaper, if any, will also be provided in the per-Containment &lt;br /&gt;
D-Bus interface.&lt;br /&gt;
&lt;br /&gt;
In turn, a D-Bus interface for each widget representing its available &lt;br /&gt;
contextual actions will be provided dynamically upon request.&lt;br /&gt;
&lt;br /&gt;
Finally, the application D-Bus interface for things such as locking/unlocking &lt;br /&gt;
widgets will be designed and implemented.&lt;br /&gt;
&lt;br /&gt;
The result will be a Plasma that is fully accessible via D-Bus.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:'''&lt;br /&gt;
Knowledge of C++.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
Plasma team. Contact at plasma-devel@kde.org or #plasma on freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: Security====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
A set of methods to define the existing security state of the Plasma &lt;br /&gt;
application, the security requirements of individual widgets, mechanisms to &lt;br /&gt;
respect those two sets of information and cryptographic signing of Plasmoid &lt;br /&gt;
packages.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
A set of functionality descriptions will be enumerated (e.g. &amp;quot;Network access&amp;quot;, &lt;br /&gt;
&amp;quot;Local file system access&amp;quot;, etc.). Individual widgets will advertise which of &lt;br /&gt;
these functionality sets they require. &lt;br /&gt;
&lt;br /&gt;
The plasma-overlay shell (used on the screensaver) will have code added to it &lt;br /&gt;
to respect these settings and not run widgets that advertise they need things &lt;br /&gt;
that aren't safe to provide on a screensaver (due to it being locked to &lt;br /&gt;
prevent others from accessing the system).&lt;br /&gt;
&lt;br /&gt;
The plasma-desktop shell will gain the ability to be put into various lock down &lt;br /&gt;
states which will map to different sets of functionality. Part of this project &lt;br /&gt;
will be enumerate the various states, but that list must include &amp;quot;only load &lt;br /&gt;
trusted widgets&amp;quot;, &amp;quot;no external access&amp;quot;, &amp;quot;no local file system access&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The JavaScript engine will provide methods for each of the functionality sets &lt;br /&gt;
(e.g. a set of functions to access local files) which will be exported or not &lt;br /&gt;
based on the current Security state. This implies providing a security state &lt;br /&gt;
to the Corona which can then be passed on down to Applets and AppletScripts.&lt;br /&gt;
&lt;br /&gt;
Finally, GPG signing of Plasmoid packages will be implemented along with a way &lt;br /&gt;
of checking the validity of these at runtime.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:'''&lt;br /&gt;
Knowledge of C++ and some experience with security.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
Plasma team. Contact at plasma-devel@kde.org or #plasma on freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: Telepathy Integration====&lt;br /&gt;
&lt;br /&gt;
See [[#Project:_Telepathy_Plasma_Integration| here]] for more project details.&lt;br /&gt;
&lt;br /&gt;
===Amarok===&lt;br /&gt;
A KDE music manager and player.&lt;br /&gt;
&lt;br /&gt;
[http://amarok.kde.org Website] - [https://mail.kde.org/mailman/listinfo/amarok Mailing list] - IRC channel: #amarok on Freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: DLNA/UPnP Support====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Using the UPnP protocol users can, for example, share music from their Vista computer to a PS3. Amarok lacks any sort of UPnP support. Being able to act as a client or possibly a UPnP media server would be useful. In addition to that controlling a UPnP Media Renderer from within Amarok is possible with framework support.&lt;br /&gt;
&lt;br /&gt;
The [http://coherence.beebits.net/ Coherence server] would likely be used since it is also intended to be used by a KIO slave.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
*Using the Amarok Collection framework, create a plugin which allows Amarok to browse, search and play music off of a UPnP share. Playing music may use the UPnP KIO-slave, but more advanced functionality requires Amarok to handle this directly.&lt;br /&gt;
*Allow Amarok to share it's collection with other devices or control other devices via UPnP. This is secondary priority but it may be pretty easy with Coherence.&lt;br /&gt;
*Control UPnP Media Renderers (DMR: Digital Media Renderer device class in DLNA) from within Amarok.&lt;br /&gt;
&lt;br /&gt;
'''Material Prerequisite:''' Some UPnP devices or computers to test with. Good excuse to buy a PS3. If you live in Europe a Philips Streamium DMR can be borrowed.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++ and Qt. Coherence uses Python and D-Bus but doesn't need to be hacked on in the scope of this project.&lt;br /&gt;
&lt;br /&gt;
And of course, understanding of UPnP networking and devices wouldn't hurt!&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Stecchino (bart.cerneels at kde dot org)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Project: New meta-applets for the Context View====&lt;br /&gt;
'''Brief Explanation:'''&lt;br /&gt;
The Context View (CV) is currently used to display multiple applets that expose various information. However, due to the fact that each applet displays a certain type of information from one data source, there is significant amount of wasted space, and it is hard to show much more than 3 different pieces of data at once.&lt;br /&gt;
&lt;br /&gt;
Meta-Applets are large applets that integrate date from multiple data sources in order to display more semantically related information coherently and efficiently. This could mean, for example, an applet that brings together lyrics, artist info, upcoming concerts, and related songs/artists. &lt;br /&gt;
&lt;br /&gt;
More info is available here [http://amarok.kde.org/wiki/Proposals/More_Contexual_Information on the amarok wiki]&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
Two or three (to be discussed with mentor in application writing process) applets that elegantly execute the ideas discussed above.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:'''&lt;br /&gt;
Knowledge of C++ is required, and some familiarity with Qt is helpful (especially QGraphicsView) but not necessary. &lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
Leo Franchi (lfranchi AAAT kde DT org), or other Amarok developers. Contact at amarok@kde.org or #amarok on freenode.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
====Project: Code regression test suite, implemented with QtScript ====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Amarok currently has no automatic code regression testing (&amp;quot;unit testing&amp;quot;) in place at all. We very much need such a system in place (for as many components as possible), as we sometimes accidentally break certain components of the program by extending the code.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
Code regression test suite for Amarok 2, implemented as one &amp;quot;Amarok-Script&amp;quot; (JavaScript), and internally split into multiple separate files and components, so that it would be possible to run arbitray tests (or the full suite) with very little effort, and no compiling, at any time. A requirement would also be testing of the collection scanning code (with test case collections), and testing of GUI correctness with the QTest library.&lt;br /&gt;
&lt;br /&gt;
Also see:&lt;br /&gt;
http://amarok.kde.org/wiki/Development/Scripting_HowTo_2.0&lt;br /&gt;
&lt;br /&gt;
A plus would be the generation of suitable statistics (possibly with document export), and possibly a visual representation of the data.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
C++, Qt, KDE-Libs, QtScript (JavaScript), SVN, git, code testing.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
 Contact the amarok mailing list or ask in our IRC channel #amarok&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Project: Multilevel playlist sorting and sorting GUI ====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
In Amarok 2.1, the layout of the playlist will be very configurable, being able to show as much or as little information about each track as each user might wish. Currently however, it is lacking an advanced system for sorting in the playlist, something that many users comming from Amarok 1 are missing. While simple sorting is relatively easy to do (and has already been partly implemented) we would like to aim a bit higher with Amarok 2.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
A proxy model allowing the tracks in the playlist to be sorted using an arbitrary number of &amp;quot;layered&amp;quot; sort criteria. for instance, a sort setup could be &amp;quot;artist-album-tracknumber&amp;quot; This would sort all tracks by artist, then sort the tracks from each artist by album, and finally the tracks from each album based on track number. Once this model is working, a GUI is needed for making this functionality easilly avaialble to the user. Ideally this gui should tie in well with the playlist layout and search/filter stuff. Also, all track navigators (the classes that determines the order of playback, such as normal, random, random album and so on) need to be updated to use and work correctly with the new proxy model.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
C++, Qt, KDE-Libs, SVN/git.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
Nikolaj Hald Nielsen &amp;lt;nhnFreespirit@gmail.com&amp;gt; or contact the amarok mailing list or ask in our IRC channel #amarok&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Project: Playlist and Collection synchronization====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Mediadevices and services can add tracks and playlists to Amarok. Synchronization would automatically copy over tracks between the main Amarok Collection and devices or services or even between each other, either for a single playlist or the complete collection.&lt;br /&gt;
An algorithm needs to be implemented that does this automatically in a fast and efficient way with minimal intervention needed by the user.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
Playlists set up on both the local collection and a portable mediaplayer will get synchronized the moment the player is connected.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
C++, Qt, KDE-Libs, SVN/git.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
Bart Cerneels &amp;lt;bart.cerneels at kde dot org&amp;gt; or contact the amarok mailing list or ask in our IRC channel #amarok&lt;br /&gt;
&lt;br /&gt;
====Project: CD Ripping====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Many users (eg, my girlfriend) expect their music player to rip CDs. Amarok has never had this feture. With [http://solid.kde.org Solid] it should be fairly easy to create a non-intrusive UI.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
An easy to use but unintrusive interface in Amarok to rip audio CDs into a variety of audio formats. Perhaps work with the media device developers to design a UI that will react to events such as &amp;quot;user inserts audio CD&amp;quot; or &amp;quot;user connects their iPod.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
'''Material Prerequisite:'''&lt;br /&gt;
Some audio CDs. You remember those shiny things you used to get at record stores?&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
C++, Qt, kdelibs. Knowledge of how CD ripping and audio encoding works in Linux would be useful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
Potentially one of several. Contact the Amarok mailing list or ask in our IRC channel #amarok&lt;br /&gt;
&lt;br /&gt;
===Phonon===&lt;br /&gt;
Abstraction library for sound and video support. Used by KDE notifications, Amarok, Dragon Player and Qt Software.&lt;br /&gt;
&lt;br /&gt;
[http://phonon.kde.org Website] - [https://mail.kde.org/mailman/listinfo/phonon-backends Mailing list] - IRC channel: #phonon on Freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: Analyzer Support====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Applications such as Amarok and Dragon Player cannot have an analyzer or visualizations since they use Phonon which does not yet have the functionality to do it. The analyzer is the little bar graph thing which bounces around while music is playing. Users like it as its pretty and gives them a visual indication of their music playing. &lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
As this project is working on extending a library, it has three parts: the Phonon library itself, a Phonon backend, and an application. The Phonon library would need the new API calls. At least phonon-xine and preferably 1 or 2 other Phonon backends must then implement the new API. An application like Amarok or Dragon Player should be used to demonstrate the use of the new API.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++ and Qt. Experience with Xine or GStreamer is probably useful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Ian Monroe (contact on the [https://mail.kde.org/mailman/listinfo/amarok Amarok mailing list]) or possibly another Amarok or Phonon developer.&lt;br /&gt;
----&lt;br /&gt;
===Marble===&lt;br /&gt;
A desktop globe and map application. Also provides a map Qt Widget.&lt;br /&gt;
&lt;br /&gt;
[http://edu.kde.org/marble/ Website] - [https://mail.kde.org/mailman/listinfo/marble-devel Mailing list]&lt;br /&gt;
&lt;br /&gt;
====Project: Satellite navigation====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Satellite navigation devices have become widely used and the quality of openstreetmap data is becoming high, with some cities completely mapped already. Providing satellite navigation would be a useful desktop app for many as well as adding appeal for the use of KDE in embedded devices.&lt;br /&gt;
&lt;br /&gt;
It also opens the possibility to bringing many of the free software ideals to interaction with the real world such as collaborative/social POIs.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
The project would aim at getting a basic satellite navigation application running. The most basic features required would be getting the current location from a GPS device and providing route calculation to a destination.&lt;br /&gt;
&lt;br /&gt;
The AndNav project (http://andnav.org) has already achieved something similar for Android so it could be a point of reference for how to use OpenStreetMap data to achieve this. A possible approach would be to use [http://developers.cloudmade.com/projects/show/vector-tiles vector tiles from Cloudmade].&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++ and Qt. Experience with GPS devices under linux would be beneficial. Knowing java may also be of benefit in order to study the AndNav implementation.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' I (Alan Jones, skyphyr using gmail) am willing to mentor, but not having any GPS or Marble experience there is most likely somebody far more suited to undertake this role.&lt;br /&gt;
&lt;br /&gt;
Comment from a Marble Project guy: Alan, please get in touch with the Marble Project. Our mailing list is marble-devel@kde.org. We'd like to support this project if a student is willing to do it. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Project: Add Time support to Marble====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Wouldn't it be great to be able to see the world at different times in Marble? Like having a slider which would give you the ability to browse through the time? Marble's internal datastructure is modelled after KML. But support for time-related tags is missing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* Having a GUI on the map and as a QWidget based dialog which allows people to &amp;quot;slide&amp;quot; through time.&lt;br /&gt;
* Implementation of the KML [http://code.google.com/apis/kml/documentation/kmlreference.html#timeprimitive &amp;lt;TimePrimitive&amp;gt;] and [http://code.google.com/apis/kml/documentation/kmlreference.html#timespan &amp;lt;TimeSpan&amp;gt;] tag: Creating the KML-handler and needed data classes for the GeoData parser. &lt;br /&gt;
* Having a central &amp;quot;internal&amp;quot; clock which the current view would be based on.&lt;br /&gt;
* Porting existing features (like the starry sky and the sun shading) over to the new class design.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++ and Qt. Knowledge about KML is not necessary but would be appreciated.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Torsten Rahn / Patrick Spendrin.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===KDevelop===&lt;br /&gt;
KDE-based Integrated Development Environment, specializing in c++ support, but including a powerful generic framework (definition use chain) which makes it possible to relatively easily support multiple different languages.&lt;br /&gt;
&lt;br /&gt;
[http://www.kdevelop.org Website] - [http://www.kdevelop.org/index.html?filename=mailinglist.html Mailing list] - IRC channel: #kdevelop on Freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: C++ Refactoring Support====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
C++ support in KDevelop is already highly advanced, often equalling or surpassing what the user and compiler understand about the code.  A few refactoring tools have been developed already, but they have been constructed in a crude fashion, generating code via string concatenation.&lt;br /&gt;
&lt;br /&gt;
This project would aim to create a new system to implement refactoring tools, and to create, test and deploy several advanced refactoring tools for c++.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
A library would be created to enable refactoring based on the c++ AST (abstract syntax tree).  A reverse parser (AST to code) already exists, but classes would be created to allow programatic manipulation of an AST.  Optionally this library would also cover a generic framework based on the duchain which would be re-usable by other languages and make refactoring plugins easier to develop and partially shareable between languages.&lt;br /&gt;
&lt;br /&gt;
See the [http://api.kde.org/4.x-api/kdevplatform-apidocs/language/codegen/html/index.html Code Generation Design] documents for the initial plan for this project.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++ and Qt. Experience with parsers would be a bonus.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Hamish Rodda (Definition-Use chain code creator) rodda at kde/dot/org, possibly also David Nolden (DUChain guru)(to be confirmed)&lt;br /&gt;
----&lt;br /&gt;
=== KStars ===&lt;br /&gt;
KStars is a Desktop Planetarium for KDE. It displays a map of the sky and provides a lot of tools to learn astronomy, or to calculate and predict astronomical phenomena. See [[http://edu.kde.org/kstars|The KStars Homepage]] for more information.&lt;br /&gt;
&lt;br /&gt;
==== Project: Community Integration for KStars ====&lt;br /&gt;
'''Project Information:''' KStars is a desktop planetarium program for KDE.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Amateur Astronomy (which is one of the important use-cases of KStars) is typically done in communities. KStars permits users to save their own observing logs. It would be nicer if the user could share his observing logs with other users and see other observers' logs within KStars. It would also be nice if KStars had a map (using MarbleWidget) to display various Astronomy-related establishments (like amateur associations, observatories, research institutes). Another possible idea could be an observing report generator that would generate a report based on observing logs, and at the user's will, share it / post it on the internet.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Implement some features that will make it easier for users to collaborate, as suggested above.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Required: C++. Prior knowledge of KIO_HTTP will help.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Akarsh Simha &amp;lt;akarsh DOT simha AT kdemail DOT net&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Project: FITS Image Overlay on the sky map. ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' KStars is a desktop planetarium program for KDE.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' It would be great if a FITS image could be overlayed on the sky map so that the field drawn by KStars could be compared with the field in the FITS image. This would be of great benefit to observational astronomers, astrophotographers and comet / asteroid observers. An extension would be to download a DSS image using KStars' already existing tool and map it onto the sky map. The support of shapes like ds9 region, annotations on the sky, etc. could also be added.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Functionality to overlay a FITS image or a DSS image obtained through KStars on to the sky map.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Required: C++. Prior knowledge of the FITS format and cfitsio library will help.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Akarsh Simha &amp;lt;akarsh DOT simha AT kdemail DOT net&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Project: Tools for Eclipses ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' KStars is a desktop planetarium program for KDE. Currently, it can predict Solar Eclipses (using the Conjunctions tool), but cannot plot trajectory of shadows, or predict Lunar Eclipses.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' The project's primary goals are to include simulation and prediction (maybe using the existing Conjunction backend) of Lunar eclipses, and to create a tool to mark the trajectories of Solar and Lunar eclipse shadows on a map of the earth, including marking of totality, partial eclipse and annular eclipse. Something similar to this: [http://eclipse.gsfc.nasa.gov/SEmono/TSE2009/TSE2009iau/TSE2009-fig01.GIF]&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' A complete set of tools to deal with eclipses.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Akarsh Simha &amp;lt;akarsh DOT simha AT kdemail DOT net&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Project: KStars: Prettyfication ====&lt;br /&gt;
'''Project Information:''' KStars is a desktop planetarium program for KDE. The display is interactive, but it could be made more beautiful. &lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' We often get good suggestions for making KStars look better. Choose any of the following ideas: realistic rendering of asteroids and comets (including tails!); texture-mapping of the sky (this would mostly allow a photorealistic Milky Way); texture-mapping of planets; realistic sky-lighting effects (i.e., sky is blue in the daytime, gets gradually darker and colorful at sunset). One could also think of using Qt-GL rendering optionally.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Successful implementation of any of these ideas to make KStars more beautiful. &lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Required: C++.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Akarsh Simha &amp;lt;akarsh DOT simha AT kdemail DOT net&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Project: Printable star charts ====&lt;br /&gt;
'''Project Information:''' KStars is a desktop planetarium program for KDE. It already has a print feature, but the printed chart could be much better.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' A printed star chart should at least include a legend explaining the symbols, and provide some information on the location of the user, the time and date, etc. The user would ideally be able to annotate the chart in various ways. &lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Significant improvements to the printed star charts in KStars. &lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Basic programming skills, ability to quickly learn QPainter API. &lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Akarsh Simha &amp;lt;akarsh DOT simha AT kdemail DOT net&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Project: Many Moons ====&lt;br /&gt;
'''Project Information:''' KStars is a desktop planetarium program for KDE. It currently includes Earth's moon and 4 of Jupiter's moons. &lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Generalize the JupiterMoons class to encapsulate any planet's Moons. The project will require some research to identify a public source of orbital data for planetary moons, most likely from a NASA webpage. &lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Implement moons for at least Mars, Jupiter, Saturn, and Pluto with the new system. &lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Required: C++. The project doesn't require much contact with Qt/KDE APIs, and the existing JupiterMoons class can be used as a template. &lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Akarsh Simha &amp;lt;akarsh DOT simha AT kdemail DOT net&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Project: Support many catalogs ====&lt;br /&gt;
'''Project Information:''' KStars is a Desktop Planetarium for KDE. Currently KStars loads some star catalogs that are made available in a KStars native format.&lt;br /&gt;
&lt;br /&gt;
'''Brief Explanation:''' KStars currently loads Tycho-2 and parts of USNO NOMAD catalog of stars. These catalogs are required to be in KStars' native format which uses the Hirearcheal Triangular Mesh to index regions in the sky. Popular star catalogs like USNO A organize stars and divide the sky into regions differently. Most users of astronomy software typically have one of these popular catalogs downloaded, and it would be great if KStars could support them somehow. While ability to read the non-native catalogs straight off is desirable, tools to convert these catalogs into KStars' native format would also help.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:''' Implement support for at least the most popular catalogs like USNO-A2.0, Stellarium's Extra catalog, Cartes du Ciel's Tycho and Tycho-2 catalogs.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Required: C++. Ability to read documentation and quickly understand the existing code and ability to deal with binary files will help.&lt;br /&gt;
&lt;br /&gt;
=== Kalzium ===&lt;br /&gt;
&lt;br /&gt;
==== Project: Strigi integration ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:'''&lt;br /&gt;
The goal of this project is to integrate Strigi as backend behind the periodic table and the glossary (and possible other elements).&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
The idea here is to have a GUI element that shows Strigi search results based on the element selected from the periodic table, or the item from the glossary, found on the users desktop. For element, this would include the elements name, and possible even the element symbol, if integration with last years Strigi-Chemistry GSoC project is achieved. For glossary items, a simple text search would suffice.&lt;br /&gt;
&lt;br /&gt;
Another idea is to make it possible to querry like this: &amp;quot;Give me all molecules with a molecularweigth of 123u and at least one Carbon atom&amp;quot;. For this we can use the [http://chem-file.sourceforge.net/ Chemical File Database] (or of course every other database, even those for [http://www.rcsb.org/pdb/home/home.do proteins].&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* provide GUI for Strigi search results for an element selected in the periodic table&lt;br /&gt;
* provide GUI for Strigi search results for an glossary item&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Required: C++, DBUS. Could be useful: Qt.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Undecided.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Project: Kalzium beautification ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:'''&lt;br /&gt;
Many parts of [http://edu.kde.org/kalzium Kalzium] could need a fresh up of the interface. For example, the main table should be written using Qt Model/View technique and for example use SVGs as a background. A first (uncomplete but working) code is already existing.&lt;br /&gt;
&lt;br /&gt;
At the same time, many dialogs are not as beautiful as they could be. This project could also include the creation of a &amp;quot;simplified Kalzium&amp;quot; mode in which some parts of the feature set are hidden; this would be good for schools.&lt;br /&gt;
&lt;br /&gt;
A third idea is to make more use of Plasma, for example improve the already written Plasmoids and/or extent Kalzium so that a Plasmoid could open a information dialog using Kalzium.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
Depending on the chosen project for example a cleaned up codebase with an improved interface.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Required: C++, Qt, possible Plasma, Debug. &lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Carsten Niehaus&lt;br /&gt;
&lt;br /&gt;
==== Project: Molecular calculator ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:'''&lt;br /&gt;
Kalzium already has a basic mass calculator for molecules (in the sidebar). The goal of this project would be to add full-blown widget that allows users to calculate masses of molecules, do calculations with them, calculate concentrations (mol/l, g/l..) of solutions...&lt;br /&gt;
ChemicalDataObject already has the needed data to achieve this, there's a parser for molecule formulas, so the project's goal is to make a nice GUI and of course write code that uses that data in the good way.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
An easy-to-use (multi-tabbed?) window, where users can enter what they know (molecule name and number of grams...), pick what they want to know (number of mols).&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Required: C++, Qt, basic knowledge of chemistry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Undecided.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== KOffice ===&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
'''Project:''' support for versioned OpenDocument files.&lt;br /&gt;
&lt;br /&gt;
'''Explanation:''' The OpenDocument specification doesn't include support for multiple versions of the same document in a single file. But that feature is supported by OpenOffice.org. The objective for this Summer of Code is to add support for that versioning system in KOffice. Since KOffice shares the OpenDocument loading/saving code, it should be possible to add this support in every KOffice application in one Summer of Code.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Being able to load a specific version of a file, and create/manage versions&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++, excellent english reading skills.&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
'''Project:''' Add support for e-book formats to KOffice.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Add a new export for one or more formats that are specifically tuned for e-book devices.&lt;br /&gt;
&lt;br /&gt;
With the increased popularity of ebook readers there is going to be a need for tools to create ebook content. While most e-book devices can display PDF there are in fact a lot more formats in use. One such format is .epub, which allows reflowable content (unlike PDF). The format itself is based on XML and uses style sheets (CSS) to format content. There are few free software tools that can generate and manipulate this format and those that exist are restricted to command line.&lt;br /&gt;
&lt;br /&gt;
Since most people creating content will most likely want to use an office suite or word processor to make documents it makes sense to add an export option for this format to KOffice.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge requisites:'''&lt;br /&gt;
* C++&lt;br /&gt;
* XML&lt;br /&gt;
* CSS&lt;br /&gt;
&lt;br /&gt;
==== Flake ====&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
'''Project:''' support missing ODF drawing shape feature&lt;br /&gt;
&lt;br /&gt;
'''Explanation:''' KOffice can already load and save most of the shapes that ODF defines. Still a few features are missing especially text on shapes, but also caption, title, description and the measure shape.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The project should implement the mentioned features and it should be possible to load, save and easily edit them&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++&lt;br /&gt;
&lt;br /&gt;
==== KWord ====&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
==== KPresenter ====&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
'''Project:''' Powerpoint import.&lt;br /&gt;
&lt;br /&gt;
'''Explanation:''' From some years ago another gSoc project implemented the basis for powerpoint import, but it was never finished. So there is a good basis to start from. From a quick look it seems like styles support is the thing missing most to complete the work, however a thorough analysis of what is there and what is not needs to be done. And then the actual work needs to be done too, obviously&lt;br /&gt;
&lt;br /&gt;
==== Krita ====&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
'''Project:''' New tile engine for Krita&lt;br /&gt;
&lt;br /&gt;
'''Project information:''' Krita's current tile engine suffers from some limitations, like extensive locking. A new tile engine should offer some compelling features, like mipmapping, tile aging, in-memory compression, lock-free access of tiles, as efficient as possible undo information, pluggable backends (like png or tiff). See for a short summary http://wiki.koffice.org/index.php?title=Krita/Akademy_2007_Meeting#tile_backend. &lt;br /&gt;
'''Expected Results:''' an production-ready implementation having these features.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' This is a difficult, ambitious project. Applicants should have a good knowledge of C++, data structures and be aware of existing literature on this subject and have a knowledge of graphics applications.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Project:''' Sketch-pad interface for Krita&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' Krita is a large and complex application built around a sophisticated painting engine. The goal of this project is to create a new interface around the Krita engine, specialized for quick sketching.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' This project should implement a new interface around Krita, presenting the user a single-layer plus tracing paper interface with a single freehand sketching tool. Easy to use and graphic color and paint operation (brush, pencil, eraser etc.) interface elements must be designed and implemented.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
'''Project:''' Shader filters and generators for Krita&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' Some initial work has already been done to make it possible to write filters in the OpenGL shading language. This project should take that initial code as a basis and implement a fully functioning plugin for Krita that allows filters and shaders to be executed on images in any colorspace.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The plugin should have a finished user interface and make it possible to experiment with shader filters in an interactive way. Example filters must be implemented.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++, OpenGL.&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
'''Project:''' Animation support&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' There is no support at all in Krita for animated images such as GIF or MNG or for working with images in an animation context, such as textures or backgrounds in applications like Blender. The applicant should first investigate user needs and use cases and then implement support in the user interface and in the import/export filters.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' A user-friendly way of working with animated images (i.e., not by making each frame a layer), but e.g. a docker that shows the the animation running in thumbnail format. Import/export filters for relevant file formats.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
'''Project:''' PSD and Gimp plugins&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' Krita is powerful enough to handle nearly all that the Gimp and Photoshop are capable of saving. This project is about creating dedicated file import/export filters that can handle as much of these file formats as possible, possibly through the use of existing libraries.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' 4 plugins: psd import/export and xcf import/export. These plugins should be able to handle complex files in all supported colorspaces. Ideally the project would also deliver a library to convert PSD/XF to/from Open Raster files.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
'''Project:''' Workspaces&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' A workspace is a loadable package of settings that finetune Krita for a particular purpose. A workspace could contain additional plugins (like an image browser plugin for batch operations) and a subset of resources. Example workspaces could be batch-editing of images, editing of animation sequences or painting or sketching.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' the user interface and framework to make packages of plugins and resources that users can switch between. Also extra plugins to extend krita in areas like batch processing that do not exist yet.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++, artistic workflow&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
'''Project:''' Kipi and digikam plugins compatibility&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' Kipi and digikam provide lots of interesting plugins for working with 8 and 16 bit RGBA images. It would be great to be able to re-use those plugins from within Krita.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Two plugins that load kipi and digikam filters into two new menus in the filter menu. Code to convert Krita layers to the digikam image representation and back, taking care of icc profiles and other niceties.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++, artistic workflow&lt;br /&gt;
&lt;br /&gt;
==== Kivio ====&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
'''Project:''' support for basic flowchart editing&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' In KOffice 1.6 Kivio provided tools and stencils for editing flowcharts. Flake already provides the the building blocks: shapes, glue points and a connector shape. Goal of the project is to recreate old functionality based on flake.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Import of the Kivio stencil format. A docker that allows to handle collections of stencils. Implementation of a connector tool, that can easily connect different shapes.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++&lt;br /&gt;
&lt;br /&gt;
===KDE PIM===&lt;br /&gt;
KDE PIM is the interest group working on applications related to personal information management, e.g. contacts, calendar, mails, etc.&lt;br /&gt;
&lt;br /&gt;
One of the current challenges is utilizing the new cross-desktop PIM infrastructure called [http://www.akonadi-project.org/ Akonadi].&lt;br /&gt;
&lt;br /&gt;
There are interesting projects on all levels of the software stack: libraries, application porting, new applications, access to online resources, etc.&lt;br /&gt;
&lt;br /&gt;
[http://pim.kde.org/ Website] - [http://techbase.kde.org/Projects/PIM Project Wiki] -  [https://mail.kde.org/mailman/listinfo/kde-pim Mailing list] - IRC channel: #kontact and #akonadi on Freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: Akonadi Janitor Agent====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
An [[Development/Architecture/KDE4/Akonadi#Akonadi_Agents|Akonadi Agent]] is a service process for performing tasks on data provided through the Akonadi server.&lt;br /&gt;
&lt;br /&gt;
The task of a Janitor agent would be to keep the user's PIM data neatly organized, for example deleting news feed items which are above a certain age and not flagged, moving last week's mail to an archive, etc.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* An Akonadi Agent capable of managing actions on Akonadi collections triggered by various criteria&lt;br /&gt;
* At least fully working implementation of actions based on &amp;quot;Expire&amp;quot; criterias for mail, e.g. delete mail above certain age, move/copy to different collection, etc&lt;br /&gt;
* GUI for configuring actions and their trigger criteria.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++ and Qt. Ideally would already have gone through the [[Development/Tutorials/Akonadi/Resources|Akonadi Resource Tutorial]] since Resources are a specialized form of agents and thus share some of the API and characteristics.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Kevin Krammer (kevin dot krammer at gmx dot at)&lt;br /&gt;
----&lt;br /&gt;
====Project: Alternative Akonadi Client Library====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Akonadi has a server/client like architecture where clients such as applications (but also resource) connect to a service and communicate with it through a suitable protocol.&lt;br /&gt;
&lt;br /&gt;
Currently this is implemented for KDE in library called libakonadi-kde, however it is desirable to have additional implementations to be suitable for other library stacks, e.g. GLib/GObject based ones.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* A non-KDE based, preferably GLib/GObject based, Akonadi client library which&lt;br /&gt;
** can connect to a running Akonadi server&lt;br /&gt;
** fetch Akonadi collections&lt;br /&gt;
** fetch Akonadi items&lt;br /&gt;
** receive Akonadi change notifications (D-Bus based)&lt;br /&gt;
&lt;br /&gt;
* A set of demo programs using the library which can&lt;br /&gt;
** recursively list (id and content MIME types) collections&lt;br /&gt;
** list (id and MIME type)oif items in a collection&lt;br /&gt;
** get the raw payload of an item&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' Depends on the chosen language and toolstack, e.g. C/Vala and GLib/GObject knowledge for a GLib/GObject based implementation.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
----&lt;br /&gt;
====Project: Akonadi Consistency Checker====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Akonadi provides a structure of collections and items, similar to folders and files of a filesystem. Similarly the internal structures have to follow certain constraints which must not be violated. Nevertheless, this can happen as result of bugs, hardware failures, power loss and a million other reasons.&lt;br /&gt;
&lt;br /&gt;
Filesystem checks exist to detect and possibly fix such situations. Such functionality would also be desirable for Akonadi.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* A consistency checker (built into the Akonadi server or stand-alone) that performs an extensible set of checks on the internal data structures of the Akonadi server, such as:&lt;br /&gt;
** items belong to existing collections&lt;br /&gt;
** collections are child collections of existing collections&lt;br /&gt;
** the collection tree is non-cyclic&lt;br /&gt;
** every collections is owned by an existing resource&lt;br /&gt;
** collection sub-trees are owned by the same resource&lt;br /&gt;
** every item payload part belongs to an existing item&lt;br /&gt;
** content type constraints of collections are not violated&lt;br /&gt;
** ...&lt;br /&gt;
* each check should be accompanied with recovery code, such as moving orphaned items into a lost+found folder&lt;br /&gt;
* integration into Akonadiconsole&lt;br /&gt;
* integration into unit-tests&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++ and Qt mandatory, SQL/database knowledge would be useful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Volker Krause &amp;lt;vkrause@kde.org&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
====Project: Akonadi Resource for KMail local folders====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
KMail stores its mail in a folder hierachy where each folder can contain mails '''and''' further sub folders.&lt;br /&gt;
&lt;br /&gt;
While mails are stored either as mbox or maildir, additional index files are used to speed up message listing and to store message status and flags.&lt;br /&gt;
&lt;br /&gt;
The already existing Akonadi MailDir resource can handle the maildir aspects but cannot handle either mbox based folders nor the additional information stored in the index files.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* a set of classes, probably as a library, capable of&lt;br /&gt;
** recursively listing the KMail folder tree given a base directory&lt;br /&gt;
** reading mails from the mbox and maildir folders in the KMail folder tree&lt;br /&gt;
** reading KMail index files&lt;br /&gt;
* an Akonadi resource using these classes to provide read-only access to all mails currently handled by KMail. The resource should also be able to transfer the flags stored in KMail's index file to Akonadi.&lt;br /&gt;
* Writing a migrator, similar to the current KResource-&amp;gt;Akonadi migrator, that automatically reads the KMail config file and creates a Akonadi resource out of it. Optionally, depending on the overall progress, the migrator would also convert some of KMail's folder settings, like the folder icon or the expiry settings, to Akonadi collection attributes.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++ and Qt mandatory, code analysis skills would be helpful regarding the handling of index files, refactoring skills if KMail's classes are to be extracted from KMail's code base (not required).&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Thomas McGuire &amp;lt;mcguire at kde dot org&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Project: Improvments in KMail's HTML support====&lt;br /&gt;
'''Brief explanation:''' Improve the HTML support in KMail, especially making it possible to preserve the HTML format when replying or inline forwarding.&lt;br /&gt;
&lt;br /&gt;
While KMail's HTML support has been constantly improving, it still has some important bits missing and some minor bugs. The goal of this project would be to implement the missing features and do general bugfixing in the HTML support.&lt;br /&gt;
&lt;br /&gt;
One of the biggest missing features, with over 1500 votes on [https://bugs.kde.org/show_bug.cgi?id=86423 bugzilla], is the ability to preserve the HTML format when replying or forwarding, which is often an essential requirement in some enterprises.&lt;br /&gt;
&lt;br /&gt;
[http://websvn.kde.org/?view=rev&amp;amp;revision=911149 Recently], support for inline HTML images was added to KMail. This support needs a few improvements, like being able to put images in the signature or resizing the images.&lt;br /&gt;
&lt;br /&gt;
Currently, KMail relies on [http://doc.trolltech.com/4.4/qtextedit.html#html-prop QTextEdit::toHtml()] to generate the HTML source. This however is very weak, as QTextEdit has some bugs and generally produces HTML that is only equaled by MS Word in its ugliness. Stephen Kelly has started some work to make this output nicer, and to produce other forms of markup, like text/enriched. This is achived by creating so-called [http://websvn.kde.org:80/trunk/KDE/kdepimlibs/kpimidentities/richtextbuilders/ rich-text builders]. One goal would be to finish this work and integrate it into KMail.&lt;br /&gt;
&lt;br /&gt;
Comment by Thomas; QTextEdit html generation is not optimal due to html simply not supporting all QTextEdit features. Qt45 choose to export to ODF instead. Maybe KMail should try to leverage this instead?&lt;br /&gt;
&lt;br /&gt;
Other nice points would be to support the text/enriched format for reading or composing mails, and to support the text/flowed format when composing. Although this is not strictly HTML related, it would improve the experience for many people.&lt;br /&gt;
&lt;br /&gt;
Of course, your own ideas are very welcome as well&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* Option to preserve the HTML format when replying or forwarding&lt;br /&gt;
* Support inline images also in signatures&lt;br /&gt;
* Improve inline image support by allowing to scale the images&lt;br /&gt;
* Nicer HTML generation by completing and integrating the HTML builder from Stephen Kelly&lt;br /&gt;
* Various bugfixes in the HTML support&lt;br /&gt;
* Optionally, also support text/enriched as alternative to HTML (both reading and  composing). See [http://www.faqs.org/rfcs/rfc1896.html RFC 1896]. Composing support can also be based on Stephen's builders.&lt;br /&gt;
* Optionally, support text/flowed format for non-HTML mail ([http://www.faqs.org/rfcs/rfc3676.html RFC 3676])&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' Moderate C++ and basic Qt knowledge mandatory&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Thomas McGuire &amp;lt;mcguire at kde dot org&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Project: import/export for filtering rules in Sieve format in KMail====&lt;br /&gt;
'''Brief explanation''' Add functionality to import/export of mail filtering rules in Sieve format in KMail.&lt;br /&gt;
&lt;br /&gt;
Sieve is a language for declaring mail filter rules on a mail server. It was developed as part of the Cyrus IMAP server, but was quickly spin off and turned into a standard (http://tools.ietf.org/html/rfc5228). There are quite a few servers that have support for Sieve, in various degrees of completeness. It is quickly gaining support. Clients that support it are KMail and Thunderbird.&lt;br /&gt;
&lt;br /&gt;
KMail already has support for talking to Sieve enabled servers and also has support for client side filters. These two rule sets seem to be separate. It would be nice if you could dump the rules you have in one client and able to either install them on a server, or load them into another client, if you want to access your mail from different machines, but don't want to reconfigure your mail clients over and over again, or to quickly reconfigure clients if you don't have a Sieve enabled server.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
Successful import and export of a (subset) of mail filtering rules between various KMail instances.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge requisites'''&lt;br /&gt;
* C++&lt;br /&gt;
* knowledge of how mail works&lt;br /&gt;
&lt;br /&gt;
===KDE on Windows===&lt;br /&gt;
====Solid API backend====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
The porting efforts to make KDE available across platforms do need some backends for system dependent tasks. One of the KDE libraries that bundles this is Solid.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
You implement a backend for the [http://solid.kde.org Solid API] using WINAPI.&lt;br /&gt;
It has to work with both MinGW and MSVC compilers. Not every function is required, but the basic functionality (network access, removable drives/harddisks and power) should be implemented.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' Windows API and C++/Qt. You should be able to set up the [http://techbase.kde.org/Getting_Started/Build/KDE4/Windows development environment] yourself and be familiar with it.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Carlo Segato (brandon dot ml at gmail dot com) or Patrick Spendrin (ps_ml at gmx dot de)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===KDE Games===&lt;br /&gt;
====Project: Kolf 2 landscape object====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Kolf 2 is the second incarnation of KDE's minigolf game. We are currently rewriting it from scratch to take advantage of the powerful technologies provided by Qt 4 and KDE 4.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
The task in this project is to create an object (or multiple objects) that provide(s) landscape textures, slopes, puddles and sand bunkers.&lt;br /&gt;
&lt;br /&gt;
If you finish this task before the end of the summer, you can fill the remaining time by porting as much game objects from Kolf 1 to Kolf 2 as possible (e.g. windmills, floating blocks, signs or bumpers).&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++/Qt. Experiences in graphics programming with Qt will definitely help, as you are expected to implement 2D rendering for the landscape object.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Stefan Majewsky (majewsky at gmx dot net) &amp;amp;ndash; Please contact me to let me help you to improve your proposal.&lt;br /&gt;
&lt;br /&gt;
====Project: Kolf 2 editor interface====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
The minigolf game Kolf provided an editor interface from the beginning, to allow the users to create custom courses. For Kolf 2, we are rewriting the game engine and can therefore not use the old editor code.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
Your task would be to create an editor interface (may be embedded in the game, or a standalone application). A few basic parts are available, and the Kolf 2 engine supports generic methods to provide data to editor interfaces, and display editor overlays on the game view.&lt;br /&gt;
&lt;br /&gt;
If you finish the editor interface before the end of the summer, you can fill the remaining time by porting as much game objects from Kolf 1 to Kolf 2 as possible (e.g. windmills, floating blocks, signs or bumpers), or using your editor to put together some cool courses.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++/Qt. Experiences in model/view programming with Qt will be of good use.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Stefan Majewsky (majewsky at gmx dot net) &amp;amp;ndash; Please contact me to let me help you to improve your proposal.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===kdelibs===&lt;br /&gt;
==== Project: DOM3 XPath Level 1 and/or DOM selectors API support in KHTML ====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Because JavaScript frameworks have popularized access to parts of documents using various query languages, direct browser support for such queries &lt;br /&gt;
has become fairly common. This project is about adding support for one (or two) of such languages to KHTML. Basic implementation of each is expected to be simple, but there may be some interesting optimization opportunities to explore. &lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
Implementations of XPath 1 or DOM selectors API at DOM level with appropriate JavaScript bindings that are standard-compliant, written in simple &amp;amp; maintainable fashion, and perform reasonably well.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++, and some comfort with working with large codebases. &lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Maks Orlovich (maksim at kde dot org)&lt;br /&gt;
&lt;br /&gt;
===Solid===&lt;br /&gt;
====Project: UPnP support through Jolie====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Adding UPnP support to Solid would mean offering transparent UPnP support to every KDE application using the Solid API, keeping them clean from every UPnP implementation aspect.&lt;br /&gt;
At the present, the [http://www.jolie-lang.org/ Jolie language] is being integrated with Plasma by means of the [http://websvn.kde.org/branches/work/~ervin/sodep/ QtSodep] library, soon to offer higher levels of abstraction.&lt;br /&gt;
&lt;br /&gt;
The aim of this project would be to implement a UPnP protocol for Jolie, so that Solid could re-use the integration being made with QtSodep and gain UPnP support without having to worry about implementation details. Having a UPnP protocol implementation in Jolie would have other considerable consequences, like the possibility to act easily as a UPnP server or to compose and export existing UPnP services.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
*The creation of a &amp;quot;upnp&amp;quot; protocol in Jolie, supporting at least the Internet Gateway Device (IGD) and MediaServer profiles.&lt;br /&gt;
*The creation of a UPnP Jolie service for UPnP service discovery and monitoring.&lt;br /&gt;
*Extending libsolid to expose UPnP devices found on the network.&lt;br /&gt;
&lt;br /&gt;
'''Material Prerequisite:''' Having UPnP devices or software applications to test with. Most home routers support IGD, and there exists free software supporting the MediaServer profile ([http://mediatomb.cc/ mediatomb]).&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' Understanding of the UPnP specifications, Java (for the development of the Jolie UPnP protocol) and basic knowledge of the Jolie language.&lt;br /&gt;
&lt;br /&gt;
'''Mentors:''' ervin (ervin at kde dot org) fmontesi (famontesi at gmail dot com)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===KWin===&lt;br /&gt;
&lt;br /&gt;
KDE's window manager&lt;br /&gt;
&lt;br /&gt;
[http://techbase.kde.org/Projects/KWin Techbase page] - [https://mail.kde.org/mailman/listinfo/kwin Mailinglist] - IRC channel: #kwin on Freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: Window tabbing====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Window tabbing is a feature that allows you to group multiple application windows together to cover the same space. It is identical to what is already available in any modern web browser except it applies the the window as a whole. Window managers that have this feature available include Fluxbox and Ion. This feature was [http://bugs.kde.org/show_bug.cgi?id=42023 originally requested] in 2002.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++ and Qt. Understanding of the X window system and Xlib is a benefit but not required.&lt;br /&gt;
&lt;br /&gt;
'''Mentors:''' Lucas Murray (lmurray undefinedfire com)&lt;br /&gt;
&lt;br /&gt;
====Project: Window tiling====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Window tiling is a technique of displaying application windows side-by-side without overlap. The position, size and layout of the windows can either be specified by the user or determined automatically to best fit the screen. Examples of existing tiling window managers include Awesome, XMonad, Ion and Ratpoison. One of the main advantages of tiling is that is makes application windows easy to navigate solely by the keyboard. This feature was [http://bugs.kde.org/show_bug.cgi?id=59338 originally requested] in 2003.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* Users should be able tile existing floating windows on-the-fly with simple keyboard shortcuts or mouse gestures.&lt;br /&gt;
* It should also be possible to run the entire desktop environment entirely in tiled mode (Enabled by configuration settings). In this mode new window would be added to the tiling grid by default yet can be removed by the user if required.&lt;br /&gt;
* The final tiling system should not interfere in any way with the existing floating window management.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++ and Qt. Understanding of the X window system and Xlib is a benefit but not required.&lt;br /&gt;
&lt;br /&gt;
'''Mentors:''' Lucas Murray (lmurray undefinedfire com)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Project: Window snapping====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Easy drag and drop for whole Windows:&lt;br /&gt;
http://lifehacker.com/5085657/aerosnap-brings-the-windows-7-snap-feature-to-xp-vista&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== digiKam ===&lt;br /&gt;
&lt;br /&gt;
Photo Management program&lt;br /&gt;
&lt;br /&gt;
[http://www.digikam.org digiKam project web site] - [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist] - IRC channel: #digikam on Freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: High Dynamic Range (HDR) plugin====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' digiKam is an advanced digital photo management application for KDE, which makes importing and organizing digital photos a &amp;quot;snap&amp;quot;. The photos are organized in albums which can be sorted chronologically, by folder layout or by custom collections. digiKam has an Image Editor which has its own plugin subsystem with some common tools e.g. red eye correction or Gamma correction. Additional plugins are provided with the main application to process advanced corrections on image like color management, noise reduction, or special effects. digiKam image editor support 16 bits color depth image internally. The goal of this project is to create a new plugin dedicated to create [http://en.wikipedia.org/wiki/High_dynamic_range_imaging HDR image].&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' This project should implement an HDR tool will mix two or more (nearly) identical images having different exposure into a new image representing a wider dynamic range, which is closer to human perception of a photographic scene. [http://en.wikipedia.org/wiki/Tone_mapping Tone-mapping method] must be used to create HDR images. An open-source implementation is already available at [http://zynaddsubfx.sourceforge.net/other/tonemapping this url] and can be re-used as well. There is an old [https://bugs.kde.org/show_bug.cgi?id=144593 feature request].&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++/Qt.&lt;br /&gt;
&lt;br /&gt;
'''Mentors:''' Gilles Caulier (caulier dot gilles at gmail dot com)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===KDE Telepathy Integration===&lt;br /&gt;
The [http://telepathy.freedesktop.org Telepathy Framework] is a desktop independent framework for real-time communication, such as VoIP and Instant Messaging. The projects below are some ideas for integrating telepathy into KDE.&lt;br /&gt;
&lt;br /&gt;
If you want to know any more about Telepathy and KDE, drop by the irc channel #decibel and talk to '''grundleborg''', or use the mailing list decibel AT kde DOT org.&lt;br /&gt;
&lt;br /&gt;
====Project: Message Logging====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' The Telepathy Framework allows for components which can watch channels whilst a user is interacting with them through another application. A program could be created to log the content of text instant messages into an Akonadi collection.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' This project should result in a telepathy watcher which is capable of logging the contents of text chats into an Akonadi collection. It should be possible to go off-the-record in a particular conversation from telepathy user interfaces and the logger should not save any messages in this situation. This project might also include modifying the Kopete logging plugin to use the same akonadi collection for logs, and making a migration tool from Kopete's old logging format to the new Akonadi collection.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++/Qt, some basic knowledge of the Telepathy Framework is an advantage, but not necessary if you have an interest in real-time communcation and are prepared to learn fast.&lt;br /&gt;
&lt;br /&gt;
'''Mentors:''' George Goldberg (grundleborg at gmail dot com) IRC: grundleborg&lt;br /&gt;
&lt;br /&gt;
====Project: Telepathy Integration to any KDE application====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' Provide some collaborative feature or instant messaging integration for your favourite KDE application.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' This project should result in a collaborative feature  or instant messaging integration being added to the chosen KDE application. It should be complete enough to provide at least basic functionality to end users, with the possibility of further improvement after the summer of code period ends.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++/Qt, some basic knowledge of the Telepathy Framework is an advantage, but not necessary if you have an interest in real-time communcation and are prepared to learn fast.&lt;br /&gt;
&lt;br /&gt;
'''Mentors:''' George Goldberg (grundleborg at gmail dot com) IRC: grundleborg. You should also discuss your idea with the development team of the application in which you would like to provide a Telepathy feature.&lt;br /&gt;
&lt;br /&gt;
====Project: Telepathy Plasma Integration====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' Provide integration of presence and buddy information into plasma.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' You should provide multiple points of integration between presence and contact information and plasma. Plasmoids allowing the display and manipulation of your own presence information should be made available, building on the plasma applets and datengines already in existance for presence information. Plasma activities could also be made aware of presence, and the contacts plasmoid could be made aware of your buddies from Telepathy instant messaging accounts.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++/Qt&lt;br /&gt;
&lt;br /&gt;
'''Mentors:''' George Goldberg (grundleborg at gmail dot com) IRC: grundleborg. You should also discuss your ideas with the plasma development team before making a proposal.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Nepomuk===&lt;br /&gt;
[http://nepomuk.kde.org Website] - [http://lists.semanticdesktop.org/mailman/listinfo/nepomuk-kde Mailing list] - IRC channel: #nepomuk-kde on Freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: A Context Sidebar====&lt;br /&gt;
'''Brief Explanation''':&lt;br /&gt;
The ideas is to have a sidebar on the desktop (see Plasma project above for example) which shows information about the resource in the current context. Examples include files or important emails from a specific person that sent the email I am currently reading. Or related information on a webpage I am currently browsing. Or the author information on a pdf I am reading. And so on.&lt;br /&gt;
The sidebar should pick up DBus signals that can be sent out by any application to change the current resource (this is just an idea).&lt;br /&gt;
&lt;br /&gt;
'''Expected Results''':&lt;br /&gt;
Creation of the sidebar and integration into at least two applications (like KMail or Okular) which will then update the resource in focus. It might also be good if the sidebar could monitor if the application that set the resource looses focus or is closed.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++/Qt/KDE/Plasma&lt;br /&gt;
&lt;br /&gt;
'''Mentor''': Sebastian Trueg (trueg at kde dot org)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Project: Saving and Loading of Documents via Meta-data====&lt;br /&gt;
'''Brief Explanation''':&lt;br /&gt;
Today we still save and load our documents using a file browser. We navigate through folder structures that we created and try to find the best spot for the document. Another way would be to store a document by specifying meta-data about it. We could for example set the type (not the mimetype but the actual type like it is a letter or an invoice or a holiday picture and so on) or set properties on the document like related projects, related persons, tags, and so on. The system would then store the document someplace (we don't care about that). Loading the document would work the same way: filter documents according to type, date, persons or any other property we might have chosen to describe it.&lt;br /&gt;
In KDE applications today can predefine the file extension. How about letting the application predefine a set of meta-data properties.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results''':&lt;br /&gt;
A prototype for saving and loading documents via meta-data and at least one use case which is demoable.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++/Qt/KDE, knowledge on ontologies and RDF are very helpful&lt;br /&gt;
&lt;br /&gt;
'''Hints''':&lt;br /&gt;
One might think of a plugin system here that allows to suggest annotations to the user. Compare the annotation system already in [http://websvn.kde.org/trunk/playground/base/nepomuk-kde/annotationplugins/ playground] based on [http://websvn.kde.org/trunk/playground/base/nepomuk-kde/annotationplugins/annotation.h?revision=915514&amp;amp;view=markup Nepomuk::Annotation].&lt;br /&gt;
&lt;br /&gt;
'''Mentor''': Sebastian Trueg (trueg at kde dot org)&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Summer_of_Code/2009/Ideas</id>
		<title>Projects/Summer of Code/2009/Ideas</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Summer_of_Code/2009/Ideas"/>
				<updated>2009-02-20T16:52:17Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: Remove silly suggestions that will not be accepted into mainline anyway.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Guidelines ==&lt;br /&gt;
===Information for Students===&lt;br /&gt;
&lt;br /&gt;
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at. &lt;br /&gt;
&lt;br /&gt;
Being accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. Simply copying and pasting an idea here will not work. On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out.&lt;br /&gt;
&lt;br /&gt;
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!&lt;br /&gt;
&lt;br /&gt;
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.&lt;br /&gt;
&lt;br /&gt;
===Adding a Proposal===&lt;br /&gt;
When adding an idea to this section, please try to include the following data:&lt;br /&gt;
:* if the application is not widely known, a description of what it does and where its code lives&lt;br /&gt;
:* a brief explanation&lt;br /&gt;
:* the expected results&lt;br /&gt;
:* pre-requisites for working on your project&lt;br /&gt;
:* if applicable, links to more information or discussions&lt;br /&gt;
:* mailing list or IRC channel for your application/library/module&lt;br /&gt;
:* your name and email address for contact (if you're willing to be a mentor)&lt;br /&gt;
&lt;br /&gt;
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.&lt;br /&gt;
==Ideas==&lt;br /&gt;
===Plasma===&lt;br /&gt;
[http://plasma.kde.org Website] - [https://mail.kde.org/mailman/listinfo/panel-dev Mailing list] - IRC channel: #plasma on Freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: Generic SOAP Plasma::Service====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
The Service should be able to parse WSDL files and let Plasmoids connect to the described Webservices.&lt;br /&gt;
&lt;br /&gt;
====Project: Simple Media Center components====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Plasma could offer a Media center mode, where features a really simple ui to browse media files and plasmoids that shows the actual media. All should be operable with mouse, keyboard or a simple remote control. the work could consist in building the whole thing or just writing a plasmoid able to browse media files, that is the most important missing part.&lt;br /&gt;
Mockups for it by Nuno Pinheiro can be seen [http://img213.imageshack.us/img213/3200/image3231picturefz5.png here] and [http://img26.imageshack.us/img26/3407/image323musicoloectionck2.png here]&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
An applet to browse and thumbnail media files, like the first mockup and control the actual media viewing applets, like the media player applet or the picture frame applet. At this stage the functionality will be really minimum&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:'''&lt;br /&gt;
Knowledge of C++ and some familiarity with Qt especially QGraphicsView related classes.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
Marco Martin (notmart a gmail dot org), or other Plasma developers. Contact at plasma-devel@kde.org or #plasma on freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: Plasmate====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
PlasMate is an application that gives people a way to start creating scripted plasmoids without worrying about anything except making their bits. It hides the whole metadata.desktop thing, the package layout details, making a Plasmoid package (aka &amp;quot;zipping up the directory&amp;quot;), uploading content and version control system.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
Working application that one can do the tasks described above, making it easy to create and distribute a scripted plasmoid.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:'''&lt;br /&gt;
Knowledge of C++ and familiarity with Qt (QWidgets and QGraphicsView related classes).&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
Artur Duque de Souza (morpheuz a gmail dot org), or other Plasma developers. Contact at plasma-devel@kde.org or #plasma on freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: Qt Kinetic + Plasma====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
A layer over Qt Kinetic to provide a standardized set of &amp;quot;out of the box&amp;quot; &lt;br /&gt;
animations and bring them into libplasma. The work will be done with the Plasma developers to make this API as efficient as possible. The work will be based on Kinetic, the next framework for animations in Qt.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
We can kill Plasma::Animator class. The goal is to bring fancy effects/animations in Plasma to have one of the best desktop ever.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:'''&lt;br /&gt;
Knowledge of C++, familiarity with QGraphicsView related classes and some familiarity with animations bits.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
Alexis Ménard (alexis.menard at nokia dot com) or Artur Duque de Souza (morpheuz a gmail dot org). Contact at plasma-devel@kde.org or #plasma on freenode.&lt;br /&gt;
&lt;br /&gt;
===Amarok===&lt;br /&gt;
A KDE music manager and player.&lt;br /&gt;
&lt;br /&gt;
[http://amarok.kde.org Website] - [https://mail.kde.org/mailman/listinfo/amarok Mailing list] - IRC channel: #amarok on Freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: DLNA/UPnP Support====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Using the UPnP protocol users can, for example, share music from their Vista computer to a PS3. Amarok lacks any sort of UPnP support. Being able to act as a client or possibly a UPnP media server would be useful. In addition to that controlling a UPnP Media Renderer from within Amarok is possible with framework support.&lt;br /&gt;
&lt;br /&gt;
The [http://coherence.beebits.net/ Coherence server] would likely be used since it is also intended to be used by a KIO slave.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
*Using the Amarok Collection framework, create a plugin which allows Amarok to browse, search and play music off of a UPnP share. Playing music may use the UPnP KIO-slave, but more advanced functionality requires Amarok to handle this directly.&lt;br /&gt;
*Allow Amarok to share it's collection with other devices or control other devices via UPnP. This is secondary priority but it may be pretty easy with Coherence.&lt;br /&gt;
*Control UPnP Media Renderers (DMR: Digital Media Renderer device class in DLNA) from within Amarok.&lt;br /&gt;
&lt;br /&gt;
'''Material Prerequisite:''' Some UPnP devices or computers to test with. Good excuse to buy a PS3. If you live in Europe a Philips Streamium DMR can be borrowed.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++ and Qt. Coherence uses Python and D-Bus but doesn't need to be hacked on in the scope of this project.&lt;br /&gt;
&lt;br /&gt;
And of course, understanding of UPnP networking and devices wouldn't hurt!&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Stecchino (bart.cerneels at kde dot org)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Project: New meta-applets for the Context View====&lt;br /&gt;
'''Brief Explanation:'''&lt;br /&gt;
The Context View (CV) is currently used to display multiple applets that expose various information. However, due to the fact that each applet displays a certain type of information from one data source, there is significant amount of wasted space, and it is hard to show much more than 3 different pieces of data at once.&lt;br /&gt;
&lt;br /&gt;
Meta-Applets are large applets that integrate date from multiple data sources in order to display more semantically related information coherently and efficiently. This could mean, for example, an applet that brings together lyrics, artist info, upcoming concerts, and related songs/artists. &lt;br /&gt;
&lt;br /&gt;
More info is available here [http://amarok.kde.org/wiki/Proposals/More_Contexual_Information on the amarok wiki]&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
Two or three (to be discussed with mentor in application writing process) applets that elegantly execute the ideas discussed above.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:'''&lt;br /&gt;
Knowledge of C++ is required, and some familiarity with Qt is helpful (especially QGraphicsView) but not necessary. &lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
Leo Franchi (lfranchi AAAT kde DT org), or other Amarok developers. Contact at amarok@kde.org or #amarok on freenode.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
====Project: Code regression test suite, implemented with QtScript ====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Amarok currently has no automatic code regression testing (&amp;quot;unit testing&amp;quot;) in place at all. We very much need such a system in place (for as many components as possible), as we sometimes accidentally break certain components of the program by extending the code.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
Code regression test suite for Amarok 2, implemented as one &amp;quot;Amarok-Script&amp;quot; (JavaScript), and internally split into multiple separate files and components, so that it would be possible to run arbitray tests (or the full suite) with very little effort, and no compiling, at any time. A requirement would also be testing of the collection scanning code (with test case collections), and testing of GUI correctness with the QTest library.&lt;br /&gt;
&lt;br /&gt;
Also see:&lt;br /&gt;
http://amarok.kde.org/wiki/Development/Scripting_HowTo_2.0&lt;br /&gt;
&lt;br /&gt;
A plus would be the generation of suitable statistics (possibly with document export), and possibly a visual representation of the data.&lt;br /&gt;
&lt;br /&gt;
'''Material Prerequisite:''' &lt;br /&gt;
Amarok 2 trunk, KDE SVN account, git. Linux, OSX, or Windows.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
C++, Qt, KDE-Libs, QtScript (JavaScript), SVN, git, code testing.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
Potentially one of several. Contact the amarok mailing list or ask in our IRC channel #amarok&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Project: Multilevel playlist sorting and sorting GUI ====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
In Amarok 2.1, the layout of the playlist will be very configurable, being able to show as much or as little information about each track as each user might wish. Currently however, it is lacking an advanced system for sorting in the playlist, something that many users comming from Amarok 1 are missing. While simple sorting is relatively easy to do (and has already been partly implemented) we would like to aim a bit higher with Amarok 2.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
A proxy model allowing the tracks in the playlist to be sorted using an arbitrary number of &amp;quot;layered&amp;quot; sort criteria. for instance, a sort setup could be &amp;quot;artist-album-tracknumber&amp;quot; This would sort all tracks by artist, then sort the tracks from each artist by album, and finally the tracks from each album based on track number. Once this model is working, a GUI is needed for making this functionality easilly avaialble to the user. Ideally this gui should tie in well with the playlist layout and search/filter stuff. Also, all track navigators (the classes that determines the order of playback, such as normal, random, random album and so on) need to be updated to use and work correctly with the new proxy model.&lt;br /&gt;
&lt;br /&gt;
'''Material Prerequisite:''' &lt;br /&gt;
Amarok 2 trunk, KDE SVN account, Linux, OSX, or Windows.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
C++, Qt, KDE-Libs, SVN/git.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
Nikolaj Hald Nielsen &amp;lt;nhnFreespirit@gmail.com&amp;gt; or contact the amarok mailing list or ask in our IRC channel #amarok&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Project: Playlist and Collection synchronization====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Mediadevices and services can add tracks and playlists to Amarok. Synchronization would automatically copy over tracks between the main Amarok Collection and devices or services or even between each other, either for a single playlist or the complete collection.&lt;br /&gt;
An algorithm needs to be implemented that does this automatically in a fast and efficient way with minimal intervention needed by the user.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
Playlists set up on both the local collection and a portable mediaplayer will get synchronized the moment the player is connected.&lt;br /&gt;
&lt;br /&gt;
'''Material Prerequisite:''' &lt;br /&gt;
Amarok 2 trunk, KDE SVN account, Linux, OSX, or Windows.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
C++, Qt, KDE-Libs, SVN/git.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
Bart Cerneels &amp;lt;bart.cerneels at kde dot org&amp;gt; or contact the amarok mailing list or ask in our IRC channel #amarok &lt;br /&gt;
&lt;br /&gt;
===Phonon===&lt;br /&gt;
Abstraction library for sound and video support. Used by KDE notifications, Amarok, Dragon Player and Qt Software.&lt;br /&gt;
&lt;br /&gt;
[http://phonon.kde.org Website] - [https://mail.kde.org/mailman/listinfo/phonon-backends Mailing list] - IRC channel: #phonon on Freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: Analyzer Support====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Applications such as Amarok and Dragon Player cannot have an analyzer or visualizations since they use Phonon which does not yet have the functionality to do it. The analyzer is the little bar graph thing which bounces around while music is playing. Users like it as its pretty and gives them a visual indication of their music playing. &lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
As this project is working on extending a library, it has three parts: the Phonon library itself, a Phonon backend, and an application. The Phonon library would need the new API calls. At least phonon-xine and preferably 1 or 2 other Phonon backends must then implement the new API. An application like Amarok or Dragon Player should be used to demonstrate the use of the new API.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++ and Qt. Experience with Xine or GStreamer is probably useful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Ian Monroe (contact on the [https://mail.kde.org/mailman/listinfo/amarok Amarok mailing list]) or possibly another Amarok or Phonon developer.&lt;br /&gt;
----&lt;br /&gt;
===Marble===&lt;br /&gt;
A desktop globe and map application. Also provides a map Qt Widget.&lt;br /&gt;
&lt;br /&gt;
[http://edu.kde.org/marble/ Website] - [https://mail.kde.org/mailman/listinfo/marble-devel Mailing list]&lt;br /&gt;
&lt;br /&gt;
====Project: Satellite navigation====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Satellite navigation devices have become widely used and the quality of openstreetmap data is becoming high, with some cities completely mapped already. Providing satellite navigation would be a useful desktop app for many as well as adding appeal for the use of KDE in embedded devices.&lt;br /&gt;
&lt;br /&gt;
It also opens the possibility to bringing many of the free software ideals to interaction with the real world such as collaborative/social POIs.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
The project would aim at getting a basic satellite navigation application running. The most basic features required would be getting the current location from a GPS device and providing route calculation to a destination.&lt;br /&gt;
&lt;br /&gt;
The AndNav project (http://andnav.org) has already achieved something similar for Android so it could be a point of reference for how to use OpenStreetMap data to achieve this.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++ and Qt. Experience with GPS devices under linux would be beneficial. Knowing java may also be of benefit in order to study the AndNav implementation.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' I (Alan Jones, skyphyr using gmail) am willing to mentor, but not having any GPS or Marble experience there is most likely somebody far more suited to undertake this role.&lt;br /&gt;
&lt;br /&gt;
Comment from a Marble Project guy: Alan, please get in touch with the Marble Project. Our mailing list is marble-devel@kde.org. We'd like to support this project if a student is willing to do it. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Project: Add Time support to Marble====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Wouldn't it be great to be able to see the world at different times in Marble? Like having a slider which would give you the ability to browse through the time? Marble's internal datastructure is modelled after KML. But support for time-related tags is missing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* Having a GUI on the map and as a QWidget based dialog which allows people to &amp;quot;slide&amp;quot; through time.&lt;br /&gt;
* Implementation of the KML [http://code.google.com/apis/kml/documentation/kmlreference.html#timeprimitive &amp;lt;TimePrimitive&amp;gt;] and [http://code.google.com/apis/kml/documentation/kmlreference.html#timespan &amp;lt;TimeSpan&amp;gt;] tag: Creating the KML-handler and needed data classes for the GeoData parser. &lt;br /&gt;
* Having a central &amp;quot;internal&amp;quot; clock which the current view would be based on.&lt;br /&gt;
* Porting existing features (like the starry sky and the sun shading) over to the new class design.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++ and Qt. Knowledge about KML is not necessary but would be appreciated.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Torsten Rahn / Patrick Spendrin.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===KDevelop===&lt;br /&gt;
KDE-based Integrated Development Environment, specializing in c++ support, but including a powerful generic framework (definition use chain) which makes it possible to relatively easily support multiple different languages.&lt;br /&gt;
&lt;br /&gt;
[http://www.kdevelop.org Website] - [http://www.kdevelop.org/index.html?filename=mailinglist.html Mailing list] - IRC channel: #kdevelop on Freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: C++ Refactoring Support====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
C++ support in KDevelop is already highly advanced, often equalling or surpassing what the user and compiler understand about the code.  A few refactoring tools have been developed already, but they have been constructed in a crude fashion, generating code via string concatenation.&lt;br /&gt;
&lt;br /&gt;
This project would aim to create a new system to implement refactoring tools, and to create, test and deploy several advanced refactoring tools for c++.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
A library would be created to enable refactoring based on the c++ AST (abstract syntax tree).  A reverse parser (AST to code) already exists, but classes would be created to allow programatic manipulation of an AST.  Optionally this library would also cover a generic framework based on the duchain which would be re-usable by other languages and make refactoring plugins easier to develop and partially shareable between languages.&lt;br /&gt;
&lt;br /&gt;
See the [http://api.kde.org/4.x-api/kdevplatform-apidocs/language/codegen/html/index.html Code Generation Design] documents for the initial plan for this project.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++ and Qt. Experience with parsers would be a bonus.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Hamish Rodda (Definition-Use chain code creator) rodda at kde/dot/org, possibly also David Nolden (DUChain guru)(to be confirmed)&lt;br /&gt;
----&lt;br /&gt;
=== KStars ===&lt;br /&gt;
KStars is a Desktop Planetarium for KDE. It displays a map of the sky and provides a lot of tools to learn astronomy, or to calculate and predict astronomical phenomena. See [[http://edu.kde.org/kstars|The KStars Homepage]] for more information.&lt;br /&gt;
&lt;br /&gt;
==== Project: Community Integration for KStars ====&lt;br /&gt;
'''Project Information:''' KStars is a desktop planetarium program for KDE.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Amateur Astronomy (which is one of the important use-cases of KStars) is typically done in communities. KStars permits users to save their own observing logs. It would be nicer if the user could share his observing logs with other users and see other observers' logs within KStars. It would also be nice if KStars had a map (using MarbleWidget) to display various Astronomy-related establishments (like amateur associations, observatories, research institutes). Another possible idea could be an observing report generator that would generate a report based on observing logs, and at the user's will, share it / post it on the internet.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Implement some features that will make it easier for users to collaborate, as suggested above.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Required: C++. Prior knowledge of KIO_HTTP will help.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Akarsh Simha &amp;lt;akarsh DOT simha AT kdemail DOT net&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Project: FITS Image Overlay on the sky map. ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' KStars is a desktop planetarium program for KDE.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' It would be great if a FITS image could be overlayed on the sky map so that the field drawn by KStars could be compared with the field in the FITS image. This would be of great benefit to observational astronomers, astrophotographers and comet / asteroid observers. An extension would be to download a DSS image using KStars' already existing tool and map it onto the sky map. The support of shapes like ds9 region, annotations on the sky, etc. could also be added.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Functionality to overlay a FITS image or a DSS image obtained through KStars on to the sky map.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Required: C++. Prior knowledge of the FITS format and cfitsio library will help.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Akarsh Simha &amp;lt;akarsh DOT simha AT kdemail DOT net&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Project: Tools for Eclipses ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' KStars is a desktop planetarium program for KDE. Currently, it can predict Solar Eclipses (using the Conjunctions tool), but cannot plot trajectory of shadows, or predict Lunar Eclipses.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' The project's primary goals are to include simulation and prediction (maybe using the existing Conjunction backend) of Lunar eclipses, and to create a tool to mark the trajectories of Solar and Lunar eclipse shadows on a map of the earth, including marking of totality, partial eclipse and annular eclipse. Something similar to this: [http://eclipse.gsfc.nasa.gov/SEmono/TSE2009/TSE2009iau/TSE2009-fig01.GIF]&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' A complete set of tools to deal with eclipses.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Akarsh Simha &amp;lt;akarsh DOT simha AT kdemail DOT net&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Project: KStars: Prettyfication ====&lt;br /&gt;
'''Project Information:''' KStars is a desktop planetarium program for KDE. The display is interactive, but it could be made more beautiful. &lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' We often get good suggestions for making KStars look better. Choose any of the following ideas: realistic rendering of asteroids and comets (including tails!); texture-mapping of the sky (this would mostly allow a photorealistic Milky Way); texture-mapping of planets; realistic sky-lighting effects (i.e., sky is blue in the daytime, gets gradually darker and colorful at sunset). One could also think of using Qt-GL rendering optionally.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Successful implementation of any of these ideas to make KStars more beautiful. &lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Required: C++.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Akarsh Simha &amp;lt;akarsh DOT simha AT kdemail DOT net&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Project: Printable star charts ====&lt;br /&gt;
'''Project Information:''' KStars is a desktop planetarium program for KDE. It already has a print feature, but the printed chart could be much better.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' A printed star chart should at least include a legend explaining the symbols, and provide some information on the location of the user, the time and date, etc. The user would ideally be able to annotate the chart in various ways. &lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Significant improvements to the printed star charts in KStars. &lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Basic programming skills, ability to quickly learn QPainter API. &lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Akarsh Simha &amp;lt;akarsh DOT simha AT kdemail DOT net&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Project: Many Moons ====&lt;br /&gt;
'''Project Information:''' KStars is a desktop planetarium program for KDE. It currently includes Earth's moon and 4 of Jupiter's moons. &lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Generalize the JupiterMoons class to encapsulate any planet's Moons. The project will require some research to identify a public source of orbital data for planetary moons, most likely from a NASA webpage. &lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Implement moons for at least Mars, Jupiter, Saturn, and Pluto with the new system. &lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Required: C++. The project doesn't require much contact with Qt/KDE APIs, and the existing JupiterMoons class can be used as a template. &lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Akarsh Simha &amp;lt;akarsh DOT simha AT kdemail DOT net&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Project: Support many catalogs ====&lt;br /&gt;
'''Project Information:''' KStars is a Desktop Planetarium for KDE. Currently KStars loads some star catalogs that are made available in a KStars native format.&lt;br /&gt;
&lt;br /&gt;
'''Brief Explanation:''' KStars currently loads Tycho-2 and parts of USNO NOMAD catalog of stars. These catalogs are required to be in KStars' native format which uses the Hirearcheal Triangular Mesh to index regions in the sky. Popular star catalogs like USNO A organize stars and divide the sky into regions differently. Most users of astronomy software typically have one of these popular catalogs downloaded, and it would be great if KStars could support them somehow. While ability to read the non-native catalogs straight off is desirable, tools to convert these catalogs into KStars' native format would also help.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:''' Implement support for at least the most popular catalogs like USNO-A2.0, Stellarium's Extra catalog, Cartes du Ciel's Tycho and Tycho-2 catalogs.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Required: C++. Ability to read documentation and quickly understand the existing code and ability to deal with binary files will help.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== KOffice ===&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
'''Project:''' support for versionned OpenDocument files.&lt;br /&gt;
&lt;br /&gt;
'''Explanation:''' The OpenDocument specification doesn't include support for multiple versions of the same document in a single file. But that feature is supported by OpenOffice.org. The objective for this Summer of Code is to add support for that versionning system in KOffice. Since KOffice shares the OpenDocument loading/saving code, it should be possible to add this support in every KOffice application in one Summer of Code.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Being able to load a specific version of a file, and create/manage versions&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++, excellent english reading skills.&lt;br /&gt;
&lt;br /&gt;
==== KWord ====&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
==== KPresenter ====&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
'''Project:''' Powerpoint import.&lt;br /&gt;
&lt;br /&gt;
'''Explanation:''' From some years ago another gSoc project implemented the basis for powerpoint import, but it was never finished. So there is a good basis to start from. From a quick look it seems like styles support is the thing missing most to complete the work, however a thorough analysis of what is there and what is not needs to be done. And then the actual work needs to be done too, obviously&lt;br /&gt;
&lt;br /&gt;
==== Krita ====&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
'''Project:''' Sketch-pad interface for Krita&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' Krita is a large and complex application built around a sophisticated painting engine. The goal of this project is to create a new interface around the Krita engine, specialized for quick sketching.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' This project should implement a new interface around Krita, presenting the user a single-layer plus tracing paper interface with a single freehand sketching tool. Easy to use and graphic color and paint operation (brush, pencil, eraser etc.) interface elements must be designed and implemented.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
'''Project:''' Shader filters and generators for Krita&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' Some initial work has already been done to make it possible to write filters in the OpenGL shading language. This project should take that initial code as a basis and implement a fully functioning plugin for Krita that allows filters and shaders to be executed on images in any colorspace.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The plugin should have a finished user interface and make it possible to experiment with shader filters in an interactive way. Example filters must be implemented.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++, OpenGL.&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
'''Project:''' Animation support&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' There is no support at all in Krita for animated images such as GIF or MNG or for working with images in an animation context, such as textures or backgrounds in applications like Blender. The applicant should first investigate user needs and use cases and then implement support in the user interface and in the import/export filters.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' A user-friendly way of working with animated images (i.e., not by making each frame a layer), but e.g. a docker that shows the the animation running in thumbnail format. Import/export filters for relevant file formats.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
'''Project:''' PSD and Gimp plugins&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' Krita is powerful enough to handle nearly all that the Gimp and Photoshop are capable of saving. This project is about creating dedicated file import/export filters that can handle as much of these file formats as possible, possibly through the use of existing libraries.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' 4 plugins: psd import/export and xcf import/export. These plugins should be able to handle complex files in all supported colorspaces. Ideally the project would also deliver a library to convert PSD/XF to/from Open Raster files.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
'''Project:''' Workspaces&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' A workspace is a loadable package of settings that finetune Krita for a particular purpose. A workspace could contain additional plugins (like an image browser plugin for batch operations) and a subset of resources. Example workspaces could be batch-editing of images, editing of animation sequences or painting or sketching.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' the user interface and framework to make packages of plugins and resources that users can switch between. Also extra plugins to extend krita in areas like batch processing that do not exist yet.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++, artistic workflow&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
'''Project:''' Kipi and digikam plugins compatibility&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' Kipi and digikam provide lots of interesting plugins for working with 8 and 16 bit RGBA images. It would be great to be able to re-use those plugins from within Krita.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Two plugins that load kipi and digikam filters into two new menus in the filter menu. Code to convert Krita layers to the digikam image representation and back, taking care of icc profiles and other niceties.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++, artistic workflow&lt;br /&gt;
&lt;br /&gt;
===KDE PIM===&lt;br /&gt;
KDE PIM is the interest group working on applications related to personal information management, e.g. contacts, calendar, mails, etc.&lt;br /&gt;
&lt;br /&gt;
One of the current challenges is utilizing the new cross-desktop PIM infrastructure called [http://www.akonadi-project.org/ Akonadi].&lt;br /&gt;
&lt;br /&gt;
There are interesting projects on all levels of the software stack: libraries, application porting, new applications, access to online resources, etc.&lt;br /&gt;
&lt;br /&gt;
[http://pim.kde.org/ Website] - [http://techbase.kde.org/Projects/PIM Project Wiki] -  [https://mail.kde.org/mailman/listinfo/kde-pim Mailing list] - IRC channel: #kontact and #akonadi on Freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: Akonadi Janitor Agent====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
An [[Development/Architecture/KDE4/Akonadi#Akonadi_Agents|Akonadi Agent]] is a service process for performing tasks on data provided through the Akonadi server.&lt;br /&gt;
&lt;br /&gt;
The task of a Janitor agent would be to keep the user's PIM data neatly organized, for example deleting news feed items which are above a certain age and not flagged, moving last week's mail to an archive, etc.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* An Akonadi Agent capable of managing actions on Akonadi collections triggered by various criteria&lt;br /&gt;
* At least fully working implementation of actions based on &amp;quot;Expire&amp;quot; criterias for mail, e.g. delete mail above certain age, move/copy to different collection, etc&lt;br /&gt;
* GUI for configuring actions and their trigger criteria.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++ and Qt. Ideally would already have gone through the [[Development/Tutorials/Akonadi/Resources|Akonadi Resource Tutorial]] since Resources are a specialized form of agents and thus share some of the API and characteristics.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Kevin Krammer (kevin dot krammer at gmx dot at)&lt;br /&gt;
----&lt;br /&gt;
====Project: Alternative Akonadi Client Library====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Akonadi has a server/client like architecture where clients such as applications (but also resource) connect to a service and communicate with it through a suitable protocol.&lt;br /&gt;
&lt;br /&gt;
Currently this is implemented for KDE in library called libakonadi-kde, however it is desirable to have additional implementations to be suitable for other library stacks, e.g. GLib/GObject based ones.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* A non-KDE based, preferably GLib/GObject based, Akonadi client library which&lt;br /&gt;
** can connect to a running Akonadi server&lt;br /&gt;
** fetch Akonadi collections&lt;br /&gt;
** fetch Akonadi items&lt;br /&gt;
** receive Akonadi change notifications (D-Bus based)&lt;br /&gt;
&lt;br /&gt;
* A set of demo programs using the library which can&lt;br /&gt;
** recursively list (id and content MIME types) collections&lt;br /&gt;
** list (id and MIME type)oif items in a collection&lt;br /&gt;
** get the raw payload of an item&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' Depends on the chosen language and toolstack, e.g. C/Vala and GLib/GObject knowledge for a GLib/GObject based implementation.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
----&lt;br /&gt;
====Project: Akonadi Consistency Checker====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Akonadi provides a structure of collections and items, similar to folders and files of a filesystem. Similarly the internal structures have to follow certain constraints which must not be violated. Nevertheless, this can happen as result of bugs, hardware failures, power loss and a million other reasons.&lt;br /&gt;
&lt;br /&gt;
Filesystem checks exist to detect and possibly fix such situations. Such functionality would also be desirable for Akonadi.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* A consistency checker (built into the Akonadi server or stand-alone) that performs an extensible set of checks on the internal data structures of the Akonadi server, such as:&lt;br /&gt;
** items belong to existing collections&lt;br /&gt;
** collections are child collections of existing collections&lt;br /&gt;
** the collection tree is non-cyclic&lt;br /&gt;
** every collections is owned by an existing resource&lt;br /&gt;
** collection sub-trees are owned by the same resource&lt;br /&gt;
** every item payload part belongs to an existing item&lt;br /&gt;
** content type constraints of collections are not violated&lt;br /&gt;
** ...&lt;br /&gt;
* each check should be accompanied with recovery code, such as moving orphaned items into a lost+found folder&lt;br /&gt;
* integration into Akonadiconsole&lt;br /&gt;
* integration into unit-tests&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++ and Qt mandatory, SQL/database knowledge would be useful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Volker Krause &amp;lt;vkrause@kde.org&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===KDE on Windows===&lt;br /&gt;
====Solid API backend====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
The porting efforts to make KDE available across platforms do need some backends for system dependent tasks. One of the KDE libraries that bundles this is Solid.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
You implement a backend for the [http://solid.kde.org Solid API] using WINAPI.&lt;br /&gt;
It has to work with both MinGW and MSVC compilers. Not every function is required, but the basic functionality (network access, removable drives/harddisks and power) should be implemented.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' Windows API and C++/Qt. You should be able to set up the [http://techbase.kde.org/Getting_Started/Build/KDE4/Windows development environment] yourself and be familiar with it.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Carlo Segato (brandon dot ml at gmail dot com) or Patrick Spendrin (ps_ml at gmx dot de)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===KDE Games===&lt;br /&gt;
====Project: Kolf 2 landscape object====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Kolf 2 is the second incarnation of KDE's minigolf game. We are currently rewriting it from scratch to take advantage of the powerful technologies provided by Qt 4 and KDE 4.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
The task in this project is to create an object (or multiple objects) that provide(s) landscape textures, slopes, puddles and sand bunkers.&lt;br /&gt;
&lt;br /&gt;
If you finish this task before the end of the summer, you can fill the remaining time by porting as much game objects from Kolf 1 to Kolf 2 as possible (e.g. windmills, floating blocks, signs or bumpers).&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++/Qt. Experiences in graphics programming with Qt will definitely help, as you are expected to implement 2D rendering for the landscape object.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Stefan Majewsky (majewsky at gmx dot net) &amp;amp;ndash; Please contact me to let me help you to improve your proposal.&lt;br /&gt;
&lt;br /&gt;
====Project: Kolf 2 editor interface====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
The minigolf game Kolf provided an editor interface from the beginning, to allow the users to create custom courses. For Kolf 2, we are rewriting the game engine and can therefore not use the old editor code.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
Your task would be to create an editor interface (may be embedded in the game, or a standalone application). A few basic parts are available, and the Kolf 2 engine supports generic methods to provide data to editor interfaces, and display editor overlays on the game view.&lt;br /&gt;
&lt;br /&gt;
If you finish the editor interface before the end of the summer, you can fill the remaining time by porting as much game objects from Kolf 1 to Kolf 2 as possible (e.g. windmills, floating blocks, signs or bumpers).&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' C++/Qt. Experiences in model/view programming with Qt will be of good use.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Stefan Majewsky (majewsky at gmx dot net) &amp;amp;ndash; Please contact me to let me help you to improve your proposal.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Solid===&lt;br /&gt;
====Project: UPnP support through Jolie====&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Adding UPnP support to Solid would mean offering transparent UPnP support to every KDE application using the Solid API, keeping them clean from every UPnP implementation aspect.&lt;br /&gt;
At the present, the [http://www.jolie-lang.org/ Jolie language] is being integrated with Plasma by means of the [http://websvn.kde.org/branches/work/~ervin/sodep/ QtSodep] library, soon to offer higher levels of abstraction.&lt;br /&gt;
&lt;br /&gt;
The aim of this project would be to implement a UPnP protocol for Jolie, so that Solid could re-use the integration being made with QtSodep and gain UPnP support without having to worry about implementation details. Having a UPnP protocol implementation in Jolie would have other considerable consequences, like the possibility to act easily as a UPnP server or to compose and export existing UPnP services.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
*The creation of a &amp;quot;upnp&amp;quot; protocol in Jolie, supporting at least the Internet Gateway Device (IGD) and MediaServer profiles.&lt;br /&gt;
*The creation of a UPnP Jolie service for UPnP service discovery and monitoring.&lt;br /&gt;
*Extending libsolid to expose UPnP devices found on the network.&lt;br /&gt;
&lt;br /&gt;
'''Material Prerequisite:''' Having UPnP devices or software applications to test with. Most home routers support IGD, and there exists free software supporting the MediaServer profile ([http://mediatomb.cc/ mediatomb]).&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:''' Understanding of the UPnP specifications, Java (for the development of the Jolie UPnP protocol) and basic knowledge of the Jolie language.&lt;br /&gt;
&lt;br /&gt;
'''Mentors:''' ervin (ervin at kde dot org) fmontesi (famontesi at gmail dot com)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===KWin===&lt;br /&gt;
&lt;br /&gt;
KDE's window manager&lt;br /&gt;
&lt;br /&gt;
[http://techbase.kde.org/Projects/KWin Techbase page] - [https://mail.kde.org/mailman/listinfo/kwin Mailinglist] - IRC channel: #kwin on Freenode.&lt;br /&gt;
&lt;br /&gt;
====Project: Window tabbing====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Tabbing is a nice feature that allows you to tab windows together. Tabs can either be embedded into the window’s titlebar or they can appear as little tabs at the outside of a window. The position and size of the outside-tabs are customizable. There is an old [http://bugs.kde.org/show_bug.cgi?id=42023 feature request] and an additional [http://www.undefinedfire.com/kde/500-kwin-bounty/ $500 bounty].&lt;br /&gt;
&lt;br /&gt;
====Project: Window tiling====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
KWin does not yet support window tiling. That is divide the screen into sections and put an application into that section so that windows do not overlap any more. It should be possible to navigate easily by using keyboard shortcuts. There is an old [https://bugs.kde.org/show_bug.cgi?id=59338 feature request].&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Contribute/Bugsquad/BugDays/KOfficeDay2/KWord</id>
		<title>Contribute/Bugsquad/BugDays/KOfficeDay2/KWord</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Contribute/Bugsquad/BugDays/KOfficeDay2/KWord"/>
				<updated>2009-01-23T16:04:12Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Application specific tips */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===KWord===&lt;br /&gt;
&lt;br /&gt;
====Application specific tips====&lt;br /&gt;
&lt;br /&gt;
At Beta5 the state of KWord is that the application has been stabilized to a large extend and all present features should work with small exceptions.&lt;br /&gt;
The loading and saving of documents has not received a lot of attention and therefor it is well known that there will be loads of problems in loading ODFs.  So testing KWord by loading may give you some silly results beware of that. And I'd rather have interaction and new document creation be the focus of testing due to that.  (ThomasZ)&lt;br /&gt;
&lt;br /&gt;
====Testers====&lt;br /&gt;
Please put your IRC nickname and KOffice svn revision number (or beta5) in the table if you are testing this app.&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
!IRC Nickname !! KOffice svn revision number tested !! Testing details&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Bugs====&lt;br /&gt;
Please list all bugs found in the application below here. Remember to sign every comment you write on this wiki page with &amp;lt;nowiki&amp;gt;~~~&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* After starting kword, with the colorful document, the default tool is Text Editing, without doing anything else, when I choose Paragraph tool, the options bars suffer a little colapse. Look at:&amp;lt;br&amp;gt; [[Image:Kword_toolbar1.png]]&amp;lt;br&amp;gt;[[User:Jtamate|Jtamate]]&lt;br /&gt;
NOTE: It happens also with a lot of tools.&amp;lt;br&amp;gt;&lt;br /&gt;
NOTE: This only happens with the colorful document, with a blank document it does not happen.&lt;br /&gt;
&lt;br /&gt;
* The tool toolbar can not be horizontally srinked to only one or two tools (specially usefull on small screens). [[User:Jtamate|Jtamate]]&amp;lt;br&amp;gt;&lt;br /&gt;
NOTE: This only happens with one user account (that has used previous betas), with a fresh new account it does not happen.&lt;br /&gt;
&lt;br /&gt;
* The zoom options toolbar is not painted totally. Look at:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Zoom_options.png]]&amp;lt;br&amp;gt;[[User:Jtamate|Jtamate]]&lt;br /&gt;
&lt;br /&gt;
* The zoom options toolbar does not select the default tool (zoom in or zoom out). [[User:Jtamate|Jtamate]]&lt;br /&gt;
&lt;br /&gt;
* Find does nothing. Hope the find interface will change to something similar to what kate has. [[User:Jtamate|Jtamate]]&lt;br /&gt;
&lt;br /&gt;
* The hand drawing plots are not saved (or loaded). What I wrote:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Screen_with_free_hand_drawings.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
But only the text is restored. If there are some things that can not be saved or restored, it should be shown when saving the file.[[User:Jtamate|Jtamate]]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Write_a_Flake_Plugin</id>
		<title>Development/Tutorials/Write a Flake Plugin</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Write_a_Flake_Plugin"/>
				<updated>2008-12-15T10:35:55Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: Remove question; answer is that it hasn't changed.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial will guide you step by step through the creation of a [http://wiki.koffice.org/index.php?title=Flake Flake] shape. At the end you will be able to write a shape that is loadable by any KOffice application.&lt;br /&gt;
&lt;br /&gt;
For an introduction of KOffice plugins, see [[Development/Tutorials/KOffice Overview]] and for a technical introduction to plugins in KOffice see [[Development/Tutorials/Generic KOffice Plugin Creation|Generic KOffice Plugin Creation]]&lt;br /&gt;
&lt;br /&gt;
=Do the groundwork - create a shape=&lt;br /&gt;
&lt;br /&gt;
First of all you need a class derived from the [http://koffice.org/developer/apidocs/libs-flake/classKoShape.html KoShape] class. This will be the actual shape class so you have to ensure that all the data you need for painting is accessable for this KoShape derived class.&lt;br /&gt;
The only method you '''have''' to reimplement is the [http://koffice.org/developer/apidocs/libs-flake/classKoShape.html#027c57ec3dc4360294c5bb7330c768d7 paint()] method which is responsible for painting your shape.&lt;br /&gt;
&lt;br /&gt;
What you might be interested in is the [http://koffice.org/developer/apidocs/libs-flake/classKoShape.html#09a45358ef20c372675790531989d5b6 resize()] and [http://koffice.org/developer/apidocs/libs-flake/classKoShape.html#5bc408a6f4d7f0bd0ea832002b96ac83 size()] method which set the available size to the shape. Some shapes define the size they need on their own so they reimplement size() to return the size they have. &lt;br /&gt;
&lt;br /&gt;
An example for this is the KoFormulaShape. A formula has a fixed size due to its contents and so KoFormulaShape reimplements the size() method.&lt;br /&gt;
If your shape has a special outline, reimplement [http://koffice.org/developer/apidocs/libs-flake/classKoShape.html#71ac11dbac93b5bff2f91fb768fa17e5 outline()] to return your shape's outline correctly.&lt;br /&gt;
&lt;br /&gt;
The rotation, scaling and skewing is done through a matrix and so you don't need to care about it.&lt;br /&gt;
&lt;br /&gt;
So here is an example how your code might look like:&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;&lt;br /&gt;
#include &amp;lt;KoShape.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class KoFooShape : public KoShape {&lt;br /&gt;
public:&lt;br /&gt;
    KoFooShape();&lt;br /&gt;
    ~KoFooShape();&lt;br /&gt;
&lt;br /&gt;
    // absolutly necessary:&lt;br /&gt;
    void paint( QPainter &amp;amp;painter,&lt;br /&gt;
                const KoViewConverter &amp;amp;converter );&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
    SomeDataClass* m_dataClass;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Make your shape loadable - create a factory and a plugin=&lt;br /&gt;
&lt;br /&gt;
Now when you have created your shape class and implemented all the necessary things to make it at least compile you can think about the loading of your shape.&lt;br /&gt;
&lt;br /&gt;
The KOffice apps use [http://koffice.org/developer/apidocs/libs-flake/classKoShapeFactory.html KoShapeFactory] to get instances of shapes in a generic way. This way of obtaining shape instances is designed after [http://en.wikipedia.org/wiki/Abstract_factory_pattern the factory pattern]. So you should also implement a KoShapeFactory derived class that makes creating new instances of your shape possible. The factory class has to implement two methods: &lt;br /&gt;
&lt;br /&gt;
* KoShape* createDefaultShape() const;&lt;br /&gt;
* KoShape* createShape( const KoProperties* params ) const;&lt;br /&gt;
&lt;br /&gt;
An example factory class definition:&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;&lt;br /&gt;
class FooShapeFactory : public KoShapeFactory {&lt;br /&gt;
public:&lt;br /&gt;
    FooShapeFactory( QObject *parent );&lt;br /&gt;
&lt;br /&gt;
    KoShape* createDefaultShape() const;&lt;br /&gt;
    KoShape* createShape(const KoProperties* params) const;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
The according implementation:&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;&lt;br /&gt;
FooShapeFactory::FooShapeFactory(QObject* parent) &lt;br /&gt;
   : KoShapeFactory( parent, &amp;quot;FooShape&amp;quot;,&lt;br /&gt;
                     i18n(&amp;quot;Foo Shape&amp;quot;) )&lt;br /&gt;
{&lt;br /&gt;
    setToolTip( i18n(&amp;quot;A foo shape&amp;quot;) );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
KoShape* FooShapeFactory::createDefaultShape() const&lt;br /&gt;
{&lt;br /&gt;
    KoFooShape* fooShape = new KoFooShape();&lt;br /&gt;
    // set defaults&lt;br /&gt;
    return fooShape;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
KoShape* FooShapeFactory::createShape(&lt;br /&gt;
                            const KoProperties* params ) const&lt;br /&gt;
{&lt;br /&gt;
    KoFooShape* fooShape = new KoFooShape();&lt;br /&gt;
    // use the params&lt;br /&gt;
    return fooShape;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the factory there is now a generic way to obtain an instance of your shape. But somehow you have to publish your shape as a plugin to let the KOffice application know that there is a plugin to load. Therefore the flake library provides the [http://koffice.org/developer/apidocs/libs-flake/classKoShapeRegistry.html KoShapeRegistry] class. Each application has access to the registry and to let the application know about your shape you have to register it within the registry.&lt;br /&gt;
&lt;br /&gt;
To register we would have to make a call like this:&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;&lt;br /&gt;
KoShapeRegistry::instance()-&amp;gt;add( new FooShapeFactory( parent ) );&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
In order to make that call, we will create a plugin class which is special in that it will be automatically loaded and created by KOffice when an application starts.  This means that the constructor of our plugin class will be the perfect place to actually register our shape using the above line.&lt;br /&gt;
&lt;br /&gt;
The registration is done within the constructor of the FooShapePlugin class. This is a very simple class that represents the plugin and does registration.&lt;br /&gt;
&lt;br /&gt;
Example plugin class definition:&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;&lt;br /&gt;
#include &amp;lt;QObject&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class FooShapePlugin : public QObject {&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
public:&lt;br /&gt;
    FooShapePlugin(QObject *parent, const QStringList&amp;amp;);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example plugin class implementation:&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;&lt;br /&gt;
#include &amp;quot;FooShapePlugin.h&amp;quot;&lt;br /&gt;
#include &amp;lt;kgenericfactory.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
K_EXPORT_COMPONENT_FACTORY(fooshapelibrary,&lt;br /&gt;
    KGenericFactory&amp;lt;FooShapePlugin&amp;gt;( &amp;quot;FooPlugin&amp;quot; ) )&lt;br /&gt;
&lt;br /&gt;
FooShapePlugin::FooShapePlugin(QObject *parent, const QStringList&amp;amp;)&lt;br /&gt;
    : QObject(parent)&lt;br /&gt;
{&lt;br /&gt;
    // register the shape's factory&lt;br /&gt;
    KoShapeRegistry::instance()-&amp;gt;add(&lt;br /&gt;
        new KoFooShapeFactory( parent ) );&lt;br /&gt;
    // we could register more things here in this same plugin.&lt;br /&gt;
}&lt;br /&gt;
#include &amp;quot;FooShapePlugin.moc&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
This demonstrates how for the plugin related tasks KDE provides services which are dynamic loaded libraries. The secret ingredient that makes this class the plugin of that library is the call to the K_EXPORT_COMPONENT_FACTORY macro defined in {{path|kgenericfactory.h}}&lt;br /&gt;
&lt;br /&gt;
We now have a way to create instances of your shape (FooShapeFactory), a way to register them for the apps (KoShapeRegistry) and a plugin that can dynamically be loaded (FooShapePlugin). The last step is to create a {{path|.desktop}} file that describes your plugin and makes it findable by KOffice. For &amp;quot;X-KDE-Library&amp;quot; you have to set the library name you have already specified within K_EXPORT_COMPONENT_FACTORY().&lt;br /&gt;
&lt;br /&gt;
Example {{path|fooshape.desktop}} file:&lt;br /&gt;
&amp;lt;code ini&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Encoding=UTF-8&lt;br /&gt;
Name=Foo Shape&lt;br /&gt;
ServiceTypes=KOffice/Flake&lt;br /&gt;
Type=Service&lt;br /&gt;
X-KDE-Library=fooshapelibrary&lt;br /&gt;
X-Flake-Version=1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After installing that file in the KDE services directory and installing your plugin where the application can open it, your plugin is system wide known and can be loaded by KOffice.&lt;br /&gt;
&lt;br /&gt;
TODO; add example CMake file.&lt;br /&gt;
&lt;br /&gt;
=Make your shape editable - create a tool=&lt;br /&gt;
&lt;br /&gt;
To edit your shape in the GUI the user wants to select a tool and alter your shape. Therefore you have to provide a KoTool derived class. This class implements all edit actions that can be done on your shape but it is also possible to have more than one tool per shape.&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Talk:Archive:Development/Tutorials/Git</id>
		<title>Talk:Archive:Development/Tutorials/Git</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Talk:Archive:Development/Tutorials/Git"/>
				<updated>2008-04-21T07:51:58Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: tips&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lots of good ideas can be found here; [http://wiki.winehq.org/GitWine Git tutorial at WineHq].&lt;br /&gt;
I am in the process of writing a front-end that is more userfriendly; it may be useful to link to it [http://vng.googlecode.com home] [http://repo.or.cz/w/vng.git repo].&lt;br /&gt;
[[User:Zander|Zander]] 09:51, 21 April 2008 (CEST)&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Architecture/KDE3/Network_Transparency</id>
		<title>Development/Architecture/KDE3/Network Transparency</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Architecture/KDE3/Network_Transparency"/>
				<updated>2008-02-10T21:06:12Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Using KIO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''KDE Architecture - KDE's IO architecture'''&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
In the age of the world wide web, it is of essential importance that desktop &lt;br /&gt;
applications can access resources over the internet: they should be able to&lt;br /&gt;
download files from a web server, write files to an ftp server or read mails&lt;br /&gt;
from a web server. Often, the ability to access files regardless of their&lt;br /&gt;
location is called ''network transparency''.&lt;br /&gt;
&lt;br /&gt;
In the past, different approaches to this goals were implemented. The old NFS&lt;br /&gt;
file system is an attempt to implement network transparency on the level of&lt;br /&gt;
the POSIX API. While this approach works quite well in local, closely coupled&lt;br /&gt;
networks, it does not scale for resources to which access is unreliable and&lt;br /&gt;
possibly slow. Here, ''asynchronicity'' is important. While you are waiting&lt;br /&gt;
for your web browser to download a page, the user interface should not block.&lt;br /&gt;
Also, the page rendering should not begin when the page is completely available,&lt;br /&gt;
but should updated regularly as data comes in.&lt;br /&gt;
&lt;br /&gt;
In the KDE libraries, network transparency is implemented in the KIO API. The &lt;br /&gt;
central concept of this architecture is an IO ''job''. A job may copy,&lt;br /&gt;
or delete files or similar things. Once a job is started, it works in the&lt;br /&gt;
background and does not block the application. Any communication from the job&lt;br /&gt;
back to the application - like delivering data or progress information - is&lt;br /&gt;
done integrated with the Qt event loop.&lt;br /&gt;
&lt;br /&gt;
Background operation is achieved by starting ''ioslaves'' to perform certain&lt;br /&gt;
tasks. ioslaves are started as separate processes and are communicated with &lt;br /&gt;
through UNIX domain sockets. In this way, no multi-threading is necessary and&lt;br /&gt;
unstable slaves can not crash the application that uses them.&lt;br /&gt;
&lt;br /&gt;
File locations are expressed by the widely used URLs. But in KDE, URLs do not&lt;br /&gt;
only expand the range of addressable files beyond the local file system. It&lt;br /&gt;
also goes in the opposite direction - e.g. you can browse into tar archives.&lt;br /&gt;
This is achived by nesting URLs. For example, a file in a tar archive on &lt;br /&gt;
a http server could have the URL&lt;br /&gt;
&lt;br /&gt;
 http://www-com.physik.hu-berlin.de/~bernd/article.tgz#tar:/paper.tex&lt;br /&gt;
&lt;br /&gt;
== Using KIO ==&lt;br /&gt;
&lt;br /&gt;
In most cases, jobs are created by calling functions in the KIO namespace.&lt;br /&gt;
These functions take one or two URLs as arguments, and possible other&lt;br /&gt;
necessary parameters. When the job is finished, it emits the signal&lt;br /&gt;
&amp;lt;tt&amp;gt;result(KIO::Job*)&amp;lt;/tt&amp;gt;. After this signal has been emitted, the job&lt;br /&gt;
deletes itself. Thus, a typical use case will look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code cppqt3&amp;gt;&lt;br /&gt;
void FooClass::makeDirectory()&lt;br /&gt;
{&lt;br /&gt;
    SimpleJob *job = KIO::mkdir(KURL(&amp;quot;file:/home/bernd/kiodir&amp;quot;));&lt;br /&gt;
    connect( job, SIGNAL(result(KIO::Job*)), &lt;br /&gt;
             this, SLOT(mkdirResult(KIO::Job*)) );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void FooClass::mkdirResult(KIO::Job *job)&lt;br /&gt;
{&lt;br /&gt;
    if (job-&amp;gt;error())&lt;br /&gt;
        job-&amp;gt;showErrorDialog();&lt;br /&gt;
    else&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;mkdir went fine&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on the type of the job, you may connect also to other&lt;br /&gt;
signals.&lt;br /&gt;
&lt;br /&gt;
Here is an overview over the possible functions:&lt;br /&gt;
&lt;br /&gt;
KIO::mkdir(const KURL &amp;amp;amp;url, int permission)&lt;br /&gt;
:Creates a directory, optionally with certain permissions.&lt;br /&gt;
KIO::rmdir(const KURL &amp;amp;amp;url)&lt;br /&gt;
:Removes a directory.&lt;br /&gt;
KIO::chmod(const KURL &amp;amp;amp;url, int permissions)&lt;br /&gt;
:Changes the permissions of a file.&lt;br /&gt;
KIO::rename(const KURL &amp;amp;amp;src, const KURL &amp;amp;amp;dest, bool overwrite)&lt;br /&gt;
:Renames a file.&lt;br /&gt;
KIO::symlink(const QString &amp;amp;amp;target, const KURL &amp;amp;amp;dest, bool overwrite, bool showProgressInfo)&lt;br /&gt;
:Creates a symbolic link.&lt;br /&gt;
KIO::stat(const KURL &amp;amp;amp;url, bool showProgressInfo)&lt;br /&gt;
:Finds out certain information about the file, such as size, modification time and permissions. The information can be obtained from KIO::StatJob::statResult() after the job has finished.&lt;br /&gt;
KIO::get(const KURL &amp;amp;amp;url, bool reload, bool showProgressInfo)&lt;br /&gt;
:Transfers data from a URL.&lt;br /&gt;
KIO::put(const KURL &amp;amp;amp;url, int permissions, bool overwrite, bool resume, bool showProgressInfo)&lt;br /&gt;
:Transfers data to a URL.&lt;br /&gt;
KIO::http_post(const KURL &amp;amp;amp;url, const QByteArray &amp;amp;amp;data, bool showProgressInfo)&lt;br /&gt;
:Posts data. Special for HTTP.&lt;br /&gt;
KIO::mimetype(const KURL &amp;amp;amp;url, bool showProgressInfo)&lt;br /&gt;
:Tries to find the MIME type of the URL. The type can be obtained from KIO::MimetypeJob::mimetype() after the job has finished.&lt;br /&gt;
KIO::file_copy(const KURL &amp;amp;amp;src, const KURL &amp;amp;amp;dest, int permissions, bool overwrite, bool resume, bool showProgressInfo)&lt;br /&gt;
:Copies a single file.&lt;br /&gt;
KIO::file_move(const KURL &amp;amp;amp;src, const KURL &amp;amp;amp;dest, int permissions, bool overwrite, bool resume, bool showProgressInfo)&lt;br /&gt;
:Renames or moves a single file.&lt;br /&gt;
KIO::file_delete(const KURL &amp;amp;amp;url, bool showProgressInfo)&lt;br /&gt;
:Deletes a single file.&lt;br /&gt;
KIO::listDir(const KURL &amp;amp;amp;url, bool showProgressInfo)&lt;br /&gt;
:Lists the contents of a directory. Each time some new entries are known, the signal KIO::ListJob::entries() is emitted.&lt;br /&gt;
KIO::listRecursive(const KURL &amp;amp;amp;url, bool showProgressInfo)&lt;br /&gt;
:Similar to the listDir() function, but this one is recursive.&lt;br /&gt;
KIO::copy(const KURL &amp;amp;amp;src, const KURL &amp;amp;amp;dest, bool showProgressInfo)&lt;br /&gt;
:Copies a file or directory. Directories are copied recursively.&lt;br /&gt;
KIO::move(const KURL &amp;amp;amp;src, const KURL &amp;amp;amp;dest, bool showProgressInfo)&lt;br /&gt;
:Moves or renames a file or directory.&lt;br /&gt;
KIO::del(const KURL &amp;amp;amp;src, bool shred, bool showProgressInfo)&lt;br /&gt;
:Deletes a file or directory.&lt;br /&gt;
&lt;br /&gt;
== Directory entries ==&lt;br /&gt;
&lt;br /&gt;
Both the KIO::stat() and KIO::listDir() jobs return their results as a type&lt;br /&gt;
UDSEntry, UDSEntryList resp. The latter is defined as QValueList&amp;amp;lt;UDSEntry&amp;amp;gt;.&lt;br /&gt;
The acronym UDS stands for &amp;quot;Universal directory service&amp;quot;. The principle behind &lt;br /&gt;
it is that the a directory entry only carries the information which an ioslave&lt;br /&gt;
can provide, not more. For example, the http slave does not provide any &lt;br /&gt;
information about access permissions or file owners.&lt;br /&gt;
Instead, a UDSEntry is a list of UDSAtoms. Each atom provides a specific piece&lt;br /&gt;
of information. It consists of a type stored in m_uds and either an integer&lt;br /&gt;
value in m_long or a string value in m_str, depending on the type.&lt;br /&gt;
&lt;br /&gt;
The following types are currently defined:&lt;br /&gt;
&lt;br /&gt;
*UDS_SIZE (integer) - Size of the file.&lt;br /&gt;
*UDS_USER (string) - User owning the file.&lt;br /&gt;
*UDS_GROUP (string) - Group owning the file.&lt;br /&gt;
*UDS_NAME (string) - File name.&lt;br /&gt;
*UDS_ACCESS (integer) - Permission rights of the file, as e.g. stored by the libc function stat() in the st_mode field.&lt;br /&gt;
*UDS_FILE_TYPE (integer) - The file type, as e.g. stored by stat() in the st_mode field. Therefore you can use the usual libc macros like S_ISDIR to test this value. Note that the data provided by ioslaves corresponds to stat(), not lstat(), i.e. in case of symbolic links, the file type here is the type of the file pointed to by the link, not the link itself.&lt;br /&gt;
*UDS_LINK_DEST (string) - In case of a symbolic link, the name of the file pointed to.&lt;br /&gt;
*UDS_MODIFICATION_TIME (integer) - The time (as in the type time_t)  when the file was last modified, as e.g. stored by stat() in the st_mtime field.&lt;br /&gt;
*UDS_ACCESS_TIME (integer) - The time when the file was last accessed, as e.g. stored by stat() in the st_atime field.&lt;br /&gt;
*UDS_CREATION_TIME (integer) - The time when the file was created, as e.g. stored by stat() in the st_ctime field.&lt;br /&gt;
*UDS_URL (string) - Provides a URL of a file, if it is not simply the the concatenation of directory URL and file name.&lt;br /&gt;
*UDS_MIME_TYPE (string) - MIME type of the file&lt;br /&gt;
*UDS_GUESSED_MIME_TYPE (string) - MIME type of the file as guessed by the slave. The difference to the previous type is that the one provided here should not be taken as reliable (because determining it in a reliable way would be too expensive). For example, the KRun class explicitly checks the MIME type if it does not have reliable information.&lt;br /&gt;
&lt;br /&gt;
Although the way of storing information about files in a UDSEntry is flexible&lt;br /&gt;
and practical from the ioslave point of view, it is a mess to use for the&lt;br /&gt;
application programmer. For example, in order to find out the MIME type of&lt;br /&gt;
the file, you have to iterate over all atoms and test whether m_uds is&lt;br /&gt;
UDS_MIME_TYPE. Fortunately, there is an API which is a lot easier to use:&lt;br /&gt;
the class KFileItem.&lt;br /&gt;
&lt;br /&gt;
== Synchronous usage ==&lt;br /&gt;
&lt;br /&gt;
Often, the asynchronous API of KIO is too complex to use and therefore &lt;br /&gt;
implementing full asynchronicity is not a priority. For example, in a program &lt;br /&gt;
that can only handle one document file at a time, there is little that can be&lt;br /&gt;
done while the program is downloading a file anyway. For these simple cases, &lt;br /&gt;
there is a mucher simpler API in the form of a set of static functions in&lt;br /&gt;
KIO::NetAccess. For example, in order to copy a file, use&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code cppqt3&amp;gt;&lt;br /&gt;
KURL source, target;&lt;br /&gt;
source = ...;&lt;br /&gt;
target = ...&lt;br /&gt;
KIO::NetAccess::copy(source, target);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The function will return after the complete copying process has finished. Still,&lt;br /&gt;
this method provides a progress dialog, and it makes sure that the application&lt;br /&gt;
processes repaint events.&lt;br /&gt;
&lt;br /&gt;
A particularly interesting combination of functions is download() in combination&lt;br /&gt;
with removeTempFile(). The former downloads a file from given URL and stores it&lt;br /&gt;
in a temporary file with a unique name. The name is stored in the second argument.&lt;br /&gt;
''If'' the URL is local, the file is not downloaded, and instead the second&lt;br /&gt;
argument is set to the local file name. The function removeTempFile() deletes the&lt;br /&gt;
file given by its argument if the file is the result of a former download. &lt;br /&gt;
If that is not the case, it does nothing. Thus, a very easy to use way of loading&lt;br /&gt;
files regardless of their location is the following code snippet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code cppqt3&amp;gt;&lt;br /&gt;
KURL url;&lt;br /&gt;
url = ...;&lt;br /&gt;
QString tempFile;&lt;br /&gt;
if (KIO::NetAccess::download(url, tempFile) {&lt;br /&gt;
    // load the file with the name tempFile&lt;br /&gt;
    KIO::NetAccess::removeTempFile(tempFile);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Meta data ==&lt;br /&gt;
&lt;br /&gt;
As can be seen above, the interface to IO jobs is quite abstract and does not&lt;br /&gt;
consider any exchange of information between application and IO slave that&lt;br /&gt;
is protocol specific. This is not always appropriate. For example, you may give&lt;br /&gt;
certain parameters to the HTTP slave to control its caching behavior or&lt;br /&gt;
send a bunch of cookies with the request. For this need, the concept of meta&lt;br /&gt;
data has been introduced. When a job is created, you can configure it by adding&lt;br /&gt;
meta data to it. Each item of meta data consists of a key/value pair. For&lt;br /&gt;
example, in order to prevent the HTTP slave from loading a web page from its&lt;br /&gt;
cache, you can use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code cppqt3&amp;gt;&lt;br /&gt;
void FooClass::reloadPage()&lt;br /&gt;
{&lt;br /&gt;
    KURL url(&amp;quot;http://www.kdevelop.org/index.html&amp;quot;);&lt;br /&gt;
    KIO::TransferJob *job = KIO::get(url, true, false);&lt;br /&gt;
    job-&amp;gt;addMetaData(&amp;quot;cache&amp;quot;, &amp;quot;reload&amp;quot;);&lt;br /&gt;
    ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The same technique is used in the other direction, i.e. for communication from&lt;br /&gt;
the slave to the application. The method Job::queryMetaData() asks for the&lt;br /&gt;
value of the certain key delivered by the slave. For the HTTP slave, one such&lt;br /&gt;
example is the key &amp;quot;modified&amp;quot;, which contains a (stringified representation of)&lt;br /&gt;
the date when the web page was last modified. An example how you can use this&lt;br /&gt;
is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code cppqt3&amp;gt;&lt;br /&gt;
void FooClass::printModifiedDate()&lt;br /&gt;
{&lt;br /&gt;
    KURL url(&amp;quot;http://www.kde.org&amp;quot;);&lt;br /&gt;
    KIO::TransferJob *job = KIO::get(url, true, false);&lt;br /&gt;
    connect( job, SIGNAL(result(KIO::Job*)),&lt;br /&gt;
             this, SLOT(transferResult(KIO::Job*)) );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void FooClass::transferResult(KIO::Job *job)&lt;br /&gt;
{&lt;br /&gt;
    QString mimetype;&lt;br /&gt;
    if (job-&amp;gt;error())&lt;br /&gt;
        job-&amp;gt;showErrorDialog();&lt;br /&gt;
    else {&lt;br /&gt;
        KIO::TransferJob *transferJob = (KIO::TransferJob*) job;&lt;br /&gt;
        QString modified = transferJob-&amp;gt;queryMetaData(&amp;quot;modified&amp;quot;);&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Last modified: &amp;quot; &amp;lt;&amp;lt; modified &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scheduling ==&lt;br /&gt;
&lt;br /&gt;
When using the KIO API, you usually do not have to cope with the details of&lt;br /&gt;
starting IO slaves and communicating with them. The normal use case is to&lt;br /&gt;
start a job and with some parameters and handle the signals the jobs emits.&lt;br /&gt;
&lt;br /&gt;
Behind the curtains, the scenario is a lot more complicated. When you create a&lt;br /&gt;
job, it is put in a queue. When the application goes back to the event loop,&lt;br /&gt;
KIO allocates slave processes for the jobs in the queue.  For the first jobs&lt;br /&gt;
started, this is trivial: an IO slave for the appropriate protocol is started.&lt;br /&gt;
However, after the job (like a download from an http server) has finished, it&lt;br /&gt;
is not immediately killed. Instead, it is put in a pool of idle slaves and&lt;br /&gt;
killed after a certain time of inactivity (current 3 minutes). If a new request&lt;br /&gt;
for the same protocol and host arrives, the slave is reused. The obvious &lt;br /&gt;
advantage is that for a series of jobs for the same host, the cost for creating&lt;br /&gt;
new processes and possibly going through an authentication handshake is saved.&lt;br /&gt;
&lt;br /&gt;
Of course, reusing is only possible when the existing slave has already finished&lt;br /&gt;
its previous job. when a new request arrives while an existing slave process is &lt;br /&gt;
still running, a new process must be started and used. In the API usage in the&lt;br /&gt;
examples above, there are no limitation for creating new slave processes: if you&lt;br /&gt;
start a consecutive series of downloads for 20 different files, then KIO will &lt;br /&gt;
start 20 slave processes. This scheme of assigning slaves to jobs is called &lt;br /&gt;
''direct''. It  not always the most appropriate scheme, as it may need much&lt;br /&gt;
memory and put a high load on both the client and server machines.&lt;br /&gt;
&lt;br /&gt;
So there is a different way. You can ''schedule'' jobs. If you do this, only&lt;br /&gt;
a limited number (currently 3) of slave processes for a protocol will be &lt;br /&gt;
created. If you create more jobs than that, they are put in a queue and &lt;br /&gt;
are processed when a slave process becomes idle. This is done as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code cppqt3&amp;gt;&lt;br /&gt;
KURL url(&amp;quot;http://www.kde.org&amp;quot;);&lt;br /&gt;
KIO::TransferJob *job = KIO::get(url, true, false);&lt;br /&gt;
KIO::Scheduler::scheduleJob(job);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A third possibility is ''connection oriented''. For example, for the IMAP &lt;br /&gt;
slave, it does not make any sense to start multiple processes for the same&lt;br /&gt;
server. Only one IMAP connection at a time should be enforced. In this case,&lt;br /&gt;
the application must explicitly deal with the notion of a slave. It has to&lt;br /&gt;
allocate a slave for a certain connection and then assign all jobs which &lt;br /&gt;
should go through the same connection to the same slave. This can again be&lt;br /&gt;
easily achieved by using the KIO::Scheduler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code cppqt3&amp;gt;&lt;br /&gt;
KURL baseUrl(&amp;quot;imap://bernd@albert.physik.hu-berlin.de&amp;quot;);&lt;br /&gt;
KIO::Slave *slave = KIO::Scheduler::getConnectedSlave(baseUrl);&lt;br /&gt;
&lt;br /&gt;
KIO::TransferJob *job1 = KIO::get(KURL(baseUrl, &amp;quot;/INBOX;UID=79374&amp;quot;));&lt;br /&gt;
KIO::Scheduler::assignJobToSlave(slave, job1);&lt;br /&gt;
&lt;br /&gt;
KIO::TransferJob *job2 = KIO::get(KURL(baseUrl, &amp;quot;/INBOX;UID=86793&amp;quot;));&lt;br /&gt;
KIO::Scheduler::assignJobToSlave(slave, job2);&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
KIO::Scheduler::disconnectSlave(slave);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may only disconnect the slave after all jobs assigned to it are guaranted&lt;br /&gt;
to be finished.&lt;br /&gt;
&lt;br /&gt;
== Defining an ioslave ==&lt;br /&gt;
&lt;br /&gt;
In the following we discuss how you can add a new ioslave to the system.&lt;br /&gt;
In analogy to services, new ioslaves are advertised to the system by&lt;br /&gt;
installing a little configuration file. The following Makefile.am&lt;br /&gt;
snippet installs the ftp protocol:&lt;br /&gt;
&lt;br /&gt;
 protocoldir = $(kde_servicesdir)&lt;br /&gt;
 protocol_DATA = ftp.protocol&lt;br /&gt;
 EXTRA_DIST = $(mime_DATA)&lt;br /&gt;
&lt;br /&gt;
The contents of the file ftp.protocol is as follows:&lt;br /&gt;
&lt;br /&gt;
 [Protocol]&lt;br /&gt;
 exec=kio_ftp&lt;br /&gt;
 protocol=ftp&lt;br /&gt;
 input=none&lt;br /&gt;
 output=filesystem&lt;br /&gt;
 listing=Name,Type,Size,Date,Access,Owner,Group,Link,&lt;br /&gt;
 reading=true&lt;br /&gt;
 writing=true&lt;br /&gt;
 makedir=true&lt;br /&gt;
 deleting=true&lt;br /&gt;
 Icon=ftp&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;protocol&amp;quot; entry defines for which protocol this slave is responsible. &lt;br /&gt;
&amp;quot;exec&amp;quot; is (in contrast what you would expect naively) the name of the library &lt;br /&gt;
that implements the slave. When the slave is supposed to start, the &amp;quot;kdeinit&amp;quot; &lt;br /&gt;
executable is started which in turn loads this library into its address space.&lt;br /&gt;
So in practice, you can think of the running slave as a separate process &lt;br /&gt;
although it is implemented as library. The advantage of this mechanism is that &lt;br /&gt;
it saves a lot of memory and  reduces the time needed by the runtime linker.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;input&amp;quot; and &amp;quot;output&amp;quot; lines are not used currently.&lt;br /&gt;
&lt;br /&gt;
The remaining lines in the &amp;lt;tt&amp;gt;.protocol&amp;lt;/tt&amp;gt; file define which abilities the &lt;br /&gt;
slave has. In general, the features a slave must implement are much simpler than &lt;br /&gt;
the features the KIO API provides for the application. The reason for this is &lt;br /&gt;
that complex jobs are scheduled to a couple of subjobs. For example, in order to&lt;br /&gt;
list a directory recursively, one job will be started for the toplevel &lt;br /&gt;
directory. Then for each subdirectory reported back, new subjobs are started. A &lt;br /&gt;
scheduler in KIO makes sure that not too many jobs are active at the same time.&lt;br /&gt;
Similarly, in order to copy a file within a protocol that does not support &lt;br /&gt;
copying directly (like the ftp: protocol), KIO can read the source file and then &lt;br /&gt;
write the data to the destination file. For this to work, the &amp;lt;tt&amp;gt;.protocol&amp;lt;/tt&amp;gt;&lt;br /&gt;
must advertise the actions its slave supports.&lt;br /&gt;
&lt;br /&gt;
Since slaves are loaded as shared libraries, but constitute standalone programs,&lt;br /&gt;
their code framework looks a bit different from normal shared library plugins.&lt;br /&gt;
The function which is called to start the slave is called kdemain(). This &lt;br /&gt;
function does some initializations and then goes into an event loop and waits&lt;br /&gt;
for requests by the application using it. This looks as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code cppqt3&amp;gt;&lt;br /&gt;
extern &amp;quot;C&amp;quot; { int kdemain(int argc, char **argv); }&lt;br /&gt;
&lt;br /&gt;
int kdemain(int argc, char **argv)&lt;br /&gt;
{&lt;br /&gt;
    KLocale::setMainCatalogue(&amp;quot;kdelibs&amp;quot;);&lt;br /&gt;
    KInstance instance(&amp;quot;kio_ftp&amp;quot;);&lt;br /&gt;
    (void) KGlobal::locale();&lt;br /&gt;
&lt;br /&gt;
    if (argc != 4) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;Usage: kio_ftp protocol &amp;quot;&lt;br /&gt;
                        &amp;quot;domain-socket1 domain-socket2\n&amp;quot;);&lt;br /&gt;
        exit(-1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    FtpSlave slave(argv[2], argv[3]);&lt;br /&gt;
    slave.dispatchLoop();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Implementing an ioslave ==&lt;br /&gt;
&lt;br /&gt;
Slaves are implemented as subclasses of KIO::SlaveBase (FtpSlave in the above &lt;br /&gt;
example). Thus, the actions listed in the {{path|.protocol}} correspond to&lt;br /&gt;
certain virtual functions in KIO::SlaveBase the slave implementation must &lt;br /&gt;
reimplement. Here is a list of possible actions and the corresponding virtual &lt;br /&gt;
functions:&lt;br /&gt;
&lt;br /&gt;
;reading - Reads data from a URL&lt;br /&gt;
:void get(const KURL &amp;amp;url)&lt;br /&gt;
;writing - Writes data to a URL and create the file if it does not exist yet.&lt;br /&gt;
:void put(const KURL &amp;amp;url, int permissions, bool overwrite, bool resume)&lt;br /&gt;
;moving - Renames a file.&lt;br /&gt;
:void rename(const KURL &amp;amp;src, const KURL &amp;amp;dest, bool overwrite)&lt;br /&gt;
;deleting - Deletes a file or directory.&lt;br /&gt;
:void del(const KURL &amp;amp;url, bool isFile)&lt;br /&gt;
;listing - Lists the contents of a directory.&lt;br /&gt;
:void listDir(const KURL &amp;amp;url)&lt;br /&gt;
;makedir - Creates a directory.;&lt;br /&gt;
:void mkdir(const KURL &amp;amp;url, int permissions)&lt;br /&gt;
&lt;br /&gt;
Additionally, there are reimplementable functions not listed in the &amp;lt;tt&amp;gt;.protocol&amp;lt;/tt&amp;gt;&lt;br /&gt;
file. For these operations, KIO automatically determines whether they are supported&lt;br /&gt;
or not (i.e. the default implementation returns an error).&lt;br /&gt;
&lt;br /&gt;
;Delivers information about a file, similar to the C function stat().&lt;br /&gt;
:void stat(const KURL &amp;amp;url)&lt;br /&gt;
;Changes the access permissions of a file.&lt;br /&gt;
:void chmod(const KURL &amp;amp;url, int permissions)&lt;br /&gt;
;Determines the MIME type of a file.&lt;br /&gt;
:void mimetype(const KURL &amp;amp;url)&lt;br /&gt;
;Copies a file.&lt;br /&gt;
:copy(const KURL &amp;amp;url, const KURL &amp;amp;dest, int permissions, bool overwrite)&lt;br /&gt;
;Creates a symbolic link.&lt;br /&gt;
:void symlink(const QString &amp;amp;target, const KURL &amp;amp;dest, bool overwrite)&lt;br /&gt;
&lt;br /&gt;
All these implementation should end with one of two calls: If the operation&lt;br /&gt;
was successful, they should call &amp;lt;tt&amp;gt;finished()&amp;lt;/tt&amp;gt;. If an error has occured,&lt;br /&gt;
&amp;lt;tt&amp;gt;error()&amp;lt;/tt&amp;gt; should be called with an error code as first argument and a&lt;br /&gt;
string in the second. Possible error codes are listed as enum KIO::Error. The&lt;br /&gt;
second argument is usually the URL in question. It is used e.g. in &lt;br /&gt;
KIO::Job::showErrorDialog() in order to parametrize the human-readable error&lt;br /&gt;
message.&lt;br /&gt;
&lt;br /&gt;
For slaves that correspond to network protocols, it might be interesting to &lt;br /&gt;
reimplement the method SlaveBase::setHost(). This is called to tell the slave&lt;br /&gt;
process about the host and port, and the user name and password to log in.&lt;br /&gt;
In general, meta data set by the application can be queried by SlaveBase::metaData().&lt;br /&gt;
You can check for the existence of meta data of a certain key with&lt;br /&gt;
SlaveBase::hasMetaData().&lt;br /&gt;
&lt;br /&gt;
== Communicating back to the application ==&lt;br /&gt;
&lt;br /&gt;
Various actions implemented in a slave need some way to communicate data back&lt;br /&gt;
to the application using the slave process:&lt;br /&gt;
&lt;br /&gt;
*get() sends blocks of data. This is done with data(), which takes a QByteArray as argument. Of course, you do not need to send all data at once. If you send a large file, call data() with smaller data blocks, so the application can process them. Call finished() when the transfer is finished.&lt;br /&gt;
&lt;br /&gt;
*listDir() reports information about the entries of a directory. For this purpose, call listEntries() with a KIO::UDSEntryList as argument. Analogously to data(), you can call this several times. When you are finished, call listEntry() with the second argument set to true. You may also call totalSize() to report the total number of directory entries, if known.&lt;br /&gt;
&lt;br /&gt;
*stat() reports information about a file like size, MIME type, etc. Such information is packaged in a KIO::UDSEntry, which will be discussed below. Use statEntry() to send such an item to the application.&lt;br /&gt;
&lt;br /&gt;
*mimetype() calls mimeType() with a string argument.&lt;br /&gt;
&lt;br /&gt;
*get() and copy() may want to provide progress information. This is done with the methods totalSize(), processedSize(), speed(). The total size and processed size are reported as bytes, the speed as bytes per second.&lt;br /&gt;
&lt;br /&gt;
*You can send arbitrary key/value pairs of meta data with setMetaData().&lt;br /&gt;
&lt;br /&gt;
== Interacting with the user ==&lt;br /&gt;
&lt;br /&gt;
Sometimes a slave has to interact with the user. Examples include informational&lt;br /&gt;
messages, authentication dialogs and confirmation dialogs when a file is about&lt;br /&gt;
to be overwritten.&lt;br /&gt;
&lt;br /&gt;
*infoMessage() - This is for informational feedback, such as the message &amp;quot;Retrieving data from &amp;amp;lt;host&amp;amp;gt;&amp;quot; from the http slave, which is often displayed in the status bar of the program. On the application side, this method corresponds to the signal KIO::Job::infoMessage().&lt;br /&gt;
*warning() - Displays a warning in a message box with KMessageBox::information(). If a message box is still open from a former call of warning() from the same slave process, nothing happens.&lt;br /&gt;
*messageBox() - This is richer than the previous method. It allows to open a message box with text and caption and some buttons. See the enum SlaveBase::MessageBoxType for reference.&lt;br /&gt;
*openPassDlg() - Opens a dialog for the input of user name and password.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Initial Author:'' [mailto:bernd@kdevelop.org Bernd Gehrmann]&lt;br /&gt;
&lt;br /&gt;
[[Category:KDE3]]&lt;br /&gt;
[[Category:Architecture]]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Chani/GettingStarted</id>
		<title>User:Chani/GettingStarted</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Chani/GettingStarted"/>
				<updated>2008-02-02T12:49:21Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: Add more links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A quick intro for potential plasma contributors (kdebase and maybe extragear, not playground or other locations)&lt;br /&gt;
&lt;br /&gt;
*Plasma uses kdelibs coding style. there's a file somewhere in svn that makes vim follow this automatically. I know there was a page explaining it, so why can't I find it?  (I think its this one; [http://websvn.kde.org/trunk/KDE/kdesdk/scripts/kde-devel-vim.vim?view=log kde-devel.vim] [[User:Zander|Zander]] 13:46, 2 February 2008 (CET))&lt;br /&gt;
*if a patch is nontrivial, please get it reviewed before committing. best place to do that is http://matt.rogers.name/dashboard/&lt;br /&gt;
*mailing list is panel-devel [http://mail.kde.org/mailman/listinfo/panel-devel subcribe] [http://lists.kde.org/?l=kde-panel-devel&amp;amp;r=1&amp;amp;w=2 archives]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Chani/GettingStarted</id>
		<title>User:Chani/GettingStarted</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Chani/GettingStarted"/>
				<updated>2008-02-02T12:46:12Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: add link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A quick intro for potential plasma contributors (kdebase and maybe extragear, not playground or other locations)&lt;br /&gt;
&lt;br /&gt;
*Plasma uses kdelibs coding style. there's a file somewhere in svn that makes vim follow this automatically. I know there was a page explaining it, so why can't I find it?  (I think its this one; [http://websvn.kde.org/trunk/KDE/kdesdk/scripts/kde-devel-vim.vim?view=log kde-devel.vim] [[User:Zander|Zander]] 13:46, 2 February 2008 (CET))&lt;br /&gt;
*if a patch is nontrivial, please get it reviewed before committing. best place to do that is http://matt.rogers.name/dashboard/&lt;br /&gt;
*mailing list is panel-devel (iirc it's harder to find than other kde lists... what's the url?)&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Oxygen/StyleWinDec</id>
		<title>Projects/Oxygen/StyleWinDec</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Oxygen/StyleWinDec"/>
				<updated>2007-12-01T21:17:54Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: Incoming; this one was lost somehow.  :(  Maybe we should move this to bugzilla&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current Oxygen style and window decoration for KDE4 can be found in SVN under http://websvn.kde.org/trunk/KDE/kdebase/runtime/kstyles/oxygen and http://websvn.kde.org/trunk/KDE/kdebase/workspace/kwin/clients/oxygen&lt;br /&gt;
&lt;br /&gt;
== Visitors ==&lt;br /&gt;
Add new bugs to [[#Incoming_New_Bugs|Incoming New Bugs]], and we (the developers) will move it down and prioritize.&lt;br /&gt;
&lt;br /&gt;
Note: we may move invalid bugs may be moved to the discussion page, along with a reason why they won't be fixed [by us].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;DO NOT EDIT OTHER SECTIONS WITHOUT PERMISSION&amp;lt;/b&amp;gt;. This page has now been protected due to unauthorized edits. If you need to leave a comment anonymously, do it on the discussion page and/or talk to us on #oxygen.&lt;br /&gt;
&lt;br /&gt;
== Incoming New Bugs ==&lt;br /&gt;
* When the tabbar has many tabs, so that not all of them can be shown at once, arrow buttons are drawn to navigate to the other tabs. These arrows are painted incorrectly, see [http://bugs.kde.org/show_bug.cgi?id=152327 this bug report].&lt;br /&gt;
* An icon set on a [Q]PushButton is not drawn respecting QAbstractButton::abstractSize() - look at the user pic selector in kcmshell4 kdm-&amp;gt;Users.&lt;br /&gt;
* On a menu, it is not possible to see which menu is actually active.&lt;br /&gt;
::See [http://bugs.kde.org/show_bug.cgi?id=152123 this bug report]&lt;br /&gt;
* In Beta4, it seems that the WinDeco doesn't yet get the color scheme from the kcm color module. i.e., changing the active/inactive window colors doesn't seem to actually work.&lt;br /&gt;
* In (double) spinboxes the font is positioned one pixel too high. Lowering it one makes it baseline-aligned with labels in front. &amp;lt;b&amp;gt;Unfortunately not possible &amp;lt;/b&amp;gt;&lt;br /&gt;
: what about altering the size hints so the whole widget moves down? Trouble is we want them to be the same size as editable comboboxes and lineedits and buttons so those line up. The 1px wrong placement of text is a qt weirdness that gives visual bugs when we try to work around it - believe me - I've spent several hours on this.&lt;br /&gt;
* The ok and cancel buttons on dialogs (so called 'control buttons') don't have the same width. &amp;lt;b&amp;gt;Not a style problem &amp;lt;/b&amp;gt;&lt;br /&gt;
* Centered group titles pose several problems. Left align group titles instead. See Discussion for more details.&lt;br /&gt;
* Window decoration scales the menu icons down resulting in the icons blurring. Interestingly in the kwindecoration kcmshell the preview shows the 16x16/mimetypes/unknown.png icon at its correct 16x16 size, but as soon as the use the deco for real, it starts blurring them. (This is also true for KDE4's Plastik deco). [[User:Djmdave|Djmdave]] 22:26, 28 October 2007 (CET)&lt;br /&gt;
* Dockers; the title is positioned too far to the left and it runs into the rounded-border&lt;br /&gt;
&lt;br /&gt;
== Known Bugs ==&lt;br /&gt;
* tabs&lt;br /&gt;
** east and west aren't done at all &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
** small glitches in filling inactive tabs &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
** tab bar edge should extend full length of widget &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* Dockers&lt;br /&gt;
** frame when floating should have rounded corners &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* KHTML integration&lt;br /&gt;
** khtml makes illegal assumptions about buttons. Awaits patch review by Maxim &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;quot;flat&amp;quot; buttons drawn same as regular buttons &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* KLineEdit&lt;br /&gt;
** stylesheets ruin the look. Aseigo says to wait for qt fix &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* Holes in general&lt;br /&gt;
** need bigger margins so shadow/glow are not lost?&lt;br /&gt;
** fix non-rounded corners when filling (at least) lineedits &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
** with autoFillBackground, corners are overpainted (how to fix this??) &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* QToolBox not drawn &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* need to audit color role use (see QA #3) &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* Reverse layout is broken&lt;br /&gt;
** listview,tablevies paint the frame in LTR place Qt issue 137304 &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* progress bars still not like the artist wants &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* menus not done &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
** KMenu::addTitle() adds a widget action to display a title in a popup menu. This is not specific to Oxygen, but the widget it creates could use some polishing. (to see this, right click any icon in the system tray)&lt;br /&gt;
* windeco&lt;br /&gt;
** corners should really be alpha transparent &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* should repaint on globalChange signal (how?) &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
** this seems to only be a problem for the colors kcm, may not even be a style bug&lt;br /&gt;
*headers in tables&lt;br /&gt;
**not really done - but the plain color look is acceptable for now &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* checkboxes in Q3ListView (Kontact-ToDo) are broken &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* Groupboxes&lt;br /&gt;
** does not report a minimum size that allows it to show the text on the box. I.e. a groupbox with no contents, the groupbox-title is clipped. &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* Buttons on KNewStuff download dialog do not appear&lt;br /&gt;
&lt;br /&gt;
== QA ==&lt;br /&gt;
* reverse layout&lt;br /&gt;
* high-contrast color schemes (i.e. all fg/bg black or white)&lt;br /&gt;
* reverse-light/dark color schemes (e.g. light-on-dark buttons with dark-on-light views, etc.)&lt;br /&gt;
* tabs, in all directions&lt;br /&gt;
* no gray space between scrollbar and the text area it controls.&lt;br /&gt;
* sliders, scrollbars, progress - in all orientations and good cross section of values&lt;br /&gt;
* content padding works for all controls, does not break sizeToContents functionality&lt;br /&gt;
* controls align nicely and controls that should be the same size, are&lt;br /&gt;
* no obvious glitches in uidemo&lt;br /&gt;
&lt;br /&gt;
[[Category:Artwork]][[Category:Oxygen]]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Oxygen/StyleWinDec</id>
		<title>Projects/Oxygen/StyleWinDec</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Oxygen/StyleWinDec"/>
				<updated>2007-12-01T21:12:27Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: icon != indicator&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current Oxygen style and window decoration for KDE4 can be found in SVN under http://websvn.kde.org/trunk/KDE/kdebase/runtime/kstyles/oxygen and http://websvn.kde.org/trunk/KDE/kdebase/workspace/kwin/clients/oxygen&lt;br /&gt;
&lt;br /&gt;
== Visitors ==&lt;br /&gt;
Add new bugs to [[#Incoming_New_Bugs|Incoming New Bugs]], and we (the developers) will move it down and prioritize.&lt;br /&gt;
&lt;br /&gt;
Note: we may move invalid bugs may be moved to the discussion page, along with a reason why they won't be fixed [by us].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;DO NOT EDIT OTHER SECTIONS WITHOUT PERMISSION&amp;lt;/b&amp;gt;. This page has now been protected due to unauthorized edits. If you need to leave a comment anonymously, do it on the discussion page and/or talk to us on #oxygen.&lt;br /&gt;
&lt;br /&gt;
== Incoming New Bugs ==&lt;br /&gt;
* When the tabbar has many tabs, so that not all of them can be shown at once, arrow buttons are drawn to navigate to the other tabs. These arrows are painted incorrectly, see [http://bugs.kde.org/show_bug.cgi?id=152327 this bug report].&lt;br /&gt;
* An icon set on a [Q]PushButton is not drawn respecting QAbstractButton::abstractSize() - look at the user pic selector in kcmshell4 kdm-&amp;gt;Users.&lt;br /&gt;
* On a menu, it is not possible to see which menu is actually active.&lt;br /&gt;
::See [http://bugs.kde.org/show_bug.cgi?id=152123 this bug report]&lt;br /&gt;
* In Beta4, it seems that the WinDeco doesn't yet get the color scheme from the kcm color module. i.e., changing the active/inactive window colors doesn't seem to actually work.&lt;br /&gt;
* In (double) spinboxes the font is positioned one pixel too high. Lowering it one makes it baseline-aligned with labels in front. &amp;lt;b&amp;gt;Unfortunately not possible &amp;lt;/b&amp;gt;&lt;br /&gt;
: what about altering the size hints so the whole widget moves down? Trouble is we want them to be the same size as editable comboboxes and lineedits and buttons so those line up. The 1px wrong placement of text is a qt weirdness that gives visual bugs when we try to work around it - believe me - I've spent several hours on this.&lt;br /&gt;
* The ok and cancel buttons on dialogs (so called 'control buttons') don't have the same width. &amp;lt;b&amp;gt;Not a style problem &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Centered group titles pose several problems. Left align group titles instead. See Discussion for more details.&lt;br /&gt;
&lt;br /&gt;
* Window decoration scales the menu icons down resulting in the icons blurring. Interestingly in the kwindecoration kcmshell the preview shows the 16x16/mimetypes/unknown.png icon at its correct 16x16 size, but as soon as the use the deco for real, it starts blurring them. (This is also true for KDE4's Plastik deco). [[User:Djmdave|Djmdave]] 22:26, 28 October 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
== Known Bugs ==&lt;br /&gt;
* tabs&lt;br /&gt;
** east and west aren't done at all &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
** small glitches in filling inactive tabs &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
** tab bar edge should extend full length of widget &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* Dockers&lt;br /&gt;
** frame when floating should have rounded corners &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* KHTML integration&lt;br /&gt;
** khtml makes illegal assumptions about buttons. Awaits patch review by Maxim &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;quot;flat&amp;quot; buttons drawn same as regular buttons &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* KLineEdit&lt;br /&gt;
** stylesheets ruin the look. Aseigo says to wait for qt fix &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* Holes in general&lt;br /&gt;
** need bigger margins so shadow/glow are not lost?&lt;br /&gt;
** fix non-rounded corners when filling (at least) lineedits &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
** with autoFillBackground, corners are overpainted (how to fix this??) &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* QToolBox not drawn &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* need to audit color role use (see QA #3) &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* Reverse layout is broken&lt;br /&gt;
** listview,tablevies paint the frame in LTR place Qt issue 137304 &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* progress bars still not like the artist wants &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* menus not done &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
** KMenu::addTitle() adds a widget action to display a title in a popup menu. This is not specific to Oxygen, but the widget it creates could use some polishing. (to see this, right click any icon in the system tray)&lt;br /&gt;
* windeco&lt;br /&gt;
** corners should really be alpha transparent &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* should repaint on globalChange signal (how?) &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
** this seems to only be a problem for the colors kcm, may not even be a style bug&lt;br /&gt;
*headers in tables&lt;br /&gt;
**not really done - but the plain color look is acceptable for now &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* checkboxes in Q3ListView (Kontact-ToDo) are broken &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* Groupboxes&lt;br /&gt;
** does not report a minimum size that allows it to show the text on the box. I.e. a groupbox with no contents, the groupbox-title is clipped. &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* Buttons on KNewStuff download dialog do not appear&lt;br /&gt;
&lt;br /&gt;
== QA ==&lt;br /&gt;
* reverse layout&lt;br /&gt;
* high-contrast color schemes (i.e. all fg/bg black or white)&lt;br /&gt;
* reverse-light/dark color schemes (e.g. light-on-dark buttons with dark-on-light views, etc.)&lt;br /&gt;
* tabs, in all directions&lt;br /&gt;
* no gray space between scrollbar and the text area it controls.&lt;br /&gt;
* sliders, scrollbars, progress - in all orientations and good cross section of values&lt;br /&gt;
* content padding works for all controls, does not break sizeToContents functionality&lt;br /&gt;
* controls align nicely and controls that should be the same size, are&lt;br /&gt;
* no obvious glitches in uidemo&lt;br /&gt;
&lt;br /&gt;
[[Category:Artwork]][[Category:Oxygen]]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Schedules/KDE4/4.0_Upstream_Issues</id>
		<title>Schedules/KDE4/4.0 Upstream Issues</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Schedules/KDE4/4.0_Upstream_Issues"/>
				<updated>2007-12-01T17:40:38Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Qt4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Box|Upstream Issues HotList|Listed below are various upstream issues that are considered release critical problems. This is not a bug tracker or meant to supplant one, but to keep a running tally of open upstream issues we need to address for KDE4 releases.}}&lt;br /&gt;
&lt;br /&gt;
== Qt4 ==&lt;br /&gt;
* '''Problem''': CSS currently resets fonts in widgets when used, making it very difficult to use with widgets where fonts are set programmatically as done throughout KDE.&lt;br /&gt;
** Affects: All widgets using CSS, such as the Konqueror location bar when using CSS to set an offset for the clear button.&lt;br /&gt;
** Solution: Pending; perhaps a CSS value (font: QWidget?) that prevents the style sheet from resetting fonts outside of what the widget is doing. Can be done currently on a case-by-case basis by overriding changeEvent, intercepting font changes and updating CSS strings containing the font desired; this is error prone (easy to trigger infinite loops) and seems sub-optimal.&lt;br /&gt;
** Status: upstream is investigating solutions.&lt;br /&gt;
&lt;br /&gt;
* '''Problem''': Designer converts WhatsThis text to richtext blocks&lt;br /&gt;
** Affects: translators who get opaque blocks of html code&lt;br /&gt;
** Solution: None yet&lt;br /&gt;
** Status: Fixed for Qt4.4, patch being reviewed for qt-copy&lt;br /&gt;
** [http://trolltech.com/developer/task-tracker/index_html?id=187205&amp;amp;method=entry Upstream tracker link]&lt;br /&gt;
&lt;br /&gt;
== Xine ==&lt;br /&gt;
* '''Problem''': short Oggs are not played properly&lt;br /&gt;
** Affects: Phonon playing short sounds, therefore all audio notification in KDE&lt;br /&gt;
** Solution: Patch being worked on by Matthias Kretz, needs to be upstreamed to libxine&lt;br /&gt;
** Status: Pending patch completion and approval&lt;br /&gt;
&lt;br /&gt;
== gcc 4.3 ==&lt;br /&gt;
* '''Problem''': gcc 4.3 is expected to be released around the same time as KDE 4.0. Current gcc 4.3 SVN snapshots miscompile KDE 4.0 snapshots, causing core applications like plasma and konqueror to crash on startup.&lt;br /&gt;
** Status: small, self-contained test case is needed&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Oxygen/StyleWinDec</id>
		<title>Projects/Oxygen/StyleWinDec</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Oxygen/StyleWinDec"/>
				<updated>2007-11-27T11:39:40Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Incoming New Bugs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current Oxygen style and window decoration for KDE4 can be found in SVN under http://websvn.kde.org/trunk/KDE/kdebase/runtime/kstyles/oxygen and http://websvn.kde.org/trunk/KDE/kdebase/workspace/kwin/clients/oxygen&lt;br /&gt;
&lt;br /&gt;
== Visitors ==&lt;br /&gt;
Add new bugs to [[#Incoming_New_Bugs|Incoming New Bugs]], and we (the developers) will move it down and prioritize.&lt;br /&gt;
&lt;br /&gt;
Note: we may move invalid bugs may be moved to the discussion page, along with a reason why they won't be fixed [by us].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;DO NOT EDIT OTHER SECTIONS WITHOUT PERMISSION&amp;lt;/b&amp;gt;. This page has now been protected due to unauthorized edits. If you need to leave a comment anonymously, do it on the discussion page and/or talk to us on #oxygen.&lt;br /&gt;
&lt;br /&gt;
== Incoming New Bugs ==&lt;br /&gt;
* When the tabbar has many tabs, so that not all of them can be shown at once, arrow buttons are drawn to navigate to the other tabs. These arrows are painted incorrectly, see [http://bugs.kde.org/show_bug.cgi?id=152327 this bug report].&lt;br /&gt;
* A QRadioButton in the oxygen style does not report the size of the icon through iconSize() correctly; when using the iconSize() the painted button will be cut off.&lt;br /&gt;
* An icon set on a [Q]PushButton is not drawn respecting QAbstractButton::abstractSize() - look at the user pic selector in kcmshell4 kdm-&amp;gt;Users.&lt;br /&gt;
* On a menu, it is not possible to see which menu is actually active.&lt;br /&gt;
::See [http://bugs.kde.org/show_bug.cgi?id=152123 this bug report]&lt;br /&gt;
* In Beta4, it seems that the WinDeco doesn't yet get the color scheme from the kcm color module. i.e., changing the active/inactive window colors doesn't seem to actually work.&lt;br /&gt;
* In (double) spinboxes the font is positioned one pixel too high. Lowering it one makes it baseline-aligned with labels in front. &amp;lt;b&amp;gt;Unfortunately not possible &amp;lt;/b&amp;gt;&lt;br /&gt;
: what about altering the size hints so the whole widget moves down? Trouble is we want them to be the same size as editable comboboxes and lineedits and buttons so those line up. The 1px wrong placement of text is a qt weirdness that gives visual bugs when we try to work around it - believe me - I've spent several hours on this.&lt;br /&gt;
* The ok and cancel buttons on dialogs (so called 'control buttons') don't have the same width. &amp;lt;b&amp;gt;Not a style problem &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Centered group titles pose several problems. Left align group titles instead. See Discussion for more details.&lt;br /&gt;
&lt;br /&gt;
* Window decoration scales the menu icons down resulting in the icons blurring. Interestingly in the kwindecoration kcmshell the preview shows the 16x16/mimetypes/unknown.png icon at its correct 16x16 size, but as soon as the use the deco for real, it starts blurring them. (This is also true for KDE4's Plastik deco). [[User:Djmdave|Djmdave]] 22:26, 28 October 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
== Known Bugs ==&lt;br /&gt;
* tabs&lt;br /&gt;
** east and west aren't done at all &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
** small glitches in filling inactive tabs &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
** tab bar edge should extend full length of widget &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* Dockers&lt;br /&gt;
** frame when floating should have rounded corners &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* KHTML integration&lt;br /&gt;
** khtml makes illegal assumptions about buttons. Awaits patch review by Maxim &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;quot;flat&amp;quot; buttons drawn same as regular buttons &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* KLineEdit&lt;br /&gt;
** stylesheets ruin the look. Aseigo says to wait for qt fix &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* Holes in general&lt;br /&gt;
** need bigger margins so shadow/glow are not lost?&lt;br /&gt;
** fix non-rounded corners when filling (at least) lineedits &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
** with autoFillBackground, corners are overpainted (how to fix this??) &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* QToolBox not drawn &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* need to audit color role use (see QA #3) &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* Reverse layout is broken&lt;br /&gt;
** listview,tablevies paint the frame in LTR place Qt issue 137304 &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* progress bars still not like the artist wants &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* menus not done &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
** KMenu::addTitle() adds a widget action to display a title in a popup menu. This is not specific to Oxygen, but the widget it creates could use some polishing. (to see this, right click any icon in the system tray)&lt;br /&gt;
* windeco&lt;br /&gt;
** corners should really be alpha transparent &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* should repaint on globalChange signal (how?) &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
** this seems to only be a problem for the colors kcm, may not even be a style bug&lt;br /&gt;
*headers in tables&lt;br /&gt;
**not really done - but the plain color look is acceptable for now &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* checkboxes in Q3ListView (Kontact-ToDo) are broken &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* Groupboxes&lt;br /&gt;
** does not report a minimum size that allows it to show the text on the box. I.e. a groupbox with no contents, the groupbox-title is clipped. &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* Buttons on KNewStuff download dialog do not appear&lt;br /&gt;
&lt;br /&gt;
== QA ==&lt;br /&gt;
* reverse layout&lt;br /&gt;
* high-contrast color schemes (i.e. all fg/bg black or white)&lt;br /&gt;
* reverse-light/dark color schemes (e.g. light-on-dark buttons with dark-on-light views, etc.)&lt;br /&gt;
* tabs, in all directions&lt;br /&gt;
* no gray space between scrollbar and the text area it controls.&lt;br /&gt;
* sliders, scrollbars, progress - in all orientations and good cross section of values&lt;br /&gt;
* content padding works for all controls, does not break sizeToContents functionality&lt;br /&gt;
* controls align nicely and controls that should be the same size, are&lt;br /&gt;
* no obvious glitches in uidemo&lt;br /&gt;
&lt;br /&gt;
[[Category:Artwork]][[Category:Oxygen]]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Schedules/KDE4/4.0_Upstream_Issues</id>
		<title>Schedules/KDE4/4.0 Upstream Issues</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Schedules/KDE4/4.0_Upstream_Issues"/>
				<updated>2007-11-27T11:17:51Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Qt4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Box|Upstream Issues HotList|Listed below are various upstream issues that are considered release critical problems. This is not a bug tracker or meant to supplant one, but to keep a running tally of open upstream issues we need to address for KDE4 releases.}}&lt;br /&gt;
&lt;br /&gt;
== Qt4 ==&lt;br /&gt;
* '''Problem''': CSS currently resets fonts in widgets when used, making it very difficult to use with widgets where fonts are set programmatically as done throughout KDE.&lt;br /&gt;
** Affects: All widgets using CSS, such as the Konqueror location bar when using CSS to set an offset for the clear button.&lt;br /&gt;
** Solution: Pending; perhaps a CSS value (font: QWidget?) that prevents the style sheet from resetting fonts outside of what the widget is doing. Can be done currently on a case-by-case basis by overriding changeEvent, intercepting font changes and updating CSS strings containing the font desired; this is error prone (easy to trigger infinite loops) and seems sub-optimal.&lt;br /&gt;
** Status: upstream is investigating solutions.&lt;br /&gt;
&lt;br /&gt;
* '''Problem''': Designer converts WhatsThis text to richtext blocks&lt;br /&gt;
** Affects: translators who get opaque blocks of html code&lt;br /&gt;
** Solution: None yet&lt;br /&gt;
** Status: Pending&lt;br /&gt;
** [http://trolltech.com/developer/task-tracker/index_html?id=187205&amp;amp;method=entry Upstream tracker link]&lt;br /&gt;
&lt;br /&gt;
== Xine ==&lt;br /&gt;
* '''Problem''': short Oggs are not played properly&lt;br /&gt;
** Affects: Phonon playing short sounds, therefore all audio notification in KDE&lt;br /&gt;
** Solution: Patch being worked on by Matthias Kretz, needs to be upstreamed to libxine&lt;br /&gt;
** Status: Pending patch completion and approval&lt;br /&gt;
&lt;br /&gt;
== gcc 4.3 ==&lt;br /&gt;
* '''Problem''': gcc 4.3 is expected to be released around the same time as KDE 4.0. Current gcc 4.3 SVN snapshots miscompile KDE 4.0 snapshots, causing core applications like plasma and konqueror to crash on startup.&lt;br /&gt;
** Status: small, self-contained test case is needed&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Contribute/Bugsquad/KrushDays</id>
		<title>Contribute/Bugsquad/KrushDays</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Contribute/Bugsquad/KrushDays"/>
				<updated>2007-11-09T11:59:41Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: Move issue to proper place, there is no KDEPrint.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Box|KDE4 Krush Days|Join us Saturdays on irc in the #kde4-krush channel to work out release critical issues for KDE 4.0. Testers, artists, documenters and programmers are all welcome and encouraged to join in on the fun. Issues that are identified and being worked on will be added to this community scratchpad page.}}{{Box|Note|&lt;br /&gt;
* Please attach you nickname in irc when you add a bug to this page.&lt;br /&gt;
*In order to mark a bug as fixed please use &amp;lt;nowiki&amp;gt;&amp;lt;s&amp;gt;&amp;lt;/s&amp;gt;&amp;lt;/nowiki&amp;gt;-tags and mention the revision number(s) of this fix.}}&lt;br /&gt;
&lt;br /&gt;
{{Box|Crash Backtraces|&lt;br /&gt;
Do &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; use &amp;lt;nowiki&amp;gt;http://rafb.net/paste/&amp;lt;/nowiki&amp;gt; for your crash backtraces, because those paste URLs there will expire after 24 hours.&lt;br /&gt;
&lt;br /&gt;
Please use &amp;lt;b&amp;gt;[http://pastebin.ca/ http://pastebin.ca/]&amp;lt;/b&amp;gt; for crash backtraces and add a link to your paste when you add the crash to the list below. &lt;br /&gt;
&lt;br /&gt;
A backtrace is generally &amp;lt;b&amp;gt;very&amp;lt;/b&amp;gt; helpful for developers to identify the reason for the crash. To get good backtraces, read [[Development/Tutorials/Debugging/How_to_create_useful_crash_reports|this article]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Screen Locker (krunner_lock) ====&lt;br /&gt;
* unlocking the session is impossible as I get &amp;quot;wrong password&amp;quot; (logixoul) (confirmed by goliath23)&lt;br /&gt;
** prolly installed as user - kcheckpass requires setuid root&lt;br /&gt;
* enabling and disabling capslock in the &amp;quot;unlock session&amp;quot; dialog doesn't hide the red &amp;quot;Warning: capslock enabled&amp;quot; label (logixoul) (works fine for TunaTom [rev 731731])&lt;br /&gt;
&lt;br /&gt;
==== Packaging ====&lt;br /&gt;
* share/icons/oxygen/22x22/actions/kscd-dock.png is installed by both kdebase and kdemultimedia (jstubbs)&lt;br /&gt;
&lt;br /&gt;
==== Konsole ====&lt;br /&gt;
&lt;br /&gt;
* Selecting text in the default color scheme gives black-on-black selections (jstubbs)(confirmed by annma)(not reproducible by TunaTom)&lt;br /&gt;
* None of the Alt+&amp;lt;letter&amp;gt; menu shortcuts work when the terminal has focus (apaku) (confirmed by TunaTom)&lt;br /&gt;
* Wish: Could the links be not clickable as an option? it really goes on the way as it makes copy/paste too difficult when a link is present in the copied text (annma)&lt;br /&gt;
* crashes when clicking on a link, but konqueror opens successfully ([C]167&lt;br /&gt;
* Changes made with &amp;quot;Edit Current Profile::Appearance&amp;quot; are not &lt;br /&gt;
saved. (JRT)&lt;br /&gt;
*&amp;quot;Edit Font&amp;quot; isn't restricted to only monospace fonts. (JRT)&lt;br /&gt;
&lt;br /&gt;
==== Dolphin ====&lt;br /&gt;
* &amp;lt;s&amp;gt;Restoring a deleted item from the trash crashes dolphin/konqueror (mbiebl)&amp;lt;/s&amp;gt;&lt;br /&gt;
** Fixed by Sergej Melderis and David Faure (Peter Penz)&lt;br /&gt;
* The &amp;quot;Desktop&amp;quot; and &amp;quot;Root&amp;quot; icons in dolphin have a completely different style than the usual folder icon. (mbiebl)&lt;br /&gt;
* &amp;lt;s&amp;gt;Dolphin has no proper icon in taskbar/window decoration. (mbiebl)&amp;lt;/s&amp;gt;&lt;br /&gt;
** fixed. (logixoul)&lt;br /&gt;
* Select icon in folder/file properties doesn't show the icons of the selected categories at first. Only after changing the combobox the icons are loaded. (bbroeksema)(I can confirmed that [TunaTom r732119])&lt;br /&gt;
* &amp;lt;s&amp;gt;Edit Locations (F6) doesn't work as expected. Currently it only switches to edit mode and focuses the location bar if it's in navigation mode, otherwise it doesn't do anything. (Mogger)&amp;lt;/s&amp;gt;&lt;br /&gt;
** For me, it switches from navigation to edit mode and focuses as well [TunaTom r732119]&lt;br /&gt;
*** Yeah same for me, sorry for being unclear. Edited now. (Mogger)&lt;br /&gt;
**** Thanks for the report, this issue is fixed now :-) (Peter Penz)&lt;br /&gt;
* no option for 'select on hover' (emilsedgh)&lt;br /&gt;
* &amp;lt;s&amp;gt;cannot show thumbnails (it was showing the thumbnails when konqueror was unable to show them, so seems a different bug with konqueror's &amp;quot;cannot show preview&amp;quot; bug, also file properties-&amp;gt;preview hasnt the preview anyymore) (emilsedgh)&amp;lt;/s&amp;gt;&lt;br /&gt;
** fixed by mlaurent (logixoul)&lt;br /&gt;
* &amp;quot;Empty Trash&amp;quot; does not show up in the file menu when viewing the trash (yuriy)&lt;br /&gt;
** Application menus should never be changed dynamically. So an option would be showing &amp;quot;Empty Trash&amp;quot; always. From my point of view using the context menu is enough (at least I'm not aware about any file manager that has &amp;quot;Empty Trash&amp;quot; as part of the file-menu). For further discussions please mail me directly (peter.penz@gmx.at) or just use the kfm-devel mailing list. Thanks! (Peter Penz)&lt;br /&gt;
* Several of the F1-F11 do not show up in the &amp;quot;Configure Shortcuts&amp;quot; dialog (e.g. F4) (gissi)&lt;br /&gt;
* Inconsistency (IMHO): F4 in dolphin behaves different than in Konqueror (terminal panel vs. terminal in new window) (gissi)&lt;br /&gt;
* It can only configure mimetype associations individually via properties on a file, and later clicking on a small settings button. To configure mimetypes globally, and not file related, it has to be done with Konqueror settings, as there is no such entry in SystemSettings. IMHO Dolphin or SystemSettings should also get the Konqueror's File association settings panel. (q3xr2).&lt;br /&gt;
* &amp;lt;s&amp;gt;When moving a hidden file to trash this file is not shown in trash. However, it is in ~/.local/share/Trash, so it's not lost. The problem is probably that kiotrash ignores hidden files. (gissi, confirmed by JustinNoel, luca_b and logixoul)&amp;lt;/s&amp;gt;&lt;br /&gt;
** Fixed by Sergejs Melderis and David Faure (Peter Penz)&lt;br /&gt;
* When you delete Trash from sidebar, you can't get it back. (amp)&lt;br /&gt;
&lt;br /&gt;
==== Phonon ====&lt;br /&gt;
* Can't get any sound to work. Chosen backend is xine. Tried to play an mp3 in juk. juk says its playing, but I get no sound. (mbiebl)&lt;br /&gt;
&lt;br /&gt;
==== Juk ====&lt;br /&gt;
* Too much colums in default setting. Not a bug but a bad looking thing. (frank95com)&lt;br /&gt;
&lt;br /&gt;
==== Oxygen ====&lt;br /&gt;
* Missing icons for &amp;quot;Appearance&amp;quot; and &amp;quot;Desktop&amp;quot; in systemsettings. (mbiebl)&lt;br /&gt;
* Visual glitches in Oxygen: tabs in konqui, progressbar in dolphin. (mbiebl)&lt;br /&gt;
* konsole, Oxygen: the arrows of the right scrollbar are not visible (black on black). (mbiebl)&lt;br /&gt;
* Chanel icons in KMix could use some Oxygenification (JLP)&lt;br /&gt;
* Too little contrast in the window-list from alt-tab shortcut, people with only slight visual problems won't be able to see the difference between selected/not selected (apaku)&lt;br /&gt;
* Buttons inside konqueror are not drawn properly, text labels are off and often are missing completely. This doesn't happen with plain Qt style, but also with Plastik (apaku)&lt;br /&gt;
&lt;br /&gt;
==== Plasma ====&lt;br /&gt;
&lt;br /&gt;
* The taskbar doesn't remember the position of the clock plasmoid. (mbiebl)&lt;br /&gt;
* The network plasmoid does not automatically selet the active network connection (It uses eth0 by default, but I use wlan0 mostly) (mbiebl)&lt;br /&gt;
* systemtray: starting one juk instance shows two identical icons in the systray.&lt;br /&gt;
* with the plasma toolbox, clicking &amp;quot;add widgets&amp;quot; but releasing the mouse button elsewhere still activates it. (jstubbs)&lt;br /&gt;
* hovering the plasma toolbox for the first time after cleaning config makes buttons slide in from TOP-LEFT rather than TOP-RIGHT. Every subsequent hovering works correctly. (logixoul)&lt;br /&gt;
* can't move panel plasmoids. (logixoul)&lt;br /&gt;
* can't put pager or systray on panel. (logixoul)&lt;br /&gt;
* systray on desktop has no border. (logixoul)&lt;br /&gt;
* MinimizeAnimation doesn't animates correctly to the taskbar, with Kicker it   works fine (Plasma should tell KWin where the taskbar-entry is) (boom1992)&lt;br /&gt;
* The dictionary plasmoid doesn't show the results. (Mogger)&lt;br /&gt;
** Looks like fixed in r732655, shows the result, but first changes the box with animation, then changes the result text, also its a bit slow (emilsedgh)&lt;br /&gt;
* krunner hangs on each and every letter typed in after some time working in a kde4 desktop. May be related to manual killing the strigidaemon which goes nuts on CPU usage. Output from console: http://www.apaku.de/vardata/krunner_output_hang (apaku)&lt;br /&gt;
* notes applet should be resized when the text is bigger that current size (emilsedgh)&lt;br /&gt;
* Colorpicker and Kickoff plasmoid don't have context menu, so they can't be removed. (TunaTom)&lt;br /&gt;
** context menus are going to be replaced by hover-action-icons (ivan)&lt;br /&gt;
** Lancelot now has context menu and is (re)movable (emilsedgh)&lt;br /&gt;
* Running plasma with QT_FLUSH_PAINT I can see lots of extra repainting. For example the panel is very bad. (rich)&lt;br /&gt;
* Plasma is shown in the Alt+Tab windowlist, this should not happen (especially since switching to this app then does nothing visually except lose focus from the toplevel window) (BCoppens)&lt;br /&gt;
* Analog Clock: add text &amp;amp; seconds indicator. Change size to 400. Is so SLOW that it easily skips 3 seconds per redraw! (Core2 Duo 2.20GHz, Quadro FX 570M, nvidia binary drivers, Thinkpad T61p) (BCoppens)&lt;br /&gt;
* Digital clock is useless by its inconfigurability: I'm not interested in a disorganized list of timezones, no, I want a) the date underneath, b) a less fancy digital font instead of the current one with the distracting 'line' in the middle. (BCoppens)&lt;br /&gt;
**The date format is not affected by the settings in KControl.&amp;lt;JRT&amp;gt;&lt;br /&gt;
** Time Zone list should be redundant in configuration since the TZ should be set in KControl.  All that is needed is an option to display it.  Note, I think that this is the standard timezone list.  If what is wanted is an option to display a TZ other than the user's TZ, this should be a separate context menu item. &amp;lt;JRT&amp;gt;&lt;br /&gt;
* The Lock/Logout Widget has rectangular buttons -- should have square? IAC, icons should be centered on buttons. &amp;lt;JRT&amp;gt;&lt;br /&gt;
*System Tray Widget doesn't work correctly: The Widget doesn't size itself to hold the contents.  The contents seem to have the wrong X display priority (they are always on top).  It (the contents, not the widget) interacts with windows (snap).  The contents are only displayed on Desktop #1.  When something triggers a refresh of something, then the SystemTray widget resizes and looks correct but the icons are still not working correctly.  They are only on DeskTop #1 and always on top. &amp;lt;JRT&amp;gt;&lt;br /&gt;
*The Application Launcher Widget seems to be stuck in the middle of the screen; I can't drag it.  In this position with 1024x768 the menu window does not open correctly.  It extends beyond the top of the screen and is cut off. &amp;lt;JRT&amp;gt;&lt;br /&gt;
*The Clock on the Panel slides over and winds up on top of the TaskBar on the Panel.&amp;lt;JRT&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Plasma - Kickoff 'Start Menu' ====&lt;br /&gt;
&lt;br /&gt;
* Unable to resize the kickoff menu. (mbiebl)&lt;br /&gt;
* Kickoff opens konqueror when clicking on an entry under &amp;quot;My Computer&amp;quot;. (mbiebl)&lt;br /&gt;
* In kickoff, clicking the utilities menu and then clicking back again shows the top menu scrolled to the top rather than where it was before clicking utilities. (jstubbs)&lt;br /&gt;
** Confirmed. Additional strange bahaviour: When opened by clicking on a link in &amp;quot;Storage&amp;quot; for example, Konqueror shows the contents of &amp;quot;/&amp;quot; in an unnamed tab. Right of that tab is another one showing the correct location. If you click that tab, konqeuror crashes. (goliath23)&lt;br /&gt;
* Kickoff: Clicking the applications tab, when the tab is open should return it to top-level.Current catalog-memory is a good feature however, so keep that aswell. (eirik_)&lt;br /&gt;
* Kickoff does not start firefox. It loads the .desktop file in kwrite (amp)&lt;br /&gt;
&lt;br /&gt;
==== System Settings ====&lt;br /&gt;
* systemsettings has no menu entry. Typing it into kickoffs search entry doesn't find/list it either. (mbiebl)&lt;br /&gt;
* When clicking on &amp;quot;Appearance&amp;quot;, it seems to delete a file. http://rafb.net/p/zzS2fM55.html (Mogger)&lt;br /&gt;
**When I select &amp;quot;Appearance&amp;quot; in &amp;quot;System Settings&amp;quot;, three &amp;quot;Progress Dialog&amp;quot; boxes pop up.&amp;lt;JRT&amp;gt;&lt;br /&gt;
* Missing &amp;quot;get root rights&amp;quot; button on pages like Date/Time, thus its impossible to change such settings (apaku)&lt;br /&gt;
* Searching something doesn't seem to limit the displayed modules or highlight any of the search results.&lt;br /&gt;
* no settings to be changed for keyboard shortcuts - everything is empty (nixternal)&lt;br /&gt;
**This is probably a function of your system configuration.  IIUC,It reads an X11 file. &amp;lt;JRT&amp;gt;&lt;br /&gt;
* When clicking e.g. &amp;quot;Appearance&amp;quot;, the System Settings window doesn't get resized. This causes very ugly (horizontal and vertical) scrollbars (gissi)&lt;br /&gt;
* Default size for the text beneath the icons is too small. I see stuff like 'ppearanc' instead of 'Appearance' and 'ccesibilit'. Some other texts are wide enough, like 'Splash Screen'. (BCoppens)&lt;br /&gt;
* Changing the style to Oxygen changes all windows, EXCEPT the System Settings (BCoppens)&lt;br /&gt;
*Regional &amp;amp; Language::Time &amp;amp; Dates (should that be &amp;quot;Time &amp;amp; Date&amp;quot;?) doesn't have USA style date formats in &amp;quot;Short date format&amp;quot;: MM.DD.YYYY &amp;amp; mM.dD.YYYY and should also have formats with only 2 digits for year: YY.&lt;br /&gt;
&lt;br /&gt;
==== KMix ====&lt;br /&gt;
* &amp;lt;s&amp;gt;m_qcb-&amp;gt;blockSignals( true ); where m_qcb is null from MDWSlider::updateInternal during kmix startup http://pastebin.ca/759601 (jstubbs)&amp;lt;/s&amp;gt; Fixed by SVN commit [http://websvn.kde.org/?view=rev&amp;amp;revision=732246 732246]&lt;br /&gt;
* &amp;lt;s&amp;gt;Right click on KMix icon in system tray, select master channel, dialog comes up empty, when you close it KMix icon disappears from the tray (JLP)&amp;lt;/s&amp;gt; Fixed by SVN commit [http://websvn.kde.org/?view=rev&amp;amp;revision=732367 732367]&lt;br /&gt;
&lt;br /&gt;
==== KWin ====&lt;br /&gt;
* Windows are not fully redrawn when minimizing and then restoring with OpenGL compositing in use (jstubbs)&lt;br /&gt;
* the compositing KCM should provide an easy way to enable the COMPOSITE extension (logixoul)&lt;br /&gt;
* &amp;lt;s&amp;gt;Menu shadows are being left on the desktop (but not on windows, it seems) (Mogger)&amp;lt;/s&amp;gt; Fixed by SVN commit [http://websvn.kde.org/?view=rev&amp;amp;revision=732268 732268]&lt;br /&gt;
* Sometimes (tested with Konsole, X.org 7.3, latest nvidia drivers and a Geforce 5900XT), the clicked menus are not displayed and KWin crashes. Backtrace : [http://rafb.net/p/zmYj1980.html] (idem)&lt;br /&gt;
* After a while the alt-tab window list is completely missing though I can still switch between windows with alt+tab (apaku)&lt;br /&gt;
* alt+tab only allows to switch between windows on the same screen in a multihead setup, its impossible to activate a window on another screen (though its on the same virtual X11 desktop) (apaku)&lt;br /&gt;
* alt+tab (without compositing) shows a list of windows but no indication which window in this list is selected when cycling through them. (goliath23)&lt;br /&gt;
* KWin does not detect compositing ability on my pc with a GeForce 7600 GS (driver version 100.14.19) (goliath23) &lt;br /&gt;
* The Composite Effect 'Demo Liquid' crashes KWin (BCoppens)&lt;br /&gt;
* 'Scale In' effect also scales in Menus and Dropdown boxes from the 'middle' of their target area, this is ugly. Either don't do that for such windows, or let them scale in from their topleft corner (BCoppens)&lt;br /&gt;
* Alt+Shift+Tab for backwards scrolling through Alt+Tab shortcut is not assigned, but I can't remember if this was the case in KDE3 as well or not... (BCoppens)&lt;br /&gt;
*Moving windows with &amp;quot;Display Content&amp;quot; turned off does not display an empty frame. (using an OpenSource driver)&amp;lt;JRT&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== KNS ====&lt;br /&gt;
* KNS uses 100% CPU when 550 is enabled in kdebugdialog (jstubbs)&lt;br /&gt;
* Sometimes KNS dialog is under Settings dialog (Kanagram and KStars) modal/non-modal issue when KNS is invoked from a Config dialog (jstubbs)&lt;br /&gt;
&lt;br /&gt;
==== KHangMan ====&lt;br /&gt;
* &amp;lt;s&amp;gt;&amp;quot;Already Guessed&amp;quot; tooltip timer does not work.&amp;lt;/s&amp;gt; FIXED annma r732068&lt;br /&gt;
* &amp;lt;s&amp;gt;When changing the &amp;quot;Already Guessed&amp;quot; tim in Config, the current word should stay (KHangMan jumps to a new word).&amp;lt;/s&amp;gt; FIXED annma r732068&lt;br /&gt;
*  After typing an already typed letter, the focus is left on the guess &amp;quot;button&amp;quot;, which means I have to press tab to get back to the letter entry field. If we enable the focus back before tooltip is hidden, it means the tooltip has to be hidden when a new letter is entered. (jstubbs)&lt;br /&gt;
** annma: intented behaviour is that the input is impossible why popup is shown. To leave the kid the time to understand what he is doing. Messing with the tooltip now seems bad to me. It's a WON'T FIX until we have it tested with kids ;) sorry jstubbs!&lt;br /&gt;
* &amp;lt;s&amp;gt;See if the font progressbar can disappear after first run (jstubbs)&amp;lt;/s&amp;gt;&lt;br /&gt;
** annma: Removing your ~/.fonts/d dustismo_roman.ttf will make the bug go away. The font will reinstall and then it'll be found. Not sure why it happened...&lt;br /&gt;
* Test what happens for the fonts when no internet connection (jstubbs)&lt;br /&gt;
* Wish: when using the Special chars toolbar, letters should go immediatly in the word or in Missed. Annma is not sure this would work with kids, they maybe won't understand what happens. (jstubbs)&lt;br /&gt;
** annma: maybe a config option for KDE 4.1 as we are in feature freeze now.&lt;br /&gt;
* Language combo in toolbar does not resize correctly when changing language. (jstubbs)&lt;br /&gt;
* &amp;lt;s&amp;gt;Right-clicking &amp;quot;Type accented letters&amp;quot; does not offer the context sensitive help when the option is disabled. (jstubbs)&amp;lt;/s&amp;gt;&lt;br /&gt;
** annma: this is from Qt, it's default behaviour for QWhatsThis help.&lt;br /&gt;
&lt;br /&gt;
==== Kiten ====&lt;br /&gt;
* Searching for &amp;quot;one&amp;quot; takes a long time to process, during which the application blocks without any feedback. (jstubbs)&lt;br /&gt;
* From the Search menu, selecting Search {with Beginning of Word, Anywhere}, Grade or Strokes does not seem to have any affect (jstubbs)&lt;br /&gt;
* Selecting Verb or Noun from the grammatical element dropdown does not seem to have any affect (jstubbs)&lt;br /&gt;
&lt;br /&gt;
==== KBruch ====&lt;br /&gt;
* In fraction tasks, the denominators used sometimes exceed the max denominator that is set. (jstubbs) r732343 attempted to fixe it but not totally&lt;br /&gt;
&lt;br /&gt;
==== KPercentage ====&lt;br /&gt;
* &amp;lt;s&amp;gt;When starting a new set of tests, and on various other actions, the window unnecessarily moves to the centre of the screen (jstubbs)&amp;lt;/s&amp;gt; Fixed r732700&lt;br /&gt;
&lt;br /&gt;
==== KGeography ====&lt;br /&gt;
* &amp;lt;s&amp;gt;Intermittent crash after a placing state on a map (jstubbs)&amp;lt;/s&amp;gt; Fixed r732331 (tsdgeos)&lt;br /&gt;
* &amp;lt;s&amp;gt;Selecting zoom when placing state on a map leaves the cursor as the state to be placed - perhaps the cursor should change back to a pointer while in zoom mode? (jstubbs)&amp;lt;/s&amp;gt; Fixed r732314 (tsdgeos)&lt;br /&gt;
* With KWin's dimming of inactive windows, it is difficult to relate the colors signfying right/wrong answers back to the map (jstubbs)&lt;br /&gt;
&lt;br /&gt;
==== KmPlot ====&lt;br /&gt;
* Editing function does not work as if Enter is not doing anything (rivo, gissi and idem-kde4) Annma cannot reproduce.&lt;br /&gt;
**Note by gissi: For me, only editing a cartesian plot doesn't work, the others work as expected. Don't know wether that's the same for rivo and idem.&lt;br /&gt;
&lt;br /&gt;
==== KMail ====&lt;br /&gt;
* Creating a new Imap Account and press &amp;quot;Check what the Server Supports&amp;quot; in Security crashes KMail. Stacktrace / ConsoleLog at http://pastebin.ca/759562 (voltaire) &lt;br /&gt;
:: This is probably a KSSL problem, which will be fixed when the new KSSL arrives in kdelibs --[[User:TMG|TMG]] 00:03, 4 November 2007 (CET)&lt;br /&gt;
* &amp;lt;s&amp;gt;If I open a link from an email it opens it but then it crashes - Backtrace http://pastebin.ca/759997 (frank95com)&amp;lt;/s&amp;gt;&lt;br /&gt;
:: &amp;lt;s&amp;gt;This is a kdelibs (krun) bug, it happens in other apps, like Konsole, as well&amp;lt;/s&amp;gt; --[[User:TMG|TMG]] 00:03, 4 November 2007 (CET)&lt;br /&gt;
:: Fixed in kdelibs --[[User:TMG|TMG]] 21:27, 6 November 2007 (CET)&lt;br /&gt;
*When an IMAP server stops responding KMail popups up the &amp;quot;IMAP Disconnected&amp;quot; dialog with an &amp;quot;Ok&amp;quot; button. Clicking &amp;quot;Ok&amp;quot; crashes KMail. Stack Trace: http://www.pastebin.ca/759969 (JustinNoel)&lt;br /&gt;
* KMail initial account wizard. A process related to the KMail initial setup wizard crashes when &amp;quot;Check for supported security capabilites on...&amp;quot; appears. Console spew suggests something crashed. KMail starts with an IMAP account with an incorrect security configuration. Description/Reproduction Steps/Console Spew: http://www.pastebin.ca/760052 Needs verification as I only have one IMAP server to try. (Justin Noel)&lt;br /&gt;
:: Seems like the same bug above, the one reported by voltaire. --[[User:TMG|TMG]] 00:03, 4 November 2007 (CET)&lt;br /&gt;
* KMail with disconnected IMAP: after customizing options and restart, it crashes on startup http://pastebin.ca/764484 ([[User:Lure|Lure]] 09:07, 7 November 2007 (CET))&lt;br /&gt;
&lt;br /&gt;
==== Build issue ====&lt;br /&gt;
* &amp;lt;s&amp;gt;in kdebase when OpenGL is not found, cmake stops with &amp;quot;CMake Error: This project requires some variables to be set, and cmake can not find them. Please set the following variables: OPENGL_gl_LIBRARY (ADVANCED)&amp;quot; so there is a bad check somewhere in kdebase (annma, issue of frank95com, http://pastebin.ca/759575). Possible patch: http://pastebin.ca/759603 (annma). Other possible patch by ThomasZ: http://pastebin.ca/759605&amp;lt;/s&amp;gt;  fixed svn r733932	&lt;br /&gt;
* In kdebase on OS X 10.5 the build WITH_XKB = OFF variable is not respected resulting in failure of the build. (build process info found at http://techbase.kde.org/Getting_Started/Build/KDE4/Mac_OS_X_10.5_issues) Sorry it's so wordy, but I initially wrote it up for personal use.&lt;br /&gt;
&lt;br /&gt;
==== Kolf ====&lt;br /&gt;
* The direction and velocity marker flickers and often cannot be seen. Using opengl compositing. (jstubbs)&lt;br /&gt;
&lt;br /&gt;
==== KDElibs ====&lt;br /&gt;
* &amp;lt;s&amp;gt;The tab order of the configure shortcuts dialog is incorrect. (Mogger)&amp;lt;/s&amp;gt; Fixed by SVN commit [http://websvn.kde.org/?view=rev&amp;amp;revision=732404 732404]''&lt;br /&gt;
* Drag and drop doesn't work in the configure toolbars dialog. (Mogger)&lt;br /&gt;
* Applications crash when downloading something. Traceback from Konsole when clicking on a link: http://rafb.net/p/1aiHyn63.html (Mogger)&lt;br /&gt;
** The link appears to be dead&lt;br /&gt;
* cannot write Right-To-Left...in kde3 when you start a line with a character of an rtl language, the line goes rtl automatically (emilsedgh)&lt;br /&gt;
* Configure shortcuts dialog is too small at start: I cannot see the action name at all (it says stuff like 'C...' instead of 'Close'). Furthermore, and much worse: I cannot change the width of the columns at all to try to make the action names readable! (BCoppens)&lt;br /&gt;
&lt;br /&gt;
==== Konqueror ====&lt;br /&gt;
* Website http://kriptopolis.org it is really bad rendered, however it is fine with Konqueror 3.5.7. (q3xr2)&lt;br /&gt;
* often doesn't load pages properly, for example clicking the login link on a techbase page almost always gets me an empty page (apaku) (frank95com too, gruf too)&lt;br /&gt;
* &amp;lt;s&amp;gt;Cannot show thumbnails (emilsedgh)&amp;lt;/s&amp;gt;&lt;br /&gt;
** fixed by mlaurent (logixoul)&lt;br /&gt;
* Up Button loads a different view, while back button doesn't, when walking through the filesystem. The up button loads a similar view to what you get in dolhpin, while the default view when typing in a local path is a plain iconview (apaku)&lt;br /&gt;
* When entering already visited directories, the animated logo doesn't stop. (Plain iconview instead of dolphin part?) (Mogger)&lt;br /&gt;
* Nothing in View -&amp;gt; Sort By, Additional Information, Panels, Navigation Bar submenus (yuriy)&lt;br /&gt;
* Nothing except &amp;quot;home folder&amp;quot; in home folder sidebar (yuriy)&lt;br /&gt;
* Some favicons do not appear in Konqueror's nav bar to titlebar. google.com and kubuntu.org works. kde.org, cnn.com and slashdot.org do not work. (JustinNoel)&lt;br /&gt;
* pressing ctrl+a when focus is on addressbar selects whole webpage instead of the text that is written in the addressbar (only on webpages: khtmlpart?) (emilsedgh)&lt;br /&gt;
* have to keep refreshing pages in order for them to display (nixternal)&lt;br /&gt;
* have quite a few problems trying to edit this page alone (nixternal)&lt;br /&gt;
* In file management mode it can't show hidden files, it doesn't have this option in the View menu, neither there is a shorcut available. (q3xr2)&lt;br /&gt;
* In HTML forms (such as the textbox to edit this wikipage with, or the username box), the initial fontsize is small. Once I click on the form, the font suddenly enlargens. Especially annoying with this editbox, since the place where you think you clicked changes after fontsize change (BCoppens)&lt;br /&gt;
* Asks nicely if it has to store my form data (such as password and username in the Wallet, but does not actually do so (BCoppens)&lt;br /&gt;
* Clicking on a link to an in-page 'tag' (the a href=#tag thing, like there are lots of in the index of this wiki page), results in konqueror showing the 'Drag link' mouse cursor (BCoppens)&lt;br /&gt;
* Not only do I get blank pages, but I get the following on trying to edit this wiki with Konqueror of KDE4: after sending in the changes, it shows a blank page. I press F5, and Konq asks me to resubmit form data. Wiki then shows an almost-empty edit page, with 'Sorry! We could not process your edit due to a loss of session data' (BCoppens)&lt;br /&gt;
* Start Konq.  Press 'Next: An Introduction to Konqueror'. The page goes blank, and 'Previous page' also shows up blank. (BCoppens)&lt;br /&gt;
* With Konqui becoming webbrowser as primary task, it would make sense to redesign the start page altogether and remove stuff like Storage media, Trash etc. Show something like &amp;quot;Search the web&amp;quot; which points to a search engine, like Google, yahoo,...&lt;br /&gt;
* Start Konq. Enter '~'. Make a new tab (CtrlShift+N). Type something. Note how the cursor goes OVER the map icon, instead of starting next to it (BCoppens)&lt;br /&gt;
* (Different from the one above) Start Konq. Enter '~'. Make a new tab (CtrlShift+N). Enter '/'. Switch back to the first tab. It's caption suddenly changes from '/home/kde4/' to 'kde4'! Switching to the second tab, removes the '/' and makes that tab nameless) (BCoppens)&lt;br /&gt;
* Printing a html file from konqueror. The &amp;quot;HTML Settings&amp;quot; tab has an odd layout. It seems to miss a proper border. (mbiebl)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== IO-slaves ====&lt;br /&gt;
* Browsing with IO-slaves that require autenthication is broken: SMB, FTP, SSH do not display anything after authentication is entered (luca_b, nixternal, yuriy).&lt;br /&gt;
* When adding RSA keys using fish:/, the buttons to accept/refuse are blank. (luca_b, yuriy)&lt;br /&gt;
* smb:/ ioslave causes crash (nixternal)&lt;br /&gt;
* smb:/ ioslave does not work with shares that need authentication. Console output: http://pastebin.ca/760196 (luca_b)&lt;br /&gt;
* kio_file: After a while I have 100% of CPU usage when running KDE4. top says, the process is kio_file, which is sometimes up to 4 times running (amp)&lt;br /&gt;
* The settings:/ ioslave (accessible through Settings on the welcome screen of Konq) does not work at all. For example, try Appearanc&amp;amp;Themes -&amp;gt; Fonts: it tries to open this with KWrite! (BCoppens)&lt;br /&gt;
&lt;br /&gt;
==== Color KCM ====&lt;br /&gt;
* Changing the checkbox &amp;quot;Apply colors to non-KDE4 apps&amp;quot; doesn't trigger the changed signal and thus the apply button in systemsettings stays grayed out (apaku)&lt;br /&gt;
* the same as above applies to the whole Effects tab (apaku)&lt;br /&gt;
&lt;br /&gt;
==== Kate ====&lt;br /&gt;
* Crash when going down page-wise with PageDn beyond the end of the file. Backtrace: http://www.apaku.de/vardata/kate_crash_pagedn (apaku)&lt;br /&gt;
&lt;br /&gt;
==== Marble ====&lt;br /&gt;
* Navigate to Minneapolis (search is quick) and then zoom in until &amp;quot;saint paul&amp;quot; appears. Rotating up and down will now cause the text &amp;quot;saint paul&amp;quot; to jump around. (jstubbs)&lt;br /&gt;
* In full screen mode, clicking in the right half of the globe doesn't work. It seems that plasma is getting the events? (jstubbs)&lt;br /&gt;
&lt;br /&gt;
==== Kinfocenter ====&lt;br /&gt;
* Most of the Items are empty (emilsedgh)&lt;br /&gt;
&lt;br /&gt;
==== Kopete ====&lt;br /&gt;
* Adding an account a second time (same protocol, same user id as an existing) makes kopete crash (moi1392, idem-kde4). http://pastebin.ca/759660. More verbose fix in the works (Earthwings). http://lists.kde.org/?l=kopete-devel&amp;amp;m=119411618226111&amp;amp;w=2&lt;br /&gt;
* I can't get my Google Talk account to finish it's authentication process, however I can login without any troubles with my jabber.org account. I don't know if the trouble it's related to the SSL login or qca-tls which I have installed (q3xr2).&lt;br /&gt;
** Google Talk did not work before for me, but it works now (with today's SVN version), maybe you should retest with current SVN version.&lt;br /&gt;
*** It works now for me also! (q3xr2).&lt;br /&gt;
* Configure-&amp;gt;Plugins results in consistent crash here http://pastebin.ca/764575 ([[User:Lure|Lure]] 12:34, 7 November 2007 (CET))&lt;br /&gt;
&lt;br /&gt;
==== kfind ====&lt;br /&gt;
* kfind crashes when the find is stopped (by pressing &amp;quot;stop&amp;quot; button) during the find process (shaga)&lt;br /&gt;
* the stop button has to be pressed twice, the first click is lost (shaga)&lt;br /&gt;
&lt;br /&gt;
==== Gwenview ====&lt;br /&gt;
* Random crashes when navigating to directories, or when editing the path manually. Backtrace http://pastebin.ca/760077 (luca_b)&lt;br /&gt;
&lt;br /&gt;
==== Login Manager KCM ====&lt;br /&gt;
* There are numbers on the tabs (yuriy)&lt;br /&gt;
** yes - the kcm is too big to have non-clashing letter shortcuts.&lt;br /&gt;
&lt;br /&gt;
==== kscd ====&lt;br /&gt;
* crashes when inserting a CD. Problem is an assert thats hit (apaku):&lt;br /&gt;
  kscd(31228)/kdecore (KConfigSkeleton) KConfigSkeleton::readConfig: KConfigSkeleton::readConfig()&lt;br /&gt;
  kscd(31228)/libkcddb KCDDB::Cache::lookup: Looking up  &amp;quot;ae0cdb0e&amp;quot;  in CDDB   cache&lt;br /&gt;
  kscd(31228)/libkcddb KCDDB::CDInfo::load: Loaded CDInfo for  &amp;quot;ae0cdb0e&amp;quot;&lt;br /&gt;
  kscd(31228)/libkcddb KCDDB::Client::lookup: Found  1  hit(s)&lt;br /&gt;
  ASSERT: &amp;quot;info.numberOfTracks() == cddbInfo.numberOfTracks()&amp;quot; in   file /home/andreas/KDE-work/4.0/kdemultimedia/kscd/kscd.cpp, line 753&lt;br /&gt;
* crashes when starting up (but not if the user does not have permissions to acces the cdrom) backtrace: http://pastebin.ca/760172 (yuriy)&lt;br /&gt;
==== KFontChooser ====&lt;br /&gt;
*It doesn't work correctly for the bit mapped fonts Fixed[Misc] &amp;amp; Fixed[Sony] which come with X11 are the best example of this since they might be used in Konsole.  This is mainly a Konsole issue. &amp;lt;JRT&amp;gt; &lt;br /&gt;
**There should be only 2 sizes of Fixed[Sony] which works correctly in KDE3 it displays only two sizes.  I'm not 100% clear on how this works if you have a screen resolution other than 75 or 100, but xfontsel lists two point sizes for 100 dpi: 12 &amp;amp; 17 and this agrees with the KFontSel dialog.  But in KDE4 it lists the usual list of sizes from 4 to 64.&lt;br /&gt;
**There are several sizes of Fixed[Misc], according to xfonsel they are: 5, 6, 7, 8, 10, 11, 12, &amp;amp; 14.  KDE has this fairly close to correct -- close enough that it works OK.  It also lists 4 which may be a 75 dpi font and it lists 9 but not 12.  Could these be rounding errors?  IAC, KDE4 is the same as with Fixed[Sony], it has the standard list of 4 to 64.&lt;br /&gt;
*We need to first ask if this is a Qt bug/error as are other font issues.&lt;br /&gt;
**The Fixed{Misc} fonts are not a uniform set of fonts and I don't think that there is any way that Qt can deal with this issue.&lt;br /&gt;
&lt;br /&gt;
==== Akregator ====&lt;br /&gt;
*Crashes while trying to delete a feed. &lt;br /&gt;
** Nickname and backtrace in pastebin.ca please&lt;br /&gt;
&lt;br /&gt;
*Marking feeds or messages as Read does not work. The context menu in the feeds list reappear two times after the first select. Even when reading a message, it is not marked as read. ([[User:Kleag|Kleag]] 23:46, 7 November 2007 (CET))&lt;br /&gt;
&lt;br /&gt;
==== Kontact ====&lt;br /&gt;
*Crashes starting the application.&lt;br /&gt;
::We need a backtrace, otherwise we can't do anything. It doesn't crash for us. --[[User:TMG|TMG]] 21:24, 6 November 2007 (CET)&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Contribute/Bugsquad/KrushDays</id>
		<title>Contribute/Bugsquad/KrushDays</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Contribute/Bugsquad/KrushDays"/>
				<updated>2007-11-09T11:49:21Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: Don't link to the url we want people to avoid.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Box|KDE4 Krush Days|Join us Saturdays on irc in the #kde4-krush channel to work out release critical issues for KDE 4.0. Testers, artists, documenters and programmers are all welcome and encouraged to join in on the fun. Issues that are identified and being worked on will be added to this community scratchpad page.}}{{Box|Note|&lt;br /&gt;
* Please attach you nickname in irc when you add a bug to this page.&lt;br /&gt;
*In order to mark a bug as fixed please use &amp;lt;nowiki&amp;gt;&amp;lt;s&amp;gt;&amp;lt;/s&amp;gt;&amp;lt;/nowiki&amp;gt;-tags and mention the revision number(s) of this fix.}}&lt;br /&gt;
&lt;br /&gt;
{{Box|Crash Backtraces|&lt;br /&gt;
Do &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; use &amp;lt;nowiki&amp;gt;http://rafb.net/paste/&amp;lt;/nowiki&amp;gt; for your crash backtraces, because those paste URLs there will expire after 24 hours.&lt;br /&gt;
&lt;br /&gt;
Please use &amp;lt;b&amp;gt;[http://pastebin.ca/ http://pastebin.ca/]&amp;lt;/b&amp;gt; for crash backtraces and add a link to your paste when you add the crash to the list below. &lt;br /&gt;
&lt;br /&gt;
A backtrace is generally &amp;lt;b&amp;gt;very&amp;lt;/b&amp;gt; helpful for developers to identify the reason for the crash. To get good backtraces, read [[Development/Tutorials/Debugging/How_to_create_useful_crash_reports|this article]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Screen Locker (krunner_lock) ====&lt;br /&gt;
* unlocking the session is impossible as I get &amp;quot;wrong password&amp;quot; (logixoul) (confirmed by goliath23)&lt;br /&gt;
** prolly installed as user - kcheckpass requires setuid root&lt;br /&gt;
* enabling and disabling capslock in the &amp;quot;unlock session&amp;quot; dialog doesn't hide the red &amp;quot;Warning: capslock enabled&amp;quot; label (logixoul) (works fine for TunaTom [rev 731731])&lt;br /&gt;
&lt;br /&gt;
==== Packaging ====&lt;br /&gt;
* share/icons/oxygen/22x22/actions/kscd-dock.png is installed by both kdebase and kdemultimedia (jstubbs)&lt;br /&gt;
&lt;br /&gt;
==== Konsole ====&lt;br /&gt;
&lt;br /&gt;
* Selecting text in the default color scheme gives black-on-black selections (jstubbs)(confirmed by annma)(not reproducible by TunaTom)&lt;br /&gt;
* None of the Alt+&amp;lt;letter&amp;gt; menu shortcuts work when the terminal has focus (apaku) (confirmed by TunaTom)&lt;br /&gt;
* Wish: Could the links be not clickable as an option? it really goes on the way as it makes copy/paste too difficult when a link is present in the copied text (annma)&lt;br /&gt;
* crashes when clicking on a link, but konqueror opens successfully ([C]167&lt;br /&gt;
* Changes made with &amp;quot;Edit Current Profile::Appearance&amp;quot; are not &lt;br /&gt;
saved. (JRT)&lt;br /&gt;
*&amp;quot;Edit Font&amp;quot; isn't restricted to only monospace fonts. (JRT)&lt;br /&gt;
&lt;br /&gt;
==== Dolphin ====&lt;br /&gt;
* &amp;lt;s&amp;gt;Restoring a deleted item from the trash crashes dolphin/konqueror (mbiebl)&amp;lt;/s&amp;gt;&lt;br /&gt;
** Fixed by Sergej Melderis and David Faure (Peter Penz)&lt;br /&gt;
* The &amp;quot;Desktop&amp;quot; and &amp;quot;Root&amp;quot; icons in dolphin have a completely different style than the usual folder icon. (mbiebl)&lt;br /&gt;
* &amp;lt;s&amp;gt;Dolphin has no proper icon in taskbar/window decoration. (mbiebl)&amp;lt;/s&amp;gt;&lt;br /&gt;
** fixed. (logixoul)&lt;br /&gt;
* Select icon in folder/file properties doesn't show the icons of the selected categories at first. Only after changing the combobox the icons are loaded. (bbroeksema)(I can confirmed that [TunaTom r732119])&lt;br /&gt;
* &amp;lt;s&amp;gt;Edit Locations (F6) doesn't work as expected. Currently it only switches to edit mode and focuses the location bar if it's in navigation mode, otherwise it doesn't do anything. (Mogger)&amp;lt;/s&amp;gt;&lt;br /&gt;
** For me, it switches from navigation to edit mode and focuses as well [TunaTom r732119]&lt;br /&gt;
*** Yeah same for me, sorry for being unclear. Edited now. (Mogger)&lt;br /&gt;
**** Thanks for the report, this issue is fixed now :-) (Peter Penz)&lt;br /&gt;
* no option for 'select on hover' (emilsedgh)&lt;br /&gt;
* &amp;lt;s&amp;gt;cannot show thumbnails (it was showing the thumbnails when konqueror was unable to show them, so seems a different bug with konqueror's &amp;quot;cannot show preview&amp;quot; bug, also file properties-&amp;gt;preview hasnt the preview anyymore) (emilsedgh)&amp;lt;/s&amp;gt;&lt;br /&gt;
** fixed by mlaurent (logixoul)&lt;br /&gt;
* &amp;quot;Empty Trash&amp;quot; does not show up in the file menu when viewing the trash (yuriy)&lt;br /&gt;
** Application menus should never be changed dynamically. So an option would be showing &amp;quot;Empty Trash&amp;quot; always. From my point of view using the context menu is enough (at least I'm not aware about any file manager that has &amp;quot;Empty Trash&amp;quot; as part of the file-menu). For further discussions please mail me directly (peter.penz@gmx.at) or just use the kfm-devel mailing list. Thanks! (Peter Penz)&lt;br /&gt;
* Several of the F1-F11 do not show up in the &amp;quot;Configure Shortcuts&amp;quot; dialog (e.g. F4) (gissi)&lt;br /&gt;
* Inconsistency (IMHO): F4 in dolphin behaves different than in Konqueror (terminal panel vs. terminal in new window) (gissi)&lt;br /&gt;
* It can only configure mimetype associations individually via properties on a file, and later clicking on a small settings button. To configure mimetypes globally, and not file related, it has to be done with Konqueror settings, as there is no such entry in SystemSettings. IMHO Dolphin or SystemSettings should also get the Konqueror's File association settings panel. (q3xr2).&lt;br /&gt;
* &amp;lt;s&amp;gt;When moving a hidden file to trash this file is not shown in trash. However, it is in ~/.local/share/Trash, so it's not lost. The problem is probably that kiotrash ignores hidden files. (gissi, confirmed by JustinNoel, luca_b and logixoul)&amp;lt;/s&amp;gt;&lt;br /&gt;
** Fixed by Sergejs Melderis and David Faure (Peter Penz)&lt;br /&gt;
* When you delete Trash from sidebar, you can't get it back. (amp)&lt;br /&gt;
&lt;br /&gt;
==== Phonon ====&lt;br /&gt;
* Can't get any sound to work. Chosen backend is xine. Tried to play an mp3 in juk. juk says its playing, but I get no sound. (mbiebl)&lt;br /&gt;
&lt;br /&gt;
==== Juk ====&lt;br /&gt;
* Too much colums in default setting. Not a bug but a bad looking thing. (frank95com)&lt;br /&gt;
&lt;br /&gt;
==== Oxygen ====&lt;br /&gt;
* Missing icons for &amp;quot;Appearance&amp;quot; and &amp;quot;Desktop&amp;quot; in systemsettings. (mbiebl)&lt;br /&gt;
* Visual glitches in Oxygen: tabs in konqui, progressbar in dolphin. (mbiebl)&lt;br /&gt;
* konsole, Oxygen: the arrows of the right scrollbar are not visible (black on black). (mbiebl)&lt;br /&gt;
* Chanel icons in KMix could use some Oxygenification (JLP)&lt;br /&gt;
* Too little contrast in the window-list from alt-tab shortcut, people with only slight visual problems won't be able to see the difference between selected/not selected (apaku)&lt;br /&gt;
* Buttons inside konqueror are not drawn properly, text labels are off and often are missing completely. This doesn't happen with plain Qt style, but also with Plastik (apaku)&lt;br /&gt;
&lt;br /&gt;
==== Plasma ====&lt;br /&gt;
&lt;br /&gt;
* The taskbar doesn't remember the position of the clock plasmoid. (mbiebl)&lt;br /&gt;
* The network plasmoid does not automatically selet the active network connection (It uses eth0 by default, but I use wlan0 mostly) (mbiebl)&lt;br /&gt;
* systemtray: starting one juk instance shows two identical icons in the systray.&lt;br /&gt;
* with the plasma toolbox, clicking &amp;quot;add widgets&amp;quot; but releasing the mouse button elsewhere still activates it. (jstubbs)&lt;br /&gt;
* hovering the plasma toolbox for the first time after cleaning config makes buttons slide in from TOP-LEFT rather than TOP-RIGHT. Every subsequent hovering works correctly. (logixoul)&lt;br /&gt;
* can't move panel plasmoids. (logixoul)&lt;br /&gt;
* can't put pager or systray on panel. (logixoul)&lt;br /&gt;
* systray on desktop has no border. (logixoul)&lt;br /&gt;
* MinimizeAnimation doesn't animates correctly to the taskbar, with Kicker it   works fine (Plasma should tell KWin where the taskbar-entry is) (boom1992)&lt;br /&gt;
* The dictionary plasmoid doesn't show the results. (Mogger)&lt;br /&gt;
** Looks like fixed in r732655, shows the result, but first changes the box with animation, then changes the result text, also its a bit slow (emilsedgh)&lt;br /&gt;
* krunner hangs on each and every letter typed in after some time working in a kde4 desktop. May be related to manual killing the strigidaemon which goes nuts on CPU usage. Output from console: http://www.apaku.de/vardata/krunner_output_hang (apaku)&lt;br /&gt;
* notes applet should be resized when the text is bigger that current size (emilsedgh)&lt;br /&gt;
* Colorpicker and Kickoff plasmoid don't have context menu, so they can't be removed. (TunaTom)&lt;br /&gt;
** context menus are going to be replaced by hover-action-icons (ivan)&lt;br /&gt;
** Lancelot now has context menu and is (re)movable (emilsedgh)&lt;br /&gt;
* Running plasma with QT_FLUSH_PAINT I can see lots of extra repainting. For example the panel is very bad. (rich)&lt;br /&gt;
* Plasma is shown in the Alt+Tab windowlist, this should not happen (especially since switching to this app then does nothing visually except lose focus from the toplevel window) (BCoppens)&lt;br /&gt;
* Analog Clock: add text &amp;amp; seconds indicator. Change size to 400. Is so SLOW that it easily skips 3 seconds per redraw! (Core2 Duo 2.20GHz, Quadro FX 570M, nvidia binary drivers, Thinkpad T61p) (BCoppens)&lt;br /&gt;
* Digital clock is useless by its inconfigurability: I'm not interested in a disorganized list of timezones, no, I want a) the date underneath, b) a less fancy digital font instead of the current one with the distracting 'line' in the middle. (BCoppens)&lt;br /&gt;
**The date format is not affected by the settings in KControl.&amp;lt;JRT&amp;gt;&lt;br /&gt;
** Time Zone list should be redundant in configuration since the TZ should be set in KControl.  All that is needed is an option to display it.  Note, I think that this is the standard timezone list.  If what is wanted is an option to display a TZ other than the user's TZ, this should be a separate context menu item. &amp;lt;JRT&amp;gt;&lt;br /&gt;
* The Lock/Logout Widget has rectangular buttons -- should have square? IAC, icons should be centered on buttons. &amp;lt;JRT&amp;gt;&lt;br /&gt;
*System Tray Widget doesn't work correctly: The Widget doesn't size itself to hold the contents.  The contents seem to have the wrong X display priority (they are always on top).  It (the contents, not the widget) interacts with windows (snap).  The contents are only displayed on Desktop #1.  When something triggers a refresh of something, then the SystemTray widget resizes and looks correct but the icons are still not working correctly.  They are only on DeskTop #1 and always on top. &amp;lt;JRT&amp;gt;&lt;br /&gt;
*The Application Launcher Widget seems to be stuck in the middle of the screen; I can't drag it.  In this position with 1024x768 the menu window does not open correctly.  It extends beyond the top of the screen and is cut off. &amp;lt;JRT&amp;gt;&lt;br /&gt;
*The Clock on the Panel slides over and winds up on top of the TaskBar on the Panel.&amp;lt;JRT&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Plasma - Kickoff 'Start Menu' ====&lt;br /&gt;
&lt;br /&gt;
* Unable to resize the kickoff menu. (mbiebl)&lt;br /&gt;
* Kickoff opens konqueror when clicking on an entry under &amp;quot;My Computer&amp;quot;. (mbiebl)&lt;br /&gt;
* In kickoff, clicking the utilities menu and then clicking back again shows the top menu scrolled to the top rather than where it was before clicking utilities. (jstubbs)&lt;br /&gt;
** Confirmed. Additional strange bahaviour: When opened by clicking on a link in &amp;quot;Storage&amp;quot; for example, Konqueror shows the contents of &amp;quot;/&amp;quot; in an unnamed tab. Right of that tab is another one showing the correct location. If you click that tab, konqeuror crashes. (goliath23)&lt;br /&gt;
* Kickoff: Clicking the applications tab, when the tab is open should return it to top-level.Current catalog-memory is a good feature however, so keep that aswell. (eirik_)&lt;br /&gt;
* Kickoff does not start firefox. It loads the .desktop file in kwrite (amp)&lt;br /&gt;
&lt;br /&gt;
==== System Settings ====&lt;br /&gt;
* systemsettings has no menu entry. Typing it into kickoffs search entry doesn't find/list it either. (mbiebl)&lt;br /&gt;
* When clicking on &amp;quot;Appearance&amp;quot;, it seems to delete a file. http://rafb.net/p/zzS2fM55.html (Mogger)&lt;br /&gt;
**When I select &amp;quot;Appearance&amp;quot; in &amp;quot;System Settings&amp;quot;, three &amp;quot;Progress Dialog&amp;quot; boxes pop up.&amp;lt;JRT&amp;gt;&lt;br /&gt;
* Missing &amp;quot;get root rights&amp;quot; button on pages like Date/Time, thus its impossible to change such settings (apaku)&lt;br /&gt;
* Searching something doesn't seem to limit the displayed modules or highlight any of the search results.&lt;br /&gt;
* no settings to be changed for keyboard shortcuts - everything is empty (nixternal)&lt;br /&gt;
**This is probably a function of your system configuration.  IIUC,It reads an X11 file. &amp;lt;JRT&amp;gt;&lt;br /&gt;
* When clicking e.g. &amp;quot;Appearance&amp;quot;, the System Settings window doesn't get resized. This causes very ugly (horizontal and vertical) scrollbars (gissi)&lt;br /&gt;
* Default size for the text beneath the icons is too small. I see stuff like 'ppearanc' instead of 'Appearance' and 'ccesibilit'. Some other texts are wide enough, like 'Splash Screen'. (BCoppens)&lt;br /&gt;
* Changing the style to Oxygen changes all windows, EXCEPT the System Settings (BCoppens)&lt;br /&gt;
*Regional &amp;amp; Language::Time &amp;amp; Dates (should that be &amp;quot;Time &amp;amp; Date&amp;quot;?) doesn't have USA style date formats in &amp;quot;Short date format&amp;quot;: MM.DD.YYYY &amp;amp; mM.dD.YYYY and should also have formats with only 2 digits for year: YY.&lt;br /&gt;
&lt;br /&gt;
==== KMix ====&lt;br /&gt;
* &amp;lt;s&amp;gt;m_qcb-&amp;gt;blockSignals( true ); where m_qcb is null from MDWSlider::updateInternal during kmix startup http://pastebin.ca/759601 (jstubbs)&amp;lt;/s&amp;gt; Fixed by SVN commit [http://websvn.kde.org/?view=rev&amp;amp;revision=732246 732246]&lt;br /&gt;
* &amp;lt;s&amp;gt;Right click on KMix icon in system tray, select master channel, dialog comes up empty, when you close it KMix icon disappears from the tray (JLP)&amp;lt;/s&amp;gt; Fixed by SVN commit [http://websvn.kde.org/?view=rev&amp;amp;revision=732367 732367]&lt;br /&gt;
&lt;br /&gt;
==== KWin ====&lt;br /&gt;
* Windows are not fully redrawn when minimizing and then restoring with OpenGL compositing in use (jstubbs)&lt;br /&gt;
* the compositing KCM should provide an easy way to enable the COMPOSITE extension (logixoul)&lt;br /&gt;
* &amp;lt;s&amp;gt;Menu shadows are being left on the desktop (but not on windows, it seems) (Mogger)&amp;lt;/s&amp;gt; Fixed by SVN commit [http://websvn.kde.org/?view=rev&amp;amp;revision=732268 732268]&lt;br /&gt;
* Sometimes (tested with Konsole, X.org 7.3, latest nvidia drivers and a Geforce 5900XT), the clicked menus are not displayed and KWin crashes. Backtrace : [http://rafb.net/p/zmYj1980.html] (idem)&lt;br /&gt;
* After a while the alt-tab window list is completely missing though I can still switch between windows with alt+tab (apaku)&lt;br /&gt;
* alt+tab only allows to switch between windows on the same screen in a multihead setup, its impossible to activate a window on another screen (though its on the same virtual X11 desktop) (apaku)&lt;br /&gt;
* alt+tab (without compositing) shows a list of windows but no indication which window in this list is selected when cycling through them. (goliath23)&lt;br /&gt;
* KWin does not detect compositing ability on my pc with a GeForce 7600 GS (driver version 100.14.19) (goliath23) &lt;br /&gt;
* The Composite Effect 'Demo Liquid' crashes KWin (BCoppens)&lt;br /&gt;
* 'Scale In' effect also scales in Menus and Dropdown boxes from the 'middle' of their target area, this is ugly. Either don't do that for such windows, or let them scale in from their topleft corner (BCoppens)&lt;br /&gt;
* Alt+Shift+Tab for backwards scrolling through Alt+Tab shortcut is not assigned, but I can't remember if this was the case in KDE3 as well or not... (BCoppens)&lt;br /&gt;
*Moving windows with &amp;quot;Display Content&amp;quot; turned off does not display an empty frame. (using an OpenSource driver)&amp;lt;JRT&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== KNS ====&lt;br /&gt;
* KNS uses 100% CPU when 550 is enabled in kdebugdialog (jstubbs)&lt;br /&gt;
* Sometimes KNS dialog is under Settings dialog (Kanagram and KStars) modal/non-modal issue when KNS is invoked from a Config dialog (jstubbs)&lt;br /&gt;
&lt;br /&gt;
==== KHangMan ====&lt;br /&gt;
* &amp;lt;s&amp;gt;&amp;quot;Already Guessed&amp;quot; tooltip timer does not work.&amp;lt;/s&amp;gt; FIXED annma r732068&lt;br /&gt;
* &amp;lt;s&amp;gt;When changing the &amp;quot;Already Guessed&amp;quot; tim in Config, the current word should stay (KHangMan jumps to a new word).&amp;lt;/s&amp;gt; FIXED annma r732068&lt;br /&gt;
*  After typing an already typed letter, the focus is left on the guess &amp;quot;button&amp;quot;, which means I have to press tab to get back to the letter entry field. If we enable the focus back before tooltip is hidden, it means the tooltip has to be hidden when a new letter is entered. (jstubbs)&lt;br /&gt;
** annma: intented behaviour is that the input is impossible why popup is shown. To leave the kid the time to understand what he is doing. Messing with the tooltip now seems bad to me. It's a WON'T FIX until we have it tested with kids ;) sorry jstubbs!&lt;br /&gt;
* &amp;lt;s&amp;gt;See if the font progressbar can disappear after first run (jstubbs)&amp;lt;/s&amp;gt;&lt;br /&gt;
** annma: Removing your ~/.fonts/d dustismo_roman.ttf will make the bug go away. The font will reinstall and then it'll be found. Not sure why it happened...&lt;br /&gt;
* Test what happens for the fonts when no internet connection (jstubbs)&lt;br /&gt;
* Wish: when using the Special chars toolbar, letters should go immediatly in the word or in Missed. Annma is not sure this would work with kids, they maybe won't understand what happens. (jstubbs)&lt;br /&gt;
** annma: maybe a config option for KDE 4.1 as we are in feature freeze now.&lt;br /&gt;
* Language combo in toolbar does not resize correctly when changing language. (jstubbs)&lt;br /&gt;
* &amp;lt;s&amp;gt;Right-clicking &amp;quot;Type accented letters&amp;quot; does not offer the context sensitive help when the option is disabled. (jstubbs)&amp;lt;/s&amp;gt;&lt;br /&gt;
** annma: this is from Qt, it's default behaviour for QWhatsThis help.&lt;br /&gt;
&lt;br /&gt;
==== Kiten ====&lt;br /&gt;
* Searching for &amp;quot;one&amp;quot; takes a long time to process, during which the application blocks without any feedback. (jstubbs)&lt;br /&gt;
* From the Search menu, selecting Search {with Beginning of Word, Anywhere}, Grade or Strokes does not seem to have any affect (jstubbs)&lt;br /&gt;
* Selecting Verb or Noun from the grammatical element dropdown does not seem to have any affect (jstubbs)&lt;br /&gt;
&lt;br /&gt;
==== KBruch ====&lt;br /&gt;
* In fraction tasks, the denominators used sometimes exceed the max denominator that is set. (jstubbs) r732343 attempted to fixe it but not totally&lt;br /&gt;
&lt;br /&gt;
==== KPercentage ====&lt;br /&gt;
* &amp;lt;s&amp;gt;When starting a new set of tests, and on various other actions, the window unnecessarily moves to the centre of the screen (jstubbs)&amp;lt;/s&amp;gt; Fixed r732700&lt;br /&gt;
&lt;br /&gt;
==== KGeography ====&lt;br /&gt;
* &amp;lt;s&amp;gt;Intermittent crash after a placing state on a map (jstubbs)&amp;lt;/s&amp;gt; Fixed r732331 (tsdgeos)&lt;br /&gt;
* &amp;lt;s&amp;gt;Selecting zoom when placing state on a map leaves the cursor as the state to be placed - perhaps the cursor should change back to a pointer while in zoom mode? (jstubbs)&amp;lt;/s&amp;gt; Fixed r732314 (tsdgeos)&lt;br /&gt;
* With KWin's dimming of inactive windows, it is difficult to relate the colors signfying right/wrong answers back to the map (jstubbs)&lt;br /&gt;
&lt;br /&gt;
==== KmPlot ====&lt;br /&gt;
* Editing function does not work as if Enter is not doing anything (rivo, gissi and idem-kde4) Annma cannot reproduce.&lt;br /&gt;
**Note by gissi: For me, only editing a cartesian plot doesn't work, the others work as expected. Don't know wether that's the same for rivo and idem.&lt;br /&gt;
&lt;br /&gt;
==== KMail ====&lt;br /&gt;
* Creating a new Imap Account and press &amp;quot;Check what the Server Supports&amp;quot; in Security crashes KMail. Stacktrace / ConsoleLog at http://pastebin.ca/759562 (voltaire) &lt;br /&gt;
:: This is probably a KSSL problem, which will be fixed when the new KSSL arrives in kdelibs --[[User:TMG|TMG]] 00:03, 4 November 2007 (CET)&lt;br /&gt;
* &amp;lt;s&amp;gt;If I open a link from an email it opens it but then it crashes - Backtrace http://pastebin.ca/759997 (frank95com)&amp;lt;/s&amp;gt;&lt;br /&gt;
:: &amp;lt;s&amp;gt;This is a kdelibs (krun) bug, it happens in other apps, like Konsole, as well&amp;lt;/s&amp;gt; --[[User:TMG|TMG]] 00:03, 4 November 2007 (CET)&lt;br /&gt;
:: Fixed in kdelibs --[[User:TMG|TMG]] 21:27, 6 November 2007 (CET)&lt;br /&gt;
*When an IMAP server stops responding KMail popups up the &amp;quot;IMAP Disconnected&amp;quot; dialog with an &amp;quot;Ok&amp;quot; button. Clicking &amp;quot;Ok&amp;quot; crashes KMail. Stack Trace: http://www.pastebin.ca/759969 (JustinNoel)&lt;br /&gt;
* KMail initial account wizard. A process related to the KMail initial setup wizard crashes when &amp;quot;Check for supported security capabilites on...&amp;quot; appears. Console spew suggests something crashed. KMail starts with an IMAP account with an incorrect security configuration. Description/Reproduction Steps/Console Spew: http://www.pastebin.ca/760052 Needs verification as I only have one IMAP server to try. (Justin Noel)&lt;br /&gt;
:: Seems like the same bug above, the one reported by voltaire. --[[User:TMG|TMG]] 00:03, 4 November 2007 (CET)&lt;br /&gt;
* KMail with disconnected IMAP: after customizing options and restart, it crashes on startup http://pastebin.ca/764484 ([[User:Lure|Lure]] 09:07, 7 November 2007 (CET))&lt;br /&gt;
&lt;br /&gt;
==== Build issue ====&lt;br /&gt;
* &amp;lt;s&amp;gt;in kdebase when OpenGL is not found, cmake stops with &amp;quot;CMake Error: This project requires some variables to be set, and cmake can not find them. Please set the following variables: OPENGL_gl_LIBRARY (ADVANCED)&amp;quot; so there is a bad check somewhere in kdebase (annma, issue of frank95com, http://pastebin.ca/759575). Possible patch: http://pastebin.ca/759603 (annma). Other possible patch by ThomasZ: http://pastebin.ca/759605&amp;lt;/s&amp;gt;  fixed svn r733932	&lt;br /&gt;
* In kdebase on OS X 10.5 the build WITH_XKB = OFF variable is not respected resulting in failure of the build. (build process info found at http://techbase.kde.org/Getting_Started/Build/KDE4/Mac_OS_X_10.5_issues) Sorry it's so wordy, but I initially wrote it up for personal use.&lt;br /&gt;
&lt;br /&gt;
==== Kolf ====&lt;br /&gt;
* The direction and velocity marker flickers and often cannot be seen. Using opengl compositing. (jstubbs)&lt;br /&gt;
&lt;br /&gt;
==== KDElibs ====&lt;br /&gt;
* &amp;lt;s&amp;gt;The tab order of the configure shortcuts dialog is incorrect. (Mogger)&amp;lt;/s&amp;gt; Fixed by SVN commit [http://websvn.kde.org/?view=rev&amp;amp;revision=732404 732404]''&lt;br /&gt;
* Drag and drop doesn't work in the configure toolbars dialog. (Mogger)&lt;br /&gt;
* Applications crash when downloading something. Traceback from Konsole when clicking on a link: http://rafb.net/p/1aiHyn63.html (Mogger)&lt;br /&gt;
** The link appears to be dead&lt;br /&gt;
* cannot write Right-To-Left...in kde3 when you start a line with a character of an rtl language, the line goes rtl automatically (emilsedgh)&lt;br /&gt;
* Configure shortcuts dialog is too small at start: I cannot see the action name at all (it says stuff like 'C...' instead of 'Close'). Furthermore, and much worse: I cannot change the width of the columns at all to try to make the action names readable! (BCoppens)&lt;br /&gt;
&lt;br /&gt;
==== Konqueror ====&lt;br /&gt;
* Website http://kriptopolis.org it is really bad rendered, however it is fine with Konqueror 3.5.7. (q3xr2)&lt;br /&gt;
* often doesn't load pages properly, for example clicking the login link on a techbase page almost always gets me an empty page (apaku) (frank95com too, gruf too)&lt;br /&gt;
* &amp;lt;s&amp;gt;Cannot show thumbnails (emilsedgh)&amp;lt;/s&amp;gt;&lt;br /&gt;
** fixed by mlaurent (logixoul)&lt;br /&gt;
* Up Button loads a different view, while back button doesn't, when walking through the filesystem. The up button loads a similar view to what you get in dolhpin, while the default view when typing in a local path is a plain iconview (apaku)&lt;br /&gt;
* When entering already visited directories, the animated logo doesn't stop. (Plain iconview instead of dolphin part?) (Mogger)&lt;br /&gt;
* Nothing in View -&amp;gt; Sort By, Additional Information, Panels, Navigation Bar submenus (yuriy)&lt;br /&gt;
* Nothing except &amp;quot;home folder&amp;quot; in home folder sidebar (yuriy)&lt;br /&gt;
* Some favicons do not appear in Konqueror's nav bar to titlebar. google.com and kubuntu.org works. kde.org, cnn.com and slashdot.org do not work. (JustinNoel)&lt;br /&gt;
* pressing ctrl+a when focus is on addressbar selects whole webpage instead of the text that is written in the addressbar (only on webpages: khtmlpart?) (emilsedgh)&lt;br /&gt;
* have to keep refreshing pages in order for them to display (nixternal)&lt;br /&gt;
* have quite a few problems trying to edit this page alone (nixternal)&lt;br /&gt;
* In file management mode it can't show hidden files, it doesn't have this option in the View menu, neither there is a shorcut available. (q3xr2)&lt;br /&gt;
* In HTML forms (such as the textbox to edit this wikipage with, or the username box), the initial fontsize is small. Once I click on the form, the font suddenly enlargens. Especially annoying with this editbox, since the place where you think you clicked changes after fontsize change (BCoppens)&lt;br /&gt;
* Asks nicely if it has to store my form data (such as password and username in the Wallet, but does not actually do so (BCoppens)&lt;br /&gt;
* Clicking on a link to an in-page 'tag' (the a href=#tag thing, like there are lots of in the index of this wiki page), results in konqueror showing the 'Drag link' mouse cursor (BCoppens)&lt;br /&gt;
* Not only do I get blank pages, but I get the following on trying to edit this wiki with Konqueror of KDE4: after sending in the changes, it shows a blank page. I press F5, and Konq asks me to resubmit form data. Wiki then shows an almost-empty edit page, with 'Sorry! We could not process your edit due to a loss of session data' (BCoppens)&lt;br /&gt;
* Start Konq.  Press 'Next: An Introduction to Konqueror'. The page goes blank, and 'Previous page' also shows up blank. (BCoppens)&lt;br /&gt;
* With Konqui becoming webbrowser as primary task, it would make sense to redesign the start page altogether and remove stuff like Storage media, Trash etc. Show something like &amp;quot;Search the web&amp;quot; which points to a search engine, like Google, yahoo,...&lt;br /&gt;
* Start Konq. Enter '~'. Make a new tab (CtrlShift+N). Type something. Note how the cursor goes OVER the map icon, instead of starting next to it (BCoppens)&lt;br /&gt;
* (Different from the one above) Start Konq. Enter '~'. Make a new tab (CtrlShift+N). Enter '/'. Switch back to the first tab. It's caption suddenly changes from '/home/kde4/' to 'kde4'! Switching to the second tab, removes the '/' and makes that tab nameless) (BCoppens)&lt;br /&gt;
&lt;br /&gt;
==== IO-slaves ====&lt;br /&gt;
* Browsing with IO-slaves that require autenthication is broken: SMB, FTP, SSH do not display anything after authentication is entered (luca_b, nixternal, yuriy).&lt;br /&gt;
* When adding RSA keys using fish:/, the buttons to accept/refuse are blank. (luca_b, yuriy)&lt;br /&gt;
* smb:/ ioslave causes crash (nixternal)&lt;br /&gt;
* smb:/ ioslave does not work with shares that need authentication. Console output: http://pastebin.ca/760196 (luca_b)&lt;br /&gt;
* kio_file: After a while I have 100% of CPU usage when running KDE4. top says, the process is kio_file, which is sometimes up to 4 times running (amp)&lt;br /&gt;
* The settings:/ ioslave (accessible through Settings on the welcome screen of Konq) does not work at all. For example, try Appearanc&amp;amp;Themes -&amp;gt; Fonts: it tries to open this with KWrite! (BCoppens)&lt;br /&gt;
&lt;br /&gt;
==== Color KCM ====&lt;br /&gt;
* Changing the checkbox &amp;quot;Apply colors to non-KDE4 apps&amp;quot; doesn't trigger the changed signal and thus the apply button in systemsettings stays grayed out (apaku)&lt;br /&gt;
* the same as above applies to the whole Effects tab (apaku)&lt;br /&gt;
&lt;br /&gt;
==== Kate ====&lt;br /&gt;
* Crash when going down page-wise with PageDn beyond the end of the file. Backtrace: http://www.apaku.de/vardata/kate_crash_pagedn (apaku)&lt;br /&gt;
&lt;br /&gt;
==== Marble ====&lt;br /&gt;
* Navigate to Minneapolis (search is quick) and then zoom in until &amp;quot;saint paul&amp;quot; appears. Rotating up and down will now cause the text &amp;quot;saint paul&amp;quot; to jump around. (jstubbs)&lt;br /&gt;
* In full screen mode, clicking in the right half of the globe doesn't work. It seems that plasma is getting the events? (jstubbs)&lt;br /&gt;
&lt;br /&gt;
==== Kinfocenter ====&lt;br /&gt;
* Most of the Items are empty (emilsedgh)&lt;br /&gt;
&lt;br /&gt;
==== Kopete ====&lt;br /&gt;
* Adding an account a second time (same protocol, same user id as an existing) makes kopete crash (moi1392, idem-kde4). http://pastebin.ca/759660. More verbose fix in the works (Earthwings). http://lists.kde.org/?l=kopete-devel&amp;amp;m=119411618226111&amp;amp;w=2&lt;br /&gt;
* I can't get my Google Talk account to finish it's authentication process, however I can login without any troubles with my jabber.org account. I don't know if the trouble it's related to the SSL login or qca-tls which I have installed (q3xr2).&lt;br /&gt;
** Google Talk did not work before for me, but it works now (with today's SVN version), maybe you should retest with current SVN version.&lt;br /&gt;
*** It works now for me also! (q3xr2).&lt;br /&gt;
* Configure-&amp;gt;Plugins results in consistent crash here http://pastebin.ca/764575 ([[User:Lure|Lure]] 12:34, 7 November 2007 (CET))&lt;br /&gt;
&lt;br /&gt;
==== kfind ====&lt;br /&gt;
* kfind crashes when the find is stopped (by pressing &amp;quot;stop&amp;quot; button) during the find process (shaga)&lt;br /&gt;
* the stop button has to be pressed twice, the first click is lost (shaga)&lt;br /&gt;
&lt;br /&gt;
==== Gwenview ====&lt;br /&gt;
* Random crashes when navigating to directories, or when editing the path manually. Backtrace http://pastebin.ca/760077 (luca_b)&lt;br /&gt;
&lt;br /&gt;
==== Login Manager KCM ====&lt;br /&gt;
* There are numbers on the tabs (yuriy)&lt;br /&gt;
** yes - the kcm is too big to have non-clashing letter shortcuts.&lt;br /&gt;
&lt;br /&gt;
==== kscd ====&lt;br /&gt;
* crashes when inserting a CD. Problem is an assert thats hit (apaku):&lt;br /&gt;
  kscd(31228)/kdecore (KConfigSkeleton) KConfigSkeleton::readConfig: KConfigSkeleton::readConfig()&lt;br /&gt;
  kscd(31228)/libkcddb KCDDB::Cache::lookup: Looking up  &amp;quot;ae0cdb0e&amp;quot;  in CDDB   cache&lt;br /&gt;
  kscd(31228)/libkcddb KCDDB::CDInfo::load: Loaded CDInfo for  &amp;quot;ae0cdb0e&amp;quot;&lt;br /&gt;
  kscd(31228)/libkcddb KCDDB::Client::lookup: Found  1  hit(s)&lt;br /&gt;
  ASSERT: &amp;quot;info.numberOfTracks() == cddbInfo.numberOfTracks()&amp;quot; in   file /home/andreas/KDE-work/4.0/kdemultimedia/kscd/kscd.cpp, line 753&lt;br /&gt;
* crashes when starting up (but not if the user does not have permissions to acces the cdrom) backtrace: http://pastebin.ca/760172 (yuriy)&lt;br /&gt;
==== KFontChooser ====&lt;br /&gt;
*It doesn't work correctly for the bit mapped fonts Fixed[Misc] &amp;amp; Fixed[Sony] which come with X11 are the best example of this since they might be used in Konsole.  This is mainly a Konsole issue. &amp;lt;JRT&amp;gt; &lt;br /&gt;
**There should be only 2 sizes of Fixed[Sony] which works correctly in KDE3 it displays only two sizes.  I'm not 100% clear on how this works if you have a screen resolution other than 75 or 100, but xfontsel lists two point sizes for 100 dpi: 12 &amp;amp; 17 and this agrees with the KFontSel dialog.  But in KDE4 it lists the usual list of sizes from 4 to 64.&lt;br /&gt;
**There are several sizes of Fixed[Misc], according to xfonsel they are: 5, 6, 7, 8, 10, 11, 12, &amp;amp; 14.  KDE has this fairly close to correct -- close enough that it works OK.  It also lists 4 which may be a 75 dpi font and it lists 9 but not 12.  Could these be rounding errors?  IAC, KDE4 is the same as with Fixed[Sony], it has the standard list of 4 to 64.&lt;br /&gt;
*We need to first ask if this is a Qt bug/error as are other font issues.&lt;br /&gt;
**The Fixed{Misc} fonts are not a uniform set of fonts and I don't think that there is any way that Qt can deal with this issue.&lt;br /&gt;
&lt;br /&gt;
==== Akregator ====&lt;br /&gt;
*Crashes while trying to delete a feed. &lt;br /&gt;
** Nickname and backtrace in pastebin.ca please&lt;br /&gt;
&lt;br /&gt;
*Marking feeds or messages as Read does not work. The context menu in the feeds list reappear two times after the first select. Even when reading a message, it is not marked as read. ([[User:Kleag|Kleag]] 23:46, 7 November 2007 (CET))&lt;br /&gt;
&lt;br /&gt;
==== Kontact ====&lt;br /&gt;
*Crashes starting the application.&lt;br /&gt;
::We need a backtrace, otherwise we can't do anything. It doesn't crash for us. --[[User:TMG|TMG]] 21:24, 6 November 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
==== KDEPrint ====&lt;br /&gt;
*Printing a html file from konqueror. The &amp;quot;HTML Settings&amp;quot; tab has an odd layout. It seems to miss a proper border. (mbiebl)&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/KOffice_Overview</id>
		<title>Development/Tutorials/KOffice Overview</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/KOffice_Overview"/>
				<updated>2007-11-05T17:29:03Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Considerations */  Wikify&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;KOffice has gotten more and more configurable through plugins over time, which is a really good thing as 3rd party developers can extend KOffice using dedicated code for their purpose.&lt;br /&gt;
&lt;br /&gt;
You will learn what functionality you can place in each plugin type so you can choose wisely.  There is a general guide to writing plugins and each type has a tutorial showing how to create a new plugin of that type.&lt;br /&gt;
&lt;br /&gt;
well, not all required info is there yet; but this is the idea :)  Anyone want to help?&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Generic Information ==&lt;br /&gt;
Plugins are a design technique with a series of steps that will lead you to a loadable plugin.  If you want to know more its is interresting to read an overview at [[Development/Tutorials/Generic KOffice Plugin Creation|Generic KOffice Plugin Creation]]&lt;br /&gt;
&lt;br /&gt;
== Shapes ==&lt;br /&gt;
In KOffice shapes are document content.  This content can be manipulated by the user and can be shown on screen or printed.  The fact that they are plugins means that a new content types can be added to documents by just installing the plugin and starting your favorite KOffice application.&lt;br /&gt;
To get a feel for what a shape is, here are some examples of existing shapes, sometimes referred to as Flake shapes because shapes are one of the two main parts of the Flake library.&lt;br /&gt;
&lt;br /&gt;
We have a PathShape which is a generic vector shape capable of showing and printing any sort of vector art like SVG or EPS vector graphics.&lt;br /&gt;
&lt;br /&gt;
There is a Text plugin that is capable of showing marked up text with a huge feature set including HTML capabilities and a big part of the more extensive OpenDocument format.&lt;br /&gt;
&lt;br /&gt;
KSpread exports a tableShape, to allow a spread-sheet table to be embedded in other KOffice applications.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs-flake/classKoShapeRegistry.html KoShapeRegistry]&lt;br /&gt;
&lt;br /&gt;
The tutorial on how to write your own shape plugins can be found at [[Development/Tutorials/Write a Flake Plugin|Write a Flake Plugin]]&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
A tool is a plugin that handles user input and can manipulate either the general application data, or can manipulate a specific shape.&lt;br /&gt;
All user input mouse and keyboard events that are send to the document area (canvas), will be passed to the active tool.  The active tool can use them to, for example, move shapes around or rotate them. If you combine a tool with a shape plugin you can make the tool manipulate the data of the shape.  A good example is the text tool which is bundled with the text shape.  The text tool takes all keyboard events and thereby lets the user type text in the text shape.&lt;br /&gt;
&lt;br /&gt;
This gives a clear separation of control and content.  The shape holds the content and a tool is required to control that content.&lt;br /&gt;
&lt;br /&gt;
In general there are two types of Tools;&lt;br /&gt;
* generic tools that are not associated with a shape plugin.  Its rare that you will create such plugins, though we still need a 'measure' tool that falls in that category.&lt;br /&gt;
* bundled tools that come with a specific flake shape and is made to manipulate that shapes data.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs-flake/classKoToolRegistry.html KoToolRegistry]&lt;br /&gt;
&lt;br /&gt;
The tutorial on how to write your own shape plugins can be found at [[Development/Tutorials/Write a Flake Plugin|Write a Flake Plugin]]&lt;br /&gt;
&lt;br /&gt;
== Dockers ==&lt;br /&gt;
&lt;br /&gt;
Plugins that provide a docker are basically plugins that provide a graphical user interface element for KOffice applications.  In KOffice2 the focus on toolbars and dialogs will be less as they have been proven to be confusing to users because they clutter the interface.&lt;br /&gt;
Instead the focus is shifted to widgets that can be docked along the sides of a document window but also moved to be a separate window. The real change is that, unlike dialogs, they don't have an 'Ok' button but instead change the content life and immediately.&lt;br /&gt;
Examples of dockers are; the toolbox, the shape selector and the tool-options but also the color selector.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs/classKoDockRegistry.html KoDockRegistry]&lt;br /&gt;
&lt;br /&gt;
Within KOffice dockers could also be written in a scripting language like Python or Ruby. The [[Development/Tutorials/KSpread_Scripting#Scripting_Docker_Widgets|KSpread Scripting Docker]] tutorial shows how it was done within KSpread.&lt;br /&gt;
&lt;br /&gt;
=== Considerations ===&lt;br /&gt;
Dockers should never be passed a document or a view in the constructor.  The reasons for that is simple; the lifetime of the docker is longer then the lifetime of the document and also of the view.&lt;br /&gt;
&lt;br /&gt;
The proper way to do this is to let the application tell you there is a new document or a new image, etc. And listen on that.&lt;br /&gt;
This involves a couple of steps;&lt;br /&gt;
* The application should use the KoCanvasResourceProvider to put content on. Like the current layer, the current document etc.&lt;br /&gt;
* The docker should (also) inherit from KoCanvasObserver which means it will get notified when its canvas changes.&lt;br /&gt;
* Using the KoCanvasBase received from the KoCanvasObserver it can fetch the document from the KoCanvasResourceProvider.  It can also connect to the provider to be informed about any changes.&lt;br /&gt;
&lt;br /&gt;
An extra tip is to use the KoCanvasResource::DocumentIsLoading boolean, dockers should listen to it to avoid doing work while the document is loading.&lt;br /&gt;
&lt;br /&gt;
== Colorspaces ==&lt;br /&gt;
&lt;br /&gt;
== File Filters ==&lt;br /&gt;
&lt;br /&gt;
== Text Plugins ==&lt;br /&gt;
&lt;br /&gt;
The text component used in all KOffice applications has a set of plugins itself. These plugins allow the possibility to enhance the content as well as allow to enhance the editing experience.  Use Inline object plugins to write content such as inline variables and bookmarks.  Use Text Editing plugins to be able to replace the text a user types while he types it. For example for autocorrection.&lt;br /&gt;
&lt;br /&gt;
=== Inline Objects ===&lt;br /&gt;
&lt;br /&gt;
The plugins of this type effectively become a character in the text document.  What this means is that a user can insert an inline object and the plugin can decide the size and content of the character inserted.&lt;br /&gt;
A good example of inline objects are variables.  A variable can have a name and a value and altering the value of a variable will then change the value in the text all over the document. This is done by an inline object that shows the full text of the variable, but in the document it behaves as it is one big character that can't be split over lines or otherwise edited.&lt;br /&gt;
&lt;br /&gt;
An inline object does not have to have content, it can just be a placeholder as well. Which makes it ideal for things like in-text comments/annotations and Bookmarks.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs/classKoInlineObjectRegistry.html KoInlineObjectRegistry]&lt;br /&gt;
&lt;br /&gt;
=== Text Editing ===&lt;br /&gt;
&lt;br /&gt;
The text editing plugins are all about handling user input while (s)he is editing the text. A plugin can do near everything with the typed text, including altering it and adding markup.&lt;br /&gt;
The plugin gives events when a word and when a paragraph has been finished. Which is ideal for autocorrection and autoreplacement of text.&lt;br /&gt;
&lt;br /&gt;
Examples of usages of this plugin type are; a word count in a docker updated continuesly, auto correction of text, replacing formatted text with calculated values or custom shape plugins.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs/classKoTextEditingRegistry.html KoTextEditingRegistry]&lt;br /&gt;
&lt;br /&gt;
== Krita's plugins ==&lt;br /&gt;
* filters (effects)&lt;br /&gt;
* paintop (plugin that are in charge of painting when the user uses a drawing tool)&lt;br /&gt;
* viewplugin (aka misc)&lt;br /&gt;
See [http://docs.kde.org/development/en/koffice/krita/developers-plugins.html Krita's handbook]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Plasma/Tasks</id>
		<title>Projects/Plasma/Tasks</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Plasma/Tasks"/>
				<updated>2007-11-02T22:12:50Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Major Bugs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{warning|If you clear a task, please write &amp;quot;'''Completed'''&amp;quot; near it. If you are still working on it, please put your name. Percentage of the work done is accepted.}}&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
&lt;br /&gt;
If you want to claim a task, please put your name (or nickname, both is better) in brackets near the task you wish to claim. Please add it when you start working on it, and if you stop, please remove it, so we can know &amp;quot;who is working on what&amp;quot; and what tasks still needs to be started.&lt;br /&gt;
&lt;br /&gt;
And, of course, this will avoid duplication of work. Thanks a lot! =)&lt;br /&gt;
&lt;br /&gt;
{{note|This is a roughly sorted list of tasks that popped out during the meeting. We probably need to categorize it better, like seeing which task is blocker for which other, setting priority, split between &amp;quot;research&amp;quot; and &amp;quot;coding&amp;quot; and things like that. Still sounds like a premature thing though.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== KRunner ===&lt;br /&gt;
==== Major Bugs ====&lt;br /&gt;
In the alt-f2 dialog type a command (like 'kword') and press the button to have more options. Then press the same button again to get less options. =&amp;gt; crash&lt;br /&gt;
&lt;br /&gt;
==== Runners ====&lt;br /&gt;
* pull in options from kdesktop/minicli.cpp and merge into shell and app runners&lt;br /&gt;
* Search Runner: use strigi (blocked by Xesam)&lt;br /&gt;
* listen to async match updates (Interface:updateMatches())&lt;br /&gt;
* runners, runners and more runners!&lt;br /&gt;
&lt;br /&gt;
==== Interface ====&lt;br /&gt;
* options slide drawer animation&lt;br /&gt;
&lt;br /&gt;
==== Misc ====&lt;br /&gt;
* install [[Development/Tutorials/D-Bus/Autostart_Services|D-Bus autoactivation service]]&lt;br /&gt;
* QtScript bindings to AbstractRunner&lt;br /&gt;
&lt;br /&gt;
=== Plasma ===&lt;br /&gt;
''This is what we are focusing on implementing right now:''&lt;br /&gt;
* '''general libplasma'''&lt;br /&gt;
** unit tests.&lt;br /&gt;
** api documentation reviews&lt;br /&gt;
** XML Config: add support for unsupported data types (these are documented in the API docu)&lt;br /&gt;
** Applet needs a way to access resources for customization (think: clock faces)&lt;br /&gt;
** Need to implement the math in Phase to update the intervals according to the CurveShape, ala QTimeLine (ask aseigo for more details if you find that cryptic ;)&lt;br /&gt;
&lt;br /&gt;
* '''Applets'''&lt;br /&gt;
** application launcher interface&lt;br /&gt;
** &amp;lt;div style=&amp;quot;color: green&amp;quot;&amp;gt;taskbar (Robert Knight; others welcome to help)&amp;lt;/div&amp;gt;&lt;br /&gt;
** &amp;lt;div style=&amp;quot;color: green&amp;quot;&amp;gt;systray (Alexander Rodin; others welcome to help)&amp;lt;/div&amp;gt;&lt;br /&gt;
** &amp;lt;div style=&amp;quot;color: green&amp;quot;&amp;gt;on mouse over, show a set of small buttons that allow for the following actions: close, configure, lock, information and move. aseigo has graphics for the buttons already. (manyoso)&amp;lt;/div&amp;gt;&lt;br /&gt;
** add global settings config page, if it exists in the Package (which means adding a pair of entries in packages.cpp for globalconfigui and globalconfigxml), alongside the per-applet ones&lt;br /&gt;
&lt;br /&gt;
* '''plasmagik'''&lt;br /&gt;
** unit tests&lt;br /&gt;
** &amp;lt;div style=&amp;quot;color: green&amp;quot;&amp;gt;resuscitate trunk/playground/base/plasma/plasmagik (adjam, ruphy)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bindings'''&lt;br /&gt;
** &amp;lt;div style=&amp;quot;color: green&amp;quot;&amp;gt;QtScript bindings are being worked on (rdale)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''RootWidget''' (the &amp;quot;desktop&amp;quot;)&lt;br /&gt;
** &amp;lt;div style=&amp;quot;color: green&amp;quot;&amp;gt;Controls box: an expand-on-mouse-over widget that sits on top of the graphicsview and provides discoverable access to zooming, jumping, configuration, adding of elements, locking ...? Currently needs to pretty-fied and the more &amp;quot;techie&amp;quot; options removed (aseigo)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Corona''' (QGraphicsScene subclass)&lt;br /&gt;
** Zooming: 3-level zooming needs to be supported. 100% == 1 item group at full zoom; 50% == all item groups visible with panning with each item replaced by a simple icon; 10% == all item groups visible without panning, each group replaced by a simple icon and items not painted at all&lt;br /&gt;
** Respond to resolution changes&lt;br /&gt;
** Ability to define default panel/desktop/applet layouts without modifying loadDefaultSetup code, e.g. with config files on disk.&lt;br /&gt;
&lt;br /&gt;
* '''Views'''&lt;br /&gt;
** Implement configurable background painting. This can in part be ported from kdesktop for DesktopView.&lt;br /&gt;
** Implement composite based translucency for panels&lt;br /&gt;
** Create a dashboard view (full screen, always on top)&lt;br /&gt;
&lt;br /&gt;
* '''Widgets''' [[../Widgets|Here is a page describing the nature of these widgets]]. Widgets still needed that aren't implemented yet are:&lt;br /&gt;
** Icon needs the icon hover feature to be finished&lt;br /&gt;
** [[/HTMLViewer|An html widget]]&lt;br /&gt;
** panner widget that shows N QGraphicsViewItems at a time in a fancy manner (asiraj)&lt;br /&gt;
&lt;br /&gt;
* '''DataEngine'''&lt;br /&gt;
** Configuration parameters for sources&lt;br /&gt;
&lt;br /&gt;
''We also have:''&lt;br /&gt;
* Implement Zack's physical equations for animations&lt;br /&gt;
&lt;br /&gt;
''Nice to have:''&lt;br /&gt;
* Implement python bindings of Plasma&lt;br /&gt;
* Associate units with a data source's data?&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Oxygen/StyleWinDec</id>
		<title>Projects/Oxygen/StyleWinDec</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Oxygen/StyleWinDec"/>
				<updated>2007-10-19T22:18:07Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: add idea&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current Oxygen style and window decoration for KDE4 can be found in SVN under http://websvn.kde.org/trunk/KDE/kdebase/runtime/kstyles/oxygen and http://websvn.kde.org/trunk/KDE/kdebase/workspace/kwin/clients/oxygen&lt;br /&gt;
&lt;br /&gt;
== Incoming New Bugs ==&lt;br /&gt;
* add your entry here and we (the developers) will move it down and prioritize&lt;br /&gt;
&lt;br /&gt;
* Dockers;  the title is positioned too far to the left and it runs into the rounded-border&lt;br /&gt;
&lt;br /&gt;
* In (double) spinboxes the font is positioned one pixel too high. Lowering it one makes it baseline-aligned with labels in front. &amp;lt;b&amp;gt;Unfortunately not possible &amp;lt;/b&amp;gt;&lt;br /&gt;
: what about altering the size hints so the whole widget moves down? &lt;br /&gt;
&lt;br /&gt;
* The ok and cancel buttons on dialogs (so called 'control buttons') don't have the same width. &amp;lt;b&amp;gt;Not a style problem &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Known Bugs ==&lt;br /&gt;
* tabs&lt;br /&gt;
** east and west aren't done at all &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
** small glitches in filling inactive tabs &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* Dockers&lt;br /&gt;
** frame when docked can be overwritten &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
** frame when floating should have rounded corners &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* KHTML integration&lt;br /&gt;
** khtml makes illegal assumptions about buttons. Awaits patch review by Maxim &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* KLineEdit&lt;br /&gt;
** stylesheets ruin the look. Aseigo says to wait for qt fix &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* Holes in general&lt;br /&gt;
** top color doesn't go around curves &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
** [assigned: mwoehlke] color choice needs to be reviewed &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
** with autoFillBackground, corners are overpainted (how to fix this??) &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* need to audit color role use (see QA #3) &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* Reverse layout is broken&lt;br /&gt;
** listview,tablevies etc paint the frame in LTR place &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* progress bars still not like the artist wants &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* menus not done &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* horizontal scrollbar looking a bit weird &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* windeco&lt;br /&gt;
** corners should really be alpha transparent &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* should repaint on globalChange signal (how?) &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
** this seems to only be a problem for the colors kcm, may not even be a style bug&lt;br /&gt;
*headers in tables&lt;br /&gt;
**not really done - but the plain color look is acceptable for now &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* checkboxes in menus and Kontact-ToDo are broken &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* A groupbox does not report a minimum size that allows it to show the text on the box. I.e. a groupbox with no contents, the groupbox-title is clipped. &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== QA ==&lt;br /&gt;
* reverse layout&lt;br /&gt;
* high-contrast color schemes (i.e. all fg/bg black or white)&lt;br /&gt;
* reverse-light/dark color schemes (e.g. light-on-dark buttons with dark-on-light views, etc.)&lt;br /&gt;
* tabs, in all directions&lt;br /&gt;
* Remove gray space between scrollbar and the text area it controls.&lt;br /&gt;
* If shadows are enabled, remove window margins on the bottom, left, and right sides.&lt;br /&gt;
* sliders, scrollbars, progress - in all orientations and good cross section of values&lt;br /&gt;
* content padding works for all controls, does not break sizeToContents functionality&lt;br /&gt;
* controls align nicely and controls that should be the same size, are&lt;br /&gt;
&lt;br /&gt;
[[Category:Artwork]][[Category:Oxygen]]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Oxygen/StyleWinDec</id>
		<title>Projects/Oxygen/StyleWinDec</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Oxygen/StyleWinDec"/>
				<updated>2007-10-18T13:18:32Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current Oxygen style and window decoration for KDE4 can be found in SVN under http://websvn.kde.org/trunk/KDE/kdebase/runtime/kstyles/oxygen and http://websvn.kde.org/trunk/KDE/kdebase/workspace/kwin/clients/oxygen&lt;br /&gt;
&lt;br /&gt;
== Incoming New Bugs ==&lt;br /&gt;
* add your entry here and we (the developers) will move it down and prioritize&lt;br /&gt;
&lt;br /&gt;
* Dockers;  the title is positioned too far to the left and it runs into the rounded-border&lt;br /&gt;
&lt;br /&gt;
* Toolbuttons have too much space between them. In layouts where the spacing has been removed there is still a huge amount of space between the images (which are the only visible part of a toolbutton).&lt;br /&gt;
&lt;br /&gt;
* In (double) spiboxes the font is positioned one pixel too high. Lowering it one makes it baseline-aligned with labels in front.&lt;br /&gt;
&lt;br /&gt;
* The ok and cancel buttons on dialogs (so called 'control buttons') don't have the same width.&lt;br /&gt;
&lt;br /&gt;
* A groupbox does not report a minimum size that allows it to show the text on the box. I.e. a groupbox with no contents, the groupbox-title is clipped.&lt;br /&gt;
&lt;br /&gt;
== Known Bugs ==&lt;br /&gt;
* tabs&lt;br /&gt;
** east and west aren't done at all &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
** small glitches in filling inactive tabs &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* dockers&lt;br /&gt;
** frame when docked can be overwritten &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
** frame when floating should have rounded corners &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* holes&lt;br /&gt;
** top color doesn't go around curves &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
** [assigned: mwoehlke] color choice needs to be reviewed &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
** with autoFillBackground, corners are overpainted (how to fix this??) &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* toolbuttons&lt;br /&gt;
** glow color are not removed &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* need to audit color role use (see QA #3) &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* reverse layout is broken&lt;br /&gt;
** listview,tablevies etc paint the frame in LTR place &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* progress bars still not like the artist wants &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* menus not done &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* horizontal scrollbar looking a bit weird &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* windeco&lt;br /&gt;
** corners should really be alpha transparent &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
** buttons should change color on inactive/active &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
** buttons should change on hover &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* should repaint on globalChange signal (how?) &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
** this seems to only be a problem for the colors kcm, may not even be a style bug&lt;br /&gt;
*headers in tables&lt;br /&gt;
**not really done - but the plain color look is acceptable for now &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* checkboxes in menus and Kontact-ToDo are broken &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* draw arrows as in windec &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== QA ==&lt;br /&gt;
* reverse layout&lt;br /&gt;
* high-contrast color schemes (i.e. all fg/bg black or white)&lt;br /&gt;
* reverse-light/dark color schemes (e.g. light-on-dark buttons with dark-on-light views, etc.)&lt;br /&gt;
* tabs, in all directions&lt;br /&gt;
* Remove gray space between scrollbar and the text area it controls.&lt;br /&gt;
* If shadows are enabled, remove window margins on the bottom, left, and right sides.&lt;br /&gt;
* sliders, scrollbars, progress - in all orientations and good cross section of values&lt;br /&gt;
* content padding works for all controls, does not break sizeToContents functionality&lt;br /&gt;
* controls align nicely and controls that should be the same size, are&lt;br /&gt;
&lt;br /&gt;
[[Category:Artwork]][[Category:Oxygen]]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Oxygen/StyleWinDec</id>
		<title>Projects/Oxygen/StyleWinDec</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Oxygen/StyleWinDec"/>
				<updated>2007-10-18T13:18:06Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Incoming New Bugs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current Oxygen style and window decoration for KDE4 can be found in SVN under http://websvn.kde.org/trunk/KDE/kdebase/runtime/kstyles/oxygen and http://websvn.kde.org/trunk/KDE/kdebase/workspace/kwin/clients/oxygen&lt;br /&gt;
&lt;br /&gt;
== Incoming New Bugs ==&lt;br /&gt;
* add your entry here and we (the developers) will move it down and prioritize&lt;br /&gt;
Dockers;  the title is positioned too far to the left and it runs into the rounded-border&lt;br /&gt;
&lt;br /&gt;
* Toolbuttons have too much space between them. In layouts where the spacing has been removed there is still a huge amount of space between the images (which are the only visible part of a toolbutton).&lt;br /&gt;
&lt;br /&gt;
* In (double) spiboxes the font is positioned one pixel too high. Lowering it one makes it baseline-aligned with labels in front.&lt;br /&gt;
&lt;br /&gt;
* The ok and cancel buttons on dialogs (so called 'control buttons') don't have the same width.&lt;br /&gt;
&lt;br /&gt;
* A groupbox does not report a minimum size that allows it to show the text on the box. I.e. a groupbox with no contents, the groupbox-title is clipped.&lt;br /&gt;
&lt;br /&gt;
== Known Bugs ==&lt;br /&gt;
* tabs&lt;br /&gt;
** east and west aren't done at all &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
** small glitches in filling inactive tabs &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* dockers&lt;br /&gt;
** frame when docked can be overwritten &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
** frame when floating should have rounded corners &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* holes&lt;br /&gt;
** top color doesn't go around curves &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
** [assigned: mwoehlke] color choice needs to be reviewed &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
** with autoFillBackground, corners are overpainted (how to fix this??) &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* toolbuttons&lt;br /&gt;
** glow color are not removed &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* need to audit color role use (see QA #3) &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* reverse layout is broken&lt;br /&gt;
** listview,tablevies etc paint the frame in LTR place &amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;showstopper&amp;lt;/span&amp;gt;&lt;br /&gt;
* progress bars still not like the artist wants &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* menus not done &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* horizontal scrollbar looking a bit weird &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* windeco&lt;br /&gt;
** corners should really be alpha transparent &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
** buttons should change color on inactive/active &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
** buttons should change on hover &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* should repaint on globalChange signal (how?) &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
** this seems to only be a problem for the colors kcm, may not even be a style bug&lt;br /&gt;
*headers in tables&lt;br /&gt;
**not really done - but the plain color look is acceptable for now &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;releasable&amp;lt;/span&amp;gt;&lt;br /&gt;
* checkboxes in menus and Kontact-ToDo are broken &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
* draw arrows as in windec &amp;lt;span style=&amp;quot;color: orange&amp;quot;&amp;gt;priority&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== QA ==&lt;br /&gt;
* reverse layout&lt;br /&gt;
* high-contrast color schemes (i.e. all fg/bg black or white)&lt;br /&gt;
* reverse-light/dark color schemes (e.g. light-on-dark buttons with dark-on-light views, etc.)&lt;br /&gt;
* tabs, in all directions&lt;br /&gt;
* Remove gray space between scrollbar and the text area it controls.&lt;br /&gt;
* If shadows are enabled, remove window margins on the bottom, left, and right sides.&lt;br /&gt;
* sliders, scrollbars, progress - in all orientations and good cross section of values&lt;br /&gt;
* content padding works for all controls, does not break sizeToContents functionality&lt;br /&gt;
* controls align nicely and controls that should be the same size, are&lt;br /&gt;
&lt;br /&gt;
[[Category:Artwork]][[Category:Oxygen]]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Generic_KOffice_Plugin_Creation</id>
		<title>Development/Tutorials/Generic KOffice Plugin Creation</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Generic_KOffice_Plugin_Creation"/>
				<updated>2007-08-29T11:19:31Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* The concept of a plugin. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Writing a plugin for KOffice technically means the following things are created;&lt;br /&gt;
* An interface that is shipped in the base-libraries will be inherited from, and functionality implemented unique to the plugin.  Examples of these interfaces are KoShape, KoTool and KoColorSpace.&lt;br /&gt;
* A factory class is created.  The factory design pattern allows the plugin to create as many instances of the plugin code as required in a flexible manner.  Each plugin type has its own Factory object that should be inherited from.&lt;br /&gt;
* A plugin object is created.  This is really a plugin-loader object and it will be created and immediately deleted by the KOffice libraries.&lt;br /&gt;
* A library file is installed that contains all classes that make up the plugin.&lt;br /&gt;
* A desktop file is installed with the information about the plugin, including the name of the library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The concept of a plugin. ==&lt;br /&gt;
&lt;br /&gt;
The concept is really based on what Object Orientated design is saying, it means that you can create a programmer-interface and encapsulate that in a class without being very clear as to what that implementation is suppost to do.  You can then supply several classes that actually contains the implementation of the programmer-interface, each in their own way.&lt;br /&gt;
The actual way that the class responds to the same environment is thus the implementation and not the programmer-interface.&lt;br /&gt;
Plugins are a way to provide a different implementation for a known interface.&lt;br /&gt;
&lt;br /&gt;
KOffice has defined several classes as base classes and has made the programmer interface of those base classes generic enough so a wide range of functionality can be accomplished by providing a plugin with a new implementation for such a base class.&lt;br /&gt;
&lt;br /&gt;
An example;  one plugin type that KOffice supports is a docker widget.  A docker widget is really a widget that can be shown on screen like a button or a text field are widgets as well.&lt;br /&gt;
The plugin can ship a new implementation of the QDockWidget class by inheriting from that QDockWidget and providing text/buttons and functionality using the full API of the Qt and KDE/KOffice libraries to do their work.&lt;br /&gt;
This means I can provide a plugin that ships a docker. And the docker shows the time of day, for example.  By installing the plugin according to the instructions for that type of KOffice-plugin the KOffice application are able to find it and the docker will be created and shown on screen.&lt;br /&gt;
&lt;br /&gt;
One unique property of a plugin is that it is self contained.  Which means that the end result of the plugin is one library which exports just the 'plugin object'.  This means that whatever code and classes is changed in one plugin can not possibly affect code in another plugin or even in the KOffice applications.&lt;br /&gt;
This has the benefit that development becomes more separated and changes in one place will not give problems in another.&lt;br /&gt;
It is therefor suggested to use any number of classes that fit your design and programming style, and you are free to avoid using namespaces or class name prefixes, as you wish.  In other words; your plugin is walled off, nobody will be bothered by what you do, or how do you it.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
&lt;br /&gt;
The '''first component''' is the class that inherits from the interface this plugin represents.&lt;br /&gt;
Each plugin type will go into details on this as each interface has different features and requirements.&lt;br /&gt;
&lt;br /&gt;
The '''factory component''' is also unique per plugin, but quite generic in setup and idea.  The reason for the existance of a factory is that it makes it possible to create any number of the plugin objects at the time that the host applications want to do this, probably at the request of the user.&lt;br /&gt;
The workflow in general is this;&lt;br /&gt;
* A plugin is loaded and a factory is created. (see the plugin-object component)&lt;br /&gt;
* This factory is registered in a Registry.&lt;br /&gt;
* Applications query the registry to ask about all plugins and use, for example, the name and an icon from the factory to show buttons on screen.&lt;br /&gt;
* The user clicks on a button, or in another way selects the plugin factory.&lt;br /&gt;
* The plugin factory is then asked to create a new instance of the thing it is meant to create.&lt;br /&gt;
* That new shape or widget or other thing is used in the document or gui. All depending on the plugin type.&lt;br /&gt;
&lt;br /&gt;
This means that our main advertisement to the outside world is the factory. As the factory is used to show the user what kind of things this plugin can do.  Each plugin type has its own factory, with at minimum a create() like method which then returns a new instance.&lt;br /&gt;
The factories typically have a large set of user interface components you can register on them. Like a name, or an icon etc.  It is wise to fill as many of them with relevant information as possible.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The next component is the '''Plugin component'''.  This is a QObject inheriting class that has a specific constructor signature and, interrestingly, will be deleted immediately after it is created.&lt;br /&gt;
The trick therefor is to do all the work of creating and registring the factories in the constructor.&lt;br /&gt;
The code for this class is pretty simple, and you copy paste it with just a few modifications;&lt;br /&gt;
&lt;br /&gt;
in the header file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;&lt;br /&gt;
#include &amp;lt;QObject&amp;gt;&lt;br /&gt;
class MyPlugin : public QObject {&lt;br /&gt;
   Q_OBJECT&lt;br /&gt;
public:&lt;br /&gt;
   MyPlugin(QObject * parent, const QStringList &amp;amp;list);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in the cpp file;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;&lt;br /&gt;
#include &amp;quot;MyPlugin.h&amp;quot;&lt;br /&gt;
#include &amp;lt;kgenericfactory.h&amp;gt;&lt;br /&gt;
#include &amp;lt;KoShapeRegistry.h&amp;gt;&lt;br /&gt;
#include &amp;lt;KoToolRegistry.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
K_EXPORT_COMPONENT_FACTORY(libraryname, KGenericFactory&amp;lt;MyPlugin&amp;gt;(&amp;quot;MyPlugin&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
MyPlugin::MyPlugin(QObject * parent, const QStringList &amp;amp;)&lt;br /&gt;
   : QObject(parent)&lt;br /&gt;
{&lt;br /&gt;
   KoToolRegistry::instance()-&amp;gt;add(new MyToolFactory(parent));&lt;br /&gt;
   KoShapeRegistry::instance()-&amp;gt;add(new MyShapeFactory(parent));&lt;br /&gt;
}&lt;br /&gt;
#include &amp;lt;MyPlugin.moc&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example registeres 2 factories, but you can register any number you want to ship in 1 plugin.  Note how only the factory is created, and nothing else is done.  This makes loading of the plugin as fast as possible.&lt;br /&gt;
If you copy paste this code make sure you update the 'libraryname' to be the (all lowercase) name of your plugin-library.  Which is also repeated in the desktop file.  Note that the name is without any extentions.  In the &amp;lt;code&amp;gt;K_EXPORT_COMPONENT_FACTORY&amp;lt;/code&amp;gt; macro the 'MyPlugin' is repeated twice.  Its easiest to just replace that with the class name you choose for your project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''library''' is what will contain all the compiled classes of your plugin.&lt;br /&gt;
&lt;br /&gt;
A plugin is technically implemented as a library, at least on Linux and other unixes.  It is loaded as a library by KOffice near the start of the application start.  As the plugin is a library all development software can create them using a linker.&lt;br /&gt;
It is worth noting that it is possible for your plugin to depend on external shared libraries, apart from the koffice ones.  But you should install that shared library as well as your plugin.&lt;br /&gt;
In cmake the creation of a library goes like this;&lt;br /&gt;
&lt;br /&gt;
 ########### Flake Plugin library ###############&lt;br /&gt;
 project( myPlugin)&lt;br /&gt;
 include_directories( ${KOFFICEUI_INCLUDES} )&amp;lt;br&amp;gt;&lt;br /&gt;
 SET ( myplugin_SRCS&lt;br /&gt;
    MyPlugin.cpp&lt;br /&gt;
    # other cpp files&lt;br /&gt;
 )&amp;lt;br&amp;gt;&lt;br /&gt;
 kde4_add_plugin(textshape ${myplugin_SRCS})&lt;br /&gt;
 target_link_libraries(myplugin kofficeui)&lt;br /&gt;
 install(TARGETS myplugin DESTINATION ${PLUGIN_INSTALL_DIR})&lt;br /&gt;
 install( FILES myplugin.desktop DESTINATION ${SERVICES_INSTALL_DIR})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And last is the '''desktop-file component''' after which the plugin will be found and used by KOffice.&lt;br /&gt;
A desktop file is basically a database record for the KDE database of what is installed.  In this case the component is a 'Service'.&lt;br /&gt;
For our running example here is myplugin.desktop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code ini&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Encoding=UTF-8&lt;br /&gt;
Name=My Shape&lt;br /&gt;
ServiceTypes=KOffice/Flake&lt;br /&gt;
Type=Service&lt;br /&gt;
X-KDE-Library=myplugin&lt;br /&gt;
X-Flake-Version=1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A couple of things are important;&lt;br /&gt;
* The encoding has to match the encoding used.  So make sure you use an editor that understands and writes utf-8 when editing this file.&lt;br /&gt;
* The name is used for the plugin-manager.&lt;br /&gt;
* The ServiceTypes is used to specify which registry should try to load us.  One plugin can contain any number of factories, and some would say, it can contain any number of plugins.  It typically is useful to combine a shape and a tool into one plugin, for example.  Now, when an application looks for all shape plugins, our plugin should be found, naturally.  So we can choose to use the ServiceTypes 'KOffice/Shape'.  But when the application looks for tools we should also find the plugin.  So we might need to have 'KOffice/Tool' instead.&amp;lt;br&amp;gt;This gets confusing and we don't want one plugin to be loaded twice, so instead we take the more generic 'KOffice/flake' which will be searched for when either a shape or a tool is requested.  Each plugin type will show the best matching ServiceType, but if you are doubtful you can always use 'KOffice/Flake'.&lt;br /&gt;
* The X-KDE-Library field has to contain the actual (lowercase) name of the library we created in the previous step.  Without any extention.&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/kdelibs</id>
		<title>Projects/kdelibs</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/kdelibs"/>
				<updated>2007-07-28T11:31:22Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: Add one&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The Master Todo List for KDE 4 =&lt;br /&gt;
&lt;br /&gt;
This project page contains several lists (presented as tables) of things we still need to do in the kdelibs module.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
Fix these bugs as soon as possible.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Issue !! Reported by !! Being fixed by !! Status&lt;br /&gt;
|-&lt;br /&gt;
| The KFileDialog file extension stuff has disappeared. There seems to be insufficient spacing around that checkbox too. || Clarence Dang || Clarence Dang || Fix of first bit is to revert the top hunk of this [http://lists.kde.org/?l=kde-commits&amp;amp;m=111835187828266&amp;amp;w=2 patch], don't think this causes a getOpenUrl() regression, will ask jowenn&lt;br /&gt;
|-&lt;br /&gt;
| KDoubleNumInput doesn't handle keyboard input properly esp. with '.'.  I  did see a FIXME in that file regarding the KIntNumInput validator or similar. || Clarence Dang || ||&lt;br /&gt;
|-&lt;br /&gt;
| Pressing the '?' button (from kwin) on a child widget of a widget  containing WhatsThis complains about a lack of WhatsThis, even though it  could just fetch it from its parent. || Clarence Dang || ||&lt;br /&gt;
|-&lt;br /&gt;
| Saving an image with RGB KImageIO crashes in SGIImage::writeImage() || Clarence Dang || ||&lt;br /&gt;
|-&lt;br /&gt;
| The settings-&amp;gt;configure shortcuts dialog needs some serious usability  love :)  Oh, and it fails to show up the majority of my actions in kword. || Thomas Zander || Andreas Hartmetz ||&lt;br /&gt;
|-&lt;br /&gt;
| One cannot call KGlobalSettings::desktopGeometry(this) in a const method of a QWidget. || Loïc Corbasson || Loïc Corbasson || [http://pastebin.com/m628a3f67 Patch available], discussed with thiago, will commit next Monday&lt;br /&gt;
|-&lt;br /&gt;
| KPrinter doesn't work well after a myKPrinter.setOutputFormat(QPrinter::PdfFormat);&lt;br /&gt;
| Thomas Zander&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Do Now ==&lt;br /&gt;
&lt;br /&gt;
Things we need to do right away.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Issue !! Person !! Status&lt;br /&gt;
|-&lt;br /&gt;
| Remove deprecated methods. || ||&lt;br /&gt;
|-&lt;br /&gt;
| Remove classes that aren't used by more than 1 app. || ||&lt;br /&gt;
|-&lt;br /&gt;
| KSSL needs love || thiago ||&lt;br /&gt;
|-&lt;br /&gt;
| Phonon's extended API || Matthias Kretz ||&lt;br /&gt;
|-&lt;br /&gt;
| Oxygen style (currently in playground || Casper Boemann ||&lt;br /&gt;
|-&lt;br /&gt;
| Buncha KIO issues || Jeff Mitchell, ervin, dfaure ||&lt;br /&gt;
|-&lt;br /&gt;
| URLArgs split up into OpenUrlArguments and BrowserArguments || dfaure ||&lt;br /&gt;
|-&lt;br /&gt;
| KDebug reimplementation from QDebug || thiago, dirk ||&lt;br /&gt;
|-&lt;br /&gt;
| On-the-fly add pages to KConfigDialog || Joris Guisson ||&lt;br /&gt;
|-&lt;br /&gt;
| Port K3Icon to KIcon. || ||&lt;br /&gt;
|-&lt;br /&gt;
| KDirNotify::emitFilesChanged complains that it's only half implemented || ||&lt;br /&gt;
|-&lt;br /&gt;
| KPrinter sucks, improve it.|| ||&lt;br /&gt;
|-&lt;br /&gt;
| kdefx. remove? || mwoehlke ||&lt;br /&gt;
|-&lt;br /&gt;
| kstyle fixes || Maxsim ||&lt;br /&gt;
|-&lt;br /&gt;
| API improvements that make it easier to port from KDE3 (in the sense of less work or things to change). It is time to make our desktop functional, and while this might mean to change the API here and there, our focus should be to get the application code we have from KDE3 running at least as good as it did with KDE3, without actually having to rewrite all of our existing code.|| ||&lt;br /&gt;
|-&lt;br /&gt;
| Import KExpandableWidget (KCollapsibleGroupBox?? -- 'Expandable' may be confused with To/CC/BCC lineedits in kmail) to kdeui || danimo ||&lt;br /&gt;
|-&lt;br /&gt;
| Rename KXMLGUIBuilder, KXMLGUIClient, KXMLGUIFactory to KXmlGuiBuilder, KXmlGuiClient, KXmlGuiFactory, respectively || Robin Stocker ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Medium to Large-Scale Items ==&lt;br /&gt;
&lt;br /&gt;
Medium to large-scale API changes that we would like to make for the next binary incompatible release.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Issue !! Person !! KDE Version !! Status&lt;br /&gt;
|-&lt;br /&gt;
| Check for forked classes in kde pim and other modules || Danimo || ||&lt;br /&gt;
|-&lt;br /&gt;
| Remove all KSocks references throughout KDE in favor of KNetwork's socket implementations. || Thiago || ||&lt;br /&gt;
|-&lt;br /&gt;
| Remove all methods marked 'deprecated' in KDE 3.x. || Martijn || ||&lt;br /&gt;
|-&lt;br /&gt;
| Make it possible to create a KSystemTray without a KMainWindow and instead lazily create the main window on demand. || Martijn || ||&lt;br /&gt;
|-&lt;br /&gt;
| Make KSystemTray add its own reference to KApp, so tray apps that adhere to the style guide can safely close their main window without having to worry about the app quitting instead. || Martijn || ||&lt;br /&gt;
|-&lt;br /&gt;
| Sort out reference counting of applications and KMainWindows: Add a setRefCountEnabled() function to KApplication; deref()ing the last reference should only quit the application if reference counts are enabled, and the reference count should be disabled by default so apps that don't use a KMainWindow mostly continue to work. Make the KMainWindow constructor call setRefCountEnabled(true), and make each KMainWindow hold its own reference to the application. The KMainWindow should drop its app reference on hide, and regain it on show.&amp;lt;p&amp;gt;Make KSysTray also hold a reference to the app. Then apps that use more than one main window and the tray (like KSIrc and Kopete) will quit at the right time without nasty hacks. || Richard Smith || ||&lt;br /&gt;
|-&lt;br /&gt;
| Make some long-lasting operations threaded. There are some operations in KDE that take too long on at least ~500MHz hardware to be done using event loops. Examples are the use of KLibLoader to dlopen plugins and KRun to fire up other processes.&amp;lt;p&amp;gt;Konqueror and KMail tend to stall occasionally too, but that's harder to refactor because the bulk of the work there is X11-related.|| Martijn || ||&lt;br /&gt;
|-&lt;br /&gt;
| Make it possible to use SSL-ed sockets outside KIO. KSSL isn't very suitable for reuse, and the certificate dialogs are not even available in public API at all, leading e.g. to Kopete IRC duplicating a lot of stuff and all KDE Jabber clients based on libpsi (PSI, Light Hawk and Kopete) using homebrewn solutions.  [How does this have to do with changing KIO?  It's just a request to have that code in a different form....] ||Martijn|| ||&lt;br /&gt;
|-&lt;br /&gt;
| Solve need for casting when using bitfield enums (e.g. K3Process::Communication) by the use of Q_DECLARE_FLAGS/Q_DECLARE_OPERATORS_FOR_FLAGS || Simon|| ||&lt;br /&gt;
|-&lt;br /&gt;
| Merge kdelibs/kdecore/kuser.h and kdeadmin/kuser/kuser.h. || Frans || ||&lt;br /&gt;
|-&lt;br /&gt;
| KParts: remove plugin loading from setInstance, add an explicit loadPlugins() call in all parts that should load plugins (at the end of the derived-part ctor). || David|| ||&lt;br /&gt;
|-&lt;br /&gt;
| KParts: come up with better names for ReadOnlyPart and ReadWritePart, ReadOnly is a minimum requirement, but this does not become clear until you dig deeper into the class. With QTextEdit and QTextBrowser for instance, the inheritance is the other way around. E.g.: ReaderPart? ViewerPart? || David || ||&lt;br /&gt;
|-&lt;br /&gt;
| Other ideas in this thread: http://lists.kde.org/?l=kde-core-devel&amp;amp;m=107608067302571&amp;amp;w=2 &amp;lt;p&amp;gt;(Contributors to that thread, please add specific items here.) || Waldo || ||&lt;br /&gt;
|-&lt;br /&gt;
| Change classes that store bool data using strings (&amp;quot;true&amp;quot;/&amp;quot;false&amp;quot;) to use bool calls (readBoolEntry()).  Although not technicaly a binary incompatablity...just something to bring up for possible change (for the better)&amp;lt;p&amp;gt;Use KConfigXT instead! || Frans || ||&lt;br /&gt;
|-&lt;br /&gt;
| Is it really necessary to bother people using the KCM APIs with withFallback? I have never heard of it failing and when would you not like to have that fallback? I think a default of 'true' would be fine(and remove the argument in the APIs). || Frans|| ||&lt;br /&gt;
|-&lt;br /&gt;
| Do we need to have factory arguments in the KCM API? (who would use it anyway?) || Frans || ||&lt;br /&gt;
|-&lt;br /&gt;
| The config options in kdeglobals needs to be cleaned up a little. Perhaps I'm being picky..&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;They should be named properly, for example &amp;quot;enableIcons&amp;quot; instead of &amp;quot;EnableIcons&amp;quot;. Or at least settle on one thing.&amp;lt;li&amp;gt;AFAICT it would be the right thing if KWin had its own rc file instead of having its &amp;quot;WM&amp;quot; section in kdeglobals.&amp;lt;li&amp;gt;Shouldn't Sonnet have its own rc file instead of kdeglobals?&amp;lt;li&amp;gt;Should we allow spaces in option names?&amp;lt;li&amp;gt;Some option names are too short for being understandable. fixed-&amp;gt;fixedFont; font-&amp;gt;systemWideFont&amp;lt;li&amp;gt;Perhaps an own font section?&amp;lt;/ul&amp;gt;|| Frans || ||&lt;br /&gt;
|-&lt;br /&gt;
| KKeyDialog needs to be improved. It should simplify using KKeyChooser by not having to instantiate KDialogBase without restricting the possibilities of KKeyChooser (for instance, being able to configure global and application accels in one dialog). If there is only little time, simply expose the KKeyChooser object instead of making it private and inaccessible. || Michael Brade || ||&lt;br /&gt;
|-&lt;br /&gt;
| Fix the APIs taking Matthias Ettrich's hints into account, most importantly fix the massive amount of bool-usage in the CTORs. || Michael Brade || ||&lt;br /&gt;
|-&lt;br /&gt;
| Implement a &amp;quot;default&amp;quot; ctor for the widgets i.e. explicit Foo(QWidget* parent =0). || André Wöbbeking || ||&lt;br /&gt;
|-&lt;br /&gt;
| Get rid of libkdesu dependency in libkio, get rid of KIO::SessionData::AuthData* || Waldo || ||&lt;br /&gt;
|-&lt;br /&gt;
| Make functions in KHelpMenu virtual so they can be overridden (ex: to provide an alternative help-&amp;gt;contents action) || George Staikos || ||&lt;br /&gt;
|-&lt;br /&gt;
| Make sure all GUI classes adopt well to palette changes. || Danimo || ||&lt;br /&gt;
|-&lt;br /&gt;
| K3ListView lacked a setDnDMode to choose between &amp;quot;dnd to move items&amp;quot; (e.g. keditbookmarks) and &amp;quot;dnd onto items&amp;quot; (e.g. kmail). Check how to do this with QListView/QTreeView... || David || ||&lt;br /&gt;
|-&lt;br /&gt;
| Add the concept of a session to KIO, in particular for KHTML so that it can have all of its jobs associated in some way (a unique key of sorts).  Will make SSL much easier to implement and allow removal of many hacks, mostly involving metadata. || George Staikos || ||&lt;br /&gt;
|-&lt;br /&gt;
| Make KLibLoader default to RTLD_GLOBAL and make necessary changes to make KDE namespace clean. || Coolo || ||&lt;br /&gt;
|-&lt;br /&gt;
| Maybe just make sure we don't emit multiple copies of per-class data (vtable,RTTI), then RTLD_LOCAL should do as well, and it should(?) be simpler this way. || Lubos || ||&lt;br /&gt;
|-&lt;br /&gt;
| Many instances of creating containers on the heap instead of stack, can be replaced? [where?] || Caleb Tennis || ||&lt;br /&gt;
|-&lt;br /&gt;
| Remove all of the (const char *name) arguments to QObject derived classes. [mostly done, what's missing?] || Caleb Tennis || ||&lt;br /&gt;
|-&lt;br /&gt;
| Add KAssistant, a new KDE standards-compliant wizard, (TODO/KAssistant) Qt4 has no QWizard (only Q3Wizard left). Add a new KDE standards-compliant wizard with a bit more powerful API and features like &amp;quot;Steps list&amp;quot; pane on the left hand ofthe wizard (user can click any step if developer allowed such action).&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Example from OO.org:&amp;lt;br&amp;gt;http://www.openoffice.org/dev_docs/features/2.0/images/mail_merge.jpg &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;We could add more consistency (using themes, guidelines) in this area, as in KDE3 some apps implement wizard's features like left-hand funky pictures or help text again and again (see http://www.kolab.org/doc/kde-client-manual-0.9cvs20030801-html/c43.html).&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Other ideas:&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;use nonintrusive &amp;quot;watermark&amp;quot; effect on the 1st or all pages http://images.apple.com/macosx/features/setup/images/index_setup20050412.jpg&amp;lt;li&amp;gt;allow to disable steps on the left-side list as an answer to calling setAppropriate().&amp;lt;li&amp;gt;QWizard's API is mostly ok for the new class, just avoid requiring to pass a pointer to page widget (as in setAppropriate()) but allow to pass QString names or IDs instead.&amp;lt;/ul&amp;gt; || Jaroslaw Staniek || ||&lt;br /&gt;
|-&lt;br /&gt;
| K3IconView/K3ListView equivalents based on Qt4 interview. As discussed on kde-core-devel,this probably means a custom QItemDelegate instead, to handle single-click/double-click, execute-mode/select-mode (cf K3IconView), number of lines used for wrapping, &amp;quot;held&amp;quot; signal.&amp;lt;p&amp;gt;In short, rewriting k3iconview features to be based on interview. For K3ListView we need to check if QTreeView supports both modes of drag-n-drop (dropping onto items, and dropping between items like in the bookmark editor). || David, Till etc. || ||&lt;br /&gt;
|-&lt;br /&gt;
|CMake:&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;install man pages (e.g. doc/kdelibs/man-kbuildsycoca.8.docbook)&amp;lt;li&amp;gt;install /share/apps/ksgmltools2/customization/entities/kde-standard-accels.entities&amp;lt;li&amp;gt;win32: fix path delimiter problem generated *.bat wrapper (using ' ' instead of ';')&amp;lt;/ul&amp;gt; ||  ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| It looks like most of the functions KStringHandler can be removed.  At least, insword, setword,remrange, and remword could be removed [DONE] .  Those four don't seem to be used anywhere inside of KDE.  Other functions like capitalize and reverse seem to be sparsely used. || Caleb Tennis || ||&lt;br /&gt;
|-&lt;br /&gt;
| Prevent re-entering event loop in kded to avoid reentrancy problems like with kwallet in KDE3. || Lubos || ||&lt;br /&gt;
|-&lt;br /&gt;
| Customizable KToolTip/KWhatsThis widgets, now KWhatsThis is a part of KDE GSoC &amp;quot;Implement OpenUsability's Context Sensitive Help Redesign&amp;quot; project, by Joshua Keel, mentored by Ellen Reitmayr&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;initial notes: http://wiki.kde.org/tiki-index.php?page=kdelibs4+TODO%2FKToolTip&amp;lt;li&amp;gt;design page: http://wiki.kde.org/tiki-index.php?page=KWhatsThis&amp;lt;/ul&amp;gt; || Jaroslaw Staniek || ||&lt;br /&gt;
|-&lt;br /&gt;
| Additional (automatic) shortcuts for KMessageBox. See http://lists.kde.org/?l=kde-usability&amp;amp;m=109688936328920&amp;amp;w=2 || Jaroslaw Staniek || ||&lt;br /&gt;
|-&lt;br /&gt;
| Port krosskjs away from KjsEmbed to Kjs || Sebastian Sauer || 4.1 ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Policies/Licensing_Policy</id>
		<title>Policies/Licensing Policy</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Policies/Licensing_Policy"/>
				<updated>2007-07-18T10:56:24Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Artistic License */   Remove the indent.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All source code in KDE SVN must meet the following requirements:&lt;br /&gt;
# All source files must contain a copyright header which identifies the copyright holder(s) together with a e-mail address that can be used to reach the copyright holder.&lt;br /&gt;
# Each source file must contain a license or a reference to a license which states under which terms the software may be used, modified and redistributed.&lt;br /&gt;
# Source files that are part of a library in kdelibs must be licensed under the terms of any of the following licenses:&lt;br /&gt;
#* '''LGPL''' as listed in {{path|kdelibs/COPYING.LIB}}&lt;br /&gt;
#* '''BSD license''' as listed in {{path|kdelibs/COPYING.BSD}} and below.&amp;lt;br/&amp;gt;Note that the BSD license '''does not contain the so called 'advertisement clause'.'''&lt;br /&gt;
#* '''X11 license''' as listed below.&lt;br /&gt;
# Any other source files must be licensed under the terms of one of the licenses listed under 3) or any of the following licenses:&lt;br /&gt;
#* '''GPL''' as listed in {{path|kdelibs/COPYING}}&lt;br /&gt;
#* '''QPL''' as listed below.&lt;br /&gt;
#* '''MIT license''' as listed below.&lt;br /&gt;
#* '''Artistic license''' as listed below.&lt;br /&gt;
&lt;br /&gt;
== BSD License ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Redistribution and use in source and binary forms, with or without&lt;br /&gt;
modification, are permitted provided that the following conditions&lt;br /&gt;
are met:&lt;br /&gt;
&lt;br /&gt;
1. Redistributions of source code must retain the above copyright&lt;br /&gt;
   notice, this list of conditions and the following disclaimer.&lt;br /&gt;
2. Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
   notice, this list of conditions and the following disclaimer in the&lt;br /&gt;
   documentation and/or other materials provided with the distribution.&lt;br /&gt;
&lt;br /&gt;
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR&lt;br /&gt;
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES&lt;br /&gt;
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.&lt;br /&gt;
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,&lt;br /&gt;
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT&lt;br /&gt;
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,&lt;br /&gt;
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY&lt;br /&gt;
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT&lt;br /&gt;
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF&lt;br /&gt;
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== X11 License ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Permission is hereby granted, free of charge, to any person obtaining a copy&lt;br /&gt;
of this software and associated documentation files (the &amp;quot;Software&amp;quot;), to deal&lt;br /&gt;
in the Software without restriction, including without limitation the rights&lt;br /&gt;
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell&lt;br /&gt;
copies of the Software, and to permit persons to whom the Software is&lt;br /&gt;
furnished to do so, subject to the following conditions:&lt;br /&gt;
&lt;br /&gt;
The above copyright notice and this permission notice shall be included in&lt;br /&gt;
all copies or substantial portions of the Software.&lt;br /&gt;
&lt;br /&gt;
THE SOFTWARE IS PROVIDED &amp;quot;AS IS&amp;quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR&lt;br /&gt;
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,&lt;br /&gt;
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE&lt;br /&gt;
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN&lt;br /&gt;
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN&lt;br /&gt;
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.&lt;br /&gt;
&lt;br /&gt;
Except as contained in this notice, the name of the X Consortium shall not be&lt;br /&gt;
used in advertising or otherwise to promote the sale, use or other dealings&lt;br /&gt;
in this Software without prior written authorization from the X Consortium.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== QPL ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
			     THE Q PUBLIC LICENSE&lt;br /&gt;
				  version 1.0&lt;br /&gt;
&lt;br /&gt;
		   Copyright (C) 1999-2000 Trolltech AS, Norway.&lt;br /&gt;
		       Everyone is permitted to copy and&lt;br /&gt;
		       distribute this license document.&lt;br /&gt;
&lt;br /&gt;
The intent of this license is to establish freedom to share and change the&lt;br /&gt;
software regulated by this license under the open source model.&lt;br /&gt;
&lt;br /&gt;
This license applies to any software containing a notice placed by the&lt;br /&gt;
copyright holder saying that it may be distributed under the terms of&lt;br /&gt;
the Q Public License version 1.0.  Such software is herein referred to as&lt;br /&gt;
the Software.  This license covers modification and distribution of the&lt;br /&gt;
Software, use of third-party application programs based on the Software,&lt;br /&gt;
and development of free software which uses the Software.&lt;br /&gt;
&lt;br /&gt;
				 Granted Rights&lt;br /&gt;
&lt;br /&gt;
1. You are granted the non-exclusive rights set forth in this license&lt;br /&gt;
   provided you agree to and comply with any and all conditions in this&lt;br /&gt;
   license.  Whole or partial distribution of the Software, or software&lt;br /&gt;
   items that link with the Software, in any form signifies acceptance of&lt;br /&gt;
   this license.&lt;br /&gt;
&lt;br /&gt;
2. You may copy and distribute the Software in unmodified form provided&lt;br /&gt;
   that the entire package, including - but not restricted to - copyright,&lt;br /&gt;
   trademark notices and disclaimers, as released by the initial developer&lt;br /&gt;
   of the Software, is distributed.&lt;br /&gt;
&lt;br /&gt;
3. You may make modifications to the Software and distribute your&lt;br /&gt;
   modifications, in a form that is separate from the Software, such as&lt;br /&gt;
   patches. The following restrictions apply to modifications:&lt;br /&gt;
&lt;br /&gt;
     a. Modifications must not alter or remove any copyright notices in&lt;br /&gt;
        the Software.&lt;br /&gt;
&lt;br /&gt;
     b. When modifications to the Software are released under this&lt;br /&gt;
        license, a non-exclusive royalty-free right is granted to the&lt;br /&gt;
        initial developer of the Software to distribute your modification&lt;br /&gt;
        in future versions of the Software provided such versions remain&lt;br /&gt;
        available under these terms in addition to any other license(s) of&lt;br /&gt;
        the initial developer.&lt;br /&gt;
&lt;br /&gt;
4. You may distribute machine-executable forms of the Software or&lt;br /&gt;
   machine-executable forms of modified versions of the Software, provided&lt;br /&gt;
   that you meet these restrictions:&lt;br /&gt;
&lt;br /&gt;
     a. You must include this license document in the distribution.&lt;br /&gt;
&lt;br /&gt;
     b. You must ensure that all recipients of the machine-executable forms&lt;br /&gt;
        are also able to receive the complete machine-readable source code&lt;br /&gt;
        to the distributed Software, including all modifications, without&lt;br /&gt;
        any charge beyond the costs of data transfer, and place prominent&lt;br /&gt;
        notices in the distribution explaining this.&lt;br /&gt;
&lt;br /&gt;
     c. You must ensure that all modifications included in the&lt;br /&gt;
        machine-executable forms are available under the terms of this&lt;br /&gt;
        license.&lt;br /&gt;
&lt;br /&gt;
5. You may use the original or modified versions of the Software to&lt;br /&gt;
   compile, link and run application programs legally developed by you&lt;br /&gt;
   or by others.&lt;br /&gt;
&lt;br /&gt;
6. You may develop application programs, reusable components and other&lt;br /&gt;
   software items that link with the original or modified versions of the&lt;br /&gt;
   Software.  These items, when distributed, are subject to the following&lt;br /&gt;
   requirements:&lt;br /&gt;
&lt;br /&gt;
     a. You must ensure that all recipients of machine-executable forms of&lt;br /&gt;
        these items are also able to receive and use the complete&lt;br /&gt;
        machine-readable source code to the items without any charge&lt;br /&gt;
        beyond the costs of data transfer.&lt;br /&gt;
&lt;br /&gt;
     b. You must explicitly license all recipients of your items to use&lt;br /&gt;
        and re-distribute original and modified versions of the items in&lt;br /&gt;
        both machine-executable and source code forms. The recipients must&lt;br /&gt;
        be able to do so without any charges whatsoever, and they must be&lt;br /&gt;
        able to re-distribute to anyone they choose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     c. If the items are not available to the general public, and the&lt;br /&gt;
        initial developer of the Software requests a copy of the items,&lt;br /&gt;
        then you must supply one.&lt;br /&gt;
&lt;br /&gt;
			    Limitations of Liability&lt;br /&gt;
&lt;br /&gt;
In no event shall the initial developers or copyright holders be liable&lt;br /&gt;
for any damages whatsoever, including - but not restricted to - lost&lt;br /&gt;
revenue or profits or other direct, indirect, special, incidental or&lt;br /&gt;
consequential damages, even if they have been advised of the possibility&lt;br /&gt;
of such damages, except to the extent invariable law, if any, provides&lt;br /&gt;
otherwise.&lt;br /&gt;
&lt;br /&gt;
			          No Warranty&lt;br /&gt;
&lt;br /&gt;
The Software and this license document are provided AS IS with NO WARRANTY&lt;br /&gt;
OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS&lt;br /&gt;
FOR A PARTICULAR PURPOSE.&lt;br /&gt;
                                 Choice of Law&lt;br /&gt;
&lt;br /&gt;
This license is governed by the Laws of Norway. Disputes shall be settled&lt;br /&gt;
by Oslo City Court.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MIT license ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Permission to use, copy, modify, and distribute this software&lt;br /&gt;
and its documentation for any purpose and without fee is hereby&lt;br /&gt;
granted, provided that the above copyright notice appear in all&lt;br /&gt;
copies and that both that the copyright notice and this&lt;br /&gt;
permission notice and warranty disclaimer appear in supporting&lt;br /&gt;
documentation, and that the name of the author not be used in&lt;br /&gt;
advertising or publicity pertaining to distribution of the&lt;br /&gt;
software without specific, written prior permission.&lt;br /&gt;
&lt;br /&gt;
The author disclaim all warranties with regard to this&lt;br /&gt;
software, including all implied warranties of merchantability&lt;br /&gt;
and fitness.  In no event shall the author be liable for any&lt;br /&gt;
special, indirect or consequential damages or any damages&lt;br /&gt;
whatsoever resulting from loss of use, data or profits, whether&lt;br /&gt;
in an action of contract, negligence or other tortious action,&lt;br /&gt;
arising out of or in connection with the use or performance of&lt;br /&gt;
this software.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Artistic License ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                       The &amp;quot;Artistic License&amp;quot;&lt;br /&gt;
&lt;br /&gt;
                              Preamble&lt;br /&gt;
&lt;br /&gt;
The intent of this document is to state the conditions under which a&lt;br /&gt;
Package may be copied, such that the Copyright Holder maintains some&lt;br /&gt;
semblance of artistic control over the development of the package,&lt;br /&gt;
while giving the users of the package the right to use and&lt;br /&gt;
distribute the Package in a more-or-less customary fashion, plus the&lt;br /&gt;
right to make reasonable modifications.&lt;br /&gt;
&lt;br /&gt;
Definitions:&lt;br /&gt;
&lt;br /&gt;
   * &amp;quot;Package&amp;quot; refers to the collection of files distributed by the&lt;br /&gt;
     Copyright Holder, and derivatives of that collection of files&lt;br /&gt;
     created through textual modification.&lt;br /&gt;
&lt;br /&gt;
   * &amp;quot;Standard Version&amp;quot; refers to such a Package if it has not been&lt;br /&gt;
     modified, or has been modified in accordance with the wishes of&lt;br /&gt;
     the Copyright Holder.&lt;br /&gt;
&lt;br /&gt;
   * &amp;quot;Copyright Holder&amp;quot; is whoever is named in the copyright or&lt;br /&gt;
     copyrights for the package.&lt;br /&gt;
&lt;br /&gt;
   * &amp;quot;You&amp;quot; is you, if you're thinking about copying or distributing&lt;br /&gt;
     this Package.&lt;br /&gt;
&lt;br /&gt;
   * &amp;quot;Reasonable copying fee&amp;quot; is whatever you can justify on the&lt;br /&gt;
     basis of media cost, duplication charges, time of people&lt;br /&gt;
     involved, and so on. (You will not be required to justify it to&lt;br /&gt;
     the Copyright Holder, but only to the computing community at&lt;br /&gt;
     large as a market that must bear the fee.)&lt;br /&gt;
&lt;br /&gt;
   * &amp;quot;Freely Available&amp;quot; means that no fee is charged for the item&lt;br /&gt;
     itself, though there may be fees involved in handling the item.&lt;br /&gt;
     It also means that recipients of the item may redistribute it&lt;br /&gt;
     under the same conditions they received it.&lt;br /&gt;
&lt;br /&gt;
1. You may make and give away verbatim copies of the source form of&lt;br /&gt;
the Standard Version of this Package without restriction, provided&lt;br /&gt;
that you duplicate all of the original copyright notices and&lt;br /&gt;
associated disclaimers.&lt;br /&gt;
&lt;br /&gt;
2. You may apply bug fixes, portability fixes and other&lt;br /&gt;
modifications derived from the Public Domain or from the Copyright&lt;br /&gt;
Holder. A Package modified in such a way shall still be considered&lt;br /&gt;
the Standard Version.&lt;br /&gt;
&lt;br /&gt;
3. You may otherwise modify your copy of this Package in any way,&lt;br /&gt;
provided that you insert a prominent notice in each changed file&lt;br /&gt;
stating how and when you changed that file, and provided that you do&lt;br /&gt;
at least ONE of the following:&lt;br /&gt;
&lt;br /&gt;
     a) place your modifications in the Public Domain or&lt;br /&gt;
     otherwise make them Freely Available, such as by posting&lt;br /&gt;
     said modifications to Usenet or an equivalent medium, or&lt;br /&gt;
     placing the modifications on a major archive site such as&lt;br /&gt;
     ftp.uu.net, or by allowing the Copyright Holder to include&lt;br /&gt;
     your modifications in the Standard Version of the Package.&lt;br /&gt;
&lt;br /&gt;
     b) use the modified Package only within your corporation&lt;br /&gt;
     or organization.&lt;br /&gt;
&lt;br /&gt;
     c) rename any non-standard executables so the names do not&lt;br /&gt;
     conflict with standard executables, which must also be&lt;br /&gt;
     provided, and provide a separate manual page for each&lt;br /&gt;
     non-standard executable that clearly documents how it&lt;br /&gt;
     differs from the Standard Version.&lt;br /&gt;
&lt;br /&gt;
     d) make other distribution arrangements with the Copyright&lt;br /&gt;
     Holder.&lt;br /&gt;
&lt;br /&gt;
4. You may distribute the programs of this Package in object code or&lt;br /&gt;
executable form, provided that you do at least ONE of the following:&lt;br /&gt;
&lt;br /&gt;
     a) distribute a Standard Version of the executables and&lt;br /&gt;
     library files, together with instructions (in the manual&lt;br /&gt;
     page or equivalent) on where to get the Standard Version.&lt;br /&gt;
&lt;br /&gt;
     b) accompany the distribution with the machine-readable&lt;br /&gt;
     source of the Package with your modifications.&lt;br /&gt;
&lt;br /&gt;
     c) accompany any non-standard executables with their&lt;br /&gt;
     corresponding Standard Version executables, giving the&lt;br /&gt;
     non-standard executables non-standard names, and clearly&lt;br /&gt;
     documenting the differences in manual pages (or&lt;br /&gt;
     equivalent), together with instructions on where to get&lt;br /&gt;
     the Standard Version.&lt;br /&gt;
&lt;br /&gt;
     d) make other distribution arrangements with the Copyright&lt;br /&gt;
     Holder.&lt;br /&gt;
&lt;br /&gt;
5. You may charge a reasonable copying fee for any distribution of&lt;br /&gt;
this Package. You may charge any fee you choose for support of this&lt;br /&gt;
Package. You may not charge a fee for this Package itself. However,&lt;br /&gt;
you may distribute this Package in aggregate with other (possibly&lt;br /&gt;
commercial) programs as part of a larger (possibly commercial)&lt;br /&gt;
software distribution provided that you do not advertise this&lt;br /&gt;
Package as a product of your own.&lt;br /&gt;
&lt;br /&gt;
6. The scripts and library files supplied as input to or produced as&lt;br /&gt;
output from the programs of this Package do not automatically fall&lt;br /&gt;
under the copyright of this Package, but belong to whomever&lt;br /&gt;
generated them, and may be sold commercially, and may be aggregated&lt;br /&gt;
with this Package.&lt;br /&gt;
&lt;br /&gt;
7. C or perl subroutines supplied by you and linked into this&lt;br /&gt;
Package shall not be considered part of this Package.&lt;br /&gt;
&lt;br /&gt;
8. The name of the Copyright Holder may not be used to endorse or&lt;br /&gt;
promote products derived from this software without specific prior&lt;br /&gt;
written permission.&lt;br /&gt;
&lt;br /&gt;
9. THIS PACKAGE IS PROVIDED &amp;quot;AS IS&amp;quot; AND WITHOUT ANY EXPRESS OR&lt;br /&gt;
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED&lt;br /&gt;
WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
&lt;br /&gt;
                              The End&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Policies]]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Schedules</id>
		<title>Schedules</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Schedules"/>
				<updated>2007-07-18T08:08:35Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: mirror rename of page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
During development, the KDE project sets goals in features and dates for upcoming releases. This way, the team knows when it would be a good time to add a new feature or when it's time to&lt;br /&gt;
focus on cleaning up any bugs in preparation for a release. Any plans are tentative schedules and the final dates are generally decided on the kde-core-devel mailing list.&lt;br /&gt;
&lt;br /&gt;
Learn more about [[/Release Schedules Guide|release schedules]].&lt;br /&gt;
&lt;br /&gt;
== KDE4 ==&lt;br /&gt;
* [[/KDE4/Goals|KDE 4 Goals]]&lt;br /&gt;
&lt;br /&gt;
*'''KDE 4.0'''&lt;br /&gt;
** [[/KDE4/4.0 Release Roadmap|Release milestones]] &lt;br /&gt;
** [[/KDE4/4.0 Module_Status|Module status and pending application issues]]&lt;br /&gt;
** [[/KDE4/4.0 Release Schedule|Release schedule]]&lt;br /&gt;
** [[/KDE4/4.0 Feature Plan|Feature plan]]&lt;br /&gt;
&lt;br /&gt;
== KDE3 ==&lt;br /&gt;
&lt;br /&gt;
*'''KDE 3.5''' [[/KDE 3.5 Release Schedule|release schedule]], [[/KDE 3.5 Feature Plan|feature plan]]&lt;br /&gt;
&lt;br /&gt;
=== Previous releases ===&lt;br /&gt;
&lt;br /&gt;
*'''KDE 3.4''' [[/KDE 3.4 Release Schedule|release schedule]], [[/KDE 3.4 Feature Plan|feature plan]]&lt;br /&gt;
*'''KDE 3.3''' [[/KDE 3.3 Release Schedule|release schedule]], [[/KDE 3.3 Feature Plan|feature plan]]&lt;br /&gt;
*'''KDE 3.2''' [[/KDE 3.2 Release Schedule|release schedule]], [[/KDE 3.2 Feature Plan|feature plan]]&lt;br /&gt;
*'''KDE 3.1''' [[/KDE 3.1 Release Schedule|release schedule]], [[/KDE 3.1 Feature Plan|feature plan]]&lt;br /&gt;
*'''KDE 3.0''' [[/KDE 3.0 Release Schedule|release schedule]], [[/KDE 3.0 Feature Plan|feature plan]]&lt;br /&gt;
&lt;br /&gt;
== KOffice ==&lt;br /&gt;
&lt;br /&gt;
=== Current releases ===&lt;br /&gt;
&lt;br /&gt;
*'''KOffice 2.0''' [[/KOffice 2.0 Release Schedule|release schedule]], [http://wiki.koffice.org/index.php?title=KOffice2/Goals feature plan]&lt;br /&gt;
*'''KOffice 1.6''' [[/KOffice 1.6 Release Schedule|release schedule]], [[/KOffice 1.6 Feature Plan|feature plan]]&lt;br /&gt;
&lt;br /&gt;
=== Previous releases ===&lt;br /&gt;
&lt;br /&gt;
*'''KOffice 1.5''' [[/KOffice 1.5 Release Schedule|release schedule]], [[/KOffice 1.5 Feature Plan|feature plan]]&lt;br /&gt;
*'''KOffice 1.4''' [[/KOffice 1.4 Release Schedule|release schedule]]&lt;br /&gt;
*'''KOffice 1.3''' [[/KOffice 1.3 Release Schedule|release schedule]]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Using_KActions</id>
		<title>Development/Tutorials/Using KActions</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Using_KActions"/>
				<updated>2007-06-22T14:36:00Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* XmlGui */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TutorialBrowser|&lt;br /&gt;
&lt;br /&gt;
series=Beginner Tutorial|&lt;br /&gt;
&lt;br /&gt;
name=How To Use KActions and XmlGui|&lt;br /&gt;
&lt;br /&gt;
pre=[[Development/Tutorials/Programming_Tutorial_KDE_4/Using_KXmlGuiWindow|Tutorial 2 - KXmlGuiWindow]], Basic XML knowledge|&lt;br /&gt;
&lt;br /&gt;
next=[[Development/Tutorials/Programming_Tutorial_KDE_4/Using_KConfig|Tutorial 4 - KConfig]]| &lt;br /&gt;
&lt;br /&gt;
reading=None&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
We're going to introduce the concept of actions. Actions are a unified way of supplying the user with ways to interact with your program.&lt;br /&gt;
&lt;br /&gt;
Say, for example, we want to let the user clear the text box by clicking a button in the toolbar, from an option in the File menu or through a keyboard shortcut; we can provide all of those through one {{class|KAction}}.&lt;br /&gt;
&lt;br /&gt;
[[image:introtokdetutorial3.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
==KAction==&lt;br /&gt;
A {{class|KAction}} is an object which contains all the information about the icon and shortcuts you want associated to a certain action. You then connect the action to a [http://doc.trolltech.com/latest/signalsandslots.html slot] which carries out the work of your action.&lt;br /&gt;
&lt;br /&gt;
===Creating Your Own===&lt;br /&gt;
&lt;br /&gt;
To create an action, you need to &amp;lt;tt&amp;gt;#include &amp;lt;KAction&amp;gt;&amp;lt;/tt&amp;gt; in your &amp;lt;tt&amp;gt;.cpp&amp;lt;/tt&amp;gt; file. &lt;br /&gt;
=====Creating the object=====&lt;br /&gt;
We're going to create an action which will clear the text area (see Tutorial 2). The KAction is built up in a number of steps. The first is creating the KAction&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;KAction* clearAction = new KAction(actionCollection(), &amp;quot;clear&amp;quot;);&amp;lt;/code&amp;gt;&lt;br /&gt;
This creates a KAction called &amp;lt;tt&amp;gt;clearAction&amp;lt;/tt&amp;gt;. The first constructor argument is telling the action that it is part of the &amp;lt;tt&amp;gt;{{class|KActionCollection}} actionCollection()&amp;lt;/tt&amp;gt; and the second is simply setting a name for internal use (it doesn't necessarily have to be textually similar to the function of the action).&lt;br /&gt;
=====Text=====&lt;br /&gt;
Now we have our KAction object, we can start setting its properties. First, we'll set the text that will be displayed in the menu and under its icon in the toolbar.&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;clearAction-&amp;gt;setText(i18n(&amp;quot;Clear&amp;quot;));&amp;lt;/code&amp;gt;&lt;br /&gt;
As you can see, the text must be passed through the i18n() function if you want your UI to be translatable.&lt;br /&gt;
&lt;br /&gt;
=====Icon=====&lt;br /&gt;
If you're going to display the action in a toolbar, you're going to want to have an icon depicting the action. To set an icon we simply use the &amp;lt;tt&amp;gt;setIcon()&amp;lt;/tt&amp;gt; function thus:&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;clearAction-&amp;gt;setIcon(KIcon(&amp;quot;filenew&amp;quot;));&amp;lt;/code&amp;gt;&lt;br /&gt;
Here we're setting the icon to the standard KDE &amp;lt;tt&amp;gt;filenew&amp;lt;/tt&amp;gt; icon.&lt;br /&gt;
=====Shortcut=====&lt;br /&gt;
We can also set a shortcut that will perform our action. It's as simple as a&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;clearAction-&amp;gt;setShortcut(Qt::CTRL+Qt::Key_W);&amp;lt;/code&amp;gt;&lt;br /&gt;
to set Ctrl+W to be associated to this action.&lt;br /&gt;
=====Connecting the action=====&lt;br /&gt;
Now our action is fully set up, we need to connect it to something useful. We're going to connect our action to the &amp;lt;tt&amp;gt;clear()&amp;lt;/tt&amp;gt; action belonging to a KTextArea.&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;&lt;br /&gt;
connect( clearAction, SIGNAL( triggered(bool) ), &lt;br /&gt;
         textArea, SLOT( clear() ) );&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
This is the same as it would be done in Qt with a {{qt|QAction}}.&lt;br /&gt;
&lt;br /&gt;
===KStandardAction===&lt;br /&gt;
&lt;br /&gt;
For actions which would likely appear in almost every KDE application such as 'quit', 'save', and 'load' there are pre-created convenience KActions, accessed through {{class|KStandardAction}}.&lt;br /&gt;
&lt;br /&gt;
They are very simple to use. Once you've done &amp;lt;tt&amp;gt;#include &amp;lt;KStandardAction&amp;gt;&amp;lt;/tt&amp;gt;, you simply need to supply it with what you want the function to do and which KActionCollection to add it to. For example,&lt;br /&gt;
&amp;lt;code cppqt&amp;gt;KStandardAction::quit(kapp, SLOT(quit()), actionCollection());&amp;lt;/code&amp;gt;&lt;br /&gt;
Will Create a KAction with the correct icon, text and shortcut and will even add it to the File menu.&lt;br /&gt;
&lt;br /&gt;
==The Code==&lt;br /&gt;
===mainwindow.h===&lt;br /&gt;
&amp;lt;code cppqt n&amp;gt;&lt;br /&gt;
#ifndef MAINWINDOW_H&lt;br /&gt;
#define MAINWINDOW_H&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;KXmlGuiWindow&amp;gt;&lt;br /&gt;
#include &amp;lt;KTextEdit&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class MainWindow : public KXmlGuiWindow&lt;br /&gt;
{&lt;br /&gt;
  public:&lt;br /&gt;
    MainWindow(QWidget *parent=0);&lt;br /&gt;
	&lt;br /&gt;
  private:&lt;br /&gt;
    KTextEdit* textArea;&lt;br /&gt;
    void setupActions();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===mainwindow.cpp===&lt;br /&gt;
&amp;lt;code cppqt n&amp;gt;&lt;br /&gt;
#include &amp;quot;mainwindow.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;KApplication&amp;gt;&lt;br /&gt;
#include &amp;lt;KAction&amp;gt;&lt;br /&gt;
#include &amp;lt;KLocale&amp;gt;&lt;br /&gt;
#include &amp;lt;KActionCollection&amp;gt;&lt;br /&gt;
#include &amp;lt;KStandardAction&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MainWindow::MainWindow(QWidget *parent)&lt;br /&gt;
    : KXmlGuiWindow(parent)&lt;br /&gt;
{&lt;br /&gt;
  textArea = new KTextEdit;&lt;br /&gt;
  setCentralWidget(textArea);&lt;br /&gt;
&lt;br /&gt;
  setupActions();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void MainWindow::setupActions()&lt;br /&gt;
{&lt;br /&gt;
  QAction* clearAction = &lt;br /&gt;
          actionCollection()-&amp;gt;addAction( &amp;quot;clear&amp;quot; );&lt;br /&gt;
  clearAction-&amp;gt;setText(i18n(&amp;quot;Clear&amp;quot;));&lt;br /&gt;
  clearAction-&amp;gt;setIcon(KIcon(&amp;quot;filenew&amp;quot;));&lt;br /&gt;
  clearAction-&amp;gt;setShortcut(Qt::CTRL+Qt::Key_W);&lt;br /&gt;
  connect(clearAction, SIGNAL(triggered(bool)),&lt;br /&gt;
          textArea, SLOT(clear()));&lt;br /&gt;
&lt;br /&gt;
  KStandardAction::quit(kapp, SLOT(quit()),&lt;br /&gt;
                        actionCollection());&lt;br /&gt;
&lt;br /&gt;
  setupGUI();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===main.cpp===&lt;br /&gt;
&amp;lt;code cppqt n&amp;gt;&lt;br /&gt;
#include &amp;lt;KApplication&amp;gt;&lt;br /&gt;
#include &amp;lt;KAboutData&amp;gt;&lt;br /&gt;
#include &amp;lt;KCmdLineArgs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;mainwindow.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main (int argc, char *argv[])&lt;br /&gt;
{&lt;br /&gt;
  KAboutData aboutData( &amp;quot;tutorial3&amp;quot;, &amp;quot;Tutorial 3&amp;quot;,&lt;br /&gt;
      &amp;quot;1.0&amp;quot;, &amp;quot;A simple text area using KAction etc.&amp;quot;,&lt;br /&gt;
      KAboutData::License_GPL, &amp;quot;(c) 2006&amp;quot; );&lt;br /&gt;
  KCmdLineArgs::init( argc, argv, &amp;amp;aboutData );&lt;br /&gt;
  KApplication app;&lt;br /&gt;
 &lt;br /&gt;
  MainWindow* window = new MainWindow();&lt;br /&gt;
  window-&amp;gt;show();&lt;br /&gt;
  return app.exec();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Putting the actions in the menus and toolbars==&lt;br /&gt;
Now, at the moment, we've only created our new &amp;quot;Clear&amp;quot; action. It won't yet show up in the menus or in the toolbars. To tell the program where to put our actions (and to allow the end-user to move them around) we use a KDE technology called XmlGui.&lt;br /&gt;
===XmlGui===&lt;br /&gt;
{{improve|Mention that it may in future be replaced by liveui, which is in the design stage now}}&lt;br /&gt;
&lt;br /&gt;
When you call &amp;lt;tt&amp;gt;setupGUI()&amp;lt;/tt&amp;gt; in your {{class|KXmlGuiWindow}} class, it calls the XmlGui system which reads an XML file description of your interface (which we will create in a minute) and creates the buttons and menus appropriately.&lt;br /&gt;
&lt;br /&gt;
Now obviously XmlGui needs to know which file is your description file, i.e. it needs to know its name and location. The rule for the naming is the file should be called &amp;lt;tt&amp;gt;appnameui.rc&amp;lt;/tt&amp;gt; (where &amp;lt;tt&amp;gt;appname&amp;lt;/tt&amp;gt; is the name you set in {{class|KAboutData}}), so in our example, the file will be called &amp;lt;tt&amp;gt;tutorial3ui.rc&amp;lt;/tt&amp;gt;. Where the file will be located is handled by CMake.&lt;br /&gt;
&lt;br /&gt;
===Writing your ''appname''ui.rc File===&lt;br /&gt;
&lt;br /&gt;
Since the description of our UI is being defined with XML, the layout of the description must follow strict rules. We won't go through all the rules in this tutorial but for more information, see the _detailed_XmlGui_page_ (once we have a full explanation of XmlGui (or possibly liveui if that's done soon :)) on the wiki, I'll link it up).&lt;br /&gt;
&lt;br /&gt;
{{improve|Walk through what the code below means}}&lt;br /&gt;
&lt;br /&gt;
===tutorial3ui.rc===&lt;br /&gt;
&amp;lt;code xml n&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE kpartgui SYSTEM &amp;quot;kpartgui.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gui name=&amp;quot;tutorial3&amp;quot; version=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;ToolBar name=&amp;quot;mainToolBar&amp;quot; &amp;gt;&lt;br /&gt;
    &amp;lt;text&amp;gt;Main Toolbar&amp;lt;/text&amp;gt;&lt;br /&gt;
    &amp;lt;Action name=&amp;quot;clear&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/ToolBar&amp;gt;&lt;br /&gt;
  &amp;lt;MenuBar&amp;gt;&lt;br /&gt;
    &amp;lt;Menu name=&amp;quot;file&amp;quot; &amp;gt;&lt;br /&gt;
      &amp;lt;text&amp;gt;&amp;amp;amp;File&amp;lt;/text&amp;gt;&lt;br /&gt;
      &amp;lt;Action name=&amp;quot;clear&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Menu&amp;gt;&lt;br /&gt;
  &amp;lt;/MenuBar&amp;gt;&lt;br /&gt;
&amp;lt;/gui&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==CMake==&lt;br /&gt;
Now that we're using XmlGui, we need to put the &amp;lt;tt&amp;gt;tutorial3ui.rc&amp;lt;/tt&amp;gt; somewhere where KDE can find it. '''This means we need to install our project somewhere.'''&lt;br /&gt;
===CMakeLists.txt===&lt;br /&gt;
&amp;lt;code ini n&amp;gt;&lt;br /&gt;
PROJECT(tutorial3)&lt;br /&gt;
&lt;br /&gt;
FIND_PACKAGE(KDE4 REQUIRED)&lt;br /&gt;
INCLUDE_DIRECTORIES( ${KDE4_INCLUDES} )&lt;br /&gt;
&lt;br /&gt;
SET(tutorial3_SRCS &lt;br /&gt;
  main.cpp&lt;br /&gt;
  mainwindow.cpp&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
KDE4_ADD_EXECUTABLE(tutorial3 ${tutorial3_SRCS})&lt;br /&gt;
&lt;br /&gt;
TARGET_LINK_LIBRARIES( tutorial3 ${KDE4_KDEUI_LIBS})&lt;br /&gt;
&lt;br /&gt;
install(TARGETS tutorial3 DESTINATION ${BIN_INSTALL_DIR})&lt;br /&gt;
install( FILES tutorial3ui.rc &lt;br /&gt;
         DESTINATION  ${DATA_INSTALL_DIR}/tutorial3 )&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Make, Install And Run===&lt;br /&gt;
If you don't have write access to where your KDE4 installation directory, you can install it to a folder in your home directory.&lt;br /&gt;
&lt;br /&gt;
To tell CMake where to install the program, set the &amp;lt;tt&amp;gt;DCMAKE_INSTALL_PREFIX&amp;lt;/tt&amp;gt; switch. So to install the program to the KDE directory, do&lt;br /&gt;
 cmake . -DCMAKE_INSTALL_PREFIX=$KDEDIR&lt;br /&gt;
 make install&lt;br /&gt;
 tutorial3&lt;br /&gt;
Though, if you just want to install it somewhere local for testing (it's probably a bit silly to go to the effort of installing these tutorials to your KDE directory) you can do something like&lt;br /&gt;
 cmake . -DCMAKE_INSTALL_PREFIX=/home/user/kdetmp&lt;br /&gt;
which will create a KDE-like directory structure under ~/kdetmp&lt;br /&gt;
&lt;br /&gt;
==Moving On==&lt;br /&gt;
Now that we can make the GUI look like and do whatever we want, we can move on to storing application settings with [[Development/Tutorials/Programming_Tutorial_KDE_4/Using_KConfig|KConfig XT]].&lt;br /&gt;
&lt;br /&gt;
[[Category:C++]]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/KOffice_Overview</id>
		<title>Development/Tutorials/KOffice Overview</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/KOffice_Overview"/>
				<updated>2007-06-04T08:43:28Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Dockers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;KOffice has gotten more and more configurable through plugins over time, which is a really good thing as 3rd party developers can extend KOffice using dedicated code for their purpose.&lt;br /&gt;
&lt;br /&gt;
You will learn what functionality you can place in each plugin type so you can choose wisely.  There is a general guide to writing plugins and each type has a tutorial showing how to create a new plugin of that type.&lt;br /&gt;
&lt;br /&gt;
well, not all required info is there yet; but this is the idea :)  Anyone want to help?&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Generic Information ==&lt;br /&gt;
Plugins are a design technique with a series of steps that will lead you to a loadable plugin.  If you want to know more its is interresting to read an overview at [[Development/Tutorials/Generic KOffice Plugin Creation|Generic KOffice Plugin Creation]]&lt;br /&gt;
&lt;br /&gt;
== Shapes ==&lt;br /&gt;
In KOffice shapes are document content.  This content can be manipulated by the user and can be shown on screen or printed.  The fact that they are plugins means that a new content types can be added to documents by just installing the plugin and starting your favorite KOffice application.&lt;br /&gt;
To get a feel for what a shape is, here are some examples of existing shapes, sometimes referred to as Flake shapes because shapes are one of the two main parts of the Flake library.&lt;br /&gt;
&lt;br /&gt;
We have a PathShape which is a generic vector shape capable of showing and printing any sort of vector art like SVG or EPS vector graphics.&lt;br /&gt;
&lt;br /&gt;
There is a Text plugin that is capable of showing marked up text with a huge feature set including HTML capabilities and a big part of the more extensive OpenDocument format.&lt;br /&gt;
&lt;br /&gt;
KSpread exports a tableShape, to allow a spread-sheet table to be embedded in other KOffice applications.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs-flake/classKoShapeRegistry.html KoShapeRegistry]&lt;br /&gt;
&lt;br /&gt;
The tutorial on how to write your own shape plugins can be found at [[Development/Tutorials/Write a Flake Plugin|Write a Flake Plugin]]&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
A tool is a plugin that handles user input and can manipulate either the general application data, or can manipulate a specific shape.&lt;br /&gt;
All user input mouse and keyboard events that are send to the document area (canvas), will be passed to the active tool.  The active tool can use them to, for example, move shapes around or rotate them. If you combine a tool with a shape plugin you can make the tool manipulate the data of the shape.  A good example is the text tool which is bundled with the text shape.  The text tool takes all keyboard events and thereby lets the user type text in the text shape.&lt;br /&gt;
&lt;br /&gt;
This gives a clear separation of control and content.  The shape holds the content and a tool is required to control that content.&lt;br /&gt;
&lt;br /&gt;
In general there are two types of Tools;&lt;br /&gt;
* generic tools that are not associated with a shape plugin.  Its rare that you will create such plugins, though we still need a 'measure' tool that falls in that category.&lt;br /&gt;
* bundled tools that come with a specific flake shape and is made to manipulate that shapes data.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs-flake/classKoToolRegistry.html KoToolRegistry]&lt;br /&gt;
&lt;br /&gt;
The tutorial on how to write your own shape plugins can be found at [[Development/Tutorials/Write a Flake Plugin|Write a Flake Plugin]]&lt;br /&gt;
&lt;br /&gt;
== Dockers ==&lt;br /&gt;
&lt;br /&gt;
Plugins that provide a docker are basically plugins that provide a graphical user interface element for KOffice applications.  In KOffice2 the focus on toolbars and dialogs will be less as they have been proven to be confusing to users because they clutter the interface.&lt;br /&gt;
Instead the focus is shifted to widgets that can be docked along the sides of a document window but also moved to be a separate window. The real change is that, unlike dialogs, they don't have an 'Ok' button but instead change the content life and immediately.&lt;br /&gt;
Examples of dockers are; the toolbox, the shape selector and the tool-options but also the color selector.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs/classKoDockRegistry.html KoDockRegistry]&lt;br /&gt;
&lt;br /&gt;
== Colorspaces ==&lt;br /&gt;
&lt;br /&gt;
== File Filters ==&lt;br /&gt;
&lt;br /&gt;
== Text Plugins ==&lt;br /&gt;
&lt;br /&gt;
The text component used in all KOffice applications has a set of plugins itself. These plugins allow the possibility to enhance the content as well as allow to enhance the editing experience.  Use Inline object plugins to write content such as inline variables and bookmarks.  Use Text Editing plugins to be able to replace the text a user types while he types it. For example for autocorrection.&lt;br /&gt;
&lt;br /&gt;
=== Inline Objects ===&lt;br /&gt;
&lt;br /&gt;
The plugins of this type effectively become a character in the text document.  What this means is that a user can insert an inline object and the plugin can decide the size and content of the character inserted.&lt;br /&gt;
A good example of inline objects are variables.  A variable can have a name and a value and altering the value of a variable will then change the value in the text all over the document. This is done by an inline object that shows the full text of the variable, but in the document it behaves as it is one big character that can't be split over lines or otherwise edited.&lt;br /&gt;
&lt;br /&gt;
An inline object does not have to have content, it can just be a placeholder as well. Which makes it ideal for things like in-text comments/annotations and Bookmarks.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs/classKoInlineObjectRegistry.html KoInlineObjectRegistry]&lt;br /&gt;
&lt;br /&gt;
=== Text Editing ===&lt;br /&gt;
&lt;br /&gt;
The text editing plugins are all about handling user input while (s)he is editing the text. A plugin can do near everything with the typed text, including altering it and adding markup.&lt;br /&gt;
The plugin gives events when a word and when a paragraph has been finished. Which is ideal for autocorrection and autoreplacement of text.&lt;br /&gt;
&lt;br /&gt;
Examples of usages of this plugin type are; a word count in a docker updated continuesly, auto correction of text, replacing formatted text with calculated values or custom shape plugins.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs/classKoTextEditingRegistry.html KoTextEditingRegistry]&lt;br /&gt;
&lt;br /&gt;
== Krita's plugins ==&lt;br /&gt;
* filters (effects)&lt;br /&gt;
* paintop (plugin that are in charge of painting when the user uses a drawing tool)&lt;br /&gt;
* viewplugin (aka misc)&lt;br /&gt;
See [http://docs.kde.org/development/en/koffice/krita/developers-plugins.html Krita's handbook]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Write_a_Flake_Plugin</id>
		<title>Development/Tutorials/Write a Flake Plugin</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Write_a_Flake_Plugin"/>
				<updated>2007-05-02T15:05:17Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Make your shape editable - create a tool */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial will guide you step by step through the creation of a [http://wiki.koffice.org/index.php?title=Flake Flake] shape. At the end you will be able to write a shape that is loadable by any KOffice application.&lt;br /&gt;
&lt;br /&gt;
For an introduction of KOffice plugins, see [[Development/Tutorials/KOffice Overview]] and for a technical introduction to plugins in KOffice see [[Development/Tutorials/Generic KOffice Plugin Creation|Generic KOffice Plugin Creation]]&lt;br /&gt;
&lt;br /&gt;
=Do the groundwork - create a shape=&lt;br /&gt;
&lt;br /&gt;
First of all you need a class derived from the [http://koffice.org/developer/apidocs/libs-flake/classKoShape.html KoShape] class. This will be the actual shape class so you have to ensure that all the data you need for painting is accessable for this KoShape derived class.&lt;br /&gt;
The only method you '''have''' to reimplement is the [http://koffice.org/developer/apidocs/libs-flake/classKoShape.html#027c57ec3dc4360294c5bb7330c768d7 paint()] method which is responsible for painting your shape.&lt;br /&gt;
&lt;br /&gt;
What you might be interested in is the [http://koffice.org/developer/apidocs/libs-flake/classKoShape.html#09a45358ef20c372675790531989d5b6 resize()] and [http://koffice.org/developer/apidocs/libs-flake/classKoShape.html#5bc408a6f4d7f0bd0ea832002b96ac83 size()] method which set the available size to the shape. Some shapes define the size they need on their own so they reimplement size() to return the size they have. &lt;br /&gt;
&lt;br /&gt;
An example for this is the KoFormulaShape. A formula has a fixed size due to its contents and so KoFormulaShape reimplements the size() method.&lt;br /&gt;
If your shape has a special outline, reimplement [http://koffice.org/developer/apidocs/libs-flake/classKoShape.html#71ac11dbac93b5bff2f91fb768fa17e5 outline()] to return your shape's outline correctly.&lt;br /&gt;
&lt;br /&gt;
The rotation, scaling and skewing is done through a matrix and so you don't need to care about it.&lt;br /&gt;
&lt;br /&gt;
So here is an example how your code might look like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;KoShape.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class KoFooShape : public KoShape {&lt;br /&gt;
public:&lt;br /&gt;
    KoFooShape();&lt;br /&gt;
    ~KoFooShape();&lt;br /&gt;
&lt;br /&gt;
    // absolutly necessary:&lt;br /&gt;
    void paint( QPainter &amp;amp;painter,&lt;br /&gt;
                const KoViewConverter &amp;amp;converter );&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
    SomeDataClass* m_dataClass;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Make your shape loadable - create a factory and a plugin=&lt;br /&gt;
&lt;br /&gt;
XXX: Hasn't this changed? Look at the video or picture shape -- I think we do without all of this nowadays. (Boudewijn)&lt;br /&gt;
&lt;br /&gt;
Now when you have created your shape class and implemented all the necessary things to make it at least compile you can think about the loading of your shape.&lt;br /&gt;
&lt;br /&gt;
The KOffice apps use [http://koffice.org/developer/apidocs/libs-flake/classKoShapeFactory.html KoShapeFactory] to get instances of shapes in a generic way. This way of obtaining shape instances is designed after [http://en.wikipedia.org/wiki/Abstract_factory_pattern the factory pattern]. So you should also implement a KoShapeFactory derived class that makes creating new instances of your shape possible. The factory class has to implement two methods: &lt;br /&gt;
&lt;br /&gt;
* KoShape* createDefaultShape() const;&lt;br /&gt;
* KoShape* createShape( const KoProperties* params ) const;&lt;br /&gt;
&lt;br /&gt;
An example factory class definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class FooShapeFactory : public KoShapeFactory {&lt;br /&gt;
public:&lt;br /&gt;
    FooShapeFactory( QObject *parent );&lt;br /&gt;
&lt;br /&gt;
    KoShape* createDefaultShape() const;&lt;br /&gt;
    KoShape* createShape(const KoProperties* params) const;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The according implementation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FooShapeFactory::FooShapeFactory(QObject* parent) &lt;br /&gt;
   : KoShapeFactory( parent, &amp;quot;FooShape&amp;quot;,&lt;br /&gt;
                     i18n(&amp;quot;Foo Shape&amp;quot;) )&lt;br /&gt;
{&lt;br /&gt;
    setToolTip( i18n(&amp;quot;A foo shape&amp;quot;) );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
KoShape* FooShapeFactory::createDefaultShape() const&lt;br /&gt;
{&lt;br /&gt;
    KoFooShape* fooShape = new KoFooShape();&lt;br /&gt;
    // set defaults&lt;br /&gt;
    return fooShape;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
KoShape* FooShapeFactory::createShape(&lt;br /&gt;
                            const KoProperties* params ) const&lt;br /&gt;
{&lt;br /&gt;
    KoFooShape* fooShape = new KoFooShape();&lt;br /&gt;
    // use the params&lt;br /&gt;
    return fooShape;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the factory there is now a generic way to obtain an instance of your shape. But somehow you have to publish your shape as a plugin to let the KOffice application know that there is a plugin to load. Therefore the flake library provides the [http://koffice.org/developer/apidocs/libs-flake/classKoShapeRegistry.html KoShapeRegistry] class. Each application has access to the registry and to let the application know about your shape you have to register it within the registry.&lt;br /&gt;
&lt;br /&gt;
To register we would have to make a call like this:&lt;br /&gt;
 KoShapeRegistry::instance()-&amp;gt;add( new FooShapeFactory( parent ) );&lt;br /&gt;
In order to make that call, we will create a plugin class which is special in that it will be automatically loaded and created by KOffice when an application starts.  This means that the constructor of our plugin class will be the perfect place to actually register our shape using the above line.&lt;br /&gt;
&lt;br /&gt;
The registration is done within the constructor of the FooShapePlugin class. This is a very simple class that represents the plugin and does registration.&lt;br /&gt;
&lt;br /&gt;
Example plugin class definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;QObject&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class FooShapePlugin : public QObject {&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
public:&lt;br /&gt;
    FooShapePlugin(QObject *parent, const QStringList&amp;amp;);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example plugin class implementation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;FooShapePlugin.h&amp;quot;&lt;br /&gt;
#include &amp;lt;kgenericfactory.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
K_EXPORT_COMPONENT_FACTORY(fooshapelibrary,&lt;br /&gt;
    KGenericFactory&amp;lt;FooShapePlugin&amp;gt;( &amp;quot;FooPlugin&amp;quot; ) )&lt;br /&gt;
&lt;br /&gt;
FooShapePlugin::FooShapePlugin(QObject *parent, const QStringList&amp;amp;)&lt;br /&gt;
    : QObject(parent)&lt;br /&gt;
{&lt;br /&gt;
    // register the shape's factory&lt;br /&gt;
    KoShapeRegistry::instance()-&amp;gt;add(&lt;br /&gt;
        new KoFooShapeFactory( parent ) );&lt;br /&gt;
    // we could register more things here in this same plugin.&lt;br /&gt;
}&lt;br /&gt;
#include &amp;quot;FooShapePlugin.moc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This demonstrates how for the plugin related tasks KDE provides services which are dynamic loaded libraries. The secret ingredient that makes this class the plugin of that library is the call to the K_EXPORT_COMPONENT_FACTORY macro defined in kgenericfactory.h&lt;br /&gt;
&lt;br /&gt;
We now have a way to create instances of your shape (FooShapeFactory), a way to register them for the apps (KoShapeRegistry) and a plugin that can dynamically be loaded (FooShapePlugin). The last step is to create a .desktop file that describes your plugin and makes it findable by KOffice. For &amp;quot;X-KDE-Library&amp;quot; you have to set the library name you have already specified within K_EXPORT_COMPONENT_FACTORY().&lt;br /&gt;
&lt;br /&gt;
Example fooshape.desktop file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Encoding=UTF-8&lt;br /&gt;
Name=Foo Shape&lt;br /&gt;
ServiceTypes=KOffice/Flake&lt;br /&gt;
Type=Service&lt;br /&gt;
X-KDE-Library=fooshapelibrary&lt;br /&gt;
X-Flake-Version=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After installing that file in the kde services directory and installing your plugin where the application can open it, your plugin is system wide known and can be loaded by KOffice.&lt;br /&gt;
&lt;br /&gt;
TODO; add example CMake file.&lt;br /&gt;
&lt;br /&gt;
=Make your shape editable - create a tool=&lt;br /&gt;
&lt;br /&gt;
To edit your shape in the GUI the user wants to select a tool and alter your shape. Therefore you have to provide a KoTool derived class. This class implements all edit actions that can be done on your shape but it is also possible to have more than one tool per shape.&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Write_a_Flake_Plugin</id>
		<title>Development/Tutorials/Write a Flake Plugin</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Write_a_Flake_Plugin"/>
				<updated>2007-05-02T15:04:30Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial will guide you step by step through the creation of a [http://wiki.koffice.org/index.php?title=Flake Flake] shape. At the end you will be able to write a shape that is loadable by any KOffice application.&lt;br /&gt;
&lt;br /&gt;
For an introduction of KOffice plugins, see [[Development/Tutorials/KOffice Overview]] and for a technical introduction to plugins in KOffice see [[Development/Tutorials/Generic KOffice Plugin Creation|Generic KOffice Plugin Creation]]&lt;br /&gt;
&lt;br /&gt;
=Do the groundwork - create a shape=&lt;br /&gt;
&lt;br /&gt;
First of all you need a class derived from the [http://koffice.org/developer/apidocs/libs-flake/classKoShape.html KoShape] class. This will be the actual shape class so you have to ensure that all the data you need for painting is accessable for this KoShape derived class.&lt;br /&gt;
The only method you '''have''' to reimplement is the [http://koffice.org/developer/apidocs/libs-flake/classKoShape.html#027c57ec3dc4360294c5bb7330c768d7 paint()] method which is responsible for painting your shape.&lt;br /&gt;
&lt;br /&gt;
What you might be interested in is the [http://koffice.org/developer/apidocs/libs-flake/classKoShape.html#09a45358ef20c372675790531989d5b6 resize()] and [http://koffice.org/developer/apidocs/libs-flake/classKoShape.html#5bc408a6f4d7f0bd0ea832002b96ac83 size()] method which set the available size to the shape. Some shapes define the size they need on their own so they reimplement size() to return the size they have. &lt;br /&gt;
&lt;br /&gt;
An example for this is the KoFormulaShape. A formula has a fixed size due to its contents and so KoFormulaShape reimplements the size() method.&lt;br /&gt;
If your shape has a special outline, reimplement [http://koffice.org/developer/apidocs/libs-flake/classKoShape.html#71ac11dbac93b5bff2f91fb768fa17e5 outline()] to return your shape's outline correctly.&lt;br /&gt;
&lt;br /&gt;
The rotation, scaling and skewing is done through a matrix and so you don't need to care about it.&lt;br /&gt;
&lt;br /&gt;
So here is an example how your code might look like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;KoShape.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class KoFooShape : public KoShape {&lt;br /&gt;
public:&lt;br /&gt;
    KoFooShape();&lt;br /&gt;
    ~KoFooShape();&lt;br /&gt;
&lt;br /&gt;
    // absolutly necessary:&lt;br /&gt;
    void paint( QPainter &amp;amp;painter,&lt;br /&gt;
                const KoViewConverter &amp;amp;converter );&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
    SomeDataClass* m_dataClass;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Make your shape loadable - create a factory and a plugin=&lt;br /&gt;
&lt;br /&gt;
XXX: Hasn't this changed? Look at the video or picture shape -- I think we do without all of this nowadays. (Boudewijn)&lt;br /&gt;
&lt;br /&gt;
Now when you have created your shape class and implemented all the necessary things to make it at least compile you can think about the loading of your shape.&lt;br /&gt;
&lt;br /&gt;
The KOffice apps use [http://koffice.org/developer/apidocs/libs-flake/classKoShapeFactory.html KoShapeFactory] to get instances of shapes in a generic way. This way of obtaining shape instances is designed after [http://en.wikipedia.org/wiki/Abstract_factory_pattern the factory pattern]. So you should also implement a KoShapeFactory derived class that makes creating new instances of your shape possible. The factory class has to implement two methods: &lt;br /&gt;
&lt;br /&gt;
* KoShape* createDefaultShape() const;&lt;br /&gt;
* KoShape* createShape( const KoProperties* params ) const;&lt;br /&gt;
&lt;br /&gt;
An example factory class definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class FooShapeFactory : public KoShapeFactory {&lt;br /&gt;
public:&lt;br /&gt;
    FooShapeFactory( QObject *parent );&lt;br /&gt;
&lt;br /&gt;
    KoShape* createDefaultShape() const;&lt;br /&gt;
    KoShape* createShape(const KoProperties* params) const;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The according implementation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FooShapeFactory::FooShapeFactory(QObject* parent) &lt;br /&gt;
   : KoShapeFactory( parent, &amp;quot;FooShape&amp;quot;,&lt;br /&gt;
                     i18n(&amp;quot;Foo Shape&amp;quot;) )&lt;br /&gt;
{&lt;br /&gt;
    setToolTip( i18n(&amp;quot;A foo shape&amp;quot;) );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
KoShape* FooShapeFactory::createDefaultShape() const&lt;br /&gt;
{&lt;br /&gt;
    KoFooShape* fooShape = new KoFooShape();&lt;br /&gt;
    // set defaults&lt;br /&gt;
    return fooShape;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
KoShape* FooShapeFactory::createShape(&lt;br /&gt;
                            const KoProperties* params ) const&lt;br /&gt;
{&lt;br /&gt;
    KoFooShape* fooShape = new KoFooShape();&lt;br /&gt;
    // use the params&lt;br /&gt;
    return fooShape;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the factory there is now a generic way to obtain an instance of your shape. But somehow you have to publish your shape as a plugin to let the KOffice application know that there is a plugin to load. Therefore the flake library provides the [http://koffice.org/developer/apidocs/libs-flake/classKoShapeRegistry.html KoShapeRegistry] class. Each application has access to the registry and to let the application know about your shape you have to register it within the registry.&lt;br /&gt;
&lt;br /&gt;
To register we would have to make a call like this:&lt;br /&gt;
 KoShapeRegistry::instance()-&amp;gt;add( new FooShapeFactory( parent ) );&lt;br /&gt;
In order to make that call, we will create a plugin class which is special in that it will be automatically loaded and created by KOffice when an application starts.  This means that the constructor of our plugin class will be the perfect place to actually register our shape using the above line.&lt;br /&gt;
&lt;br /&gt;
The registration is done within the constructor of the FooShapePlugin class. This is a very simple class that represents the plugin and does registration.&lt;br /&gt;
&lt;br /&gt;
Example plugin class definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;QObject&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class FooShapePlugin : public QObject {&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
public:&lt;br /&gt;
    FooShapePlugin(QObject *parent, const QStringList&amp;amp;);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example plugin class implementation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;FooShapePlugin.h&amp;quot;&lt;br /&gt;
#include &amp;lt;kgenericfactory.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
K_EXPORT_COMPONENT_FACTORY(fooshapelibrary,&lt;br /&gt;
    KGenericFactory&amp;lt;FooShapePlugin&amp;gt;( &amp;quot;FooPlugin&amp;quot; ) )&lt;br /&gt;
&lt;br /&gt;
FooShapePlugin::FooShapePlugin(QObject *parent, const QStringList&amp;amp;)&lt;br /&gt;
    : QObject(parent)&lt;br /&gt;
{&lt;br /&gt;
    // register the shape's factory&lt;br /&gt;
    KoShapeRegistry::instance()-&amp;gt;add(&lt;br /&gt;
        new KoFooShapeFactory( parent ) );&lt;br /&gt;
    // we could register more things here in this same plugin.&lt;br /&gt;
}&lt;br /&gt;
#include &amp;quot;FooShapePlugin.moc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This demonstrates how for the plugin related tasks KDE provides services which are dynamic loaded libraries. The secret ingredient that makes this class the plugin of that library is the call to the K_EXPORT_COMPONENT_FACTORY macro defined in kgenericfactory.h&lt;br /&gt;
&lt;br /&gt;
We now have a way to create instances of your shape (FooShapeFactory), a way to register them for the apps (KoShapeRegistry) and a plugin that can dynamically be loaded (FooShapePlugin). The last step is to create a .desktop file that describes your plugin and makes it findable by KOffice. For &amp;quot;X-KDE-Library&amp;quot; you have to set the library name you have already specified within K_EXPORT_COMPONENT_FACTORY().&lt;br /&gt;
&lt;br /&gt;
Example fooshape.desktop file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Encoding=UTF-8&lt;br /&gt;
Name=Foo Shape&lt;br /&gt;
ServiceTypes=KOffice/Flake&lt;br /&gt;
Type=Service&lt;br /&gt;
X-KDE-Library=fooshapelibrary&lt;br /&gt;
X-Flake-Version=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After installing that file in the kde services directory and installing your plugin where the application can open it, your plugin is system wide known and can be loaded by KOffice.&lt;br /&gt;
&lt;br /&gt;
TODO; add example CMake file.&lt;br /&gt;
&lt;br /&gt;
=Make your shape editable - create a tool=&lt;br /&gt;
&lt;br /&gt;
To edit your shape in the GUI the user wants to select a tool and alter your shape. Therefore you have to provide a KoTool derived class. This class implements all edit actions that can be done on your shape but it is also possible to have more than one tool per shape.&lt;br /&gt;
&lt;br /&gt;
 Note from TZ:  I suggest creating a koffice/shapes/example dir in svn &lt;br /&gt;
 which you can refer to from this tutorial.&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Generic_KOffice_Plugin_Creation</id>
		<title>Development/Tutorials/Generic KOffice Plugin Creation</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Generic_KOffice_Plugin_Creation"/>
				<updated>2007-05-02T15:02:26Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: New page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Writing a plugin for KOffice technically means the following things are created;&lt;br /&gt;
* An interface that is shipped in the base-libraries will be inherited from, and functionality implemented unique to the plugin.  Examples of these interfaces are KoShape, KoTool and KoColorSpace.&lt;br /&gt;
* A factory class is created.  The factory design pattern allows the plugin to create as many instances of the plugin code as required in a flexible manner.  Each plugin type has its own Factory object that should be inherited from.&lt;br /&gt;
* A plugin object is created.  This is really a plugin-loader object and it will be created and immediately deleted by the KOffice libraries.&lt;br /&gt;
* A library file is installed that contains all classes that make up the plugin.&lt;br /&gt;
* A desktop file is installed with the information about the plugin, including the name of the library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The concept of a plugin. ==&lt;br /&gt;
&lt;br /&gt;
The concept is really based on what Object Orientated design is saying, it means that you can create programmer-interface and encapsulate that in a class without being very clear as to what that implementation is suppost to do.  You can then supply serveral classes that actually contains the implementation of the programmer-interface, each in their own way.&lt;br /&gt;
The actual way that the class responds to the same environment is thus the implementation and not the programmer-interface.&lt;br /&gt;
Plugins are a way to provide a different implementation for a known interface.&lt;br /&gt;
&lt;br /&gt;
KOffice has defined several classes as base classes and has made the programmer interface of those base classes generic enough so a wide range of functionality can be accomplished by providing a plugin with a new implemntation for such a base class.&lt;br /&gt;
&lt;br /&gt;
An example;  one plugin type that KOffice supports is a docker widget.  A docker widget is really a widget that can be shown on screen like a button or a text field are widgets as well.&lt;br /&gt;
The plugin can ship a new implementation of the QDockWidget class by inheriting from that QDockWidget and providing text/buttons and functionality using the full API of the Qt and KDE/KOffice libraries to do their work.&lt;br /&gt;
This means I can provide a plugin that ships a docker. And the docker shows the time of day, for example.  By installing the plugin according to the instructions for that type of KOffice-plugin the KOffice application are able to find it and the docker will be created and shown on screen.&lt;br /&gt;
&lt;br /&gt;
One unique property of a plugin is that it is self contained.  Which means that the end result of the plugin is one library which exports just the 'plugin object'.  This means that whatever code and classes is changed in one plugin can not possibly affect code in another plugin or even in the KOffice applications.&lt;br /&gt;
This has the benefit that development becomes more separated and changes in one place will not give problems in another.&lt;br /&gt;
It is therefor suggested to use any number of classes that fit your design and programming style, and you are free to avoid using namespaces or class name prefixes, as you wish.  In other words; your plugin is walled off, nobody will be bothered by what you do, or how do you it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
&lt;br /&gt;
The '''first component''' is the class that inherits from the interface this plugin represents.&lt;br /&gt;
Each plugin type will go into details on this as each interface has different features and requirements.&lt;br /&gt;
&lt;br /&gt;
The '''factory component''' is also unique per plugin, but quite generic in setup and idea.  The reason for the existance of a factory is that it makes it possible to create any number of the plugin objects at the time that the host applications want to do this, probably at the request of the user.&lt;br /&gt;
The workflow in general is this;&lt;br /&gt;
* A plugin is loaded and a factory is created. (see the plugin-object component)&lt;br /&gt;
* This factory is registered in a Registry.&lt;br /&gt;
* Applications query the registry to ask about all plugins and use, for example, the name and an icon from the factory to show buttons on screen.&lt;br /&gt;
* The user clicks on a button, or in another way selects the plugin factory.&lt;br /&gt;
* The plugin factory is then asked to create a new instance of the thing it is meant to create.&lt;br /&gt;
* That new shape or widget or other thing is used in the document or gui. All depending on the plugin type.&lt;br /&gt;
&lt;br /&gt;
This means that our main advertisement to the outside world is the factory. As the factory is used to show the user what kind of things this plugin can do.  Each plugin type has its own factory, with at minimum a create() like method which then returns a new instance.&lt;br /&gt;
The factories typically have a large set of user interface components you can register on them. Like a name, or an icon etc.  It is wise to fill as many of them with relevant information as possible.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The next component is the '''Plugin component'''.  This is a QObject inheriting class that has a specific constructor signature and, interrestingly, will be deleted immediately after it is created.&lt;br /&gt;
The trick therefor is to do all the work of creating and registring the factories in the constructor.&lt;br /&gt;
The code for this class is pretty simple, and you copy paste it with just a few modifications;&lt;br /&gt;
&lt;br /&gt;
in the header file:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;QObject&amp;gt;&lt;br /&gt;
 class MyPlugin : public QObject {&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
 public:&lt;br /&gt;
    MyPlugin(QObject * parent, const QStringList &amp;amp;list);&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
in the cpp file;&lt;br /&gt;
&lt;br /&gt;
 #include &amp;quot;MyPlugin.h&amp;quot;&lt;br /&gt;
 #include &amp;lt;kgenericfactory.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;KoShapeRegistry.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;KoToolRegistry.h&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 K_EXPORT_COMPONENT_FACTORY(libraryname, KGenericFactory&amp;lt;MyPlugin&amp;gt;( &amp;quot;MyPlugin&amp;quot; ) )&amp;lt;br&amp;gt;&lt;br /&gt;
 MyPlugin::MyPlugin(QObject * parent, const QStringList &amp;amp;)&lt;br /&gt;
    : QObject(parent)&lt;br /&gt;
 {&lt;br /&gt;
    KoToolRegistry::instance()-&amp;gt;add(new MyToolFactory(parent));&lt;br /&gt;
    KoShapeRegistry::instance()-&amp;gt;add(new MyShapeFactory(parent));&lt;br /&gt;
 }&lt;br /&gt;
 #include &amp;lt;MyPlugin.moc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example registeres 2 factories, but you can register any number you want to ship in 1 plugin.  Note how only the factory is created, and nothing else is done.  This makes loading of the plugin as fast as possible.&lt;br /&gt;
If you copy paste this code make sure you update the 'libraryname' to be the (all lowercase) name of your plugin-library.  Which is also repeated in the desktop file.  Note that the name is without any extentions.  In the &amp;lt;code&amp;gt;K_EXPORT_COMPONENT_FACTORY&amp;lt;/code&amp;gt; macro the 'MyPlugin' is repeated twice.  Its easiest to just replace that with the class name you choose for your project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''library''' is what will contain all the compiled classes of your plugin.&lt;br /&gt;
&lt;br /&gt;
A plugin is technically implemented as a library, at least on Linux and other unixes.  It is loaded as a library by KOffice near the start of the application start.  As the plugin is a library all development software can create them using a linker.&lt;br /&gt;
It is worth noting that it is possible for your plugin to depend on external shared libraries, apart from the koffice ones.  But you should install that shared library as well as your plugin.&lt;br /&gt;
In cmake the creation of a library goes like this;&lt;br /&gt;
&lt;br /&gt;
 ########### Flake Plugin library ###############&lt;br /&gt;
 project( myPlugin)&lt;br /&gt;
 include_directories( ${KOFFICEUI_INCLUDES} )&amp;lt;br&amp;gt;&lt;br /&gt;
 SET ( myplugin_SRCS&lt;br /&gt;
    MyPlugin.cpp&lt;br /&gt;
    # other cpp files&lt;br /&gt;
 )&amp;lt;br&amp;gt;&lt;br /&gt;
 kde4_automoc(${myplugin_SRCS})&lt;br /&gt;
 kde4_add_plugin(textshape ${myplugin_SRCS})&lt;br /&gt;
 target_link_libraries(myplugin kofficeui)&lt;br /&gt;
 install(TARGETS myplugin DESTINATION ${PLUGIN_INSTALL_DIR})&lt;br /&gt;
 install( FILES myplugin.desktop DESTINATION ${SERVICES_INSTALL_DIR})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And last is the '''desktop-file component''' after which the plugin will be found and used by KOffice.&lt;br /&gt;
A desktop file is basically a database record for the KDE database of what is installed.  In this case the component is a 'Service'.&lt;br /&gt;
For our running example here is myplugin.desktop&lt;br /&gt;
&lt;br /&gt;
 [Desktop Entry]&lt;br /&gt;
 Encoding=UTF-8&lt;br /&gt;
 Name=My Shape&lt;br /&gt;
 ServiceTypes=KOffice/Flake&lt;br /&gt;
 Type=Service&lt;br /&gt;
 X-KDE-Library=myplugin&lt;br /&gt;
 X-Flake-Version=1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A couple of things are important;&lt;br /&gt;
* The encoding has to match the encoding used.  So make sure you use an editor that understands and writes utf-8 when editing this file.&lt;br /&gt;
* The name is used for the plugin-manager.&lt;br /&gt;
* The ServiceTypes is used to specify which registry should try to load us.  One plugin can contain any number of factories, and some would say, it can contain any number of plugins.  It typically is useful to combine a shape and a tool into one plugin, for example.  Now, when an application looks for all shape plugins, our plugin should be found, naturally.  So we can choose to use the ServiceTypes 'KOffice/Shape'.  But when the application looks for tools we should also find the plugin.  So we might need to have 'KOffice/Tool' instead.&amp;lt;br&amp;gt;This gets confusing and we don't want one plugin to be loaded twice, so instead we take the more generic 'KOffice/flake' which will be searched for when either a shape or a tool is requested.  Each plugin type will show the best matching ServiceType, but if you are doubtful you can always use 'KOffice/Flake'.&lt;br /&gt;
* The X-KDE-Library field has to contain the actual (lowercase) name of the library we created in the previous step.  Without any extention.&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/KOffice_Overview</id>
		<title>Development/Tutorials/KOffice Overview</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/KOffice_Overview"/>
				<updated>2007-05-02T15:00:26Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: Add link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;KOffice has gotten more and more configurable through plugins over time, which is a really good thing as 3rd party developers can extend KOffice using dedicated code for their purpose.&lt;br /&gt;
&lt;br /&gt;
You will learn what functionality you can place in each plugin type so you can choose wisely.  There is a general guide to writing plugins and each type has a tutorial showing how to create a new plugin of that type.&lt;br /&gt;
&lt;br /&gt;
well, not all required info is there yet; but this is the idea :)  Anyone want to help?&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Generic Information ==&lt;br /&gt;
Plugins are a design technique with a series of steps that will lead you to a loadable plugin.  If you want to know more its is interresting to read an overview at [[Development/Tutorials/Generic KOffice Plugin Creation|Generic KOffice Plugin Creation]]&lt;br /&gt;
&lt;br /&gt;
== Shapes ==&lt;br /&gt;
In KOffice shapes are document content.  This content can be manipulated by the user and can be shown on screen or printed.  The fact that they are plugins means that a new content types can be added to documents by just installing the plugin and starting your favorite KOffice application.&lt;br /&gt;
To get a feel for what a shape is, here are some examples of existing shapes, sometimes referred to as Flake shapes because shapes are one of the two main parts of the Flake library.&lt;br /&gt;
&lt;br /&gt;
We have a PathShape which is a generic vector shape capable of showing and printing any sort of vector art like SVG or EPS vector graphics.&lt;br /&gt;
&lt;br /&gt;
There is a Text plugin that is capable of showing marked up text with a huge feature set including HTML capabilities and a big part of the more extensive OpenDocument format.&lt;br /&gt;
&lt;br /&gt;
KSpread exports a tableShape, to allow a spread-sheet table to be embedded in other KOffice applications.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs-flake/classKoShapeRegistry.html KoShapeRegistry]&lt;br /&gt;
&lt;br /&gt;
The tutorial on how to write your own shape plugins can be found at [[Development/Tutorials/Write a Flake Plugin|Write a Flake Plugin]]&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
A tool is a plugin that handles user input and can manipulate either the general application data, or can manipulate a specific shape.&lt;br /&gt;
All user input mouse and keyboard events that are send to the document area (canvas), will be passed to the active tool.  The active tool can use them to, for example, move shapes around or rotate them. If you combine a tool with a shape plugin you can make the tool manipulate the data of the shape.  A good example is the text tool which is bundled with the text shape.  The text tool takes all keyboard events and thereby lets the user type text in the text shape.&lt;br /&gt;
&lt;br /&gt;
This gives a clear separation of control and content.  The shape holds the content and a tool is required to control that content.&lt;br /&gt;
&lt;br /&gt;
In general there are two types of Tools;&lt;br /&gt;
* generic tools that are not associated with a shape plugin.  Its rare that you will create such plugins, though we still need a 'measure' tool that falls in that category.&lt;br /&gt;
* bundled tools that come with a specific flake shape and is made to manipulate that shapes data.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs-flake/classKoToolRegistry.html KoToolRegistry]&lt;br /&gt;
&lt;br /&gt;
The tutorial on how to write your own shape plugins can be found at [[Development/Tutorials/Write a Flake Plugin|Write a Flake Plugin]]&lt;br /&gt;
&lt;br /&gt;
== Dockers ==&lt;br /&gt;
&lt;br /&gt;
Plugins that provide a docker are basically plugins that provide a graphical user interface element for KOffice applications.  In KOffice2 the focus on toolbars and dialogs will be less as they have been proven to be confusing to users because they clutter the interface.&lt;br /&gt;
Instead the focus is shifted to widgets that can be docked along the sides of a document window but also moved to be a separate window. The real change is that, unlike dialogs, they don't have an 'Ok' button but instead change the content life and immediately.&lt;br /&gt;
Examples of dockers are; the toolbox, the shape selector and the tool-options but also the color selector.&lt;br /&gt;
&lt;br /&gt;
== Colorspaces ==&lt;br /&gt;
&lt;br /&gt;
== File Filters ==&lt;br /&gt;
&lt;br /&gt;
== Text Plugins ==&lt;br /&gt;
&lt;br /&gt;
The text component used in all KOffice applications has a set of plugins itself. These plugins allow the possibility to enhance the content as well as allow to enhance the editing experience.  Use Inline object plugins to write content such as inline variables and bookmarks.  Use Text Editing plugins to be able to replace the text a user types while he types it. For example for autocorrection.&lt;br /&gt;
&lt;br /&gt;
=== Inline Objects ===&lt;br /&gt;
&lt;br /&gt;
The plugins of this type effectively become a character in the text document.  What this means is that a user can insert an inline object and the plugin can decide the size and content of the character inserted.&lt;br /&gt;
A good example of inline objects are variables.  A variable can have a name and a value and altering the value of a variable will then change the value in the text all over the document. This is done by an inline object that shows the full text of the variable, but in the document it behaves as it is one big character that can't be split over lines or otherwise edited.&lt;br /&gt;
&lt;br /&gt;
An inline object does not have to have content, it can just be a placeholder as well. Which makes it ideal for things like in-text comments/annotations and Bookmarks.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs/classKoInlineObjectRegistry.html KoInlineObjectRegistry]&lt;br /&gt;
&lt;br /&gt;
=== Text Editing ===&lt;br /&gt;
&lt;br /&gt;
The text editing plugins are all about handling user input while (s)he is editing the text. A plugin can do near everything with the typed text, including altering it and adding markup.&lt;br /&gt;
The plugin gives events when a word and when a paragraph has been finished. Which is ideal for autocorrection and autoreplacement of text.&lt;br /&gt;
&lt;br /&gt;
Examples of usages of this plugin type are; a word count in a docker updated continuesly, auto correction of text, replacing formatted text with calculated values or custom shape plugins.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs/classKoTextEditingRegistry.html KoTextEditingRegistry]&lt;br /&gt;
&lt;br /&gt;
== Krita's plugins ==&lt;br /&gt;
* filters (effects)&lt;br /&gt;
* paintop (plugin that are in charge of painting when the user uses a drawing tool)&lt;br /&gt;
* viewplugin (aka misc)&lt;br /&gt;
See [http://docs.kde.org/development/en/koffice/krita/developers-plugins.html Krita's handbook]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/KOffice_Overview</id>
		<title>Development/Tutorials/KOffice Overview</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/KOffice_Overview"/>
				<updated>2007-05-02T14:55:27Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: Initial document.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;KOffice has gotten more and more configurable through plugins over time, which is a really good thing as 3rd party developers can extend KOffice using dedicated code for their purpose.&lt;br /&gt;
&lt;br /&gt;
You will learn what functionality you can place in each plugin type so you can choose wisely.  There is a general guide to writing plugins and each type has a tutorial showing how to create a new plugin of that type.&lt;br /&gt;
&lt;br /&gt;
well, not all required info is there yet; but this is the idea :)  Anyone want to help?&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Shapes ==&lt;br /&gt;
In KOffice shapes are document content.  This content can be manipulated by the user and can be shown on screen or printed.  The fact that they are plugins means that a new content types can be added to documents by just installing the plugin and starting your favorite KOffice application.&lt;br /&gt;
To get a feel for what a shape is, here are some examples of existing shapes, sometimes referred to as Flake shapes because shapes are one of the two main parts of the Flake library.&lt;br /&gt;
&lt;br /&gt;
We have a PathShape which is a generic vector shape capable of showing and printing any sort of vector art like SVG or EPS vector graphics.&lt;br /&gt;
&lt;br /&gt;
There is a Text plugin that is capable of showing marked up text with a huge feature set including HTML capabilities and a big part of the more extensive OpenDocument format.&lt;br /&gt;
&lt;br /&gt;
KSpread exports a tableShape, to allow a spread-sheet table to be embedded in other KOffice applications.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs-flake/classKoShapeRegistry.html KoShapeRegistry]&lt;br /&gt;
&lt;br /&gt;
The tutorial on how to write your own shape plugins can be found at [[Development/Tutorials/Write a Flake Plugin|Write a Flake Plugin]]&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
A tool is a plugin that handles user input and can manipulate either the general application data, or can manipulate a specific shape.&lt;br /&gt;
All user input mouse and keyboard events that are send to the document area (canvas), will be passed to the active tool.  The active tool can use them to, for example, move shapes around or rotate them. If you combine a tool with a shape plugin you can make the tool manipulate the data of the shape.  A good example is the text tool which is bundled with the text shape.  The text tool takes all keyboard events and thereby lets the user type text in the text shape.&lt;br /&gt;
&lt;br /&gt;
This gives a clear separation of control and content.  The shape holds the content and a tool is required to control that content.&lt;br /&gt;
&lt;br /&gt;
In general there are two types of Tools;&lt;br /&gt;
* generic tools that are not associated with a shape plugin.  Its rare that you will create such plugins, though we still need a 'measure' tool that falls in that category.&lt;br /&gt;
* bundled tools that come with a specific flake shape and is made to manipulate that shapes data.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs-flake/classKoToolRegistry.html KoToolRegistry]&lt;br /&gt;
&lt;br /&gt;
The tutorial on how to write your own shape plugins can be found at [[Development/Tutorials/Write a Flake Plugin|Write a Flake Plugin]]&lt;br /&gt;
&lt;br /&gt;
== Dockers ==&lt;br /&gt;
&lt;br /&gt;
Plugins that provide a docker are basically plugins that provide a graphical user interface element for KOffice applications.  In KOffice2 the focus on toolbars and dialogs will be less as they have been proven to be confusing to users because they clutter the interface.&lt;br /&gt;
Instead the focus is shifted to widgets that can be docked along the sides of a document window but also moved to be a separate window. The real change is that, unlike dialogs, they don't have an 'Ok' button but instead change the content life and immediately.&lt;br /&gt;
Examples of dockers are; the toolbox, the shape selector and the tool-options but also the color selector.&lt;br /&gt;
&lt;br /&gt;
== Colorspaces ==&lt;br /&gt;
&lt;br /&gt;
== File Filters ==&lt;br /&gt;
&lt;br /&gt;
== Text Plugins ==&lt;br /&gt;
&lt;br /&gt;
The text component used in all KOffice applications has a set of plugins itself. These plugins allow the possibility to enhance the content as well as allow to enhance the editing experience.  Use Inline object plugins to write content such as inline variables and bookmarks.  Use Text Editing plugins to be able to replace the text a user types while he types it. For example for autocorrection.&lt;br /&gt;
&lt;br /&gt;
=== Inline Objects ===&lt;br /&gt;
&lt;br /&gt;
The plugins of this type effectively become a character in the text document.  What this means is that a user can insert an inline object and the plugin can decide the size and content of the character inserted.&lt;br /&gt;
A good example of inline objects are variables.  A variable can have a name and a value and altering the value of a variable will then change the value in the text all over the document. This is done by an inline object that shows the full text of the variable, but in the document it behaves as it is one big character that can't be split over lines or otherwise edited.&lt;br /&gt;
&lt;br /&gt;
An inline object does not have to have content, it can just be a placeholder as well. Which makes it ideal for things like in-text comments/annotations and Bookmarks.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs/classKoInlineObjectRegistry.html KoInlineObjectRegistry]&lt;br /&gt;
&lt;br /&gt;
=== Text Editing ===&lt;br /&gt;
&lt;br /&gt;
The text editing plugins are all about handling user input while (s)he is editing the text. A plugin can do near everything with the typed text, including altering it and adding markup.&lt;br /&gt;
The plugin gives events when a word and when a paragraph has been finished. Which is ideal for autocorrection and autoreplacement of text.&lt;br /&gt;
&lt;br /&gt;
Examples of usages of this plugin type are; a word count in a docker updated continuesly, auto correction of text, replacing formatted text with calculated values or custom shape plugins.&lt;br /&gt;
&lt;br /&gt;
API docs start at; [http://www.koffice.org/developer/apidocs/libs/classKoTextEditingRegistry.html KoTextEditingRegistry]&lt;br /&gt;
&lt;br /&gt;
== Krita's plugins ==&lt;br /&gt;
* filters (effects)&lt;br /&gt;
* paintop (plugin that are in charge of painting when the user uses a drawing tool)&lt;br /&gt;
* viewplugin (aka misc)&lt;br /&gt;
See [http://docs.kde.org/development/en/koffice/krita/developers-plugins.html Krita's handbook]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials</id>
		<title>Development/Tutorials</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials"/>
				<updated>2007-05-02T14:50:33Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* KOffice */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tutorials are the fastest way of finding out what KDE will do for you, and how to do it. Here is a list of currently available tutorials '''for KDE4'''. Material for KDE3 and KDE2 is available on the bottom of this page.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
;[[/Programming Tutorial KDE 4|Introduction To KDE 4 Programming]]&lt;br /&gt;
:''Are you interested in writing applications with KDE 4? This tutorial series is aimed at those completely new to KDE programming.''&lt;br /&gt;
&lt;br /&gt;
;[[/KDE4 Porting Guide|Porting Your Application]]&lt;br /&gt;
:''Help Porting Applications from Qt3/KDE3 to Qt4/KDE4''&lt;br /&gt;
&lt;br /&gt;
;[[/CMake|Introduction to CMake]]  ([[/CMake_(zh_CN)|Simplified Chinese version]])&lt;br /&gt;
:''How to use the CMake build system used by KDE4.''&lt;br /&gt;
&lt;br /&gt;
;[[/Common Programming Mistakes|Common Programming Mistakes]]&lt;br /&gt;
:''Various common mistakes made while developing Qt and KDE applications and how to avoid them.''&lt;br /&gt;
&lt;br /&gt;
;[[/Using Qt Designer|Using Qt Designer to build user interfaces]]&lt;br /&gt;
:''How to create UI files with designer, and how to integrate them into a KDE program.''&lt;br /&gt;
&lt;br /&gt;
;[[/Command-Line Options|Using Command-line Options]]&lt;br /&gt;
:''Processing and accessing command-line arguments the easy way with KDE's command line arguments classes.''&lt;br /&gt;
&lt;br /&gt;
== Testing And Debugging ==&lt;br /&gt;
&lt;br /&gt;
;[[/Debugging|Debugging your application]]&lt;br /&gt;
:''Tips, tools and techniques to apply when debugging your KDE application''&lt;br /&gt;
&lt;br /&gt;
;[[Development/Tutorials/Unittests|Writing Unittests for Qt4 and KDE4 with QTestLib]] ([http://developer.kde.org/documentation/tutorials/writingunittests/writingunittests.html Original link])&lt;br /&gt;
:''Tutorial by [mailto:bradh@frogmouth.net Brad Hards] that describes how to write unit tests using the QTestLib framework. It is presented as an example based tutorial, and is still under development.''&lt;br /&gt;
&lt;br /&gt;
;[[/Code_Checking|Semi-automatic ways to detect code errors]]&lt;br /&gt;
:''Techniques you can use to detect errors in KDE code''&lt;br /&gt;
&lt;br /&gt;
== Managing Configuration Data With KConfig ==&lt;br /&gt;
;[[/KConfig|Introduction To KConfig]]&lt;br /&gt;
:''An overview of the KConfig classes and how to use them in your application code''&lt;br /&gt;
&lt;br /&gt;
;[[/Using KConfig XT|Using KConfig XT]]&lt;br /&gt;
:''Tutorial on how to efficiently use the KConfig XT framework.''&lt;br /&gt;
&lt;br /&gt;
== Localization ==&lt;br /&gt;
;[[/Localization/Unicode|Introduction To Unicode]]&lt;br /&gt;
:''An introduction to what Unicode is as well as how to handle Unicode data in KDE applications.''&lt;br /&gt;
&lt;br /&gt;
; [[/Localization/i18n|Writing Applications With Localization In Mind]]&lt;br /&gt;
:''This tutorial covers what localization is, why it's important and how to ensure your application is ready to be localized. A must read for all application developers.''&lt;br /&gt;
&lt;br /&gt;
; [[/Localization/i18n Mistakes|Avoiding Common Localization Pitfalls]]&lt;br /&gt;
:''There are several common mistakes that prevent applications from being properly localized. Find out what they are and how to easily avoid them in this tutorial.''&lt;br /&gt;
&lt;br /&gt;
; [[/Localization/Building KDE's l10n Module|Building KDE's Localization Module]]&lt;br /&gt;
:''Building and installing language support from KDE's localization (l10n) module is a good idea for those working on applications in the main KDE repository. Doing so will allow you to test your application in another language and spot problem areas. Learn how to do just that in this tutorial.''&lt;br /&gt;
&lt;br /&gt;
; [[/Localization/i18n Build Systems|Incorporating i18n Into the Build System]]&lt;br /&gt;
:''Once your application is ready to be localized, the next step is to ensure that translation files are built automatically and kept up to date. This tutorial covers the necessary CMakeFiles.txt additions as well the process of distributing the resulting message catalogs with your application.''&lt;br /&gt;
&lt;br /&gt;
; [[/Localization/i18n Challenges|Common i18n Challenges and Solutions]]&lt;br /&gt;
:''This tutorial covers challenges that you may eventually run into such as translating handbooks and other data that exists outside of the source code, merging and handling obsolete .po files, dealing with freezes, coding in languages other than English and creating independent releases of or moving applications between KDE modules.''&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
;[[Development/Tutorials/API_Documentation|API Documentation]]&lt;br /&gt;
:''This tutorial explains how to document your APIs properly.''&lt;br /&gt;
&lt;br /&gt;
== Application Automation and Scripting ==&lt;br /&gt;
&lt;br /&gt;
=== D-Bus ===&lt;br /&gt;
; [[/D-Bus/Introduction|Introduction to D-Bus]]&lt;br /&gt;
:''A straight-forward introduction to the core concepts in D-Bus from an application developer's perspective, this tutorial covers what D-Bus is and how it can be used by applications.''&lt;br /&gt;
; [[/D-Bus/Accessing Interfaces|Accessing D-Bus Interfaces]]&lt;br /&gt;
:''A step-by-step guide to calling D-Bus methods and connecting to D-Bus signals using QtDBus.''&lt;br /&gt;
; [[/D-Bus/Intermediate_D-Bus|Intermediate D-Bus]]&lt;br /&gt;
:''Tips to make use of QtDBus when faced with problematic real-world interfaces.''&lt;br /&gt;
; [[/D-Bus/Creating Interfaces|Creating D-Bus Interfaces]]&lt;br /&gt;
:''Learn how to expose functionality in your application by creating and using custom D-Bus interfaces. Covers generating the XML descriptions, instantiating interfaces at run time and setting up the build system with CMake.''&lt;br /&gt;
; [[/D-Bus/Autostart Services|D-Bus Autostart Services]]&lt;br /&gt;
:''Turn your application into a D-Bus autostart service with this tutorial. This D-Bus feature, also known as &amp;quot;D-Bus service activation&amp;quot;, will ensure that even when your application isn't running that D-Bus calls made to it will work by relying on the D-Bus daemon itself to start your app if and when needed.''&lt;br /&gt;
; [[/Porting_to_D-Bus|Porting from DCOP to D-Bus]]&lt;br /&gt;
: ''Port your applications from DCOP to D-Bus with this handy guide.''&lt;br /&gt;
&lt;br /&gt;
=== Konqueror ===&lt;br /&gt;
; [[/Creating Konqueror Service Menus|Creating Konqueror Service Menus]]&lt;br /&gt;
:''This tutorial shows you how to create mimetype-specific actions in Konqueror's context menu (aka &amp;quot;servicemenus&amp;quot;).''&lt;br /&gt;
&lt;br /&gt;
=== Kross ===&lt;br /&gt;
; [[Development/Tutorials/Kross-Tutorial|Kross Tutorial]]&lt;br /&gt;
:''This tutorial explains how to integrate the Kross scripting framework into an application.''&lt;br /&gt;
&lt;br /&gt;
=== KOffice ===&lt;br /&gt;
; [[Development/Tutorials/KOffice Overview]]&lt;br /&gt;
:''This document shows an overview of the different KOffice plugin types and tells you what each of their purpose and strengths are.''  If you are new with KOffice plugins, this is the place to start.&lt;br /&gt;
&lt;br /&gt;
; [[Development/Tutorials/Write a Flake Plugin|Creating KOffice Flake Plugins]]&lt;br /&gt;
:''This tutorial shows you how you can build a plugin for KOffice applications to allow you embed content in ODF documents using Flake.''&lt;br /&gt;
&lt;br /&gt;
; [[Development/Tutorials/KWord Scripting|KWord Scripting]]&lt;br /&gt;
:''This tutorial shows how to script KWord with Python, Ruby or JavaScript using Kross.''&lt;br /&gt;
&lt;br /&gt;
; [[Development/Tutorials/KSpread Scripting|KSpread Scripting]]&lt;br /&gt;
:''This tutorial shows how to script KSpread with Python, Ruby or JavaScript using Kross.''&lt;br /&gt;
&lt;br /&gt;
; [[Development/Tutorials/Krita Scripting|Krita Scripting]]&lt;br /&gt;
:''This tutorial shows how to script Krita with Python, Ruby or JavaScript using Kross.''&lt;br /&gt;
&lt;br /&gt;
=== SuperKaramba ===&lt;br /&gt;
; [[Development/Tutorials/SuperKaramba|SuperKaramba Tutorial]]&lt;br /&gt;
:''This tutorial provides an overview of scripting within SuperKaramba.''&lt;br /&gt;
&lt;br /&gt;
== Search and Metadata ==&lt;br /&gt;
&lt;br /&gt;
=== Strigi ===&lt;br /&gt;
&lt;br /&gt;
; [[/Writing file analyzers|Writing file analyzers]]&lt;br /&gt;
:''File analyzers extract data from files to display in the file dialogs and file managers. The data gathered this way is also used to search for files. KDE4 allows the use of multiple analyzers per file type. This tutorial describes how you can write new analyzers.''&lt;br /&gt;
&lt;br /&gt;
=== Nepomuk-KDE ===&lt;br /&gt;
&lt;br /&gt;
; [[/Metadata/KMetaData first steps|KMetaData first steps]]&lt;br /&gt;
:''KMetaData is the KDE library which provides easy access to metadata in the [http://nepomuk-kde.semanticdesktop.org Nepomuk-KDE] system. Learn how to make your application create and read metadata using the KMetaData system.''&lt;br /&gt;
&lt;br /&gt;
== Hardware Awareness (Solid) ==&lt;br /&gt;
&lt;br /&gt;
;[[/Solid_Tutorials|Introduction to Solid]]&lt;br /&gt;
:''An introduction to using the Solid hardware discovery and interaction system in KDE applications.''&lt;br /&gt;
&lt;br /&gt;
;[[/Solid_Network_Tutorial|Accessing Network Information]]&lt;br /&gt;
:''How to use the Solid system to get information about the network''&lt;br /&gt;
&lt;br /&gt;
== Multimedia (Phonon) ==&lt;br /&gt;
&lt;br /&gt;
;[[/Phonon/Introduction|Phonon]]&lt;br /&gt;
:''How to start with the multimedia API''&lt;br /&gt;
&lt;br /&gt;
==Printing==&lt;br /&gt;
&lt;br /&gt;
;[[/Printing Hello World|Hello World]]&lt;br /&gt;
:''Introduction to the KDE printing system''&lt;br /&gt;
&lt;br /&gt;
;TODO Print Dialog&lt;br /&gt;
:''Using the KDE print dialog''&lt;br /&gt;
&lt;br /&gt;
== Get Hot New Stuff ==&lt;br /&gt;
; [[Development/Tutorials/Introduction to Get Hot New Stuff|Introduction to Get Hot New Stuff]]&lt;br /&gt;
:''An introduction to the developer-friendly network update system that allows KDE applications to fetch new application data at runtime in a user friendly manner.''&lt;br /&gt;
&lt;br /&gt;
;[[Development/Tutorials/KNewStuffSecure|KNewStuff Secure]] ([http://developer.kde.org/documentation/tutorials/knewstuffsecure/index.html Original Link])&lt;br /&gt;
:''Tutorial showing how to share resources in a secured way (KDE 3.4 and later).''  By Andr&amp;amp;#225;s Mantia &amp;amp;lt;amantia@kde.org&amp;amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Rapid Application Development ==&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
;[[Development/Tutorials/Python introduction to signals and slots|101 Introduction to signals and slots]]&lt;br /&gt;
:''A simple introduction to Qt's signal and slot architecture.''&lt;br /&gt;
&lt;br /&gt;
=== Ruby ===&lt;br /&gt;
&lt;br /&gt;
;[http://developer.kde.org/language-bindings/ruby/kde3tutorial/index.html KDE Ruby Korundum tutorial]&lt;br /&gt;
:''A ruby version of Antonio Larrosa Jim&amp;amp;eacute;nez's KDE tutorial by Richard Dale. See the [http://developer.kde.org/language-bindings/ruby/index.html Ruby Developers Corner] for Qt tutorials and other info.''&lt;br /&gt;
&lt;br /&gt;
;[[Development/Tutorials/Qt4_Ruby_Tutorial|Qt4 Ruby Tutorial]]&lt;br /&gt;
:''Trolltech's fabulous introductory tutorial to Qt, translated to Ruby.''&lt;br /&gt;
&lt;br /&gt;
=== Shell ===&lt;br /&gt;
&lt;br /&gt;
;[[Development/Tutorials/Shell_Scripting_with_KDE_Dialogs|Shell Scripting with KDE dialogs]] ([http://developer.kde.org/documentation/tutorials/kdialog/t1.html Original Link]) [[Development/Tutorials/Shell_Scripting_with_KDE_Dialogs_(de)| (German version)]]&lt;br /&gt;
:''Tutorial by [mailto:bradh@frogmouth.net Brad Hards] that describes how to use KDE dialogs in shell scripts with kdialog. It is presented as an example based tutorial.''&lt;br /&gt;
&lt;br /&gt;
== Other tutorials ==&lt;br /&gt;
&lt;br /&gt;
=== 2D Plotting (KPlotWidget) ===&lt;br /&gt;
;[[/KPlotWidget|Using the KDE data-plotting widget]]&lt;br /&gt;
:''This tutorial introduces KPlotWidget, which is used for 2-D data plotting.  It includes information on simple usage of the widget (including adding and modifying data sets, and customizing the plot axes and labels), and advanced customization (including extending the widget through sub-classing).''&lt;br /&gt;
&lt;br /&gt;
=== Spelling and Grammar Checking (Sonnet) ===&lt;br /&gt;
;[[/Sonnet/SonnetTutorial|Adding spell-checking or grammar-checking to KDE applications]]&lt;br /&gt;
:''This tutorial introduces Sonnet and how one may use it to add language correction to your KDE application. Sonnet's auxiliary features shall be described in a separate tutorial.''&lt;br /&gt;
&lt;br /&gt;
== KDE2 and KDE3 Materials ==&lt;br /&gt;
&lt;br /&gt;
;[[Development/Tutorials/KDE3|KDE3 Tutorials]]&lt;br /&gt;
:''These tutorials cover topics related to KDE3.''&lt;br /&gt;
&lt;br /&gt;
;[[Development/Tutorials/KDE2|KDE2 Tutorials]]&lt;br /&gt;
:''These tutorials cover topics related to KDE2.''&lt;br /&gt;
&lt;br /&gt;
[[Category:KDE4]]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Widgets_and_Classes</id>
		<title>Projects/Widgets and Classes</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Widgets_and_Classes"/>
				<updated>2007-04-27T19:22:40Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* KTreeViewHeaderContextMenu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you have a KDE class or widget that you feel would be useful to other applications but which isn't in kdelibs, please add it to this page in alphabetical order. Please include the name of the class, a description (and a screenshot if you wish), where the source code can be found, the version of KDE required (if any), your name and the date of the entry.&lt;br /&gt;
&lt;br /&gt;
== KCurve ==&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| valign=top | '''Description''' || A widget that allows editing of spline based y=f(x) curves. Handy for cases where you want the user to control such things as tablet pressure response, color transformations, acceleration by time, aeroplane lift by angle of attack. Already used in krita, and originally (less generic code) in digiKam&lt;br /&gt;
|-&lt;br /&gt;
| '''Location''' || trunk/koffice/krita/ui/kcurve.*&lt;br /&gt;
|-&lt;br /&gt;
| '''Author''' || Casper Boemann (boemann) and Gilles (of digiKam fame)&lt;br /&gt;
|-&lt;br /&gt;
| '''Date''' || April, 05, 2007&lt;br /&gt;
|-&lt;br /&gt;
| '''Screenshots''' || [http://www.kdedevelopers.org/system/files?file=images//pressuresensitive2.preview.png Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KListView ==&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| valign=top | '''Description''' || An extension to QListView that lets you categorize the items, if the applied model is sorting capable (QSortFilterProxyModel). If no categorizer is set, KListView will behave exactly as a QListView.&lt;br /&gt;
|-&lt;br /&gt;
| '''Location''' || trunk/KDE/kdebase/apps/dolphin/src/klistview[.cpp, .h, _p.h]&lt;br /&gt;
|-&lt;br /&gt;
| '''Author''' || Rafael Fernández López (ereslibre)&lt;br /&gt;
|-&lt;br /&gt;
| '''Date''' || April, 04, 2007&lt;br /&gt;
|-&lt;br /&gt;
| '''Screenshots''' || [http://www.ereslibre.es/wp-content/uploads/2007/04/categorization5.png Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KItemCategorizer ==&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| valign=top | '''Description''' || The interface that lets you categorize items on the KListView class.&lt;br /&gt;
|-&lt;br /&gt;
| '''Location''' || trunk/KDE/kdebase/apps/dolphin/src/kitemcategorizer.h&lt;br /&gt;
|-&lt;br /&gt;
| '''Author''' || Rafael Fernández López (ereslibre)&lt;br /&gt;
|-&lt;br /&gt;
| '''Date''' || April, 04, 2007&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KonqUndoManager ==&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| valign=top | '''Description''' || Undo/redo support for KIO jobs. One problem might be that we're about to add &amp;quot;undo closing a tab&amp;quot; support to it...&lt;br /&gt;
|-&lt;br /&gt;
| '''Location''' || trunk/KDE/kdebase/libkonq/konq_undo.*&lt;br /&gt;
|-&lt;br /&gt;
| '''Author''' || David Faure&lt;br /&gt;
|-&lt;br /&gt;
| '''Date''' || April, 05, 2007&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KoSliderCombo ==&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| valign=top | '''Description''' || A Combobox-like widget that combines numerical input with a popup slider. It uses QStyle to draw itself so it's themed right out of the box.&lt;br /&gt;
|-&lt;br /&gt;
| '''Location''' || trunk/koffice/libs/kofficeui/KoSliderCombo.*&lt;br /&gt;
|-&lt;br /&gt;
| '''Author''' || Casper Boemann (boemann)&lt;br /&gt;
|-&lt;br /&gt;
| '''Date''' || April, 06, 2007&lt;br /&gt;
|-&lt;br /&gt;
| '''Screenshots''' || [http://www.kdedevelopers.org/system/files?file=images//comboslider_0.png Link]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KTreeViewHeaderContextMenu ==&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| valign=top | '''Description''' || A class that takes a QListView and adds a contextmenu to its header. With this contextmenu you can show and hide the columns.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
* specify which columns can be shown/hidden&lt;br /&gt;
&lt;br /&gt;
Style of the contextmenu:&lt;br /&gt;
* Show checkboxes before column names&lt;br /&gt;
* Show checkboxes before column names only if the checkbox is checked&lt;br /&gt;
* Do not show checkboxes. Display the text &amp;quot;Hide&amp;quot;/&amp;quot;Show&amp;quot; before the column names&lt;br /&gt;
|-&lt;br /&gt;
| '''Location''' || trunk/KDE/kdepim/ktimetracker/treeviewheadercontextmenu.*&lt;br /&gt;
|-&lt;br /&gt;
| '''Author''' || Mathias Soeken (msoeken)&lt;br /&gt;
|-&lt;br /&gt;
| '''Date''' || April, 18, 2007&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Schedules/KOffice_2.0_Release_Schedule</id>
		<title>Schedules/KOffice 2.0 Release Schedule</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Schedules/KOffice_2.0_Release_Schedule"/>
				<updated>2007-04-24T14:09:06Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All dates given here are subject to revision, but we will try our best to stick to them if possible.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[mailto:boud@valdyas.org Boudewijn Rempt] is acting as release coordinator for the KOffice 2.0 release.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
KOffice 2.0 will be released independently from KDE, but we will aim to make the alphas coincide with the KDE wide ones.&lt;br /&gt;
&lt;br /&gt;
==KOffice 2.0 Alpha 1==&lt;br /&gt;
===June 25, 2006===&lt;br /&gt;
The first alpha of KOffice 2.0 is released to the public.&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Zander</id>
		<title>User:Zander</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Zander"/>
				<updated>2007-04-16T16:10:37Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Thomas Zander'''&amp;lt;br&amp;gt;&lt;br /&gt;
KOffice developer&amp;lt;br&amp;gt;&lt;br /&gt;
HCI WorkingGroup member.&lt;br /&gt;
&lt;br /&gt;
Jabber: zander (AT) jabber.xs4all DOT nl&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Zander</id>
		<title>User:Zander</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Zander"/>
				<updated>2007-04-16T16:10:01Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: foo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Thomas Zander&lt;br /&gt;
KOffice developer&lt;br /&gt;
HCI WorkingGroup member.&lt;br /&gt;
&lt;br /&gt;
Jabber: zander (AT) jabber.xs4all DOT nl&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Danimo</id>
		<title>User:Danimo</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Danimo"/>
				<updated>2007-04-09T18:39:16Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: Bug report.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Beautify Subpage titles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
sorry for reporting a bug here; but this seems like as good a place as any :)&lt;br /&gt;
When using &amp;lt;nowiki&amp;gt;&amp;lt;code cpp&amp;gt;&amp;lt;/nowiki&amp;gt; tags I noted a bug.  Specifically when you use the colon (or other means) to indent it.  [[User:Zander|Zander]] 20:39, 9 April 2007 (CEST)&lt;br /&gt;
Example code:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code cpp&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;QtCore/QDate&amp;gt;&lt;br /&gt;
#include &amp;lt;zlib.h&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Mkretz</id>
		<title>User:Mkretz</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Mkretz"/>
				<updated>2007-04-09T17:41:29Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* as a library developer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== getting #includes right ==&lt;br /&gt;
&lt;br /&gt;
There are two types of #include statements: &amp;lt;tt&amp;gt;#include &amp;lt;foo.h&amp;gt;&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;#include &amp;quot;foo.h&amp;quot;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Say we have the file &amp;lt;tt&amp;gt;header1.h&amp;lt;/tt&amp;gt; in &amp;lt;tt&amp;gt;/usr/include/mylib/&amp;lt;/tt&amp;gt; that contains the following:&lt;br /&gt;
&amp;lt;code cpp n&amp;gt;&lt;br /&gt;
#include &amp;lt;header2.h&amp;gt;&lt;br /&gt;
#include &amp;quot;header3.h&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The preprocessor will search for the file &amp;lt;tt&amp;gt;header2.h&amp;lt;/tt&amp;gt; in all the paths given as &amp;lt;tt&amp;gt;-I&amp;lt;/tt&amp;gt; arguments and then replace the line with the contents of that file.&lt;br /&gt;
&lt;br /&gt;
For line 2 the preprocessor tries to use the file /usr/include/mylib/header3.h first and if it does not exist search for the file like for &amp;lt;tt&amp;gt;header2.h&amp;lt;/tt&amp;gt;. The important part to note here is that the preprocessor does not look in the directory of the source file that includes &amp;lt;tt&amp;gt;header1.h&amp;lt;/tt&amp;gt; but in the directory where &amp;lt;tt&amp;gt;header1.h&amp;lt;/tt&amp;gt; resides.&lt;br /&gt;
&lt;br /&gt;
Now, which include statement is the one to use? After all you can specify every directory you want using &amp;lt;tt&amp;gt;-I&amp;lt;/tt&amp;gt; and thus could use &amp;lt;tt&amp;gt;#include &amp;lt;...&amp;gt;&amp;lt;/tt&amp;gt; everywhere.&lt;br /&gt;
&lt;br /&gt;
=== as an application developer ===&lt;br /&gt;
* Include headers from external libraries using angle brackets.&lt;br /&gt;
&amp;lt;code cpp&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;QtCore/QDate&amp;gt;&lt;br /&gt;
#include &amp;lt;zlib.h&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Include headers from your own project using double quotes.&lt;br /&gt;
&amp;lt;code cpp&amp;gt;&lt;br /&gt;
#include &amp;quot;myclass.h&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;Using angle brackets works correctly if the first &amp;lt;tt&amp;gt;-I&amp;lt;/tt&amp;gt; switch to the compiler is your own source directory. Ideally you would not need to specify &amp;lt;tt&amp;gt;-I./&amp;lt;/tt&amp;gt; though, as that might break with library headers that have the same filename as a header of your project (i.e.: If a library has the header file &amp;lt;tt&amp;gt;foo.h&amp;lt;/tt&amp;gt; and your project has a different file with the same filename the compiler will always pick the header from your project instead of the one from the library because the source directory of the project is specified first.)&lt;br /&gt;
&lt;br /&gt;
=== as a library developer ===&lt;br /&gt;
* Include headers from '''external''' libraries using '''angle brackets'''.&lt;br /&gt;
&amp;lt;code cpp&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;QtCore/QDate&amp;gt;&lt;br /&gt;
#include &amp;lt;zlib.h&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Include headers of your '''own library''' and libraries that belong to it using '''double quotes'''.&lt;br /&gt;
&amp;lt;code cpp&amp;gt;&lt;br /&gt;
#include &amp;quot;xyz.h&amp;quot; // same library and same directory&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you use subdirectories for the installed header files you need to have the exact same directory structure for the headers in the source directory. Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/include/libfoo/&amp;lt;/tt&amp;gt; contains the directory &amp;lt;tt&amp;gt;bar&amp;lt;/tt&amp;gt;. In &amp;lt;tt&amp;gt;libfoo&amp;lt;/tt&amp;gt; resides the header &amp;lt;tt&amp;gt;header1.h&amp;lt;/tt&amp;gt;, in &amp;lt;tt&amp;gt;libfoo/bar&amp;lt;/tt&amp;gt; the file &amp;lt;tt&amp;gt;header2.h&amp;lt;/tt&amp;gt;. The latter depends on the former so it includes it using&lt;br /&gt;
&amp;lt;code cpp&amp;gt;&lt;br /&gt;
#include &amp;quot;../header1.h&amp;quot;  // BAD IDEA&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
If the source directory structure of the library is not the same (in this case: &amp;lt;tt&amp;gt;header2.h&amp;lt;/tt&amp;gt; in a subdirectory of the directory where &amp;lt;tt&amp;gt;header1.h&amp;lt;/tt&amp;gt; resides) this obviously will break.&lt;br /&gt;
&lt;br /&gt;
It is also possible to use angle brackets in library headers, but that requires the application to supply the exactly correct &amp;lt;tt&amp;gt;-I&amp;lt;/tt&amp;gt; paths (e.g. libfoo above can be used either with &amp;lt;tt&amp;gt;-I/usr/include&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;#include &amp;lt;libfoo/header1.h&amp;gt;&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;-I/usr/include/libfoo&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;#include &amp;lt;header1.h&amp;gt;&amp;lt;/tt&amp;gt;, if libfoo were to use angle brackets to include its own headers one of the include switches has to be present for the lib to find its own headers). Also angle brackets require the application to not put any include directory before the &amp;lt;tt&amp;gt;-I&amp;lt;/tt&amp;gt; switch for the lib that contains header files of the same filename as for the library. An example how angle brackets can break the build:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/include/libxyz/xyz.h&amp;lt;/tt&amp;gt; includes &amp;lt;tt&amp;gt;foo.h&amp;lt;/tt&amp;gt; using angle brackets and expects to have it replaced with the contents of the file &amp;lt;tt&amp;gt;/usr/include/libzyx/foo.h&amp;lt;/tt&amp;gt;. Assuming there's another library that also ships a &amp;lt;tt&amp;gt;foo.h&amp;lt;/tt&amp;gt; file in the directory &amp;lt;tt&amp;gt;/usr/include/anotherlib&amp;lt;/tt&amp;gt;. If the application that uses both libraries compiles with&lt;br /&gt;
&amp;lt;tt&amp;gt;g++ -I/usr/include/libxyz -I/usr/include/anotherlib ...&amp;lt;/tt&amp;gt; libxyz will work as expected (but anotherlib might break). If the application compiles with &amp;lt;tt&amp;gt;g++ -I/usr/include/anotherlib -I/usr/include/libxyz ...&amp;lt;/tt&amp;gt; the header &amp;lt;tt&amp;gt;xyz.h&amp;lt;/tt&amp;gt; will include the file &amp;lt;tt&amp;gt;/usr/include/anotherlib/foo.h&amp;lt;/tt&amp;gt; instead of the file that is shipped with libxyz. The same problem can appear if an application has a header file of the same name as a library and specifies &amp;lt;tt&amp;gt;-I./&amp;lt;/tt&amp;gt; as the first include directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
I suggest replacing 'application' with 'buildsystem' in various places to avoid confusion. Further what is missing here is a small guideline section. Things that people can read and use without having to grok the whole thing.  Thanks! [[User:Zander|Zander]] 19:41, 9 April 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Talk:Development/Tutorials/Unittests</id>
		<title>Talk:Development/Tutorials/Unittests</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Talk:Development/Tutorials/Unittests"/>
				<updated>2007-03-21T21:08:32Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: Did someone try the tutorial?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Source ==&lt;br /&gt;
&lt;br /&gt;
This tutorial has been taken from&lt;br /&gt;
http://developer.kde.org/documentation/tutorials/writingunittests/&lt;br /&gt;
&lt;br /&gt;
This tutorial was originally licensed under the GFDL. It can also&lt;br /&gt;
be used under the terms of the Creative Commons Share-alike license.&lt;br /&gt;
&lt;br /&gt;
==Placement==&lt;br /&gt;
Does this tutorial really belong under &amp;quot;Getting started&amp;quot; on the Tutorial page? It doesn't really seem like a beginner tutorial. At least not something that beginners to KDE4 programming would need to know. Maybe place it under Debugging (though maybe that's a bit stretched :S ) --[[User:Milliams|milliams]] 14:49, 5 January 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Did someone try the tutorial?  I noted that there is an include of tutorial1.moc but we use qmake in that example.  I was under the impression that foo.moc was a cmake standard; qmake doesn't generate that file (its something like moc_foo.h) . You typically don't need to include anything in qmake.  [[User:Zander|Zander]] 22:08, 21 March 2007 (CET)&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Unittests</id>
		<title>Development/Tutorials/Unittests</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Unittests"/>
				<updated>2007-03-21T21:03:08Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: Clearer language.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Author:''' Brad Hards, Sigma Bravo Pty Limited&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
&lt;br /&gt;
This article provides guidance on writing unittests for Qt4 and KDE4, based on the QtTestLib framework provided starting with Qt4.1. It provides an introduction to the ideas behind unit testing, tutorial material on the QtTestLib framework, and suggestions for getting the most value for your effort. &lt;br /&gt;
This document is matched to Qt 4.1 and KDE 4.&lt;br /&gt;
&lt;br /&gt;
== About Unit Testing ==&lt;br /&gt;
&lt;br /&gt;
A unit test is a test that checks the functionality, behaviour and correctness of a single software component. In Qt4 code (including KDE4 code) unit tests are almost always used to test a single C++ class (although testing a macro or C function is also possible).&lt;br /&gt;
&lt;br /&gt;
Unit tests are a key part of Test Driven Development, however they are useful for all software development processes. It is not essential that all of the code is covered by unit tests (although that is obviously very desirable!). Even a single test is a useful step to improving code quality. &lt;br /&gt;
&lt;br /&gt;
Note that unit tests are dynamic tests (i.e. they run, using the compiled code) rather than static analysis tests (which operate on the source or some intermediate representation). &lt;br /&gt;
&lt;br /&gt;
Even if they don't call them &amp;quot;unit tests&amp;quot;, most programmers have written some &amp;quot;throwaway&amp;quot; code that they use to check an implementation. If that code was cleaned up a little, and built into the development system, then it could be used over and over to check that the implementation is still OK. To make that work a little easier, we can use test frameworks. &lt;br /&gt;
&lt;br /&gt;
Note that it is sometimes tempting to treat the unit test as a pure verification tool. While it is true that unit tests do help to ensure correct functionality and behaviour, they also assist with other aspects of code quality. Writing a unit test requires a slightly different approach to coding up a class, and thinking about what inputs need to be tested can help to identify logic flaws in the code (even before the tests get run). In addition, the need to make the code testable is a very useful driver to ensure that classes do not suffer from close coupling. &lt;br /&gt;
&lt;br /&gt;
Anyway, enough of the conceptual stuff - lets talk about a specific tool that can reduce some of the effort and let us get on with the job.&lt;br /&gt;
&lt;br /&gt;
==About QtTestLib==&lt;br /&gt;
&lt;br /&gt;
QtTestlib is a lightweight testing library developed by Trolltech and released under the GPL (a commercial version is also available, for those who need alternative licensing). It is written in C++, and is cross-platform. It is provided as part of the tools included in Qt 4.1, and earlier versions were provided separately. Note that earlier versions had a different API, and the examples will not work with that earlier version. &lt;br /&gt;
&lt;br /&gt;
In addition to normal unit testing capabilities, QtTestLib also offers basic GUI testing, based on sending QEvents. This allows you to test GUI widgets, but is not generally suitable for testing full applications. &lt;br /&gt;
&lt;br /&gt;
Each testcase is a standalone test application. Unlike CppUnit or JUnit, there is no Runner type class. Instead, each testcase is an executable which is simply run.&lt;br /&gt;
&lt;br /&gt;
== Tutorial 1: A simple test of a date class ==&lt;br /&gt;
&lt;br /&gt;
In this tutorial, we will build a simple test for a class that represents a date, using QtTestLib as the test framework. To avoid too much detail on how the date class works, we'll just use the  QDate. class that comes with Qt. In a normal unittest, you would more likely be testing code that you've written yourself.&lt;br /&gt;
&lt;br /&gt;
The code below is the entire testcase.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Example 1. QDate test code'''&lt;br /&gt;
&amp;lt;code cppqt n&amp;gt;&lt;br /&gt;
#include &amp;lt;QtTest&amp;gt;&lt;br /&gt;
#include &amp;lt;QtCore&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class testDate: public QObject&lt;br /&gt;
{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
private slots:&lt;br /&gt;
    void testValidity();&lt;br /&gt;
    void testMonth();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void testDate::testValidity()&lt;br /&gt;
{&lt;br /&gt;
    // 11 March 1967&lt;br /&gt;
    QDate date( 1967, 3, 11 );&lt;br /&gt;
    QVERIFY( date.isValid() );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testDate::testMonth()&lt;br /&gt;
{&lt;br /&gt;
    // 11 March 1967&lt;br /&gt;
    QDate date;&lt;br /&gt;
    date.setYMD( 1967, 3, 11 );&lt;br /&gt;
    QCOMPARE( date.month(), 3 );&lt;br /&gt;
    QCOMPARE( QDate::longMonthName(date.month()),&lt;br /&gt;
              QString(&amp;quot;March&amp;quot;) );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
QTEST_MAIN(testDate)&lt;br /&gt;
#include &amp;quot;tutorial1.moc&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stepping through the code, the first line imports the header files for the QtTest namespace. The second line imports the headers for the QtCore namespace (not strictly necessary, since QtTest also imports it, but it is robust and safe). Lines 4 to 10 give us the test class, testData. Note that testDate inherits from QObject and has the Q_OBJECT macro - QtTestLib requires specific Qt functionality that is present in  QObject. &lt;br /&gt;
&lt;br /&gt;
Lines 12 to 17 provide our first test, which checks that a date is valid. Note the use of the QVERIFY macro, which checks that the condition is true. So if date.isValid() returns true, then the test will pass, otherwise the test will fail. QVERIFY is similar to ASSERT in other test suites.&lt;br /&gt;
&lt;br /&gt;
Similarly, lines 19 to 27 provide another test, which checks a setter, and a couple of accessor routines. In this case, we are using QCOMPARE, which checks that the conditions are equal. So if date.month() returns 3, then that part of that test will pass, otherwise the test will fail. &lt;br /&gt;
&lt;br /&gt;
{{Warning|As soon as a QVERIFY evaluates to false or a QCOMPARE does not have two equal values, the whole test is marked as failed and the next test will be stated. So in the example above, if the check at line 24 fails, then the check at lines 25 and 26 will not be run.}}&lt;br /&gt;
&lt;br /&gt;
In a later tutorial we will see how to work around problems that this behaviour can cause.&lt;br /&gt;
&lt;br /&gt;
Line 30 uses the QTEST_MAIN which creates an entry point routine for us, with appropriate calls to invoke the testDate unit test class. &lt;br /&gt;
&lt;br /&gt;
Line 31 includes the Meta-Object compiler output, so we can make use of our  QObject functionality. &lt;br /&gt;
&lt;br /&gt;
The qmake project file that corresponds to that code is shown below. You would then use qmake to turn this into a Makefile and then compile it with make.&lt;br /&gt;
&lt;br /&gt;
'''Example 2. QDate unit test project'''&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
CONFIG += qtestlib&lt;br /&gt;
TEMPLATE = app&lt;br /&gt;
TARGET += &lt;br /&gt;
DEPENDPATH += .&lt;br /&gt;
INCLUDEPATH += .&lt;br /&gt;
&lt;br /&gt;
# Input&lt;br /&gt;
SOURCES += tutorial1.cpp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a fairly normal project file, except for the addition of the &amp;lt;code&amp;gt;CONFIG += qtestlib&amp;lt;/code&amp;gt;. This adds the right header and library setup to the Makefile. &lt;br /&gt;
&lt;br /&gt;
This will produce an application that can then be run on the command line. The output looks like the following:&lt;br /&gt;
&lt;br /&gt;
'''Example 3. QDate unit test output'''&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$ ./tutorial1&lt;br /&gt;
********* Start testing of testDate *********&lt;br /&gt;
Config: Using QTest library 4.1.0, Qt 4.1.0-snapshot-20051003&lt;br /&gt;
PASS   : testDate::initTestCase()&lt;br /&gt;
PASS   : testDate::testValidity()&lt;br /&gt;
PASS   : testDate::testMonth()&lt;br /&gt;
PASS   : testDate::cleanupTestCase()&lt;br /&gt;
Totals: 4 passed, 0 failed, 0 skipped&lt;br /&gt;
********* Finished testing of testDate *********&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Looking at the output above, you can see that the output includes the version of the test library and Qt itself, and then the status of each test that is run. In addition to the testValidity and testMonth tests that we defined, there is also a setup routine (initTestCase) and a teardown routine (cleanupTestCase) that can be used to do additional configuration if required.&lt;br /&gt;
&lt;br /&gt;
===Failing tests===&lt;br /&gt;
&lt;br /&gt;
If we had made an error in either the production code or the unit test code, then the results would show an error. An example is shown below:&lt;br /&gt;
&lt;br /&gt;
'''Example 4. QDate unit test output showing failure'''&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$ ./tutorial1&lt;br /&gt;
********* Start testing of testDate *********&lt;br /&gt;
Config: Using QTest library 4.1.0, Qt 4.1.0-snapshot-20051003&lt;br /&gt;
PASS   : testDate::initTestCase()&lt;br /&gt;
PASS   : testDate::testValidity()&lt;br /&gt;
FAIL!  : testDate::testMonth() Compared values are not the same&lt;br /&gt;
   Actual (date.month()): 4&lt;br /&gt;
   Expected (3): 3&lt;br /&gt;
    Loc: [tutorial1.cpp(25)]&lt;br /&gt;
PASS   : testDate::cleanupTestCase()&lt;br /&gt;
Totals: 3 passed, 1 failed, 0 skipped&lt;br /&gt;
********* Finished testing of testDate *********&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running selected tests===&lt;br /&gt;
&lt;br /&gt;
When the number of test functions increases, and some of the functions take a long time to run, it can be useful to only run a selected function. For example, if you only want to run the testMonth function, then you just specify that on the command line, as shown below:&lt;br /&gt;
&lt;br /&gt;
'''Example 5. QDate unit test output - selected function'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$ ./tutorial1 testValidity&lt;br /&gt;
********* Start testing of testDate *********&lt;br /&gt;
Config: Using QTest library 4.1.0, Qt 4.1.0-snapshot-20051003&lt;br /&gt;
PASS   : testDate::initTestCase()&lt;br /&gt;
PASS   : testDate::testValidity()&lt;br /&gt;
PASS   : testDate::cleanupTestCase()&lt;br /&gt;
Totals: 3 passed, 0 failed, 0 skipped&lt;br /&gt;
********* Finished testing of testDate *********        &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the initTestCase and cleanupTestCase routines are always run, so that any necessary setup and cleanup will still be done. &lt;br /&gt;
&lt;br /&gt;
You can get a list of the available functions by passing the -functions option, as shown below: &lt;br /&gt;
&lt;br /&gt;
'''Example 6. QDate unit test output - listing functions'''&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$ ./tutorial1 -functions&lt;br /&gt;
testValidity()&lt;br /&gt;
testMonth()&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Verbose output options===&lt;br /&gt;
&lt;br /&gt;
You can get more verbose output by using the -v1, -v2 and -vs options. -v1 produces a message on entering each test function. I found this is useful when it looks like a test is hanging. This is shown below:&lt;br /&gt;
&lt;br /&gt;
'''Example 7. QDate unit test output - verbose output'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$ ./tutorial1 -v1&lt;br /&gt;
********* Start testing of testDate *********&lt;br /&gt;
Config: Using QTest library 4.1.0, Qt 4.1.0-snapshot-20051003&lt;br /&gt;
INFO   : testDate::initTestCase() entering&lt;br /&gt;
PASS   : testDate::initTestCase()&lt;br /&gt;
INFO   : testDate::testValidity() entering&lt;br /&gt;
PASS   : testDate::testValidity()&lt;br /&gt;
INFO   : testDate::testMonth() entering&lt;br /&gt;
PASS   : testDate::testMonth()&lt;br /&gt;
INFO   : testDate::cleanupTestCase() entering&lt;br /&gt;
PASS   : testDate::cleanupTestCase()&lt;br /&gt;
Totals: 4 passed, 0 failed, 0 skipped&lt;br /&gt;
********* Finished testing of testDate *********&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The -v2 option shows each QVERIFY, QCOMPARE and QTEST, as well as the message on entering each test function. I found this useful for verifying that a particular step is being run. This is shown below: &lt;br /&gt;
&lt;br /&gt;
''''Example 8. QDate unit test output - more verbose output'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$ ./tutorial1 -v2&lt;br /&gt;
********* Start testing of testDate *********&lt;br /&gt;
Config: Using QTest library 4.1.0, Qt 4.1.0-snapshot-20051003&lt;br /&gt;
INFO   : testDate::initTestCase() entering&lt;br /&gt;
PASS   : testDate::initTestCase()&lt;br /&gt;
INFO   : testDate::testValidity() entering&lt;br /&gt;
INFO   : testDate::testValidity() QVERIFY(date.isValid())&lt;br /&gt;
    Loc: [tutorial1.cpp(17)]&lt;br /&gt;
PASS   : testDate::testValidity()&lt;br /&gt;
INFO   : testDate::testMonth() entering&lt;br /&gt;
INFO   : testDate::testMonth() COMPARE()&lt;br /&gt;
    Loc: [tutorial1.cpp(25)]&lt;br /&gt;
INFO   : testDate::testMonth() COMPARE()&lt;br /&gt;
    Loc: [tutorial1.cpp(27)]&lt;br /&gt;
PASS   : testDate::testMonth()&lt;br /&gt;
INFO   : testDate::cleanupTestCase() entering&lt;br /&gt;
PASS   : testDate::cleanupTestCase()&lt;br /&gt;
Totals: 4 passed, 0 failed, 0 skipped&lt;br /&gt;
********* Finished testing of testDate *********        &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The -vs option shows each signal that is emitted. In our example, there are no signals, so -vs has no effect. Getting a list of signals is useful for debugging failing tests, especially GUI tests which we will see in the third tutorial. &lt;br /&gt;
&lt;br /&gt;
===Output to a file===&lt;br /&gt;
&lt;br /&gt;
If you want to output the results of your testing to a file, you can use the -o filename, where you replace filename with the name of the file you want to save output to.&lt;br /&gt;
&lt;br /&gt;
==Tutorial 2: Data driven testing of a date class==&lt;br /&gt;
&lt;br /&gt;
In the previous example, we looked at how we can test a date class. If we decided that we really needed to test a lot more dates, then we'd be cutting and pasting a lot of code. If we subsequently changed the name of a function, then it has to be changed in a lot of places. As an alternative to introducing these types of maintenance problems into our tests, QtTestLib offers support for data driven testing. &lt;br /&gt;
&lt;br /&gt;
The easiest way to understand data driven testing is by an example, as shown below:&lt;br /&gt;
&lt;br /&gt;
'''Example 9. QDate test code, data driven version'''&lt;br /&gt;
&amp;lt;code cppqt n&amp;gt;&lt;br /&gt;
#include &amp;lt;QtTest&amp;gt;&lt;br /&gt;
#include &amp;lt;QtCore&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class testDate: public QObject&lt;br /&gt;
{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
private slots:&lt;br /&gt;
    void testValidity();&lt;br /&gt;
    void testMonth_data();&lt;br /&gt;
    void testMonth();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void testDate::testValidity()&lt;br /&gt;
{&lt;br /&gt;
    // 12 March 1967&lt;br /&gt;
    QDate date( 1967, 3, 12 );&lt;br /&gt;
    QVERIFY( date.isValid() );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testDate::testMonth_data()&lt;br /&gt;
{&lt;br /&gt;
    QTest::addColumn&amp;lt;int&amp;gt;(&amp;quot;year&amp;quot;);  // the year we are testing&lt;br /&gt;
    QTest::addColumn&amp;lt;int&amp;gt;(&amp;quot;month&amp;quot;); // the month we are testing&lt;br /&gt;
    QTest::addColumn&amp;lt;int&amp;gt;(&amp;quot;day&amp;quot;);   // the day we are testing&lt;br /&gt;
    QTest::addColumn&amp;lt;QString&amp;gt;(&amp;quot;monthName&amp;quot;);   // the name of the month&lt;br /&gt;
&lt;br /&gt;
    QTest::newRow(&amp;quot;1967/3/11&amp;quot;) &amp;lt;&amp;lt; 1967 &amp;lt;&amp;lt; 3 &amp;lt;&amp;lt; 11 &amp;lt;&amp;lt; QString(&amp;quot;March&amp;quot;);&lt;br /&gt;
    QTest::newRow(&amp;quot;1966/1/10&amp;quot;) &amp;lt;&amp;lt; 1966 &amp;lt;&amp;lt; 1 &amp;lt;&amp;lt; 10 &amp;lt;&amp;lt; QString(&amp;quot;January&amp;quot;);&lt;br /&gt;
    QTest::newRow(&amp;quot;1999/9/19&amp;quot;) &amp;lt;&amp;lt; 1999 &amp;lt;&amp;lt; 9 &amp;lt;&amp;lt; 19 &amp;lt;&amp;lt; QString(&amp;quot;September&amp;quot;);&lt;br /&gt;
    // more rows of dates can go in here...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testDate::testMonth()&lt;br /&gt;
{&lt;br /&gt;
    QFETCH(int, year);&lt;br /&gt;
    QFETCH(int, month);&lt;br /&gt;
    QFETCH(int, day);&lt;br /&gt;
    QFETCH(QString, monthName);&lt;br /&gt;
&lt;br /&gt;
    QDate date;&lt;br /&gt;
    date.setYMD( year, month, day);&lt;br /&gt;
    QCOMPARE( date.month(), month );&lt;br /&gt;
    QCOMPARE( QDate::longMonthName(date.month()), monthName );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
QTEST_MAIN(testDate)&lt;br /&gt;
#include &amp;quot;tutorial2.moc&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see, we've introduced a new method - testMonth_data, and moved the specific test date out of testMonth. We've had to add some more code (which will be explained soon), but the result is a separation of the data we are testing, and the code we are using to test it. &lt;br /&gt;
The names of the functions are important - you must use the _data suffix for the data setup routine, and the first part of the data setup routine must match the name of the driver routine. &lt;br /&gt;
&lt;br /&gt;
It is useful to visualise the data as being a table, where the columns are the various data values required for a single run through the driver, and the rows are different runs. In our example, there are four columns (three integers, one for each part of the date; and one  QString ), added in lines 19 through 22. The addColumn template obviously requires the type of variable to be added, and also requires a variable name argument. We then add as many rows as required using the newRow function, as shown in lines 23 through 26. The string argument to newRow is a label, which is handy for determining what is going on with failing tests, but doesn't have any effect on the test itself. &lt;br /&gt;
&lt;br /&gt;
To use the data, we simply use QFETCH to obtain the appropriate data from each row. The arguments to QFETCH are the type of the variable to fetch, and the name of the column (which is also the local name of the variable it gets fetched into). You can then use this data in a QCOMPARE or QVERIFY check. The code is run for each row, which you can see below:&lt;br /&gt;
&lt;br /&gt;
'''Example 10. Results of data driven testing, showing QFETCH'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$ ./tutorial2 -v2&lt;br /&gt;
********* Start testing of testDate *********&lt;br /&gt;
Config: Using QTest library 4.1.0, Qt 4.1.0-snapshot-20051020&lt;br /&gt;
INFO   : testDate::initTestCase() entering&lt;br /&gt;
PASS   : testDate::initTestCase()&lt;br /&gt;
INFO   : testDate::testValidity() entering&lt;br /&gt;
INFO   : testDate::testValidity() QVERIFY(date.isValid())&lt;br /&gt;
   Loc: [tutorial2.cpp(19)]&lt;br /&gt;
PASS   : testDate::testValidity()&lt;br /&gt;
INFO   : testDate::testMonth() entering&lt;br /&gt;
INFO   : testDate::testMonth(1967/3/11) COMPARE()&lt;br /&gt;
   Loc: [tutorial2.cpp(44)]&lt;br /&gt;
INFO   : testDate::testMonth(1967/3/11) COMPARE()&lt;br /&gt;
   Loc: [tutorial2.cpp(45)]&lt;br /&gt;
INFO   : testDate::testMonth(1966/1/10) COMPARE()&lt;br /&gt;
   Loc: [tutorial2.cpp(44)]&lt;br /&gt;
INFO   : testDate::testMonth(1966/1/10) COMPARE()&lt;br /&gt;
   Loc: [tutorial2.cpp(45)]&lt;br /&gt;
INFO   : testDate::testMonth(1999/9/19) COMPARE()&lt;br /&gt;
   Loc: [tutorial2.cpp(44)]&lt;br /&gt;
INFO   : testDate::testMonth(1999/9/19) COMPARE()&lt;br /&gt;
   Loc: [tutorial2.cpp(45)]&lt;br /&gt;
PASS   : testDate::testMonth()&lt;br /&gt;
INFO   : testDate::cleanupTestCase() entering&lt;br /&gt;
PASS   : testDate::cleanupTestCase()&lt;br /&gt;
Totals: 4 passed, 0 failed, 0 skipped&lt;br /&gt;
********* Finished testing of testDate *********&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The QTEST macro ===&lt;br /&gt;
&lt;br /&gt;
As an alternative to using QFETCH and QCOMPARE, you may be able to use the QTEST macro instead. QTEST takes two arguments, and if one is a string, it looks up that string as an argument in the current row. You can see how this can be used below, which is equivalent to the testMonth() code in the previous example. &lt;br /&gt;
&lt;br /&gt;
'''Example 11. QDate test code, data driven version using QTEST'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code cppqt n&amp;gt;&lt;br /&gt;
void testDate::testMonth()&lt;br /&gt;
{&lt;br /&gt;
    QFETCH(int, year);&lt;br /&gt;
    QFETCH(int, month);&lt;br /&gt;
    QFETCH(int, day);&lt;br /&gt;
&lt;br /&gt;
    QDate date;&lt;br /&gt;
    date.setYMD( year, month, day);&lt;br /&gt;
    QCOMPARE( date.month(), month );&lt;br /&gt;
    QTEST( QDate::longMonthName(date.month()), &amp;quot;monthName&amp;quot; );&lt;br /&gt;
}      &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the example above, note that monthname is enclosed in quotes, and we no longer have a QFETCH call for monthname. &lt;br /&gt;
&lt;br /&gt;
The other QCOMPARE could also have been converted to use QTEST, however this would be less efficient, because we already needed to use QFETCH to get month for the setYMD in the line above. &lt;br /&gt;
&lt;br /&gt;
===Running selected tests with selected data===&lt;br /&gt;
&lt;br /&gt;
In the previous tutorial, we saw how to run a specific test by specifying the name of the test as a command line argument. In data driven testing, you can select which data you want the test run with, by adding a colon and the label for the data row. For example, if we just want to run the testMonth test for the first row, we would use &amp;lt;pre&amp;gt;./tutorial2 -v2 testMonth:1967/3/11&amp;lt;/pre&amp;gt;. The result of this is shown below.&lt;br /&gt;
&lt;br /&gt;
'''Example 12. QDate unit test output - selected function and data'''&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$ ./tutorial2 -v2 testMonth:1967/3/11&lt;br /&gt;
********* Start testing of testDate *********&lt;br /&gt;
Config: Using QTest library 4.1.0, Qt 4.1.0-snapshot-20051020&lt;br /&gt;
INFO   : testDate::initTestCase() entering&lt;br /&gt;
PASS   : testDate::initTestCase()&lt;br /&gt;
INFO   : testDate::testMonth() entering&lt;br /&gt;
INFO   : testDate::testMonth(1967/3/11) COMPARE()&lt;br /&gt;
   Loc: [tutorial2.cpp(44)]&lt;br /&gt;
INFO   : testDate::testMonth(1967/3/11) COMPARE()&lt;br /&gt;
   Loc: [tutorial2.cpp(45)]&lt;br /&gt;
PASS   : testDate::testMonth()&lt;br /&gt;
INFO   : testDate::cleanupTestCase() entering&lt;br /&gt;
PASS   : testDate::cleanupTestCase()&lt;br /&gt;
Totals: 3 passed, 0 failed, 0 skipped&lt;br /&gt;
********* Finished testing of testDate *********&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tutorial 3: Testing Graphical User Interfaces==&lt;br /&gt;
&lt;br /&gt;
In the previous two tutorials, we've tested a date management class. This is an pretty typical use of unit testing. However Qt and KDE applications will make use graphical classes that take user input (typically from a keyboard and mouse). QtTestLib offers support for testing these classes, which we'll see in this tutorial. &lt;br /&gt;
&lt;br /&gt;
Again, we'll use an existing class as our test environment, and again it will be date related - the standard Qt {{qt|QDateEdit}} class. For those not familiar with this class, it is a simple date entry widget (although with some powerful back end capabilities). A picture of the widget is shown below. &lt;br /&gt;
&lt;br /&gt;
[[Image:Qdateedit_dlg.png|thumb|'''Figure 1. QDateEdit widget screenshot''']]&lt;br /&gt;
&lt;br /&gt;
The way QtTestLib provides GUI testing is by injecting {{qt|QInputEvent}} events. To the application, these input events appear the same as normal key press/release and mouse clicks/drags. However the mouse and keyboard are unaffected, so that you can continue to use the machine normally while tests are being run. &lt;br /&gt;
&lt;br /&gt;
An example of how you can use the GUI functionality of QtTestLib is shown below.&lt;br /&gt;
&lt;br /&gt;
'''Example 13. QDateEdit test code'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code cppqt n&amp;gt;&lt;br /&gt;
#include &amp;lt;QtTest&amp;gt;&lt;br /&gt;
#include &amp;lt;QtCore&amp;gt;&lt;br /&gt;
#include &amp;lt;QtGui&amp;gt;&lt;br /&gt;
Q_DECLARE_METATYPE(QDate)&lt;br /&gt;
&lt;br /&gt;
class testDateEdit: public QObject&lt;br /&gt;
{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
private slots:&lt;br /&gt;
    void testChanges();&lt;br /&gt;
    void testValidator_data();&lt;br /&gt;
    void testValidator();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void testDateEdit::testChanges()&lt;br /&gt;
{&lt;br /&gt;
    // 11 March 1967&lt;br /&gt;
    QDate date( 1967, 3, 11 );&lt;br /&gt;
    QDateEdit dateEdit( date );&lt;br /&gt;
&lt;br /&gt;
    // up-arrow should increase day by one&lt;br /&gt;
    QTest::keyClick( &amp;amp;dateEdit, Qt::Key_Up );&lt;br /&gt;
    QCOMPARE( dateEdit.date(), date.addDays(1) );&lt;br /&gt;
&lt;br /&gt;
    // we click twice on the &amp;quot;reduce&amp;quot; arrow at the bottom RH corner&lt;br /&gt;
    // first we need the widget size to know where to click&lt;br /&gt;
    QSize editWidgetSize = dateEdit.size();&lt;br /&gt;
    QPoint clickPoint(editWidgetSize.rwidth()-2, editWidgetSize.rheight()-2);&lt;br /&gt;
    // issue two clicks&lt;br /&gt;
    QTest::mouseClick( &amp;amp;dateEdit, Qt::LeftButton, 0, clickPoint);&lt;br /&gt;
    QTest::mouseClick( &amp;amp;dateEdit, Qt::LeftButton, 0, clickPoint);&lt;br /&gt;
    // and we should have decreased day by two (one less than original)&lt;br /&gt;
    QCOMPARE( dateEdit.date(), date.addDays(-1) );&lt;br /&gt;
&lt;br /&gt;
    QTest::keyClicks( &amp;amp;dateEdit, &amp;quot;25122005&amp;quot; );&lt;br /&gt;
    QCOMPARE( dateEdit.date(), QDate( 2005, 12, 25 ) );&lt;br /&gt;
&lt;br /&gt;
    QTest::keyClick( &amp;amp;dateEdit, Qt::Key_Tab, Qt::ShiftModifier );&lt;br /&gt;
    QTest::keyClicks( &amp;amp;dateEdit, &amp;quot;08&amp;quot; );&lt;br /&gt;
    QCOMPARE( dateEdit.date(), QDate( 2005, 8, 25 ) );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testDateEdit::testValidator_data()&lt;br /&gt;
{&lt;br /&gt;
    qRegisterMetaType&amp;lt;QDate&amp;gt;(&amp;quot;QDate&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    QTest::addColumn&amp;lt;QDate&amp;gt;( &amp;quot;initialDate&amp;quot; );&lt;br /&gt;
    QTest::addColumn&amp;lt;QString&amp;gt;( &amp;quot;keyclicks&amp;quot; );&lt;br /&gt;
    QTest::addColumn&amp;lt;QDate&amp;gt;( &amp;quot;finalDate&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
    QTest::newRow( &amp;quot;1968/4/12&amp;quot; ) &amp;lt;&amp;lt; QDate( 1967, 3, 11 )&lt;br /&gt;
                                 &amp;lt;&amp;lt; QString( &amp;quot;12041968&amp;quot; )&lt;br /&gt;
                                 &amp;lt;&amp;lt; QDate( 1968, 4, 12 );&lt;br /&gt;
&lt;br /&gt;
    QTest::newRow( &amp;quot;1967/3/14&amp;quot; ) &amp;lt;&amp;lt; QDate( 1967, 3, 11 )&lt;br /&gt;
                                 &amp;lt;&amp;lt; QString( &amp;quot;140abcdef[&amp;quot; )&lt;br /&gt;
                                 &amp;lt;&amp;lt; QDate( 1967, 3, 14 );&lt;br /&gt;
    // more rows can go in here&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testDateEdit::testValidator()&lt;br /&gt;
{&lt;br /&gt;
    QFETCH( QDate, initialDate );&lt;br /&gt;
    QFETCH( QString, keyclicks );&lt;br /&gt;
    QFETCH( QDate, finalDate );&lt;br /&gt;
&lt;br /&gt;
    QDateEdit dateEdit( initialDate );&lt;br /&gt;
    // this next line is just to start editing&lt;br /&gt;
    QTest::keyClick( &amp;amp;dateEdit, Qt::Key_Enter );&lt;br /&gt;
    QTest::keyClicks( &amp;amp;dateEdit, keyclicks );&lt;br /&gt;
    QCOMPARE( dateEdit.date(), finalDate );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
QTEST_MAIN(testDateEdit)&lt;br /&gt;
#include &amp;quot;tutorial3.moc&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Much of this code is common with previous examples, so I'll focus on the new elements and the more important changes as we work through the code line-by-line. &lt;br /&gt;
&lt;br /&gt;
Lines 1 to 3 import the various Qt declarations, as before. &lt;br /&gt;
&lt;br /&gt;
Line 4 is a macro that is required for the data-driven part of this test, which I'll come to soon. &lt;br /&gt;
&lt;br /&gt;
Lines 5 to 12 declare the test class - while the names have changed, it is pretty similar to the previous example. Note the testValidator and testValidator_data functions - we will be using data driven testing again in this example. &lt;br /&gt;
&lt;br /&gt;
Our first real test starts in line 13. Line 16 creates a QDate, and line 17 uses that date as the initial value for a QDateEdit widget. &lt;br /&gt;
&lt;br /&gt;
Lines 19 and 20 show how we can test what happens when we press the up-arrow key. The QTest::keyClick function takes a pointer to a widget, and a symbolic key name (a char or a Qt::Key). At line 20, we check that the effect of that event was to increment the date by a day. The QTest:keyClick function also takes an optional keyboard modifier (such as Qt::ShiftModifier for the shift key) and an optional delay value (in milliseconds). As an alternative to using QTest::keyClick, you can use QTest::keyPress and QTest::keyRelease to construct more complex keyboard sequences. &lt;br /&gt;
&lt;br /&gt;
Lines 23 to 29 show a similar test to the previous one, but in this case we are simulating a mouse click. We need to click in the lower right hand part of the widget (to hit the decrement arrow - see Figure 1), and that requires knowing how large the widget is. So lines 23 and 24 calculate the correct point based off the size of the widget. Line 26 (and the identical line 27) simulates clicking with the left-hand mouse button at the calculated point. The arguments to Qt::mouseClick are:&lt;br /&gt;
&lt;br /&gt;
*a pointer to the widget that the click event should be sent to.&lt;br /&gt;
*the mouse button that is being clicked.&lt;br /&gt;
*an optional keyboard modifier (such a Qt::ShiftModifier), or 0 for no modifiers.&lt;br /&gt;
*an optional click point - this defaults to the middle of the widget if not specified.&lt;br /&gt;
*an optional mouse delay.&lt;br /&gt;
&lt;br /&gt;
In addition to QTest::mouseClick, there is also QTest::mousePress, QTest::mouseRelease, QTest::mouseDClick (providing double-click) and QTest::mouseMove. The first three are used in the same way as QTest::mouseClick. The last takes a point to move the mouse to. You can use these functions in combination to simulate dragging with the mouse. &lt;br /&gt;
&lt;br /&gt;
Lines 30 and 31 show another approach to keyboard entry, using the QTest::keyClicks. Where QTest::keyClick sends a single key press, QTest::keyClicks takes a QString (or something equivalent, in line 30 a character array) that represents a sequence of key clicks to send. The other arguments are the same. &lt;br /&gt;
&lt;br /&gt;
Lines 32 to 34 show how you may need to use a combination of functions. After we've entered a new date in line 30, the cursor is at the end of the widget. At line 32, we use a Shift-Tab combination to move the cursor back to the month value. Then at line 33 we enter a new month value. Of course we could have used individual calls to QTest::keyClick, however that wouldn't have been as clear, and would also have required more code.&lt;br /&gt;
&lt;br /&gt;
=== Data-driven GUI testing ===&lt;br /&gt;
&lt;br /&gt;
Lines 50 to 60 show a data-driven test - in this case we are checking that the validator on QDateEdit is performing as expected. This is a case where data-driven testing can really help to ensure that things are working the way they should. &lt;br /&gt;
&lt;br /&gt;
At lines 52 to 54, we fetch in an initial value, a series of key-clicks, and an expected result. These are the columns that are set up in lines 39 to 41. However note that we are now pulling in a QDate, where in previous examples we used three integers and then build the QDate from those. However QDate isn't a registered type for {{qt|QMetaType}, and so we need to register it before we can use it in our data-driven testing. This is done using the Q_DECLARE_METATYPE macro in line 4 and the qRegisterMetaType function in line 38. &lt;br /&gt;
&lt;br /&gt;
Lines 42 to 47 add in a couple of sample rows. Lines 42 to 44 represent a case where the input is valid, and lines 45 to 47 are a case where the input is only partly valid (the day part). A real test will obviously contain far more combinations than this. &lt;br /&gt;
&lt;br /&gt;
Those test rows are actually tested in lines 55 to 59. We construct the QDateEdit widget in line 55, using the initial value. We then send an Enter key click in line 57, which is required to get the widget into edit mode. At line 58 we simulate the data entry, and at line 59 we check whether the results are what was expected. &lt;br /&gt;
&lt;br /&gt;
Lines 61 and 62 are the same as we've seen in previous examples.&lt;br /&gt;
&lt;br /&gt;
=== Re-using test elements ===&lt;br /&gt;
&lt;br /&gt;
If you are re-using a set of events a number of times, then it may be an advantage to build a list of events, and then just replay them. This can improve maintainability and clarity of a set of tests, especially for mouse movements. &lt;br /&gt;
&lt;br /&gt;
The key class for building a list of test events is imaginatively known as QTestEventList. It is a QList of QTestEvents. The normal approach is to create the list, and then use various member functions to add key and mouse events. The normal functions that you'll need are addKeyClick and addMouseClick, which are very similar to the QTest::keyClick and QTest::mouseClick functions we used earlier in this tutorial. For finer grained operations, you can also use addKeyPress, addKeyRelease, addKeyEvent, addMousePress, addMouseRelease, addMouseDClick and addMouseMove to build up more complex event lists. You can also use addDelay to add a specified delay between events. When the list has been built up, you just call simulate on each widget. &lt;br /&gt;
&lt;br /&gt;
You can see how this works in the example below, which is the QDateEdit example (from above) converted to use QTestEventList.&lt;br /&gt;
&lt;br /&gt;
'''Example 14. QDateEdit test code, using QTestEventList'''&lt;br /&gt;
&amp;lt;code cppqt n&amp;gt;       &lt;br /&gt;
#include &amp;lt;QtTest&amp;gt;&lt;br /&gt;
#include &amp;lt;QtCore&amp;gt;&lt;br /&gt;
#include &amp;lt;QtGui&amp;gt;&lt;br /&gt;
Q_DECLARE_METATYPE(QDate)&lt;br /&gt;
&lt;br /&gt;
class testDateEdit: public QObject&lt;br /&gt;
{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
private slots:&lt;br /&gt;
    void testChanges();&lt;br /&gt;
    void testValidator_data();&lt;br /&gt;
    void testValidator();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void testDateEdit::testChanges()&lt;br /&gt;
{&lt;br /&gt;
    // 11 March 1967&lt;br /&gt;
    QDate date( 1967, 3, 11 );&lt;br /&gt;
    QDateEdit dateEdit( date );&lt;br /&gt;
&lt;br /&gt;
    // up-arrow should increase day by one&lt;br /&gt;
    QTest::keyClick( &amp;amp;dateEdit, Qt::Key_Up );&lt;br /&gt;
    QCOMPARE( dateEdit.date(), date.addDays(1) );&lt;br /&gt;
&lt;br /&gt;
    // we click twice on the &amp;quot;reduce&amp;quot; arrow at the bottom RH corner&lt;br /&gt;
    // first we need the widget size to know where to click&lt;br /&gt;
    QSize editWidgetSize = dateEdit.size();&lt;br /&gt;
    QPoint clickPoint(editWidgetSize.rwidth()-2, editWidgetSize.rheight()-2);&lt;br /&gt;
    // build a list that contains two clicks&lt;br /&gt;
    QTestEventList list1;&lt;br /&gt;
    list1.addMouseClick( Qt::LeftButton, 0, clickPoint);&lt;br /&gt;
    list1.addMouseClick( Qt::LeftButton, 0, clickPoint);&lt;br /&gt;
    // call that list on the widget&lt;br /&gt;
    list1.simulate( &amp;amp;dateEdit );&lt;br /&gt;
    // and we should have decreased day by two (one less than original)&lt;br /&gt;
    QCOMPARE( dateEdit.date(), date.addDays(-1) );&lt;br /&gt;
&lt;br /&gt;
    QTest::keyClicks( &amp;amp;dateEdit, &amp;quot;25122005&amp;quot; );&lt;br /&gt;
    QCOMPARE( dateEdit.date(), QDate( 2005, 12, 25 ) );&lt;br /&gt;
&lt;br /&gt;
    QTestEventList list2;&lt;br /&gt;
    list2.addKeyClick( Qt::Key_Tab, Qt::ShiftModifier );&lt;br /&gt;
    list2.addKeyClicks( &amp;quot;08&amp;quot; );&lt;br /&gt;
    list2.simulate( &amp;amp;dateEdit );&lt;br /&gt;
    QCOMPARE( dateEdit.date(), QDate( 2005, 8, 25 ) );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testDateEdit::testValidator_data()&lt;br /&gt;
{&lt;br /&gt;
    qRegisterMetaType&amp;lt;QDate&amp;gt;(&amp;quot;QDate&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    QTest::addColumn&amp;lt;QDate&amp;gt;( &amp;quot;initialDate&amp;quot; );&lt;br /&gt;
    QTest::addColumn&amp;lt;QTestEventList&amp;gt;( &amp;quot;events&amp;quot; );&lt;br /&gt;
    QTest::addColumn&amp;lt;QDate&amp;gt;( &amp;quot;finalDate&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
    QTestEventList eventsList1;&lt;br /&gt;
    // this next line is just to start editing&lt;br /&gt;
    eventsList1.addKeyClick( Qt::Key_Enter );&lt;br /&gt;
    eventsList1.addKeyClicks( &amp;quot;12041968&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
    QTest::newRow( &amp;quot;1968/4/12&amp;quot; ) &amp;lt;&amp;lt; QDate( 1967, 3, 11 )&lt;br /&gt;
                                 &amp;lt;&amp;lt; eventsList1&lt;br /&gt;
                                 &amp;lt;&amp;lt; QDate( 1968, 4, 12 );&lt;br /&gt;
&lt;br /&gt;
    QTestEventList eventsList2;&lt;br /&gt;
    eventsList2.addKeyClick( Qt::Key_Enter );&lt;br /&gt;
    eventsList2.addKeyClicks( &amp;quot;140abcdef[&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
    QTest::newRow( &amp;quot;1967/3/14&amp;quot; ) &amp;lt;&amp;lt; QDate( 1967, 3, 11 )&lt;br /&gt;
                                 &amp;lt;&amp;lt; eventsList2&lt;br /&gt;
                                 &amp;lt;&amp;lt; QDate( 1967, 3, 14 );&lt;br /&gt;
    // more rows can go in here&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testDateEdit::testValidator()&lt;br /&gt;
{&lt;br /&gt;
    QFETCH( QDate, initialDate );&lt;br /&gt;
    QFETCH( QTestEventList, events );&lt;br /&gt;
    QFETCH( QDate, finalDate );&lt;br /&gt;
&lt;br /&gt;
    QDateEdit dateEdit( initialDate );&lt;br /&gt;
&lt;br /&gt;
    events.simulate( &amp;amp;dateEdit);&lt;br /&gt;
&lt;br /&gt;
    QCOMPARE( dateEdit.date(), finalDate );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
QTEST_MAIN(testDateEdit)&lt;br /&gt;
#include &amp;quot;tutorial3a.moc&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example is pretty much the same as the previous version, up to line 25. In line 26, we create a QTestEventList. We add events to the list in lines 27 and 28 - note that we don't specify the widget we are calling them on at this stage. In line 30, we simulate each event on the widget. If we had multiple widgets, we could call simulate using the same set of events. &lt;br /&gt;
&lt;br /&gt;
Lines 31 to 34 are as per the previous example. &lt;br /&gt;
&lt;br /&gt;
We create another list in lines 35 to 37, although this time we are using addKeyClick and addKeyClicks instead of adding mouse events. Note that an event list can contain combinations of mouse and keyboard events - it just didn't make sense in this test to have such a combination. We use the second list at line 38, and check the results in line 39. &lt;br /&gt;
&lt;br /&gt;
You can also build lists of events in data driven testing as well, as shown in lines 41 to 70. The key difference is that instead of fetching a QString in each row, we are fetching a QTestEventList. This requires that we add a column of QTestEventList, rather than QString (see line 45). At lines 47 to 50, we create a list of events. At line 52 we add those events to the applicable row. We create a second list at lines 54 to 56, and add that second list to the applicable row in line 58. &lt;br /&gt;
&lt;br /&gt;
We fetch the events in line 65, and use them in line 68. If we had multiple widgets, then we could use the same event list several times.&lt;br /&gt;
&lt;br /&gt;
==Tutorial 4 - Testing for failure and avoiding tests==&lt;br /&gt;
&lt;br /&gt;
Under some conditions, it is impossible to avoid tests failing. In this section, we'll see how to deal with these cases. &lt;br /&gt;
&lt;br /&gt;
===Skipping tests===&lt;br /&gt;
&lt;br /&gt;
Where a test doesn't make sense to run (for example, if the required test files aren't available, or the feature is architecture or operating system dependent), the cleanest solution is to skip the test. &lt;br /&gt;
&lt;br /&gt;
Tests are skipped using the QSKIP macro. QSKIP takes two arguments - a label string that should be used to describe why the test is being skipped, and a enumerated constant that controls how much of the test is skipped. If you pass SkipSingle, and the test is data driven, then only the current row is skipped. If you pass SkipAll and the test is data driven, then all following rows are skipped. If the test is not data driven, then it doesn't matter which one is used. &lt;br /&gt;
&lt;br /&gt;
You can see how QSKIP works in the example below:&lt;br /&gt;
&lt;br /&gt;
'''Example 15. Unit test showing skipped tests'''&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
void testDate::testSkip_data()&lt;br /&gt;
{&lt;br /&gt;
    QTest::addColumn&amp;lt;int&amp;gt;(&amp;quot;val1&amp;quot;);&lt;br /&gt;
    QTest::addColumn&amp;lt;int&amp;gt;(&amp;quot;val2&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    QTest::newRow(&amp;quot;1&amp;quot;) &amp;lt;&amp;lt; 1 &amp;lt;&amp;lt; 1;&lt;br /&gt;
    QTest::newRow(&amp;quot;2&amp;quot;) &amp;lt;&amp;lt; 1 &amp;lt;&amp;lt; 2;&lt;br /&gt;
    QTest::newRow(&amp;quot;3&amp;quot;) &amp;lt;&amp;lt; 3 &amp;lt;&amp;lt; 3;&lt;br /&gt;
    QTest::newRow(&amp;quot;5&amp;quot;) &amp;lt;&amp;lt; 5 &amp;lt;&amp;lt; 5;&lt;br /&gt;
    QTest::newRow(&amp;quot;4&amp;quot;) &amp;lt;&amp;lt; 4 &amp;lt;&amp;lt; 5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testDate::testSkip()&lt;br /&gt;
{&lt;br /&gt;
    QFETCH(int, val1);&lt;br /&gt;
    QFETCH(int, val2);&lt;br /&gt;
&lt;br /&gt;
    if ( val2 == 2 ) &lt;br /&gt;
        QSKIP(&amp;quot;Two isn't good, not doing it&amp;quot;, SkipSingle);&lt;br /&gt;
    if ( val1 == 5 )&lt;br /&gt;
        QSKIP(&amp;quot;Five! I've had enough, bailing here&amp;quot;, SkipAll);&lt;br /&gt;
    QCOMPARE( val1, val2 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Example 16. Output of unit test showing skipped tests'''&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$ ./tutorial4 testSkip -v2&lt;br /&gt;
********* Start testing of testDate *********&lt;br /&gt;
Config: Using QTest library 4.1.0, Qt 4.1.0-snapshot-20051107&lt;br /&gt;
INFO   : testDate::initTestCase() entering&lt;br /&gt;
PASS   : testDate::initTestCase()&lt;br /&gt;
INFO   : testDate::testSkip() entering&lt;br /&gt;
INFO   : testDate::testSkip(1) COMPARE()&lt;br /&gt;
   Loc: [tutorial4.cpp(82)]&lt;br /&gt;
SKIP   : testDate::testSkip(2) Two isn't good, not doing it&lt;br /&gt;
   Loc: [tutorial4.cpp(79)]&lt;br /&gt;
INFO   : testDate::testSkip(3) COMPARE()&lt;br /&gt;
   Loc: [tutorial4.cpp(82)]&lt;br /&gt;
SKIP   : testDate::testSkip(5) Five! I've had enough, bailing here&lt;br /&gt;
   Loc: [tutorial4.cpp(81)]&lt;br /&gt;
PASS   : testDate::testSkip()&lt;br /&gt;
INFO   : testDate::cleanupTestCase() entering&lt;br /&gt;
PASS   : testDate::cleanupTestCase()&lt;br /&gt;
Totals: 3 passed, 0 failed, 2 skipped&lt;br /&gt;
********* Finished testing of testDate *********&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from the verbose output, you can see that the test was run on the first and third rows. The second row wasn't run because of the QSKIP call with a SkipSingle argument. Similarly, the fourth and fifth rows weren't run because the fourth row triggered a QSKIP call with a SkipAll argument. &lt;br /&gt;
&lt;br /&gt;
Also note that the test didn't fail, even though there were two calls to QSKIP. Conceptually, a skipped test is a test that didn't make sense to run for test validity reasons, rather than a test that is valid but will fail because of bugs or lack of features in the code being tested. &lt;br /&gt;
&lt;br /&gt;
===Handling expected failures===&lt;br /&gt;
&lt;br /&gt;
If you have valid tests, but the code that you are testing doesn't pass them, then ideally you fix the code you are testing. However sometimes that isn't possible in the time that you have available, or because of a need to avoid binary incompatible changes. In this case, it is undesirable to delete or modify the unit tests - it is better to flag the test as &amp;quot;expected to fail&amp;quot;, using the QEXPECT_FAIL macro. An example of this is shown below: &lt;br /&gt;
&lt;br /&gt;
'''Example 17. Unit test showing expected failures'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code cppqt n&amp;gt;&lt;br /&gt;
void testDate::testExpectedFail()&lt;br /&gt;
{&lt;br /&gt;
    QEXPECT_FAIL(&amp;quot;&amp;quot;, &amp;quot;1 is not 2, even for very large 1&amp;quot;, Continue);&lt;br /&gt;
    QCOMPARE( 1, 2 );&lt;br /&gt;
    QCOMPARE( 2, 2 );&lt;br /&gt;
&lt;br /&gt;
    QEXPECT_FAIL(&amp;quot;&amp;quot;, &amp;quot;1 is not 2, even for very small 2&amp;quot;, Abort);&lt;br /&gt;
    QCOMPARE( 1, 2 );&lt;br /&gt;
    // The next line will not be run, because we Abort on previous failure&lt;br /&gt;
    QCOMPARE( 3, 3 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Example 18. Output of unit test showing expected failures'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$ ./tutorial4/tutorial4 testExpectedFail -v2&lt;br /&gt;
********* Start testing of testDate *********&lt;br /&gt;
Config: Using QTest library 4.1.0, Qt 4.1.0-snapshot-20051107&lt;br /&gt;
INFO   : testDate::initTestCase() entering&lt;br /&gt;
PASS   : testDate::initTestCase()&lt;br /&gt;
INFO   : testDate::testExpectedFail() entering&lt;br /&gt;
INFO   : testDate::testExpectedFail() Compared values are not the same&lt;br /&gt;
   Actual (1): 1&lt;br /&gt;
   Expected (2): 2&lt;br /&gt;
   Loc: [tutorial4.cpp(41)]&lt;br /&gt;
XFAIL  : testDate::testExpectedFail() 1 is not 2, even for very large 1&lt;br /&gt;
   Loc: [tutorial4.cpp(41)]&lt;br /&gt;
INFO   : testDate::testExpectedFail() COMPARE()&lt;br /&gt;
   Loc: [tutorial4.cpp(42)]&lt;br /&gt;
INFO   : testDate::testExpectedFail() Compared values are not the same&lt;br /&gt;
   Actual (1): 1&lt;br /&gt;
   Expected (2): 2&lt;br /&gt;
   Loc: [tutorial4.cpp(45)]&lt;br /&gt;
XFAIL  : testDate::testExpectedFail() 1 is not 2, even for very small 2&lt;br /&gt;
   Loc: [tutorial4.cpp(45)]&lt;br /&gt;
PASS   : testDate::testExpectedFail()&lt;br /&gt;
INFO   : testDate::cleanupTestCase() entering&lt;br /&gt;
PASS   : testDate::cleanupTestCase()&lt;br /&gt;
Totals: 3 passed, 0 failed, 0 skipped&lt;br /&gt;
********* Finished testing of testDate *********&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see from the verbose output, we expect a failure from each time we do a QCOMPARE( 1, 2);. In the first call to QEXPECT_FAIL, we use the Continue argument, so the rest of the tests will still be run. However in the second call to QEXPECT_FAILwe use the Abort and the test bails at this point. Generally it is better to use Continue unless you have a lot of closely related tests that would each need a QEXPECT_FAIL entry. &lt;br /&gt;
&lt;br /&gt;
Also note that tests that are marked as expected failures are not considered to be failures, so the test function above is considered to be a pass. &lt;br /&gt;
&lt;br /&gt;
If a test that is marked to be an expected failure, and it unexpectedly passes, then that is flagged as an error, as shown below: &lt;br /&gt;
&lt;br /&gt;
'''Example 19. Unit test showing unexpected pass'''&lt;br /&gt;
&amp;lt;code cppqt n&amp;gt;&lt;br /&gt;
void testDate::testUnexpectedPass()&lt;br /&gt;
{&lt;br /&gt;
    QEXPECT_FAIL(&amp;quot;&amp;quot;, &amp;quot;1 is not 2, even for very large 1&amp;quot;, Continue);&lt;br /&gt;
    QCOMPARE( 1, 1 );&lt;br /&gt;
    QCOMPARE( 2, 2 );&lt;br /&gt;
&lt;br /&gt;
    QEXPECT_FAIL(&amp;quot;&amp;quot;, &amp;quot;1 is not 2, even for very small 2&amp;quot;, Abort);&lt;br /&gt;
    QCOMPARE( 1, 1 );&lt;br /&gt;
    QCOMPARE( 3, 3 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Example 20. Output of unit test showing unexpected pass'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$ ./tutorial4/tutorial4 testUnexpectedPass -v2&lt;br /&gt;
********* Start testing of testDate *********&lt;br /&gt;
Config: Using QTest library 4.1.0, Qt 4.1.0-snapshot-20051107&lt;br /&gt;
INFO   : testDate::initTestCase() entering&lt;br /&gt;
PASS   : testDate::initTestCase()&lt;br /&gt;
INFO   : testDate::testUnexpectedPass() entering&lt;br /&gt;
INFO   : testDate::testUnexpectedPass() COMPARE()&lt;br /&gt;
   Loc: [tutorial4.cpp(53)]&lt;br /&gt;
XPASS  : testDate::testUnexpectedPass() COMPARE()&lt;br /&gt;
   Loc: [tutorial4.cpp(53)]&lt;br /&gt;
INFO   : testDate::testUnexpectedPass() COMPARE()&lt;br /&gt;
   Loc: [tutorial4.cpp(54)]&lt;br /&gt;
INFO   : testDate::testUnexpectedPass() COMPARE()&lt;br /&gt;
   Loc: [tutorial4.cpp(57)]&lt;br /&gt;
XPASS  : testDate::testUnexpectedPass() COMPARE()&lt;br /&gt;
   Loc: [tutorial4.cpp(57)]&lt;br /&gt;
INFO   : testDate::cleanupTestCase() entering&lt;br /&gt;
PASS   : testDate::cleanupTestCase()&lt;br /&gt;
Totals: 2 passed, 2 failed, 0 skipped&lt;br /&gt;
********* Finished testing of testDate *********&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see from the verbose output, we expect a failure from each time we do a QCOMPARE( 1, 2);. In the first call to QEXPECT_FAIL, we use the Continue argument, so the rest of the tests will still be run. However in the second call to QEXPECT_FAILwe use the Abort and the test bails at this point. Generally it is better to use Continue unless you have a lot of closely related tests that would each need a QEXPECT_FAIL entry. &lt;br /&gt;
&lt;br /&gt;
Also note that tests that are marked as expected failures are not considered&lt;br /&gt;
to be failures, so the test function above is considered to be a pass. &lt;br /&gt;
&lt;br /&gt;
If a test that is marked to be an expected failure, and it unexpectedly passes, then that is flagged as an error, as shown below: &lt;br /&gt;
&lt;br /&gt;
'''Example 19. Unit test showing unexpected pass'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code cppqt n&amp;gt;&lt;br /&gt;
void testDate::testUnexpectedPass()&lt;br /&gt;
{&lt;br /&gt;
    QEXPECT_FAIL(&amp;quot;&amp;quot;, &amp;quot;1 is not 2, even for very large 1&amp;quot;, Continue);&lt;br /&gt;
    QCOMPARE( 1, 1 );&lt;br /&gt;
    QCOMPARE( 2, 2 );&lt;br /&gt;
&lt;br /&gt;
    QEXPECT_FAIL(&amp;quot;&amp;quot;, &amp;quot;1 is not 2, even for very small 2&amp;quot;, Abort);&lt;br /&gt;
    QCOMPARE( 1, 1 );&lt;br /&gt;
    QCOMPARE( 3, 3 );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Example 20. Output of unit test showing unexpected pass'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$ ./tutorial4/tutorial4 testUnexpectedPass -v2&lt;br /&gt;
********* Start testing of testDate *********&lt;br /&gt;
Config: Using QTest library 4.1.0, Qt 4.1.0-snapshot-20051107&lt;br /&gt;
INFO   : testDate::initTestCase() entering&lt;br /&gt;
PASS   : testDate::initTestCase()&lt;br /&gt;
INFO   : testDate::testUnexpectedPass() entering&lt;br /&gt;
INFO   : testDate::testUnexpectedPass() COMPARE()&lt;br /&gt;
   Loc: [tutorial4.cpp(53)]&lt;br /&gt;
XPASS  : testDate::testUnexpectedPass() COMPARE()&lt;br /&gt;
   Loc: [tutorial4.cpp(53)]&lt;br /&gt;
INFO   : testDate::testUnexpectedPass() COMPARE()&lt;br /&gt;
   Loc: [tutorial4.cpp(54)]&lt;br /&gt;
INFO   : testDate::testUnexpectedPass() COMPARE()&lt;br /&gt;
   Loc: [tutorial4.cpp(57)]&lt;br /&gt;
XPASS  : testDate::testUnexpectedPass() COMPARE()&lt;br /&gt;
   Loc: [tutorial4.cpp(57)]&lt;br /&gt;
INFO   : testDate::cleanupTestCase() entering&lt;br /&gt;
PASS   : testDate::cleanupTestCase()&lt;br /&gt;
Totals: 2 passed, 2 failed, 0 skipped&lt;br /&gt;
********* Finished testing of testDate *********&lt;br /&gt;
&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
The effect of unexpected passes on the running of the test is controlled by the second argument to QEXPECT_FAIL. If the argument is Continue and the test unexpectedly passes, then the rest of the test function will be run. If the argument is Abort, then the test will stop.&lt;br /&gt;
&lt;br /&gt;
===Checking debug messages and warnings===&lt;br /&gt;
&lt;br /&gt;
If you are testing border cases, you will likely run across the case where some kind of message will be produced using the qDebug or qWarning functions. Where a test produces a debug or warning message, that message will be logged in the test output (although it will still be considered a pass unless some other check fails), as shown in the example below: &lt;br /&gt;
&lt;br /&gt;
Example 21. Unit test producing warning and debug messages&lt;br /&gt;
&amp;lt;code cppqt n&amp;gt;&lt;br /&gt;
void testDate::testQdebug()&lt;br /&gt;
{&lt;br /&gt;
    qWarning(&amp;quot;warning&amp;quot;);&lt;br /&gt;
    qDebug(&amp;quot;debug&amp;quot;);&lt;br /&gt;
    qCritical(&amp;quot;critical&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
'''Example 22. Output of unit test producing warning and debug messages'''&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$ ./tutorial4 testQdebug&lt;br /&gt;
********* Start testing of testDate *********&lt;br /&gt;
Config: Using QTest library 4.1.0, Qt 4.1.0-snapshot-20051107&lt;br /&gt;
PASS   : testDate::initTestCase()&lt;br /&gt;
QWARN  : testDate::testQdebug() warning&lt;br /&gt;
QDEBUG : testDate::testQdebug() debug&lt;br /&gt;
QSYSTEM: testDate::testQdebug() critical&lt;br /&gt;
PASS   : testDate::testQdebug()&lt;br /&gt;
PASS   : testDate::cleanupTestCase()&lt;br /&gt;
Totals: 3 passed, 0 failed, 0 skipped&lt;br /&gt;
********* Finished testing of testDate *********&lt;br /&gt;
&amp;lt;/code&amp;gt;        &lt;br /&gt;
&lt;br /&gt;
Note that while this example produces the debug and warning messages within the test function (testQdebug), those messages would normally be propagated up from the code being tested. However the source of the messages does not make any difference to how they are handled. &lt;br /&gt;
&lt;br /&gt;
If your test needs include either a clean output, or verification that appropriate messages are generated, then you will probably need the QtTest::ignoreMessage function. &lt;br /&gt;
&lt;br /&gt;
{{Tip|'''Note:''' The ignoreMessage function can be used to ignore a message, however it might be clearer to think of this function as checking for the presence of an expected message. In particular, it is a test failure if you call ignoreMessage and the message is not generated.}}&lt;br /&gt;
&lt;br /&gt;
An example of how ignoreMessage works is shown below. &lt;br /&gt;
&lt;br /&gt;
'''Example 23. Example of using ignoreMessage'''&lt;br /&gt;
&amp;lt;code cppqt n&amp;gt;&lt;br /&gt;
void testDate::testValidity()&lt;br /&gt;
{&lt;br /&gt;
    QTest::ignoreMessage(QtWarningMsg, &amp;quot;validity warning&amp;quot;);&lt;br /&gt;
    qWarning(&amp;quot;validity warning&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testDate::testValiditi()&lt;br /&gt;
{&lt;br /&gt;
    QTest::ignoreMessage(QtWarningMsg, &amp;quot;validity warning&amp;quot;);&lt;br /&gt;
    qWarning(&amp;quot;validiti warning&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
'''Example 24. Output of ignoreMessage example'''&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$ ./tutorial4 testValidity testValiditi&lt;br /&gt;
********* Start testing of testDate *********&lt;br /&gt;
Config: Using QTest library 4.1.0, Qt 4.1.0-snapshot-20051107&lt;br /&gt;
PASS   : testDate::initTestCase()&lt;br /&gt;
PASS   : testDate::testValidity()&lt;br /&gt;
QWARN  : testDate::testValiditi() validiti warning&lt;br /&gt;
INFO   : testDate::testValiditi() Did not receive message: &amp;quot;validity warning&amp;quot;&lt;br /&gt;
FAIL!  : testDate::testValiditi() Not all expected messages were received&lt;br /&gt;
PASS   : testDate::cleanupTestCase()&lt;br /&gt;
Totals: 3 passed, 1 failed, 0 skipped&lt;br /&gt;
********* Finished testing of testDate *********&lt;br /&gt;
&amp;lt;/code&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
Note that the warning message in testDate::testValidity has been &amp;quot;swallowed&amp;quot; by the the call to ignoreMessage. &lt;br /&gt;
&lt;br /&gt;
By contrast, the warning message in testDate::testValiditi still causes a warning to be logged, because the ignoreMessage call does not match the text in the warning message. In addition, because a we expected a particular warning message and it wasn't received, the testDate::testValiditi test function fails.&lt;br /&gt;
&lt;br /&gt;
==Tutorial 5: Testing Qt slots and signals==&lt;br /&gt;
&lt;br /&gt;
An important part of Qt programming is the use of signals and slots. This section covers the support for testing of these features. &lt;br /&gt;
&lt;br /&gt;
{{Tip|'''Note:''' If you are not familiar with Qt signals and slots, you probably should review the introduction to this feature provided in your Qt documentation. It is also available at http://doc.trolltech.com/latest/signalsandslots.html. You also might like to review Tutorial 5 in your Qt documentation. This tutorial is also available at http://doc.trolltech.com/latest/tutorial-t5.html.}}&lt;br /&gt;
&lt;br /&gt;
===Testing slots===&lt;br /&gt;
&lt;br /&gt;
Testing slots is very easy, because a slot is just a specially annotated method. You can call slots just like any other method you'd like to test, as shown below: &lt;br /&gt;
&lt;br /&gt;
'''Example 25. QLabel test code, showing testing of a couple of slots'''&lt;br /&gt;
&amp;lt;code cppqt n&amp;gt;&lt;br /&gt;
#include &amp;lt;QtTest&amp;gt;&lt;br /&gt;
#include &amp;lt;QtCore&amp;gt;&lt;br /&gt;
#include &amp;lt;QtGui&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class testLabel: public QObject&lt;br /&gt;
{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
private slots:&lt;br /&gt;
    void testChanges();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void testLabel::testChanges()&lt;br /&gt;
{&lt;br /&gt;
    QLabel label;&lt;br /&gt;
&lt;br /&gt;
    // setNum() is a QLabel slot, but we can just call it like any&lt;br /&gt;
    // other method.&lt;br /&gt;
    label.setNum( 3 );&lt;br /&gt;
    QCOMPARE( label.text(), QString(&amp;quot;3&amp;quot;) );&lt;br /&gt;
&lt;br /&gt;
    // clear() is also a slot.&lt;br /&gt;
    label.clear();&lt;br /&gt;
    QVERIFY( label.text().isEmpty() );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
QTEST_MAIN(testLabel)&lt;br /&gt;
#include &amp;quot;tutorial5.moc&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Testing signals===&lt;br /&gt;
Testing of signals is a little more difficult than testing of slots, however Qt offers a very useful class called QSignalSpy that helps a lot. &lt;br /&gt;
&lt;br /&gt;
{{qt|QSignalSpy}} is a class provided with Qt that allows you to record the signals that have been emitted from a particular QObject subclass object. You can then check that the right number of signals have been emitted, and that the right kind of signals were emitted. You can find more information on the QSignalSpy class in your Qt documentation.&lt;br /&gt;
&lt;br /&gt;
An example of how you can use QSignalSpy to test a class that has signals is shown below. &lt;br /&gt;
&lt;br /&gt;
'''Example 26. QCheckBox test code, showing testing of signals'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code cppqt n&amp;gt;&lt;br /&gt;
#include &amp;lt;QtTest&amp;gt;&lt;br /&gt;
#include &amp;lt;QtCore&amp;gt;&lt;br /&gt;
#include &amp;lt;QtGui&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class testCheckBox: public QObject&lt;br /&gt;
{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
private slots:&lt;br /&gt;
    void testSignals();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void testCheckBox::testSignals()&lt;br /&gt;
{&lt;br /&gt;
    // You don't need to use an object created with &amp;quot;new&amp;quot; for&lt;br /&gt;
    // QSignalSpy, I just needed in in this case to test the emission&lt;br /&gt;
    // of a destroyed() signal.&lt;br /&gt;
    QCheckBox *xbox = new QCheckBox;&lt;br /&gt;
&lt;br /&gt;
    // We are going to have two signal monitoring classes in use for&lt;br /&gt;
    // this test.&lt;br /&gt;
    // The first monitors the stateChanged() signal. &lt;br /&gt;
    // Also note that QSignalSpy takes a pointer to the object.&lt;br /&gt;
    QSignalSpy stateSpy( xbox, SIGNAL( stateChanged(int) ) );&lt;br /&gt;
    &lt;br /&gt;
    // Not strictly necessary, but I like to check that I have set up&lt;br /&gt;
    // my QSignalSpy correctly.&lt;br /&gt;
    QVERIFY( stateSpy.isValid() );&lt;br /&gt;
&lt;br /&gt;
    // Now we check to make sure we don't have any signals already&lt;br /&gt;
    QCOMPARE( stateSpy.count(), 0 );&lt;br /&gt;
&lt;br /&gt;
    // Here is a second monitoring class - this one for the&lt;br /&gt;
    // destroyed() signal.&lt;br /&gt;
    QSignalSpy destroyedSpy( xbox, SIGNAL( destroyed() ) );&lt;br /&gt;
    QVERIFY( destroyedSpy.isValid() );&lt;br /&gt;
&lt;br /&gt;
    // A sanity check to verify the initial state&lt;br /&gt;
    // This also shows that you can mix normal method checks with&lt;br /&gt;
    // signal checks.&lt;br /&gt;
    QCOMPARE( xbox-&amp;gt;checkState(), Qt::Unchecked );&lt;br /&gt;
&lt;br /&gt;
    // Shouldn't already have any signals&lt;br /&gt;
    QCOMPARE( destroyedSpy.count(), 0 );&lt;br /&gt;
&lt;br /&gt;
    // If we change the state, we should get a signal.&lt;br /&gt;
    xbox-&amp;gt;setCheckState( Qt::Checked );&lt;br /&gt;
    QCOMPARE( stateSpy.count(), 1 );&lt;br /&gt;
&lt;br /&gt;
    xbox-&amp;gt;setCheckState( Qt::Unchecked );&lt;br /&gt;
    QCOMPARE( stateSpy.count(), 2 );&lt;br /&gt;
&lt;br /&gt;
    xbox-&amp;gt;setCheckState( Qt::PartiallyChecked );&lt;br /&gt;
    QCOMPARE( stateSpy.count(), 3 );&lt;br /&gt;
&lt;br /&gt;
    // If we destroy the object, the signal should be emitted.&lt;br /&gt;
    delete xbox;&lt;br /&gt;
&lt;br /&gt;
    // So the count of objects should increase.&lt;br /&gt;
    QCOMPARE( destroyedSpy.count(), 1 );&lt;br /&gt;
&lt;br /&gt;
    // We can also review the signals that we collected&lt;br /&gt;
    // QSignalSpy is really a QList of QLists, so we take the first&lt;br /&gt;
    // list, which corresponds to the arguments for the first signal&lt;br /&gt;
    // we caught.&lt;br /&gt;
    QList&amp;lt;QVariant&amp;gt; firstSignalArgs = stateSpy.takeFirst();&lt;br /&gt;
    // stateChanged() only has one argument - an enumerated type (int)&lt;br /&gt;
    // So we take that argument from the list, and turn it into an integer.&lt;br /&gt;
    int firstSignalState = firstSignalArgs.at(0).toInt();&lt;br /&gt;
    // We can then check we got the right kind of signal.&lt;br /&gt;
    QCOMPARE( firstSignalState, static_cast&amp;lt;int&amp;gt;(Qt::Checked) );&lt;br /&gt;
&lt;br /&gt;
    // check the next signal - note that takeFirst() removes from the list&lt;br /&gt;
    QList&amp;lt;QVariant&amp;gt; nextSignalArgs = stateSpy.takeFirst();&lt;br /&gt;
    // this shows another way of fudging the argument types&lt;br /&gt;
    Qt::CheckState nextSignalState = (Qt::CheckState)nextSignalArgs.at(0).toInt();&lt;br /&gt;
    QCOMPARE( nextSignalState, Qt::Unchecked );&lt;br /&gt;
&lt;br /&gt;
    // and again for the third signal&lt;br /&gt;
    nextSignalArgs = stateSpy.takeFirst();&lt;br /&gt;
    nextSignalState = (Qt::CheckState)nextSignalArgs.at(0).toInt();&lt;br /&gt;
    QCOMPARE( nextSignalState, Qt::PartiallyChecked );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
QTEST_MAIN(testCheckBox)&lt;br /&gt;
#include &amp;quot;tutorial5a.moc&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first 11 lines are essentially unchanged from previous examples that we've seen. Line 15 creates the object that will be tested - as noted in the comments in lines 12-14, the only reason that I'm creating it with new is because I need to delete it in line 45 to cause the destroyed() signal to be emitted. &lt;br /&gt;
&lt;br /&gt;
Line 20 sets up the first of our two QSignalSpy instances. The one in line 20 monitors the stateChanged(int) signal, and the one in line 29 monitors the destroyed() signal. If you get the name or signature of the signal wrong (for example, if you use stateChanged() instead of stateChanged(int)), then this will not be caught at compile time, but will result in a runtime failure. You can test if things were set up correctly using the isValid(), as shown in lines 24 and 30. &lt;br /&gt;
&lt;br /&gt;
As shown in line 34, there is no reason why you cannot test normal methods, signals and slots in the same test. &lt;br /&gt;
&lt;br /&gt;
Line 38 changes the state of the object under test, which is supposed to result in a stateChanged(int) signal being emitted. Line 39 checks that the number of signals increases from zero to one. Lines 40 and 41 repeat the process, and again in lines 42 and 43. &lt;br /&gt;
&lt;br /&gt;
Line 45 deletes the object under test, and line 47 tests that the destroyed() signal has been emitted. &lt;br /&gt;
&lt;br /&gt;
For signals that have arguments (such as our stateChanged(int) signal), you may also wish to check that the arguments were correct. You can do this by looking at the list of signal arguments. Exactly how you do this is fairly flexible, however for simple tests like the one in the example, you can manually work through the list using takeFirst() and check that each argument is correct. This is shown in line 52, 55 and 57 for the first signal. The same approach is shown in lines 59, 61 and 62 for the second signal, and the in lines 64 to 66 for the third signal. For a more complex set of tests, you may wish to apply some data driven techniques. &lt;br /&gt;
&lt;br /&gt;
{{Tip|'''Note:''' You should be aware that, for some class implementations, you may need to return control to the event loop to have signals emitted. If you need this, try using the {{qt|QTest}}::qWait() function.}}&lt;br /&gt;
&lt;br /&gt;
==Tutorial 6: Integrating with CMake==&lt;br /&gt;
&lt;br /&gt;
The KDE4 build tool is [http://www.cmake.org CMake], and I assume that you are familiar with the use of CMake. If not, you should review the [[Development/Tutorials/CMake|CMake Tutorial]] first.&lt;br /&gt;
&lt;br /&gt;
CMake offers quite good support for unit testing, and QTestLib tests can be easily integrated into any CMake build system.&lt;br /&gt;
&lt;br /&gt;
=== Configuring for Testing ===&lt;br /&gt;
&lt;br /&gt;
Tests are not built by default - you have to enable the test system, and build the tests.&lt;br /&gt;
&lt;br /&gt;
You enable tests by adding an '''ENABLE_TESTING()''' line to the top of your CMakeLists.txt file.&lt;br /&gt;
&lt;br /&gt;
In some configurations, there may be a build system option to turn on (or off) the compilation of tests. At this stage, you have to enable the '''BUILD_TESTING''' option in KDE4 modules, however this may go away in the near future, as later version of CMake can build the test applications on demand.&lt;br /&gt;
&lt;br /&gt;
=== Adding Tests ===&lt;br /&gt;
&lt;br /&gt;
You add a single test to the list of all tests that can be run by using &lt;br /&gt;
'''ADD_TEST''', which takes a number of arguments:&lt;br /&gt;
* The first argument is a display name for the test. This is required.&lt;br /&gt;
* The second argument is the name of the executable to be run (including the path to that executable, if required). This is required.&lt;br /&gt;
* Any following arguments are passed to the executable. These are optional, and are usually omitted for QTestLib tests.&lt;br /&gt;
&lt;br /&gt;
Note that '''ADD_TEST''' does nothing if '''ENABLE_TESTING()''' has not been run.&lt;br /&gt;
&lt;br /&gt;
When choosing a display name, you should adopt a similar convention to the existing tests (e.g. in kdelibs/kdecore, all the display names start with kdecore-, which makes it easy to find the failing test if you run all the tests in kdelibs). If there are no existing tests, using a submodule prefix is probably a good idea.&lt;br /&gt;
&lt;br /&gt;
The executable doesn't need to be something you build, but it will be for QTestLib, and many other tests. Remember that you need to specify the path, so this normally looks something like &amp;quot;${EXECUTABLE_OUTPUT_PATH}/testapp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== KDE4 CMake Recipe for QTestLib ===&lt;br /&gt;
&lt;br /&gt;
If you are working in a KDE4 environment, then it is pretty easy to get CMake set up to build and run a test on demand.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
set(kwhatevertest_SRCS kwhateverest.cpp )&lt;br /&gt;
&lt;br /&gt;
kde4_automoc(${kwhatevertest_SRCS})&lt;br /&gt;
&lt;br /&gt;
kde4_add_executable(kwhatevertest NOGUI RUN_UNINSTALLED ${kwhatevertest_SRCS})&lt;br /&gt;
&lt;br /&gt;
target_link_libraries(kwhatevertest  ${KDE4_KDECORE_LIBS} ${QT_QTTEST_LIBRARY})&lt;br /&gt;
&lt;br /&gt;
add_test(ksubmodule-kwhatevertest ${EXECUTABLE_OUTPUT_PATH}/kwhatevertest)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You are meant to replace &amp;quot;kwhatevertest&amp;quot; with the name of your test application. The target_link_libraries() line will need to contain whatever libraries are needed for the feature you are testing, so if it is a GUI feature, you'll likely need to use &amp;quot;${KDE4_KDEUI_LIBS}.&lt;br /&gt;
&lt;br /&gt;
=== Running the Tests ===&lt;br /&gt;
To run all tests, you can just &amp;quot;make test&amp;quot;. This will work through each of the tests that have been added (at any lower level) using '''ADD_TEST'''.&lt;br /&gt;
&lt;br /&gt;
This is equivalent to running the &amp;quot;ctest&amp;quot; executable with no arguments. If you want finer grained control over which tests are run or the output format, you can use additional arguments. These are explained in the ctest man page (&amp;quot;man ctest&amp;quot; on a *nix system, or run &amp;quot;ctest --help-full&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Further Reading ===&lt;br /&gt;
&lt;br /&gt;
Chapter 8 of the [http://www.kitware.com/products/cmakebook.html  CMake Book] provides a detailed description of how to do testing with CMake. Also see Appendix B for more on CTest and the special commands you can use.&lt;br /&gt;
&lt;br /&gt;
Various sections of the CMake Wiki, especially [http://www.cmake.org/Wiki/CMake_Testing_With_CTest CTest testing]&lt;br /&gt;
&lt;br /&gt;
==Tutorial 7: Integrating with qmake==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==Tutorial 8: XML output==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Alternative tools for testing ==&lt;br /&gt;
&lt;br /&gt;
There are a range of alternative testing approaches that can&lt;br /&gt;
be used either with unit tests, or as an addition to the unit tests. &lt;br /&gt;
&lt;br /&gt;
===Static tests===&lt;br /&gt;
As noted in the introduction, unit tests are dynamic tests - they exercise the compiled code. Static tests are slightly different - they look for problems in source code, rather than making sure that the object code runs correctly.&lt;br /&gt;
&lt;br /&gt;
Static test tools tend to identify completely different types of problems to unit tests, and you should seek to use them both. &lt;br /&gt;
&lt;br /&gt;
For more information on using static tests, see [[../Code Checking|the Code Checking tutorial]].&lt;br /&gt;
&lt;br /&gt;
===Coverage tools and valgrind===&lt;br /&gt;
TODO &lt;br /&gt;
&lt;br /&gt;
=== GUI application testing - Squish and KDExecutor ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==Conclusions==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
[[Category:KDE4]]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials</id>
		<title>Development/Tutorials</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials"/>
				<updated>2007-03-16T19:13:32Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: Add link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tutorials are the fastest way of finding out what KDE will do for you, and how to do it. Here is a list of currently available tutorials '''for KDE4'''. Material for KDE3 and KDE2 is available on the bottom of this page.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
;[[/Programming Tutorial KDE 4|Introduction To KDE 4 Programming]]&lt;br /&gt;
:''You are interested in writing applications with KDE 4? This tutorial series is aimed at those completely new to KDE programming.''&lt;br /&gt;
&lt;br /&gt;
;[[/KDE4 Porting Guide|Porting Your Application]]&lt;br /&gt;
:''Help Porting Applications from Qt3/KDE3 to Qt4/KDE4''&lt;br /&gt;
&lt;br /&gt;
;[[/CMake|Introduction to CMake]]&lt;br /&gt;
:''How to use the CMake build system used by KDE4.''&lt;br /&gt;
&lt;br /&gt;
;[[/Using Qt Designer|Using Qt Designer to build user interfaces]]&lt;br /&gt;
:''How to create UI files with designer, and how to integrate them into a KDE program.''&lt;br /&gt;
&lt;br /&gt;
;[[/Command-Line Options|Using Command-line Options]]&lt;br /&gt;
:''Processing and accessing command-line arguments the easy way with KDE's powerful command line arguments classes.''&lt;br /&gt;
&lt;br /&gt;
== Testing And Debugging ==&lt;br /&gt;
&lt;br /&gt;
;[[/Debugging|Debugging your application]]&lt;br /&gt;
:''Tips, tools and techniques to apply when debugging your KDE application''&lt;br /&gt;
&lt;br /&gt;
;[[Development/Tutorials/Unittests|Writing Unittests for Qt4 and KDE4 with QTestLib]] ([http://developer.kde.org/documentation/tutorials/writingunittests/writingunittests.html Original link])&lt;br /&gt;
:''Tutorial by [mailto:bradh@frogmouth.net Brad Hards] that describes how to write unit tests using the QTestLib framework. It is presented as an example based tutorial, and is still under development.''&lt;br /&gt;
&lt;br /&gt;
;[[/Code_Checking|Semi-automatic ways to detect code errors]]&lt;br /&gt;
:''Techniques you can use to detect errors in KDE code''&lt;br /&gt;
&lt;br /&gt;
== Managing Configuration Data With KConfig ==&lt;br /&gt;
;[[/KConfig|Introduction To KConfig]]&lt;br /&gt;
:''An overview of the KConfig classes and how to use them in your application code''&lt;br /&gt;
&lt;br /&gt;
;[[/Using KConfig XT|Using KConfig XT]]&lt;br /&gt;
:''Tutorial on how to efficiently use the KConfig XT framework.''&lt;br /&gt;
&lt;br /&gt;
== Localization ==&lt;br /&gt;
;[[/Localization/Unicode|Introduction To Unicode]]&lt;br /&gt;
:''An introduction to what Unicode is as well as how to handle Unicode data in KDE applications.''&lt;br /&gt;
&lt;br /&gt;
; [[/Localization/i18n|Writing Applications With Localization In Mind]]&lt;br /&gt;
:''This tutorial covers what localization is, why it's important and how to ensure your application is ready to be localized. A must read for all application developers.''&lt;br /&gt;
&lt;br /&gt;
; [[/Localization/i18n Mistakes|Avoiding Common Localization Pitfalls]]&lt;br /&gt;
:''There are several common mistakes that prevent applications from being properly localized. Find out what they are and how to easily avoid them in this tutorial.''&lt;br /&gt;
&lt;br /&gt;
; [[/Localization/Building KDE's l10n Module|Building KDE's Localization Module]]&lt;br /&gt;
:''Building and installing language support from KDE's localization (l10n) module is a good idea for those working on applications in the main KDE repository. Doing so will allow you to test your application in another language and spot problem areas. Learn how to do just that in this tutorial.''&lt;br /&gt;
&lt;br /&gt;
; [[/Localization/i18n Build Systems|Incorporating i18n Into the Build System]]&lt;br /&gt;
:''Once your application is ready to be localized, the next step is to ensure that translation files are built automatically and kept up to date. This tutorial covers the necessary CMakeFiles.txt additions as well the process of distributing the resulting message catalogs with your application.''&lt;br /&gt;
&lt;br /&gt;
; [[/Localization/i18n Challenges|Common i18n Challenges and Solutions]]&lt;br /&gt;
:''This tutorial covers challenges that you may eventually run into such as translating handbooks and other data that exists outside of the source code, merging and handling obsolete .po files, deeling with freezes, coding in languages other than English and creating independent releases of or moving applications between KDE modules.''&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
;[[Development/Tutorials/API_Documentation|API Documentation]]&lt;br /&gt;
:''This tutorial explains how to document your APIs properly.''&lt;br /&gt;
&lt;br /&gt;
== Application Automation and Scripting ==&lt;br /&gt;
&lt;br /&gt;
=== D-Bus ===&lt;br /&gt;
; [[/D-Bus/Introduction|Introduction to D-Bus]]&lt;br /&gt;
:''A straight-forward introduction to the core concepts in D-Bus from an application developer's perspective, this tutorial covers what D-Bus is and how it can be used by applications.''&lt;br /&gt;
; [[/D-Bus/Accessing Interfaces|Accessing D-Bus Interfaces]]&lt;br /&gt;
:''A step-by-step guide to calling D-Bus methods and connecting to D-Bus signals using QtDBus.''&lt;br /&gt;
; [[/D-Bus/Intermediate_D-Bus|Intermediate D-Bus]]&lt;br /&gt;
:''Tips to make use of QtDBus when faced with problematic real-world interfaces.''&lt;br /&gt;
; [[/D-Bus/Creating Interfaces|Creating D-Bus Interfaces]]&lt;br /&gt;
:''Learn how to expose functionality in your application by creating and using custom D-Bus interfaces. Covers generating the XML descriptions, instantiating interfaces at run time and setting up the build system with CMake.''&lt;br /&gt;
; [[/D-Bus/Autostart Services|D-Bus Autostart Services]]&lt;br /&gt;
:''Turn your application into a D-Bus autostart service with this tutorial. This D-Bus feature, also known as &amp;quot;D-Bus service activation&amp;quot;, will ensure that even when your application isn't running that D-Bus calls made to it will work by relying on the D-Bus daemon itself to start your app if and when needed.''&lt;br /&gt;
; [[/Porting_to_D-Bus|Porting from DCOP to D-Bus]]&lt;br /&gt;
: ''Port your applications from DCOP to D-Bus with this handy guide.''&lt;br /&gt;
&lt;br /&gt;
=== Konqueror ===&lt;br /&gt;
; [[/Creating Konqueror Service Menus|Creating Konqueror Service Menus]]&lt;br /&gt;
:''This tutorial shows you how to create mimetype-specific actions in Konqueror's context menu (aka &amp;quot;servicemenus&amp;quot;).''&lt;br /&gt;
&lt;br /&gt;
===Kross===&lt;br /&gt;
; [[Development/Tutorials/Kross-Tutorial|Kross Tutorial]]  ([http://wiki.koffice.org/index.php?title=Kross/Tutorial Original Link])&lt;br /&gt;
:''This tutorial explains how to integrate the Kross scripting framework into an application.''&lt;br /&gt;
&lt;br /&gt;
=== KOffice ===&lt;br /&gt;
; [[Development/Tutorials/Write a Flake Plugin|Creating KOffice Flake Plugins]]&lt;br /&gt;
:''This tutorial shows you how you can build a plugin for KOffice applications to allow you embed content in ODF documents using Flake''&lt;br /&gt;
&lt;br /&gt;
== Search and Metadata ==&lt;br /&gt;
&lt;br /&gt;
; [[/Writing file analyzers|Writing file analyzers]]&lt;br /&gt;
:''File analyzers extract data from files to display in the file dialogs and file managers. The data gathered this way is also used to search for files. KDE4 allows the use of multiple analyzers per file type. This tutorial describes how you can write new analyzers.''&lt;br /&gt;
&lt;br /&gt;
== Hardware Awareness ==&lt;br /&gt;
&lt;br /&gt;
;[[/Solid_Tutorials|Introduction to Solid]]&lt;br /&gt;
:''An introduction to using the Solid hardware discovery and interaction system in KDE applications.''&lt;br /&gt;
&lt;br /&gt;
;[[/Solid_Network_Tutorial|Accessing Network Information]]&lt;br /&gt;
:''How to use the Solid system to get information about the network''&lt;br /&gt;
&lt;br /&gt;
==Phonon==&lt;br /&gt;
&lt;br /&gt;
;[[/Phonon/Introduction|Phonon]]&lt;br /&gt;
:''How to start with the multimedia API''&lt;br /&gt;
&lt;br /&gt;
==Printing==&lt;br /&gt;
&lt;br /&gt;
;[[/Printing Hello World|Hello World]]&lt;br /&gt;
:''Introduction to the KDE printing system''&lt;br /&gt;
&lt;br /&gt;
;TODO Print Dialog&lt;br /&gt;
:''Using the KDE print dialog''&lt;br /&gt;
&lt;br /&gt;
== Get Hot New Stuff ==&lt;br /&gt;
; [[Development/Tutorials/Introduction to Get Hot New Stuff|Introduction to Get Hot New Stuff]]&lt;br /&gt;
:''An introduction to the developer-friendly network update system that allows KDE applications to fetch new application data at runtime in a user friendly manner.''&lt;br /&gt;
&lt;br /&gt;
;[[Development/Tutorials/KNewStuffSecure|KNewStuff Secure]] ([http://developer.kde.org/documentation/tutorials/knewstuffsecure/index.html Original Link])&lt;br /&gt;
:''Tutorial showing how to share resources in a secured way (KDE 3.4 and later).''  By Andr&amp;amp;#225;s Mantia &amp;amp;lt;amantia@kde.org&amp;amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Rapid Application Development ==&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
;[[Development/Tutorials/Python introduction to signals and slots|101 Introduction to signals and slots]]&lt;br /&gt;
:''A simple introduction to Qt's signal and slot architecture.''&lt;br /&gt;
&lt;br /&gt;
=== Ruby ===&lt;br /&gt;
&lt;br /&gt;
;[http://developer.kde.org/language-bindings/ruby/kde3tutorial/index.html KDE Ruby Korundum tutorial]&lt;br /&gt;
:''A ruby version of Antonio Larrosa Jim&amp;amp;eacute;nez's KDE tutorial by Richard Dale. See the [http://developer.kde.org/language-bindings/ruby/index.html Ruby Developers Corner] for Qt tutorials and other info.''&lt;br /&gt;
&lt;br /&gt;
;[[Development/Tutorials/Qt4_Ruby_Tutorial|Qt4 Ruby Tutorial]]&lt;br /&gt;
:''Trolltech's fabulous introductory tutorial to Qt, translated to Ruby.''&lt;br /&gt;
&lt;br /&gt;
=== Shell ===&lt;br /&gt;
&lt;br /&gt;
;[[Development/Tutorials/Shell_Scripting_with_KDE_Dialogs|Shell Scripting with KDE dialogs]] ([http://developer.kde.org/documentation/tutorials/kdialog/t1.html Original Link])  ([http://developer.kde.org/documentation/tutorials/kdialog-german/t1.html German Version])&lt;br /&gt;
:''Tutorial by [mailto:bradh@frogmouth.net Brad Hards] that describes how to use KDE dialogs in shell scripts with kdialog. It is presented as an example based tutorial.''&lt;br /&gt;
&lt;br /&gt;
== Other tutorials ==&lt;br /&gt;
&lt;br /&gt;
=== KPlotWidget ===&lt;br /&gt;
;[http://developer.kde.org/documentation/tutorials/kdeeduplot/kdeeduplot_tutorial.tar.bz2 Using and extending the KDE EDU Plot widget (docbook archive)]&lt;br /&gt;
:''This tutorial introduces Jason Harris' KPlotWidget that is part of the KDE-Edu package. Contains information about defining your own widget in Qt / KDevelop designer and about subclassing widgets and overriding member functions to extend functionality.''&lt;br /&gt;
&lt;br /&gt;
=== Sonnet ===&lt;br /&gt;
;[[/Sonnet/SonnetTutorial|Adding spell-checking or grammar-checking to KDE applications]]&lt;br /&gt;
:''This tutorial introduces Sonnet and how one may use it to add language correction to your KDE application. Sonnet's auxiliary features shall be described in a separate tutorial.''&lt;br /&gt;
&lt;br /&gt;
== KDE2 and KDE3 Materials ==&lt;br /&gt;
&lt;br /&gt;
;[[Development/Tutorials/KDE3|KDE3 Tutorials]]&lt;br /&gt;
:''These tutorials cover topics related to KDE3.''&lt;br /&gt;
&lt;br /&gt;
;[[Development/Tutorials/KDE2|KDE2 Tutorials]]&lt;br /&gt;
:''These tutorials cover topics related to KDE2.''&lt;br /&gt;
&lt;br /&gt;
[[Category:KDE4]]&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Summer_of_Code/2007/Ideas</id>
		<title>Projects/Summer of Code/2007/Ideas</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Summer_of_Code/2007/Ideas"/>
				<updated>2007-03-15T23:01:46Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: Reverted edits by 212.202.210.141 (Talk); changed back to last version by Zander&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is an open list for ideas for the 2007 edition of [http://code.google.com/soc Google Summer of Code]. It will remain editable while the submission process is open.&lt;br /&gt;
&lt;br /&gt;
This list is not exhaustive. It is just a collection of some ideas. To get further ideas, you can also look at our [http://wiki.kde.org/tiki-index.php?page=KDE%20Google%20SoC%202006%20ideas list of ideas for the year 2006]&lt;br /&gt;
&lt;br /&gt;
Before proceeding, please read the [[Projects/Summer of Code/2007/Participation|participation instructions]]. They are useful for students and developers alike. Before editing this page, please take a look at the [[#Notes on editing this page|Notes on editing this page]] section at the end.&lt;br /&gt;
&lt;br /&gt;
== Past ideas ==&lt;br /&gt;
&lt;br /&gt;
You may want to take a look at the [http://wiki.kde.org/tiki-index.php?page=KDE%20Google%20SoC%202006%20ideas ideas page for 2006]. Some of the ideas there are still valid today.&lt;br /&gt;
&lt;br /&gt;
== Project ideas ==&lt;br /&gt;
&lt;br /&gt;
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at. &lt;br /&gt;
&lt;br /&gt;
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.&lt;br /&gt;
&lt;br /&gt;
When adding an idea to this section, please try to include the following data:&lt;br /&gt;
:* if the application is not widely known, a description of what it does and where its code lives&lt;br /&gt;
:* a brief explanation&lt;br /&gt;
:* the expected results&lt;br /&gt;
:* pre-requisites for working on your project&lt;br /&gt;
:* if applicable, links to more information or discussions&lt;br /&gt;
:* mailing list or IRC channel for your application/library/module&lt;br /&gt;
:* your name and email address for contact (if you're willing to be a mentor)&lt;br /&gt;
&lt;br /&gt;
=== KDE Libs ===&lt;br /&gt;
&lt;br /&gt;
==== KPassivePopup ====&lt;br /&gt;
''' Project Information:''' [http://api.kde.org/cvs-api/kdelibs-apidocs/kdeui/html/classKPassivePopup.html KPassivePopup] is the class that displays information next to taskbar icons, system tray icons or windows without interrupting the user. It is used both directly and by KNotify and is part of libkdeui.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Convert KPassivePopup to use QSvg for the frame etc. this would allow it to be much more flexible in its visual appearance and could allow us to eliminate the various custom implementations that are floating around. This would include examining these forks and ensuring the same functionality could be cleanly incorporated.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The intended result would be a single implementation of KPassivePopup that could be reused without copying code by applications such as Kopete that currently maintain their own versions.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' A prequisite would be knowledge of Qt/KDE and the ability to setup a KDE build environment. Knowledge of SVG would obviously be a big help.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Richard Moore &amp;lt;rich@kde.org&amp;gt;, Aaron Seigo &amp;lt;aseigo@kde.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Solid ====&lt;br /&gt;
&lt;br /&gt;
Solid is the KDE hardware abstraction layer, that enables KDE programs to get consistent results when running on different platforms.&lt;br /&gt;
&lt;br /&gt;
* Plasma integration with Solid:  Plasma uses the term 'data engine' to describe inputs to Plasma applets ('plasmoids').  Multiple applets may make use of a data engine.  One task would be to write data engines for Solid interfaces for hardware status monitoring and control via Plasma.&lt;br /&gt;
&lt;br /&gt;
* Media player support in Solid:  Currently there is no high level support for portable media player devices in Solid.  Applications such as Amarok have had to develop their own media player abstraction layers.  Having this functionality in Solid would create exciting possibilities, for example, adding podcasts directly to your media device from a browser, or storing files received via IM directly on the media device.&lt;br /&gt;
&lt;br /&gt;
* Scanner support in Solid:  On Linux, scanner support uses the SANE library.  To make scanners accessible from KDE applications on other platforms, a Solid wrapper to the most frequently used scanner functions and a SANE backend would make a good Summer of Code project for a student interested in imaging on Linux.&lt;br /&gt;
&lt;br /&gt;
==== Phonon ====&lt;br /&gt;
&lt;br /&gt;
==== KHTML ====&lt;br /&gt;
&lt;br /&gt;
==== KJS - Scripting Modules ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' KJS is KDE's JavaScript engine that was originally developed for the Konqueror Web browser. It as a light-weight, standalone library that can easily be embedded into other applications to make them scriptable.&lt;br /&gt;
&lt;br /&gt;
Besides being restricted to running in the sandbox of an application usage for text and file processing or other administrative or server side tasks in a command line interpreter are thinkable. Consider what made e.g. Perl successfull. What's lacking are modules providing the necessary functions.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' The project would start out with gathering an overview of typical functions found in other scripting languages like Perl, Python and Tcl. The most important ones would then be selected and implemented in (at first) C++ modules that are dynamically loaded by the KJS command line interpreter.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' A set of low-level modules like File, CGI, JSON or similar with a documented set of constructors, functions and properties. They should form the base for pure JavaScript modules to be build on top.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Some C++ programming knowledge is required. Knowledge about other scripting languages like Python and Perl would be advantageous.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Harri Porten &amp;lt;porten@kde.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Sonnet ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' Sonnet will be the future grammar, spell-checking and language detection framework in kde. &lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Make kateparts compatible and integrated with Sonnet framework.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* Be allowed to use inline spell-checking in kile (latex front-end based on kateparts) or in the comments of a source file.&lt;br /&gt;
* Would be wonderful if the grammar and language detection also work with latex files.&lt;br /&gt;
 &lt;br /&gt;
'''Knowledge Pre-Requisite:''' I don't konw but probably C++, parsers, kate parts and language studies.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
==== Kross ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' [http://kross.dipe.org Kross] is a modular scripting framework that provides a complete framework to embed scripting interpreters like Python, Ruby and KDE JavaScript transparently into native applications to bridge the static and dynamic worlds together.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' While Kross does already provide access to Python, Ruby and KDE JavaScript, Java is missing. With a Java backend we could provide access to JDBC databases, Hibernate, Sandboxes and all the other goodies.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* Target is to implement a Java backend and offer Java as another supported scripting backend in Kross.&lt;br /&gt;
* Propably just bridge or at least provide access to QtJambi.&lt;br /&gt;
* Unittests and clean code :)&lt;br /&gt;
 &lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of C/C++, be able to get into the dark details of embedding Java.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Sebastian Sauer &amp;lt;mail@dipe.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== KDEPrint -- UI redesign ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' [http://printing.kde.org KDEPrint] is the well known and very advanced printing platform common to all KDE applications.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Redesign user interfaces related to printing. Improve usability.&lt;br /&gt;
&lt;br /&gt;
''' Expected results:''' Produce an improved set of graphic interfaces to KDE's printing technology, based on usability reports already available and using new (original) usability ideas.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C++, KDE/Qt programming, experience with design and creation of usable UI.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Cristian Tibirna &amp;lt;tibirna@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== KDEPrint -- porting to CUPS &amp;gt; 1.2 ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' [http://printing.kde.org KDEPrint] is the well known and very advanced printing platform common to all KDE applications.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Port the current KDEPrint code to supporting CUPS later than 1.2, both in KDE-3.5 and KDE-4 branches.&lt;br /&gt;
&lt;br /&gt;
''' Expected results:''' Based on the already very well thought out interface to CUPS-1.1, work is necessary for supporting new features and following bug fixes in the latest incarnation of CUPS, the most important backend of KDEPrint.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C, C++, KDE/Qt programming, writing code following specifications.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Cristian Tibirna &amp;lt;tibirna@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== KDEPrint -- porting to Qt-4.3/KDE-4 ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' [http://printing.kde.org KDEPrint] is the well known and very advanced printing platform common to all KDE applications.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Port the KDEPrint code of KDE-4 branch to latest Qt-4/KDE-4 libraries technologies.&lt;br /&gt;
&lt;br /&gt;
''' Expected results:''' This task requires a thorough analysis of technologies used by KDEPrint in the previous (KDE-3.5) incarnation and replacement as needed with new or improved equivalents from Qt-4/KDE-4. Use of the new intercommunication technologies (D-Bus) and new notification technologies is required.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C, C++, KDE/Qt programming, willingness to learn D-Bus as well as KDE-4 APIs.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Cristian Tibirna &amp;lt;tibirna@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== KDEPrint -- add support for LinuxPrinting's on-line drivers query ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' [http://printing.kde.org KDEPrint] is the well known and very advanced printing platform common to all KDE applications.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Add support to KDEPrint for the new [http://www.linux-foundation.org/en/OpenPrinting/Database/Query OpenPrinting Database] which allows on-line search for new (locally unavailable) drivers for printers during printer installation.&lt;br /&gt;
&lt;br /&gt;
''' Expected results:''' This task requires a good learning of the OpenPrinting Database Querying interface. Getting accustomed with KDEPrint's printer installation algorithms is also required. Target platform is KDE-4 but time permitting, a port to KDE-3.5 would be welcome.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C, C++, KDE/Qt programming&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Cristian Tibirna &amp;lt;tibirna@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== KIConLoader: SVG Render Cache ====&lt;br /&gt;
''' Project Information:''' {{class|KIconLoader}} is the class the fetches icons from disk on demand and returns pixmap data for use on screen. This project would add an on-disk binary cache to be used for SVG icons.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' [http://aseigo.blogspot.com/2007/03/efficient-scallable-icons.html See my blog entry here for a description of the problem].&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' A transparent cache that would increase the efficiency of SVG icon usage at runtime, with the possibility of adding runtime composition capabilities to {{class|KIconLoader}}.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' A prequisite would be the ability to setup a KDE build environment. Qt/KDE programming knowledge is not a high requirement for this task, though the student will obviously be picking some of that up as they go. Experience with similar projects involving caching would be good.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Aaron Seigo &amp;lt;aseigo@kde.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
('''Note:''' KIconLoader would benefit from a generic cache, not limited only to SVG but usable also for PNG icons. See the second paragraph of the benefits section in the blog entry for reasons [less disk seeking]. I think it would make sense to change this to a generic cache for KIconLoader. Lubos Lunak &amp;lt;l.lunak@kde.org&amp;gt; )&lt;br /&gt;
&lt;br /&gt;
=== KDE Base applications ===&lt;br /&gt;
&lt;br /&gt;
==== Konqueror - userscripts ====&lt;br /&gt;
''' Project Information:''' The goal of this project would be to implement and integrate into KDE4 a [http://www.konqueror.org/ Konqueror] equivalent of FireFox's [http://en.wikipedia.org/wiki/Greasemonkey Greasemonkey] plugin to allow installing and running user scripts. The project could start of from this [http://www.kde-apps.org/content/show.php?content=51482 existing GPL-ed code].&lt;br /&gt;
&lt;br /&gt;
It seems that someone is already well on their way to completing this already: http://namshub-kde.blogspot.com/2007/01/more-work-on-konquerors-user-scripts.html&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' A Greasemonkey equivalent for Konqueror that allows (de)installing and running Greasemonkey compatible user scripts.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++ programming skills&lt;br /&gt;
&lt;br /&gt;
==== Konqueror &amp;amp; Dolphin - file manager ====&lt;br /&gt;
&lt;br /&gt;
* Ability to extract files from RPM packages&lt;br /&gt;
&lt;br /&gt;
==== Plasma: icon placement ====&lt;br /&gt;
'''Brief explanation:''' Ordering the icons on the desktop has always been a pain for the users. They invent a certain arrangement (images top left, devices lower right, ...) and try to stick with it. Whenever they drop something to the Desktop folder in their filemanager, or when they plug in a new device the icon appears at an arbitrary location. Using clustering techniques and meta information about the existing icons, it would be possible to determine the most useful location for a new icon on the desktop.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Improve the icon placing strategy of kdesktop (plasma) using clustering techniques.&lt;br /&gt;
* Try various clustering algorithms ([http://en.wikipedia.org/wiki/Data_clustering Wikipedia Data Clustering] might help) and choose the one most suitable for the task&lt;br /&gt;
* Implement an icon placement strategy in plasma, using the chosen clustering algorithm.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Familiarity with clustering algorithms or motivation to study them, C++/Qt coding skills&lt;br /&gt;
&lt;br /&gt;
==== KWin -- Tiling Support ====&lt;br /&gt;
''' Project Information:''' [http://websvn.kde.org/trunk/KDE/kdebase/workspace/kwin/ KWin] is the KDE window manager, an application responsible for managing all windows.&lt;br /&gt;
&lt;br /&gt;
''' Brief explananation:''' Some window managers (e.g. Ion or wmii) have the ability to divide the screen to smaller sections which make it simpler to work with several windows at the same time (window maximize only to its tile, etc.).&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Implemented tiling support in KWin.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:'''&lt;br /&gt;
:# C++, Qt/KDE (KWin doesn't use much functionality from Qt and KDE libraries besides basic classes though)&lt;br /&gt;
:# X11/Xlib knowledge beneficial. X11 parts are mostly abstracted in KWin, but it's possible at least little knowledge might be required (it should be possible to learn necessary things while working on the project though).&lt;br /&gt;
:# Multiple-monitor (Xinerama) setup beneficial. KWin already has Xinerama support, parts of which possibly could be used as a base for tiling support. With tiling support implemented, Xinerama support should be implemented as tiles representing Xinerama screens.&lt;br /&gt;
&lt;br /&gt;
'''References:'''&lt;br /&gt;
:# Wikipedia window manager [http://en.wikipedia.org/wiki/Window_manager entry]&lt;br /&gt;
:# KDE bug [http://bugs.kde.org/show_bug.cgi?id=59338 #59338]&lt;br /&gt;
:# KDE bug [http://bugs.kde.org/show_bug.cgi?id=107554 #107554]&lt;br /&gt;
:# [http://modeemi.cs.tut.fi/~tuomov/ion/ Ion]&lt;br /&gt;
:# [http://www.suckless.org/wiki/wmii wmii]&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Lubos Lunak &amp;lt;l.lunak@kde.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== KWin -- Improved Xinerama Support ====&lt;br /&gt;
''' Project Information:''' [http://websvn.kde.org/trunk/KDE/kdebase/workspace/kwin/ KWin] is the KDE window manager, an application responsible for managing all windows.&lt;br /&gt;
&lt;br /&gt;
''' Brief explanation:''' Xinerama (and various implementations known also as e.g. MergedFB or TwinView) is an X server extension that merges two or more physical monitors into one large display. KDE already provides a decent support for Xinerama, but there is still room for improvement, in particular, different monitors are linked together even in cases when it might be more beneficial to have them independent, for example with virtual desktops.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Improved Xinerama support in KDE/KWin. Specifically, making virtual desktops on different Xinerama displays independent, per [http://bugs.kde.org/show_bug.cgi?id=107302 KDE bugreport #107302], and related fixes/changes.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:'''&lt;br /&gt;
:# C++, Qt/KDE (KWin doesn't use much functionality from Qt and KDE libraries besides basic classes though)&lt;br /&gt;
:# X11/Xlib knowledge beneficial. X11 parts are mostly abstracted in KWin, but at least little knowledge will be required (it should be possible to learn necessary things while working on the project though).&lt;br /&gt;
:# Multiple-monitor (Xinerama) setup. Although it is possible to use [http://ktown.kde.org/~seli/fakexinerama/ Fake Xinerama] for making a single monitor act like a Xinerama setup, real Xinerama setup is strongly recommended.&lt;br /&gt;
&lt;br /&gt;
'''References:'''&lt;br /&gt;
:# Wikipedia window manager [http://en.wikipedia.org/wiki/Window_manager entry]&lt;br /&gt;
:# Wikipedia Xinerama [http://en.wikipedia.org/wiki/Xinerama entry]&lt;br /&gt;
:# KDE bug [http://bugs.kde.org/show_bug.cgi?id=107302 #107302]&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Lubos Lunak &amp;lt;l.lunak@kde.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Strigi: chemistry and biology support ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' [http://www.vandenoever.info/software/strigi/ Strigi] is a promosing alternative to other desktop&lt;br /&gt;
search tools, like Beagle/Kerry. It has a plugin architecture that allows writing indexing plugins for a specific area, or specific enhanced purposes. Available are  both inline plugins (written in C++), as well as plugins that call programs written in other languages via the command line. Strigi is showing progress towards integration to semantic desktop ideas, as in the [http://nepomuk-kde.semanticdesktop.org/xwiki/bin/view/Main/ Nepomuk] project. This allows chemical information to be semantically marked up, and easily retrieved.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' The idea of this project is to integrate chemistry and biology knowledge into the KDE desktop, by writing chemistry and biology aware plugins for Strigi. Exact molecule searching on the hard disk will be supported via the [http://www.iupac.org/InChI InChI]. For the rest, normal free text searching will do fine for now. Generation of InChI's will be done via [http://openbabel.sf.net/ OpenBabel], for files supported by the [http://chemical-mime.sourceforge.net/ Chemical MIME]'s (which has existing KDE support) and [http://freshmeat.net/projects/kfile_chemical/?branch_id=60776&amp;amp;release_id=231404 kfile-chemical] (which is available for KDE3 and KDE4). Optionally, the student can incorporate the chemical text mining tool [http://wwmm.ch.cam.ac.uk/wikis/wwmm/index.php/Oscar3 OSCAR3] developed in Cambridge, UK, to extract InChI's from text documents, like PDF, HTML, etc. Here Strigi's jstream technology come in handy, as it will provide a plain text version for all those formats. Extraction of biochemical information is much easier, as these files commonly plain text already.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Strigi plugins that: &lt;br /&gt;
:# extract meta data for (bio)chemical files defined by the Chemical MIMEs, via the kfile-chemical kfile plugins, &lt;br /&gt;
:# process files with a (subset of) (bio)chemical MIME with OpenBabel to generate an InChI for indexing, &lt;br /&gt;
:# (optionally) use OSCAR3 to process plain text and create InChIs for molecules found in that text. Additionally, the student is invited to propose a useful ontology for marking up the extracted chemical and biological information.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of C++ is a requirement, as is high school education in chemistry and biology.&lt;br /&gt;
&lt;br /&gt;
'''Mentor(s):''' Carsten Niehaus &amp;lt;cniehaus@kde.org&amp;gt;,  &lt;br /&gt;
Jerome Pansanel &amp;lt;j.pansanel@pansanel.net&amp;gt;, Egon Willighagen &amp;lt;egonw@user.sf.net&amp;gt;, Jos van den Oever&amp;quot; &amp;lt;jvdoever@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [http://sourceforge.net/mail/?group_id=171000 strigi-devel@lists.sourceforge.net]&lt;br /&gt;
&lt;br /&gt;
=== KDE Edu ===&lt;br /&gt;
&lt;br /&gt;
==== A 3D Molecular Editor ====&lt;br /&gt;
''' Project Information:''' There are several 3D molecular editors, but only few open source programs, such as [http://www.uku.fi/~thassine/projects/ghemical/ Ghemical]. The GPL-ed [http://openbabel.sf.net OpenBabel project] open chemistry library has expanded its usefulness improving chemistry software. This resulted in, among other things, an application and library called [http://avogadro.sourceforge.net/ Avogadro]. [http://edu.kde.org/kalzium/index.php Kalzium] and Avogadro will soon merge a lot of code so that both apps share an underlying rendering library for molecules (using OpenGL). Avogadro already has basic &amp;quot;molecule construction&amp;quot; capabilities. The goal of this project is to extend these such to yield a 3D editor suitable for basic molecular drawing and visualization for high school and university students.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The improved application would be based on the new OpenGL based rendering code, and able to construct common organic molecules (such as [http://chem-file.sourceforge.net/data/carboxylic_acids/2R-2-1S-1_2-dihydroxyethyl-4_5-dihydroxy-furan-3-one_en.html this one]). The 3D-display code inside Kalzium will be reused and expanded to handle, for example, protein &amp;quot;ribbon&amp;quot; views, surfaces, and surface-mapped functions like electronic charge. Additional features such as configurable labels (for atoms, protein residues, etc.) and flexibility to change rendering for individual atoms or bonds would be welcome.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Basic Qt-knowledge and basic chemistry knowledge. OpenGL experience welcome.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Carsten Niehaus (cniehaus at kde dot org)&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' kalzium at kde dot org&lt;br /&gt;
&lt;br /&gt;
==== MARBLE - Adding a 2D View ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' Marble is a Qt 4-based generic virtual globe widget which is meant to integrate well with the KDE desktop to provide basic input and visualisation facilities for geographical data. Marble currently lives in http://websvn.kde.org/trunk/playground/base/marble/ and the author would like to see Marble be included with KDE-Edu soon. More information: [http://www.kdedevelopers.org/node/2429 the Marble description].&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' To be properly integrated with other applications a 2D View for Marble will be needed in addition to the preferred 3D View (e.g. for merging functionality of KGeography and Marble). Three steps are suggested:&lt;br /&gt;
:# reuse the current rendering engine in 2D mode&lt;br /&gt;
:# write an optimized approach for the 2D case and thereby refactor parts of Marble (especially the texture mapping)&lt;br /&gt;
:# include adding proper access methods for applications and the user interface&lt;br /&gt;
&lt;br /&gt;
Depending on the knowledge of the applicant the refactoring part can be extended.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' adding the 2D View Mode to Marble. Optionally, if enough time is available, integrate that view mode in another application like KGeography.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a pre-requirement. Basic highschool trigonometry knowledge would be helpful. Other useful skills, but not mandatory are:&lt;br /&gt;
* Qt experience&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Torsten Rahn &amp;lt;rahn@kde.org&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' The kde-edu mailing list: http://lists.kde.org/?l=kde-edu&amp;amp;r=1&amp;amp;b=200702&amp;amp;w=2 .&lt;br /&gt;
&lt;br /&gt;
==== MARBLE - OpenStreetMap, GPS, Almanac, improved KML support ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' Marble is a Qt 4-based generic virtual globe widget which is meant to integrate well with the KDE desktop to provide basic input and visualisation facilities for geographical data. Marble currently lives in http://websvn.kde.org/trunk/playground/base/marble/ and the author would like to see Marble be included with KDE-Edu soon. More information: [http://www.kdedevelopers.org/node/2429 the Marble description].&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' There are a lot of other interesting projects that would make a nice Google Summer of Code 2007 project each on their own. Keep in mind that all those should be introduced in an unobtrusive manner as Marble is aimed at casual users without much technical knowledge. So a larger part should be dedicated on the usability (Of course it needs to work, too ;-):&lt;br /&gt;
:# Basic support for GPS devices: Introduce an interface to support GPS tracks and / or provide support for the GPX format. Co-Mentor: Inge Wallin.&lt;br /&gt;
:# Basic support for OpenStreetMap ( http://www.openstreetmap.org ). The applicant should find a way to incrementally download data collected by the Open Street Map project. This should happen in the background.&lt;br /&gt;
:# Marble Almanac: The applicant should extend the current placemark info dialog into a module of its own that compiles together various geographical information from different sources (like the CIA fact book).&lt;br /&gt;
:# Improve KML capabilities. Currently Marble has very basic KML support already. Although Marble won't be able to support the whole range of KML tags that e.g. Google Earth supports, it would be nice if support could be made more standards compliant. The student should be able to refactor the current code and introduce an improved design.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' All these projects require that the student is a self-starter and will be able to do some research concerning the topics on their own. Beyond that you should have basic C++ knowledge. Prior Qt experience is a plus.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Torsten Rahn &amp;lt;rahn@kde.org&amp;gt;, Co-Mentor for GPS support: Inge Wallin &amp;lt;inge@lysator.liu.se&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' The kde-edu mailing list: http://lists.kde.org/?l=kde-edu&amp;amp;r=1&amp;amp;b=200702&amp;amp;w=2 .&lt;br /&gt;
&lt;br /&gt;
==== Step interactive physical simulator ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' Step is interactive physical simulator for education. It is very young program recently ported to KDE4. You can find more about it here:&lt;br /&gt;
http://edu.kde.org/step/ .&lt;br /&gt;
&lt;br /&gt;
'''Note:''' This entry is added by author of the Step who want to apply to SoC as a student himself and seeking for mentor (as suggested on kdeedu mailing list).&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' In order to be useful and to be included in kdeedu Step needs a lot more features than it currently has (it is only two month old). I propose adding the following features to Step (the list will be filtered to fit in SoC timeframe):&lt;br /&gt;
:# Simulation (StepCore library):&lt;br /&gt;
:## collision detection with friction (I hope this will be ready before summer)&lt;br /&gt;
:## movement restrictions (joints) (it can be ready too)&lt;br /&gt;
:## global error estimation&lt;br /&gt;
:## molecular dynamics (2d gas, 2d fluid)&lt;br /&gt;
:## Brownian motion&lt;br /&gt;
:## soft bodies and massive springs&lt;br /&gt;
:## API polishing&lt;br /&gt;
:# GUI (Step itself):&lt;br /&gt;
:## threading (do calculations in separate thread)&lt;br /&gt;
:## user-editable notes in experiment&lt;br /&gt;
:## units for all quantities, unit conversions&lt;br /&gt;
:## sidebar with nice descriptions for all bodies and its parameters (main properties, physical laws about it, real-world examples, ...)&lt;br /&gt;
:## custom graphics for various quantities (for example v(t) or v(x) - user     can select what exactly to plot).&lt;br /&gt;
:## custom controllers to interactively control body parameters during     simulation (for example user can add slider to control mass of the body and even assign hotkeys to it).&lt;br /&gt;
:## knewstuff for sharing experiments&lt;br /&gt;
:## tutorials (series of experiments with explanations)&lt;br /&gt;
:## GUI polishing&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
=== KDE PIM libraries and applications ===&lt;br /&gt;
&lt;br /&gt;
==== KPilot - Enhance Record based syncing ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' KPilot is the KDE application which synchronizes  Palm OS PDAs with various KDE applications, including KMail, KAddressbook and Calendar. KPilot makes use of the pilot-link library to handle the interaction between the device and the conduits. These conduits are plugins which handle the actual synchronization of the items. For more information see [http://www.kpilot.org]&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' The vast majority of KPilot's conduits are record-based in nature. This means that the logical program flow for each of the conduits is very much the same in that they will each: &lt;br /&gt;
&lt;br /&gt;
:# Open a Palm database&lt;br /&gt;
:# Retrieve either all records or just the changed records&lt;br /&gt;
:# Open a PC data store&lt;br /&gt;
:# Retrieve either all or changed records&lt;br /&gt;
:# Handle tri-directional syncing, conflict handling, and merging changed data&lt;br /&gt;
:# Then write the resolved data sets back to the PC and Palm data stores &lt;br /&gt;
&lt;br /&gt;
But the current conduit framework does not abstract this common functionality into a set of base classes as it should.  This has resulted in a lot of duplicated code throughout KPilot's conduit base, and each conduit has its own way of handling this common functionality.  Understandably, this has led to bugs in the syncing algorithms and has made maintainability of the conduits (and KPilot) a much more difficult thing than it should be.  For every conduit, the maintainer has to learn how the actual syncing is done.  To make matters worse, there are a couple of conduits which don't sync correctly because of a incomplete implementation of handling records.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The student will create an improved framework for KPilot's record-based conduits and (re)implement a (new) conduit as a proof of concept.&lt;br /&gt;
&lt;br /&gt;
:# Documentation about the syncing process of a record based conduit.&lt;br /&gt;
:## Sequence diagrams detailing sync logic for each of the major scenarios: HotSync, FullSync, Copy PC to Handheld, Copy Handheld to PC&lt;br /&gt;
:## Class diagram detailing:&lt;br /&gt;
:##* Inheritance hierarchy&lt;br /&gt;
:##* Class relationships&lt;br /&gt;
:# Implementation of the abstract record based conduit in the KPilot library.&lt;br /&gt;
:# (Re)implementation of a (new) Conduit as proof of concept.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a pre-requirement. Other useful skills, but not mandatory are:&lt;br /&gt;
* Qt experience&lt;br /&gt;
* Pilot-link experience&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Adriaan de Groot &amp;lt;groot@kde.org&amp;gt;, Jason 'vanRijn' Kasper &amp;lt;vR@movingparts.net&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' The kde-pim mailing list: http://lists.kde.org/?l=kde-pim&amp;amp;r=1&amp;amp;w=2.&lt;br /&gt;
&lt;br /&gt;
==== KitchenSync ====&lt;br /&gt;
&lt;br /&gt;
KitchenSync is the frontend to the generic synchronization system [http://www.openysync.org OpenSync]. It is supposed to become the standard syncing solution for KDE. Right now it already supports synchronization of KDE PIM data with a wider variety of mobile devices like phones and PDAs as well was synchronization with other applications like Evolution or Google calendar.&lt;br /&gt;
&lt;br /&gt;
KitchenSync works pretty well as OpenSync, but doesn't yet cover all functionality OpenSync provides. The goal of this project would be to improve that. For example the configuration GUIs for the various OpenSync plugins would need some work.&lt;br /&gt;
&lt;br /&gt;
This project requires some knowledge in KDE programming. It will also involve collaboartion with the OpenSync team, so some experience with C is helpful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Cornelius Schumacher &amp;lt;schumacher@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== KOrganizer Theming ====&lt;br /&gt;
&lt;br /&gt;
KOrganizer Theming: In the real world calendars are made from paper and carry lots of pretty pictures, witty sayings, historical data or similar things. Compared to that calendar programs are extremely plain. One of the intents of the CalendarDecoration plugin interface for KOrganizer was to make it possible to add theming to the calendar views, so that you can add all the fun things which make paper calendars more than just a bunch of papers with dates on it. Combined with the KNewStuff technology this could bring much more color to our desktops and make KOrganizer interesting to people which currently wouldn't think of using a calendar program.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Cornelius Schumacher &amp;lt;schumacher@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KDE Games ===&lt;br /&gt;
&lt;br /&gt;
==== Kombinaton - AI Engine ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' Kombination is a KDE4 scrabble clone. The project would be adding an artificial intelligence interface and at least one engine. Kombination currently lives in trunk/playground/games/kombination/ and the author would like to see Kombination be included with KDE Games soon. More information: [http://home.gna.org/kombination/ the Kombination web page].&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a pre-requirement. Basic knowledge of Scrabble rules is a must too. KDE and Qt skills will be useful but not mandatory.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Albert Astals Cid &amp;lt;aacid@kde.org&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' The kombination mailing list: http://home.gna.org/kombination/ .&lt;br /&gt;
&lt;br /&gt;
=== KDE SDK Applications ===&lt;br /&gt;
&lt;br /&gt;
==== Kate ====&lt;br /&gt;
''' Project Information:''' Kate is a multi document editor, based on a rewritten version of the kwrite editing widget of KDE, offering all the features of that plus a bunch of its own.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Make Kate a much more capable yet still lightweight development tool for KDE4.  Add features to Kate including CVS and SVN integration (either via recognition of the kdesvn or kcvs utilities, or with a custom implementation), Eclipse-like workspace and project management, and build environment integration for various languages/tools via an extensible interface.  Scale Kate as much as needed to accomodate these changes, and not beyond that (at least for the scope of this project).&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The intended result would be a stable and extended implementation of Kate, providing CVS and SVN integration, Eclipse-like workspace and project management, and build environment integration.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' A prequisite would be knowledge of Qt/KDE and the ability to setup a KDE build environment.  Additionally, knowledge of interfacing with source code repositories via C++, and general C++ knowledge would be required.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Christoph Cullmann &amp;lt;cullmann@kde.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [https://mail.kde.org/mailman/listinfo/kwrite-devel The Kate mailing list]&lt;br /&gt;
&lt;br /&gt;
=== KDevelop &amp;amp; Quanta ===&lt;br /&gt;
&lt;br /&gt;
==== Extend KDevelop's snippet support ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' Extend KDevelop's snippet support, see [http://bugs.kde.org/show_bug.cgi?id=106165 RFE 106165] for a detailed description (this proposal has been confirmed by popular vote).&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a pre-requirement. KDE and Qt skills will required. Likewise, familiarity with XML is probably required, too in order to provide a flexible, multi-platform file format for data storage and -exchange.&lt;br /&gt;
&lt;br /&gt;
'''Suggested Approach:''' given that the envisioned functionality would probably be interesting to a rather large user base/audience, one should consider using a library-oriented approach, where key-functionality is provided in a fashion that facilitates standalone library-deployment, so that other OSS projects (i.e. other IDE projects) may eventually employ the corresponding library to add &amp;quot;snippet&amp;quot;-support, too.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' none yet&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [mailto:kdevelop-devel@kdevelop.org KDevelop mailing list]&lt;br /&gt;
&lt;br /&gt;
==== Implement foundations for KDevelop4 Ruby language support ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' Ruby language and Rails web development tool is rapidly gaining popularity. The goal of this project is to implement the foundations for the best possible Ruby/Rails support in KDevelop.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' advanced knowledge of C++ is a pre-requirement. KDE and Qt skills are desired but not required. At least basic knowledge of parsing theory (lexers, LL parsers, AST's) is necessary as well. This is a challenging project.&lt;br /&gt;
&lt;br /&gt;
'''Brief Explanation:''' There're beginnings of Ruby support for KDevelop4 already. So the Ruby parser would be finished first and then definition-use chain for would be implemented. Those would allow to build extended code highlighting, navigation and problem reporting. The design for Ruby code completion would also be in the scope of this project.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
# Ruby parser with tests covering most of the language features&lt;br /&gt;
# DUChain builder for class/method definitions and their usages&lt;br /&gt;
# Advanced Ruby code highlighter and problem reporter&lt;br /&gt;
# Working and well-tested Ruby language support plugin&lt;br /&gt;
# Design for Ruby code completion&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [mailto:adymo@kdevelop.org Alexander Dymo]&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [mailto:kdevelop-devel@kdevelop.org KDevelop mailing list]&lt;br /&gt;
&lt;br /&gt;
=== Kopete ===&lt;br /&gt;
&lt;br /&gt;
=== Amarok ===&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' [http://amarok.kde.org/ Amarok website]&lt;br /&gt;
&lt;br /&gt;
==== Tightening of Web Service Integration ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Amarok's motto is ''Rediscover your music''. Since listening to music can be a somewhat uninteresting experience, we try to enhance this aspect in a number of ways: &lt;br /&gt;
&lt;br /&gt;
:* Wikipedia information retrieval&lt;br /&gt;
:* Lyric downloads&lt;br /&gt;
:* Cover Art&lt;br /&gt;
:* Music suggestions&lt;br /&gt;
&lt;br /&gt;
etc, etc. I'm sure you are more than familiar with the 'omg-im-going-to-wet-myself-this-is-so-cool' experience that you have at least once experienced.&lt;br /&gt;
&lt;br /&gt;
We would like to see some sort of enhancement to meta-information which can be displayed to the user. Some ideas that come to mind may include:&lt;br /&gt;
:* Upcoming concerts&lt;br /&gt;
:* Random artist trivia&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The student will come up with a set of web-service enhancements and will implement them so that they integrate tightly with the final Amarok 2.0 interface and design goals.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a pre-requirement. Other useful skills, but not mandatory are:&lt;br /&gt;
:* Qt experience&lt;br /&gt;
:* Web service skills, such as SOAP, XML/DOM structures etc&lt;br /&gt;
:* A keen eye for usability and the difference between features and benefits&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Seb Ruiz &amp;lt;me@sebruiz.net&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [https://mail.kde.org/mailman/listinfo/amarok The Amarok mailing list]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Integrate Additional Music Store or Streaming Music Service ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Since the introduction of the integrated Magnatune.com music store in Amarok, there has been many proposals for other stores or services that could be integrated in a simmilar way. In the process of working towards Amarok 2.0, a new framework for adding such services without cluttering the interface has been proposed and the Magnatune store has been ported to this framework. Adding a new store or service is a nice way of getting into coding on Amarok at is fairly easy to approach witout knowing all the intricate details of Amaroks inner workings.&lt;br /&gt;
&lt;br /&gt;
There are several types of services that could be of interest:&lt;br /&gt;
&lt;br /&gt;
:* DRM free music stores ( preferably with good, full length, previews )&lt;br /&gt;
:* Streaming audio content services ( Again, no DRM is a must )&lt;br /&gt;
:* Live recording archives&lt;br /&gt;
:* Most likely a 100 other kinds of sites that I have not thought of...&lt;br /&gt;
&lt;br /&gt;
The service chosen will have to be legal, and the service must agree to the integration taking place.&lt;br /&gt;
&lt;br /&gt;
There are currently no concrete agreements in place with other services, so this is very much a &amp;quot;bring your own idea&amp;quot; project, which both makes it a bit harder to get started, but also more rewarding.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The student reaches an agreement with a music store/service/whatnot and integrates its service into Amarok. Some effort would most likely also be spent on helping to mature the service framework.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a pre-requirement. Other useful skills, but not mandatory are:&lt;br /&gt;
:* Qt experience&lt;br /&gt;
:* Web service skills, such as SOAP, XML/DOM structures etc&lt;br /&gt;
:* A keen eye for usability and the difference between features and benefits&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Nikolaj Hald Nielsen &amp;lt;nhnFreespirit@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [https://mail.kde.org/mailman/listinfo/amarok The Amarok mailing list]&lt;br /&gt;
&lt;br /&gt;
=== okular ===&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' okular is a KDE 4 document viewer. http://www.okular.org&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [https://mail.kde.org/mailman/listinfo/okular-devel The okular mailing list]&lt;br /&gt;
&lt;br /&gt;
==== Improve the rendering of PDF patterns ====&lt;br /&gt;
&lt;br /&gt;
'''Explanation:''' okular uses the [http://poppler.freedesktop.org Poppler library] to render the PDF files. Some files with complex patterns may take even minutes to render, while with Acrobat Reader just a couple of seconds. &lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' One needs to improve the Poppler library code that handles rendering of PDF files with patterns, making the pattern rendering faster with no drawbacks.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a requirement. Qt4 is strongly suggested too. Graphics and PDF konwledge are strongly suggested as well, but not mandatory.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Albert Astals Cid &amp;lt;aacid@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Improve the presentation mode ====&lt;br /&gt;
&lt;br /&gt;
'''Explanation and Expected results:''' okular has a presentation mode for displaying documents on the screen in a way similar to a presentation application (think about KPresenter, OpenOffice.org Impress). Currently, the mode can just display only a single page, at the maximum size allowed by the screen. The idea is to extend the presentation mode by adding:&lt;br /&gt;
* zooming support and pan mode&lt;br /&gt;
* facing mode&lt;br /&gt;
* missing PDF transitions, like Fly, Push, Cover, Uncover, Fade&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of C++ and Qt4 is a requirement. KDE 4, graphics and PDF konwledge are strongly suggested as well, but not mandatory.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Albert Astals Cid &amp;lt;aacid@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Improve the annotation support ====&lt;br /&gt;
&lt;br /&gt;
'''Explanation and Expected results:''' one of the okular's goals is to support the annotations, mainly coming from PDF documents (but also from DjVu and ODT documents). As the support is not yet complete, some ideas could be:&lt;br /&gt;
* adding the visual editing features (e.g. mouse click to visually select, drag to move around or resize, etc)&lt;br /&gt;
* adding support for more kind of annotations (e.g. Caret, Watermark, etc)&lt;br /&gt;
* improve the annotation toolbar&lt;br /&gt;
* better support for text and line annotation drawing&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a requirement. Qt4 is strongly suggested too. Graphics and PDF konwledge are strongly suggested as well, but not mandatory.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Albert Astals Cid &amp;lt;aacid@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3D artwork support ====&lt;br /&gt;
&lt;br /&gt;
'''Explanation and Expected results:''' the PDF formats allow the embedding of 3D artwork in documents. The idea is to start supporting this kind of artwork, and start displaying them on the document. What is required to do is:&lt;br /&gt;
* basic reading support&lt;br /&gt;
* basic displaying of the artwork on the document (thus creating a 3D view)&lt;br /&gt;
* basic interaction with the 3D artwork (mouse or document actions)&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of C++ is a requirement. Qt4 is strongly suggested too. Graphics and PDF konwledge are strongly suggested as well, but not mandatory.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Albert Astals Cid &amp;lt;aacid@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Other Applications ===&lt;br /&gt;
&lt;br /&gt;
==== KBugBuster ====&lt;br /&gt;
&lt;br /&gt;
KBugBuster is a native KDE client for the bug tracking system Bugzilla. It allows to browse, search and view bug reports and make modifications to them. It provides features which the web interface can't provide like an offline mode.&lt;br /&gt;
&lt;br /&gt;
One potential task would be to make KBugBuster work with the XML-RPC interface of Bugzilla. This would make access to Bugzilla more robust and make it possible to better support the editing of bug reports.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Cornelius Schumacher &amp;lt;schumacher@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Knoware ====&lt;br /&gt;
&lt;br /&gt;
Knoware is previous SOC project. It creates a system that collates bug reports as well as anonymous system specs offered by users. It provides a statistical way of matching up bugs to likely culprits in a system or configuration so that developers can get a better handle on what the problem likely as as well as informing users of KDE what the potential pitfalls of their current system could be.&lt;br /&gt;
&lt;br /&gt;
One potential task would be to document the current system for further development. Another could be porting the curent code to Qt4.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
==== Application User Interface Test System ====&lt;br /&gt;
&lt;br /&gt;
There are a couple of tools available for Qt / KDE that allow testing of applications - squish and kdexecutor. Both are binary only, and are specific to the systems that they are built on.&lt;br /&gt;
&lt;br /&gt;
It would be useful to have an open source tool that allowed us to test applications in a scripted way. Similar open source tools include Dogtail and LDTP, which use the accessibility interfaces in Gnome. &lt;br /&gt;
&lt;br /&gt;
There are arguments for and against using accessibility - it might be a lot more useful to implement a separate system, using some of the Qt4 specific features including QMetaObject. Qt4 has a nice set of hooks, and QTestLib shows how they can be implemented. However instead of requiring specific code in the application (as done by QTestLib), it would be more flexible to use LD_PRELOAD and a small interface library.&lt;br /&gt;
&lt;br /&gt;
'''More discussion:''' Brad Hards &amp;lt;bradh@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oxygen ===&lt;br /&gt;
&lt;br /&gt;
=== Decibel ===&lt;br /&gt;
&lt;br /&gt;
You can find a list of Decibel related ideas in the [https://services.brucherseifer.net/dbwiki/index.php/Project_Ideas Decibel Wiki]&lt;br /&gt;
&lt;br /&gt;
=== Usability ===&lt;br /&gt;
==== A new design for contextual help (Whatsthis) ====&lt;br /&gt;
&lt;br /&gt;
Implement Ellen Reitmair's, Olaf Schmidt's, Philip Rodrigues' plan for a new infrastructure for contextual help.&lt;br /&gt;
[http://www.userbrain.de/whatsthis/ideas_whatsthis_january06_v1.3.pdf ideas_whatsthis_january06_v1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
=== Infrastructure ===&lt;br /&gt;
&lt;br /&gt;
* A way to make bugzilla help in finding duplicated bugs.  could be some kind of 'suggested related bugs'&lt;br /&gt;
&lt;br /&gt;
=== KOffice ===&lt;br /&gt;
All KOffice projects have common contact information and background info;&lt;br /&gt;
You can read documents on [http://www.koffice.org www.koffice.org] and [http://wiki.koffice.org wiki.koffice.org], various proposals will reference pages on the wiki as thats the main design 'scratch pad' for the developers of KOffice.&lt;br /&gt;
Contact information;  '''IRC''': irc.kde.org channel #koffice  '''Mail''': sent mail to the koffice mailinglist. Info [http://www.koffice.org/contact/ here]&lt;br /&gt;
&lt;br /&gt;
==== Collaborative editing in KOffice apps ====&lt;br /&gt;
See [http://wiki.koffice.org/index.php?title=Collaboration Collaboration].  We don't expect a fully working implementation, as it is most probably too big a project.  So please guestimate what you want to work on and finish.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== Rulers and Grid in KOffice apps ====&lt;br /&gt;
All applications in KOffice need a grid.  A grid is a raster that will be drawn on top of all content on the canvas.  This will tightly be integrated with rulers and guides. [http://wiki.koffice.org/index.php?title=Rulers_And_Grid Grids Framework].  &lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== Improve OpenDocument compatibility in KOffice apps ====&lt;br /&gt;
Specifically mentioned here are KSpread, KPresenter, KChart or KFormula&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== A 3D diagram flake-shape using lib-Eigen ====&lt;br /&gt;
Lib [http://websvn.kde.org/trunk/kdesupport/eigen Eigen] has code to do all the hard lifting for 3D calculations. But little visualisation code.  Build on top of that and be able to show data in a 3D manner into a [http://wiki.koffice.org/index.php?title=Flake Flake] shape.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== KWord master document ====&lt;br /&gt;
This maybe in combination with book-files, which combine a set of individual documents to one book with continues numbering/etc. See [http://wiki.koffice.org/index.php?title=KWord/Master_Documents Usecase]&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== Text-tool plugins for KOffice apps ====&lt;br /&gt;
KOffice has a generic text-tool.  Which will allow KWord to show all the complexity of text needed for word processing and DTP while other KOffice apps can reuse the component as well.  The text tool (based on [http://wiki.koffice.org/index.php?title=Flake Flake]) has a plugin structure allowing external development to create extra functionality.  A tutorial on how to build one will be written by the KOffice developers soon.&lt;br /&gt;
# bookmarks plugin.&lt;br /&gt;
# Uppercase Text. Alter the text to be all lowercase, Title Cased, or Capitalised.&lt;br /&gt;
# Replace word. Use a Thesaurus to replace the text with a new one. &amp;lt;br&amp;gt; As a non-standard example what about replace-word with a texting-Language. There are many engines on the web that can replace normal text with some sort of funny version. &lt;br /&gt;
# Colorization plugin. For those that publish pieces with sourcecode, being able to colorize text is a really useful tool.&lt;br /&gt;
# An optional plugin that shows a word count in a docker updated continuesly.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== A Flake-plugin that works on vector shapes ====&lt;br /&gt;
It should be a tool, like the gradient tool or the color-picking tool. (see [http://wiki.koffice.org/index.php?title=Flake Flake])&lt;br /&gt;
The tool would give you a set of brushes and each brush is defined as an outline only.  So you'd have a 10pt wide circle as one brush, and a heart shaped brush as another. The tool will allow the user to 'stamp' or paint using these brushes and can use the Qt4.3 binary path operations to modify the vector shape.&lt;br /&gt;
# Use case:  I get a vector image of snow man and I want to paint a nose and two eyes on it like it were a pixel-based image.&lt;br /&gt;
# Use case: I want to draw my signature as a vector shape.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== Extend the ShapeSelector which is used by KOffice apps ====&lt;br /&gt;
Extend the [http://wiki.koffice.org/index.php?title=ShapeSelector ShapeSelector] to do several more things;&lt;br /&gt;
* make it listen to the clipboard and show a visual representation of the current state.&lt;br /&gt;
* make it possible to drag something (a shape or just some text) off of the canvas onto the shapeSelector where it then gets stored. Also between sessions.&lt;br /&gt;
* make it possible to save a selection of items in the shapeSelector and save them on disk as one 'bundle' so I can send that to someone else.&lt;br /&gt;
* make it possible to load such a bundle from disk.&lt;br /&gt;
* make it possible to connect to a remove storage (a webpage or a samba share etc) using kio on startup and download changed bundles to show in the shape-selector.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== Add accessibility support to Flake ====&lt;br /&gt;
Using the Qt framework for accessibility, make it possible for the text tool and perhaps other tools to be accessible.  Which means that a blind user can use KWord.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== Add support for better tables in KWord ====&lt;br /&gt;
In KOffice2.0 tables as we know it in 1.x has been removed. The tables for KOffice2 have to be based on the text engine (qt-scribe) which already knows about html-style-tables. The SoC proposal is to extend this and add tables support to KWord again using the ODF specification for the feature list that is required of tables.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== KWord Scripting ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' KWord comes with a [http://wiki.koffice.org/index.php?title=KWord/Scripting Scripting Plugin] based on [http://kross.dipe.org Kross]. The plugin provides a clean interface to offer access to the KWord functionality from within scripting backends.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Improve the current scripting plugin.&lt;br /&gt;
* Evaluate what is needed or what a script could need and implement it to earn a powerful scripting backend for KWord 2.0.&lt;br /&gt;
* The current design may need to be refactored cause the scripting API should be as simple as possible.&lt;br /&gt;
* Provide sample scripts to demonstrate what's possible and Unittests for regression testing.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of C++/Qt, experience with word-processing&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Sebastian Sauer &amp;lt;mail@dipe.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Improve Kexi Data Import/Export ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Currently Kexi allows importing CSV files into an existing database, and converting MySQL/PostgreSQL/MS Access databases into Kexi databases.&lt;br /&gt;
&lt;br /&gt;
The aim of this project is to provide plugin(s) that import from more database backends/formats.&lt;br /&gt;
&lt;br /&gt;
You can select a backend you like to implement migration for:&lt;br /&gt;
 &lt;br /&gt;
* HSQLDB - the OpenOffice.org DB backend (quite important to have)&lt;br /&gt;
* ODBC&lt;br /&gt;
* Paradox&lt;br /&gt;
* DBase (e.g. using http://www.anubisnet.de/products/dbf )&lt;br /&gt;
* MS SQL Server (e.g. using http://www.freetds.org/ )&lt;br /&gt;
* Firebird - pending licence checks&lt;br /&gt;
&lt;br /&gt;
For the ODBC driver, a migration plugin and a backend plugin should be provided. For Paradox, only a migration plugin is required, although this will require modifying the migration framework to allow more than one file to be selected as the source database (i.e. the database to be imported).&lt;br /&gt;
&lt;br /&gt;
Both a migration plugin and a backend plugin could be provided for HSQLDB, which should be implemented using JNI to invoke JDBC methods in the HSQLDB library. &lt;br /&gt;
&lt;br /&gt;
In any case, migration plugins are simpler to implement than direct access plugins (drivers), so these can be developed first.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of C++, (knowledge of Qt and experience with a given database format/backend is recommended)&lt;br /&gt;
&lt;br /&gt;
'''More info:'''&lt;br /&gt;
*[http://kexi-project.org/wiki/wikiview/index.php?GoogleSummerOfCode2006_DBaseMigrationPlugin &amp;quot;DBase Migration Plugin for Kexi&amp;quot; proposed by Jonathon Manning last year]&lt;br /&gt;
*[http://kexi-project.org/wiki/wikiview/index.php?GoogleSummerOfCode2006_ParadoxAndHSQLAccess &amp;quot;Paradox &amp;amp; HSQL access for Kexi&amp;quot; proposed by Joseph Wenninger last year]&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Jaroslaw Staniek &amp;lt;js@iidea.pl&amp;gt;, Sebastian Sauer &amp;lt;mail@dipe.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [https://mail.kde.org/mailman/listinfo/kexi-devel kexi-devel]&lt;br /&gt;
&lt;br /&gt;
==== Kexi Web Forms ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Web Forms allow to read-only or read-write access to database projects created with Kexi. It is optional feature for uses where client has no Kexi installed for any reason. The fact that the Web Forms will use Web standards, adds another advantage over competitors like MS Access (which uses proprietary Windows-only ActiveX bindings).&lt;br /&gt;
&lt;br /&gt;
Proposed solution is to develop a small standalone web server. It is probably already written in C++ or C by FOSS community. Good examples are lighttpd - http://www.lighttpd.net/ &lt;br /&gt;
and (being already in KDEnetwork module) KPF - http://rikkus.info/kpf.html.&lt;br /&gt;
&lt;br /&gt;
The web serwer would be dynamically linked to kexidb and thus can access Kexi databases via universal KexiDB API, and create HTML content on demand as an answer to HTTP requests.&lt;br /&gt;
&lt;br /&gt;
For alternative solution see &amp;quot;Alternative solution for Kexi forms using PHP&amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of C++ and HTTP/web standards, (knowledge of Qt and experience with a given database format/backend is recommended)&lt;br /&gt;
&lt;br /&gt;
'''More info:''' [http://jacek.migdal.pl/gsoc/ Solution proposed by Jacek Migdal last year]&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Jaroslaw Staniek &amp;lt;js@iidea.pl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [https://mail.kde.org/mailman/listinfo/kexi-devel kexi-devel]&lt;br /&gt;
&lt;br /&gt;
==== Alternative Solution for Kexi Forms Using PHP ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Create a Kexi plugin generating PHP code saving it directy to the filesystem. This will require Apache (or other PHP-compatible web server) to be present and configured, and also will require the plugin to be packaged with a script that will install appropriate tools that allow r/w accessing the Apache/php subdirs.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of PHP, web standards and C++, (knowledge of Qt is recommended)&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Jaroslaw Staniek &amp;lt;js@iidea.pl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [https://mail.kde.org/mailman/listinfo/kexi-devel kexi-devel]&lt;br /&gt;
&lt;br /&gt;
== Notes on editing this page ==&lt;br /&gt;
&lt;br /&gt;
Before making any modifications, please '''log in''' to Techbase. This will help us track who is contributing to the ideas.&lt;br /&gt;
&lt;br /&gt;
When making modifications to existing ideas, please consider whether you're changing it more fundamentally or just superficially. If your changes are substantial, you probably have an entirely new idea. Similarly, if your idea is modified and you feel it no longer reflects your original thought, please split the idea in two, restoring yours.&lt;br /&gt;
&lt;br /&gt;
Please use the [[Talk:Projects/Summer of Code/2007/Ideas|talk page]] if you want to discuss an idea.&lt;br /&gt;
&lt;br /&gt;
Finally, do '''not''' delete ideas without a reason for doing so (like, for instance, being contrary to KDE ideals, being completely unrelated to KDE, being unfeasible, etc.) -- you may want to state in the [[Talk:Projects/Summer of Code/2007/Ideas|talk page]] why you removed the idea.&lt;br /&gt;
&lt;br /&gt;
Do '''not''' re-add ideas that were removed without discussing first with the developers of the target application.&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Summer_of_Code/2007/Ideas</id>
		<title>Projects/Summer of Code/2007/Ideas</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Summer_of_Code/2007/Ideas"/>
				<updated>2007-03-15T21:43:39Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* KWord master document */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is an open list for ideas for the 2007 edition of [http://code.google.com/soc Google Summer of Code]. It will remain editable while the submission process is open.&lt;br /&gt;
&lt;br /&gt;
This list is not exhaustive. It is just a collection of some ideas. To get further ideas, you can also look at our [http://wiki.kde.org/tiki-index.php?page=KDE%20Google%20SoC%202006%20ideas list of ideas for the year 2006]&lt;br /&gt;
&lt;br /&gt;
Before proceeding, please read the [[Projects/Summer of Code/2007/Participation|participation instructions]]. They are useful for students and developers alike. Before editing this page, please take a look at the [[#Notes on editing this page|Notes on editing this page]] section at the end.&lt;br /&gt;
&lt;br /&gt;
== Past ideas ==&lt;br /&gt;
&lt;br /&gt;
You may want to take a look at the [http://wiki.kde.org/tiki-index.php?page=KDE%20Google%20SoC%202006%20ideas ideas page for 2006]. Some of the ideas there are still valid today.&lt;br /&gt;
&lt;br /&gt;
== Project ideas ==&lt;br /&gt;
&lt;br /&gt;
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at. &lt;br /&gt;
&lt;br /&gt;
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.&lt;br /&gt;
&lt;br /&gt;
When adding an idea to this section, please try to include the following data:&lt;br /&gt;
:* if the application is not widely known, a description of what it does and where its code lives&lt;br /&gt;
:* a brief explanation&lt;br /&gt;
:* the expected results&lt;br /&gt;
:* pre-requisites for working on your project&lt;br /&gt;
:* if applicable, links to more information or discussions&lt;br /&gt;
:* mailing list or IRC channel for your application/library/module&lt;br /&gt;
:* your name and email address for contact (if you're willing to be a mentor)&lt;br /&gt;
&lt;br /&gt;
=== KDE Libs ===&lt;br /&gt;
&lt;br /&gt;
==== KPassivePopup ====&lt;br /&gt;
''' Project Information:''' [http://api.kde.org/cvs-api/kdelibs-apidocs/kdeui/html/classKPassivePopup.html KPassivePopup] is the class that displays information next to taskbar icons, system tray icons or windows without interrupting the user. It is used both directly and by KNotify and is part of libkdeui.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Convert KPassivePopup to use QSvg for the frame etc. this would allow it to be much more flexible in its visual appearance and could allow us to eliminate the various custom implementations that are floating around. This would include examining these forks and ensuring the same functionality could be cleanly incorporated.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The intended result would be a single implementation of KPassivePopup that could be reused without copying code by applications such as Kopete that currently maintain their own versions.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' A prequisite would be knowledge of Qt/KDE and the ability to setup a KDE build environment. Knowledge of SVG would obviously be a big help.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Richard Moore &amp;lt;rich@kde.org&amp;gt;, Aaron Seigo &amp;lt;aseigo@kde.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Solid ====&lt;br /&gt;
&lt;br /&gt;
Solid is the KDE hardware abstraction layer, that enables KDE programs to get consistent results when running on different platforms.&lt;br /&gt;
&lt;br /&gt;
* Plasma integration with Solid:  Plasma uses the term 'data engine' to describe inputs to Plasma applets ('plasmoids').  Multiple applets may make use of a data engine.  One task would be to write data engines for Solid interfaces for hardware status monitoring and control via Plasma.&lt;br /&gt;
&lt;br /&gt;
* Media player support in Solid:  Currently there is no high level support for portable media player devices in Solid.  Applications such as Amarok have had to develop their own media player abstraction layers.  Having this functionality in Solid would create exciting possibilities, for example, adding podcasts directly to your media device from a browser, or storing files received via IM directly on the media device.&lt;br /&gt;
&lt;br /&gt;
* Scanner support in Solid:  On Linux, scanner support uses the SANE library.  To make scanners accessible from KDE applications on other platforms, a Solid wrapper to the most frequently used scanner functions and a SANE backend would make a good Summer of Code project for a student interested in imaging on Linux.&lt;br /&gt;
&lt;br /&gt;
==== Phonon ====&lt;br /&gt;
&lt;br /&gt;
==== KHTML ====&lt;br /&gt;
&lt;br /&gt;
==== KJS - Scripting Modules ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' KJS is KDE's JavaScript engine that was originally developed for the Konqueror Web browser. It as a light-weight, standalone library that can easily be embedded into other applications to make them scriptable.&lt;br /&gt;
&lt;br /&gt;
Besides being restricted to running in the sandbox of an application usage for text and file processing or other administrative or server side tasks in a command line interpreter are thinkable. Consider what made e.g. Perl successfull. What's lacking are modules providing the necessary functions.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' The project would start out with gathering an overview of typical functions found in other scripting languages like Perl, Python and Tcl. The most important ones would then be selected and implemented in (at first) C++ modules that are dynamically loaded by the KJS command line interpreter.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' A set of low-level modules like File, CGI, JSON or similar with a documented set of constructors, functions and properties. They should form the base for pure JavaScript modules to be build on top.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Some C++ programming knowledge is required. Knowledge about other scripting languages like Python and Perl would be advantageous.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Harri Porten &amp;lt;porten@kde.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Sonnet ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' Sonnet will be the future grammar, spell-checking and language detection framework in kde. &lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Make kateparts compatible and integrated with Sonnet framework.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* Be allowed to use inline spell-checking in kile (latex front-end based on kateparts) or in the comments of a source file.&lt;br /&gt;
* Would be wonderful if the grammar and language detection also work with latex files.&lt;br /&gt;
 &lt;br /&gt;
'''Knowledge Pre-Requisite:''' I don't konw but probably C++, parsers, kate parts and language studies.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
==== Kross ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' [http://kross.dipe.org Kross] is a modular scripting framework that provides a complete framework to embed scripting interpreters like Python, Ruby and KDE JavaScript transparently into native applications to bridge the static and dynamic worlds together.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' While Kross does already provide access to Python, Ruby and KDE JavaScript, Java is missing. With a Java backend we could provide access to JDBC databases, Hibernate, Sandboxes and all the other goodies.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* Target is to implement a Java backend and offer Java as another supported scripting backend in Kross.&lt;br /&gt;
* Propably just bridge or at least provide access to QtJambi.&lt;br /&gt;
* Unittests and clean code :)&lt;br /&gt;
 &lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of C/C++, be able to get into the dark details of embedding Java.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Sebastian Sauer &amp;lt;mail@dipe.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== KDEPrint -- UI redesign ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' [http://printing.kde.org KDEPrint] is the well known and very advanced printing platform common to all KDE applications.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Redesign user interfaces related to printing. Improve usability.&lt;br /&gt;
&lt;br /&gt;
''' Expected results:''' Produce an improved set of graphic interfaces to KDE's printing technology, based on usability reports already available and using new (original) usability ideas.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C++, KDE/Qt programming, experience with design and creation of usable UI.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Cristian Tibirna &amp;lt;tibirna@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== KDEPrint -- porting to CUPS &amp;gt; 1.2 ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' [http://printing.kde.org KDEPrint] is the well known and very advanced printing platform common to all KDE applications.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Port the current KDEPrint code to supporting CUPS later than 1.2, both in KDE-3.5 and KDE-4 branches.&lt;br /&gt;
&lt;br /&gt;
''' Expected results:''' Based on the already very well thought out interface to CUPS-1.1, work is necessary for supporting new features and following bug fixes in the latest incarnation of CUPS, the most important backend of KDEPrint.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C, C++, KDE/Qt programming, writing code following specifications.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Cristian Tibirna &amp;lt;tibirna@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== KDEPrint -- porting to Qt-4.3/KDE-4 ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' [http://printing.kde.org KDEPrint] is the well known and very advanced printing platform common to all KDE applications.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Port the KDEPrint code of KDE-4 branch to latest Qt-4/KDE-4 libraries technologies.&lt;br /&gt;
&lt;br /&gt;
''' Expected results:''' This task requires a thorough analysis of technologies used by KDEPrint in the previous (KDE-3.5) incarnation and replacement as needed with new or improved equivalents from Qt-4/KDE-4. Use of the new intercommunication technologies (D-Bus) and new notification technologies is required.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C, C++, KDE/Qt programming, willingness to learn D-Bus as well as KDE-4 APIs.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Cristian Tibirna &amp;lt;tibirna@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== KDEPrint -- add support for LinuxPrinting's on-line drivers query ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' [http://printing.kde.org KDEPrint] is the well known and very advanced printing platform common to all KDE applications.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Add support to KDEPrint for the new [http://www.linux-foundation.org/en/OpenPrinting/Database/Query OpenPrinting Database] which allows on-line search for new (locally unavailable) drivers for printers during printer installation.&lt;br /&gt;
&lt;br /&gt;
''' Expected results:''' This task requires a good learning of the OpenPrinting Database Querying interface. Getting accustomed with KDEPrint's printer installation algorithms is also required. Target platform is KDE-4 but time permitting, a port to KDE-3.5 would be welcome.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C, C++, KDE/Qt programming&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Cristian Tibirna &amp;lt;tibirna@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== KIConLoader: SVG Render Cache ====&lt;br /&gt;
''' Project Information:''' {{class|KIconLoader}} is the class the fetches icons from disk on demand and returns pixmap data for use on screen. This project would add an on-disk binary cache to be used for SVG icons.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' [http://aseigo.blogspot.com/2007/03/efficient-scallable-icons.html See my blog entry here for a description of the problem].&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' A transparent cache that would increase the efficiency of SVG icon usage at runtime, with the possibility of adding runtime composition capabilities to {{class|KIconLoader}}.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' A prequisite would be the ability to setup a KDE build environment. Qt/KDE programming knowledge is not a high requirement for this task, though the student will obviously be picking some of that up as they go. Experience with similar projects involving caching would be good.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Aaron Seigo &amp;lt;aseigo@kde.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
('''Note:''' KIconLoader would benefit from a generic cache, not limited only to SVG but usable also for PNG icons. See the second paragraph of the benefits section in the blog entry for reasons [less disk seeking]. I think it would make sense to change this to a generic cache for KIconLoader. Lubos Lunak &amp;lt;l.lunak@kde.org&amp;gt; )&lt;br /&gt;
&lt;br /&gt;
=== KDE Base applications ===&lt;br /&gt;
&lt;br /&gt;
==== Konqueror - userscripts ====&lt;br /&gt;
''' Project Information:''' The goal of this project would be to implement and integrate into KDE4 a [http://www.konqueror.org/ Konqueror] equivalent of FireFox's [http://en.wikipedia.org/wiki/Greasemonkey Greasemonkey] plugin to allow installing and running user scripts. The project could start of from this [http://www.kde-apps.org/content/show.php?content=51482 existing GPL-ed code].&lt;br /&gt;
&lt;br /&gt;
It seems that someone is already well on their way to completing this already: http://namshub-kde.blogspot.com/2007/01/more-work-on-konquerors-user-scripts.html&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' A Greasemonkey equivalent for Konqueror that allows (de)installing and running Greasemonkey compatible user scripts.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++ programming skills&lt;br /&gt;
&lt;br /&gt;
==== Konqueror &amp;amp; Dolphin - file manager ====&lt;br /&gt;
&lt;br /&gt;
* Ability to extract files from RPM packages&lt;br /&gt;
&lt;br /&gt;
==== Plasma: icon placement ====&lt;br /&gt;
'''Brief explanation:''' Ordering the icons on the desktop has always been a pain for the users. They invent a certain arrangement (images top left, devices lower right, ...) and try to stick with it. Whenever they drop something to the Desktop folder in their filemanager, or when they plug in a new device the icon appears at an arbitrary location. Using clustering techniques and meta information about the existing icons, it would be possible to determine the most useful location for a new icon on the desktop.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Improve the icon placing strategy of kdesktop (plasma) using clustering techniques.&lt;br /&gt;
* Try various clustering algorithms ([http://en.wikipedia.org/wiki/Data_clustering Wikipedia Data Clustering] might help) and choose the one most suitable for the task&lt;br /&gt;
* Implement an icon placement strategy in plasma, using the chosen clustering algorithm.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Familiarity with clustering algorithms or motivation to study them, C++/Qt coding skills&lt;br /&gt;
&lt;br /&gt;
==== KWin -- Tiling Support ====&lt;br /&gt;
''' Project Information:''' [http://websvn.kde.org/trunk/KDE/kdebase/workspace/kwin/ KWin] is the KDE window manager, an application responsible for managing all windows.&lt;br /&gt;
&lt;br /&gt;
''' Brief explananation:''' Some window managers (e.g. Ion or wmii) have the ability to divide the screen to smaller sections which make it simpler to work with several windows at the same time (window maximize only to its tile, etc.).&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Implemented tiling support in KWin.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:'''&lt;br /&gt;
:# C++, Qt/KDE (KWin doesn't use much functionality from Qt and KDE libraries besides basic classes though)&lt;br /&gt;
:# X11/Xlib knowledge beneficial. X11 parts are mostly abstracted in KWin, but it's possible at least little knowledge might be required (it should be possible to learn necessary things while working on the project though).&lt;br /&gt;
:# Multiple-monitor (Xinerama) setup beneficial. KWin already has Xinerama support, parts of which possibly could be used as a base for tiling support. With tiling support implemented, Xinerama support should be implemented as tiles representing Xinerama screens.&lt;br /&gt;
&lt;br /&gt;
'''References:'''&lt;br /&gt;
:# Wikipedia window manager [http://en.wikipedia.org/wiki/Window_manager entry]&lt;br /&gt;
:# KDE bug [http://bugs.kde.org/show_bug.cgi?id=59338 #59338]&lt;br /&gt;
:# KDE bug [http://bugs.kde.org/show_bug.cgi?id=107554 #107554]&lt;br /&gt;
:# [http://modeemi.cs.tut.fi/~tuomov/ion/ Ion]&lt;br /&gt;
:# [http://www.suckless.org/wiki/wmii wmii]&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Lubos Lunak &amp;lt;l.lunak@kde.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== KWin -- Improved Xinerama Support ====&lt;br /&gt;
''' Project Information:''' [http://websvn.kde.org/trunk/KDE/kdebase/workspace/kwin/ KWin] is the KDE window manager, an application responsible for managing all windows.&lt;br /&gt;
&lt;br /&gt;
''' Brief explanation:''' Xinerama (and various implementations known also as e.g. MergedFB or TwinView) is an X server extension that merges two or more physical monitors into one large display. KDE already provides a decent support for Xinerama, but there is still room for improvement, in particular, different monitors are linked together even in cases when it might be more beneficial to have them independent, for example with virtual desktops.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Improved Xinerama support in KDE/KWin. Specifically, making virtual desktops on different Xinerama displays independent, per [http://bugs.kde.org/show_bug.cgi?id=107302 KDE bugreport #107302], and related fixes/changes.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:'''&lt;br /&gt;
:# C++, Qt/KDE (KWin doesn't use much functionality from Qt and KDE libraries besides basic classes though)&lt;br /&gt;
:# X11/Xlib knowledge beneficial. X11 parts are mostly abstracted in KWin, but at least little knowledge will be required (it should be possible to learn necessary things while working on the project though).&lt;br /&gt;
:# Multiple-monitor (Xinerama) setup. Although it is possible to use [http://ktown.kde.org/~seli/fakexinerama/ Fake Xinerama] for making a single monitor act like a Xinerama setup, real Xinerama setup is strongly recommended.&lt;br /&gt;
&lt;br /&gt;
'''References:'''&lt;br /&gt;
:# Wikipedia window manager [http://en.wikipedia.org/wiki/Window_manager entry]&lt;br /&gt;
:# Wikipedia Xinerama [http://en.wikipedia.org/wiki/Xinerama entry]&lt;br /&gt;
:# KDE bug [http://bugs.kde.org/show_bug.cgi?id=107302 #107302]&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Lubos Lunak &amp;lt;l.lunak@kde.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Strigi: chemistry and biology support ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' [http://www.vandenoever.info/software/strigi/ Strigi] is a promosing alternative to other desktop&lt;br /&gt;
search tools, like Beagle/Kerry. It has a plugin architecture that allows writing indexing plugins for a specific area, or specific enhanced purposes. Available are  both inline plugins (written in C++), as well as plugins that call programs written in other languages via the command line. Strigi is showing progress towards integration to semantic desktop ideas, as in the [http://nepomuk-kde.semanticdesktop.org/xwiki/bin/view/Main/ Nepomuk] project. This allows chemical information to be semantically marked up, and easily retrieved.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' The idea of this project is to integrate chemistry and biology knowledge into the KDE desktop, by writing chemistry and biology aware plugins for Strigi. Exact molecule searching on the hard disk will be supported via the [http://www.iupac.org/InChI InChI]. For the rest, normal free text searching will do fine for now. Generation of InChI's will be done via [http://openbabel.sf.net/ OpenBabel], for files supported by the [http://chemical-mime.sourceforge.net/ Chemical MIME]'s (which has existing KDE support) and [http://freshmeat.net/projects/kfile_chemical/?branch_id=60776&amp;amp;release_id=231404 kfile-chemical] (which is available for KDE3 and KDE4). Optionally, the student can incorporate the chemical text mining tool [http://wwmm.ch.cam.ac.uk/wikis/wwmm/index.php/Oscar3 OSCAR3] developed in Cambridge, UK, to extract InChI's from text documents, like PDF, HTML, etc. Here Strigi's jstream technology come in handy, as it will provide a plain text version for all those formats. Extraction of biochemical information is much easier, as these files commonly plain text already.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Strigi plugins that: &lt;br /&gt;
:# extract meta data for (bio)chemical files defined by the Chemical MIMEs, via the kfile-chemical kfile plugins, &lt;br /&gt;
:# process files with a (subset of) (bio)chemical MIME with OpenBabel to generate an InChI for indexing, &lt;br /&gt;
:# (optionally) use OSCAR3 to process plain text and create InChIs for molecules found in that text. Additionally, the student is invited to propose a useful ontology for marking up the extracted chemical and biological information.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of C++ is a requirement, as is high school education in chemistry and biology.&lt;br /&gt;
&lt;br /&gt;
'''Mentor(s):''' Carsten Niehaus &amp;lt;cniehaus@kde.org&amp;gt;,  &lt;br /&gt;
Jerome Pansanel &amp;lt;j.pansanel@pansanel.net&amp;gt;, Egon Willighagen &amp;lt;egonw@user.sf.net&amp;gt;, Jos van den Oever&amp;quot; &amp;lt;jvdoever@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [http://sourceforge.net/mail/?group_id=171000 strigi-devel@lists.sourceforge.net]&lt;br /&gt;
&lt;br /&gt;
=== KDE Edu ===&lt;br /&gt;
&lt;br /&gt;
==== A 3D Molecular Editor ====&lt;br /&gt;
''' Project Information:''' There are several 3D molecular editors, but only few open source programs, such as [http://www.uku.fi/~thassine/projects/ghemical/ Ghemical]. The GPL-ed [http://openbabel.sf.net OpenBabel project] open chemistry library has expanded its usefulness improving chemistry software. This resulted in, among other things, an application and library called [http://avogadro.sourceforge.net/ Avogadro]. [http://edu.kde.org/kalzium/index.php Kalzium] and Avogadro will soon merge a lot of code so that both apps share an underlying rendering library for molecules (using OpenGL). Avogadro already has basic &amp;quot;molecule construction&amp;quot; capabilities. The goal of this project is to extend these such to yield a 3D editor suitable for basic molecular drawing and visualization for high school and university students.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The improved application would be based on the new OpenGL based rendering code, and able to construct common organic molecules (such as [http://chem-file.sourceforge.net/data/carboxylic_acids/2R-2-1S-1_2-dihydroxyethyl-4_5-dihydroxy-furan-3-one_en.html this one]). The 3D-display code inside Kalzium will be reused and expanded to handle, for example, protein &amp;quot;ribbon&amp;quot; views, surfaces, and surface-mapped functions like electronic charge. Additional features such as configurable labels (for atoms, protein residues, etc.) and flexibility to change rendering for individual atoms or bonds would be welcome.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Basic Qt-knowledge and basic chemistry knowledge. OpenGL experience welcome.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Carsten Niehaus (cniehaus at kde dot org)&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' kalzium at kde dot org&lt;br /&gt;
&lt;br /&gt;
==== MARBLE - Adding a 2D View ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' Marble is a Qt 4-based generic virtual globe widget which is meant to integrate well with the KDE desktop to provide basic input and visualisation facilities for geographical data. Marble currently lives in http://websvn.kde.org/trunk/playground/base/marble/ and the author would like to see Marble be included with KDE-Edu soon. More information: [http://www.kdedevelopers.org/node/2429 the Marble description].&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' To be properly integrated with other applications a 2D View for Marble will be needed in addition to the preferred 3D View (e.g. for merging functionality of KGeography and Marble). Three steps are suggested:&lt;br /&gt;
:# reuse the current rendering engine in 2D mode&lt;br /&gt;
:# write an optimized approach for the 2D case and thereby refactor parts of Marble (especially the texture mapping)&lt;br /&gt;
:# include adding proper access methods for applications and the user interface&lt;br /&gt;
&lt;br /&gt;
Depending on the knowledge of the applicant the refactoring part can be extended.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' adding the 2D View Mode to Marble. Optionally, if enough time is available, integrate that view mode in another application like KGeography.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a pre-requirement. Basic highschool trigonometry knowledge would be helpful. Other useful skills, but not mandatory are:&lt;br /&gt;
* Qt experience&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Torsten Rahn &amp;lt;rahn@kde.org&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' The kde-edu mailing list: http://lists.kde.org/?l=kde-edu&amp;amp;r=1&amp;amp;b=200702&amp;amp;w=2 .&lt;br /&gt;
&lt;br /&gt;
==== MARBLE - OpenStreetMap, GPS, Almanac, improved KML support ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' Marble is a Qt 4-based generic virtual globe widget which is meant to integrate well with the KDE desktop to provide basic input and visualisation facilities for geographical data. Marble currently lives in http://websvn.kde.org/trunk/playground/base/marble/ and the author would like to see Marble be included with KDE-Edu soon. More information: [http://www.kdedevelopers.org/node/2429 the Marble description].&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' There are a lot of other interesting projects that would make a nice Google Summer of Code 2007 project each on their own. Keep in mind that all those should be introduced in an unobtrusive manner as Marble is aimed at casual users without much technical knowledge. So a larger part should be dedicated on the usability (Of course it needs to work, too ;-):&lt;br /&gt;
:# Basic support for GPS devices: Introduce an interface to support GPS tracks and / or provide support for the GPX format. Co-Mentor: Inge Wallin.&lt;br /&gt;
:# Basic support for OpenStreetMap ( http://www.openstreetmap.org ). The applicant should find a way to incrementally download data collected by the Open Street Map project. This should happen in the background.&lt;br /&gt;
:# Marble Almanac: The applicant should extend the current placemark info dialog into a module of its own that compiles together various geographical information from different sources (like the CIA fact book).&lt;br /&gt;
:# Improve KML capabilities. Currently Marble has very basic KML support already. Although Marble won't be able to support the whole range of KML tags that e.g. Google Earth supports, it would be nice if support could be made more standards compliant. The student should be able to refactor the current code and introduce an improved design.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' All these projects require that the student is a self-starter and will be able to do some research concerning the topics on their own. Beyond that you should have basic C++ knowledge. Prior Qt experience is a plus.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Torsten Rahn &amp;lt;rahn@kde.org&amp;gt;, Co-Mentor for GPS support: Inge Wallin &amp;lt;inge@lysator.liu.se&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' The kde-edu mailing list: http://lists.kde.org/?l=kde-edu&amp;amp;r=1&amp;amp;b=200702&amp;amp;w=2 .&lt;br /&gt;
&lt;br /&gt;
==== Step interactive physical simulator ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' Step is interactive physical simulator for education. It is very young program recently ported to KDE4. You can find more about it here:&lt;br /&gt;
http://edu.kde.org/step/ .&lt;br /&gt;
&lt;br /&gt;
'''Note:''' This entry is added by author of the Step who want to apply to SoC as a student himself and seeking for mentor (as suggested on kdeedu mailing list).&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' In order to be useful and to be included in kdeedu Step needs a lot more features than it currently has (it is only two month old). I propose adding the following features to Step (the list will be filtered to fit in SoC timeframe):&lt;br /&gt;
:# Simulation (StepCore library):&lt;br /&gt;
:## collision detection with friction (I hope this will be ready before summer)&lt;br /&gt;
:## movement restrictions (joints) (it can be ready too)&lt;br /&gt;
:## global error estimation&lt;br /&gt;
:## molecular dynamics (2d gas, 2d fluid)&lt;br /&gt;
:## Brownian motion&lt;br /&gt;
:## soft bodies and massive springs&lt;br /&gt;
:## API polishing&lt;br /&gt;
:# GUI (Step itself):&lt;br /&gt;
:## threading (do calculations in separate thread)&lt;br /&gt;
:## user-editable notes in experiment&lt;br /&gt;
:## units for all quantities, unit conversions&lt;br /&gt;
:## sidebar with nice descriptions for all bodies and its parameters (main properties, physical laws about it, real-world examples, ...)&lt;br /&gt;
:## custom graphics for various quantities (for example v(t) or v(x) - user     can select what exactly to plot).&lt;br /&gt;
:## custom controllers to interactively control body parameters during     simulation (for example user can add slider to control mass of the body and even assign hotkeys to it).&lt;br /&gt;
:## knewstuff for sharing experiments&lt;br /&gt;
:## tutorials (series of experiments with explanations)&lt;br /&gt;
:## GUI polishing&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
=== KDE PIM libraries and applications ===&lt;br /&gt;
&lt;br /&gt;
==== KPilot - Enhance Record based syncing ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' KPilot is the KDE application which synchronizes  Palm OS PDAs with various KDE applications, including KMail, KAddressbook and Calendar. KPilot makes use of the pilot-link library to handle the interaction between the device and the conduits. These conduits are plugins which handle the actual synchronization of the items. For more information see [http://www.kpilot.org]&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' The vast majority of KPilot's conduits are record-based in nature. This means that the logical program flow for each of the conduits is very much the same in that they will each: &lt;br /&gt;
&lt;br /&gt;
:# Open a Palm database&lt;br /&gt;
:# Retrieve either all records or just the changed records&lt;br /&gt;
:# Open a PC data store&lt;br /&gt;
:# Retrieve either all or changed records&lt;br /&gt;
:# Handle tri-directional syncing, conflict handling, and merging changed data&lt;br /&gt;
:# Then write the resolved data sets back to the PC and Palm data stores &lt;br /&gt;
&lt;br /&gt;
But the current conduit framework does not abstract this common functionality into a set of base classes as it should.  This has resulted in a lot of duplicated code throughout KPilot's conduit base, and each conduit has its own way of handling this common functionality.  Understandably, this has led to bugs in the syncing algorithms and has made maintainability of the conduits (and KPilot) a much more difficult thing than it should be.  For every conduit, the maintainer has to learn how the actual syncing is done.  To make matters worse, there are a couple of conduits which don't sync correctly because of a incomplete implementation of handling records.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The student will create an improved framework for KPilot's record-based conduits and (re)implement a (new) conduit as a proof of concept.&lt;br /&gt;
&lt;br /&gt;
:# Documentation about the syncing process of a record based conduit.&lt;br /&gt;
:## Sequence diagrams detailing sync logic for each of the major scenarios: HotSync, FullSync, Copy PC to Handheld, Copy Handheld to PC&lt;br /&gt;
:## Class diagram detailing:&lt;br /&gt;
:##* Inheritance hierarchy&lt;br /&gt;
:##* Class relationships&lt;br /&gt;
:# Implementation of the abstract record based conduit in the KPilot library.&lt;br /&gt;
:# (Re)implementation of a (new) Conduit as proof of concept.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a pre-requirement. Other useful skills, but not mandatory are:&lt;br /&gt;
* Qt experience&lt;br /&gt;
* Pilot-link experience&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Adriaan de Groot &amp;lt;groot@kde.org&amp;gt;, Jason 'vanRijn' Kasper &amp;lt;vR@movingparts.net&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' The kde-pim mailing list: http://lists.kde.org/?l=kde-pim&amp;amp;r=1&amp;amp;w=2.&lt;br /&gt;
&lt;br /&gt;
==== KitchenSync ====&lt;br /&gt;
&lt;br /&gt;
KitchenSync is the frontend to the generic synchronization system [http://www.openysync.org OpenSync]. It is supposed to become the standard syncing solution for KDE. Right now it already supports synchronization of KDE PIM data with a wider variety of mobile devices like phones and PDAs as well was synchronization with other applications like Evolution or Google calendar.&lt;br /&gt;
&lt;br /&gt;
KitchenSync works pretty well as OpenSync, but doesn't yet cover all functionality OpenSync provides. The goal of this project would be to improve that. For example the configuration GUIs for the various OpenSync plugins would need some work.&lt;br /&gt;
&lt;br /&gt;
This project requires some knowledge in KDE programming. It will also involve collaboartion with the OpenSync team, so some experience with C is helpful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Cornelius Schumacher &amp;lt;schumacher@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== KOrganizer Theming ====&lt;br /&gt;
&lt;br /&gt;
KOrganizer Theming: In the real world calendars are made from paper and carry lots of pretty pictures, witty sayings, historical data or similar things. Compared to that calendar programs are extremely plain. One of the intents of the CalendarDecoration plugin interface for KOrganizer was to make it possible to add theming to the calendar views, so that you can add all the fun things which make paper calendars more than just a bunch of papers with dates on it. Combined with the KNewStuff technology this could bring much more color to our desktops and make KOrganizer interesting to people which currently wouldn't think of using a calendar program.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Cornelius Schumacher &amp;lt;schumacher@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KDE Games ===&lt;br /&gt;
&lt;br /&gt;
==== Kombinaton - AI Engine ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' Kombination is a KDE4 scrabble clone. The project would be adding an artificial intelligence interface and at least one engine. Kombination currently lives in trunk/playground/games/kombination/ and the author would like to see Kombination be included with KDE Games soon. More information: [http://home.gna.org/kombination/ the Kombination web page].&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a pre-requirement. Basic knowledge of Scrabble rules is a must too. KDE and Qt skills will be useful but not mandatory.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Albert Astals Cid &amp;lt;aacid@kde.org&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' The kombination mailing list: http://home.gna.org/kombination/ .&lt;br /&gt;
&lt;br /&gt;
=== KDE SDK Applications ===&lt;br /&gt;
&lt;br /&gt;
==== Kate ====&lt;br /&gt;
''' Project Information:''' Kate is a multi document editor, based on a rewritten version of the kwrite editing widget of KDE, offering all the features of that plus a bunch of its own.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Make Kate a much more capable yet still lightweight development tool for KDE4.  Add features to Kate including CVS and SVN integration (either via recognition of the kdesvn or kcvs utilities, or with a custom implementation), Eclipse-like workspace and project management, and build environment integration for various languages/tools via an extensible interface.  Scale Kate as much as needed to accomodate these changes, and not beyond that (at least for the scope of this project).&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The intended result would be a stable and extended implementation of Kate, providing CVS and SVN integration, Eclipse-like workspace and project management, and build environment integration.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' A prequisite would be knowledge of Qt/KDE and the ability to setup a KDE build environment.  Additionally, knowledge of interfacing with source code repositories via C++, and general C++ knowledge would be required.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Christoph Cullmann &amp;lt;cullmann@kde.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [https://mail.kde.org/mailman/listinfo/kwrite-devel The Kate mailing list]&lt;br /&gt;
&lt;br /&gt;
=== KDevelop &amp;amp; Quanta ===&lt;br /&gt;
&lt;br /&gt;
==== Extend KDevelop's snippet support ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' Extend KDevelop's snippet support, see [http://bugs.kde.org/show_bug.cgi?id=106165 RFE 106165] for a detailed description (this proposal has been confirmed by popular vote).&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a pre-requirement. KDE and Qt skills will required. Likewise, familiarity with XML is probably required, too in order to provide a flexible, multi-platform file format for data storage and -exchange.&lt;br /&gt;
&lt;br /&gt;
'''Suggested Approach:''' given that the envisioned functionality would probably be interesting to a rather large user base/audience, one should consider using a library-oriented approach, where key-functionality is provided in a fashion that facilitates standalone library-deployment, so that other OSS projects (i.e. other IDE projects) may eventually employ the corresponding library to add &amp;quot;snippet&amp;quot;-support, too.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' none yet&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [mailto:kdevelop-devel@kdevelop.org KDevelop mailing list]&lt;br /&gt;
&lt;br /&gt;
==== Implement foundations for KDevelop4 Ruby language support ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' Ruby language and Rails web development tool is rapidly gaining popularity. The goal of this project is to implement the foundations for the best possible Ruby/Rails support in KDevelop.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' advanced knowledge of C++ is a pre-requirement. KDE and Qt skills are desired but not required. At least basic knowledge of parsing theory (lexers, LL parsers, AST's) is necessary as well. This is a challenging project.&lt;br /&gt;
&lt;br /&gt;
'''Brief Explanation:''' There're beginnings of Ruby support for KDevelop4 already. So the Ruby parser would be finished first and then definition-use chain for would be implemented. Those would allow to build extended code highlighting, navigation and problem reporting. The design for Ruby code completion would also be in the scope of this project.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
# Ruby parser with tests covering most of the language features&lt;br /&gt;
# DUChain builder for class/method definitions and their usages&lt;br /&gt;
# Advanced Ruby code highlighter and problem reporter&lt;br /&gt;
# Working and well-tested Ruby language support plugin&lt;br /&gt;
# Design for Ruby code completion&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [mailto:adymo@kdevelop.org Alexander Dymo]&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [mailto:kdevelop-devel@kdevelop.org KDevelop mailing list]&lt;br /&gt;
&lt;br /&gt;
=== Kopete ===&lt;br /&gt;
&lt;br /&gt;
=== Amarok ===&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' [http://amarok.kde.org/ Amarok website]&lt;br /&gt;
&lt;br /&gt;
==== Tightening of Web Service Integration ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Amarok's motto is ''Rediscover your music''. Since listening to music can be a somewhat uninteresting experience, we try to enhance this aspect in a number of ways: &lt;br /&gt;
&lt;br /&gt;
:* Wikipedia information retrieval&lt;br /&gt;
:* Lyric downloads&lt;br /&gt;
:* Cover Art&lt;br /&gt;
:* Music suggestions&lt;br /&gt;
&lt;br /&gt;
etc, etc. I'm sure you are more than familiar with the 'omg-im-going-to-wet-myself-this-is-so-cool' experience that you have at least once experienced.&lt;br /&gt;
&lt;br /&gt;
We would like to see some sort of enhancement to meta-information which can be displayed to the user. Some ideas that come to mind may include:&lt;br /&gt;
:* Upcoming concerts&lt;br /&gt;
:* Random artist trivia&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The student will come up with a set of web-service enhancements and will implement them so that they integrate tightly with the final Amarok 2.0 interface and design goals.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a pre-requirement. Other useful skills, but not mandatory are:&lt;br /&gt;
:* Qt experience&lt;br /&gt;
:* Web service skills, such as SOAP, XML/DOM structures etc&lt;br /&gt;
:* A keen eye for usability and the difference between features and benefits&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Seb Ruiz &amp;lt;me@sebruiz.net&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [https://mail.kde.org/mailman/listinfo/amarok The Amarok mailing list]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Integrate Additional Music Store or Streaming Music Service ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Since the introduction of the integrated Magnatune.com music store in Amarok, there has been many proposals for other stores or services that could be integrated in a simmilar way. In the process of working towards Amarok 2.0, a new framework for adding such services without cluttering the interface has been proposed and the Magnatune store has been ported to this framework. Adding a new store or service is a nice way of getting into coding on Amarok at is fairly easy to approach witout knowing all the intricate details of Amaroks inner workings.&lt;br /&gt;
&lt;br /&gt;
There are several types of services that could be of interest:&lt;br /&gt;
&lt;br /&gt;
:* DRM free music stores ( preferably with good, full length, previews )&lt;br /&gt;
:* Streaming audio content services ( Again, no DRM is a must )&lt;br /&gt;
:* Live recording archives&lt;br /&gt;
:* Most likely a 100 other kinds of sites that I have not thought of...&lt;br /&gt;
&lt;br /&gt;
The service chosen will have to be legal, and the service must agree to the integration taking place.&lt;br /&gt;
&lt;br /&gt;
There are currently no concrete agreements in place with other services, so this is very much a &amp;quot;bring your own idea&amp;quot; project, which both makes it a bit harder to get started, but also more rewarding.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The student reaches an agreement with a music store/service/whatnot and integrates its service into Amarok. Some effort would most likely also be spent on helping to mature the service framework.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a pre-requirement. Other useful skills, but not mandatory are:&lt;br /&gt;
:* Qt experience&lt;br /&gt;
:* Web service skills, such as SOAP, XML/DOM structures etc&lt;br /&gt;
:* A keen eye for usability and the difference between features and benefits&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Nikolaj Hald Nielsen &amp;lt;nhnFreespirit@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [https://mail.kde.org/mailman/listinfo/amarok The Amarok mailing list]&lt;br /&gt;
&lt;br /&gt;
=== okular ===&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' okular is a KDE 4 document viewer. http://www.okular.org&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [https://mail.kde.org/mailman/listinfo/okular-devel The okular mailing list]&lt;br /&gt;
&lt;br /&gt;
==== Improve the rendering of PDF patterns ====&lt;br /&gt;
&lt;br /&gt;
'''Explanation:''' okular uses the [http://poppler.freedesktop.org Poppler library] to render the PDF files. Some files with complex patterns may take even minutes to render, while with Acrobat Reader just a couple of seconds. &lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' One needs to improve the Poppler library code that handles rendering of PDF files with patterns, making the pattern rendering faster with no drawbacks.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a requirement. Qt4 is strongly suggested too. Graphics and PDF konwledge are strongly suggested as well, but not mandatory.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Albert Astals Cid &amp;lt;aacid@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Improve the presentation mode ====&lt;br /&gt;
&lt;br /&gt;
'''Explanation and Expected results:''' okular has a presentation mode for displaying documents on the screen in a way similar to a presentation application (think about KPresenter, OpenOffice.org Impress). Currently, the mode can just display only a single page, at the maximum size allowed by the screen. The idea is to extend the presentation mode by adding:&lt;br /&gt;
* zooming support and pan mode&lt;br /&gt;
* facing mode&lt;br /&gt;
* missing PDF transitions, like Fly, Push, Cover, Uncover, Fade&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of C++ and Qt4 is a requirement. KDE 4, graphics and PDF konwledge are strongly suggested as well, but not mandatory.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Albert Astals Cid &amp;lt;aacid@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Improve the annotation support ====&lt;br /&gt;
&lt;br /&gt;
'''Explanation and Expected results:''' one of the okular's goals is to support the annotations, mainly coming from PDF documents (but also from DjVu and ODT documents). As the support is not yet complete, some ideas could be:&lt;br /&gt;
* adding the visual editing features (e.g. mouse click to visually select, drag to move around or resize, etc)&lt;br /&gt;
* adding support for more kind of annotations (e.g. Caret, Watermark, etc)&lt;br /&gt;
* improve the annotation toolbar&lt;br /&gt;
* better support for text and line annotation drawing&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a requirement. Qt4 is strongly suggested too. Graphics and PDF konwledge are strongly suggested as well, but not mandatory.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Albert Astals Cid &amp;lt;aacid@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3D artwork support ====&lt;br /&gt;
&lt;br /&gt;
'''Explanation and Expected results:''' the PDF formats allow the embedding of 3D artwork in documents. The idea is to start supporting this kind of artwork, and start displaying them on the document. What is required to do is:&lt;br /&gt;
* basic reading support&lt;br /&gt;
* basic displaying of the artwork on the document (thus creating a 3D view)&lt;br /&gt;
* basic interaction with the 3D artwork (mouse or document actions)&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of C++ is a requirement. Qt4 is strongly suggested too. Graphics and PDF konwledge are strongly suggested as well, but not mandatory.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Albert Astals Cid &amp;lt;aacid@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Other Applications ===&lt;br /&gt;
&lt;br /&gt;
==== KBugBuster ====&lt;br /&gt;
&lt;br /&gt;
KBugBuster is a native KDE client for the bug tracking system Bugzilla. It allows to browse, search and view bug reports and make modifications to them. It provides features which the web interface can't provide like an offline mode.&lt;br /&gt;
&lt;br /&gt;
One potential task would be to make KBugBuster work with the XML-RPC interface of Bugzilla. This would make access to Bugzilla more robust and make it possible to better support the editing of bug reports.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Cornelius Schumacher &amp;lt;schumacher@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Knoware ====&lt;br /&gt;
&lt;br /&gt;
Knoware is previous SOC project. It creates a system that collates bug reports as well as anonymous system specs offered by users. It provides a statistical way of matching up bugs to likely culprits in a system or configuration so that developers can get a better handle on what the problem likely as as well as informing users of KDE what the potential pitfalls of their current system could be.&lt;br /&gt;
&lt;br /&gt;
One potential task would be to document the current system for further development. Another could be porting the curent code to Qt4.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
==== Application User Interface Test System ====&lt;br /&gt;
&lt;br /&gt;
There are a couple of tools available for Qt / KDE that allow testing of applications - squish and kdexecutor. Both are binary only, and are specific to the systems that they are built on.&lt;br /&gt;
&lt;br /&gt;
It would be useful to have an open source tool that allowed us to test applications in a scripted way. Similar open source tools include Dogtail and LDTP, which use the accessibility interfaces in Gnome. &lt;br /&gt;
&lt;br /&gt;
There are arguments for and against using accessibility - it might be a lot more useful to implement a separate system, using some of the Qt4 specific features including QMetaObject. Qt4 has a nice set of hooks, and QTestLib shows how they can be implemented. However instead of requiring specific code in the application (as done by QTestLib), it would be more flexible to use LD_PRELOAD and a small interface library.&lt;br /&gt;
&lt;br /&gt;
'''More discussion:''' Brad Hards &amp;lt;bradh@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oxygen ===&lt;br /&gt;
&lt;br /&gt;
=== Decibel ===&lt;br /&gt;
&lt;br /&gt;
You can find a list of Decibel related ideas in the [https://services.brucherseifer.net/dbwiki/index.php/Project_Ideas Decibel Wiki]&lt;br /&gt;
&lt;br /&gt;
=== Usability ===&lt;br /&gt;
==== A new design for contextual help (Whatsthis) ====&lt;br /&gt;
&lt;br /&gt;
Implement Ellen Reitmair's, Olaf Schmidt's, Philip Rodrigues' plan for a new infrastructure for contextual help.&lt;br /&gt;
[http://www.userbrain.de/whatsthis/ideas_whatsthis_january06_v1.3.pdf ideas_whatsthis_january06_v1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
=== Infrastructure ===&lt;br /&gt;
&lt;br /&gt;
* A way to make bugzilla help in finding duplicated bugs.  could be some kind of 'suggested related bugs'&lt;br /&gt;
&lt;br /&gt;
=== KOffice ===&lt;br /&gt;
All KOffice projects have common contact information and background info;&lt;br /&gt;
You can read documents on [http://www.koffice.org www.koffice.org] and [http://wiki.koffice.org wiki.koffice.org], various proposals will reference pages on the wiki as thats the main design 'scratch pad' for the developers of KOffice.&lt;br /&gt;
Contact information;  '''IRC''': irc.kde.org channel #koffice  '''Mail''': sent mail to the koffice mailinglist. Info [http://www.koffice.org/contact/ here]&lt;br /&gt;
&lt;br /&gt;
==== Collaborative editing in KOffice apps ====&lt;br /&gt;
See [http://wiki.koffice.org/index.php?title=Collaboration Collaboration].  We don't expect a fully working implementation, as it is most probably too big a project.  So please guestimate what you want to work on and finish.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== Rulers and Grid in KOffice apps ====&lt;br /&gt;
All applications in KOffice need a grid.  A grid is a raster that will be drawn on top of all content on the canvas.  This will tightly be integrated with rulers and guides. [http://wiki.koffice.org/index.php?title=Rulers_And_Grid Grids Framework].  &lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== Improve OpenDocument compatibility in KOffice apps ====&lt;br /&gt;
Specifically mentioned here are KSpread, KPresenter, KChart or KFormula&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== A 3D diagram flake-shape using lib-Eigen ====&lt;br /&gt;
Lib [http://websvn.kde.org/trunk/kdesupport/eigen Eigen] has code to do all the hard lifting for 3D calculations. But little visualisation code.  Build on top of that and be able to show data in a 3D manner into a [http://wiki.koffice.org/index.php?title=Flake Flake] shape.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== KWord master document ====&lt;br /&gt;
This maybe in combination with book-files, which combine a set of individual documents to one book with continues numbering/etc. See [http://wiki.koffice.org/index.php?title=KWord/Master_Documents Usecase]&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== Text-tool plugins for KOffice apps ====&lt;br /&gt;
KOffice has a generic text-tool.  Which will allow KWord to show all the complexity of text needed for word processing and DTP while other KOffice apps can reuse the component as well.  The text tool (based on [http://wiki.koffice.org/index.php?title=Flake Flake]) has a plugin structure allowing external development to create extra functionality.  A tutorial on how to build one will be written by the KOffice developers soon.&lt;br /&gt;
# bookmarks plugin.&lt;br /&gt;
# Uppercase Text. Alter the text to be all lowercase, Title Cased, or Capitalised.&lt;br /&gt;
# Replace word. Use a Thesaurus to replace the text with a new one. &amp;lt;br&amp;gt; As a non-standard example what about replace-word with a texting-Language. There are many engines on the web that can replace normal text with some sort of funny version. &lt;br /&gt;
# Colorization plugin. For those that publish pieces with sourcecode, being able to colorize text is a really useful tool.&lt;br /&gt;
# An optional plugin that shows a word count in a docker updated continuesly.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== A Flake-plugin that works on vector shapes ====&lt;br /&gt;
It should be a tool, like the gradient tool or the color-picking tool. (see [http://wiki.koffice.org/index.php?title=Flake Flake])&lt;br /&gt;
The tool would give you a set of brushes and each brush is defined as an outline only.  So you'd have a 10pt wide circle as one brush, and a heart shaped brush as another. The tool will allow the user to 'stamp' or paint using these brushes and can use the Qt4.3 binary path operations to modify the vector shape.&lt;br /&gt;
# Use case:  I get a vector image of snow man and I want to paint a nose and two eyes on it like it were a pixel-based image.&lt;br /&gt;
# Use case: I want to draw my signature as a vector shape.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== Extend the ShapeSelector which is used by KOffice apps ====&lt;br /&gt;
Extend the [http://wiki.koffice.org/index.php?title=ShapeSelector ShapeSelector] to do several more things;&lt;br /&gt;
* make it listen to the clipboard and show a visual representation of the current state.&lt;br /&gt;
* make it possible to drag something (a shape or just some text) off of the canvas onto the shapeSelector where it then gets stored. Also between sessions.&lt;br /&gt;
* make it possible to save a selection of items in the shapeSelector and save them on disk as one 'bundle' so I can send that to someone else.&lt;br /&gt;
* make it possible to load such a bundle from disk.&lt;br /&gt;
* make it possible to connect to a remove storage (a webpage or a samba share etc) using kio on startup and download changed bundles to show in the shape-selector.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== Add accessibility support to Flake ====&lt;br /&gt;
Using the Qt framework for accessibility, make it possible for the text tool and perhaps other tools to be accessible.  Which means that a blind user can use KWord.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== Add support for better tables in KWord ====&lt;br /&gt;
In KOffice2.0 tables as we know it in 1.x has been removed. The tables for KOffice2 have to be based on the text engine (qt-scribe) which already knows about html-style-tables. The SoC proposal is to extend this and add tables support to KWord again using the ODF specification for the feature list that is required of tables.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== KWord Scripting ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' KWord comes with a [http://wiki.koffice.org/index.php?title=KWord/Scripting Scripting Plugin] based on [http://kross.dipe.org Kross]. The plugin provides a clean interface to offer access to the KWord functionality from within scripting backends.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Improve the current scripting plugin.&lt;br /&gt;
* Evaluate what is needed or what a script could need and implement it to earn a powerful scripting backend for KWord 2.0.&lt;br /&gt;
* The current design may need to be refactored cause the scripting API should be as simple as possible.&lt;br /&gt;
* Provide sample scripts to demonstrate what's possible and Unittests for regression testing.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of C++/Qt, experience with word-processing&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Sebastian Sauer &amp;lt;mail@dipe.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Improve Kexi Data Import/Export ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Currently Kexi allows importing CSV files into an existing database, and converting MySQL/PostgreSQL/MS Access databases into Kexi databases.&lt;br /&gt;
&lt;br /&gt;
The aim of this project is to provide plugin(s) that import from more database backends/formats.&lt;br /&gt;
&lt;br /&gt;
You can select a backend you like to implement migration for:&lt;br /&gt;
 &lt;br /&gt;
* HSQLDB - the OpenOffice.org DB backend (quite important to have)&lt;br /&gt;
* ODBC&lt;br /&gt;
* Paradox&lt;br /&gt;
* DBase (e.g. using http://www.anubisnet.de/products/dbf )&lt;br /&gt;
* MS SQL Server (e.g. using http://www.freetds.org/ )&lt;br /&gt;
* Firebird - pending licence checks&lt;br /&gt;
&lt;br /&gt;
For the ODBC driver, a migration plugin and a backend plugin should be provided. For Paradox, only a migration plugin is required, although this will require modifying the migration framework to allow more than one file to be selected as the source database (i.e. the database to be imported).&lt;br /&gt;
&lt;br /&gt;
Both a migration plugin and a backend plugin could be provided for HSQLDB, which should be implemented using JNI to invoke JDBC methods in the HSQLDB library. &lt;br /&gt;
&lt;br /&gt;
In any case, migration plugins are simpler to implement than direct access plugins (drivers), so these can be developed first.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of C++, (knowledge of Qt and experience with a given database format/backend is recommended)&lt;br /&gt;
&lt;br /&gt;
'''More info:'''&lt;br /&gt;
*[http://kexi-project.org/wiki/wikiview/index.php?GoogleSummerOfCode2006_DBaseMigrationPlugin &amp;quot;DBase Migration Plugin for Kexi&amp;quot; proposed by Jonathon Manning last year]&lt;br /&gt;
*[http://kexi-project.org/wiki/wikiview/index.php?GoogleSummerOfCode2006_ParadoxAndHSQLAccess &amp;quot;Paradox &amp;amp; HSQL access for Kexi&amp;quot; proposed by Joseph Wenninger last year]&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Jaroslaw Staniek &amp;lt;js@iidea.pl&amp;gt;, Sebastian Sauer &amp;lt;mail@dipe.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [https://mail.kde.org/mailman/listinfo/kexi-devel kexi-devel]&lt;br /&gt;
&lt;br /&gt;
==== Kexi Web Forms ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Web Forms allow to read-only or read-write access to database projects created with Kexi. It is optional feature for uses where client has no Kexi installed for any reason. The fact that the Web Forms will use Web standards, adds another advantage over competitors like MS Access (which uses proprietary Windows-only ActiveX bindings).&lt;br /&gt;
&lt;br /&gt;
Proposed solution is to develop a small standalone web server. It is probably already written in C++ or C by FOSS community. Good examples are lighttpd - http://www.lighttpd.net/ &lt;br /&gt;
and (being already in KDEnetwork module) KPF - http://rikkus.info/kpf.html.&lt;br /&gt;
&lt;br /&gt;
The web serwer would be dynamically linked to kexidb and thus can access Kexi databases via universal KexiDB API, and create HTML content on demand as an answer to HTTP requests.&lt;br /&gt;
&lt;br /&gt;
For alternative solution see &amp;quot;Alternative solution for Kexi forms using PHP&amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of C++ and HTTP/web standards, (knowledge of Qt and experience with a given database format/backend is recommended)&lt;br /&gt;
&lt;br /&gt;
'''More info:''' [http://jacek.migdal.pl/gsoc/ Solution proposed by Jacek Migdal last year]&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Jaroslaw Staniek &amp;lt;js@iidea.pl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [https://mail.kde.org/mailman/listinfo/kexi-devel kexi-devel]&lt;br /&gt;
&lt;br /&gt;
==== Alternative Solution for Kexi Forms Using PHP ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Create a Kexi plugin generating PHP code saving it directy to the filesystem. This will require Apache (or other PHP-compatible web server) to be present and configured, and also will require the plugin to be packaged with a script that will install appropriate tools that allow r/w accessing the Apache/php subdirs.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of PHP, web standards and C++, (knowledge of Qt is recommended)&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Jaroslaw Staniek &amp;lt;js@iidea.pl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [https://mail.kde.org/mailman/listinfo/kexi-devel kexi-devel]&lt;br /&gt;
&lt;br /&gt;
== Notes on editing this page ==&lt;br /&gt;
&lt;br /&gt;
Before making any modifications, please '''log in''' to Techbase. This will help us track who is contributing to the ideas.&lt;br /&gt;
&lt;br /&gt;
When making modifications to existing ideas, please consider whether you're changing it more fundamentally or just superficially. If your changes are substantial, you probably have an entirely new idea. Similarly, if your idea is modified and you feel it no longer reflects your original thought, please split the idea in two, restoring yours.&lt;br /&gt;
&lt;br /&gt;
Please use the [[Talk:Projects/Summer of Code/2007/Ideas|talk page]] if you want to discuss an idea.&lt;br /&gt;
&lt;br /&gt;
Finally, do '''not''' delete ideas without a reason for doing so (like, for instance, being contrary to KDE ideals, being completely unrelated to KDE, being unfeasible, etc.) -- you may want to state in the [[Talk:Projects/Summer of Code/2007/Ideas|talk page]] why you removed the idea.&lt;br /&gt;
&lt;br /&gt;
Do '''not''' re-add ideas that were removed without discussing first with the developers of the target application.&lt;/div&gt;</summary>
		<author><name>Zander</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Projects/Summer_of_Code/2007/Ideas</id>
		<title>Projects/Summer of Code/2007/Ideas</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Projects/Summer_of_Code/2007/Ideas"/>
				<updated>2007-03-15T14:47:50Z</updated>
		
		<summary type="html">&lt;p&gt;Zander: /* Rulers And Grid in KOffice apps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is an open list for ideas for the 2007 edition of [http://code.google.com/soc Google Summer of Code]. It will remain editable while the submission process is open.&lt;br /&gt;
&lt;br /&gt;
This list is not exhaustive. It is just a collection of some ideas. To get further ideas, you can also look at our [http://wiki.kde.org/tiki-index.php?page=KDE%20Google%20SoC%202006%20ideas list of ideas for the year 2006]&lt;br /&gt;
&lt;br /&gt;
Before proceeding, please read the [[Projects/Summer of Code/2007/Participation|participation instructions]]. They are useful for students and developers alike. Before editing this page, please take a look at the [[#Notes on editing this page|Notes on editing this page]] section at the end.&lt;br /&gt;
&lt;br /&gt;
== Past ideas ==&lt;br /&gt;
&lt;br /&gt;
You may want to take a look at the [http://wiki.kde.org/tiki-index.php?page=KDE%20Google%20SoC%202006%20ideas ideas page for 2006]. Some of the ideas there are still valid today.&lt;br /&gt;
&lt;br /&gt;
== Project ideas ==&lt;br /&gt;
&lt;br /&gt;
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at. &lt;br /&gt;
&lt;br /&gt;
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.&lt;br /&gt;
&lt;br /&gt;
When adding an idea to this section, please try to include the following data:&lt;br /&gt;
:* if the application is not widely known, a description of what it does and where its code lives&lt;br /&gt;
:* a brief explanation&lt;br /&gt;
:* the expected results&lt;br /&gt;
:* pre-requisites for working on your project&lt;br /&gt;
:* if applicable, links to more information or discussions&lt;br /&gt;
:* mailing list or IRC channel for your application/library/module&lt;br /&gt;
:* your name and email address for contact (if you're willing to be a mentor)&lt;br /&gt;
&lt;br /&gt;
=== KDE Libs ===&lt;br /&gt;
&lt;br /&gt;
==== KPassivePopup ====&lt;br /&gt;
''' Project Information:''' [http://api.kde.org/cvs-api/kdelibs-apidocs/kdeui/html/classKPassivePopup.html KPassivePopup] is the class that displays information next to taskbar icons, system tray icons or windows without interrupting the user. It is used both directly and by KNotify and is part of libkdeui.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Convert KPassivePopup to use QSvg for the frame etc. this would allow it to be much more flexible in its visual appearance and could allow us to eliminate the various custom implementations that are floating around. This would include examining these forks and ensuring the same functionality could be cleanly incorporated.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The intended result would be a single implementation of KPassivePopup that could be reused without copying code by applications such as Kopete that currently maintain their own versions.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' A prequisite would be knowledge of Qt/KDE and the ability to setup a KDE build environment. Knowledge of SVG would obviously be a big help.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Richard Moore &amp;lt;rich@kde.org&amp;gt;, Aaron Seigo &amp;lt;aseigo@kde.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Solid ====&lt;br /&gt;
&lt;br /&gt;
==== Phonon ====&lt;br /&gt;
&lt;br /&gt;
==== KHTML ====&lt;br /&gt;
&lt;br /&gt;
==== KJS - Scripting Modules ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' KJS is KDE's JavaScript engine that was originally developed for the Konqueror Web browser. It as a light-weight, standalone library that can easily be embedded into other applications to make them scriptable.&lt;br /&gt;
&lt;br /&gt;
Besides being restricted to running in the sandbox of an application usage for text and file processing or other administrative or server side tasks in a command line interpreter are thinkable. Consider what made e.g. Perl successfull. What's lacking are modules providing the necessary functions.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' The project would start out with gathering an overview of typical functions found in other scripting languages like Perl, Python and Tcl. The most important ones would then be selected and implemented in (at first) C++ modules that are dynamically loaded by the KJS command line interpreter.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' A set of low-level modules like File, CGI, JSON or similar with a documented set of constructors, functions and properties. They should form the base for pure JavaScript modules to be build on top.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Some C++ programming knowledge is required. Knowledge about other scripting languages like Python and Perl would be advantageous.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Harri Porten &amp;lt;porten@kde.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Sonnet ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' Sonnet will be the future grammar, spell-checking and language detection framework in kde. &lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Make kateparts compatible and integrated with Sonnet framework.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* Be allowed to use inline spell-checking in kile (latex front-end based on kateparts) or in the comments of a source file.&lt;br /&gt;
* Would be wonderful if the grammar and language detection also work with latex files.&lt;br /&gt;
 &lt;br /&gt;
'''Knowledge Pre-Requisite:''' I don't konw but probably C++, parsers, kate parts and language studies.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
==== Kross ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' [http://kross.dipe.org Kross] is a modular scripting framework that provides a complete framework to embed scripting interpreters like Python, Ruby and KDE JavaScript transparently into native applications to bridge the static and dynamic worlds together.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' While Kross does already provide access to Python, Ruby and KDE JavaScript, Java is missing. With a Java backend we could provide access to JDBC databases, Hibernate, Sandboxes and all the other goodies.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
* Target is to implement a Java backend and offer Java as another supported scripting backend in Kross.&lt;br /&gt;
* Propably just bridge or at least provide access to QtJambi.&lt;br /&gt;
* Unittests and clean code :)&lt;br /&gt;
 &lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of C/C++, be able to get into the dark details of embedding Java.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Sebastian Sauer &amp;lt;mail@dipe.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== KDEPrint -- UI redesign ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' [http://printing.kde.org KDEPrint] is the well known and very advanced printing platform common to all KDE applications.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Redesign user interfaces related to printing. Improve usability.&lt;br /&gt;
&lt;br /&gt;
''' Expected results:''' Produce an improved set of graphic interfaces to KDE's printing technology, based on usability reports already available and using new (original) usability ideas.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C++, KDE/Qt programming, experience with design and creation of usable UI.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Cristian Tibirna &amp;lt;tibirna@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== KDEPrint -- porting to CUPS &amp;gt; 1.2 ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' [http://printing.kde.org KDEPrint] is the well known and very advanced printing platform common to all KDE applications.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Port the current KDEPrint code to supporting CUPS later than 1.2, both in KDE-3.5 and KDE-4 branches.&lt;br /&gt;
&lt;br /&gt;
''' Expected results:''' Based on the already very well thought out interface to CUPS-1.1, work is necessary for supporting new features and following bug fixes in the latest incarnation of CUPS, the most important backend of KDEPrint.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C, C++, KDE/Qt programming, writing code following specifications.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Cristian Tibirna &amp;lt;tibirna@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== KDEPrint -- porting to Qt-4.3/KDE-4 ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' [http://printing.kde.org KDEPrint] is the well known and very advanced printing platform common to all KDE applications.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Port the KDEPrint code of KDE-4 branch to latest Qt-4/KDE-4 libraries technologies.&lt;br /&gt;
&lt;br /&gt;
''' Expected results:''' This task requires a thorough analysis of technologies used by KDEPrint in the previous (KDE-3.5) incarnation and replacement as needed with new or improved equivalents from Qt-4/KDE-4. Use of the new intercommunication technologies (D-Bus) and new notification technologies is required.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C, C++, KDE/Qt programming, willingness to learn D-Bus as well as KDE-4 APIs.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Cristian Tibirna &amp;lt;tibirna@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== KDEPrint -- add support for LinuxPrinting's on-line drivers query ====&lt;br /&gt;
&lt;br /&gt;
'''Project Information:''' [http://printing.kde.org KDEPrint] is the well known and very advanced printing platform common to all KDE applications.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Add support to KDEPrint for the new [http://www.linux-foundation.org/en/OpenPrinting/Database/Query OpenPrinting Database] which allows on-line search for new (locally unavailable) drivers for printers during printer installation.&lt;br /&gt;
&lt;br /&gt;
''' Expected results:''' This task requires a good learning of the OpenPrinting Database Querying interface. Getting accustomed with KDEPrint's printer installation algorithms is also required. Target platform is KDE-4 but time permitting, a port to KDE-3.5 would be welcome.&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites:''' C, C++, KDE/Qt programming&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Cristian Tibirna &amp;lt;tibirna@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== KIConLoader: SVG Render Cache ====&lt;br /&gt;
''' Project Information:''' {{class|KIconLoader}} is the class the fetches icons from disk on demand and returns pixmap data for use on screen. This project would add an on-disk binary cache to be used for SVG icons.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' [http://aseigo.blogspot.com/2007/03/efficient-scallable-icons.html See my blog entry here for a description of the problem].&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' A transparent cache that would increase the efficiency of SVG icon usage at runtime, with the possibility of adding runtime composition capabilities to {{class|KIconLoader}}.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' A prequisite would be the ability to setup a KDE build environment. Qt/KDE programming knowledge is not a high requirement for this task, though the student will obviously be picking some of that up as they go. Experience with similar projects involving caching would be good.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Aaron Seigo &amp;lt;aseigo@kde.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
('''Note:''' KIconLoader would benefit from a generic cache, not limited only to SVG but usable also for PNG icons. See the second paragraph of the benefits section in the blog entry for reasons [less disk seeking]. I think it would make sense to change this to a generic cache for KIconLoader. Lubos Lunak &amp;lt;l.lunak@kde.org&amp;gt; )&lt;br /&gt;
&lt;br /&gt;
=== KDE Base applications ===&lt;br /&gt;
&lt;br /&gt;
==== Konqueror - web browser ====&lt;br /&gt;
I have use Konqueror for several years now. I like it and use it as 1st choice but at some point I have to start using a different browser. This is often down to java script on web pages not being compatible any more. It seems that many sites are happy with their pages providing it works with ms explorer. I wonder if this problem could be cured by using Sun's java issues rather than the one that is currently used and of course making updates easy. Unfortunately I find Opera to be the most useful alternative. It's mostly kept upto date.&lt;br /&gt;
&lt;br /&gt;
There are a bewildering variety windoze browser pluggins about and linux is often left out in the cold. Opera seem to have a partial answer to this in that the provide a pluggin for other pluggins. They leave the authoring of the latter to others. Is it possible to create a Konqueror pluggin that can make use of ms explorer pluggins? To be really useful it would need to provide the correct credentials and download and install the pluggin as well. Opera seems to rely on people keeping repositories of the required software. That isn't ideal but could be workable.&lt;br /&gt;
&lt;br /&gt;
One last thought. I used Midnight Commander to extract a single file from an rpm the other day. Something that doesn't crop up very often but is a useful facility. Currently the only option I have under Konqueror is to install it with Suse's Yast. I wouldn't like to loose that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Regards&lt;br /&gt;
John&lt;br /&gt;
(John_82)&lt;br /&gt;
&lt;br /&gt;
==== Konqueror - userscripts ====&lt;br /&gt;
''' Project Information:''' The goal of this project would be to implement and integrate into KDE4 a [http://www.konqueror.org/ Konqueror] equivalent of FireFox's [http://en.wikipedia.org/wiki/Greasemonkey Greasemonkey] plugin to allow installing and running user scripts. The project could start of from this [http://www.kde-apps.org/content/show.php?content=51482 existing GPL-ed code].&lt;br /&gt;
&lt;br /&gt;
It seems that someone is already well on their way to completing this already: http://namshub-kde.blogspot.com/2007/01/more-work-on-konquerors-user-scripts.html&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' A Greasemonkey equivalent for Konqueror that allows (de)installing and running Greasemonkey compatible user scripts.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' C++ programming skills&lt;br /&gt;
&lt;br /&gt;
==== Konqueror &amp;amp; Dolphin - file manager ====&lt;br /&gt;
&lt;br /&gt;
==== Plasma: icon placement ====&lt;br /&gt;
'''Brief explanation:''' Ordering the icons on the desktop has always been a pain for the users. They invent a certain arrangement (images top left, devices lower right, ...) and try to stick with it. Whenever they drop something to the Desktop folder in their filemanager, or when they plug in a new device the icon appears at an arbitrary location. Using clustering techniques and meta information about the existing icons, it would be possible to determine the most useful location for a new icon on the desktop.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Improve the icon placing strategy of kdesktop (plasma) using clustering techniques.&lt;br /&gt;
* Try various clustering algorithms ([http://en.wikipedia.org/wiki/Data_clustering Wikipedia Data Clustering] might help) and choose the one most suitable for the task&lt;br /&gt;
* Implement an icon placement strategy in plasma, using the chosen clustering algorithm.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Familiarity with clustering algorithms or motivation to study them, C++/Qt coding skills&lt;br /&gt;
&lt;br /&gt;
==== KWin -- Tiling Support ====&lt;br /&gt;
''' Project Information:''' [http://websvn.kde.org/trunk/KDE/kdebase/workspace/kwin/ KWin] is the KDE window manager, an application responsible for managing all windows.&lt;br /&gt;
&lt;br /&gt;
''' Brief explananation:''' Some window managers (e.g. Ion) have the ability to divide the screen to smaller sections which make it simpler to work with several windows at the same time (window maximize only to its tile, etc.).&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Implemented tiling support in KWin.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:'''&lt;br /&gt;
:# C++, Qt/KDE (KWin doesn't use much functionality from Qt and KDE libraries besides basic classes though)&lt;br /&gt;
:# X11/Xlib knowledge beneficial. X11 parts are mostly abstracted in KWin, but it's possible at least little knowledge might be required (it should be possible to learn necessary things while working on the project though).&lt;br /&gt;
:# Multiple-monitor (Xinerama) setup beneficial. KWin already has Xinerama support, parts of which possibly could be used as a base for tiling support. With tiling support implemented, Xinerama support should be implemented as tiles representing Xinerama screens.&lt;br /&gt;
&lt;br /&gt;
'''References:'''&lt;br /&gt;
:# Wikipedia window manager [http://en.wikipedia.org/wiki/Window_manager entry]&lt;br /&gt;
:# KDE bug [http://bugs.kde.org/show_bug.cgi?id=59338 #59338]&lt;br /&gt;
:# KDE bug [http://bugs.kde.org/show_bug.cgi?id=107554 #107554]&lt;br /&gt;
:# [http://modeemi.cs.tut.fi/~tuomov/ion/ Ion]&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Lubos Lunak &amp;lt;l.lunak@kde.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== KWin -- Improved Xinerama Support ====&lt;br /&gt;
''' Project Information:''' [http://websvn.kde.org/trunk/KDE/kdebase/workspace/kwin/ KWin] is the KDE window manager, an application responsible for managing all windows.&lt;br /&gt;
&lt;br /&gt;
''' Brief explanation:''' Xinerama (and various implementations known also as e.g. MergedFB or TwinView) is an X server extension that merges two or more physical monitors into one large display. KDE already provides a decent support for Xinerama, but there is still room for improvement, in particular, different monitors are linked together even in cases when it might be more beneficial to have them independent, for example with virtual desktops.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Improved Xinerama support in KDE/KWin. Specifically, making virtual desktops on different Xinerama displays independent, per [http://bugs.kde.org/show_bug.cgi?id=107302 KDE bugreport #107302], and related fixes/changes.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:'''&lt;br /&gt;
:# C++, Qt/KDE (KWin doesn't use much functionality from Qt and KDE libraries besides basic classes though)&lt;br /&gt;
:# X11/Xlib knowledge beneficial. X11 parts are mostly abstracted in KWin, but at least little knowledge will be required (it should be possible to learn necessary things while working on the project though).&lt;br /&gt;
:# Multiple-monitor (Xinerama) setup. Although it is possible to use [http://ktown.kde.org/~seli/fakexinerama/ Fake Xinerama] for making a single monitor act like a Xinerama setup, real Xinerama setup is strongly recommended.&lt;br /&gt;
&lt;br /&gt;
'''References:'''&lt;br /&gt;
:# Wikipedia window manager [http://en.wikipedia.org/wiki/Window_manager entry]&lt;br /&gt;
:# Wikipedia Xinerama [http://en.wikipedia.org/wiki/Xinerama entry]&lt;br /&gt;
:# KDE bug [http://bugs.kde.org/show_bug.cgi?id=107302 #107302]&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Lubos Lunak &amp;lt;l.lunak@kde.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Strigi: chemistry and biology support ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' [http://www.vandenoever.info/software/strigi/ Strigi] is a promosing alternative to other desktop&lt;br /&gt;
search tools, like Beagle/Kerry. It has a plugin architecture that allows writing indexing plugins for a specific area, or specific enhanced purposes. Available are  both inline plugins (written in C++), as well as plugins that call programs written in other languages via the command line. Strigi is showing progress towards integration to semantic desktop ideas, as in the [http://nepomuk-kde.semanticdesktop.org/xwiki/bin/view/Main/ Nepomuk] project. This allows chemical information to be semantically marked up, and easily retrieved.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' The idea of this project is to integrate chemistry and biology knowledge into the KDE desktop, by writing chemistry and biology aware plugins for Strigi. Exact molecule searching on the hard disk will be supported via the [http://www.iupac.org/InChI InChI]. For the rest, normal free text searching will do fine for now. Generation of InChI's will be done via [http://openbabel.sf.net/ OpenBabel], for files supported by the [http://chemical-mime.sourceforge.net/ Chemical MIME]'s (which has existing KDE support) and [http://freshmeat.net/projects/kfile_chemical/?branch_id=60776&amp;amp;release_id=231404 kfile-chemical] (which is available for KDE3 and KDE4). Optionally, the student can incorporate the chemical text mining tool [http://wwmm.ch.cam.ac.uk/wikis/wwmm/index.php/Oscar3 OSCAR3] developed in Cambridge, UK, to extract InChI's from text documents, like PDF, HTML, etc. Here Strigi's jstream technology come in handy, as it will provide a plain text version for all those formats. Extraction of biochemical information is much easier, as these files commonly plain text already.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Strigi plugins that: &lt;br /&gt;
:# extract meta data for (bio)chemical files defined by the Chemical MIMEs, via the kfile-chemical kfile plugins, &lt;br /&gt;
:# process files with a (subset of) (bio)chemical MIME with OpenBabel to generate an InChI for indexing, &lt;br /&gt;
:# (optionally) use OSCAR3 to process plain text and create InChIs for molecules found in that text. Additionally, the student is invited to propose a useful ontology for marking up the extracted chemical and biological information.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of C++ is a requirement, as is high school education in chemistry and biology.&lt;br /&gt;
&lt;br /&gt;
'''Mentor(s):''' Carsten Niehaus &amp;lt;cniehaus@kde.org&amp;gt;,  &lt;br /&gt;
Jerome Pansanel &amp;lt;j.pansanel@pansanel.net&amp;gt;, Egon Willighagen &amp;lt;egonw@user.sf.net&amp;gt;, Jos van den Oever&amp;quot; &amp;lt;jvdoever@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [http://sourceforge.net/mail/?group_id=171000 strigi-devel@lists.sourceforge.net]&lt;br /&gt;
&lt;br /&gt;
=== KDE Edu ===&lt;br /&gt;
&lt;br /&gt;
==== A 3D Molecular Editor ====&lt;br /&gt;
''' Project Information:''' There are several 3D molecular editors, but only few open source programs, such as [http://www.uku.fi/~thassine/projects/ghemical/ Ghemical]. The GPL-ed [http://openbabel.sf.net OpenBabel project] open chemistry library has expanded its usefulness improving chemistry software. This resulted in, among other things, an application and library called [http://avogadro.sourceforge.net/ Avogadro]. [http://edu.kde.org/kalzium/index.php Kalzium] and Avogadro will soon merge a lot of code so that both apps share an underlying rendering library for molecules (using OpenGL). Avogadro already has basic &amp;quot;molecule construction&amp;quot; capabilities. The goal of this project is to extend these such to yield a 3D editor suitable for basic molecular drawing and visualization for high school and university students.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The improved application would be based on the new OpenGL based rendering code, and able to construct common organic molecules (such as [http://chem-file.sourceforge.net/data/carboxylic_acids/2R-2-1S-1_2-dihydroxyethyl-4_5-dihydroxy-furan-3-one_en.html this one]). The 3D-display code inside Kalzium will be reused and expanded to handle, for example, protein &amp;quot;ribbon&amp;quot; views, surfaces, and surface-mapped functions like electronic charge. Additional features such as configurable labels (for atoms, protein residues, etc.) and flexibility to change rendering for individual atoms or bonds would be welcome.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' Basic Qt-knowledge and basic chemistry knowledge. OpenGL experience welcome.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Carsten Niehaus (cniehaus at kde dot org)&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' kalzium at kde dot org&lt;br /&gt;
&lt;br /&gt;
==== MARBLE - Adding a 2D View ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' Marble is a Qt 4-based generic virtual globe widget which is meant to integrate well with the KDE desktop to provide basic input and visualisation facilities for geographical data. Marble currently lives in http://websvn.kde.org/trunk/playground/base/marble/ and the author would like to see Marble be included with KDE-Edu soon. More information: [http://www.kdedevelopers.org/node/2429 the Marble description].&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' To be properly integrated with other applications a 2D View for Marble will be needed in addition to the preferred 3D View (e.g. for merging functionality of KGeography and Marble). Three steps are suggested:&lt;br /&gt;
:# reuse the current rendering engine in 2D mode&lt;br /&gt;
:# write an optimized approach for the 2D case and thereby refactor parts of Marble (especially the texture mapping)&lt;br /&gt;
:# include adding proper access methods for applications and the user interface&lt;br /&gt;
&lt;br /&gt;
Depending on the knowledge of the applicant the refactoring part can be extended.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' adding the 2D View Mode to Marble. Optionally, if enough time is available, integrate that view mode in another application like KGeography.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a pre-requirement. Basic highschool trigonometry knowledge would be helpful. Other useful skills, but not mandatory are:&lt;br /&gt;
* Qt experience&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Torsten Rahn &amp;lt;rahn@kde.org&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' The kde-edu mailing list: http://lists.kde.org/?l=kde-edu&amp;amp;r=1&amp;amp;b=200702&amp;amp;w=2 .&lt;br /&gt;
&lt;br /&gt;
==== MARBLE - OpenStreetMap, GPS, Almanac, improved KML support ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' Marble is a Qt 4-based generic virtual globe widget which is meant to integrate well with the KDE desktop to provide basic input and visualisation facilities for geographical data. Marble currently lives in http://websvn.kde.org/trunk/playground/base/marble/ and the author would like to see Marble be included with KDE-Edu soon. More information: [http://www.kdedevelopers.org/node/2429 the Marble description].&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' There are a lot of other interesting projects that would make a nice Google Summer of Code 2007 project each on their own. Keep in mind that all those should be introduced in an unobtrusive manner as Marble is aimed at casual users without much technical knowledge. So a larger part should be dedicated on the usability (Of course it needs to work, too ;-):&lt;br /&gt;
:# Basic support for GPS devices: Introduce an interface to support GPS tracks and / or provide support for the GPX format. Co-Mentor: Inge Wallin.&lt;br /&gt;
:# Basic support for OpenStreetMap ( http://www.openstreetmap.org ). The applicant should find a way to incrementally download data collected by the Open Street Map project. This should happen in the background.&lt;br /&gt;
:# Marble Almanac: The applicant should extend the current placemark info dialog into a module of its own that compiles together various geographical information from different sources (like the CIA fact book).&lt;br /&gt;
:# Improve KML capabilities. Currently Marble has very basic KML support already. Although Marble won't be able to support the whole range of KML tags that e.g. Google Earth supports, it would be nice if support could be made more standards compliant. The student should be able to refactor the current code and introduce an improved design.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' All these projects require that the student is a self-starter and will be able to do some research concerning the topics on their own. Beyond that you should have basic C++ knowledge. Prior Qt experience is a plus.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Torsten Rahn &amp;lt;rahn@kde.org&amp;gt;, Co-Mentor for GPS support: Inge Wallin &amp;lt;inge@lysator.liu.se&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' The kde-edu mailing list: http://lists.kde.org/?l=kde-edu&amp;amp;r=1&amp;amp;b=200702&amp;amp;w=2 .&lt;br /&gt;
&lt;br /&gt;
==== Step interactive physical simulator ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' Step is interactive physical simulator for education. It is very young program recently ported to KDE4. You can find more about it here:&lt;br /&gt;
http://edu.kde.org/step/ .&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' In order to be useful and to be included in kdeedu Step needs a lot more features than it currently has (it is only two month old). I propose adding the following features to Step:&lt;br /&gt;
:# Simulation (StepCore library):&lt;br /&gt;
:## collision detection with friction (I hope this will be ready before summer)&lt;br /&gt;
:## movement restrictions (joints) (it can be ready too)&lt;br /&gt;
:## global error estimation&lt;br /&gt;
:## molecular dynamics (2d gas, 2d fluid)&lt;br /&gt;
:## soft bodies and massive springs&lt;br /&gt;
:# GUI (Step itself):&lt;br /&gt;
:## threading (do calculations in separate thread)&lt;br /&gt;
:## user-editable notes in experiment&lt;br /&gt;
:## units for all quantities, unit conversions&lt;br /&gt;
:## sidebar with nice descriptions for all bodies and its parameters (main properties, physical laws about it, real-world examples, ...)&lt;br /&gt;
:## custom graphics for various quantities (for example v(t) or v(x) - user     can select what exactly to plot).&lt;br /&gt;
:## custom controllers to interactively control body parameters during     simulation (for example user can add slider to control mass of the body and even assign hotkeys to it).&lt;br /&gt;
:## knewstuff for sharing experiments&lt;br /&gt;
:## tutorials (series of experiments with explanations)&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
&lt;br /&gt;
=== KDE PIM libraries and applications ===&lt;br /&gt;
&lt;br /&gt;
==== KPilot - Enhance Record based syncing ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' KPilot is the KDE application which synchronizes  Palm OS PDAs with various KDE applications, including KMail, KAddressbook and Calendar. KPilot makes use of the pilot-link library to handle the interaction between the device and the conduits. These conduits are plugins which handle the actual synchronization of the items. For more information see [http://www.kpilot.org]&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' The vast majority of KPilot's conduits are record-based in nature. This means that the logical program flow for each of the conduits is very much the same in that they will each: &lt;br /&gt;
&lt;br /&gt;
:# Open a Palm database&lt;br /&gt;
:# Retrieve either all records or just the changed records&lt;br /&gt;
:# Open a PC data store&lt;br /&gt;
:# Retrieve either all or changed records&lt;br /&gt;
:# Handle tri-directional syncing, conflict handling, and merging changed data&lt;br /&gt;
:# Then write the resolved data sets back to the PC and Palm data stores &lt;br /&gt;
&lt;br /&gt;
But the current conduit framework does not abstract this common functionality into a set of base classes as it should.  This has resulted in a lot of duplicated code throughout KPilot's conduit base, and each conduit has its own way of handling this common functionality.  Understandably, this has led to bugs in the syncing algorithms and has made maintainability of the conduits (and KPilot) a much more difficult thing than it should be.  For every conduit, the maintainer has to learn how the actual syncing is done.  To make matters worse, there are a couple of conduits which don't sync correctly because of a incomplete implementation of handling records.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The student will create an improved framework for KPilot's record-based conduits and (re)implement a (new) conduit as a proof of concept.&lt;br /&gt;
&lt;br /&gt;
:# Documentation about the syncing process of a record based conduit.&lt;br /&gt;
:## Sequence diagrams detailing sync logic for each of the major scenarios: HotSync, FullSync, Copy PC to Handheld, Copy Handheld to PC&lt;br /&gt;
:## Class diagram detailing:&lt;br /&gt;
:##* Inheritance hierarchy&lt;br /&gt;
:##* Class relationships&lt;br /&gt;
:# Implementation of the abstract record based conduit in the KPilot library.&lt;br /&gt;
:# (Re)implementation of a (new) Conduit as proof of concept.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a pre-requirement. Other useful skills, but not mandatory are:&lt;br /&gt;
* Qt experience&lt;br /&gt;
* Pilot-link experience&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Adriaan de Groot &amp;lt;groot@kde.org&amp;gt;, Jason 'vanRijn' Kasper &amp;lt;vR@movingparts.net&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' The kde-pim mailing list: http://lists.kde.org/?l=kde-pim&amp;amp;r=1&amp;amp;w=2.&lt;br /&gt;
&lt;br /&gt;
==== KitchenSync ====&lt;br /&gt;
&lt;br /&gt;
KitchenSync is the frontend to the generic synchronization system [http://www.openysync.org OpenSync]. It is supposed to become the standard syncing solution for KDE. Right now it already supports synchronization of KDE PIM data with a wider variety of mobile devices like phones and PDAs as well was synchronization with other applications like Evolution or Google calendar.&lt;br /&gt;
&lt;br /&gt;
KitchenSync works pretty well as OpenSync, but doesn't yet cover all functionality OpenSync provides. The goal of this project would be to improve that. For example the configuration GUIs for the various OpenSync plugins would need some work.&lt;br /&gt;
&lt;br /&gt;
This project requires some knowledge in KDE programming. It will also involve collaboartion with the OpenSync team, so some experience with C is helpful.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Cornelius Schumacher &amp;lt;schumacher@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== KOrganizer Theming ====&lt;br /&gt;
&lt;br /&gt;
KOrganizer Theming: In the real world calendars are made from paper and carry lots of pretty pictures, witty sayings, historical data or similar things. Compared to that calendar programs are extremely plain. One of the intents of the CalendarDecoration plugin interface for KOrganizer was to make it possible to add theming to the calendar views, so that you can add all the fun things which make paper calendars more than just a bunch of papers with dates on it. Combined with the KNewStuff technology this could bring much more color to our desktops and make KOrganizer interesting to people which currently wouldn't think of using a calendar program.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Cornelius Schumacher &amp;lt;schumacher@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KDE Games ===&lt;br /&gt;
&lt;br /&gt;
==== Kombinaton - AI Engine ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' Kombination is a KDE4 scrabble clone. The project would be adding an artificial intelligence interface and at least one engine. Kombination currently lives in trunk/playground/games/kombination/ and the author would like to see Kombination be included with KDE Games soon. More information: [http://home.gna.org/kombination/ the Kombination web page].&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a pre-requirement. Basic knowledge of Scrabble rules is a must too. KDE and Qt skills will be useful but not mandatory.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Albert Astals Cid &amp;lt;aacid@kde.org&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' The kombination mailing list: http://home.gna.org/kombination/ .&lt;br /&gt;
&lt;br /&gt;
=== KDE SDK Applications ===&lt;br /&gt;
&lt;br /&gt;
==== Kate ====&lt;br /&gt;
''' Project Information:''' Kate is a multi document editor, based on a rewritten version of the kwrite editing widget of KDE, offering all the features of that plus a bunch of its own.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
Make Kate a much more capable yet still lightweight development tool for KDE4.  Add features to Kate including CVS and SVN integration (either via recognition of the kdesvn or kcvs utilities, or with a custom implementation), Eclipse-like workspace and project management, and build environment integration for various languages/tools via an extensible interface.  Scale Kate as much as needed to accomodate these changes, and not beyond that (at least for the scope of this project).&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The intended result would be a stable and extended implementation of Kate, providing CVS and SVN integration, Eclipse-like workspace and project management, and build environment integration.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' A prequisite would be knowledge of Qt/KDE and the ability to setup a KDE build environment.  Additionally, knowledge of interfacing with source code repositories via C++, and general C++ knowledge would be required.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Christoph Cullmann &amp;lt;cullmann@kde.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [https://mail.kde.org/mailman/listinfo/kwrite-devel The Kate mailing list]&lt;br /&gt;
&lt;br /&gt;
=== KDevelop &amp;amp; Quanta ===&lt;br /&gt;
&lt;br /&gt;
==== Extend KDevelop's snippet support ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' Extend KDevelop's snippet support, see [http://bugs.kde.org/show_bug.cgi?id=106165 RFE 106165] for a detailed description (this proposal has been confirmed by popular vote).&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a pre-requirement. KDE and Qt skills will required. Likewise, familiarity with XML is probably required, too in order to provide a flexible, multi-platform file format for data storage and -exchange.&lt;br /&gt;
&lt;br /&gt;
'''Suggested Approach:''' given that the envisioned functionality would probably be interesting to a rather large user base/audience, one should consider using a library-oriented approach, where key-functionality is provided in a fashion that facilitates standalone library-deployment, so that other OSS projects (i.e. other IDE projects) may eventually employ the corresponding library to add &amp;quot;snippet&amp;quot;-support, too.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' none yet&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' KDevelop mailing list&lt;br /&gt;
&lt;br /&gt;
==== Implement foundations for KDevelop4 Ruby language support ====&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' Ruby language and Rails web development tool is rapidly gaining popularity. The goal of this project is to implement the foundations for the best possible Ruby/Rails support in KDevelop.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' advanced knowledge of C++ is a pre-requirement. KDE and Qt skills are desired but not required. At least basic knowledge of parsing theory (lexers, LL parsers, AST's) is necessary as well. This is a challenging project.&lt;br /&gt;
&lt;br /&gt;
'''Brief Explanation:''' There're beginnings of Ruby support for KDevelop4 already. So the Ruby parser would be finished first and then definition-use chain for would be implemented. Those would allow to build extended code highlighting, navigation and problem reporting. The design for Ruby code completion would also be in the scope of this project.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
# Ruby parser with tests covering most of the language features&lt;br /&gt;
# DUChain builder for class/method definitions and their usages&lt;br /&gt;
# Advanced Ruby code highlighter and problem reporter&lt;br /&gt;
# Working and well-tested Ruby language support plugin&lt;br /&gt;
# Design for Ruby code completion&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [mailto:adymo@kdevelop.org Alexander Dymo]&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [mailto:kdevelop-devel@kdevelop.org KDevelop mailing list]&lt;br /&gt;
&lt;br /&gt;
=== Kopete ===&lt;br /&gt;
&lt;br /&gt;
=== Amarok ===&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' [http://amarok.kde.org/ Amarok website]&lt;br /&gt;
&lt;br /&gt;
==== Tightening of Web Service Integration ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Amarok's motto is ''Rediscover your music''. Since listening to music can be a somewhat uninteresting experience, we try to enhance this aspect in a number of ways: &lt;br /&gt;
&lt;br /&gt;
:* Wikipedia information retrieval&lt;br /&gt;
:* Lyric downloads&lt;br /&gt;
:* Cover Art&lt;br /&gt;
:* Music suggestions&lt;br /&gt;
&lt;br /&gt;
etc, etc. I'm sure you are more than familiar with the 'omg-im-going-to-wet-myself-this-is-so-cool' experience that you have at least once experienced.&lt;br /&gt;
&lt;br /&gt;
We would like to see some sort of enhancement to meta-information which can be displayed to the user. Some ideas that come to mind may include:&lt;br /&gt;
:* Upcoming concerts&lt;br /&gt;
:* Random artist trivia&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The student will come up with a set of web-service enhancements and will implement them so that they integrate tightly with the final Amarok 2.0 interface and design goals.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a pre-requirement. Other useful skills, but not mandatory are:&lt;br /&gt;
:* Qt experience&lt;br /&gt;
:* Web service skills, such as SOAP, XML/DOM structures etc&lt;br /&gt;
:* A keen eye for usability and the difference between features and benefits&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Seb Ruiz &amp;lt;me@sebruiz.net&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [https://mail.kde.org/mailman/listinfo/amarok The Amarok mailing list]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Integrate Additional Music Store or Streaming Music Service ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Since the introduction of the integrated Magnatune.com music store in Amarok, there has been many proposals for other stores or services that could be integrated in a simmilar way. In the process of working towards Amarok 2.0, a new framework for adding such services without cluttering the interface has been proposed and the Magnatune store has been ported to this framework. Adding a new store or service is a nice way of getting into coding on Amarok at is fairly easy to approach witout knowing all the intricate details of Amaroks inner workings.&lt;br /&gt;
&lt;br /&gt;
There are several types of services that could be of interest:&lt;br /&gt;
&lt;br /&gt;
:* DRM free music stores ( preferably with good, full length, previews )&lt;br /&gt;
:* Streaming audio content services ( Again, no DRM is a must )&lt;br /&gt;
:* Live recording archives&lt;br /&gt;
:* Most likely a 100 other kinds of sites that I have not thought of...&lt;br /&gt;
&lt;br /&gt;
The service chosen will have to be legal, and the service must agree to the integration taking place.&lt;br /&gt;
&lt;br /&gt;
There are currently no concrete agreements in place with other services, so this is very much a &amp;quot;bring your own idea&amp;quot; project, which both makes it a bit harder to get started, but also more rewarding.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' The student reaches an agreement with a music store/service/whatnot and integrates its service into Amarok. Some effort would most likely also be spent on helping to mature the service framework.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a pre-requirement. Other useful skills, but not mandatory are:&lt;br /&gt;
:* Qt experience&lt;br /&gt;
:* Web service skills, such as SOAP, XML/DOM structures etc&lt;br /&gt;
:* A keen eye for usability and the difference between features and benefits&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Nikolaj Hald Nielsen &amp;lt;nhnFreespirit@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [https://mail.kde.org/mailman/listinfo/amarok The Amarok mailing list]&lt;br /&gt;
&lt;br /&gt;
=== okular ===&lt;br /&gt;
&lt;br /&gt;
''' Project Information:''' okular is a KDE 4 document viewer. http://www.okular.org&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [https://mail.kde.org/mailman/listinfo/okular-devel The okular mailing list]&lt;br /&gt;
&lt;br /&gt;
==== Improve the rendering of PDF patterns ====&lt;br /&gt;
&lt;br /&gt;
'''Explanation:''' okular uses the [http://poppler.freedesktop.org Poppler library] to render the PDF files. Some files with complex patterns may take even minutes to render, while with Acrobat Reader just a couple of seconds. &lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' One needs to improve the Poppler library code that handles rendering of PDF files with patterns, making the pattern rendering faster with no drawbacks.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a requirement. Qt4 is strongly suggested too. Graphics and PDF konwledge are strongly suggested as well, but not mandatory.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Albert Astals Cid &amp;lt;aacid@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Improve the presentation mode ====&lt;br /&gt;
&lt;br /&gt;
'''Explanation and Expected results:''' okular has a presentation mode for displaying documents on the screen in a way similar to a presentation application (think about KPresenter, OpenOffice.org Impress). Currently, the mode can just display only a single page, at the maximum size allowed by the screen. The idea is to extend the presentation mode by adding:&lt;br /&gt;
* zooming support and pan mode&lt;br /&gt;
* facing mode&lt;br /&gt;
* missing PDF transitions, like Fly, Push, Cover, Uncover, Fade&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of C++ and Qt4 is a requirement. KDE 4, graphics and PDF konwledge are strongly suggested as well, but not mandatory.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Albert Astals Cid &amp;lt;aacid@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Improve the annotation support ====&lt;br /&gt;
&lt;br /&gt;
'''Explanation and Expected results:''' one of the okular's goals is to support the annotations, mainly coming from PDF documents (but also from DjVu and ODT documents). As the support is not yet complete, some ideas could be:&lt;br /&gt;
* adding the visual editing features (e.g. mouse click to visually select, drag to move around or resize, etc)&lt;br /&gt;
* adding support for more kind of annotations (e.g. Caret, Watermark, etc)&lt;br /&gt;
* improve the annotation toolbar&lt;br /&gt;
* better support for text and line annotation drawing&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' basic knowledge of C++ is a requirement. Qt4 is strongly suggested too. Graphics and PDF konwledge are strongly suggested as well, but not mandatory.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Albert Astals Cid &amp;lt;aacid@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3D artwork support ====&lt;br /&gt;
&lt;br /&gt;
'''Explanation and Expected results:''' the PDF formats allow the embedding of 3D artwork in documents. The idea is to start supporting this kind of artwork, and start displaying them on the document. What is required to do is:&lt;br /&gt;
* basic reading support&lt;br /&gt;
* basic displaying of the artwork on the document (thus creating a 3D view)&lt;br /&gt;
* basic interaction with the 3D artwork (mouse or document actions)&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of C++ is a requirement. Qt4 is strongly suggested too. Graphics and PDF konwledge are strongly suggested as well, but not mandatory.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Albert Astals Cid &amp;lt;aacid@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Other Applications ===&lt;br /&gt;
&lt;br /&gt;
==== KBugBuster ====&lt;br /&gt;
&lt;br /&gt;
KBugBuster is a native KDE client for the bug tracking system Bugzilla. It allows to browse, search and view bug reports and make modifications to them. It provides features which the web interface can't provide like an offline mode.&lt;br /&gt;
&lt;br /&gt;
One potential task would be to make KBugBuster work with the XML-RPC interface of Bugzilla. This would make access to Bugzilla more robust and make it possible to better support the editing of bug reports.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Cornelius Schumacher &amp;lt;schumacher@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Knoware ====&lt;br /&gt;
&lt;br /&gt;
Knoware is previous SOC project. It creates a system that collates bug reports as well as anonymous system specs offered by users. It provides a statistical way of matching up bugs to likely culprits in a system or configuration so that developers can get a better handle on what the problem likely as as well as informing users of KDE what the potential pitfalls of their current system could be.&lt;br /&gt;
&lt;br /&gt;
One potential task would be to document the current system for further development. Another could be porting the curent code to Qt4.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:'''&lt;br /&gt;
==== Application User Interface Test System ====&lt;br /&gt;
&lt;br /&gt;
There are a couple of tools available for Qt / KDE that allow testing of applications - squish and kdexecutor. Both are binary only, and are specific to the systems that they are built on.&lt;br /&gt;
&lt;br /&gt;
It would be useful to have an open source tool that allowed us to test applications in a scripted way. Similar open source tools include Dogtail and LDTP, which use the accessibility interfaces in Gnome. &lt;br /&gt;
&lt;br /&gt;
There are arguments for and against using accessibility - it might be a lot more useful to implement a separate system, using some of the Qt4 specific features including QMetaObject. Qt4 has a nice set of hooks, and QTestLib shows how they can be implemented. However instead of requiring specific code in the application (as done by QTestLib), it would be more flexible to use LD_PRELOAD and a small interface library.&lt;br /&gt;
&lt;br /&gt;
'''More discussion:''' Brad Hards &amp;lt;bradh@kde.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oxygen ===&lt;br /&gt;
&lt;br /&gt;
=== Decibel ===&lt;br /&gt;
&lt;br /&gt;
You can find a list of Decibel related ideas in the [https://services.brucherseifer.net/dbwiki/index.php/Project_Ideas Decibel Wiki]&lt;br /&gt;
&lt;br /&gt;
=== Usability ===&lt;br /&gt;
==== A new design for contextual help (Whatsthis) ====&lt;br /&gt;
&lt;br /&gt;
Implement Ellen Reitmair's, Olaf Schmidt's, Philip Rodrigues' plan for a new infrastructure for contextual help.&lt;br /&gt;
[http://www.userbrain.de/whatsthis/ideas_whatsthis_january06_v1.3.pdf ideas_whatsthis_january06_v1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
=== Infrastructure ===&lt;br /&gt;
&lt;br /&gt;
* A way to make bugzilla help in finding duplicated bugs.  could be some kind of 'suggested related bugs'&lt;br /&gt;
&lt;br /&gt;
=== KOffice ===&lt;br /&gt;
All KOffice projects have common contact information and background info;&lt;br /&gt;
You can read documents on [http://www.koffice.org www.koffice.org] and [http://wiki.koffice.org wiki.koffice.org], various proposals will reference pages on the wiki as thats the main design 'scratch pad' for the developers of KOffice.&lt;br /&gt;
Contact information;  '''IRC''': irc.kde.org channel #koffice  '''Mail''': sent mail to the koffice mailinglist. Info [http://www.koffice.org/contact/ here]&lt;br /&gt;
&lt;br /&gt;
==== Collaborative editing in KOffice apps ====&lt;br /&gt;
See [http://wiki.koffice.org/index.php?title=Collaboration Collaboration].  We don't expect a fully working implementation, as it is most probably too big a project.  So please guestimate what you want to work on and finish.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== Rulers and Grid in KOffice apps ====&lt;br /&gt;
All applications in KOffice need a grid.  A grid is a raster that will be drawn on top of all content on the canvas.  This will tightly be integrated with rulers and guides. [http://wiki.koffice.org/index.php?title=Rulers_And_Grid Grids Framework].  &lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== Improve OpenDocument compatibility in KOffice apps ====&lt;br /&gt;
Specifically mentioned here are KSpread, KPresenter, KChart or KFormula&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== A 3D diagram flake-shape using lib-Eigen ====&lt;br /&gt;
Lib [http://websvn.kde.org/trunk/kdesupport/eigen Eigen] has code to do all the hard lifting for 3D calculations. But little visualisation code.  Build on top of that and be able to show data in a 3D manner into a [http://wiki.koffice.org/index.php?title=Flake Flake] shape.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== KWord master document ====&lt;br /&gt;
This maybe in combination with book-files, which combine a set of individual documents to one book with continues numbering/etc.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== Text-tool plugins for KOffice apps ====&lt;br /&gt;
KOffice has a generic text-tool.  Which will allow KWord to show all the complexity of text needed for word processing and DTP while other KOffice apps can reuse the component as well.  The text tool (based on [http://wiki.koffice.org/index.php?title=Flake Flake]) has a plugin structure allowing external development to create extra functionality.  A tutorial on how to build one will be written by the KOffice developers soon.&lt;br /&gt;
# bookmarks plugin.&lt;br /&gt;
# Uppercase Text. Alter the text to be all lowercase, Title Cased, or Capitalised.&lt;br /&gt;
# Replace word. Use a Thesaurus to replace the text with a new one. &amp;lt;br&amp;gt; As a non-standard example what about replace-word with a texting-Language. There are many engines on the web that can replace normal text with some sort of funny version. &lt;br /&gt;
# Colorization plugin. For those that publish pieces with sourcecode, being able to colorize text is a really useful tool.&lt;br /&gt;
# An optional plugin that shows a word count in a docker updated continuesly.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== A Flake-plugin that works on vector shapes ====&lt;br /&gt;
It should be a tool, like the gradient tool or the color-picking tool. (see [http://wiki.koffice.org/index.php?title=Flake Flake])&lt;br /&gt;
The tool would give you a set of brushes and each brush is defined as an outline only.  So you'd have a 10pt wide circle as one brush, and a heart shaped brush as another. The tool will allow the user to 'stamp' or paint using these brushes and can use the Qt4.3 binary path operations to modify the vector shape.&lt;br /&gt;
# Use case:  I get a vector image of snow man and I want to paint a nose and two eyes on it like it were a pixel-based image.&lt;br /&gt;
# Use case: I want to draw my signature as a vector shape.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== Extend the ShapeSelector which is used by KOffice apps ====&lt;br /&gt;
Extend the [http://wiki.koffice.org/index.php?title=ShapeSelector ShapeSelector] to do several more things;&lt;br /&gt;
* make it listen to the clipboard and show a visual representation of the current state.&lt;br /&gt;
* make it possible to drag something (a shape or just some text) off of the canvas onto the shapeSelector where it then gets stored. Also between sessions.&lt;br /&gt;
* make it possible to save a selection of items in the shapeSelector and save them on disk as one 'bundle' so I can send that to someone else.&lt;br /&gt;
* make it possible to load such a bundle from disk.&lt;br /&gt;
* make it possible to connect to a remove storage (a webpage or a samba share etc) using kio on startup and download changed bundles to show in the shape-selector.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== Add accessibility support to Flake ====&lt;br /&gt;
Using the Qt framework for accessibility, make it possible for the text tool and perhaps other tools to be accessible.  Which means that a blind user can use KWord.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== Add support for better tables in KWord ====&lt;br /&gt;
In KOffice2.0 tables as we know it in 1.x has been removed. The tables for KOffice2 have to be based on the text engine (qt-scribe) which already knows about html-style-tables. The SoC proposal is to extend this and add tables support to KWord again using the ODF specification for the feature list that is required of tables.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' KOffice or KDE developers&lt;br /&gt;
&lt;br /&gt;
==== KWord Scripting ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' KWord comes with a [http://wiki.koffice.org/index.php?title=KWord/Scripting Scripting Plugin] based on [http://kross.dipe.org Kross]. The plugin provides a clean interface to offer access to the KWord functionality from within scripting backends.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:''' Improve the current scripting plugin.&lt;br /&gt;
* Evaluate what is needed or what a script could need and implement it to earn a powerful scripting backend for KWord 2.0.&lt;br /&gt;
* The current design may need to be refactored cause the scripting API should be as simple as possible.&lt;br /&gt;
* Provide sample scripts to demonstrate what's possible and Unittests for regression testing.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of C++/Qt, experience with word-processing&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Sebastian Sauer &amp;lt;mail@dipe.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Improve Kexi Data Import/Export ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Currently Kexi allows importing CSV files into an existing database, and converting MySQL/PostgreSQL/MS Access databases into Kexi databases.&lt;br /&gt;
&lt;br /&gt;
The aim of this project is to provide plugin(s) that import from more database backends/formats.&lt;br /&gt;
&lt;br /&gt;
You can select a backend you like to implement migration for:&lt;br /&gt;
 &lt;br /&gt;
* HSQLDB - the OpenOffice.org DB backend (quite important to have)&lt;br /&gt;
* ODBC&lt;br /&gt;
* Paradox&lt;br /&gt;
* DBase (e.g. using http://www.anubisnet.de/products/dbf )&lt;br /&gt;
* MS SQL Server (e.g. using http://www.freetds.org/ )&lt;br /&gt;
* Firebird - pending licence checks&lt;br /&gt;
&lt;br /&gt;
For the ODBC driver, a migration plugin and a backend plugin should be provided. For Paradox, only a migration plugin is required, although this will require modifying the migration framework to allow more than one file to be selected as the source database (i.e. the database to be imported).&lt;br /&gt;
&lt;br /&gt;
Both a migration plugin and a backend plugin could be provided for HSQLDB, which should be implemented using JNI to invoke JDBC methods in the HSQLDB library. &lt;br /&gt;
&lt;br /&gt;
In any case, migration plugins are simpler to implement than direct access plugins (drivers), so these can be developed first.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of C++, (knowledge of Qt and experience with a given database format/backend is recommended)&lt;br /&gt;
&lt;br /&gt;
'''More info:'''&lt;br /&gt;
*[http://kexi-project.org/wiki/wikiview/index.php?GoogleSummerOfCode2006_DBaseMigrationPlugin &amp;quot;DBase Migration Plugin for Kexi&amp;quot; proposed by Jonathon Manning last year]&lt;br /&gt;
*[http://kexi-project.org/wiki/wikiview/index.php?GoogleSummerOfCode2006_ParadoxAndHSQLAccess &amp;quot;Paradox &amp;amp; HSQL access for Kexi&amp;quot; proposed by Joseph Wenninger last year]&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Jaroslaw Staniek &amp;lt;js@iidea.pl&amp;gt;, Sebastian Sauer &amp;lt;mail@dipe.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [https://mail.kde.org/mailman/listinfo/kexi-devel kexi-devel]&lt;br /&gt;
&lt;br /&gt;
==== Kexi Web Forms ====&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' Web Forms allow to read-only or read-write access to database projects created with Kexi. It is optional feature for uses where client has no Kexi installed for any reason. The fact that the Web Forms will use Web standards, adds another advantage over competitors like MS Access (which uses proprietary Windows-only ActiveX bindings).&lt;br /&gt;
&lt;br /&gt;
Proposed solution is to develop a small standalone web server. It is probably already written in C++ or C by FOSS community. Good examples are lighttpd - http://www.lighttpd.net/ &lt;br /&gt;
and (being already in KDEnetwork module) KPF - http://rikkus.info/kpf.html.&lt;br /&gt;
&lt;br /&gt;
The web serwer would be dynamically linked to kexidb and thus can access Kexi databases via universal KexiDB API, and create HTML content on demand as an answer to HTTP requests.&lt;br /&gt;
&lt;br /&gt;
For alternative solution see &amp;quot;Alternative solution for Kexi forms using PHP&amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Pre-Requisite:''' knowledge of C++ and HTTP/web standards, (knowledge of Qt and experience with a given database format/backend is recommended)&lt;br /&gt;
&lt;br /&gt;
'''More info:''' [http://jacek.migdal.pl/gsoc/ Solution proposed by Jacek Migdal last year]&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Jaroslaw Staniek &amp;lt;js@iidea.pl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mailing list:''' [https://mail.kde.org/mailman/listinfo/k