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

<channel>
	<title>MrBlog &#187; integration</title>
	<atom:link href="http://mrblog.nl/category/integration/feed" rel="self" type="application/rss+xml" />
	<link>http://mrblog.nl</link>
	<description>eliminating my ignorance one bit at a time</description>
	<lastBuildDate>Tue, 20 Jul 2010 22:46:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1-alpha</generator>
	<atom:link rel='hub' href='http://mrblog.nl/?pushpress=hub'/>
		<item>
		<title>Xaraya commit history on video</title>
		<link>http://mrblog.nl/2010/04/11/xaraya-commit-history-on-video.html</link>
		<comments>http://mrblog.nl/2010/04/11/xaraya-commit-history-on-video.html#comments</comments>
		<pubDate>Sun, 11 Apr 2010 12:07:00 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[integration]]></category>
		<category><![CDATA[revision control]]></category>
		<category><![CDATA[xaraya]]></category>

		<guid isPermaLink="false">http://mrblog.nl/?p=826</guid>
		<description><![CDATA[Played a little with the gource log visualizer today. It is typically used to visualize committed revisions in a revision control system, although any system that logs events of some kind could be made to work with it I suppose. I happen to have a repository of xaraya going back to 2002 in git, so [...]]]></description>
			<content:encoded><![CDATA[<p>Played a little with the <a href='http://code.google.com/p/gource/' rel='external ' title='Gource revision log visualizer'>gource</a> log visualizer today. It is typically used to visualize committed revisions in a revision control system, although any system that logs events of some kind could be made to work with it I suppose.</p>

<p>I happen to have a repository of xaraya going back to 2002 in git, so I thought I&#8217;d give it a shot.</p>

<p>&#8230;more time passes than originally planned&#8230;</p>

<h4>Result</h4>

<p>8 years of commit history in 10 minutes of video. Produced with <a href='http://code.google.com/p/gource/' rel='external ' title='Gource revision log visualizer'>gource</a> from a git repository of <a href='http://xaraya.com' rel='external ' title='Xaraya web application framework'>Xaraya</a>. The video traces the 2.x main branch back to its origin, repository wise. The start is the import of the CVS postnuke repository into Bitkeeper. Since then xaraya has switched to monotone.</p>

<h5>Gource settings used:</h5>

<pre><code class="prettyprint"><a href='http://code.google.com/p/gource/' rel='external ' title='Gource revision log visualizer'>gource</a> --stop-position 1.0 \
       --camera-mode overview \
       --bloom-intensity 0.18 \
       --user-image-dir .git/avatar \
       --highlight-all-users \
       --output-framerate 60 \
       -s 0.5 \
       -720x576 \
       -a 0.3 \
       --hide filenames \
       --user-scale 1.4 \
       --date-format %Y-%m-%d \
       --disable-progress \
       --output-ppm-stream - \
| ffmpeg -y -b 3000K -r 60 -f image2pipe -vcodec ppm -i - -vcodec libx264 -vpre default <a href='http://code.google.com/p/gource/' rel='external ' title='Gource revision log visualizer'>gource</a>.mp4
</code></pre>

<p>This produced a video of 11 min. 35 seconds. To bring it back to 10 minutes the framerate was increased until the total time fell just below 10 minutes.﻿</p>

<p style="text-align: center"><object width="480" height="385">
<param name="movie" value="http://www.youtube.com/v/fIeDCeh3uL8&amp;hl=en_US&amp;fs=1&amp;" />
<param name="allowFullScreen" value="true" />
<param name="allowscriptaccess" value="always" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/fIeDCeh3uL8&amp;hl=en_US&amp;fs=1&amp;"></embed>
</object>
</p>

<p>I specifically wanted <strong>the whole</strong> history to be in one video of 10 minutes (the Youtube maximum) which means compromising a bit on the quality. If there are things I can do within these assumptions to improve the video, I&#8217;d like to hear them.</p>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2010/04/11/xaraya-commit-history-on-video.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OpenObject as LDAP data-source</title>
		<link>http://mrblog.nl/2009/09/29/openobject-as-ldap-data-source.html</link>
		<comments>http://mrblog.nl/2009/09/29/openobject-as-ldap-data-source.html#comments</comments>
		<pubDate>Tue, 29 Sep 2009 17:02:32 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[integration]]></category>
		<category><![CDATA[claws]]></category>
		<category><![CDATA[openobject]]></category>

		<guid isPermaLink="false">http://mrblog.nl/?p=785</guid>
		<description><![CDATA[As a side-effect of Migrating to Claws I lost my OSX addressbook usage, at least for mail. In my company we use OpenERP for CRM, invoicing and other business needs. This means that the majority, if not all the email-addresses I need are in our OpenERP database. So, it made sense to finish an effort [...]]]></description>
			<content:encoded><![CDATA[<p>As a side-effect of <a href="http://mrblog.nl/2009/09/18/a-weeks-worth-of-claws-mail-on-osx.html">Migrating to <a href='http://claws-mail.org' rel='external ' title='Claws email client'>Claws</a></a> I lost my OSX addressbook usage, at least for mail. In my company we use <a href="http://openerp.com"><a href='http://openerp.com' rel='external ' title='Open Source ERP and application framework'>OpenERP</a></a> for CRM, invoicing and other business needs. This means that the majority, if not all the email-addresses I need are in our <a href='http://openerp.com' rel='external ' title='Open Source ERP and application framework'>OpenERP</a> database. </p>

<p>So, it made sense to finish an effort I started earlier, which is to link <a href='http://openerp.com' rel='external ' title='Open Source ERP and application framework'>OpenERP</a> to our LDAP server and thus be able to query information from the <a href='http://openerp.com' rel='external ' title='Open Source ERP and application framework'>OpenERP</a> database through an LDAP interface and have every address available in the <a href='http://claws-mail.org' rel='external ' title='Claws email client'>Claws</a> addressbook (and the OSX addressbook too for that matter). </p>

<p>In an earlier version of <a href='http://openerp.com' rel='external ' title='Open Source ERP and application framework'>OpenERP</a> we used a specific module for this, which basically published an LDAP entry whenever we changed data in the <a href='http://openerp.com' rel='external ' title='Open Source ERP and application framework'>OpenERP</a> database. This worked, but was a less than ideal solution, not to mention it stopped working on an <a href='http://openerp.com' rel='external ' title='Open Source ERP and application framework'>OpenERP</a> upgrade. The solution I wanted was to have the data available in LDAP immediately. This meant making the LDAP server a &#8220;client&#8221; of the <a href='http://openerp.com' rel='external ' title='Open Source ERP and application framework'>OpenERP</a> database or, said another way, making the <a href='http://openerp.com' rel='external ' title='Open Source ERP and application framework'>OpenERP</a> database function as an SQL backend to the LDAP server.</p>

<h4>Defining an SQL backend for LDAP</h4>

<p>Creating an SQL backend for slapd is, albeit terse, documented. I mainly used the information at <a href="http://www.openldap.org/faq/data/cache/978.html">the OpenLDAP FAQ</a>. The basic idea is that the LDAP-server connects through ODBC to the database, the <a href='http://openerp.com' rel='external ' title='Open Source ERP and application framework'>OpenERP</a> database in our case, and translates information found in relational tables to a subtree of the LDAP hierarchy.</p>

<p>To model this information, you have to create at least 3 tables in the database:</p>

<ol>
<li><code>ldap_oc_mappings</code>: which objectClass of LDAP is stored in what table;</li>
<li><code>ldap_attr_mappings</code>: how attributeTypes of an objectClass are resolved from RDBMS data;</li>
<li><code>ldap_entries</code>: what&#8217;s the DN of an entry, and how the entry relates to its objectClass mapping and to its parent DN;</li>
</ol>

<p>The FAQ mentions two other tables, which we do not need. The idea is to specify in these three tables how the LDAP server gets to the entries and what they mean. For addressbook-like entries for mail, the defacto objectClass to use for this is something referred to an &#8216;inetOrgPerson&#8217;. The collection of these objects will be below an objectClass &#8216;organizationalUnit&#8217;, giving the simplest &#8216;tree-relation&#8217; we can think of.</p>

<h4>Making the SQL backend use <a href='http://openerp.com' rel='external ' title='Open Source ERP and application framework'>OpenERP</a></h4>

<p>The table <code>ldap_oc-mappings</code> is queried by the LDAP server to map these object classes to tables, so the server knows in which tables to look for the attributes of these two classes. The next two statements insert two rows in that table, one for each object Class, mapping them to the tables <code>ldap_inetOrgPerson</code> and <code>ldap_organizationalUnit</code>, expecting a column <code>id</code> to contain the primary key for the objects.</p>

<pre><code class="prettyprint">INSERT INTO ldap_oc_mappings(name,keytbl,keycol) 
    VALUES('inetOrgPerson','ldap_inetOrgPerson','id');
INSERT INTO ldap_oc_mappings(name,keytbl,keycol) 
    VALUES('organizationalUnit','ldap_ organizationalUnit','id');
</code></pre>

<p>The <code>ldap_inetOrgPerson</code> is actually a view over the <code>res_partner_address</code> table in <a href='http://openerp.com' rel='external ' title='Open Source ERP and application framework'>OpenERP</a>, so it uses the data directly. </p>

<pre><code class="prettyprint">CREATE OR REPLACE VIEW ldap_inetorgperson AS 
  SELECT 
    a.id, 
    btrim((COALESCE(a.firstname,'')||' ') || a.lastname) AS cn, 
    btrim((COALESCE(a.firstname,'')||' ') || a.lastname) AS displayname, 
    a.phone AS telephonenumber, 
    a.lastname AS sn, 
    a.firstname AS givenname, 
    a.fax AS facsimiletelephonenumber, 
    a.mobile, 
    a.private_phone AS homephone, 
    lower(a.email) AS mail, 
    a.street, 
    a.zip AS postalcode
  FROM res_partner_address a
  WHERE 
    a.email  ''  AND 
    a.email  '"' AND 
    a.type  =  'contact';
</code></pre>

<p>This gives a dataset of all people who actually have an email-address registered in the <a href='http://openerp.com' rel='external ' title='Open Source ERP and application framework'>OpenERP</a> database. The column aliases are not needed as such, but make the construction of the <code>ldap_attr_mappings</code> table a bit easier. The second objectClass we registered in <code>ldap_oc_mappings</code>, <code>organizationalUnit</code> can be modelled with one simple row in the table <code>ldap_organizationalUnit</code>:</p>

<pre><code class="prettyprint">INSERT INTO ldap_organizationalUnit(name) VALUES ('addressbook');
</code></pre>

<p>With that row, we basically define one organizational unit in our simple tree named <code>addressbook</code> under which all our objects of type <code>inetOrgPerson</code> will be placed. </p>

<p>So, at this point we have 2 objectClasses registered, we have created the raw data for them. What&#8217;s left? Two things, first, we need to define how the attributes of the raw data relate to the object attributes. For this, the table <code>ldap_attr_mappings</code> contains a row for each attribute. For the <code>telephoneNumber</code> attribute, the data row is as follows:</p>

<pre><code class="prettyprint">INSERT INTO ldap_attr_mappings(
        oc_map_id,name,sel_expr,from_tbls,join_where
    ) 
VALUES(
    1,'telephoneNumber','telephoneNumber',ldap_inetOrgPerson,'1=1'
);
</code></pre>

<p>This says basically to the ldap server that in order to get to the <code>telephoneNumber</code> attribute for <code>inetOrgPerson</code> (<code>oc_map_id</code> 1 refers to the first row in the <code>ldap_oc_mappings</code> table), it needs to look in the table <code>ldap_inetOrgPerson</code>, use the same attribute name for the column and apply no special where clause. It is basically a recipe for the server to translate an LDAP request into an SQL query. </p>

<p>For each of the columns in the <code>ldap_inetOrgPerson</code> view, such a row needs to be present in the <code>ldap_attr_mappings</code> table.</p>

<p>Still here? The final step is to create the third meta table <code>ldap_entries</code>. This table is basically the lookup table to map <em>ldap-index values</em> to <em>rdbms-index values</em>.  I have defined <code>ldap_entries</code> as a view on the raw data as follows:</p>

<pre><code class="prettyprint"> CREATE OR REPLACE VIEW ldap_entries AS 
   SELECT 
     0 AS id, 
     'ou=addressbook,dc=hsdev,dc=com' AS dn, 
     2 AS oc_map_id, 
     0 AS parent, 
     0 AS keyval
    UNION 
   SELECT 
     ldap_inetorgperson.id, 
     ('cn=' || ldap_inetorgperson.cn) || 
     ',ou=addressbook,dc=hsdev,dc=com' AS dn, 
     1 AS oc_map_id, 
     0 AS parent, 
     ldap_inetorgperson.id AS keyval
   FROM ldap_inetorgperson;
</code></pre>

<p>This does 2 things, it refers the ldap addres <code>ou=addressbook,dc=hsdev,dc=com</code> as the organizational unit (<code>oc_map_id</code> = 2) and assigns that ID 0. The second part of the UNION then formats each of the inetOrgPerson addresses as an LDAP address in the constructed tree (mine would be: <code>cn=Marcel van der Boom,ou=addressbook,dc=hsdev,dc=com</code>) and maps it to the ID in the raw data table (<code>keyval</code>) and puts the organizational unit as its parent.</p>

<p>With the above a minimal <em>proof of concept</em> can be constructed so that each partner address which has an email-address shows up in LDAP. After this, it&#8217;s a matter of configuring the email-client using the <code>ou=addressbook,dc=hsdev,dc=com</code> as a search base.</p>

<p>Here&#8217;s a picture of my record in the claws address book:</p>

<p style="text-align: center"><a href="http://mrblog.nl/files/2009/09/screen_011.png" target="_blank"><img src="http://mrblog.nl/files/2009/09/screen_011.png" width="500px" alt="screen_011.png" /></a>
</p>

<p>The same concept can be applied to other data in <a href='http://openerp.com' rel='external ' title='Open Source ERP and application framework'>OpenERP</a> (the partner records themselves come to mind or user accounts). It would not be that hard to wrap the above into an <a href='http://openerp.com' rel='external ' title='Open Source ERP and application framework'>OpenERP</a> module to manage this. Once the LDAP server has a configuration to use an SQL backend, all configuration can be done in <a href='http://openerp.com' rel='external ' title='Open Source ERP and application framework'>OpenERP</a> itself, modelling access using the meta tables. Perhaps I&#8217;ll do that at some point, if some of my customers would benefit from this too.</p>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2009/09/29/openobject-as-ldap-data-source.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A weeks worth of claws-mail on OSX</title>
		<link>http://mrblog.nl/2009/09/18/a-weeks-worth-of-claws-mail-on-osx.html</link>
		<comments>http://mrblog.nl/2009/09/18/a-weeks-worth-of-claws-mail-on-osx.html#comments</comments>
		<pubDate>Fri, 18 Sep 2009 08:37:10 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[integration]]></category>
		<category><![CDATA[claws]]></category>
		<category><![CDATA[osx]]></category>

		<guid isPermaLink="false">http://mrblog.nl/?p=735</guid>
		<description><![CDATA[After installing Snow Leopard I was left with a page of programs and plugins that needed attention because of the upgrade. Most of these were little nuisances and just needed a little reconfiguration. There were a couple of things where Apple decided to rename an app or hide it otherwise from view (Kerberos Ticket manager [...]]]></description>
			<content:encoded><![CDATA[<p>After installing Snow Leopard I was left with a page of programs and plugins that needed attention because of the upgrade. Most of these were little nuisances and just needed a little reconfiguration. There were a couple of things where Apple decided to rename an app or hide it otherwise from view (Kerberos Ticket manager for example).</p>

<p>There were two things on the list which stopped me in my daily work. The first was was the need to recompile the complete macports collection. I won&#8217;t go into the details of everything, but executing a complete reinstall of macports apps takes about a day, not counting the time needed to fix compile errors (wtf, all *.la files missing now?).</p>

<p>The second was the disfunctioning of a number of Mail.app plugins. I guess it&#8217;s not really the plugin authors who have dropped the ball here, as Apple had an early release of SL and many developers were just not ready. However, that didn&#8217;t change the fact my *nix tools and mail were both severely crippled now.</p>

<p>Not looking forward to spending two days to recompile and reconfigure everything and nothing new to show for I decided that a long time wish could be sneaked in. Leaving Mail.app behind and switching to <a href="http://claws-mail.org"><a href='http://claws-mail.org' rel='external ' title='Claws email client'>Claws</a></a> as a mail client. </p>

<p>Specifically, these are the main gripes I have with Mail.app:</p>

<ul>
<li>keyboard navigation is absent for all practical purposes;</li>
<li>tabbing order in compose window or absence of shortcut keys to go to subject/body at once;</li>
<li>weird threading decision; (altho i have to admit it works for the daily chores mail)</li>
<li>no way to configure top/bottom posting;</li>
<li>no nntp support;</li>
<li>IMAP support does not include subscriptions;</li>
<li>somehow it keeps locking up on me with tenacious regularity, i suspect sqlite here; </li>
<li>the direction with yellowy sticky notes, the stationary things are all useless to me;</li>
<li>proprietary, closed program (which I could live with&#8230;)</li>
<li>but worse, it has a non-documented API for plugins, which is an insult to developers.</li>
</ul>

<p>I&#8217;ve always liked claws on linux. Tremendously fast, great keyboard support, a feature-set which is more than I can handle in most areas and a small enough codebase which makes it realistic for me to patch it or write a plugin for, should I feel inclined to do so. The only problem I really had was running OSX, so the lightweightedness would be kinda lost, as I would need a while slew of dependencies. Still, most of them I already had because of our internal implementation of <a href="href="http://openerp.com"><a href='http://openerp.com' rel='external ' title='Open Source ERP and application framework'>OpenERP</a></a></p>

<p>I knew I would be running into issues, so the first couple of days I ran with claws-mail inside <a href="http://virtualbox.org">VirtualBox</a> running an Ubuntu install. This would give me sort of a reference to get everything working without having to worry about compilation digging etc. Installing a new mail application is easy but deciding if it is good enough to replace a program which you use every minute of the day is something else.</p>

<p>I sort of knew after half a day I was going to like it. The slowness of the virtual machine was a little bit in the way, as was its instability, but overall things were looking good. Ok, time to repeat the excercise for real on OSX.</p>

<p>Here&#8217;s the configure step I used:</p>

<pre><code class="prettyprint">export CPPFLAGS=-I/opt/local/include
export LDFLAGS=-L/opt/local/lib

./configure \
  --disable-trayicon-plugin \
  --disable-manual \
  --enable-ipv6 \
  --disable-dillo-viewer-plugin \
  --enable-crash-dialog
</code></pre>

<p>The first two are perhaps redundant, but I wanted to make sure everything came from the ports collection and not from libraries supplied by Apple by default. Compiling afterwards gives you a running, but ugly claws-mail. So, first thing I did was install a bunch of gtk2 stuff to give me a bit of theme-ing options. I used Platypus to create a <a href='http://claws-mail.org' rel='external ' title='Claws email client'>Claws</a>.app; the OSX application bundle so I can have an icon in the Dock:</p>

<p><div class="markdown_generated"><img src="http://mrblog.nl/files/2009/09/screen_006.png" alt="Creating a <a href='http://claws-mail.org' rel='external ' title='Claws email client'>Claws</a> icon" title="" /></div></p>

<p>Apart from the icon, that does not give you much really. The app runs as a child below X11.app so it still misbehaves in many ways, but alas.</p>

<p>Next up was &#8216;mailto&#8217; URI handling. I had thought this to be an easy thing. OSX refuses to accept a shell script as handler though, it must be an app bundle. So, what I needed was an app-bundle, as invisible as possible which can act as an URI handler for claws. The first thing I thought about was adapting <a href="http://mailtomutt.sourceforge.net">MailToMutt</a> to call out to claws instead of mutt. Looking at the source I saw it was pretty much suitable to mutt only, so I set out to write my own, How hard could this be?</p>

<p>As it turns out, such an app in its simplest form would require the following:</p>

<ol>
<li>An info.plist file, as all app bundles have, with some special entries;</li>
<li>A declaration of a handler on how to react to the involved &#8216;Apple Events&#8217;</li>
<li>The code of that handler.</li>
</ol>

<p>The plist has to look something like this:</p>

<p><div class="markdown_generated"><img src="http://mrblog.nl/files/2009/09/screen_007.png" alt="Plist file needed" title="" /></div></p>

<p>There are 2 things in there which make this interesting. First, the highlighted line marks this application as an &#8216;Agent&#8217; which just means to not show it anywhere on screen.</p>

<p>Second, a list of URL-types on which this URIhandler app should react. As you can see I threw a bunch in there which I thought would come in handy someday. What this does is make the app known to OSX as being capable of handling these types of URLs. This is used, for example by the Mail.app application for listing clients in its preference for default Email program:</p>

<p><div class="markdown_generated"><img src="http://mrblog.nl/files/2009/09/screen_009.png" alt="App registered as URL handler" title="" /></div></p>

<p>The second file needed in the XCode project is URLHandler.scriptSuite:</p>

<pre><code class="prettyprint">{
    Name = URLHandler;
    AppleEventCode = "UrHD";

    Commands = {
        "GetURL" = {
            CommandClass = URLHandlerCommand;
            AppleEventCode = GURL;
            AppleEventClassCode = GURL;
        };
    };
}
</code></pre>

<p>which registers <code>URLHandlerCommand</code> as the handler for Events of type GURL (get an URL). </p>

<p>And finally, the third file, <code>URLHanderlerCommand.m</code> which implements that handler:</p>

<pre><code class="prettyprint">@implementation URLHandlerCommand

- (id)performDefaultImplementation {

    NSString *urlString = [self directParameter];
    NSURL    *url = [NSURL URLWithString: urlString];

    // Log what we got
    NSLog(@"url = %@", urlString);

    // Launch _handler script in path
    NSTask *task = [NSTask new];
    NSString *script = [NSString stringWithFormat:@"~/bin/%@_handler",[url scheme]];
    NSLog(@"launchtarget = %@", script);
    [task setLaunchPath:script];

    // Give the URI-string as parameter to that script
    [task setArguments:[NSArray arrayWithObject:urlString]];

    // Catch stdout / stderr
    [task setStandardOutput:[NSPipe pipe]];
    [task setStandardError:[task standardOutput]];

    // Run it
    [task launch];

    // Log the output, if any
    NSData* output = [[[task standardOutput] fileHandleForReading] readDataToEndOfFile];
    NSString* out_string = [[[NSString alloc] initWithData:output encoding:NSUTF8StringEncoding] autorelease];
    NSLog(@"%@",out_string);

    // If we are not there we cant do no harm, so quit.
    [[NSApplication sharedApplication] terminate:nil];

    return nil;
}
@end
</code></pre>

<p>In words: It takes the URL that the user clicked on &#8220;&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#115;&#111;&#109;&#101;&#116;&#104;&#105;&#110;&#103;&#64;&#115;&#111;&#109;&#101;&#116;&#104;&#105;&#110;&#103;&#46;&#111;&#114;&#103;&#8221;, turns it into an URL object and calls out to the file <code>mailto_handler</code> in the Users bin directory. </p>

<p>For a &#8216;feed&#8217; URL the app would call the file <code>feed_handler</code> and likewise for the other protocols. The <code>mailto_handler</code> file is just a shell script containing:</p>

<pre><code class="prettyprint">/usr/local/bin/claws-mail --compose $1
</code></pre>

<p>and my <code>~/bin/feed_handler</code> contains:</p>

<pre><code class="prettyprint">/usr/local/bin/claws-mail --subscribe $1
</code></pre>

<p>If you would like a copy of the source of this program, go here: <a href="http://mrblog.nl/files/2009/09/URLHandler.zip">http://mrblog.nl/files/2009/09/URLHandler.zip</a></p>

<p>The rest of the configuration went pretty smooth. I had a little hickup getting GPG signing to work with both PGP and S/MIME signatures. But a quick recompile of gpgme to include s/mime and a <a href="http://www.beitz.org/node/85">specific configuration</a> which was not obvious to me for gpg-agent solved that.</p>

<p>Here&#8217;s a picture of the end result (click on it for large version):</p>

<div style="text-align:center"><a href="http://mrblog.nl/files/2009/09/screen_0101.png" target="_blank"><img src="http://mrblog.nl/files/2009/09/screen_0101.png" alt="screen_010.png" border="0" width="400" /></a></div>

<p>So, is this install perfect? Is it even better than Mail.app? I&#8217;d say, not yet. But the big difference is that I have control now and there&#8217;s only a gap of time and energy between me solving any gripe I might have. </p>

<p>Which of the gripes have I solved with this? Let&#8217;s recap:</p>

<p><span style="color:green;font-weight: bold">✓</span> keyboard navigation is absent for all practical purposes;<br />
keyboard navigation is strong, but not complete, in claws. One thing which is missing is a keyboard way to collaps or expand a folder tree (and thread, for that matter)</p>

<p><span style="color:red;font-weight: bold">✘</span> tabbing order in compose window or absence of shortcut keys to go to subject/body at once<br />
This one is unsolved, at least on osx. There is no key combination which allows to go to subject and / or body directly.</p>

<p><span style="color:green;font-weight: bold">✓</span> weird threading decision; (altho i have to admit it works for the daily chores mail)</p>

<p><span style="color:green;font-weight: bold">✓</span> no way to configure top/bottom posting;<br />
claws has templates, which allow you to configure what a reply (or forward) looks like. This includes the cursor position, so it allows for top-posting, bottom-posting or anywhere posting. And all this is per account.</p>

<p><span style="color:green;font-weight: bold">✓</span> no nntp support;<br />
claws has full nntp support.</p>

<p><span style="color:green;font-weight: bold">✓</span> IMAP support does not include subscriptions;</p>

<p><span style="color:orange;font-weight: bold">?</span> somehow it keeps locking up on me with tenacious regularity, i suspect sqlite here;<br />
We&#8217;ll have to see how claws performs here.</p>

<p><span style="color:green;font-weight: bold">✓</span> the direction with yellowy sticky notes, the stationary things are all useless to me;</p>

<p><span style="color:green;font-weight: bold">✓</span> proprietary, closed program (which I could live with&#8230;)<br />
claws is licensed under the GPL v3</p>

<p><span style="color:green;font-weight: bold">✓</span> but worse, it has a non-documented API for plugins, which is an insult to developers.<br />
i&#8217;m not sure the claws API for plugins is documented (i havent looked) but being open source, there&#8217;s enough to work with.</p>

<p>I&#8217;d say that is a pretty good score! If it feels like that in the real world? Talk to me in 3 months :D I&#8217;m also pretty sure there will be a whole set of new gripes waiting for me around the corner.</p>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2009/09/18/a-weeks-worth-of-claws-mail-on-osx.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Microblogging workflow</title>
		<link>http://mrblog.nl/2009/08/24/microblogging-workflow.html</link>
		<comments>http://mrblog.nl/2009/08/24/microblogging-workflow.html#comments</comments>
		<pubDate>Mon, 24 Aug 2009 16:29:58 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[integration]]></category>

		<guid isPermaLink="false">http://mrblog.nl/?p=724</guid>
		<description><![CDATA[The number of accounts I have on useful networks, social or otherwise, has been on an increasing trend-line for a while. In the beginning, things were simple, but it gets messy pretty quick. One feature which these networks share in some form or another are &#8220;status notices&#8221;. Starting with the &#8216;chat status&#8217; in the Instant [...]]]></description>
			<content:encoded><![CDATA[<p>The number of accounts I have on <em>useful</em> networks, social or otherwise, has been on an increasing trend-line for a while. In the beginning, things were simple, but it gets messy pretty quick. One feature which these networks share in some form or another are  <em>&#8220;status notices&#8221;</em>. Starting with the &#8216;chat status&#8217; in the Instant Messaging world (like: <em>I&#8217;m busy</em> or <em>Away from computer</em> etc.) to the slightly more verbose microblogging notices which describe what the user is doing or finds interesting in about 140 characters or less. </p>

<p>So, if you have a handful of accounts and you want to update your status or give a notice of something. What do you do? Obviously, you&#8217;d want to avoid going to all those sites and doing them one by one.</p>

<h4>Posting is one thing&#8230;</h4>

<p><a href="http://ping.fm">ping.fm</a> has part of the solution. Their idea is to create one point to send status updates and micro blog notices and they will take care of delivering to all the other networks you are a part of. A huge improvement over posting the same content on all the networks separately.  </p>

<p>However, it&#8217;s only part of the solution. Granted, in the domain of microblogging alone the way to post should be readily available (otherwise the moment is gone) and the content is meant to be short and restricted, so redistribution is likely to succeed to many places as the requirements will be low. Perfect when the only origin of your content is microblog-like. Mine is not, however.</p>

<p>The way authoring works is by choosing a publishing means and place based on the content of the message you are trying to get across to a certain audience.<br />
For microblogging, typically short and &#8216;for everyone who is interested&#8217; this can be anything capable of sending out 140 characters to the nearest more connected hub with a supported API. After that, a <a href="http://ping.fm">ping.fm</a> like service can do the rest. 
For a blog—entry (like this), not suitable as microblog content as such, there needs to happens something additional. The content that should go to the social networks is not the actual content of the blog—entry, but more a notification that it happened, posted in the nicest possible way, and in realtime, as the current times demand.</p>

<p>So, with that, is the problem then reduced to the following two-step?</p>

<ol>
<li>if the content is microblog like: use ping.fm and be done with it;</li>
<li>If the content is not suitable for microblogging, use a specific tool and place and make sure a notification goes out to ping.fm with a back reference.</li>
</ol>

<h4>Authoring needs more</h4>

<p>Sure, if no-one ever talked back, this would be all that is needed. However, the apparent idea behind social networks is that people  <strong>do</strong> talk back. If the <em>&#8216;just playing with this thing&#8217;</em>—stage is over and people start talking back, you&#8217;re back into the old situation where you visit all the networks separately to manage the replies to your notices. In fact, it&#8217;s worse. I could, if forced, live with publishing in many places if it meant getting all replies in one (visible) place. In reality all the replies (in whatever form) are scattered all over the place. </p>

<p>Now what? Aggregate in RSS-like form by creating extensions on all the networks to make it one feed? Bring yet another service into the mix? Use an omnipotent client on every platform you work on? Just accept that you cant communicate with everyone in the same way and that it just takes time?</p>

<p>We need a pong.fm as the counterpart of ping.fm!</p>

<h4>Can we do better?</h4>

<p>In the domain of instant messaging I have more or less solved the problem by installing our own jabber server with gateways to icq, aim, gtalk, other jabber servers etc. This gets me to communicate with everyone, regardless of their choice of IM network, whereas I can use my favourite IM client on all platforms without hassle everywhere. (Quite a bit of hassle on the server though). The interface is the same for all IM networks, I can initiate and reply in the same way and I don&#8217;t need to know anything else; the server is connected to all the networks (obviously I need to register to those networks once on the server, so the server knows where to bring the message) Everything looks like a jabber JID to me in the IM-domain. I want something similar for microblogging!</p>

<p>From the top of my head, such a system should satisfy at least the following:</p>

<ul>
<li>be fully distributed, so others can do &#8216;the same&#8217; and we can federate and scaling is trivial;</li>
<li>be open and standardised, so we all know what &#8216;the same&#8217; means;</li>
<li>be able to integrate with the main microblogging initiatives out there in such a way that it is transparent for all communicating parties (multi-directional);</li>
</ul>

<p>(I&#8217;m ignoring any functional specifications for the moment, just what it should be at an architectural level)</p>

<p>A couple of existing systems popped into my mind while jotting down the above points. First, <a href="http://wave.google.com">google wave</a>, mostly because of its distributed real-time multi-user authoring, their solution for the storage issues involved and a couple of other innovations which seem to fit the above (like basing it on XMPP, making it open and having extension-options on both server and client side).</p>

<p>Another system which I thought of was <a href="http://identi.ca">identi.ca</a> (or rather laconi.ca which is the code-base that runs identi.ca). This actually <strong>is</strong> a microblogging system which already supports cross-posting and federation. Their openness is attractive as well as their initiatives to standardise the microblogging protocol for interoperability. </p>

<p>It&#8217;s still early days for both of these systems however. </p>

<p>Will I be able to run a laconi.ca/wave install on our own servers, &#8220;gateway&#8221; it to our XMPP server and every major other µ-blogging platform out there and just register with my own server(s) and will it feel as if I participate in <strong>one</strong> community as a whole, where I can communicate with everyone, regardless of their choice in whatever the latest popular community is?  </p>

<p>I think the answer is, and will always be: <strong>&#8220;Not yet, but we&#8217;re close&#8221;</strong>. It is just another iteration of the &#8216;Unified Messaging&#8217; paradigm. We&#8217;re getting closer each run, but messaging gets redefined over time, making us chase the end of the rainbow again, once we&#8217;ve (partially) fulfilled an earlier goal.</p>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2009/08/24/microblogging-workflow.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maintenance&#8230;</title>
		<link>http://mrblog.nl/2009/06/22/maintenance.html</link>
		<comments>http://mrblog.nl/2009/06/22/maintenance.html#comments</comments>
		<pubDate>Mon, 22 Jun 2009 15:22:06 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[integration]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mrblog.nl/?p=641</guid>
		<description><![CDATA[Today, I have been fighting playing the html code in templates of WordPress and the CSS of the site. I wanted to display the posts of the Cobra blog a bit more visible than an RSS feed, but not (like it was) importing every entry into this blog, so I came up with a block [...]]]></description>
			<content:encoded><![CDATA[<p>Today, I have been <strike>fighting</strike> playing the html code in templates of WordPress and the CSS of the site. I wanted to display the posts of the <a href="http://cobra.mrblog.nl">Cobra blog</a> a bit more visible than an RSS feed, but not (like it was) importing every entry into this blog, so I came up with a block on the homepage which is fairly visible so it will attract most, but not that disturbing for others. </p>

<p>How a little addition to CSS can make a big difference in how a page looks. CSS3 has a <code>box-shadow</code> property, which puts a nice drop-shadow behind an object. Support is still pretty much lacking from all browsers except the latest Firefox and Safari.</p>

<p>As most people wont have these, here&#8217;s an image (which also has this dropshadow btw):</p>

<div class="wrap" style="text-align:center"><img class="shadow" src="http://mrblog.nl/files/2009/06/screen_008.png" alt="screen_008.png" style="border:thin solid black;width:400px" /></div>

<p>Compare this with the rendering on the homepage in your browser. For guys like me who cant do graphics, CSS3 can still make me look like a pro ;-)</p>

<p>It also turns out that aligning <em>stuff</em> bottom-right is not that easy. (for me at least). Getting the wrapping right took the best part of the day for me. While I&#8217;m pretty proficient in XML and it&#8217;s rules, I keep rowing against the HTML stream I think. Oh well, it&#8217;s sort of decent now. (in FF and Safari at least. I&#8217;ve given up on IE for hobby projects)</p>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2009/06/22/maintenance.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Kerberos transition started</title>
		<link>http://mrblog.nl/2009/02/19/kerberos-transition-started.html</link>
		<comments>http://mrblog.nl/2009/02/19/kerberos-transition-started.html#comments</comments>
		<pubDate>Thu, 19 Feb 2009 09:16:59 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[integration]]></category>

		<guid isPermaLink="false">http://mrblog.nl/2009/02/19/kerberos-transition-started.html</guid>
		<description><![CDATA[As of last thursday, I&#8217;ve started to migrate everything in our network to use GSSAPI or Kerberos authentication. The amount of passwords and accounts grew over our heads and the inevitable &#8220;I&#8217;ll use the same everywhere&#8221; started to be apparent. The actual preparation for this already started more than a year ago. We are in [...]]]></description>
			<content:encoded><![CDATA[<p>As of last thursday, I&#8217;ve started to migrate everything in our network to use GSSAPI or Kerberos authentication. The amount of passwords and accounts grew over our heads and the inevitable &#8220;I&#8217;ll use the same everywhere&#8221; started to be apparent.</p>

<p>The actual preparation for this already started more than a year ago. We are in a mixed environment of several Windows varieties, Linux servers and a couple of Macs. It&#8217;s a fairly small network, but complex enough to easily make mistakes or forget something.</p>

<p>The installation of the Kerberos admin server and the domain controller is fairly straightforward if you play by its strict rules. Especially shortcuts in terms of how hostnames get resolved to ip-addresses and vice versa has very little playing room. I had to adapt every <code>/etc/hosts</code> file on every machine to get it to work.</p>

<p>Another thing which Kerberos really does not like is ip-addresses behind a NAT router, be they private ip-addresses or not. We got the actual authentication to work properly across routers, but the password changing only works from machines on the same subnet as the Kerberos server itself. Perhaps I should replicate a slave on each subnet and do password changes against them? (Not sure if that is possible though)</p>

<p>On the client side, I work on OSX myself so that was the first place to convert. Support for Kerberos is built into OSX, although the ticket manager is sort of hidden.</p>

<p style="text-align: center"><br />
<a href="http://mrblog.nl/files/2009/02/krb.png"><img class="shadow" src="http://mrblog.nl/files/2009/02/krb-tm.jpg" width="400" height="339" alt="krb.png" /></a></p>

<p style="text-align: left">The way Kerberos works is sort of like an attraction park. You <em>pay</em> for the entrance ticket by entering your username/password; shown in the upper part of the window above and you get free tickets to all the attractions in the park; shown in the lower part of the picture. In this case there is the Ticket Granting Ticket (the person who hands out tickets if you will), a ticket for the &#8216;http&#8217; service on hawking.hsdev.com (an iCal server in fact), the &#8216;imap&#8217; service on hawking and a host service (ssh) on plato. While doing all this, traffic is encrypted and your password never travels over the network, so that gives most system administrators a good feeling. The traffic of the service itself is not affected by Kerberos, it just does the authentication, nothing more.</p>

<p style="text-align: left">When opening a service like imap, http or whatever has been registered with the Kerberos Realm, there&#8217;s no need to enter a password again, after the initial ticket has been granted within the realm. Even in a small network, this can save a big amount of time.</p>

<p style="text-align: left">Ok, after the Kerberos installation, with the &#8216;host&#8217; services as the initial service to enable on all hosts, the real work started. I made a (big) list of everything in our network which in some way asks for a password. Mail and Calendaring came out on top, not only because everyone used this, but also because I knew my clients were easy to configure for it, so I could focus on the server configuration.</p>

<p style="text-align: left">Surprisingly, because the iCal server runs on Linux, for which it has not been written primarily, was the easiest. Changing the accounts.xml to have empty passwords for the users and putting in the Kerberos realm in the configuration file was enough to get it working.</p>

<p style="text-align: left">For mail, there are three services involved, imap and smtp and sieve. Cyrus uses the sasl library for authentication and we used its internal database for authentication. Making cyrus on debian use GSSAPI is easy, I dont think I had to change anything in fact. The problem is in the multiple ways people tend to get to their mail. Next to their desktop clients there are webmail accesses, iPhones and specific uses of some shared mailboxes. All of these should ideally support Kerberos, but they dont. Until they all do or have been made to do so, the internal sasl database will need to stay for a couple of accounts and thus multiple passwords will still float around.</p>

<p style="text-align: left">I found that most uses can be made to use Kerberos if needed, be it direct or indirect. Many web applications have the option to use http authentication, which in turn can use an apache module to ask Kerberos for user and password information. It&#8217;s not ideal, because control over http authentication sucks (hard to logout, for example), but it will have to do if the goal is to minimize the amount of passwords.</p>

<p style="text-align: left">The amount of steps ahead is still massive, but the first steps are there. The list of things to do also made me look at services more critically and review if we really needed them to be there. I&#8217;m guessing the completion of all the tiny little bits will take the best part of the rest of the year.</p>

<p style="text-align: left">Next up is ejabberd, our clients are iChat and Spark, which both can be Kerberos enabled, so the client side should be easy.</p>

<p style="text-align: left"><br /></p>

<p style="text-align: left"><br /></p>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2009/02/19/kerberos-transition-started.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>All blogs under one hood now</title>
		<link>http://mrblog.nl/2009/01/28/all-blogs-under-one-hood-now.html</link>
		<comments>http://mrblog.nl/2009/01/28/all-blogs-under-one-hood-now.html#comments</comments>
		<pubDate>Wed, 28 Jan 2009 18:10:11 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[integration]]></category>

		<guid isPermaLink="false">http://mrblog.nl/2009/01/28/all-blogs-under-one-hood-now.html</guid>
		<description><![CDATA[Finally gotten around to integrating http://cobra.mrblog.nl and this site to the wordpress—µ installation. This site already ran under wordpress—µ for while, but I wanted to wait for the integration part until most of the 2.7 features appeared in the subversion repository. Creating this site (toplevel mrblog.nl) in the wordpress—µ application was easy, content-wise. Adjusting the [...]]]></description>
			<content:encoded><![CDATA[<p>Finally gotten around to integrating http://cobra.mrblog.nl and this site to the <a href="http://mu.wordpress.org">wordpress</a>—<a href="http://mu.wordpress.org/">µ</a> installation. This site already ran under wordpress—µ for while, but I wanted to wait for the integration part until most of the 2.7 features appeared in the subversion repository.</p>

<p>Creating this site (toplevel mrblog.nl) in the <span style="font-family: 'Trebuchet MS'">wordpress—µ application was easy, content-wise. Adjusting the installation so I could register both independent toplevel blogs (domains) and sites below that took a bit of fiddling around, most of it related to getting the subdomains and its users right.</span></p>

<p>Most of the conversion-work for the cobra blog involved installing the plugins and making sure the users and admins were properly aligned.</p>

<p>In addition to the plugins used for the content I wanted the wordpress feed plugin, so the toplevel blog can syndicate it&#8217;s children. For starters, this blog now syndicates all posts on the cobra blog, thus fulfilling one of the steps i wanted to take with mrblog.nl (it being the parent of *.mrblog.nl in a planet-like construction)</p>

<p>There are some smaller things which I want to correct (like the toplevel syndication pinging back to the child, which is kinda silly) but those can wait.</p>

<div class="iblogger-footer"></div>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2009/01/28/all-blogs-under-one-hood-now.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Looks vs Brains</title>
		<link>http://mrblog.nl/2006/04/03/looks-vs-brains.html</link>
		<comments>http://mrblog.nl/2006/04/03/looks-vs-brains.html#comments</comments>
		<pubDate>Mon, 03 Apr 2006 04:39:23 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[integration]]></category>

		<guid isPermaLink="false">http://marcel.hsdev.com/blogentry/106</guid>
		<description><![CDATA[During their lives, people evolve, that&#8217;s a given. For me, they start out as little ugly creatures, which most of us seem to like for some reason, and their brains don&#8217;t seem to do very much either yet. (but who knows, really?) So, low score in looks and brains. The first 25 years seem to [...]]]></description>
			<content:encoded><![CDATA[<p>During their lives, people evolve, that&#8217;s a given. For me, they start out as little ugly creatures, which most of us seem to like for some reason, and their brains don&#8217;t seem to do very much either yet. (but who knows, really?) So, low score in looks and brains.</p>

<p>The first 25 years seem to deal mostly with getting the &#8220;looks&#8221; right. A minority succeeds. A substantially larger part of the population <strong>think</strong> they have succeeded.</p>

<p>In the next 25 years the brains (should) get some more attention. Possibly the earlier mentioned ratio of actual versus perceived success is even worse here. If there is a third or even a fourth quarter for people, looks are pretty much left behind, while in some cases the brains still can produce some occasional surprise.</p>

<p>The above is an intro to what I was really wondering about: How does a software package evolve with respect to &#8220;looks&#8221; and &#8220;brains&#8221; in its life? (As always i&#8217;m mostly focussing on the typical open source package and how that comes to be)</p>

<p>Being the person that I am, that brings roughly this image into my head:</p>

<p style="text-align:center"><a href="http://mrblog.nl/files/2008/11/progdev.jpg"><img class="alignnone size-medium wp-image-78" src="http://mrblog.nl/files/2008/11/progdev.jpg" alt="" width="300" height="300" /></a></p>

<p>Inevitably i tried to catch the question in some sort of equation. Here&#8217;s roughly the train of thought:</p>

<ul>
    <li>as the analogy is a &#8220;natural&#8221; thing some sort of &#8220;natural logarithmic&#8221; component came to mind</li>
    <li>work being mostly done in (large) groups which means that &#8220;things inforce things&#8221; (bad or good) some exponential part should be in there</li>
    <li>it would be nice if we could have a simple number to characterize the curve, like a quality factor Q or something.</li>
</ul>

<p>In the picture above the blue line would be the ideal(?) but rather boring mix where the looks and brains are always completely in balance. (The lifeline starts in the origin following the line with age). The red line would be a &#8220;code-quality&#8221; oriented progression where the green line focusses on looks. The rough idea is to get from the origin to some point on the blue line as far away from the origin as possible. By varying that Q factor that point can be placed anywhere on the blue line. The formula i came up with was this:</p>

<p style="text-align:center"><a href="http://mrblog.nl/files/2008/11/200601200036.jpg"><img class="alignnone size-medium wp-image-67" src="http://mrblog.nl/files/2008/11/200601200036.jpg" alt="" width="44" height="29" /></a></p>

<p>which corresponds to the red line. (the green line is the reciprocal where x and y switched places). The interesting part is to play with the value of Q, look at the graph and reason about the software product. Or vice versa, reason about <em>your</em> project and determine it&#8217;s Q factor.</p>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2006/04/03/looks-vs-brains.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Filling up your schedule with Xaraya content</title>
		<link>http://mrblog.nl/2005/12/27/filling-up-your-schedule-with-xaraya-content.html</link>
		<comments>http://mrblog.nl/2005/12/27/filling-up-your-schedule-with-xaraya-content.html#comments</comments>
		<pubDate>Tue, 27 Dec 2005 10:26:40 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[integration]]></category>
		<category><![CDATA[xaraya]]></category>

		<guid isPermaLink="false">http://marcel.hsdev.com/blogentry/102</guid>
		<description><![CDATA[Creating content with Blocklayout in Xaraya is flexible and every once in a while i want to take it for a spin. In the past i&#8217;ve played with creating a XUL theme where Xaraya served it directly as the XUL mimetype, this time i&#8217;ve been playing with creating a calendar feed of any Xaraya content [...]]]></description>
			<content:encoded><![CDATA[<p><p>Creating content with Blocklayout in <a href='http://xaraya.com' rel='external ' title='Xaraya web application framework'>Xaraya</a> is flexible and every once in a while i want to take it for a spin. In the past i&#8217;ve played with creating a XUL theme where <a href='http://xaraya.com' rel='external ' title='Xaraya web application framework'>Xaraya</a> served it directly as the XUL mimetype, this time i&#8217;ve been playing with creating a calendar feed of any <a href='http://xaraya.com' rel='external ' title='Xaraya web application framework'>Xaraya</a> content which has some sort of a date attached to it.</p>What happens is that the content of some part of <a href='http://xaraya.com' rel='external ' title='Xaraya web application framework'>Xaraya</a> is fed into an iCal theme which produces output according to the <a title="iCalendar RFC" href="http://www.ietf.org/rfc/rfc2445.txt">iCal standard</a> Blocklayout sets the right content type for us, which allows clients like Apple&#8217;s iCal or Gnome&#8217;s evolution to &#8216;subscribe&#8217; to the calendar feed.</p>

<p><p style="text-align:center"><a href="http://mrblog.nl/files/2008/11/icalxar.png"><img class="alignnone size-medium wp-image-72" src="http://mrblog.nl/files/2008/11/icalxar-300x184.png" alt="" width="300" height="184" /></a></p>Above is an example on how that could look in the iCal application. The Feed block on the right side allows you to do exactly what is described here if you have a client which allows you to subscribe to iCal feeds. I&#8217;ve tested it with Evolution and iCal. The concept is still young but I can see a lot of potential in this.</p>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2005/12/27/filling-up-your-schedule-with-xaraya-content.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xaraya connects to worldkit</title>
		<link>http://mrblog.nl/2005/06/15/xaraya-connects-to-worldkit.html</link>
		<comments>http://mrblog.nl/2005/06/15/xaraya-connects-to-worldkit.html#comments</comments>
		<pubDate>Wed, 15 Jun 2005 09:32:12 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[integration]]></category>
		<category><![CDATA[xaraya]]></category>

		<guid isPermaLink="false">http://marcel.hsdev.com/blogentry/94</guid>
		<description><![CDATA[For play, i constructed a couple of templates on the Xaraya site to connect the Worldkit package to a xaraya installation to construct a geographical map (flash based) of the registered users on the Xaraya site. Worldkit uses an RSS feed with location information to construct an image where the data points are shown on [...]]]></description>
			<content:encoded><![CDATA[<p>For play, i constructed a couple of templates on the <a href="http://xaraya.com" title="<a href='http://xaraya.com' rel='external ' title='Xaraya web application framework'>Xaraya</a> homepage"><a href='http://xaraya.com' rel='external ' title='Xaraya web application framework'>Xaraya</a></a> site to connect the <a href="http://brainoff.com/worldkit/" title="RSS based Mapping package">Worldkit</a> package to a xaraya installation to construct a <a href="http://xaraya.com/worldmap" title="Map of developer locations">geographical map</a> (flash based) of the registered users on the <a href='http://xaraya.com' rel='external ' title='Xaraya web application framework'>Xaraya</a> site.</p>

<p>Worldkit uses an RSS feed with location information to construct an image where the data points are shown on a map. In doing so, of course the RSS feed can be subscribed to in the &#8216;normal&#8217; way too, giving you an addressbook directly in your aggregator of all people who have provided their longitude and latitude information on the site.</p>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2005/06/15/xaraya-connects-to-worldkit.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gentoo&#8217;s Portage to be ported to Windows Services for UNIX</title>
		<link>http://mrblog.nl/2005/05/17/gentoos-portage-to-be-ported-to-windows-services-for-unix.html</link>
		<comments>http://mrblog.nl/2005/05/17/gentoos-portage-to-be-ported-to-windows-services-for-unix.html#comments</comments>
		<pubDate>Tue, 17 May 2005 19:59:25 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[ideas]]></category>
		<category><![CDATA[integration]]></category>

		<guid isPermaLink="false">http://marcel.hsdev.com/blogentry/93</guid>
		<description><![CDATA[Gentoo&#8217;s Portage to be ported to Windows Services for UNIX: A group of Windows programmers is working on porting Gentoo&#8217;s Portage over to Windows SFU. If you don&#8217;t know already, Windows Services for UNIX is a full POSIX subsystem for Windows, enabling it to compile and run almost any software that will compile on BSD, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.osnews.com/story.php?news_id=10616">Gentoo&#8217;s Portage to be ported to Windows Services for UNIX</a>:<br /></p>

<blockquote>
  <p>A group of Windows programmers is working on porting Gentoo&#8217;s Portage over to Windows SFU. If you don&#8217;t know already, Windows Services for UNIX is a full POSIX subsystem for Windows, enabling it to compile and run almost any software that will compile on BSD, Solaris, HP/UX, and Linux. Details to &#8220;emerge&#8221; soon.</p>
</blockquote>

<p>That sounds a lot like a <a href="http://mrblog.nl/2004/12/07/opportunity-apt-get-like-program-on-windows/">post i made earlier</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2005/05/17/gentoos-portage-to-be-ported-to-windows-services-for-unix.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ecto recognizes the Xaraya endpoint</title>
		<link>http://mrblog.nl/2005/04/02/ecto-recognizes-the-xaraya-endpoint.html</link>
		<comments>http://mrblog.nl/2005/04/02/ecto-recognizes-the-xaraya-endpoint.html#comments</comments>
		<pubDate>Sat, 02 Apr 2005 05:48:41 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[integration]]></category>
		<category><![CDATA[xaraya]]></category>

		<guid isPermaLink="false">http://marcel.hsdev.com/blogentry/77</guid>
		<description><![CDATA[I dropped a quick message to Adriaan Tijsseling, the developer of the amazing Ecto package with a number of questions. One of the questions was whether Xaraya could be included as an endpoint in the accounts screen. This morning, I fired up Ecto, and the update which contained it was already there! Man, this guy [...]]]></description>
			<content:encoded><![CDATA[<p>I dropped a quick message to Adriaan Tijsseling, the developer of the amazing <a title="Ecto blogging application" href="http://ecto.kung-foo.tv/">Ecto</a> package with a number of questions. One of the questions was whether <a href='http://xaraya.com' rel='external ' title='Xaraya web application framework'>Xaraya</a> could be included as an endpoint in the accounts screen.</p>

<p>This morning, I fired up Ecto, and the update which contained it was already there! Man, this guy is quick.</p>

<p style="font-size:11pt"></p>

<p style="font-size:11pt"></p><a href="http://mrblog.nl/files/2008/11/ectoxar.jpg"><img class="alignnone size-medium wp-image-70" src="http://mrblog.nl/files/2008/11/ectoxar-300x95.jpg" alt="" width="300" height="95" /></a>
<p>Awesome!</p>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2005/04/02/ecto-recognizes-the-xaraya-endpoint.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>There is only room for 26 software vendors</title>
		<link>http://mrblog.nl/2004/09/17/there-is-only-room-for-26-software-vendors.html</link>
		<comments>http://mrblog.nl/2004/09/17/there-is-only-room-for-26-software-vendors.html#comments</comments>
		<pubDate>Fri, 17 Sep 2004 11:39:38 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[integration]]></category>

		<guid isPermaLink="false">http://marcel.hsdev.com/blogentry/5</guid>
		<description><![CDATA[Those marketing guys must be rather clueless, lots of software vendors pick a couple of letters and prefix all their software titles with it. I can only gues this is due to lack of inspiration or to create at least the impression that the software is like a suite of packages which work together (which [...]]]></description>
			<content:encoded><![CDATA[<p>Those marketing guys must be rather clueless, lots of software vendors pick a couple of letters and prefix all their software titles with it. I can only gues this is due to lack of inspiration or to create at least the impression that the software is like a suite of packages which work together (which it does not in most cases) It&#8217;s not only the professional marketing departments who lack inspiration, Open Source developers, whether professional or not, have a liking for <em>prefabricated</em> names too. Here&#8217;s the slate what i could come up with without much research, lots of letters left, so i you have some plans grab one, while they are still in stock:</p>

<ol>
  <li>The <strong>a</strong> is liberally replaced with a <strong>@</strong> in both names of classes (eM@il) and names of software packages;</li>

  <li>The <strong>e</strong> seems to have grown into a prefix to be used for a class of software (eMail, eLearning, eCommerce) roughly describing <em>doing the classical thing, but then with the internet</em> (whatever that means in practice);</li>

  <li><strong>gnu</strong> &#8211; Applications which like to identify themselves (i guess) with the FSF or the GNU software set or the GPL (gnuTella,;</li>

  <li><strong>g</strong> &#8211; GNOME stuff;</li>

  <li><strong>i</strong> &#8211; Apple (iTunes, iChat);</li>

  <li><strong>k</strong> &#8211; KDE applications (kNode, kWrite);</li>

  <li><strong>moz</strong> &#8211; Based on mozilla framework (mozBlog, mozEdit) [Note: also the postfix <em>zilla</em> is often used];</li>

  <li><strong>x</strong> &#8211; X windows applications (xChat, xEyes);</li>

  <li><strong>xar</strong> &#8211; <a href='http://xaraya.com' rel='external ' title='Xaraya web application framework'>Xaraya</a> modules [ hesitated a bit to put this one in ;-) ] And of course there is microsoft which just puts MS in front of everything. I&#8217;m sure there are more examples, the above is by head. So, if you want a letter prefix, get one fast; we only have 26 letters.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2004/09/17/there-is-only-room-for-26-software-vendors.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using a screwdriver as a hammer</title>
		<link>http://mrblog.nl/2004/05/12/using-a-screwdriver-as-a-hammer.html</link>
		<comments>http://mrblog.nl/2004/05/12/using-a-screwdriver-as-a-hammer.html#comments</comments>
		<pubDate>Wed, 12 May 2004 12:16:33 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[integration]]></category>

		<guid isPermaLink="false">http://marcel.hsdev.com/blogentry/10</guid>
		<description><![CDATA[Interesting discussion last night on Xaraya&#8217;s IRC channel. I installed An amazingly good looking IRC client for OSX. This client has a feature called a buddy list which shows you the online status of people on IRC servers they are on regularly, much like the IM clients show an online status for people. The feature [...]]]></description>
			<content:encoded><![CDATA[<p>Interesting discussion last night on <a href='http://xaraya.com' rel='external ' title='Xaraya web application framework'>Xaraya</a>&#8217;s IRC channel. I installed <a href="http://colloquy.info">An amazingly good looking IRC client for OSX</a>. This client has a feature called a <em>buddy list</em> which shows you the online status of people on IRC servers they are on regularly, much like the IM clients show an online status for people.</p>

<p>The feature saves me visiting tens of irc servers just to find out that the person i need is not there.</p>

<p>To be able to maintain this online status, colloquy sends /whois commands to the registered servers and channels to get the online status of the people in the buddy list. Obviously the sending of <em>some</em> command is necessary for this information.</p>

<p>When i started adding people to the buddy list, one of the serverops asked me why i was sending him /whois commands every 30 seconds. At that time, i didnt know what was happening. A little investigating showed that it was the buddy list feature.</p>

<p>In short, the discussion went fairly quickly into &#8220;user experience&#8221; versus &#8220;irc is not designed for this and stop doing this please&#8221;. This is interesting for me, because usually i am on the side telling people the <em>the system is not designed to do this</em> while at this time i was in the <em>end users chair</em></p>

<p>There&#8217;s no escape from this argument, the feature saves a lot of time, but is using a technique not intended for that particular goal. Who should give in? I dont know.</p>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2004/05/12/using-a-screwdriver-as-a-hammer.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>blogging through email, continued</title>
		<link>http://mrblog.nl/2003/10/19/blogging-through-email-continued.html</link>
		<comments>http://mrblog.nl/2003/10/19/blogging-through-email-continued.html#comments</comments>
		<pubDate>Sun, 19 Oct 2003 05:22:38 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[integration]]></category>

		<guid isPermaLink="false">http://marcel.hsdev.com/blogentry/33</guid>
		<description><![CDATA[Worked a bit on the&#38;nbsp; blog by email stuff. Sanitized the script a bit. The posting should now be a bit more clean as the backend now only includes stuff between the body tags of the received html. Nowhere near rock-solid, but useable nevertheless. Just for the technically inclined, this is the regexp used to [...]]]></description>
			<content:encoded><![CDATA[<p>Worked a bit on the&amp;nbsp; <em>blog by email</em> stuff. Sanitized the script a bit. The posting should now be a bit more clean as the backend now only includes stuff between the body tags of the received html. Nowhere near rock-solid, but useable nevertheless.</p>

<p>Just for the technically inclined, this is the regexp used to extract the blog entry from the html:</p>

<pre>
!&lt;body[^&gt;]*&gt;(.*?)&lt;/body&gt;!
</pre>

<p>Next step, getting some regular expression which makes sense to extract excerpt and extended entry (if any) out of there. Thinking about using &lt;hr /&gt; as a separator; it just looks natural when composing the entry. Dunno.</p>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2003/10/19/blogging-through-email-continued.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lowering the treshold</title>
		<link>http://mrblog.nl/2003/10/17/lowering-the-treshold.html</link>
		<comments>http://mrblog.nl/2003/10/17/lowering-the-treshold.html#comments</comments>
		<pubDate>Fri, 17 Oct 2003 05:19:49 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[integration]]></category>

		<guid isPermaLink="false">http://marcel.hsdev.com/blogentry/32</guid>
		<description><![CDATA[As mentioned earlier i like to treat weblogs as much as possible as a messaging activity. Not because i like messaging so much, but it has become the major activity in working the internet for me; communicating through news and mail. I find blogging interesting, but the threshold was always a bit high. Especially blogging [...]]]></description>
			<content:encoded><![CDATA[<p>As mentioned earlier i like to treat weblogs as much as possible as a messaging activity. Not because i like messaging so much, but it has become the major activity in working the internet for me; communicating through news and mail. I find blogging interesting, but the threshold was always a bit high.<br /></p>

<p>Especially blogging on linux seems a tab bit less friendly than the excellent clients available for windows, and those didn&#8217;t fit my pattern. What I did was basically the following:<br /></p>

<ol>
  <li>searched the net for email gateways to MT (found 3)<br /></li>

  <li>literally threw the three files into one perl script ( they all had something i needed)</li>

  <li>reorganized and made it fit to be a baseline for me.</li>
</ol>So, phase 1 is complete, i can post in html with my email client to my blog (through a special email-address linked to it), selecting multiple categories.(by specifying them in a X-Categories custom mail header). Attachments to the email are automatically placed in the right location.<br />
<br />
Outstanding issues:<br />
<ol>
  <li>a bit better extracting of the message (i left this posting as it is generated, definitely not what you want for all postings, look at the source of this page!)</li>

  <li>keywords, excerpt and extended entry support</li>

  <li>being able to comment through the same mechanism</li>

  <li>get the stylesheet of the blog as a template in the email composer (well, maybe not)</li>

  <li>Editting of posts</li>

  <li>specifying sites to ping</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2003/10/17/lowering-the-treshold.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maintaining &#8216;seen&#8217; info</title>
		<link>http://mrblog.nl/2003/10/12/maintaining-seen-info.html</link>
		<comments>http://mrblog.nl/2003/10/12/maintaining-seen-info.html#comments</comments>
		<pubDate>Sun, 12 Oct 2003 17:07:40 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[integration]]></category>

		<guid isPermaLink="false">http://marcel.hsdev.com/blogentry/18</guid>
		<description><![CDATA[As I&#8217;m working on several different computers at different locations, with at least two different operating systems, it&#8217;s sometimes hard to maintain the status of all the message types you need to follow these days. Mail, nntp, rss and websites all boil down to messages for me in some form, so I would like to [...]]]></description>
			<content:encoded><![CDATA[<p>As I&#8217;m working on several different computers at different locations, with at least two different operating systems, it&#8217;s sometimes hard to maintain the status of all the message types you need to follow these days.</p>

<p>Mail, nntp, rss and websites all boil down to messages for me in some form, so I would like to treat them that way. It&#8217;s not easy to have all places you work behind a computer synced up. I got one step further tho with the help of <a href="http://www.methodize.org/nntprss">nntp//rss</a></p>

<p>For mail only, my problem has been solved a while ago. Using the Cyrus mail server, i can access my mail from basically anywhere, maintaining status across locations and computers.</p>

<p>For newsgroups, the solution is basically the same, using shared folders in Cyrus as newsgroups and the &#8216;seen&#8217; status of the newsgroups is maintained as well. At this point, the complexity starts. I read newsgroups from different news-servers and chances are about 100% they are NOT Cyrus shared folders.</p>

<p>So, to be able to maintain status, I have to install a &#8216;proxy&#8217; news server which gathers the newsgroups from the different servers and then let the Cyrus server sync with that proxy news server. I&#8217;m not sure how posting to those newsgroups would work in this case, but i guess that is manageable by creating accounts in a clever way.</p>

<p>Now, for RSS-feeds i used to have a separate reader and couldn&#8217;t figure out why that was needed. I fed <a href="http://www.google.nl/search?q=rss+to+nntp">&#8216;rss to nntp&#8217;</a> into google and after some searching i found a couple of RSS to NNTP and RSS to IMAP gateways.</p>

<p>Installing <a href="http://www.methodize.org/nntprss">nntp//rss</a> was easy enough. It creates a newsgroup for every channel and behaves like a news-server for them, so you can read RSS feeds through your newsreader.</p>

<p>At this point i read mail, news and rss feeds all with the same program (in my case mozilla), the &#8216;seen&#8217; state is only maintained for mail, but at least the RSS subscriptions are all in one place, instead of on all the computers i work on.</p>

<p>For posting, <a href="http://www.methodize.org/nntprss">nntp//rss</a> allows you to define the defined newsgroups as &#8216;writeable&#8217; and link a blog to it using the blogger API or metaWebLog. Although pretty unstable and not quite useable yet, i really like the idea, especially if replying to a &#8216;newsgroup&#8217; message would show up as a comment on the linked weblog</p>

<p>In conclusion, integration is possible for me, because i run my own servers. The amount of work and the expertise needed to do it is, as of now, far too high for this to become mainstream.</p>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2003/10/12/maintaining-seen-info.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pathetic</title>
		<link>http://mrblog.nl/2003/10/12/pathetic.html</link>
		<comments>http://mrblog.nl/2003/10/12/pathetic.html#comments</comments>
		<pubDate>Sun, 12 Oct 2003 05:17:44 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[integration]]></category>

		<guid isPermaLink="false">http://marcel.hsdev.com/blogentry/31</guid>
		<description><![CDATA[Spent the most part of this day getting http links in thunderbird to open in firebird. Still not succeeding. This is pathetic, i&#8217;m pretty sure my local configuration is not broken. I&#8217;m NOT a linux newbie and can&#8217;t get it to work. There&#8217;s no option to configure it, the system wide configuration in gnome is [...]]]></description>
			<content:encoded><![CDATA[<p>Spent the most part of this day getting http links in thunderbird to open in firebird. Still not succeeding. This is pathetic, i&#8217;m pretty sure my local configuration is not broken. I&#8217;m NOT a linux newbie and can&#8217;t get it to work.</p>

<p>There&#8217;s no option to configure it, the system wide configuration in gnome is at least confusing, and no obvious way to debug it. On a related issue; had to install the MozEx extension and write a custom shell script to get mailto links to open the compose window in thunderbird when clicked on in firebird.</p>

<p>What are these people expecting from me?</p>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2003/10/12/pathetic.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
