<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6968322</id><updated>2011-04-21T20:23:47.682+02:00</updated><category term='pointers'/><category term='PHP'/><category term='KDE'/><category term='unreleased'/><category term='KDE4'/><category term='programming101'/><category term='screenies'/><category term='atom'/><category term='gtk'/><category term='XML'/><category term='aggregation'/><category term='qt'/><category term='review'/><category term='okular'/><category term='pdf'/><category term='screenshots'/><category term='gtk-qt'/><category term='KDE4.0.0'/><title type='text'>off-topic</title><subtitle type='html'>When there is something you should know, it gets posted here</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://drowstar.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://drowstar.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>drowstar</name><uri>http://www.blogger.com/profile/10706132950886231363</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://www.cip.ifi.lmu.de/~mauder/pics/Avatar.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6968322.post-2259409600825659562</id><published>2009-05-13T10:36:00.006+02:00</published><updated>2009-05-13T16:47:58.791+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='screenshots'/><category scheme='http://www.blogger.com/atom/ns#' term='okular'/><category scheme='http://www.blogger.com/atom/ns#' term='KDE4'/><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><title type='text'>Okular - KDE4 PDF Viewer (and much more)</title><content type='html'>One of the exciting new programs introduced in KDE 4.0 is a unified document viewer called &lt;a href="http://okular.kde.org/"&gt;Okular&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Based on the solid foundation of KPDF from the KDE3 era, Okular became a document viewer with many more features and support for &lt;a href="http://okular.kde.org/formats.php"&gt;a large number of formats&lt;/a&gt;. At the time I wrote about it in my &lt;a href="http://drowstar.blogspot.com/2008/01/first-look-at-unreleased-kde400-with.html"&gt;blog post about KDE4.0.0&lt;/a&gt; it supported 28 file types. In version 0.8.2 (part of KDE 4.2.2) as shipped with Kubuntu Jaunty it supports 45 file types. Note that these numbers may vary greatly with the number of packages supporting various file types installed and that some of the supported types are just compressed versions of others.&lt;br /&gt;&lt;br /&gt;Here is what it looks like displaying in order: a PDF file, a JPG image, an OpenDocument document and a Comic Book Archive comic.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pics.roffnoppe.de/okular/okular_viewing_pdf.png"&gt;&lt;img src="http://pics.roffnoppe.de/okular/thumbs/okular_viewing_pdf.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pics.roffnoppe.de/okular/okular_viewing_jpg.png"&gt;&lt;img src="http://pics.roffnoppe.de/okular/thumbs/okular_viewing_jpg.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pics.roffnoppe.de/okular/okular_viewing_odt.png"&gt;&lt;img src="http://pics.roffnoppe.de/okular/thumbs/okular_viewing_odt.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pics.roffnoppe.de/okular/okular_viewing_comic_book.png"&gt;&lt;img src="http://pics.roffnoppe.de/okular/thumbs/okular_viewing_comic_book.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Additionally Okular supports a presentation mode (not pictured) as well as annotations and reviews:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pics.roffnoppe.de/okular/okular_reviews.png"&gt;&lt;img src="http://pics.roffnoppe.de/okular/thumbs/okular_reviews.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Okular is slick, powerful and easy to use. It is a great example of the new user interaction ideals seen in all components of KDE 4.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6968322-2259409600825659562?l=drowstar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drowstar.blogspot.com/feeds/2259409600825659562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6968322&amp;postID=2259409600825659562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/2259409600825659562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/2259409600825659562'/><link rel='alternate' type='text/html' href='http://drowstar.blogspot.com/2009/05/okular-kde4-pdf-viewer-and-much-more.html' title='Okular - KDE4 PDF Viewer (and much more)'/><author><name>drowstar</name><uri>http://www.blogger.com/profile/10706132950886231363</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://www.cip.ifi.lmu.de/~mauder/pics/Avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6968322.post-5836786908022463928</id><published>2009-04-09T21:01:00.007+02:00</published><updated>2009-04-09T22:28:23.456+02:00</updated><title type='text'>Location-Based Services on the Android Platform</title><content type='html'>&lt;img src="http://markus.mauder.name/pictures/fopra/android_logo1.png" alt="Android" style="float: left;" /&gt;If you are like &lt;a href="http://markus.mauder.name"&gt;me&lt;/a&gt; you have ever large plans for projects and products, which more often than not are doomed from the outset by a severe lack of time. All this changes of course when the project you are tackling is one which you are being watched and mentored to do. The amount of time at your disposal doesn't change, of course. Instead it is not the project being doomed, it is you if you don't make the time. This post is about a project, which started in a relaxing atmosphere such as this. If you want all the gory details get &lt;a href="http://markus.mauder.name/files/fopra/maud09.pdf"&gt;the paper&lt;/a&gt; I am about to introduce to you now.&lt;br /&gt;&lt;br /&gt;For the last far too long period of time I have been developing a project for university. The goal of which was to evaluate the new &lt;a href="http://developer.android.com"&gt;Google Android mobile device platform&lt;/a&gt; for its suitability to the development of location-based services.&lt;br /&gt;&lt;br /&gt;A &lt;a href="http://en.wikipedia.org/wiki/Location-based_service"&gt;location-based service&lt;/a&gt; - besides sounding remarkably cool - is made up of a program or set of programs which supply the user with information and actions depending on his or her location. It is a comparatively easy to achieve kind of context-awareness. The idea being that if we supply our assistant devices with information about our current environment they ought to be able to filter the information we might want to access and present us with actions we are more likely to take than they would otherwise be. The research community has high hopes for location-based services. Projecting that it will allow major gains in usability, going so far as to make ideas practical, which have so far never come to fruition.&lt;br /&gt;&lt;br /&gt;With a whole new player (Android) with powerful backing (Google) entering the mobile arena the question of whether it might be able to stir things up in the location-based service space was intriguing. So I set out to build a location-based service to evaluate the Android platform.&lt;br /&gt;&lt;br /&gt;&lt;h2 style="clear: both;"&gt;The project&lt;/h2&gt;&lt;br /&gt;&lt;img src="http://markus.mauder.name/pictures/fopra/conditions1.png" alt="Specify when and where to show the message" style="float: left; width: 50%;" /&gt;Say you are getting dozens of emails every day. (Reading - as you are - a blog post about an operating system designed to run on a mobile communications device, I'd say this is probably not too far from the truth.) Many of these messages will ask you to do stuff you really cannot be bothered to do right now. A sufficiently advanced and knowledgeable assistant device would be able to filter these messages and present them to you when you are ready to act upon them, when otherwise you'd just become cross. This is obviously an example of a context-aware application. And the information required to fulfill this vision are notoriously hard to come by. So as everybody does, I took a step back and morphed this concept into an application which could work on the subset of context information I might somewhat easily obtain: location and time.&lt;br /&gt;&lt;br /&gt;The resulting application is this: A friend of yours sends you a message. She knows she stands a better chance of you getting back to her if you receive the message when you are in the mood and have the opportunity to act upon it. So she annotates the message with a time and place she thinks you might be willing to receive it. Say an invitation for dinner is likely to be interesting to you beginning around 5 in the evening and only if you are at home (ie not working or commuting).&lt;br /&gt;The finished application works. With &lt;a href="#problem"&gt;a little huge problem&lt;/a&gt; beyond my control, which I will get to.&lt;br /&gt;&lt;br /&gt;&lt;h2 style="clear: both;"&gt;Developing on Android&lt;/h2&gt;&lt;br /&gt;&lt;img src="http://markus.mauder.name/pictures/fopra/developer.png" alt="Developer" style="float: right;" /&gt;Android is well suited to the development of mobile applications. This is rather important if you want to develop any kind of meaningful location-based service. A location-based service running on your desktop computer might before long turn out to be rather boring.&lt;br /&gt;Android requires that developers design applications differently from traditional environments. And in my opinion (hey, that's what blogs are for) it was a good decision that it does. Android applications are split into a number of comparatively loosely coupled components, which act in concert to produce the "experience" of the product. Saving of data is one component's responsibility, showing one particular view is another, reacting to changes in the environment is a third. Together these components create an application, which is capable of storing data, interacting with the user and reacting to changes in the environment. (If this sounds interesting to you, you should really &lt;a href="http://markus.mauder.name/files/fopra/maud09.pdf"&gt;read the paper&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;&lt;img src="http://markus.mauder.name/pictures/fopra/friendcontext.png" alt="Actions to take for a friend" style="float: left; width: 50%;" /&gt;These applications are just as powerful as more monolithic ones, but they offer the system a lot more power to manage its components. This way the system can guarantee that applications remain as responsive as possible under resource constraints. Which is rather important in a mobile environment.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Follow the Android&lt;/h2&gt;&lt;br /&gt;Unfortunately, when I started developing the project the current version of Android was a pre-release. For one this meant that I had to port the project a number of times as the API changed. For another there were a number of bugs, which were not documented, requiring me to debug the project without actually turning up any bugs.&lt;br /&gt;&lt;br /&gt;&lt;a name="problem"&gt;&lt;/a&gt;&lt;br /&gt;But in hindsight worst of all was that the Google decided to remove built-in XMPP capabilities in one of the last pre-releases. At the beginning of the project it looked as though tight XMPP integration would become a major selling point. So the message transfer mechanism I built the whole baby around of is all XMPP. And when Google decided to drop that technology (for &lt;a href="http://android-developers.blogspot.com/2008/08/some-information-on-apis-removed-in.html"&gt;dubious reasons&lt;/a&gt;) I was left out in the cold. So no using the application on real devices in the foreseeable future. Sucks? Yeah, big time.&lt;br /&gt;&lt;br /&gt;&lt;h2 style="clear: both;"&gt;Is Android the sliced bread of location-based services?&lt;/h2&gt;&lt;br /&gt;&lt;img src="http://markus.mauder.name/pictures/fopra/thumbsup.png" alt="Android is a good choice for location-based service development" style="float: right;" /&gt;As any answer to such a question my results can only be seen as a kind of well-informed opinion. Generally yes. Android provides a number of useful features in the context of location-based services. For one it has built-in location APIs and a maps widget, which is readily available on most devices (by virtue of being a Google-supplied "Optional API"). So if all you are after is a well integrated location system, Android is as good a choice as any. Additionally, being a new platform Android is certainly not any less advanced concerning the technologies which have so far proven to be interesting.&lt;br /&gt;Is that enough to learn a new platform? Frankly, I don't know. Assuming most of the bugs that bothered me so much have been worked out, I think Android should be a pretty nice environment to program in. Designing my project took a few iterations to get right and I think this is probably the largest obstacle facing any newcomer to the Android platform.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://markus.mauder.name/files/fopra/maud09.pdf"&gt;Location-Based Services on the Android Platform paper&lt;/a&gt; can be downloaded on my website. My presentations are usually not easy to comprehend without the accompanying talk. And it is in German. But here is the &lt;a href="http://markus.mauder.name/files/fopra/maud09_presentation.pdf"&gt;Location-Based Services on Android presentation&lt;/a&gt; as well.&lt;br /&gt;&lt;br /&gt;I sincerely hope this project is of value to you. If there is any information you'd like me to give you or if you have something for me, please leave a comment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6968322-5836786908022463928?l=drowstar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drowstar.blogspot.com/feeds/5836786908022463928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6968322&amp;postID=5836786908022463928' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/5836786908022463928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/5836786908022463928'/><link rel='alternate' type='text/html' href='http://drowstar.blogspot.com/2009/04/location-based-services-on-android.html' title='Location-Based Services on the Android Platform'/><author><name>drowstar</name><uri>http://www.blogger.com/profile/10706132950886231363</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://www.cip.ifi.lmu.de/~mauder/pics/Avatar.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6968322.post-4497099825894253260</id><published>2009-02-01T16:04:00.003+01:00</published><updated>2009-03-28T18:02:29.239+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='atom'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='aggregation'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>Simple atom aggregator in PHP (with source code)</title><content type='html'>&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; width: 128px; height: 128px;" src="http://markus.mauder.name/pictures/atom.png" border="0" alt="" /&gt;I wrote a &lt;a href="http://markus.mauder.name/files/projects/atomparser/atomparser.inc"&gt;small class to fetch and parse atom feeds in PHP&lt;/a&gt;. This could be useful to someone, so I release it under the GPL. The result of this little project can be seen on my &lt;a href="http://markus.mauder.name/"&gt;web site&lt;/a&gt;. Prominently featured at the top of the page is a list with my recent blog posts aggregated from various web services.&lt;br /&gt;&lt;br /&gt;This was an interesting little project, which lends itself as a nice example for people interested in PHP programming. Note though that PHP is not really my area of expertise, so there are likely ways this could be improved. Leave a comment!&lt;br /&gt;&lt;br /&gt;This fun little project consists of two classes: &lt;span style="font-style: italic;"&gt;Entry&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;AtomParser&lt;/span&gt;. AtomParser fetches a feed and parses its contents. This is made easy by &lt;a href="http://php.net/manual/en/book.xml.php"&gt;PHP's XML Parser&lt;/a&gt; facilities. The information likely to be interesting to people wanting to show the contents of a blog on a different website (most importantly title and text of the post) are stored in Entry objects.&lt;br /&gt;&lt;br /&gt;For convenience AtomParser supports adding multiple sources and sorting them by date. Retrival of the entries is realized in a for-loop friendly &lt;span style="font-style: italic;"&gt;getEntryIterator()&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;hasNextEntry()&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;getNextEntry()&lt;/span&gt; way.&lt;br /&gt;&lt;br /&gt;Combined this allows the following snippet to work:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$parser = new AtomParser();&lt;br /&gt;$parser-&gt;addSource("http://identi.ca/api/statuses/user_timeline/mauder.atom", true /*microblog*/);&lt;br /&gt;$parser-&gt;addSource("http://drowstar.blogspot.com/feeds/posts/default", false);&lt;br /&gt;$parser-&gt;sortByDate();&lt;br /&gt;&lt;br /&gt;for($iterator = $parser-&gt;getEntryIterator();&lt;br /&gt;  $parser-&gt;hasNextEntry();&lt;br /&gt;) {&lt;br /&gt;  $entry = $parser-&gt;getNextEntry();&lt;br /&gt;  printf("&amp;lt;h1&amp;gt;%s (%s)&amp;lt;/h1&amp;gt;\n%s\n", $entry-&gt;title, date("Y-m-d", $entry-&gt;date), $entry-&gt;text);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The snippet I actually use on &lt;a href="http://markus.mauder.name"&gt;mauder.name&lt;/a&gt; is rather more complicated, but as the presentation is very much a matter of taste I leave it to the reader to find one he is happy with.&lt;br /&gt;&lt;br /&gt;I release this snippet under the GPL. Email me if you need a different license.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6968322-4497099825894253260?l=drowstar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drowstar.blogspot.com/feeds/4497099825894253260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6968322&amp;postID=4497099825894253260' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/4497099825894253260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/4497099825894253260'/><link rel='alternate' type='text/html' href='http://drowstar.blogspot.com/2009/02/simple-atom-aggregator-in-php-with.html' title='Simple atom aggregator in PHP (with source code)'/><author><name>drowstar</name><uri>http://www.blogger.com/profile/10706132950886231363</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://www.cip.ifi.lmu.de/~mauder/pics/Avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6968322.post-3317661036238784205</id><published>2008-02-14T12:34:00.013+01:00</published><updated>2008-02-23T12:26:11.291+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='screenshots'/><category scheme='http://www.blogger.com/atom/ns#' term='gtk-qt'/><category scheme='http://www.blogger.com/atom/ns#' term='KDE4'/><category scheme='http://www.blogger.com/atom/ns#' term='qt'/><category scheme='http://www.blogger.com/atom/ns#' term='screenies'/><title type='text'>Integrating GTK apps with the KDE4 desktop with gtk-qt for Qt4 (screenshots)</title><content type='html'>For KDE3 David Sansome wrote a special GTK theme &lt;a href="http://gtk-qt.ecs.soton.ac.uk/index.php"&gt;gtk-qt&lt;/a&gt;, which instead of drawing its own representation of buttons and other user interface elements, called the corresponding Qt3 drawing functions. Believe me, this sounds a lot more trivial than it is.&lt;br /&gt;&lt;br /&gt;When it was done, it showed some &lt;a href="http://gtk-qt.ecs.soton.ac.uk/screenshots.php"&gt;very impressive results&lt;/a&gt;.&lt;br /&gt;&lt;div&gt;&lt;img src="http://pics.roffnoppe.de/gtkqt4/gtkqt3-gimppolyester.png" alt="gtk-qt for KDE3" /&gt;Image courtesy of &lt;a href="http://gtk-qt.ecs.soton.ac.uk/screenshots.php?gimppolyester"&gt;David Sansome&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;However, after KDE4 was released (&lt;a href="http://drowstar.blogspot.com/2008/01/first-look-at-unreleased-kde400-with.html"&gt;my review&lt;/a&gt;), Qt3 started to look equally out of place as gtk rather quickly, when the Oxygen widget style manifested itself as the default KDE4 look:&lt;br /&gt;&lt;img src="http://pics.roffnoppe.de/gtkqt4/gtkqt4-oxygen_detail.png" /&gt;&lt;img src="http://pics.roffnoppe.de/gtkqt4/gtkqt3-gimp_detail.png" /&gt;&lt;br /&gt;&lt;br /&gt;When &lt;a href="http://www.mozilla.com/en-US/firefox/3.0b3/releasenotes/"&gt;Firefox 3 beta 3&lt;/a&gt; was released the other day I tried to get a glimpse of the new gtk widget integration. Suffice it to say: It looked really strange and not like something they would have bragged about.&lt;br /&gt;&lt;img src="http://pics.roffnoppe.de/gtkqt4/gtkqt3-firefox.png" /&gt;&lt;br /&gt;&lt;br /&gt;It's obviously KDE3 showing here. So I decided to see if there was a KDE4 version of gtk-qt. It turns out there isn't. But I found &lt;a href="http://gtk-qt.ecs.soton.ac.uk/trac/ticket/49"&gt;this bug report&lt;/a&gt; and a reply by David Sansome himself, stating that:&lt;br /&gt;&lt;blockquote&gt;Just wanted to let you know that I *am* working on this, but as previous posters have said Qt4 has changed a lot in the theming department and it's not as simple as just porting the old code over.&lt;/blockquote&gt;&lt;br /&gt;He has created a branch in the development repository, which I have checked out. Screnshots incoming!&lt;br /&gt;&lt;br /&gt;Keep in mind: &lt;b&gt;THIS IS NOT A RELEASE!&lt;/b&gt; But very much a work in progress. If there are problems, they will be ironed out!&lt;br /&gt;&lt;br /&gt;The first impression is that it looks &lt;b&gt;very impressive&lt;/b&gt;!&lt;br /&gt;&lt;img src="http://pics.roffnoppe.de/gtkqt4/gtkqt4-gimp.png" style="float: left;" /&gt;&lt;img src="http://pics.roffnoppe.de/gtkqt4/gtkqt4-gimp-menu1.png" /&gt;&lt;br /&gt;&lt;br /&gt;The not quite so straight-forward firefox interface reveals some drawing issue though:&lt;br /&gt;&lt;img src="http://pics.roffnoppe.de/gtkqt4/gtkqt4-firefox.png" /&gt;&lt;br /&gt;But they are IMHO a lot better to look at than the qt3 version, which just looks thoroughly out of place:&lt;br /&gt;&lt;img src="http://pics.roffnoppe.de/gtkqt4/gtkqt3-firefox.png" /&gt;&lt;br /&gt;&lt;br /&gt;There are also issues with widgets embedded into web pages, which disappear on a re-draw (for example scrolling page-wise, not progressively).&lt;br /&gt;&lt;img src="http://pics.roffnoppe.de/gtkqt4/gtkqt4-bugzilla.png" /&gt;&lt;img src="http://pics.roffnoppe.de/gtkqt4/gtkqt4-bugzilla1.png" /&gt;&lt;br /&gt;Compare with the same piece rendered by Konqueror:&lt;br /&gt;&lt;img src="http://pics.roffnoppe.de/gtkqt4/gtkqt4-bugzilla-konqueror.png" /&gt;&lt;br /&gt;&lt;br /&gt;Overall the port seems to be progressing well (the repository is seeing frequent commits) and I look forward to GTK apps integrating more smoothly with the KDE4 desktop.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; I have made a mistake attributing the brokenness we saw with the current firefox beta to gtkqt. Instead it appears the feature was not working quite correctly in firefox itself. I noticed a couple of days after this post was published that the same drawing weirdness we saw in the screenshot also appears on a pure gnome system. I can't reproduce it now and as matter of fact the current ubuntu packages on hardy make firefox fit in nicely.&lt;br /&gt;Sorry about this mis-information. It seems gtkqt4 is in even better shape than I originally thought.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6968322-3317661036238784205?l=drowstar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drowstar.blogspot.com/feeds/3317661036238784205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6968322&amp;postID=3317661036238784205' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/3317661036238784205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/3317661036238784205'/><link rel='alternate' type='text/html' href='http://drowstar.blogspot.com/2008/02/integrating-gtk-apps-with-kde4-desktop.html' title='Integrating GTK apps with the KDE4 desktop with gtk-qt for Qt4 (screenshots)'/><author><name>drowstar</name><uri>http://www.blogger.com/profile/10706132950886231363</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://www.cip.ifi.lmu.de/~mauder/pics/Avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6968322.post-8515045560995073623</id><published>2008-02-13T22:52:00.005+01:00</published><updated>2008-02-13T23:39:45.099+01:00</updated><title type='text'>The new Google Android interface</title><content type='html'>&lt;img src="http://pics.roffnoppe.de/android-m5/android-logo-small.png" style="float:left"&gt;Google released a new version of the SDK of its Android mobile platform today. News that this release would introduce a new interface has been going around and in fact the new interface has appeared.&lt;br /&gt;&lt;br /&gt;Being a sucker for this kind of thing (and having some work for university to put off...), I installed the new SDK and prepared a few screenshots of the new interface for your viewing pleasure.&lt;br /&gt;&lt;br /&gt;Keep in mind that Google still calls this interface a work in progress.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;home screen&lt;/h2&gt;&lt;br /&gt;&lt;a href="http://pics.roffnoppe.de/android-m5/android_home.png"&gt;&lt;img style="" src="http://pics.roffnoppe.de/android-m5/android_home.png" alt=""&gt;&lt;/a&gt; &lt;a href="http://pics.roffnoppe.de/android-m5/android_recently_used.png"&gt;&lt;img style="" src="http://pics.roffnoppe.de/android-m5/android_recently_used.png" alt=""&gt;&lt;/a&gt;&lt;br /&gt;During boot Android shows a &lt;a href="http://media.battlestarwiki.org/images/e/ee/CylonCenturion.jpg"&gt;Cylon&lt;/a&gt; eye. After its done booting up it shows this new home screen, which gives a first impression of the new softer appearance of the interface. After you have used it for a bit it collects the most recently used applications in a list on the home screen.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Making calls&lt;/h2&gt;&lt;br /&gt;&lt;a href="http://pics.roffnoppe.de/android-m5/android_dialer.png"&gt;&lt;img style="" src="http://pics.roffnoppe.de/android-m5/android_dialer.png" alt=""&gt;&lt;/a&gt; &lt;a href="http://pics.roffnoppe.de/android-m5/android_contact_list.png"&gt;&lt;img style="" src="http://pics.roffnoppe.de/android-m5/android_contact_list.png" alt=""&gt;&lt;/a&gt;&lt;br /&gt;The contact list and dialer are layed out much more generously than in previous versions. You can already see that the interface has a unified look.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Maps&lt;/h2&gt;&lt;br /&gt;&lt;a href="http://pics.roffnoppe.de/android-m5/android_maps.png"&gt;&lt;img style="" src="http://pics.roffnoppe.de/android-m5/android_maps.png" alt=""&gt;&lt;/a&gt; &lt;a href="http://pics.roffnoppe.de/android-m5/android_maps_satellite.png"&gt;&lt;img style="" src="http://pics.roffnoppe.de/android-m5/android_maps_satellite.png" alt=""&gt;&lt;/a&gt;&lt;br /&gt;Maps has gained features in this release. The basic interface hasn't changed much, but you can now find a place to eat in Sweden and get driving directions in Australia.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pics.roffnoppe.de/android-m5/android_maps_menu.png"&gt;&lt;img style="" src="http://pics.roffnoppe.de/android-m5/android_maps_menu.png" alt=""&gt;&lt;/a&gt; &lt;a href="http://pics.roffnoppe.de/android-m5/android_maps_searchresults.png"&gt;&lt;img style="" src="http://pics.roffnoppe.de/android-m5/android_maps_searchresults.png" alt=""&gt;&lt;/a&gt; &lt;a href="http://pics.roffnoppe.de/android-m5/android_maps_sydney_to_uluru_map_directions.png"&gt;&lt;img style="" src="http://pics.roffnoppe.de/android-m5/android_maps_sydney_to_uluru_map_directions.png" alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Browser&lt;/h2&gt;&lt;br /&gt;&lt;a href="http://pics.roffnoppe.de/android-m5/android_browser_menu.png"&gt;&lt;img style="" src="http://pics.roffnoppe.de/android-m5/android_browser_menu.png" alt=""&gt;&lt;/a&gt; &lt;a href="http://pics.roffnoppe.de/android-m5/android_browser_nytimes_zoom.png"&gt;&lt;img style="" src="http://pics.roffnoppe.de/android-m5/android_browser_nytimes_zoom.png" alt=""&gt;&lt;/a&gt;&lt;br /&gt;The browser is based on webkit like the one in the iphone. As such its capable of rendering real web pages. Here two we find the familiar playful Android interface.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;3D and advanced eye candy&lt;/h2&gt;&lt;br /&gt;Android has some graphics niftiness up its sleeves, which has not been put to very extensive use in the current SDK yet. There are some transparency effects, the dialog and user interface elements animate into view and there is even the occasional trace of 3D rendering. The most impressive looking effects are still only visible in developer demos though.&lt;br /&gt;&lt;a href="http://pics.roffnoppe.de/android-m5/android_browser_more_windows.png"&gt;&lt;img style="" src="http://pics.roffnoppe.de/android-m5/android_browser_more_windows.png"&gt;&lt;/a&gt; &lt;a href="http://pics.roffnoppe.de/android-m5/android_3d.png"&gt;&lt;img style="" src="http://pics.roffnoppe.de/android-m5/android_3d.png"&gt;&lt;/a&gt; &lt;a href="http://pics.roffnoppe.de/android-m5/android_3d_demo.png"&gt;&lt;img style="" src="http://pics.roffnoppe.de/android-m5/android_3d_demo.png" alt=""&gt;&lt;/a&gt; &lt;a href="http://pics.roffnoppe.de/android-m5/android_3d_rubiks.png"&gt;&lt;img style="" src="http://pics.roffnoppe.de/android-m5/android_3d_rubiks.png" alt=""&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Conclusions&lt;/h2&gt;&lt;br /&gt;While the user interface has seen a major revamp in this release, this is still an early look for developers and will likely still receive more work.&lt;br /&gt;The user interface was just one change in this release. Many interesting things were added under the hood. For example two interesting non-GUI additions are geo-coding (making the map searches pictured above possible) and more media codecs (among many others there is now support for ogg vorbis (yay for free codecs)).&lt;br /&gt;&lt;br /&gt;The Android team is clearly making progress and have created a much more unified looking interface. For my taste they have overdone the playfulness just a little bit though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6968322-8515045560995073623?l=drowstar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drowstar.blogspot.com/feeds/8515045560995073623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6968322&amp;postID=8515045560995073623' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/8515045560995073623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/8515045560995073623'/><link rel='alternate' type='text/html' href='http://drowstar.blogspot.com/2008/02/new-google-android-interface.html' title='The new Google Android interface'/><author><name>drowstar</name><uri>http://www.blogger.com/profile/10706132950886231363</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://www.cip.ifi.lmu.de/~mauder/pics/Avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6968322.post-6604397414869452496</id><published>2008-01-06T14:00:00.000+01:00</published><updated>2008-01-06T16:25:10.340+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KDE'/><category scheme='http://www.blogger.com/atom/ns#' term='KDE4.0.0'/><category scheme='http://www.blogger.com/atom/ns#' term='screenshots'/><category scheme='http://www.blogger.com/atom/ns#' term='KDE4'/><category scheme='http://www.blogger.com/atom/ns#' term='unreleased'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><category scheme='http://www.blogger.com/atom/ns#' term='screenies'/><title type='text'>First look at the unreleased KDE4.0.0 (with screenshots)</title><content type='html'>&lt;p style="font-style: italic"&gt;KDE 4.0.0 is days away from being released. In this post I show you some pieces of the final look of KDE4.0.0 and mention some of the most anticipated features of this great step forward for the Free software desktop. Let's take a look at the final state of this highly anticipated release.&lt;/p&gt;&lt;br /&gt;&lt;p style="text-align:center"&gt;&lt;img title="KDE4.0.0 release counter" src="http://games.kde.org/new/counter/" /&gt;&lt;/p&gt;&lt;br /&gt;While some of the most shift-key-challenged KDE personalities have &lt;a href="http://aseigo.blogspot.com/2008/01/talking-bluntly.html" title="talking bluntly"&gt;cautioned against too high hopes&lt;/a&gt; for KDE4.0.0 and despite it being the very first in a long row of releases: KDE4.0.0 is a very impressive desktop.&lt;br /&gt;As the version number suggests KDE4.0.0 is the very first release since KDE3.0.0 to break binary compatibility with KDE3. Being allowed to burn some bridges is the reason so many new frameworks and large changes have landed in just one release.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Starting up&lt;/h2&gt;&lt;br /&gt;I have been following the development of KDE4 for quite a few months now. The version I base this post on is from the main KDE development (trunk in svn) at the time of the release tagging freeze. As such it should be very similar to the packages you will receive from your favorite distribution &lt;a href="http://techbase.kde.org/Schedules/KDE4/4.0_Release_Schedule#2008-01-11:_Release_KDE_4.0" title="KDE4.0.0 release"&gt;on the 11th&lt;/a&gt;.&lt;br /&gt;&lt;p style="text-align:center"&gt;&lt;a href="http://picasaweb.google.com/mmauder/KDE400/photo#5152342502705462338"&gt;&lt;img src="http://lh5.google.com/mmauder/R4DMNTrn_EI/AAAAAAAAAD0/JCgq-hVHXuA/s400/startup.png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;Progress all around&lt;/h2&gt;&lt;br /&gt;Many of the new frameworks are still almost unused in the user interface of the first KDE4 release. But some more obvious and easily implementable changes have already appeared in KDE4.0.0.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Graphics&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;Oxygen:&lt;/b&gt; Originally planned as the new icon set for KDE4, Oxygen has re-defined all aspects of KDE's user interface, including the window decorations and theme.&lt;br /&gt;&lt;p style="text-align:center"&gt;&lt;a href="http://picasaweb.google.com/mmauder/KDE400/photo#5152345685276228690"&gt;&lt;img src="http://lh6.google.com/mmauder/R4DPGjrn_FI/AAAAAAAAAFM/rJGDjrZ2_H0/s400/dolphin_with_previews.png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Plasma:&lt;/b&gt; Plasma is the new desktop shell of KDE4, one of the most anticipated components of KDE4 and the one which was started last.&lt;br /&gt;&lt;p style="text-align:center"&gt;&lt;a href="http://picasaweb.google.com/mmauder/KDE400/photo#5152342481230625826"&gt;&lt;img src="http://lh4.google.com/mmauder/R4DMMDrn_CI/AAAAAAAAADk/bDty6wUTFUA/s400/plasma_widgets.png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;Because of its late start plasma has not realized its full potential yet, but as with many things in KDE4.0.0 it will gain features rapidly in the future. Plasma's vision is a lot more than to display a panel and cool looking widgets. Stay tuned, already KDE4.1 will introduce new features.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;KWin:&lt;/b&gt; KWin has been a very robust window manager for a long time. New in KDE4 is its ability to use desktop effects, window shadows and subtle animations. These features depend on the availability of OpenGL or at least XRender, which are not fully supported on all graphics cards yet although the situation is improving rapidly.&lt;br /&gt;&lt;p style="text-align:center"&gt;&lt;a href="http://picasaweb.google.com/mmauder/KDE400/photo#5152342489820560434"&gt;&lt;img src="http://lh6.google.com/mmauder/R4DMMjrn_DI/AAAAAAAAADs/QLeKkOkudH4/s400/present_windows.png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;However to reduce the risk of an unusable interface, desktop effects may be disabled by default in KDE4.0.0. They can be easily enabled in Systemsettings (KDE4's control center replacement) under Desktop -&gt; Desktop Effects.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Applications&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;Dolphin:&lt;/b&gt; The new default file manager in KDE4. While Konqueror has retained its ability to manage files (&lt;a href="http://konqueror.kde.org/"&gt;and cook coffee&lt;/a&gt;) dolphin is written specifically for this task.&lt;br /&gt;&lt;p style="text-align:center"&gt;&lt;a href="http://picasaweb.google.com/mmauder/KDE400/photo#5152341858460367778"&gt;&lt;img src="http://lh3.google.com/mmauder/R4DLnzrn-6I/AAAAAAAAACg/Gu2hzQvjcws/s400/dolphin_configured.png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;The first visible piece of KDE4's new semantic search backend &lt;a href="http://nepomuk.semanticdesktop.org/xwiki/bin/view/Main1/"&gt;Nepomuk&lt;/a&gt; (the name won't be visible in the UI) is dolphin's ability to annotate and rate files.&lt;br /&gt;In the future Nepomuk and &lt;a href="http://strigi.sourceforge.net/"&gt;Strigi&lt;/a&gt; will help you answer questions like "Who gave me this file?" or "What sources did I use on that KDE4.0.0 blog post?"&lt;br /&gt;Progress in &lt;a href="http://trolltech.com/products/qt/homepage"&gt;Qt4&lt;/a&gt; (the toolkit KDE4 is based on) allows user interface polish like dolphin's sidebar, which changes its layout dynamically as the user drags it. No screenshot, you have to see this one in action.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Gwenview:&lt;/b&gt; KDE's image viewer Gwenview has received a lot of polish while it was ported to KDE4 and handles really, really well.&lt;br /&gt;&lt;p style="text-align:center"&gt;&lt;a href="http://picasaweb.google.com/mmauder/KDE400/photo#5152342133338274754"&gt;&lt;img src="http://lh3.google.com/mmauder/R4DL3zrn-8I/AAAAAAAAACw/SchujvZQpX8/s400/gwenview.png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;b&gt;Okular:&lt;/b&gt; The new document viewer for KDE4, based on KDE3's KPDF application. It sports annotation features, previews, presentation mode, bookmarks and support for no less than 28 file types in my build.&lt;br /&gt;&lt;p style="text-align:center"&gt;&lt;a href="http://picasaweb.google.com/mmauder/KDE400/photo#5152342468345723906"&gt;&lt;img src="http://lh5.google.com/mmauder/R4DMLTrn_AI/AAAAAAAAADU/gPYBv8OtnJ0/s400/okular.png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;Unreleased Applications&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;Amarok:&lt;/b&gt; The famous KDE based audio player has been ported to KDE4 and is receiving a major overhaul. It is currently in pre-alpha state, but I have been able to use it normally over the last few weeks. When it is ready, it may also be &lt;a href="http://amarok.kde.org/blog/archives/374-Amarok2-builds-on-Windows.html"&gt;released for windows&lt;/a&gt;.&lt;br /&gt;&lt;p style="text-align:center"&gt;&lt;a href="http://picasaweb.google.com/mmauder/KDE400/photo#5152341832690563938"&gt;&lt;img src="http://lh5.google.com/mmauder/R4DLmTrn-2I/AAAAAAAAACA/ExnlGG-rNqA/s400/amarok_alpha.png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;b&gt;Dragon Player:&lt;/b&gt; Based on the Codein video player from the KDE3 days, Dragon Player continues a successful carrier as a simple and enjoybale video player.&lt;br /&gt;&lt;p style="text-align:center"&gt;&lt;a href="http://picasaweb.google.com/mmauder/KDE400/photo#5152342133338274738"&gt;&lt;img src="http://lh3.google.com/mmauder/R4DL3zrn-7I/AAAAAAAAACo/4YXH614FHYk/s400/dragonplayer.png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;These are some of the highlights of the upcoming KDE4.0.0. I hope you enjoyed this preview and have come to share my opinion that KDE4 is going to rock!&lt;br /&gt;&lt;br /&gt;Take a look at &lt;a href="http://picasaweb.google.com/mmauder/KDE400" title="KDE4.0.0 screenshots"&gt;this album&lt;/a&gt; for these and a few more screenshots I didn't include in this post. If you would like me to screenshot another application for you let me know in the comments and I will add it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6968322-6604397414869452496?l=drowstar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drowstar.blogspot.com/feeds/6604397414869452496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6968322&amp;postID=6604397414869452496' title='47 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/6604397414869452496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/6604397414869452496'/><link rel='alternate' type='text/html' href='http://drowstar.blogspot.com/2008/01/first-look-at-unreleased-kde400-with.html' title='First look at the unreleased KDE4.0.0 (with screenshots)'/><author><name>drowstar</name><uri>http://www.blogger.com/profile/10706132950886231363</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://www.cip.ifi.lmu.de/~mauder/pics/Avatar.gif'/></author><thr:total>47</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6968322.post-8990358441308710409</id><published>2007-06-27T15:11:00.000+02:00</published><updated>2007-07-23T12:34:50.961+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming101'/><category scheme='http://www.blogger.com/atom/ns#' term='pointers'/><title type='text'>Pointers for the win</title><content type='html'>&lt;p&gt;In my last post I used quite a bit of pointer magic to implement a linked list.&lt;br /&gt;&lt;br /&gt;If you are not familiar with what pointers are you will have had a hard time understanding the implementation. Let's do something about this, shall we?&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_2Yi5ddlRSkY/RoJn9vIsVwI/AAAAAAAAAAo/vTkaN1TWO9o/s1600-h/signpost.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_2Yi5ddlRSkY/RoJn9vIsVwI/AAAAAAAAAAo/vTkaN1TWO9o/s320/signpost.png" border="0" alt="image by david ian" id="BLOGGER_PHOTO_ID_5080737639949948674" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Why not use variables only?&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;A pointer is a way to refer to some data without having to copy it.&lt;br /&gt;&lt;br /&gt;That alone may not seem worth the trouble, but there are some (or rather very many) occasions when it is easier to point at the same variable from other places of your code than it is to keep two values in sync.&lt;br /&gt;&lt;br /&gt;It may help you at first to think about pointers as meta-variables, a variable you can asign other variables to.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;So why did I use them for the linked lists?&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;Let's go back to linked lists for a moment:&lt;br /&gt;&lt;br /&gt;A linked list is comprised of several list elements.&lt;br /&gt;&lt;br /&gt;There are two aspects of linked lists, which would make them very hard to implement without pointers:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;The first element is not the list&lt;/b&gt;, but when you refer to the list, you need to refer to the first element, which in turn lets you iterate through the rest.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Elements don't contain each other&lt;/b&gt;, rather they &lt;i&gt;point&lt;/i&gt; the user at the next element in line.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Have I seen pointers before?&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;Chances are you have used pointers before without realizing it. For example, in C arrays are simply pointers, which are automatically dereferenced when you refer to an element inside the array.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Another area you will have come across are strings. You may have learned that a string in C has the type &lt;code&gt;char*&lt;/code&gt; or something. Actually, all &lt;code&gt;char*&lt;/code&gt; means is a pointer to a character. The string handling functions are smart enough to search the memory at the position the pointer points to for more characters. To mark the end of a string, C uses the zero-termination, ie the last character of a string is always a '\0'.&lt;br /&gt;&lt;br /&gt;If you are just starting out ignore this implementation detail. But remember you can impress your friends by dropping that pointers are old hat and that you use them every day.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;What is the syntax?&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;Certainly by now - with all these exciting opportunities stretching out before you - you can't bear the suspence any longer and want to know how you can use this amazing power at your finger tips:&lt;br /&gt;&lt;br /&gt;To create a pointer, you do exactly the same as you would when declaring a variable. Except you prefix the name with an asterisk *:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;    int *pointer;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And to point to another variable you assign the variable to the pointer, except you prefix its name with an ampersand &amp;:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;    int value = 42;&lt;br /&gt;    pointer = &amp;value;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And that's pretty much all there is to basic usage of pointers already. Maybe you'd also like to know what the variable you are pointing at contains? Get that by prefixing the pointer with an asterisk * again. Note that this time we are not declaring the pointer, although the prefix is the same:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;    printf("the value of the pointer is %d\n", *pointer);&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Example&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;Maybe you have noticed that when you assign to a variable from inside a function its value is not changed when your function returns. This happens by design so the rest of the program is shielded from changes by one function.&lt;br /&gt;&lt;br /&gt;But what do you do, when you want to change a variable inside a function which calls another?&lt;br /&gt;&lt;br /&gt;Well, you could make the variable public of course, but that would allow every other function to change its value as well. The answer is - you guessed it - use a pointer!&lt;br /&gt;&lt;br /&gt;A pointer is really just the address of a variable in memory (you can see this address when you do a &lt;code&gt;printf("the address of pointer is 0x%x\n", pointer);&lt;/code&gt;. Of course you very rarely want to know this address!). So you can pass a pointer and write to the address in memory where it actually lies. This happens to be inside the space of the calling function, which is why changes to the value of the pointer affect the value of the variable inside the calling function.&lt;br /&gt;&lt;br /&gt;That's a mouthful, so let me illustrate with an example:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;void set_to_five(&lt;b&gt;int *&lt;/b&gt;variable)&lt;br /&gt;{&lt;br /&gt;    printf("changing value from %d to 5\n", &lt;b&gt;*&lt;/b&gt;variable);&lt;br /&gt;    &lt;b&gt;*&lt;/b&gt;variable = 5;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main(int argc, char *argv[])&lt;br /&gt;{&lt;br /&gt;    int myvar = 3;&lt;br /&gt;    printf("myvar = %d\n", myvar);&lt;br /&gt;    set_to_five(&lt;b&gt;&amp;myvar&lt;/b&gt;);&lt;br /&gt;    printf("myvar = %d\n", myvar);&lt;br /&gt;&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Yeah, this may seem confusing at first, because of all the * and &amp; and the other *. Make yourself clear what happens in the above example and you have understood pointers.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Good luck and have fun!&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6968322-8990358441308710409?l=drowstar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drowstar.blogspot.com/feeds/8990358441308710409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6968322&amp;postID=8990358441308710409' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/8990358441308710409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/8990358441308710409'/><link rel='alternate' type='text/html' href='http://drowstar.blogspot.com/2007/06/pointers-for-win.html' title='Pointers for the win'/><author><name>drowstar</name><uri>http://www.blogger.com/profile/10706132950886231363</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://www.cip.ifi.lmu.de/~mauder/pics/Avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_2Yi5ddlRSkY/RoJn9vIsVwI/AAAAAAAAAAo/vTkaN1TWO9o/s72-c/signpost.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6968322.post-1896510658621936339</id><published>2007-02-02T17:31:00.000+01:00</published><updated>2007-02-03T15:27:53.476+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming101'/><title type='text'>linked lists</title><content type='html'>What does this statement mean?&lt;br /&gt;&lt;pre&gt;&lt;code&gt;current = current-&gt;next;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;It means that you have a structure named current, which has an attribute called next, which is of the same type as current itself. The programmer instructs the machine to use next in place of current from here on.&lt;br /&gt;Typically this statement is used to realize linked lists. These work like this: The programmer creates a couple of these structs and gives each the data we actually care about and information about the next element in line.&lt;br /&gt;For example, consider a list of people: John, Frank, Alice, Jennifer. In order to find all four of these, it is sufficient to remember that John was the first one in our list and to tell John to remember Frank, Frank to remember Alice and Alice to remember Jennifer. Now if we want to list the age of all four of them it is enough to call up John, ask him how old he is and who was the next in line and repeat this until Jennifer tells us that there was no one next.&lt;br /&gt;&lt;br /&gt;To realize this example as a program, we first need a data structure, which can hold our friends and a link to the next in line. (For simplicity we will only save the name of each in the data structure, more information would be trivial to add):&lt;br /&gt;&lt;pre&gt;&lt;code&gt;struct friendList {&lt;br /&gt;  char *name;&lt;br /&gt;  struct friendList *next;&lt;br /&gt;};&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;To iterate through them the following will work:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;struct friendList *current = john;&lt;br /&gt;while(current != NULL)&lt;br /&gt;{&lt;br /&gt;  printf("%s\n", current-&gt;name);&lt;br /&gt;  current = current-&gt;next;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is the example in full:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;struct&lt;/span&gt;&lt;span style="color: #000000;"&gt; friendList {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #800000;"&gt;char&lt;/span&gt;&lt;span style="color: #000000;"&gt; *name;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;struct&lt;/span&gt;&lt;span style="color: #000000;"&gt; friendList *next;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; main(&lt;/span&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; argc, &lt;/span&gt;&lt;span style="color: #800000;"&gt;char&lt;/span&gt;&lt;span style="color: #000000;"&gt; *argv[])&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;struct&lt;/span&gt;&lt;span style="color: #000000;"&gt; friendList friends[&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;struct&lt;/span&gt;&lt;span style="color: #000000;"&gt; friendList *current = (&lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;struct&lt;/span&gt;&lt;span style="color: #000000;"&gt; friendList *)NULL;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="font-style: italic;color: #808080;"&gt;//link each friend to next one&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; i = &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt;(i = &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;; i &amp;lt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;; i++)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    friends[i].next  = &amp;amp;friends[i+&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  friends[&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;].next = NULL;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="font-style: italic;color: #808080;"&gt;//assign values to friends we know&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  friends[&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;].name = &lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"John"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  friends[&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;].name = &lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"Frank"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  friends[&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;].name = &lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"Alice"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  friends[&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;].name = &lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"Jennifer"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="font-style: italic;color: #808080;"&gt;//lets see how easy iterating through this list really is&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  printf(&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"My friends are:&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;\n&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  current = friends;   &lt;/span&gt;&lt;span style="font-style: italic;color: #808080;"&gt;//point to first element&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;while&lt;/span&gt;&lt;span style="color: #000000;"&gt;(current != NULL)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    printf(&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"%s&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;\n&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;, current-&amp;gt;name);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    current = current-&amp;gt;next;   &lt;/span&gt;&lt;span style="font-style: italic;color: #808080;"&gt;//remember this one?&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; EXIT_SUCCESS;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Linked lists become much more useful when you make them doubly-linked-lists by specifying a previous as well as a next member of each element. This allows you to iterate through the list in both directions and from any point.&lt;br /&gt;In real life link lists are usually used to make it possible to sort them or to add elements to the list at any place, which you cannot easily do with simpler data structures like arrays.&lt;br /&gt;&lt;br /&gt;For example, to add your new friend Sarah to the list right behind John, you could do the following:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;  current = friends;&lt;br /&gt;  struct friendList sarah;&lt;br /&gt;  sarah.name = "Sarah";&lt;br /&gt;  sarah.next = current-&gt;next;&lt;br /&gt;  current-&gt;next = &amp;sarah;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As an exercise try adding the snippet above to the program and let the same while-loop run again. You will see that without any changes to the loop the output shows Sarah has joined the list and is at the correct position.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6968322-1896510658621936339?l=drowstar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drowstar.blogspot.com/feeds/1896510658621936339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6968322&amp;postID=1896510658621936339' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/1896510658621936339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/1896510658621936339'/><link rel='alternate' type='text/html' href='http://drowstar.blogspot.com/2007/02/linked-lists.html' title='linked lists'/><author><name>drowstar</name><uri>http://www.blogger.com/profile/10706132950886231363</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://www.cip.ifi.lmu.de/~mauder/pics/Avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6968322.post-115282397587735068</id><published>2006-07-13T21:33:00.000+02:00</published><updated>2006-07-13T22:52:55.933+02:00</updated><title type='text'>Fixing what AOL broke (fixing ICQ logon in Kubuntu Dapper)</title><content type='html'>&lt;p&gt;Recently (around the July 13) AOL made some changes the software running the ICQ servers, making it impossible for users of old and alternative clients to log into (and therefore use) ICQ.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;img src="http://kopete.kde.org/kopete_logo.png" style="float:left" alt="Kopete" /&gt;If you are running Kopete, a fix for this problem is already in SVN (where Kopete is developed). Unfortunatelly there is no new version of Kopete and Kubuntu has not (yet?) distributed updated packages either.&lt;br /&gt;&lt;br /&gt;There is an unofficial package by djclue917 up on &lt;a href="http://www.kde-apps.org/content/show.php?content=41143"&gt;kde-apps.org&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;span style="font-size:80%"&gt;&lt;p&gt;To fix your setup (and update your version of Kopete as an added benefit), follow these steps:&lt;br /&gt;1) Download the packages &lt;i&gt;kopete_3.5.3+kopete0.12.0-0.4_i386.deb&lt;/i&gt; and &lt;i&gt;libortp_0.7.1-0_i386.deb&lt;/i&gt; from &lt;a href="http://www.kde-apps.org/content/show.php?content=41143"&gt;kde-apps.org&lt;/a&gt; to your Desktop.&lt;br /&gt;2) Open a Konsole window (where you can type commands). &lt;span style="font-weight:bold;"&gt;Don't panic, it's not hard!&lt;/span&gt;&lt;br /&gt;Hit alt-f2, type "konsole" in the window that appears and hit enter.&lt;br /&gt;3) In the window that appears type the following series of commands (written in &lt;span style="font-style:italic;font-weight:bold"&gt;bold italics&lt;/span&gt;):&lt;br /&gt;a) &lt;span style="font-style:italic;font-weight:bold"&gt;cd Desktop&lt;/span&gt;   (change to your Desktop directory, where you downloaded the package to)&lt;br /&gt;b) &lt;span style="font-style:italic;font-weight:bold"&gt;sudo dpkg -i libortp*&lt;/span&gt; (tell Kubuntu to install the package Kopete needs to be installed)&lt;br /&gt;c) &lt;span style="font-style:italic;font-weight:bold"&gt;sudo dpkg -i kopete*&lt;/span&gt; (tell Kubuntu to install a new version of Kopete)&lt;br /&gt;4) Done! You can close Konsole now if everything went according to plan. If there was a problem, rest assured, it is very unlikely that his broke anything.&lt;/p&gt;&lt;/span&gt;&lt;br /&gt;&lt;p style="font-size:120%"&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/commons/0/03/Jabber_logo.png" style="float:right" title="jabber.org" alt="jabber.org" /&gt;&lt;b&gt;Remember:&lt;/b&gt; Get yourself an account with &lt;a href="http://www.jabber.org/user/"&gt;jabber.org&lt;/a&gt;. Jabber is a free instant messaging protocol (and much more), which guarantees that you won't have to put up with the bullshit of arrogant  companies again!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6968322-115282397587735068?l=drowstar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drowstar.blogspot.com/feeds/115282397587735068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6968322&amp;postID=115282397587735068' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/115282397587735068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/115282397587735068'/><link rel='alternate' type='text/html' href='http://drowstar.blogspot.com/2006/07/fixing-what-aol-broke-fixing-icq-logon.html' title='Fixing what AOL broke (fixing ICQ logon in Kubuntu Dapper)'/><author><name>drowstar</name><uri>http://www.blogger.com/profile/10706132950886231363</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://www.cip.ifi.lmu.de/~mauder/pics/Avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6968322.post-115253981621156841</id><published>2006-07-10T15:51:00.000+02:00</published><updated>2006-07-10T16:32:07.866+02:00</updated><title type='text'>irrepressible.info</title><content type='html'>&lt;a href="http://irrepressible.info"&gt; irrepressible.info&lt;/a&gt; is a campaign by the British section of &lt;a href="http://amnesty.org" title="Amnesty International"&gt;ai&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;p style="font-style:italic"&gt;Amnesty International, with the support of The Observer, is launching a campaign to show that online or offline the human voice and human rights are impossible to repress.&lt;/p&gt;&lt;br /&gt;&lt;a href="http://irrepressible.info/" border=0&gt;&lt;img src="http://irrepressible.info/static/images/irrepressible_banner_1.gif" title="Someone doesn't want you to read this" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://irrepressible.info/participate"&gt;Help spread the word!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6968322-115253981621156841?l=drowstar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drowstar.blogspot.com/feeds/115253981621156841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6968322&amp;postID=115253981621156841' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/115253981621156841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/115253981621156841'/><link rel='alternate' type='text/html' href='http://drowstar.blogspot.com/2006/07/irrepressibleinfo.html' title='irrepressible.info'/><author><name>drowstar</name><uri>http://www.blogger.com/profile/10706132950886231363</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://www.cip.ifi.lmu.de/~mauder/pics/Avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6968322.post-114311754117648813</id><published>2006-03-23T13:10:00.000+01:00</published><updated>2006-03-23T13:42:02.836+01:00</updated><title type='text'>Update</title><content type='html'>I wonder how many people will notice that this blog is about six months late. Oh well.&lt;br /&gt;&lt;br /&gt;&lt;img style=" border:0px" src="http://photos1.blogger.com/blogger/4548/405/320/F%3F%3FhreTag.jpg" border="0" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;Greece was great. We actually ended up doing quite a bit of travelling. Here are a few impressions from the trip:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;img style="float:left; margin:0 10px 10px 0; border:0px" src="http://photos1.blogger.com/blogger/4548/405/320/DanielCocktail.jpg" border="0" alt="" /&gt;&lt;br /&gt;First stop was Naxos, where we stayed the longest while Daniel's mother and grandmother were there.&lt;br /&gt;Naxos is a very nice island, which is very much stamped by tourism. We had a good time there, lying at the beach, driving around the rather large island for a day and generally doing all kinds of vacation stuff.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;img style="float:right; margin:0 10px 10px 0; border:0px" src="http://photos1.blogger.com/blogger/4548/405/320/Donkey.jpg" border="0" alt="" /&gt;&lt;br /&gt;After Naxos we went to Mykonos. Forget what I said about Naxos being stamped by tourism. That's nothing compared to Mykonos. Don't get me wrong though: There is a reason everyone and his parrot want to go to Mykonos: Its a small and very greek island and it is close to Delos, where we went next.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;img style="float:left; margin:0 10px 10px 0; border:0px" src="http://photos1.blogger.com/blogger/4548/405/320/DelosSaeulen.jpg" border="0" alt="" /&gt;&lt;br /&gt;Delos is a mess! Wasn't always like that though: In the good old times it used to be an Apollon sanctuary with a very striving city around it. It's still in very good shape for having been destroyed and then lying there for many centuries, which is why so many people go there, I guess. Impressive place.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;img style="float:right; margin:0 10px 10px 0; border:0px" src="http://photos1.blogger.com/blogger/4548/405/320/SyrosGasse.jpg" border="0" alt="" /&gt;&lt;br /&gt;The next day we departed for Syros. This place was quite different from the other islands we visited. It is much less focused on tourism and not as expensive as Mykonos. Unfortunatelly we could only stay there for less than two full days, but I enjoyed being there a lot.&lt;br /&gt;The time we spent there was not the most exciting (we went to a very quiet beach), but it was a great place for getting a feeling of having been on vacation. A good last stop for our trip.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6968322-114311754117648813?l=drowstar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drowstar.blogspot.com/feeds/114311754117648813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6968322&amp;postID=114311754117648813' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/114311754117648813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/114311754117648813'/><link rel='alternate' type='text/html' href='http://drowstar.blogspot.com/2006/03/update.html' title='Update'/><author><name>drowstar</name><uri>http://www.blogger.com/profile/10706132950886231363</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://www.cip.ifi.lmu.de/~mauder/pics/Avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6968322.post-112516420832562070</id><published>2005-08-27T19:34:00.000+02:00</published><updated>2005-08-27T19:36:48.330+02:00</updated><title type='text'>Holidays in Greece</title><content type='html'>&lt;p&gt;I am going to Greece!!! Yeeha :)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;This morning Daniel and I booked our flights. We are leaving on the 14th and are going to stay there until the 23rd. It's going to be lots of fun. I hope to travel a lot inside Greece as well (so I can say I have been there). Adventure here we come.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Well, I hope everyone else is having a good time as well. I know I will.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;P.S.: I completely forgot I chose this &lt;a href="http://www.thinkgeek.com/tshirts/coder/6596/"&gt;complete nerd-title&lt;/a&gt; for my blog. Need to grow up some time :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6968322-112516420832562070?l=drowstar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drowstar.blogspot.com/feeds/112516420832562070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6968322&amp;postID=112516420832562070' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/112516420832562070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/112516420832562070'/><link rel='alternate' type='text/html' href='http://drowstar.blogspot.com/2005/08/holidays-in-greece.html' title='Holidays in Greece'/><author><name>drowstar</name><uri>http://www.blogger.com/profile/10706132950886231363</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://www.cip.ifi.lmu.de/~mauder/pics/Avatar.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6968322.post-108438091794831796</id><published>2004-05-12T18:51:00.000+02:00</published><updated>2004-05-12T18:55:17.953+02:00</updated><title type='text'>So this is it, huh?</title><content type='html'>Hi everyone,&lt;br /&gt;I have just opened this blog, because I have found it a really cool idea. In fact, I see myself participating in more and more online communities.&lt;br /&gt;I am not quite sure, if this is a good thing? On the one hand, of course, it lets me socialize with people who have similar interests as I.&lt;br /&gt;I guess and hope, time will tell. Anyways, this is certainly a good way of making public the stuff I want people to see. Pretty soon I will even know what that could be :)&lt;br /&gt;Anyways, this is it!&lt;br /&gt;&lt;br /&gt;Stay tuned for what I am going to do with this great tool,&lt;br /&gt;- drowstar&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6968322-108438091794831796?l=drowstar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drowstar.blogspot.com/feeds/108438091794831796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6968322&amp;postID=108438091794831796' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/108438091794831796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6968322/posts/default/108438091794831796'/><link rel='alternate' type='text/html' href='http://drowstar.blogspot.com/2004/05/so-this-is-it-huh.html' title='So this is it, huh?'/><author><name>drowstar</name><uri>http://www.blogger.com/profile/10706132950886231363</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://www.cip.ifi.lmu.de/~mauder/pics/Avatar.gif'/></author><thr:total>0</thr:total></entry></feed>
