<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Gökmen Göksel&#039;s warehouse. &#187; Programming</title>
	<atom:link href="http://blog.gokmengoksel.com/tail/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gokmengoksel.com</link>
	<description>Gökmen Göksel&#039;s warehouse.</description>
	<lastBuildDate>Thu, 12 Jan 2012 13:41:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Quickformat – An exciting removable disk formatter for Pardus</title>
		<link>http://blog.gokmengoksel.com/2011/06/quickformat-%e2%80%93-an-exciting-removable-disk-formatter-for-pardus/</link>
		<comments>http://blog.gokmengoksel.com/2011/06/quickformat-%e2%80%93-an-exciting-removable-disk-formatter-for-pardus/#comments</comments>
		<pubDate>Mon, 13 Jun 2011 06:38:56 +0000</pubDate>
		<dc:creator>Gökmen Göksel</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[Pardus]]></category>
		<category><![CDATA[Plasma]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[planet.kde]]></category>
		<category><![CDATA[planet.pardus]]></category>

		<guid isPermaLink="false">http://blog.gokmengoksel.com/?p=827</guid>
		<description><![CDATA[In Linux World, formatting a Usb Flash Disk is not an easy operation for end-user; in Pardus we always use one sentence: &#8220;Make it easy !&#8220;. So, we have to find an easy way to formatting a removable disk ! Yet another creative developer from Pardus, Renan Çakırerk has created Quickformat. And I wanted to [...]]]></description>
			<content:encoded><![CDATA[<p>In Linux World, formatting a Usb Flash Disk is not an easy operation for end-user; in Pardus we always use one sentence: &#8220;<strong>Make it easy !</strong>&#8220;. So, we have to find an easy way to formatting a removable disk !</p>
<p>Yet another creative developer from Pardus, <a title="Renan's Blog" href="http://cakirerk.org">Renan Çakırerk</a> has created <strong>Quickformat</strong>. And I wanted to let you know !</p>
<p><img class="aligncenter" title="QuickFormat" src="http://cakirerk.org/wp-content/uploads/2011/06/snapshot2.png" alt="" width="514" height="303" /></p>
<p>It is also integrated to Dolphin !</p>
<p><img class="aligncenter" title="Integrated to Dolphin" src="http://cakirerk.org/wp-content/uploads/2011/06/snapshot1.png" alt="" width="531" height="383" /></p>
<p>You can find a lot of information about <strong>Quickformat</strong> from <a title="Renan's Blog" href="http://cakirerk.org">Renan&#8217;s Blog</a>. Have fun !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gokmengoksel.com/2011/06/quickformat-%e2%80%93-an-exciting-removable-disk-formatter-for-pardus/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Service Manager meets PDS&#8230;</title>
		<link>http://blog.gokmengoksel.com/2010/11/service-manager-meets-pds/</link>
		<comments>http://blog.gokmengoksel.com/2010/11/service-manager-meets-pds/#comments</comments>
		<pubDate>Thu, 25 Nov 2010 14:38:09 +0000</pubDate>
		<dc:creator>Gökmen Göksel</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[Pardus]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[planet.kde]]></category>
		<category><![CDATA[planet.pardus]]></category>

		<guid isPermaLink="false">http://blog.ratonred.com/?p=713</guid>
		<description><![CDATA[As you may know, service-manager of Pardus uses COMAR backend to handle service status.. And we have a simple interface for this. I have made some change to service-manager ui for user requests from our Turkish Community OzgurlukIcin.com (ozgurluk icin means &#8220;for freedom&#8221; in Turkish).. Users wanted to see service descriptions in service-manager and I [...]]]></description>
			<content:encoded><![CDATA[<p>As you may know, <a title="Service Manager" href="http://developer.pardus.org.tr/projects/service-manager">service-manager</a> of Pardus uses <a href="http://developer.pardus.org.tr/projects/comar">COMAR</a> backend to handle service status.. And we have a simple interface for this. I have made some change to service-manager ui for user requests from our Turkish Community <a href="http://www.ozgurlukicin.com">OzgurlukIcin.com</a> (ozgurluk icin means &#8220;for freedom&#8221; in Turkish)..</p>
<p>Users wanted to see service descriptions in service-manager and I tried to find a proper solution, here is the result;</p>
<p><iframe src="http://player.vimeo.com/video/17189194?portrait=0" width="500" height="388" frameborder="0"></iframe>
<p><a href="http://vimeo.com/17189194">Service Manager meets PDS</a> from <a href="http://vimeo.com/gokmen">Gökmen Göksel</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gokmengoksel.com/2010/11/service-manager-meets-pds/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>A small touch.</title>
		<link>http://blog.gokmengoksel.com/2010/11/small-touch/</link>
		<comments>http://blog.gokmengoksel.com/2010/11/small-touch/#comments</comments>
		<pubDate>Sun, 07 Nov 2010 22:19:47 +0000</pubDate>
		<dc:creator>Gökmen Göksel</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[planet.kde]]></category>
		<category><![CDATA[planet.pardus]]></category>

		<guid isPermaLink="false">http://blog.ratonred.com/?p=694</guid>
		<description><![CDATA[While using the Package Manager of Pardus, I have always been annoyed with the animation of package list. In Package Manager, when user clicked on a package -to get its details-, details comes with sliding-down animation. And then if user clicks the same package, details goes away with sliding up animation. But, when user clicks [...]]]></description>
			<content:encoded><![CDATA[<p>While using the Package Manager of Pardus, I have always been annoyed with the animation of package list.</p>
<p>In Package Manager, when user clicked on a package -to get its details-, details comes with sliding-down animation. And then if user clicks the same package, details goes away with sliding up animation.</p>
<p>But, when user clicks a different package while one of them opened before, it closes the first one directly (no animation) and then shows the new one with a sliding down animation. A small touch;</p>
<pre>--- trunk/kde/package-manager/manager/src/rowanimator.py	2010/10/20 13:51:19	32615
+++ trunk/kde/package-manager/manager/src/rowanimator.py	2010/11/07 20:29:59	32912
@@ -45,16 +45,27 @@
         self.direction = DOWN
         self.row = None
         self.lastrow = None
-        self.timeLine = QTimeLine(300)
         self.t_view = updater
+        self.initTimeLine()
+        self.hoverLinkFilter = HoverLinkFilter(self)
+        self.t_view.installEventFilter(self.hoverLinkFilter)

+    def initTimeLine(self):
+        self.timeLine = QTimeLine(300)
         QObject.connect(self.timeLine, SIGNAL("frameChanged(int)"), self.updateSize)
         QObject.connect(self.timeLine, SIGNAL("finished()"), self.finished)
+        self.timeLine.setDirection(QTimeLine.Backward)

-        self.hoverLinkFilter = HoverLinkFilter(self)
-        self.t_view.installEventFilter(self.hoverLinkFilter)
+    def animate(self, row, reverseOld = False):
+        if self.row &gt;= 0:
+            if not self.row == row:
+                self.timeLine.setFrameRange(DEFAULT_HEIGHT, self.max_height)
+                self.timeLine.start()
+                QObject.connect(self.timeLine, SIGNAL("finished()"), lambda: self.animate(row, True))
+                if not reverseOld:
+                    return

-    def animate(self, row):
+        self.initTimeLine()
         self.setRow(row)
         self.timeLine.setFrameRange(DEFAULT_HEIGHT, self.max_height)
         self.timeLine.start()</pre>
<p>Fixed it :) Here are the results;</p>
<p>The old one;</p>
<p><iframe src="http://player.vimeo.com/video/16596101?portrait=0" width="500" height="300" frameborder="0"></iframe><br />
<a href="http://vimeo.com/16596101">Old Package List Animation</a> from <a href="http://vimeo.com/gokmen">Gökmen Göksel</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>The new one;</p>
<p><iframe src="http://player.vimeo.com/video/16596066?portrait=0" width="500" height="300" frameborder="0"></iframe><br />
<a href="http://vimeo.com/16596066">New Package List Animation</a> from <a href="http://vimeo.com/gokmen">Gökmen Göksel</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gokmengoksel.com/2010/11/small-touch/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pardus is in top five !</title>
		<link>http://blog.gokmengoksel.com/2010/10/pardus-in-first-five/</link>
		<comments>http://blog.gokmengoksel.com/2010/10/pardus-in-first-five/#comments</comments>
		<pubDate>Sun, 31 Oct 2010 13:08:53 +0000</pubDate>
		<dc:creator>Gökmen Göksel</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Pardus]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[planet.kde]]></category>
		<category><![CDATA[planet.pardus]]></category>

		<guid isPermaLink="false">http://blog.ratonred.com/?p=680</guid>
		<description><![CDATA[Linux Journal just announced the ﻿﻿﻿﻿2010 Linux Journal Readers&#8217; Choice Awards, and good news Pardus is in top five this year ! In three important categories, Pardus catches the top five; - Best Linux Distribution; 1st Ubuntu and 5th is Pardus - Best Package Management Application; 1st Apt and 5th is Pisi﻿ - Product of [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-681" title="Linux Journal" src="http://blog.ratonred.com/wp-content/uploads/2010/10/logo-lj.jpg" alt="" width="200" height="96" /></p>
<p>Linux Journal just announced the <a href="http://www.linuxjournal.com/content/readers-choice-awards-2010">﻿﻿﻿﻿</a><strong><a href="http://www.linuxjournal.com/content/readers-choice-awards-2010">2010 </a></strong><em><strong><a href="http://www.linuxjournal.com/content/readers-choice-awards-2010">Linux Journal</a></strong></em><strong><a href="http://www.linuxjournal.com/content/readers-choice-awards-2010"> Readers&#8217; Choice Awards</a></strong>, and good news <strong>Pardus</strong> is in top five this year !</p>
<p>In three important categories, <strong>Pardus</strong> catches the top five;</p>
<p>- <strong>Best Linux Distribution</strong>; <strong>1st</strong> <a href="http://www.ubuntu.com/">Ubuntu</a> and <strong>5th</strong> is Pardus</p>
<p>- <strong>Best Package Management Application</strong>; <strong>1st</strong> <a href="http://en.wikipedia.org/wiki/Advanced_Packaging_Tool">Apt</a> and <strong>5th</strong> is <a href="http://developer.pardus.org.tr/projects/pisi/">Pisi﻿</a></p>
<p>- <strong>Product of the Year</strong>; <strong>1st</strong> <a href="http://www.android.com/">Android</a>, <strong>2nd</strong> <a href="http://www.kde.org">KDE</a> <strong>lol</strong> and <strong>5th</strong> is Pardus</p>
<p>The other good news is our best friend <a href="http://www.python.org">Python</a> selected <strong>1st</strong> in both <strong>Best Programming</strong> and <strong>Best Scripting Languages</strong> categories.</p>
<p>Have a nice Sunday !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gokmengoksel.com/2010/10/pardus-in-first-five/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Pardus 2011 Beta with new Package Manager</title>
		<link>http://blog.gokmengoksel.com/2010/10/pardus-2011-beta-with-new-pm/</link>
		<comments>http://blog.gokmengoksel.com/2010/10/pardus-2011-beta-with-new-pm/#comments</comments>
		<pubDate>Thu, 28 Oct 2010 08:48:45 +0000</pubDate>
		<dc:creator>Gökmen Göksel</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[Pardus]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[planet.kde]]></category>
		<category><![CDATA[planet.pardus]]></category>

		<guid isPermaLink="false">http://blog.ratonred.com/?p=645</guid>
		<description><![CDATA[I was busy with Pardus 2011 for a while (we released Pardus 2011 Beta last week), where I couldn&#8217;t find a chance to write about development process. You will see great improvements in the upcoming release; Pardus 2011 will be shipped with KDE 4.5.2 and a whole bunch of our management tools which are written [...]]]></description>
			<content:encoded><![CDATA[<p>I was busy with Pardus 2011 for a while <em>(we released </em><strong><a href="http://lists.pardus.org.tr/pardus-announce/2010-October/000086.html"><em>Pardus 2011 Beta</em></a></strong><em> last week)</em>, where I couldn&#8217;t find a chance to write about development process. You will see great improvements in the upcoming release; Pardus 2011 will be shipped with <strong>KDE 4.5.2</strong> and a whole bunch of our management tools which are written with Python, PyQt and PyKDE. I guess the package-manager will be the most noteworthy one in all.</p>
<p>Pardus have its own package management system: <strong>PiSi </strong>(<em>For more information about pisi you can checkout </em><a href="http://developer.pardus.org.tr/projects/pisi/"><em>development page</em></a>)<strong>. </strong><a href="http://developer.pardus.org.tr/projects/package-manager/">Package-manager</a> uses its backend<strong>. </strong> As you may remember from my <a href="http://blog.ratonred.com/2008/11/service-manager-for-kde4-with-comar-and-pykde4/">previous posts</a>, we are using an infrastructrure for managing operations called <a href="http://developer.pardus.org.tr/projects/comar">Çomar</a>. Package-manager calls Çomar where it can check that if the user have necessary priveleges to use PiSi by using <a href="http://www.freedesktop.org/wiki/Software/PolicyKit">PolicyKit</a> <em>(which calls PolicyKitKde on KDE).</em> You may see that this operation resembles <a href="http://techbase.kde.org/Development/Tutorials/KAuth/KAuth_Basics">KAuth</a>. One can ask why we are using this method, instead of KAuth. Well, the simple answer is that this infrastructure is nearly 4 years old. :-)</p>
<p>Let&#8217;s look at the new features of package-manager&#8230;</p>
<p>The most significant change is the new interface where you may see that there are tabs similar to <a href="http://rekonq.sourceforge.net/">rekonq</a> and <a href="http://www.chromium.org/Home">chromium</a>. Package-manager doesn&#8217;t have anything to offer in file menu but settings, so this menuless aspect works better for our needs and it saves a one line space, which is getting more and more important for netbooks and other small screen devices.</p>
<p><a href="http://blog.ratonred.com/wp-content/uploads/2010/10/pm1.png"><img class="aligncenter size-medium wp-image-657" title="package-manager new interface" src="http://blog.ratonred.com/wp-content/uploads/2010/10/pm1-300x248.png" alt="" width="300" height="248" /></a></p>
<p>Another great improvement you may catch from the first screenshot is rating stars for packages. The rating option was a feature requested by our users for a long time. Since we kept them waiting so long, we thought that the solution should worth. We put out a new project called <strong><a href="http://svn.pardus.org.tr/uludag/trunk/appinfo/">AppInfo</a></strong> which can work with any package management system. At the moment, only PiSi backend is completed but anyone can write a new backend for rpm, deb or any other package-manager of choice. AppInfo provides a rating for each package from its main database. Clients uses AppInfo API to check out the rating database from a predefined AppInfo server which provides screenshots and rating info for the requested package. Below you can see the information of package-manager in use.</p>
<p><a href="http://blog.ratonred.com/wp-content/uploads/2010/10/pm4.png"><img class="aligncenter size-medium wp-image-661" title="package manager AppInfo details" src="http://blog.ratonred.com/wp-content/uploads/2010/10/pm4-300x248.png" alt="" width="300" height="248" /></a></p>
<p>In the last screenshot you may be interested in the overlayed widget. The trick is the <a href="http://svn.pardus.org.tr/uludag/trunk/pds/pds/gui.py">PDS.Gui</a> class. I&#8217;ve written about <strong>Pardus Desktop Services</strong> <a href="http://blog.ratonred.com/2010/04/universal_apps/">before</a>. This Gui class is a new add-on for <a href="http://svn.pardus.org.tr/uludag/trunk/pds/">PDS</a> aiming to improve usability. It also supports animated transitions which based on <a href="http://doc.trolltech.com/4.7/qtimeline.html">QTimeLine</a> and to achieve an animation infrastructure similar to <a href="http://doc.trolltech.com/4.7/qpropertyanimation.html">QPropertyAnimation</a>. Using QPropertyAnimation was an option for sure, however I wanted to experience to create a basic animation framework with power of Qt. So this choice was totally personal&#8230; :-)</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="544" height="334" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://blip.tv/play/AYKH%2BiwA" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="544" height="334" src="http://blip.tv/play/AYKH%2BiwA" allowfullscreen="true"></embed></object></p>
<p><a href="http://blip.tv/file/4305879">Package Manager in Action</a></p>
<p>While integrating the new search mechanism to achieve an auto completion for packages, I used PDS.Gui as well.</p>
<p style="text-align: center;"><a href="http://blog.ratonred.com/wp-content/uploads/2010/10/pm2.png"><img class="size-medium wp-image-663 aligncenter" title="package manager auto completion" src="http://blog.ratonred.com/wp-content/uploads/2010/10/pm2-300x248.png" alt="" width="300" height="248" /></a></p>
<p style="text-align: center;"><a href="http://blog.ratonred.com/wp-content/uploads/2010/10/pm2.png"></a><a href="http://blog.ratonred.com/wp-content/uploads/2010/10/pm3.png"><img class="size-medium wp-image-662 aligncenter" title="package manager while searching" src="http://blog.ratonred.com/wp-content/uploads/2010/10/pm3-300x248.png" alt="" width="300" height="248" /></a></p>
<p style="text-align: center;"><a href="http://blog.ratonred.com/wp-content/uploads/2010/10/pm3.png"></a><a href="http://blog.ratonred.com/wp-content/uploads/2010/10/pm7.png"><img class="size-medium wp-image-658 aligncenter" title="package manager when it couldn't find the requested search" src="http://blog.ratonred.com/wp-content/uploads/2010/10/pm7-300x248.png" alt="" width="300" height="248" /></a></p>
<p>I embedded the basket window and the progress dialog into the main window with PDS.Gui as well.</p>
<p style="text-align: center;"><a href="http://blog.ratonred.com/wp-content/uploads/2010/10/pm5.png"><img class="size-medium wp-image-660 aligncenter" title="package manager choosen application basket" src="http://blog.ratonred.com/wp-content/uploads/2010/10/pm5-300x248.png" alt="" width="300" height="248" /></a></p>
<p style="text-align: center;"><a href="http://blog.ratonred.com/wp-content/uploads/2010/10/pm5.png"></a><a href="http://blog.ratonred.com/wp-content/uploads/2010/10/pm6.png"><img class="size-medium wp-image-659 aligncenter" title="package manager progress dialog" src="http://blog.ratonred.com/wp-content/uploads/2010/10/pm6-300x248.png" alt="" width="300" height="248" /></a></p>
<p>You may <a href="ftp://ftp.pardus.org.tr/pub/pardus/installcd/2011/Beta/">download</a> Pardus 2011 Beta and check the new features.</p>
<p>Thanks for the fish&#8230;</p>
<p><em> </em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gokmengoksel.com/2010/10/pardus-2011-beta-with-new-pm/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Qt ya da GTK+, ne dersin ?</title>
		<link>http://blog.gokmengoksel.com/2010/10/qt-ya-da-gtk-ne-dersin/</link>
		<comments>http://blog.gokmengoksel.com/2010/10/qt-ya-da-gtk-ne-dersin/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 13:36:14 +0000</pubDate>
		<dc:creator>Gökmen Göksel</dc:creator>
				<category><![CDATA[Gtk]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[Türkçe]]></category>
		<category><![CDATA[gezegen.linux]]></category>
		<category><![CDATA[gezegen.pardus]]></category>

		<guid isPermaLink="false">http://blog.ratonred.com/?p=616</guid>
		<description><![CDATA[Birçok konuda bu tip tartışmalar yaşanır, bazen sadece fanatiklik bile bir tarafın seçilmesinde etken olabilir (doğru olmayabilir ama olur). Ben bunun dışında biraz gerçeklerden bahsetmek istiyorum: Özellik Kümesi Qt sağladıkları ile birlikte tam bir geliştirme kütüphanesi, sadece grafik arabirim için değil en alt seviyede ihtiyaçlar için bile bir destek sunuyor. Veritabanı, Ağ, Web, XML &#8230; [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-630" title="GTK+ vs. Qt" src="http://blog.ratonred.com/wp-content/uploads/2010/10/gtk_qt.png" alt="" width="320" height="160" /></p>
<p>Birçok konuda bu tip tartışmalar yaşanır, bazen sadece fanatiklik bile bir tarafın seçilmesinde etken olabilir (doğru olmayabilir ama olur). Ben bunun dışında biraz gerçeklerden bahsetmek istiyorum:</p>
<ul>
<li><strong>Özellik Kümesi</strong>
<ul>
<li><strong>Qt</strong> sağladıkları ile birlikte tam bir geliştirme kütüphanesi, sadece grafik arabirim için değil en alt seviyede ihtiyaçlar için bile bir destek sunuyor. Veritabanı, Ağ, Web, XML &#8230; uzayıp giden kocaman bir özellik kümesini sunuyor. Öyle ki sadece Qt kullanarak koskoca bir masaüstü ortamı yazmak mümkün. Tam olarak neler içerdiğine <strong>[1]</strong> adresinden bakılabilir.</li>
<li><strong>GTK+</strong> ise Qt&#8217;ye göre çok daha az sayılabilecek bir özellik listesine sahip, fakat bu noktada GTK+&#8217;ın geliştirilmesindeki asıl sebebin arabirimler olduğu unutulmamalı. Arabirim dışında kalan işler için gerekli özellikler <a href="http://library.gnome.org/devel/glib/stable/">GLib</a> altında geliştiriliyor (GTK+, Glib üzerinde), Qt&#8217;nin sunduğu kadar geniş bir yelpazeye sahip olmasa da yeterince uzun bir özellik kümesi var. Daha detaylı bir liste API dokümanlarından <strong>[2]</strong> incelenebilir.</li>
<li>Qt C++ &#8216;a ek olarak kolayca anlaşılabilecek sinyal slot mekanizmasını beraberinde getiriyor, GTK+ ise C üzerinde nesneye dayalı bir yaklaşım sergilemeye çalışırken anlaşılması zor bir hale geliyor.</li>
</ul>
</li>
<li><strong>Görünüm</strong>
<ul>
<li><strong>Qt </strong>Native QT uygulamaları, QGtkStyle<strong>[3]</strong> ile birlikte GTK+ temalarını (simge temaları dahil) kullanabilir hale geliyor, bunun dışında Qt Windows ve Mac Os X üzerinde de doğal görünüm sağlayabilen ortak tek kütüphane. QGtkStyle Qt tarafından sağlanıyor.</li>
<li><strong>GTK+ </strong>Sadece kendi tema stillerini destekliyor, GTK-Qt-Engine <strong>[4]</strong> ile (GTK dışında geliştirilen gönüllü bir çalışma) bütün Qt temalarının desteklenmesi söz konusu olamıyor. Windows ve Mac Os X için herhangi bir desteği yok, kendi temaları ile çalışmaya devam ediyor. Ayrıca tema noktasında iş sadece görsellik ile bitmiyor, butonların sıralaması, layout düzeni gibi işler de temaya bağımlı olarak değişebiliyor (Qt&#8217;de İptal en sağ altta, GTK+&#8217;da Tamam en sağ altta gibi) QGtkStyle bu farklılıkları gözetebiliyor, GTK-Qt-Engine&#8217;in böyle bir yeteneği yok.</li>
<li>Ayrıca tema noktasında iş sadece görsellik ile bitmiyor, butonların sıralaması, layout düzeni gibi işler de temaya bağımlı olarak değişebiliyor (Qt&#8217;de İptal en sağ altta, GTK+&#8217;da Tamam en sağ altta gibi) QGtkStyle bu farklılıkları gözetebiliyor, GTK-Qt-Engine&#8217;in böyle bir yeteneği yok.</li>
</ul>
</li>
<li><strong>Altyapı</strong>
<ul>
<li><strong>Qt</strong> C++ ile geliştirilmiş ve C++ ile tam uyumlu bir API sunuyor. Nesneye Dayalı bir dilin bütün nimetlerinden faydalanıyorlar (bütün objeler QObject nesnesinden, bütün grafik arabirim nesneleri <a href="http://doc.qt.nokia.com/4.7/qobject.html">QObject</a> nesnesinden türemiş QWidget nesnesinden türüyor, &#8230;)</li>
<li><strong>GTK+</strong> Qt&#8217;nin aksine C ile yazılmış ve kendine has bir API yapısına sahip. Fakat C++ için yazılmış bir wrapper ile (<a href="http://www.gtkmm.org/en/index.html">GTKmm</a>) Qt&#8217;nin sahip olduğuna benzer bir hiyerarşi düzenine sahip. GTK+ nesneye dayalı bir yapı için, <a href="http://library.gnome.org/devel/gobject/2.18/">GObject</a> nesnesinden miras alarak türüyor.</li>
</ul>
</li>
<li><strong>Belgelendirme</strong>
<ul>
<li><strong>Qt</strong> eksiksiz bir API belgesi ve bunu yanında süreçleri profesyonelce yazılmış bir bilişim kitabı tadında anlatan nasıl yapılır belgelerine sahip. Bu belgeler Qt tarafından sağlanıyor ve Qt paketleri ile birlikte erişilebilen Asisstant adlı uygulama ile ya da web üzerinden sunuluyor. Aynı zamanda Qt uygulamaları için <a href="http://www.doxygen.org">doxygen</a> formatında yazılmış açıklama metinlerinen QHelpEngine ile yardım belgesi üretmek mümkün hale geliyor.</li>
<li><strong>GTK+</strong> &#8216;da Qt&#8217;de olduğu gibi detaylı bir belgelendirme arşivine sahip değil, API belgeleri GTK tarafından çevrim içi sunuluyor olsa da, çevrim dışı belgelere 3.parti yazılımlar ile erişebiliyorsunuz.</li>
</ul>
</li>
<li><strong>Tasarım Araçları</strong>
<ul>
<li><strong>Qt</strong> Designer adından bir arabirim tasarımcısı ile birlikte geliyor, bu tasarımcı aynı zamanda <a href="http://qt.nokia.com/products/developer-tools/">Qt Creator</a> uygulaması içine gömülü bir şekilde çalışarak tam bir geliştirme ortamı sunuyor. Designer XML tabanlı bir tasarım dosyası üretiyor ve bu dosya hazır araçlar sayesinde desteklenen diller için hazırlanmış kodlar haline getiriliyor. Ayrıca designer mevcut Qt nesneleri dışında dışarıdan geliştirmiş olduğunuz nesnelerin de arabirimi üzerinden kullanılmasına olanak sağlıyor.</li>
<li><strong>GTK+</strong> <a href="http://glade.gnome.org/">Glade</a> ile birlikte arabirim tasarımı işini hallediyor, Glade GtkBuilder formatında Qt&#8217;dekine benzer bir şekilde desteklenen dillere çevirilebilecek bir tasarım dosyası üretiyor, bu dosyalar yine benzer araçlar ile desteklenen diller için üretiliyor.</li>
</ul>
</li>
<li><strong>Performans</strong>
<ul>
<li>Bu konuda net bir sonuç ortaya koymak pek mümkün olmuyor, bu süreci alt kümelerine; çizim, bellek yönetimi, yüklenme süresi, çözülme süresi vs. şeklinde bölerek değerlendirmek gerek. Zira Qt yapılan iş ile ilgili bir çok bileşeni kendi sağlıyor olsa da GTK+ ile dışarıdan bir çok bileşeni kullanmak gerekiyor. Bu noktada performans değerlendirmesini net bir biçimde yapmak çok zor bir hale geliyor.</li>
<li>Genel kanı GTK+&#8217;ın Qt&#8217;ye göre daha hafif olduğu olsa da Qt&#8217;nin özellikle 4.4 sürümünden sonra bellek yönetimi ile ilgili yapmış olduğu yenilikler ile bu durumun geçerliliğini yitirdiği gözleniyor.</li>
<li>Daha önce yapılmış polygon çizimleri ile ilgili bir performans testini <strong>[5] </strong>adresinde bulabilirsiniz.</li>
</ul>
</li>
<li><strong>Çeviriler</strong>
<ul>
<li><strong>Qt</strong> kendi çeviri yönetim sistemine sahip fakat <a href="http://www.gnu.org/software/gettext/">Gettext</a> kütüphaneleri ile birlikte de kullanılabiliyor. Bütün Qt nesneleri Unicode destekliyor ve soldan-sağa &lt;&gt; sağdan-sola diller arası geçiş için bütün arabirim otomatik olarak yön değiştirebiliyor.</li>
<li><strong>GTK+</strong> herhangi bir çeviri yönetim sistemine sahip değil fakat <a href="http://www.gnu.org/software/gettext/">Gettext</a> kullanılarak çevirilebilir arabirimler tasarlamak mümkün.</li>
</ul>
</li>
<li><strong>Test</strong>
<ul>
<li><strong>Qt</strong> Arabirim ya da arabirimden bağımsız süreçlerin birim testlerini yapabilmek için bir test kütüphanesi sunuyor (QTestLib)</li>
<li><strong>GTK+</strong> için böyle bir özellik mevcut değil</li>
</ul>
</li>
<li><strong>Programlama Dilleri</strong>
<ul>
<li><strong>Qt</strong> C++ ile geliştiriliyor ve doğal hali ile C++ destekliyor. Bunun yanı sıra Qt için hemen hemen bütün dillerde kullanılmak üzere bağlayıcılar (binding) geliştirilmiş. Ayrıca Qt ECMA script (JavaScript) destekliyor. Ayrıca kendine has <a href="http://labs.qt.nokia.com/2009/05/13/qt-declarative-ui/">QML</a> adında hızlıca uygulama geliştirebileceğiniz bir platform daha sunuyor.</li>
<li><strong>GTK+</strong> C desteği ile geliyor fakat Qt&#8217;de olduğu birçok bağlayıcı GTK+ için de mevcut. Bağlayıcılar konusunda Qt&#8217;den hemen hemen bir eksiği olmamasına rağmen, GTK+ ile JavaScript şimdilerde mümkün gözükmüyor.</li>
</ul>
</li>
<li><strong>Çokluortam</strong>
<ul>
<li><strong>Qt</strong> çokluortam işlerini <a href="http://doc.qt.nokia.com/4.7/phonon-module.html">Phonon</a> ile hallediyor (Qt&#8217;nin içerisinden geliyor) birçok arkaucu (backend) destekliyor; mplayer, vlc, gstreamer, xine. Phonon arka uçlar için ortak kulanılacak bir katman, arka uçlar sisteme göre değişiyor ve bu arka uçlar Qt tarafından değil, çalıştığı sistem tarafından sağlanıyor. Ayrıca çokluortam dosyaları üzerinde (efekt ekleme gibi) işlem yapmaya da olanak sağlıyor.</li>
<li><strong>GTK+</strong> <a href="http://www.gstreamer.net/">Gstreamer</a> kullanıyor ve arka uç olarak sadece Gstreamer&#8217;ı destekliyor. Arka uç Gstreamer&#8217;ın kendisi GTK+ tarafından sağlanıyor.</li>
</ul>
</li>
<li><strong>İletişim Desteği</strong>
<ul>
<li><strong>Qt</strong> <a href="http://www.freedesktop.org/wiki/Software/dbus">Dbus</a> ve <a href="http://en.wikipedia.org/wiki/Inter-process_communication">IPC</a> destekliyor</li>
<li><strong>GTK+ </strong>sadece <a href="http://www.freedesktop.org/wiki/Software/dbus">Dbus</a> destekliyor</li>
</ul>
</li>
<li><strong>Lisans</strong>
<ul>
<li>Belki de bu tartışmanın eskiden kullanılan en önemli vurgusu Qt&#8217;nin lisans durumydu, fakat Nokia satın aldıktan sonra Qt&#8217;nin lisansını LGPL olarak değiştirdi, bu noktada GTK+ ile Qt arasında özgürlük açısından herhangi bir fark bulunmuyor fakat Qt için ücreti karşılığında profesyonel destek alabiliyorken GTK+ için hala böyle bir destek alamıyorsunuz.</li>
<li>Ayrıca işin Python tarafında Qt&#8217;nin LGPL olmasının ardından pyGtk <a title="pygtk vs pyqt in google" href="http://www.google.com/trends?q=pyQt,+pyGTK&amp;ctab=0&amp;geo=all&amp;date=all&amp;sort=0">düşüşe geçmiş</a>.</li>
</ul>
</li>
</ul>
<p><strong>Sonuç</strong></p>
<p>Açıkçası bu listeyi çok daha fazla uzatmak mümkün. Bir yerde durmak gerekiyordu :).</p>
<p>Benim kişisel görüşüm Qt&#8217;den yana; size tam bir çözüm sunuyor ve bu tam çözümü sunarken her süreç birbirine benzer işliyor, Qt içeren bir C++ kodunu çok hızlı bir şekilde Qt içeren bir Python kodu haline getirebiliyorsunuz. Nesneye dayalı geliştirilmiş olmasının verdiği esneklik ve uyum, üstüne bir de çok detaylı belgelendirme, rahat okunabilir kodlar eklenince Qt açık ara lider benim için fakat ikisi ile de mükemmel uygulamalar geliştirmek mümkün.</p>
<p>Bu konu ile ilgili yaptığım araştırma sırasında karşılaştığım/kaynak aldığım bazı yazılara <strong>[6] [7] [8] [9]</strong> adreslerinden ulaşılabilir.</p>
<p><strong>Not</strong>: GTK+ ile ilgili yazdıklarımda eksiklerim/yanlışlarım olabilir, kesinlikle bu konuda yorum bırakmaktan çekinmeyin.</p>
<p>[1] <a href="http://doc.qt.nokia.com/4.7/classes.html">http://doc.qt.nokia.com/4.7/classes.html<br />
</a>[2] ﻿﻿<a href="http://library.gnome.org/devel/references#api-platform">http://library.gnome.org/devel/references#api-platform<br />
</a>[3] <a href="http://labs.qt.nokia.com/2008/05/13/introducing-qgtkstyle/">http://labs.qt.nokia.com/2008/05/13/introducing-qgtkstyle/<br />
</a>[4] <a href="http://kde-look.org/content/show.php?content=9714">http://kde-look.org/content/show.php?content=9714<br />
</a>[5] <a href="http://zrusin.blogspot.com/2006/10/benchmarks.html">http://zrusin.blogspot.com/2006/10/benchmarks.html<br />
</a>[6] <a href="http://techfreaks4u.com/blog/?p=953">http://techfreaks4u.com/blog/?p=953<br />
</a>[7] <a href="http://ldn.linuxfoundation.org/article/application-development-framework-choices-gtk-vs-qt">http://ldn.linuxfoundation.org/article/application-development-framework-choices-gtk-vs-qt<br />
</a>[8] <a href="http://www.jbkempf.com/blog/post/2007/02/10/Qt4-Interface">http://www.jbkempf.com/blog/post/2007/02/10/Qt4-Interface<br />
</a>[9] <a href="http://www.caddd.org/2010/03/qt-vs-gtk.html">http://www.caddd.org/2010/03/qt-vs-gtk.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gokmengoksel.com/2010/10/qt-ya-da-gtk-ne-dersin/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Pisi Yaml Desteği [Beta]</title>
		<link>http://blog.gokmengoksel.com/2010/06/pisi-yaml-destegi-beta/</link>
		<comments>http://blog.gokmengoksel.com/2010/06/pisi-yaml-destegi-beta/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 09:00:34 +0000</pubDate>
		<dc:creator>Gökmen Göksel</dc:creator>
				<category><![CDATA[Pardus]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Türkçe]]></category>
		<category><![CDATA[gezegen.linux]]></category>
		<category><![CDATA[gezegen.pardus]]></category>

		<guid isPermaLink="false">http://blog.ratonred.com/?p=571</guid>
		<description><![CDATA[Pardus&#8217;u diğer dağıtımlardan farklı kılan en önemli özelliklerinden biri de PiSi , Pardus&#8217;un Paket Yönetim Sistemi. Bir çok sunumda da savunduğumuz bir argüman var; PiSi sadece paket yönetiminde değil, paketleri geliştirmek için sunduğu kolay kullanım ile de diğer paket yönetim sistemlerinden sıyrılıyor. Paketlerin sisteme kurulması, güncellenmesi, kaldırılması ya da daha derinlerde bağımlılıklarının çözülmesi, paketlerin sıkıştırılması [...]]]></description>
			<content:encoded><![CDATA[<p>Pardus&#8217;u diğer dağıtımlardan farklı kılan en önemli özelliklerinden biri de <a href="http://www.pardus.org.tr/projeler/pisi/">PiSi</a> , Pardus&#8217;un <em>Paket Yönetim Sistemi</em>.</p>
<p>Bir çok sunumda da savunduğumuz bir argüman var; PiSi sadece paket yönetiminde değil, paketleri geliştirmek için sunduğu kolay kullanım ile de diğer paket yönetim sistemlerinden sıyrılıyor.</p>
<p>Paketlerin <em>sisteme kurulması</em>, <em>güncellenmesi</em>, <em>kaldırılması</em> ya da daha derinlerde <em>bağımlılıklarının çözülmesi</em>, <em>paketlerin sıkıştırılması</em> gibi işleri yaparken ne kadar hızlı ve verimli olduğu şüphe götürmez bir gerçek. Paket geliştiricileri için ise <strong>Python</strong> ve <strong>XML</strong> sayesinde paket geliştirme sürecinde diğer paket yönetim sistemlerine göre büyük avantajlara sahip.</p>
<p>Python&#8217;un tartışılacak pek bir yanı yok, hali hazırda kendisine rakip olabilecek pek bir ürün de yok zaten (ruby&#8217;nin vs. nin başımızın üstünde yeri var ama Python daha bi can yani :)) Fakat <strong>paketlerin önemli bilgilerini içeren dosyaların hepsi XML formatında</strong>. Bu dosyaların <a href="http://en.wikipedia.org/wiki/XML">XML</a> olmasının birçok avantajı var; herhangi başka bir formata dönüştürmek, hali hazırda bir çok kütüphane kullanarak bu dosyaları işlemek, dosyanın denetimlerini gerçekleştirebilmek ya da dosyanın tasarımında bir değişiklik yapmak oldukça basit. Gelgelelim XML&#8217;in çok önemli bir dezavantajı var; <strong>insanlar için yazması ve okuması zor bir format XML</strong>. Günümüzde henüz paketleri geliştiren mükemmel makinelerimiz olmadığına göre, insanlar önem sıralamasında en üstte :)</p>
<p>Bu problemi çözmek için XML düzenleyecek araçlar yazmak üzere tarihi birçok projemiz <a title="Pakito" href="http://websvn.pardus.org.tr/uludag/trunk/playground/intern/Pakito/">mevcut</a>. Fakat ne bu projeler bir türlü mutlu bir sona ulaşabildiler, ne de çoğu &#8220;geek&#8221; dediğimiz sınıfa giren paketçilerimiz bu araçları kullanmaya sıcak bakmadı. Paket bakıcılığı ile pek uğraşmıyor olsam da bende bu araçlar yerine Vim kullanmayı tercih ediyorum. Bu kadar paket varken ve PiSi ile paket geliştiren bir çok paketçi varken, bu konuda bir değişiklik yapmakta pek kolay değil. Ayrıca değiştirmeye karar verdiğinizde XML&#8217;in sağladıklarını sağlayacak birşey bulmak ve PiSi&#8217;nin bu formattan anlayacak hale gelmesini sağlamak (PiSi ile birlikte buildfarm ve arkadaşları gibi büyük bir topluluk da bu değişimden nasibini almalı) pek kolay bir iş değil.</p>
<p>Konuyu bir-iki haftadır birazda geyik unsuru olarak aramızda konuşurken (daha sonra geliştirici listesinde de konuşuldu bir kuple), kullanabileceğimiz alternatif veri taşıyıcı formatları araştırdık; <a href="http://www.json.org/">JSON</a>, <a href="http://www.yaml.org/">YAML</a> ve hatta şahsen ben kendim Google&#8217;ın kendi işlerinde kullanmak üzere tasarladığı <a href="http://code.google.com/p/protobuf/">protobuf</a> projesini dahi inceledim. Fakat aralarında en mantıklısı ve XML&#8217;e en yakın özellikleri sağladığı gibi asıl problemimize (kolay okunan ve yazılan bir format istiyoruz !) de tam çözüm olacak tek alternatif YAML gibi gözüküyor (evrenin herhangi bir yerinde daha iyisi varsa yorum olarak ekleyin). PiSi&#8217;nin proje lideri Fatih ve Pardus 2009 Sürüm Yöneticisi Onur ile birlikte konuyu konuşurken çok daha eğlenceli dosya formatları geliştirdik lâkin Dünya henüz buna hazır değil :)</p>
<div>
<p>Mevcut bir pspec.xml ile yeni ortaya çıkan pspec.yaml arasındaki okunulabilirlik ve yazılabilirlik ise sanırım gayet net;</p>
<div><a href="http://blog.ratonred.com/wp-content/uploads/2010/06/xmlvsyaml.png"><img class="aligncenter size-large wp-image-585" title="xmlvsyaml" src="http://blog.ratonred.com/wp-content/uploads/2010/06/xmlvsyaml-1024x226.png" alt="YAML vs. XML" width="670" height="126" /></a></div>
</div>
<p>YAML gibi bir formatı seçmekle iş bitmiyor ne yazık ki; PiSi&#8217;nin YAML anlayacak hale getirilmesi, bu işin (deyim yerindeyse) en &#8220;pis&#8221; yeri. Bu işi şu anki iş yükümüzle ve düşündüğümüz şekli ile (PiSi&#8217;nin XML ile ilgili kısımlarını tamamen YAML&#8217;a geçirmek) yapmak neredeyse imkansız olduğu için bu konu geyik olarak kapandı diye düşünüyordum ki; bir bardak <a href="http://en.wikipedia.org/wiki/Mojito">mojito</a> imdadıma yetişti;</p>
<p>XML&#8217;in avantajı kolay olarak başka formatlara çevirilebilmesi ve XML için kullanılabilecek en hızlı Python kütüphanelerinden <a href="http://websvn.pardus.org.tr/uludag/trunk/piksemel/">Piksemel</a> ve YAML için gerekli <a href="http://www.pyyaml.org">PyYaml</a> kullanarak, <strong>pspec.yaml</strong> gibi bir dosyayı PiSi&#8217;ye işlemesi için vermeden önce PiSi&#8217;nin anlayabileceği XML formatına çevirmek gayet kolay olacaktı oysa ki :)</p>
<p><a href="http://blog.ratonred.com/wp-content/uploads/2010/06/pisi-yaml.png"><img class="aligncenter size-full wp-image-582" title="pisi-yaml" src="http://blog.ratonred.com/wp-content/uploads/2010/06/pisi-yaml.png" alt="" width="578" height="149" /></a></p>
<div>Biraz <a href="http://en.wikipedia.org/wiki/Over-engineered">over-engineering</a> gibi gözükse de uygulanabilecek en hızlı çözüm ve PiSi&#8217;nin sağladığı mevcut yapıdan tamamen izole olarak geliştirilebilir. yaml2xml dönüşümü için yazdığım kod pek baştan savma bir kod (hatta çok kötü bir kod bile diyebilirim). Fakat buradaki amacım kısa ve hızlı bir şekilde sonuca ulaşabilmek olduğundan, biraz da &#8220;deneysel&#8221; diyebileceğim <a href="http://cekirdek.pardus.org.tr/~gokmen/projects/pisi-yaml">pisi-yaml</a> ortaya çıktı.</div>
<p><strong>pisi-yaml</strong>&#8216;ın kendisi <a href="http://cekirdek.pardus.org.tr/~gokmen/projects/pisi-yaml/pisi-yaml.py">burada</a>, denemek için örnek bir paket ise <a href="http://cekirdek.pardus.org.tr/~gokmen/projects/pisi-yaml/kde-odf-thumbnail.tar.bz2">burada</a> mevcut. Tabi bunlardan önce <a href="http://www.pyyaml.org">PyYaml</a> <a title="PyYAML pisi paketi" href="http://cekirdek.pardus.org.tr/~gokmen/projects/pisi-yaml/PyYAML-3.09-1.pisi">paketini</a> kurmanız gerek. Gerekli dosyaları çektikten sonra kde-odf-thumbnailer paketini <strong>pspec.yaml</strong>&#8216;dan derletmek için kde-odf-thumbnailer dizininde;</p>
<pre><strong># ./pisi-yaml.py build pspec.yaml</strong></pre>
<p>Derleme bittikten sonra <strong>pspec.yaml</strong> dosyasının XML&#8217;e çevirilmiş haline <strong>.pspec.xml</strong> dosyasından göz atabilirsiniz.</p>
<p>Pardus 2011&#8242;de YAML ile yazılmış paketlerimiz olur belki kim bilir ?</p>
<div id="_mcePaste">İyi eğlenceler.</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.gokmengoksel.com/2010/06/pisi-yaml-destegi-beta/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Universal Apps</title>
		<link>http://blog.gokmengoksel.com/2010/04/universal_apps/</link>
		<comments>http://blog.gokmengoksel.com/2010/04/universal_apps/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 11:43:38 +0000</pubDate>
		<dc:creator>Gökmen Göksel</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[Pardus]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[Utils]]></category>
		<category><![CDATA[planet.kde]]></category>
		<category><![CDATA[planet.pardus]]></category>

		<guid isPermaLink="false">http://blog.ratonred.com/?p=500</guid>
		<description><![CDATA[In Pardus Corporate we use KDE 3.5.10 and some of our new tools from Pardus 2009 which runs KDE 4.3.5 (for now). Tools in 2009 are designed to work with the current desktop environment which is KDE 4.3.5. So, we have a problem in Pardus Corporate side; we need kdelibs4 on KDE 3.5.10. It is [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="Kde 3.5 and Kde 4.x" src="http://cekirdek.pardus.org.tr/~gokmen/3-4.png" alt="" width="288" height="131" /></p>
<div>
<p>In Pardus Corporate we use KDE 3.5.10 and some of our new tools from Pardus 2009 which runs KDE 4.3.5 (for now). Tools in 2009 are designed to work with the current desktop environment which is KDE 4.3.5. So, we have a problem in Pardus Corporate side; we need kdelibs4 on KDE 3.5.10. It is possible to use kdelibs4 but in some ways it is not a great idea.</p>
<p>We think that we can create a solution for making universal apps which run on KDE 4.x with kdelibs4 and for others (kde3.5, xfce etc.) which use Qt libs.</p>
<p>Most of the code in our applications just depends on Qt 4.x, but some important parts for the desktop integration depends on KDE.</p>
<h3>Basics of desktop integration</h3>
<p><img class="alignright" title="Qt, Code Less; Create More." src="http://qt.nokia.com/images/products/qt-logo/image_thumb" alt="" width="128" height="128" /></p>
<ol>
<li>Icons</li>
<li>Colors</li>
<li>Fonts</li>
<li>Language Selection</li>
<li>Translations</li>
<li>Notifications</li>
<li>&#8230;</li>
</ol>
<p>I started with KIconLoader port for Qt, which I have found the C++ version on <a href="http://labs.trolltech.com/blogs/2009/02/13/freedesktop-icons-in-qt/">this blog entry</a> and ported it to Python from scratch. For colors, fonts or language selection it is enough to read the user&#8217;s <code>kdeglobals</code> files. Notifications are handled by PyNotify on Qt-Only mode&#8230; When things started to grow up I decided to merge them under the name of <em><strong>Pardus Desktop Services (Pds)</strong></em>.</p>
<h3>Example Usage of Pds</h3>
<p><code>&gt;&gt; import pds<br />
&gt;&gt; desktop = pds.Pds()<br />
&gt;&gt; desktop.session.Name<br />
'kde'<br />
&gt;&gt; desktop.session.Version<br />
'4'<br />
&gt;&gt; desktop.config_file<br />
'/home/gokmen/.kde4/share/config/kdeglobals'<br />
&gt;&gt; desktop.settings('Icons/Theme', 'default')<br />
u'oxygen'</code></p>
<h3>Other Classes</h3>
<p>PDS also provides the following classes;</p>
<p><strong>QIconLoader</strong> &#8211; for icon loading from current desktop settings (Kde 4, Kde 3.5, Xfce ..)</p>
<p><strong>QUniqueApplication</strong> &#8211; for creating a unique application like KUniqueApplication. It also provides sending commands to running instances through QLocalServer.</p>
<p><strong>I18n</strong> &#8211; Pds uses Gettext for translations and supports the kdelibs&#8217; i18n-like parameters such as (%1, %2).</p>
<p><strong>Notification</strong> &#8211; Uses PyNotify if it&#8217;s installed otherwise it uses QSystemTrayIcon balloon message.</p>
<p><em>worth a thousand words..</em></p>
<p>The following example shows two running Package-Manager instances; first one is running as a KUniqueApplication on Kde 4.4 provided by kdelibs4 and the second one is running as a QUniqueApplication which is provided by Pardus Desktop Services on Kde 3.5. <strong><em>Same application, same features, one code..</em></strong></p>
<p><a href="http://blog.ratonred.com/wp-content/uploads/2010/04/kde-4-pm.png"><img class="size-medium wp-image-531 alignleft" title="Package Manager Running on Kde 4 as KUniqueApplication" src="http://blog.ratonred.com/wp-content/uploads/2010/04/kde-4-pm-300x114.png" alt="" width="300" height="114" /></a> <a href="http://blog.ratonred.com/wp-content/uploads/2010/04/kde-3-pm.png"><img class="size-medium wp-image-532 alignleft" title="Package Manager Running on Kde 3.5 as QUniqueApplication (PDS)" src="http://blog.ratonred.com/wp-content/uploads/2010/04/kde-3-pm-300x116.png" alt="" width="300" height="116" /></a></p>
<p style="text-align: left;">You can checkout source code of Pds from <a href="http://websvn.pardus.org.tr/uludag/trunk/pds">here</a> and you may have a look at the <a href="http://websvn.pardus.org.tr/uludag/branches/kde/package-manager/pureQt4/">package-manager fork</a> for an example usage of Pds.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.gokmengoksel.com/2010/04/universal_apps/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Las Palmas</title>
		<link>http://blog.gokmengoksel.com/2009/07/las-palmas/</link>
		<comments>http://blog.gokmengoksel.com/2009/07/las-palmas/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 17:12:52 +0000</pubDate>
		<dc:creator>Gökmen Göksel</dc:creator>
				<category><![CDATA[KDE]]></category>
		<category><![CDATA[Pardus]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Türkçe]]></category>
		<category><![CDATA[gezegen.linux]]></category>
		<category><![CDATA[gezegen.pardus]]></category>

		<guid isPermaLink="false">http://blog.ratonred.com/?p=396</guid>
		<description><![CDATA[Bu yıl KDE ve Gnome vakfının birçok sponsorun da desteği ile birlikte düzenlediği Desktop Summit &#8217;09 için biraz önce Kanarya Adaları&#8216;na geldik Gökçen ile birlikte. 03-11 Temmuz arasında olacak, Akademy ve GUADEC katılımcılarının bir arada yer alacağı etkinliğin son günleri ise İspanyolca sunumlar ile öncelikli Kanarya Adaları sakinleri ve İspanyol ziyaretçilere adanmış olacak. KDE 4 [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" title="Desktop Summit 09" src="http://www.grancanariadesktopsummit.org/sites/default/themes/grancanaria/images/logo.png" alt="" width="236" height="137" /></p>
<p>Bu yıl KDE ve Gnome vakfının birçok <a href="http://www.grancanariadesktopsummit.org/node/68">sponsorun</a> da desteği ile birlikte düzenlediği <a href="http://www.grancanariadesktopsummit.org/">Desktop Summit &#8217;09</a> için biraz önce <a href="http://en.wikipedia.org/wiki/Canary_Islands">Kanarya Adaları</a>&#8216;na geldik Gökçen ile birlikte. 03-11 Temmuz arasında olacak, Akademy ve GUADEC katılımcılarının bir arada yer alacağı etkinliğin son günleri ise İspanyolca sunumlar ile öncelikli Kanarya Adaları sakinleri ve İspanyol ziyaretçilere adanmış olacak.</p>
<p>KDE 4 ile bu seviyede bütünleşmiş başka bir Linux dağıtımının olmadığını düşünürsek, Pardus&#8217;un bu etkinliğe katılıyor olması gayet heyecan verici ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gokmengoksel.com/2009/07/las-palmas/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Nokia Developer Summit, New NM \o/</title>
		<link>http://blog.gokmengoksel.com/2009/04/nokia-developer-summit-new-nm-o/</link>
		<comments>http://blog.gokmengoksel.com/2009/04/nokia-developer-summit-new-nm-o/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 15:11:08 +0000</pubDate>
		<dc:creator>Gökmen Göksel</dc:creator>
				<category><![CDATA[KDE]]></category>
		<category><![CDATA[Pardus]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[planet.kde]]></category>
		<category><![CDATA[planet.pardus]]></category>

		<guid isPermaLink="false">http://blog.ratonred.com/?p=356</guid>
		<description><![CDATA[While watching some great talks in Nokia Developer Summit, Monaco I decided to blog about our new Network Manager which is made with great capabilities of KDE, Qt and Comar. If you remember from my blog entry about Network Manager Plasmoid, Pardus uses Comar layer for all stuff that needs by a desktop user; networking, [...]]]></description>
			<content:encoded><![CDATA[<p>While watching some great talks in <a href="http://events.nokia.com/developersummit/">Nokia Developer Summit, Monaco</a> I decided to blog about our new Network Manager which is made with great capabilities of KDE, Qt and Comar.</p>
<p>If you remember from my blog entry about <a href="http://blog.ratonred.com/2009/02/network-manager-plasmoid/">Network Manager Plasmoid</a>, Pardus uses Comar layer for all stuff that needs by a desktop user; networking, user operations, service operations, display management, disk management etc. It also integrated with PolicyKit; so you can define atomic privileges per user. Comar also provides great API that helps Qt&#8217;s &#8220;<strong>Code less, Create more.</strong>&#8221; thought ;)</p>
<p style="text-align: center;"><a href="http://blog.ratonred.com/wp-content/uploads/2009/04/l1060678.png"><img class="size-medium wp-image-358 aligncenter" title="l1060678" src="http://blog.ratonred.com/wp-content/uploads/2009/04/l1060678-236x300.png" alt="l1060678" width="236" height="300" /></a></p>
<p>For example, to connect a profile that you have in your wireless profile list:</p>
<pre>&gt;&gt; import comar
&gt;&gt; link = comar.Link()
&gt;&gt; link.Net.Link['wireless_tools'].setState('Monaco','up')</pre>
<p>That&#8217;s all ! And if you need a privilege for this operation Comar will call PolicyKit-Kde4 for asking you a password ;) Comar uses D-Bus for communication and it is possible to make aysnc calls just by using <strong>async</strong> key and proper function to notify by current operation.</p>
<p>And this is the New Network Manager of Pardus !</p>
<p style="text-align: center;"><a href="http://blog.ratonred.com/wp-content/uploads/2009/04/nm-main.png"><img class="size-medium wp-image-357 aligncenter" title="nm-main" src="http://blog.ratonred.com/wp-content/uploads/2009/04/nm-main-300x139.png" alt="nm-main" width="300" height="139" /></a><strong></strong></p>
<p><strong>Don&#8217;t forget to watch the screencast in <a href="http://blog.ratonred.com/network-manager.ogv">here</a> !</strong></p>
<p>If everything goes ok I will be at Akademy Gran Canaria and I hope we will show you a lot of impressive tools that we made ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gokmengoksel.com/2009/04/nokia-developer-summit-new-nm-o/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

