<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>El Tramo | Software</title>
  <subtitle>Remko Tronçon's Homepage</subtitle>
  <link href="http://el-tramo.be/blog/category/software/feed/" rel="self" type="application/rss+xml"/>
  <link href="http://el-tramo.be/"/>
  <updated>2012-05-19T12:29:42+02:00</updated>
  <id>http://el-tramo.be/</id>
  <author>
    <name>Remko Tronçon</name>
    <uri>http://el-tramo.be/about/</uri>
  </author>
  
  <entry>
    <title>TwitCoop: A Desktop Cage for Twitter Mobile Web</title>
    <author>
      <name>Remko Tronçon</name>
      <uri>http://el-tramo.be/about/</uri>
    </author>
    <link href="http://el-tramo.be/blog/twitcoop"/>
    <updated>2011-05-25T00:00:00+02:00</updated>
    <id>http://el-tramo.be/blog/twitcoop</id>
    <content type="html">&lt;p&gt;The official &lt;a href=&quot;http://itunes.apple.com/us/app/twitter/id409789998?mt=12&quot;&gt;Twitter for Mac&lt;/a&gt; app gives a great interface for &lt;a href=&quot;http://twitter.com&quot;&gt;Twitter&lt;/a&gt;: lightweight, compact, no bloat, and it looks great. Unfortunately, amongst the hundreds of Twitter clients already existing, I couldn&amp;rsquo;t find anything similar for Linux or Windows. Instead of creating yet another client (which &lt;a href=&quot;http://arstechnica.com/software/news/2011/03/twitter-tells-third-party-devs-to-stop-making-twitter-client-apps.ars&quot;&gt;Twitter doesn&amp;rsquo;t like&lt;/a&gt; anyway), I did a bit of &lt;a href=&quot;http://qt.nokia.com&quot;&gt;Qt&lt;/a&gt; WebKit coding, and created a small desktop client around the (current) Twitter Mobile Web interface.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;
Update: The mobile Twitter website was updated, and doesn&amp;rsquo;t work as well anymore with TwitCoop. I will try to upgrade TwitCoop to work with the new interface, but it is currently not clear whether this is at all possible.
&lt;/em&gt;&lt;/p&gt;

&lt;!--more--&gt;


&lt;p&gt;First, some screenshots:&lt;/p&gt;

&lt;p style='text-align: center'&gt;
&lt;a href=&quot;twitcoop.png&quot;&gt;&lt;img src=&quot;twitcoop.png&quot; alt=&quot;&quot; title=&quot;TwitCoop&quot; width=&quot;202&quot; height=&quot;492&quot; class=&quot;wp-image-1134&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;twitcoop-menu.png&quot;&gt;&lt;img src=&quot;twitcoop-menu.png&quot; alt=&quot;&quot; title=&quot;TwitCoop (Menu)&quot; width=&quot;202&quot; height=&quot;495&quot; class=&quot;wp-image-1135&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;twitcoop-compact.png&quot;&gt;&lt;img src=&quot;twitcoop-compact.png&quot; alt=&quot;&quot; title=&quot;TwitCoop (Compact)&quot; width=&quot;202&quot; height=&quot;494&quot; class=&quot;wp-image-1136&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;


&lt;p&gt;Features of this desktop interface include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compact&lt;/li&gt;
&lt;li&gt;Provides an &amp;ldquo;official&amp;rdquo;, consistent Twitter interface&lt;/li&gt;
&lt;li&gt;Automatically refreshes when new tweets are available (with a higher refresh rate than the default mobile web interface)&lt;/li&gt;
&lt;li&gt;Opens external (i.e. non-Twitter) links in your preferred web browser&lt;/li&gt;
&lt;li&gt;Allows you to hide the Tweet box, when screen real estate is a problem (e.g. on netbooks)&lt;/li&gt;
&lt;li&gt;Allows you to customize the zoom level&lt;/li&gt;
&lt;li&gt;Automatically logs you into your previous Twitter session on startup&lt;/li&gt;
&lt;li&gt;Supports &amp;ldquo;kinetic scrolling&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Works on Windows and Linux&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Note that some of these features may become obsolete once the &lt;a href=&quot;http://blog.twitter.com/2011/05/better-app-for-your-mobile-browser.html&quot;&gt;new mobile interface&lt;/a&gt; becomes available to everyone, and maybe some stuff will break, so I will need to update this then. The mobile web application isn&amp;rsquo;t as responsive as a real native client, but this may change with the new mobile interface as well.&lt;/p&gt;

&lt;p&gt;You can try it out for yourself by &lt;a href='/files/twitcoop/TwitCoop-win32.zip'&gt;downloading the Windows version&lt;/a&gt; (requires the &lt;a href=&quot;http://www.microsoft.com/downloads/en/details.aspx?familyid=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&quot;&gt;Microsoft Visual C++ 2008 Redistributable&lt;/a&gt;, which may already be installed on your system), or by building it yourself from &lt;a href=&quot;/git/twitcoop&quot;&gt;the development repository&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Retjilp: A Native Auto-Retweet Bot</title>
    <author>
      <name>Remko Tronçon</name>
      <uri>http://el-tramo.be/about/</uri>
    </author>
    <link href="http://el-tramo.be/blog/retjilp"/>
    <updated>2011-01-09T00:00:00+01:00</updated>
    <id>http://el-tramo.be/blog/retjilp</id>
    <content type="html">&lt;p&gt;Since I couldn’t find a bot that automatically retweets statuses using the native Twitter Retweet API (all I found was RSS pipes that prefixed messages with &amp;ldquo;RT&amp;rdquo;), I created one myself. &lt;em&gt;Retjilp&lt;/em&gt; is a (Ruby) script that logs into Twitter, scans the statuses of the contacts you are following, and retweets the statuses matching specified words. The &lt;a href=&quot;http://twitter.com/swift_im&quot;&gt;Swift Twitter feed&lt;/a&gt; shows the script in action, retweeting all Swift and XMPP related tags from the Swift developers. You can get Retjilp from the &lt;a href=&quot;/git/retjilp/&quot;&gt;Git repository&lt;/a&gt; (or from &lt;a href=&quot;https://github.com/remko/retjilp/&quot;&gt;GitHub&lt;/a&gt;).&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Eclipse CPPUnit Error Parser</title>
    <author>
      <name>Remko Tronçon</name>
      <uri>http://el-tramo.be/about/</uri>
    </author>
    <link href="http://el-tramo.be/blog/ecppunit"/>
    <updated>2010-08-24T00:00:00+02:00</updated>
    <id>http://el-tramo.be/blog/ecppunit</id>
    <content type="html">&lt;p&gt;I&amp;rsquo;ve recently been experimenting with using &lt;a href=&quot;http://eclipse.org/cdt&quot;&gt;Eclipse CDT&lt;/a&gt; as IDE for &lt;a href=&quot;http://swift.im&quot;&gt;Swift&lt;/a&gt; development. One of the handy things is that Eclipse CDT has support for parsing compiler error messages, allowing you to quickly navigate to the failing source code line by simply clicking on the error message. Although Eclipse CDT supports all the compilers we use for Swift out of the box, I was still missing the easy navigation for fixing failing &lt;a href=&quot;http://cppunit.sourceforge.net&quot;&gt;CPPUnit&lt;/a&gt; tests. Since the error parser (just like almost everything else from Eclipse) is extensible, I wrote a small plugin for parsing CPPUnit error messages.&lt;/p&gt;

&lt;!--more--&gt;


&lt;p&gt;You can get the plugin by opening Eclipse&amp;rsquo;s &lt;em&gt;Install new software&lt;/em&gt; menu, adding &lt;code&gt;&lt;a href=&quot;http://el-tramo.be/eclipse&quot;&gt;http://el-tramo.be/eclipse&lt;/a&gt;&lt;/code&gt; as a plugin repository, and selecting the ECPPUnit plugin from the list of available software.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Migrating from Openfire to Prosody</title>
    <author>
      <name>Remko Tronçon</name>
      <uri>http://el-tramo.be/about/</uri>
    </author>
    <link href="http://el-tramo.be/blog/openfire-to-prosody-migration"/>
    <updated>2009-07-03T00:00:00+02:00</updated>
    <id>http://el-tramo.be/blog/openfire-to-prosody-migration</id>
    <content type="html">&lt;p&gt;Because &lt;a href=&quot;http://www.igniterealtime.org/projects/openfire/index.jsp&quot;&gt;Openfire&lt;/a&gt; has been hogging too much of my limited &lt;a href=&quot;http://el-tramo.be&quot;&gt;el-tramo.be&lt;/a&gt; server resources lately, and because I don’t need a beast of an XMPP server for only 2 users, I decided to replace it by the lightweight &lt;a href=&quot;http://prosody.im/&quot;&gt;Prosody&lt;/a&gt;. The migration went flawless, with the help of two tools: &lt;a href=&quot;http://www.kismith.co.uk/wordpress/index.php/2008/11/30/sleek-migrate/&quot;&gt;Sleek Migrate&lt;/a&gt;, and a &lt;a href=&quot;/git/xep227-to-prosody&quot;&gt;Prosody XEP-0227 Importer&lt;/a&gt;.&lt;/p&gt;

&lt;!--more--&gt;


&lt;p&gt;First of all, I used Sleek Migrate to retrieve the roster (and other) data from the server, and store it in the standard &lt;a href=&quot;http://xmpp.org/extensions/xep-0227.html&quot;&gt;XEP-0227&lt;/a&gt; format. I extended the tool a bit such that it supports Openfire’s User Import/Export format, a format generated by an &lt;a href=&quot;http://www.igniterealtime.org/projects/openfire/plugins/userimportexport/readme.html&quot;&gt;Openfire plugin&lt;/a&gt; that is distributed with the server software by default. Using this format as input for Sleek Migrate avoids the need to create a user file manually. The changes I made to Sleek Migrate are currently available from &lt;a href=&quot;/git/sleekmigrate&quot;&gt;my Git repository&lt;/a&gt;, awaiting to be pushed to the main repository.&lt;/p&gt;

&lt;p&gt;I then wrote a short script that populates the Prosody data dir with the server data from the XEP-0227 XML file. Currently, the script only generates roster and account data, but adding &lt;a href=&quot;http://xmpp.org/extensions/xep-0054.html&quot;&gt;vCard&lt;/a&gt; and &lt;a href=&quot;http://xmpp.org/extensions/xep-0049.html&quot;&gt;Private XML Storage&lt;/a&gt; (used amongst others to store &lt;a href=&quot;http://xmpp.org/extensions/attic/xep-0048-1.0.html&quot;&gt;MUC bookmarks&lt;/a&gt;) should not be very hard. Until Prosody creates a native XEP-0227 importer, you can get the script from &lt;a href=&quot;/git/xep227-to-prosody&quot;&gt;my Git repository&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Improving QtTest usability with QtTestUtil</title>
    <author>
      <name>Remko Tronçon</name>
      <uri>http://el-tramo.be/about/</uri>
    </author>
    <link href="http://el-tramo.be/blog/qttestutil"/>
    <updated>2008-11-06T00:00:00+01:00</updated>
    <id>http://el-tramo.be/blog/qttestutil</id>
    <content type="html">&lt;p&gt;As much as I like &lt;a href=&quot;http://cppunit.sourceforge.net&quot;&gt;CppUnit&lt;/a&gt; for writing C++ unit tests, I still prefer using Qt&amp;rsquo;s built-in &lt;a href=&quot;http://doc.trolltech.com/4.4/qttest.html&quot;&gt;QtTest&lt;/a&gt; module for Qt-based projects. This avoids a dependency on an external library, lowering the threshold for running and writing unit tests. Unfortunately, QtTest is very basic, and lacks some useful features such as automatic test registration and running multiple test suites in one test binary. In order to improve QtTest&amp;rsquo;s usability, I started creating some macros and classes that fill in some of the gaps, and bundled them into &lt;a href=&quot;/git/qttestutil/snapshot/qttestutil-master.zip&quot;&gt;QtTestUtil&lt;/a&gt;.&lt;/p&gt;

&lt;!--more--&gt;


&lt;p&gt;QtTest&amp;rsquo;s recommended way to write unit tests is to compile and link one test suite per class separately, and using the &lt;code&gt;QTEST_MAIN&lt;/code&gt; macro to generate a &lt;code&gt;main()&lt;/code&gt; that runs this particular test suite. However, this introduces quite a bit of overhead in writing (creating a project file for every test/class), building (linking a binary for every test/class), and running (running a separate binary for every test/class, usually using a custom script) all unit tests. This overhead is especially painful in a project with many classes. All this conflicts with the general rule that both creating and running unit tests should be very efficient, and makes QtTest not well suited for unit testing as it is.&lt;/p&gt;

&lt;p&gt;A first attempt at solving this problem is by manually creating a &lt;code&gt;main()&lt;/code&gt; function that runs all tests. For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;#include &quot;MyFirstTest.h&quot;
#include &quot;MySecondTest.h&quot;

int main(int argc, char* argv) {
  int result = 0;
  MyFirstTest test1;
  result |= QTest::qExec(&amp;amp;test1, argc, argv);
  MySecondTest test2;
  result |= QTest::qExec(&amp;amp;test2, argc, argv);
  return result;
}&lt;/pre&gt;
&lt;/blockquote&gt;


&lt;p&gt;The resulting binary runs all listed test suites. The downside of this approach is that you have to write quite a bit of boilerplate code: every test binary needs to have its own &lt;code&gt;main()&lt;/code&gt; function that explicitly runs all the tests in that test suite, and which needs to be put in a file that has to include all the tests separately. In order remedy this, I took the idea from CppUnit to provide a macro which auto-registers a test suite, and makes it easy to run all registered test suites at once. Creating a test suite is now as simple as creating a &lt;code&gt;.cpp&lt;/code&gt; file for every unit test, adding a call to
&lt;code&gt;QTTESTUTIL_REGISTER_TEST&lt;/code&gt; to that file, and compiling that together with a shared &lt;code&gt;main()&lt;/code&gt; that does nothing but call &lt;code&gt;runTests()&lt;/code&gt; on the test registry. Since this &lt;code&gt;main()&lt;/code&gt; does not explicitly depend on any test, QtTestUtil comes with a &lt;a href=&quot;/git/qttestutil/tree/QtTestUtil/SimpleChecker.cpp&quot;&gt;&lt;code&gt;SimpleChecker.cpp&lt;/code&gt;&lt;/a&gt; containing this call, and which can be used by all unit test modules. As a result, no module needs to provide its own &lt;code&gt;main()&lt;/code&gt; anymore.&lt;/p&gt;

&lt;p&gt;An example of a unit test module using the macro and the shared checker described above can be found in the &lt;a href=&quot;/git/qttestutil/tree/Example&quot;&gt;Example&lt;/a&gt; subdir of the &lt;a href=&quot;/git/qttestutil&quot;&gt;QtTestUtil repository&lt;/a&gt;. It is worth noticing that these QtTest-based unit tests are more compact than the same unit test written in CppUnit (because the latter requires you to call a macro for every test in a fixture).&lt;/p&gt;

&lt;p&gt;This is just a first set of utilities that QtTestUtil provides on top of QtTest. More utility classes and macros will be added as they are needed.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>WiGit: A Simple Git-based Wiki</title>
    <author>
      <name>Remko Tronçon</name>
      <uri>http://el-tramo.be/about/</uri>
    </author>
    <link href="http://el-tramo.be/blog/wigit-intro"/>
    <updated>2008-07-21T00:00:00+02:00</updated>
    <id>http://el-tramo.be/blog/wigit-intro</id>
    <content type="html">&lt;p&gt;For a while now, I&amp;rsquo;ve been looking for a simple wiki to manage my personal notes and to do some basic shared editing. After looking through the vast number of wikis on &lt;a href=&quot;http://www.wikimatrix.org/&quot;&gt;WikiMatrix&lt;/a&gt; and still not finding what I was looking for, I ended up doing what hundreds have done before me: wrote &lt;a href=&quot;http://el-tramo.be/software/wigit&quot;&gt;my own wiki&lt;/a&gt;, and threw it on the pile of exitsing ones.&lt;/p&gt;

&lt;!--more--&gt;


&lt;p&gt;Up until recently, I&amp;rsquo;ve been using &lt;a href=&quot;http://tipiwiki.sourceforge.net&quot;&gt;TipiWiki&lt;/a&gt; as my notebook, which is very light, simple, and easy to deploy. However, recently started running into its limitations, including limited markup possibilities (e.g. no multi-level lists), the lack of decent history (seeing who changed what, when), &amp;hellip; I liked the idea of &lt;a href=&quot;http://atonie.org/2008/02/git-wiki&quot;&gt;git-wiki&lt;/a&gt;, which used &lt;a href=&quot;http://git.or.cz&quot;&gt;Git&lt;/a&gt; as its backend, giving it good history support, and the fact that all documents are in a real repository. However, git-wiki uses &lt;a href=&quot;http://sinatra.rubyforge.org/&quot;&gt;Sinatra&lt;/a&gt;, which requires way too much valuable resources than I want to spend on a simple wiki.&lt;/p&gt;

&lt;p&gt;So, I took the idea of using Git as a backend, threw in the &lt;a href=&quot;http://textile.thresholdstate.com/&quot;&gt;Textile&lt;/a&gt; PHP class for marking up text, and wrote &lt;a href=&quot;http://el-tramo.be/software/wigit&quot;&gt;WiGit&lt;/a&gt;: a simple, themable wiki in PHP (which is less cool, but also less heavy than Ruby/Sinatra), built upon Git, with history support, basic user support (from HTTP authentication), and pretty URLs. The default theme is still rough, and there are still a bunch of features coming up, but it should function properly already as a simple wiki for your everyday needs.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>MP4Box Fink Package</title>
    <author>
      <name>Remko Tronçon</name>
      <uri>http://el-tramo.be/about/</uri>
    </author>
    <link href="http://el-tramo.be/blog/mp4box-fink"/>
    <updated>2008-01-03T00:00:00+01:00</updated>
    <id>http://el-tramo.be/blog/mp4box-fink</id>
    <content type="html">&lt;p&gt;I created a Fink package for &lt;a href=&quot;http://gpac.sourceforge.net/packager.php&quot;&gt;MP4Box&lt;/a&gt;, the multimedia packager from the &lt;a href=&quot;http://gpac.sourceforge.net&quot;&gt;GPAC&lt;/a&gt; project. MP4Box can be used for manipulating (e.g. muxing, demuxing) multimedia files such as MP4, 3GP, AVI, MPG, TS, &amp;hellip;&lt;/p&gt;

&lt;!--more--&gt;


&lt;p&gt;To add this package to your Fink tree, simply download both &lt;tt&gt;&lt;a href=&quot;http://el-tramo.be/files/fink/mp4box.info&quot;&gt;mp4box.info&lt;/a&gt;&lt;/tt&gt; and &lt;tt&gt;&lt;a href=&quot;http://el-tramo.be/files/fink/mp4box.patch&quot;&gt;mp4box.patch&lt;/a&gt;&lt;/tt&gt;, and move these files to &lt;tt&gt;/sw/fink/dists/local/main/finkinfo&lt;/tt&gt;. After this is done, you should be able to &lt;tt&gt;fink install mp4box&lt;/tt&gt;. Because this package is not in the official repository, you will need to select `&lt;span style=&quot;font-style: italic&quot;&gt;Retry using next mirror set &amp;ldquo;sourceforge&amp;rdquo;&lt;/span&gt; &amp;lsquo; when Fink fails to download the package.&lt;/p&gt;

&lt;p&gt;Note that this package isn&amp;rsquo;t ready for submitting to the main Fink repository yet for a couple of reasons:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;The GPAC configure script doesn't allow to disable inclusion of external libraries statically. As such, it might be that GPAC links in libraries present on your system. This isn't really a problem in practice, but should be resolved for clean builds.&lt;/li&gt;
    &lt;li&gt;The MP4Box package file builds the GPAC library, and statically links the MP4Box binary against this. A better approach would be to provide a real package for the GPAC library, and add all the other utilities to this package as well.&lt;/li&gt;
&lt;/ul&gt;

</content>
  </entry>
  
  <entry>
    <title>LGMTray: A Lightweight GMail Notifier</title>
    <author>
      <name>Remko Tronçon</name>
      <uri>http://el-tramo.be/about/</uri>
    </author>
    <link href="http://el-tramo.be/blog/lgmtray"/>
    <updated>2007-10-19T00:00:00+02:00</updated>
    <id>http://el-tramo.be/blog/lgmtray</id>
    <content type="html">&lt;p&gt;I have been looking for a Linux system tray application to notify me of new mail on my GMail account. Unfortunately, all the notifiers I found either did not run on Linux, or had dependencies I was unable to meet on my machine (because I lack system administrator privileges). This is why I wrote &lt;a href=&quot;http://el-tramo.be/software/lgmtray&quot;&gt;LGMTray&lt;/a&gt;, a very basic GMail notifier, with very few dependencies.&lt;/p&gt;

&lt;!--more--&gt;


&lt;p&gt; LGMTray is implemented in C++, and only depends on &lt;a href=&quot;http://curl.haxx.se/&quot;&gt;libcurl&lt;/a&gt; (for opening secure connections to the GMail server),  &lt;a href=&quot;http://xmlsoft.org/&quot;&gt;LibXML2&lt;/a&gt; (for parsing the GMail feed), and libxpm (for rendering the icons). It uses the &lt;a href=&quot;http://standards.freedesktop.org/systemtray-spec/latest/&quot;&gt;FreeDesktop.org System Tray Specification&lt;/a&gt; to dock the application to the system tray, and uses Xlib directly for all the graphical functions (drawing the icons, communicating with the tray, &amp;hellip;). It is currently very limited in features, but will probably evolve in the future (depending on personal and other people&amp;rsquo;s interest).&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Introducing Greem</title>
    <author>
      <name>Remko Tronçon</name>
      <uri>http://el-tramo.be/about/</uri>
    </author>
    <link href="http://el-tramo.be/blog/greem-intro"/>
    <updated>2007-10-14T00:00:00+02:00</updated>
    <id>http://el-tramo.be/blog/greem-intro</id>
    <content type="html">&lt;p&gt;After a short hiatus, I finally resumed work on &lt;a href=&quot;http://el-tramo.be/blog/greenphone-grant&quot;&gt;my new Jabber/XMPP client project&lt;/a&gt;, which I christened &lt;em&gt;`Greem'&lt;/em&gt;. The main goal of the project is to create a mobile Jabber/XMPP client for the &lt;a href=&quot;http://trolltech.com/products/qtopia&quot;&gt;Qtopia&lt;/a&gt; platform. The nice thing about Qtopia is that its target audience keeps on expanding: besides running on the GreenPhone (of which Trolltech was kind enough to provide me with one), Qtopia has recently been ported to the Neo 1973 (OpenMoko), and even &lt;a href=&quot;http://labs.trolltech.com/blogs/2007/03/28/were-porting-qt-4-to-windows-ce-and-windows-mobile/&quot;&gt;Windows CE and Windows Mobile&lt;/a&gt;. In this post, I briefly describe what the expectations and the goals are for Greem, and how Psi fits into the picture.&lt;/p&gt;

&lt;!--more--&gt;


&lt;p&gt;The goal of Greem is to be a clean, simple Qt/Qtopia client, built completely from scratch, using lessons learned from the Psi project. Since it is my intention to keep Greem as simple and clean as possible, some advanced features from Psi will not be available: multiple accounts, customizations that are only relevant to 1% of the population, &amp;hellip; However, development &lt;em&gt;will&lt;/em&gt; be focused on things that Psi also needs in the near future:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;Clean, unit testable APIs.&lt;/li&gt;
    &lt;li&gt;New and improved roster (for meta-contacts, avatars, ...)&lt;/li&gt;
    &lt;li&gt;Server-side message archiving&lt;/li&gt;
    &lt;li&gt;Reliable communication&lt;/li&gt;
    &lt;li&gt;Simplicity&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;A lot of this will either flow directly back into Psi (which should be possible thanks to the decoupled APIs), or will be used as a guide to refactor certain parts of Psi that need it (e.g. the roster).&lt;/p&gt;

&lt;p&gt;For the first release(s), not every part of Greem will be written from scratch, though. Although I already have a major part of the low-level XMPP server connection handling coded up, Greem will initially use &lt;a href=&quot;http://delta.affinix.com/iris&quot;&gt;Iris&lt;/a&gt; as its backend for connecting to a server. Anything beyond the connection (i.e. XMPP data structures, stanza handling, &amp;hellip;) will be done outside of Iris. This way, the major focus can be on the front-end and general frameworks, without having to worry about the low-level implementation details (which can typically be a big hassle to get right). In the future, the Iris backend, which is connected through a very thin layer with the front-end, will be replaced by my own implementation of XMPP streams.&lt;/p&gt;

&lt;p&gt;An update on the current status of the project will follow soon, together with some preliminary screenshots.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Qtopia Greenphone Grant</title>
    <author>
      <name>Remko Tronçon</name>
      <uri>http://el-tramo.be/about/</uri>
    </author>
    <link href="http://el-tramo.be/blog/greenphone-grant"/>
    <updated>2007-08-15T00:00:00+02:00</updated>
    <id>http://el-tramo.be/blog/greenphone-grant</id>
    <content type="html">&lt;p&gt;A month or 2 ago, I applied for the Qtopia Greenphone Innovation Grant Program, an initiative from TrollTech to promote the development of applications for their Linux-based Qtopia Greenphone. I probably won&amp;rsquo;t surprise anyone by saying that I sent in a proposal about writing a good, cross-platform, mobile Jabber/XMPP client. Anyway, I was very excited to receive a mail from TrollTech yesterday, stating that my proposal was accepted by their review panel! As an applicant, I will be receiving a shiny new Greenphone, together with a Qtopia SDK to develop against. Deadline for submitting my application: October 31st. Let the coding begin.&lt;/p&gt;
</content>
  </entry>
  
</feed>

