<?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; coding</title>
	<atom:link href="http://mrblog.nl/category/coding/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>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>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>Xaraya 2.0 Brainstorming</title>
		<link>http://mrblog.nl/2005/11/10/xaraya-20-brainstorming.html</link>
		<comments>http://mrblog.nl/2005/11/10/xaraya-20-brainstorming.html#comments</comments>
		<pubDate>Thu, 10 Nov 2005 13:46:34 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[ideas]]></category>
		<category><![CDATA[xaraya]]></category>

		<guid isPermaLink="false">http://marcel.hsdev.com/blogentry/99</guid>
		<description><![CDATA[Let&#8217;s try to create a chain of documents like the one John did in Xaraya 2.0 Brainstorming. After a while the common denominators should float to the surface by looking at the whole chain. I tend to view at an application development process like this: make it work make it right make it nice make [...]]]></description>
			<content:encoded><![CDATA[<p>Let&#8217;s try to create a chain of documents like the one John did in <a href="http://wyome.com/index.php?module=articles&amp;func=display&amp;ptid=10&amp;aid=473"><a href='http://xaraya.com' rel='external ' title='Xaraya web application framework'>Xaraya</a> 2.0 Brainstorming</a>. After a while the common denominators should float to the surface by looking at the whole chain.</p>

<p>I tend to view at an application development process like this:</p>

<ol>
  <li>make it work</li>
  <li>make it right</li>
  <li>make it nice</li>
  <li>make if fast</li>
</ol>

<p>For <a href='http://xaraya.com' rel='external ' title='Xaraya web application framework'>Xaraya</a>, the 1.0 release signals to me we&#8217;ve been able to make it work. Now, let&#8217;s try to make it right. Some ideas on how follow.</p>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2005/11/10/xaraya-20-brainstorming.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Progress report</title>
		<link>http://mrblog.nl/2005/04/03/progress-report.html</link>
		<comments>http://mrblog.nl/2005/04/03/progress-report.html#comments</comments>
		<pubDate>Sun, 03 Apr 2005 10:39:36 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[xaraya]]></category>

		<guid isPermaLink="false">http://marcel.hsdev.com/blogentry/78</guid>
		<description><![CDATA[Making xaraya react to the mt_keywords MT member was easy with the existing keywords module. The harder part (read: more time consuming) was to make the visual presentation of them in the site somewhat acceptable. If you view this article by itself (what we call the display view in Xaraya), you&#8217;ll notice an extra part [...]]]></description>
			<content:encoded><![CDATA[<p>Making xaraya react to the mt_keywords MT member was easy with the existing keywords module. The harder part (read: more time consuming) was to make the visual presentation of them in the site somewhat acceptable.</p>

<p>If you view this article by itself (what we call the <strong>display</strong> view in <a href='http://xaraya.com' rel='external ' title='Xaraya web application framework'>Xaraya</a>), you&#8217;ll notice an extra part on the right side &#8220;Related entries&#8221; which lists other entries which have the same keywords attached to them. This allows a reader to quickly read all entries which have the same or similar taxonomy. <strike>The block isnt fully functional yet, because it reacts to some keywords while it doesn&#8217;t for others, so there&#8217;s still some digging to do there.</strike> (FIXED)</p>

<p>Outstanding task list:</p>

<ul>
  <li>making <a href='http://xaraya.com' rel='external ' title='Xaraya web application framework'>Xaraya</a> react on the mt_tb_ping_urls member</li>

  <li>deal with the allow/disallow flags for trackback and comments</li>

  <li>find a home for mt_excerpt</li>

  <li>implement the mt.supportedTextFilters method to allow for markdown or textile input</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2005/04/03/progress-report.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Logical next step: MoveableType API for Xaraya</title>
		<link>http://mrblog.nl/2005/03/31/logical-next-step-moveabletype-api-for-xaraya.html</link>
		<comments>http://mrblog.nl/2005/03/31/logical-next-step-moveabletype-api-for-xaraya.html#comments</comments>
		<pubDate>Thu, 31 Mar 2005 17:28:09 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[xaraya]]></category>

		<guid isPermaLink="false">http://marcel.hsdev.com/blogentry/53</guid>
		<description><![CDATA[While I was at it, the Moveable Type API seemed quite close, so I created a little module to start implementing it. The more advanced features of the MT API I havent implemented (yet), but one thing is supported from the beginning, which is the Extended Entry.]]></description>
			<content:encoded><![CDATA[<p>While I was at it, the <a href="http://www.sixapart.com/movabletype/docs/mtmanual_programmatic.html#plugins">Moveable Type API</a> seemed quite close, so I created a little module to start implementing it.</p>

<p>The more advanced features of the MT API I havent implemented (yet), but one thing is supported from the beginning, which is the Extended Entry.</p>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2005/03/31/logical-next-step-moveabletype-api-for-xaraya.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>First itch scratched</title>
		<link>http://mrblog.nl/2005/03/29/first-itch-scratched.html</link>
		<comments>http://mrblog.nl/2005/03/29/first-itch-scratched.html#comments</comments>
		<pubDate>Tue, 29 Mar 2005 15:21:39 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[xaraya]]></category>

		<guid isPermaLink="false">http://marcel.hsdev.com/blogentry/14</guid>
		<description><![CDATA[Brought back the metaweblog api module and activated it on this blog. The metaweblog api in Xaraya is incomplete, but the first result is there: multiple category support, directly from the blog client. (This post is in two for example)]]></description>
			<content:encoded><![CDATA[<p>Brought back the metaweblog api module and activated it on this blog.</p>

<p>The metaweblog api in <a href='http://xaraya.com' rel='external ' title='Xaraya web application framework'>Xaraya</a> is incomplete, but the first result is there: multiple category support, directly from the blog client. (This post is in two for example)</p>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2005/03/29/first-itch-scratched.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP-GTK an alternative to Java?</title>
		<link>http://mrblog.nl/2003/04/06/php-gtk-an-alternative-to-java.html</link>
		<comments>http://mrblog.nl/2003/04/06/php-gtk-an-alternative-to-java.html#comments</comments>
		<pubDate>Sun, 06 Apr 2003 05:14:37 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[ideas]]></category>

		<guid isPermaLink="false">http://marcel.hsdev.com/blogentry/30</guid>
		<description><![CDATA[I experimented a little with PHP-GTK yesterday. I have massive amounts of PHP-libraries lying around and didn&#8217;t want to switch to another language for using those libraries in other applications than pure web. The combo of PHP and GTK makes up for a reasonable alternative (for java for example) for platform independent applications. Especially if [...]]]></description>
			<content:encoded><![CDATA[<p>I experimented a little with PHP-GTK yesterday. I have massive amounts of PHP-libraries lying around and didn&#8217;t want to switch to another language for using those libraries in other applications than pure web.</p>

<p>The combo of PHP and GTK makes up for a reasonable alternative (for java for example) for platform independent applications. Especially if combined with libglade. Glade is a tool which is used to build graphical interfaces and store this in a XML format. PHP-GTK is able to read those XML-files and dynamically build the interface. This way, the interface is separated nicely from the code and can be changed without changing the code. :-))</p>

<p>Example:</p>

<pre>
&lt;?xml version="1.0"?&gt;
&lt;GTK-Interface&gt;
&lt;widget&gt;
&lt;class&gt;GtkWindow&lt;/class&gt;
&lt;name&gt;windowMain&lt;/name&gt;<br />&lt;width&gt;150&lt;/width&gt;<br />&lt;height&gt;80&lt;/height&gt;<br />&lt;title&gt;PHP-GTK-Glade for world domination&lt;/title&gt;<br />&lt;type&gt;GTK_WINDOW_TOPLEVEL&lt;/type&gt;<br />&lt;position&gt;GTK_WIN_POS_NONE&lt;/position&gt;<br />&lt;modal&gt;False&lt;/modal&gt;<br />&lt;allow_shrink&gt;False&lt;/allow_shrink&gt;<br />&lt;allow_grow&gt;True&lt;/allow_grow&gt;<br />&lt;auto_shrink&gt;False&lt;/auto_shrink&gt;<br />&lt;widget&gt;<br />&lt;class&gt;GtkButton&lt;/class&gt;<br />&lt;name&gt;button&lt;/name&gt;<br />&lt;can_focus&gt;True&lt;/can_focus&gt;<br />&lt;signal&gt;<br />&lt;name&gt;clicked&lt;/name&gt;<br />&lt;handler&gt;<strong>on_button_clicked</strong>&lt;/handler&gt;<br />&lt;/signal&gt;<br />&lt;label&gt;Exit&lt;/label&gt;<br />&lt;relief&gt;GTK_RELIEF_NORMAL&lt;/relief&gt;<br />&lt;/widget&gt;&lt;/widget&gt;&lt;/GTK-Interface&gt;
</pre>

<p>And the code:</p>

<pre>
function on_button_clicked() {
echo "Clickedn";
}$gx = &amp;new GladeXML('interface.glade');
$gx-&gt;signal_autoconnect();
</pre>

<p>This creates a window with a button on it and connects the <em>clicked</em> signal to the function <em>on_button_clicked</em>. With minimal effort this application can be deployed on any platform which supports PHP and GTK. (someone else may figure out how many, but lots).</p>

<p>Because the glade interface is in XML this can be deployed locally or remotely at will. For PHP we know that it can run both locally and on the server. This combined opens up some interesting possibilities. We now can deploy interface and code both locally and remotely.</p>

<p>The usual goodies which relate to XML are of course applicable to glade, like for example XSLT transformations on the interface file (for example filtering out interface elements which have no usefull meaning due to privilege restrictions).</p>

<p>The combo opens up interesting options for bringing desktop applications and web applications closer together. The whole suite reminds one of techniques used in XUL applications and of Java deployment strategies. I gather if we could hook up this combo to an object broker service like Corba and a PHP compiler we&#8217;d have a very powerfull platform.</p>

<p>It certainly warrants further investigation.</p>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2003/04/06/php-gtk-an-alternative-to-java.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Refactor sheet</title>
		<link>http://mrblog.nl/2003/01/30/refactor-sheet.html</link>
		<comments>http://mrblog.nl/2003/01/30/refactor-sheet.html#comments</comments>
		<pubDate>Thu, 30 Jan 2003 05:54:25 +0000</pubDate>
		<dc:creator>mrb</dc:creator>
				<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://marcel.hsdev.com/blogentry/24</guid>
		<description><![CDATA[Sometimes you just don&#8217;t want to make a change in the code like that. Some kind of procedure is needed to construct a list of checks, uncertainties etc. The general lessons from refactoring apply in these situations. I&#8217;m thinking out creating a refactor sheet which contains an easy to use checklist of form in which [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes you just don&#8217;t want to make a change in the code like that. Some kind of procedure is needed to construct a list of checks, uncertainties etc. The general lessons from refactoring apply in these situations. I&#8217;m thinking out creating a refactor sheet which contains an easy to use checklist of form in which developers can entry information on the refactoring task a hand.</p>

<p>This list should at least include:</p>

<ul>
  <li>goal: what are we trying to improve, a little bit more verbose than fix #bug 49712 is appreciated</li>

  <li>peer review: each refactoring task is performed by two people (at least) . Who&#8217;s coding and who&#8217;s reviewing is up to the duet</li>

  <li>tests: which tests should be done to check whether goal is reached. (this is actually the most important step)</li>

  <li>solution strategy: refactoring has some well known terms to work with, especially for object oriented systems. Try to classify the refactoring into one of these terms, so an objective reference is available</li>
</ul>

<p>It would rock if we could use a <em>refactoring browser</em> to make it easier to perform the refactoring.</p>

<p>Note: refactoring is not adding functionality, you go from a working situation to a working situation, not from a broken situation to a (hopefully) working situation.</p>

<p><strong>Pitfalls</strong></p>

<p>refactoring backtrack explosion: suppose you want to fix a bug, the solution is apparent, you fix it, but you recognize the code can be improved by making it more general. You create a refactor sheet for it and start thinking about it. Almost immediately you see that there is a lower level change required to make the top level refactoring viable, so you create another refactoring sheet, pulling in an extra dependency for that refactoring. If this process repeats itself 2 times, you can be sure your code is not othogonal enough. Instead of making the refactorings smaller and smaller until the changes are properly localized and you can start implementing them, you pull in more and more dependencies. The process fall into a deadlock, suddenly you don&#8217;t know where to start and you&#8217;re not sure which dependencies to check anymore.</p>

<p>If you find yourself in this situation, let the orginal bugfix sit in the code (make a FIXME though!) and go walk the dog. Don&#8217;t think about the problem for a while. At a later time, return to the problem and try to solve it at a higher level, not changing API or interfaces, but generally making code more orthogonal without solving the original problem.</p>

<p>What you&#8217;re actually doing at that time is converting the system to a new state, so your <em>refactoring stack</em> will be different than the one described above. Naturally you use the knowledge you have about the old stack.</p>

<p><strong>Practical application</strong></p>

<p>How to organize this in real life? Use the bugtracker for the refactoring sheets? It&#8217;s a good start. Start simple at least, but make sure information is in a repository (but I say that with all information produced)</p>
]]></content:encoded>
			<wfw:commentRss>http://mrblog.nl/2003/01/30/refactor-sheet.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
