<?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>J5's Blog</title>
	<atom:link href="http://www.j5live.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.j5live.com</link>
	<description>Where the urethane hits the pavement</description>
	<lastBuildDate>Thu, 04 Feb 2010 03:10:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The Quest for Python 3</title>
		<link>http://www.j5live.com/2010/02/03/the-quest-for-python-3/</link>
		<comments>http://www.j5live.com/2010/02/03/the-quest-for-python-3/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 23:24:40 +0000</pubDate>
		<dc:creator>J5</dc:creator>
				<category><![CDATA[D-Bus]]></category>
		<category><![CDATA[Freedesktop]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[messaging]]></category>

		<guid isPermaLink="false">http://www.j5live.com/?p=730</guid>
		<description><![CDATA[Well, I&#8217;ve gone and done it.  Thanks to David Malcolm&#8217;s excellent 2to3c tool and some hand wrangling with PyUnicode objects I was able to get D-Bus Python compiling and working on Python 3.  Grab the patch and start testing it out.
I&#8217;ve also tested this under Python 2.6 but it would be nice to [...]]]></description>
			<content:encoded><![CDATA[<p>Well, I&#8217;ve gone and done it.  Thanks to <a href="http://dmalcolm.livejournal.com/3935.html">David Malcolm&#8217;s excellent 2to3c tool</a> and some hand wrangling with PyUnicode objects I was able to get <a href="https://bugs.freedesktop.org/show_bug.cgi?id=26420">D-Bus Python compiling and working on Python 3</a>.  <a href="https://bugs.freedesktop.org/attachment.cgi?id=33044">Grab the patch</a> and start testing it out.</p>
<p>I&#8217;ve also tested this under Python 2.6 but it would be nice to see if it also works under Python versions < 2.6 since 2.6 has a couple of compatibility layers built in.</p>
<div><a href='http://gnome.org/friends'><img border='0'src='http://www.gnome.org/friends/banners/support-gnome.png' /></a></div>[read this post in: <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/02/03/the-quest-for-python-3/&langpair=en%7Car">ar</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/02/03/the-quest-for-python-3/&langpair=en%7Cde">de</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/02/03/the-quest-for-python-3/&langpair=en%7Ces">es</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/02/03/the-quest-for-python-3/&langpair=en%7Cfr">fr</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/02/03/the-quest-for-python-3/&langpair=en%7Cit">it</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/02/03/the-quest-for-python-3/&langpair=en%7Cja">ja</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/02/03/the-quest-for-python-3/&langpair=en%7Cko">ko</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/02/03/the-quest-for-python-3/&langpair=en%7Cpt">pt</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/02/03/the-quest-for-python-3/&langpair=en%7Cru">ru</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/02/03/the-quest-for-python-3/&langpair=en%7Czh-CN">zh-CN</a> ]]]></content:encoded>
			<wfw:commentRss>http://www.j5live.com/2010/02/03/the-quest-for-python-3/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>kamaloka-js 0.9.0 released</title>
		<link>http://www.j5live.com/2010/01/28/kamaloka-js-0-9-0-released/</link>
		<comments>http://www.j5live.com/2010/01/28/kamaloka-js-0-9-0-released/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 21:04:24 +0000</pubDate>
		<dc:creator>J5</dc:creator>
				<category><![CDATA[AMQP]]></category>
		<category><![CDATA[Open Formats]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[messaging]]></category>

		<guid isPermaLink="false">http://www.j5live.com/?p=726</guid>
		<description><![CDATA[I am proud to announce the second release of the kamaloka-js AMQP bindings.  This release brings with it a high level API modeled after the new Sender/Receiver and addressing API&#8217;s being developed in the Qpid project.  It is intended to bridge the gap between the 0.10 protocol and the upcoming 1.0 protocol.  [...]]]></description>
			<content:encoded><![CDATA[<p>I am proud to announce the second release of the kamaloka-js AMQP bindings.  This release brings with it a high level API modeled after the new Sender/Receiver and addressing API&#8217;s being developed in the Qpid project.  It is intended to bridge the gap between the 0.10 protocol and the upcoming 1.0 protocol.  I have also simplified the code base and improved the code generator.  Because we are getting so close to implementing the complete 0.10 protocol spec, we have bumped the version to the 0.9.x series to indicate a redefined focus on stabilizing the current code base.  You will notice significant API changes from 0.1.0 to 0.9.0.  We hope to not have to make too many more changes during the current cycle of development and hope to get a 0.10 version out once we have completed coverage of the entire spec.</p>
<p>Some of the highlights of this release are:</p>
<ul>
<li>Rework API to conform to the new Sender/Reciever API and addressing format</li>
<li>Supports multi-channel/multi-frame parts of the spec</li>
<li>Uses js.io class infrastructure</li>
<li>Generated code now easier to read with decoders implemented in a class hierarchy</li>
<li>Rewritten dispatch layer &#8211; event code now works on the message layer instead of the frame layer even for low level dispatching</li>
<li>Much closer to implementing 100% of the 0.10 spec</li>
<li>Infrastructure in place to start working on the 1.0 spec</li>
</ul>
<p><strong> Give me the code</strong></p>
<ul>
<li><a href="https://fedorahosted.org/kamaloka-js/attachment/wiki/releases/kamaloka-js-0.9.0.tar.bz2?format=raw">tar.bz2 format</a> (<a href="https://fedorahosted.org/kamaloka-js/attachment/wiki/releases/kamaloka-js-0.9.0.tar.bz2.sha1?format=txt">sha1</a>)</li>
<li><a href="https://fedorahosted.org/kamaloka-js/attachment/wiki/releases/kamaloka-js-0.9.0.zip?format=raw">zip format</a> (<a href="https://fedorahosted.org/kamaloka-js/attachment/wiki/releases/kamaloka-js-0.9.0.zip.sha1?format=txt">sha1</a>)</li>
<li>Project homepage &#038; trac: <a href="https://fedorahosted.org/kamaloka-js/">https://fedorahosted.org/kamaloka-js/</a></li>
<li>Mailing list: <a href="https://fedorahosted.org/mailman/listinfo/kamaloka-js-devel">https://fedorahosted.org/mailman/listinfo/kamaloka-js-devel</a></li>
<li>git: git clone http://git.fedorahosted.org/git/kamaloka-js.git</li>
</ul>
<p><strong>About Kamaloka-js</strong></p>
<p>Kamaloka-js is an implementation of the <a href="http://amqp.org/">AMQP messaging protocol</a> in native JavaScript.  It is setup to be used with <a href="http://orbited.org">Orbited</a> but can be used with any library which produce TCPSockets in the browser similar to Orbited.  Kamaloka bindings are generated from qpid XML protocol description files.</p>
<div><a href='http://gnome.org/friends'><img border='0'src='http://www.gnome.org/friends/banners/friends-of-gnome.png' /></a></div>[read this post in: <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/28/kamaloka-js-0-9-0-released/&langpair=en%7Car">ar</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/28/kamaloka-js-0-9-0-released/&langpair=en%7Cde">de</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/28/kamaloka-js-0-9-0-released/&langpair=en%7Ces">es</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/28/kamaloka-js-0-9-0-released/&langpair=en%7Cfr">fr</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/28/kamaloka-js-0-9-0-released/&langpair=en%7Cit">it</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/28/kamaloka-js-0-9-0-released/&langpair=en%7Cja">ja</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/28/kamaloka-js-0-9-0-released/&langpair=en%7Cko">ko</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/28/kamaloka-js-0-9-0-released/&langpair=en%7Cpt">pt</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/28/kamaloka-js-0-9-0-released/&langpair=en%7Cru">ru</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/28/kamaloka-js-0-9-0-released/&langpair=en%7Czh-CN">zh-CN</a> ]]]></content:encoded>
			<wfw:commentRss>http://www.j5live.com/2010/01/28/kamaloka-js-0-9-0-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flattening the model</title>
		<link>http://www.j5live.com/2010/01/27/flattening-the-model/</link>
		<comments>http://www.j5live.com/2010/01/27/flattening-the-model/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 21:14:04 +0000</pubDate>
		<dc:creator>J5</dc:creator>
				<category><![CDATA[AMQP]]></category>
		<category><![CDATA[Open Formats]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[messaging]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[tubes]]></category>

		<guid isPermaLink="false">http://www.j5live.com/?p=714</guid>
		<description><![CDATA[In my quest for cleaner code in Kamaloka-js I have been working on simplifying the dispatch model.  AMQP has some interesting features built into it to facilitate real-time functionality along with message prioritization.  To accomplish this messages can be sent on different queues and tracks, and also be broken up into segments which can be [...]]]></description>
			<content:encoded><![CDATA[<p>In my quest for cleaner code in Kamaloka-js I have been working on simplifying the dispatch model.  AMQP has some interesting features built into it to facilitate real-time functionality along with message prioritization.  To accomplish this messages can be sent on different queues and tracks, and also be broken up into segments which can be further broken up into frames.</p>
<p><strong>Frames </strong></p>
<p>Frames are the basic building blocks of the AMQP data stream.  They contain complete headers that describe queue, track and segment that is currently being constructed.  The payload of a frame (the segment being built) can be broken up into arbitrary sized byte arrays which are then reassembled based on the channel and track they are sent on.  In this way applications with memory constraints can request that frames be no bigger than what the application can fit in memory.  A typical frame header looks something like:</p>
<p><code> </code></p>
<pre>{
  channel: 0,
  track:1,
  is_first_frame: 1,
  is_last_frame: 1,
  is_first_segment: 1,
  is_last_segment: 1
}</pre>
<p><strong>Segments</strong></p>
<p>Segments are like frames but instead of an arbitrary split on a data size, each segment is split on struct boundaries.  That is to say, when you receive a complete segment you can be sure that it can be fully parsed.  There are currently four segment types: A control segment, command segment, header segment and body segment.  Command messages are currently the only type that can contain a header and body segment. For instance, the transfer command is used to send messages to and from a queue.  It would contain header segments which could be used to route the entire message and it would contain a body segment which contains arbitrary data the user application cared about.  Each segment is broken up into at least one frame.  Multiple segments would never be sent in a single frame.</p>
<p><strong>Channel and Tracks</strong></p>
<p>A channel is just an integer that denotes related frames and segments.  One can think of each channel being a list of incoming frames which are ordered correctly.  Once the last frame in a channel is seen, the message is constructed and the channel is flushed and ready to receive a new message.  In this way, multiple messages can be received at the same time by utilizing different channels but only one message can be sent on a single channel at a time.</p>
<p>Tracks are an exception to the one message per channel rule.  There are two tracks in the current spec.  The control track (track 0) and the command track (track 1).  Controls preempt commands on a channel, so you can be in the middle of receiving frames on the command track and a control can come in on the control track and you must respond to that first.</p>
<p>This all sounds complicated but  you can just think of the channel/track combination as being one entry in an hash.  For instance frames coming into channel 0 and track 1 would be given the hash &#8220;0.1&#8243;:</p>
<p><code>message_channels["0.1"].add_frame(incoming)</code></p>
<p><strong>First pass &#8211; Frame dispatching</strong></p>
<p>At first it was easier to think of the frame and segment issues as different layers.  At the lowest layer I would decode and dispatch each frame and then pass it off to the segment layer once a complete segment had been decoded.  The segment layer would then collect the segments, relate them to each other, and then construct the full message.  The frame layer looked something like this:</p>
<div id="attachment_715" class="wp-caption aligncenter" style="width: 620px"><a href="http://www.j5live.com/wp-content/uploads/2010/01/frame_decoding_0.png"><img src="http://www.j5live.com/wp-content/uploads/2010/01/frame_decoding_0.png" alt="Flowchart showing the frame decoding layer of the kamaloka-js AMQP bindings" title="amqp frame decoding layer" width="610" height="819" class="size-full wp-image-715" /></a><p class="wp-caption-text">Flowchart showing the frame decoding layer of the kamaloka-js AMQP bindings</p></div>
<p>The dispatch would then pass it off to the segment decoder.</p>
<p>This became overly complicated because each segment had varying degrees of metadata and the body and header segments didn&#8217;t map to the message object very well.  I could have gone ahead and created a segment object but I wanted to simplify the code.</p>
<p><strong>Flattening the frame and segment layers</strong></p>
<p>As it turned out flattening the model only added a couple of more steps to the current frame layer.  Since frames and segments are just two different ways of breaking up a message for transfer over the wire, combining the two in the same layer made sense.  What I ended up with was this:</p>
<div id="attachment_717" class="wp-caption aligncenter" style="width: 631px"><a href="http://www.j5live.com/wp-content/uploads/2010/01/frame_decoding_1.png"><img src="http://www.j5live.com/wp-content/uploads/2010/01/frame_decoding_1.png" alt="Flowchart showing how the Kamaloka-js AMQP bindings decode frame and segments into a message" title="frame and segment decoding for the Kamaloka-js amqp bindings" width="621" height="971" class="size-full wp-image-717" /></a><p class="wp-caption-text">Flowchart showing how the Kamaloka-js AMQP bindings decode frame and segments into a message</p></div> 
<p>If you notice I now only create a new message if it is the first frame and first segment on a channel.  When I see it is the last frame I incrementally decode the segment but I only dispatch the message once the last segment is seen.  In the end, these minor adjustments allowed me to strip out a whole layer of redundant code.  It also simplified the low level event code as I used to have to manage callbacks for each segment in order to construct a message.  Now events only trigger once a full message is received and not  when each frame or segment is received.</p>
<div><a href='http://gnome.org/friends'><img border='0'src='http://www.gnome.org/friends/banners/monthly.png' /></a></div>[read this post in: <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/27/flattening-the-model/&langpair=en%7Car">ar</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/27/flattening-the-model/&langpair=en%7Cde">de</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/27/flattening-the-model/&langpair=en%7Ces">es</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/27/flattening-the-model/&langpair=en%7Cfr">fr</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/27/flattening-the-model/&langpair=en%7Cit">it</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/27/flattening-the-model/&langpair=en%7Cja">ja</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/27/flattening-the-model/&langpair=en%7Cko">ko</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/27/flattening-the-model/&langpair=en%7Cpt">pt</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/27/flattening-the-model/&langpair=en%7Cru">ru</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/27/flattening-the-model/&langpair=en%7Czh-CN">zh-CN</a> ]]]></content:encoded>
			<wfw:commentRss>http://www.j5live.com/2010/01/27/flattening-the-model/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting kamaloka-js ready for a new release</title>
		<link>http://www.j5live.com/2010/01/22/getting-kamaloka-js-ready-for-a-new-release/</link>
		<comments>http://www.j5live.com/2010/01/22/getting-kamaloka-js-ready-for-a-new-release/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 22:10:42 +0000</pubDate>
		<dc:creator>J5</dc:creator>
				<category><![CDATA[AMQP]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[messaging]]></category>

		<guid isPermaLink="false">http://www.j5live.com/?p=708</guid>
		<description><![CDATA[Those who are following AMQP know that work on version 1.0 of the protocol spec is happening right now.  Previous versions of the API were heavily dependent on the protocol itself but with 1.0 around the corner a new messaging API has come along to help bridge the gap between 0.10 and 1.0 for [...]]]></description>
			<content:encoded><![CDATA[<p>Those who are following AMQP know that work on version 1.0 of the protocol spec is happening right now.  Previous versions of the API were heavily dependent on the protocol itself but with 1.0 around the corner a new messaging API has come along to help bridge the gap between 0.10 and 1.0 for the most common use cases.</p>
<p>In kamaloka-js, the JavaScript AMQP bindings, I have been working on implementing this API along with cleaning up the codebase significantly.  Today I put the final touches on multi-part frame decoding as well as the dispatching code and hope to have a brand new release next week.  Here is a look at both the old and new API:</p>
<p><strong>Old kamaloka-js API as used in release 0.1.0</strong><br />
<code> </code></p>
<pre>&lt;script src="/static/Orbited.js"&gt;&lt;/script&gt;
&lt;script src="/javascript/amqp.protocol.js"&gt;&lt;/script&gt;
&lt;script src="/javascript/amqp.protocol_0_10.js"&gt;&lt;/script&gt;
&lt;script src="/javascript/qpid_amqp.js"&gt;&lt;/script&gt;

&lt;script&gt;
    amqp_conn = new amqp.Connection({host: 'localhost',
                                     port: 9000});
    amqp_conn.start();

    // You should have your server generate a UUID since browser methods
    // are unreliable at best
    session = amqp_conn.create_session('not_a_great_id' +
                                       (new Date().getTime() +
                                        Math.random()));
    var remote_queue =  settings.remote_queue + session.name;
    session.Queue('declare', {queue: remote_queue});

    var queue = session.create_local_queue({name: '0'});
    var output_cb = function(msg) {
        console.log(msg.header.delivery_properties.routing_key +
                    ' sent ' + msg.body);
    }

    queue.subscribe({exchange: 'amq.topic',
                                remote_queue: remote_queue,
                                binding_key: 'com.j5live.#',
                                callback: output_cb});
    queue.start();

    // test a multi segment transfer
    setTimeout(function(){
        session.Message('transfer',{accept_mode: 1,
                                    acquire_mode: 1,
                                    destination: 'amq.topic',
                                    _body: 'Test Transfer From Browser',
                                    _header: {delivery_properties:{
                                                 routing_key:'com.j5live.test'
                                              }
                                             }
                                    });
         }, 10000);
&lt;/script&gt;</pre>
<p><strong>New kamaloka-js API as used in the upcoming 0.9.1 release</strong><br />
<code> </code></p>
<pre>&lt;script src="/static/Orbited.js"&gt;&lt;/script&gt;
&lt;script src="/javascript/jsio/jsio.js"&gt;&lt;/script&gt;
&lt;script&gt;
   jsio("import qpid_amqp as amqp");
   jsio("from amqp.protocol import register");
   // load the 0.10 version of the protocol
   register("amqp.protocol_0_10");

    amqp_conn = new amqp.Connection({host: 'localhost',
                                     port: 9000,
                                     socket_cls: Orbited.TCPSocket
                                    });
    amqp_conn.start();

    // You should have your server generate a UUID since browser methods
    // are unreliable at best
    session = amqp_conn.session('not_a_great_id' + (new Date().getTime() + Math.random()));

    var output_cb = function() {
        msg = this.fetch();
        console.log(msg.get('_header').delivery_properties.routing_key +
                    ' sent ' + msg.get('_body'));
    }

    var receiver = session.receiver('amq.topic/com.j5live.*');
    receiver.onReady = output_cb;
    receiver.capacity(0xFFFFFFFF);

     // test a multi segment transfer
     var sender = session.sender('amq.topic/com.j5live.test');
     sender.send('Test Transfer From Browser');
&lt;/script&gt;</pre>
<p>The new API will offer a lot more control, better dispatching and a simplified interface.  Further integration with js.io is planned as well as full support for transactions and flow control.</p>
<div><a href='http://gnome.org/friends'><img border='0'src='http://www.gnome.org/friends/banners/support-gnome.png' /></a></div>[read this post in: <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/22/getting-kamaloka-js-ready-for-a-new-release/&langpair=en%7Car">ar</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/22/getting-kamaloka-js-ready-for-a-new-release/&langpair=en%7Cde">de</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/22/getting-kamaloka-js-ready-for-a-new-release/&langpair=en%7Ces">es</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/22/getting-kamaloka-js-ready-for-a-new-release/&langpair=en%7Cfr">fr</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/22/getting-kamaloka-js-ready-for-a-new-release/&langpair=en%7Cit">it</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/22/getting-kamaloka-js-ready-for-a-new-release/&langpair=en%7Cja">ja</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/22/getting-kamaloka-js-ready-for-a-new-release/&langpair=en%7Cko">ko</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/22/getting-kamaloka-js-ready-for-a-new-release/&langpair=en%7Cpt">pt</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/22/getting-kamaloka-js-ready-for-a-new-release/&langpair=en%7Cru">ru</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/22/getting-kamaloka-js-ready-for-a-new-release/&langpair=en%7Czh-CN">zh-CN</a> ]]]></content:encoded>
			<wfw:commentRss>http://www.j5live.com/2010/01/22/getting-kamaloka-js-ready-for-a-new-release/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>It&#8217;s all about the API</title>
		<link>http://www.j5live.com/2010/01/13/its-all-about-the-api/</link>
		<comments>http://www.j5live.com/2010/01/13/its-all-about-the-api/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 15:28:16 +0000</pubDate>
		<dc:creator>J5</dc:creator>
				<category><![CDATA[AMQP]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[messaging]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://www.j5live.com/?p=706</guid>
		<description><![CDATA[If there is one thing I learned when working on D-Bus is that if you build a decent API, people will use it.  Right now I am working on Kamaloka-js &#8211; JavaScript bindings for building JavaScript native AMQP clients.  As AMQP starts moving towards 1.0 a new high level API, based loosely on [...]]]></description>
			<content:encoded><![CDATA[<p>If there is one thing I learned when working on D-Bus is that if you build a decent API, people will use it.  Right now I am working on <a href="https://fedorahosted.org/kamaloka-js/">Kamaloka-js</a> &#8211; JavaScript bindings for building JavaScript native <a href="http://amqp.org">AMQP</a> clients.  As AMQP starts moving towards 1.0 a new high level API, based loosely on <a href="http://java.sun.com/products/jms/">JMS</a>, is emerging to bridge the gap between 0.10 and 1.0.  Previously with AMQP you pretty much worked with patterns on the protocol level which meant when the new specification came out you would pretty much have to rewrite to the new API.  The new messaging based API seeks to decouple the protocol from the API for the most common use cases.</p>
<p>As I implement the JavaScript API there are some decisions I must make regarding how closely I stick to this new API as implemented in other bindings.  Lets look at how the new API receives messages in Python:</p>
<p><code>
<pre>
...

conn = Connection.open(url.host, url.port)
ssn = conn.session()
rcv = ssn.receiver('amq.topic/org.j5live.demo')

while True:
    try:
        msg = rcv.fetch(timeout=timeout)
        process_message(msg)
        ssn.acknowledge()
    except Empty:
        break
    except ReceiveError, e:
        print e
        break
</pre>
<p></code></p>
<p>If you notice the API is very much mainloop based.  With every loop we fetch a message off the local queue.  If there are no messages, fetch works very similar to the way poll does for sockets &#8211; sleep until woken up by network traffic or a timeout.  The issue is if we did this in JavaScript we would block the UI and event propagation (newer browsers do expose threading but that feature can not be relied upon in all browsers).  If you have ever mistakenly created an infinite loop in JavaScript you will understand how bad this is.</p>
<p>There are two options I see here, keep the fetch method and require the programmer to use timers to read from the local queue or, as currently implemented in my own high level API, attach callbacks to receivers.</p>
<p>The timer/fetch method has a couple of advantages.  First it more closely resembles the API of the other bindings.  Also it allows tighter management of the local queue.  Since each time the timer is triggered we can determine how many messages we wish to process we can give some performance guarantees based on how long it takes to run operations in response to the messages.  In this way we can dictate when a message is processed and tweak applications to run smoother.  This comes at the price of added complexity which could be even more of a detriment to performance when in the wrong hands.</p>
<p>The callback API has the advantage of being more in line to what JavaScript developers expect.  JavaScript is highly event/callback based with onFoo handlers everywhere.  We currently work this way.  When a message is decoded from the socket we dispatch it immediately to any callback registered to listen for it.  The issue here is an application can get hammered with messages with no way to defer processing (except by implementing their own processing queue).  </p>
<p>Why not implement both?  This is an option but that doesn&#8217;t mean it is a good option.  Multiple ways of doing the same thing often confuse new users.  Understanding the differences between the API&#8217;s and the nuances between usecases are often more complex than either API alone.  This could be daunting to a new user.  </p>
<p>The trick is to make the API&#8217;s build on one another.  For instance I could add an onReady handler which then allows the user to use the fetch API to grab any messages inside the handler.  We would then set up an internal timer if the queue was not completely drained.  This would require users be familiar with the fetch API without having to set up their own timer.  If they wanted to have more control, they could set up their own timers instead of using the handler.</p>
<p>Any JavaScript developers have any insight as to the best way forward?</p>
<div><a href='http://gnome.org/friends'><img border='0'src='http://www.gnome.org/friends/banners/support-gnome.png' /></a></div>[read this post in: <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/13/its-all-about-the-api/&langpair=en%7Car">ar</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/13/its-all-about-the-api/&langpair=en%7Cde">de</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/13/its-all-about-the-api/&langpair=en%7Ces">es</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/13/its-all-about-the-api/&langpair=en%7Cfr">fr</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/13/its-all-about-the-api/&langpair=en%7Cit">it</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/13/its-all-about-the-api/&langpair=en%7Cja">ja</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/13/its-all-about-the-api/&langpair=en%7Cko">ko</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/13/its-all-about-the-api/&langpair=en%7Cpt">pt</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/13/its-all-about-the-api/&langpair=en%7Cru">ru</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2010/01/13/its-all-about-the-api/&langpair=en%7Czh-CN">zh-CN</a> ]]]></content:encoded>
			<wfw:commentRss>http://www.j5live.com/2010/01/13/its-all-about-the-api/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Public vs. Private Forums</title>
		<link>http://www.j5live.com/2009/12/15/public-vs-private-forums/</link>
		<comments>http://www.j5live.com/2009/12/15/public-vs-private-forums/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 03:22:23 +0000</pubDate>
		<dc:creator>J5</dc:creator>
				<category><![CDATA[Gnome]]></category>
		<category><![CDATA[Politics]]></category>
		<category><![CDATA[community]]></category>

		<guid isPermaLink="false">http://www.j5live.com/?p=703</guid>
		<description><![CDATA[Many people feel that in the open source/free software community openness is about letting everyone become privy to any comment/decision/situation that may happen within a project.  For the most part this is the goal we strive for but at the end of the day there are things that should remain private until they become [...]]]></description>
			<content:encoded><![CDATA[<p>Many people feel that in the open source/free software community openness is about letting everyone become privy to any comment/decision/situation that may happen within a project.  For the most part this is the goal we strive for but at the end of the day there are things that should remain private until they become real concerns for the public at large.  </p>
<p>The issue is we have diverse communities that rarely agree 100% even among the best of friends.  It becomes counter productive when these disagreements become the source of misinformed news articles without general consensus allowed to form within the community itself.  </p>
<p>Forget the community for a minute.  As individuals we often need to think before we speak in order to make sure we say exactly what we meant to say.  The same goes for diverse groups.  They must work out the directions they go in in an atmosphere that is free from the chilling effect of having to watch what they say because their intentions may be misinterpreted.</p>
<p>There is also the point of being able to freely express an opinion without fear of outward reprisals.  There is a reason Democracy subsists on the concept of private ballots.  It allows even the most unpopular opinions to at least be registered while individuals can be sure they won&#8217;t be ostracized.  The openness comes from being free to dispute results, protest and influence them through public action, not from knowing the individual&#8217;s specific vote.</p>
<p>We strive to be inclusive with everyone who has a stake in what we do but when it becomes counter productive one needs to redress the situation so that we continue to move forward.  It does no one any good to dwell on speculation from quarters which are ill informed and just looking for traffic grabbing sensationalism.  It is perfectly fine to exclude them from discussions they have no stake in and let them feed on the results, judging the community based on its final actions and consensus.</p>
<div><a href='http://gnome.org/friends'><img border='0'src='http://www.gnome.org/friends/banners/friends-of-gnome.png' /></a></div>[read this post in: <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/12/15/public-vs-private-forums/&langpair=en%7Car">ar</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/12/15/public-vs-private-forums/&langpair=en%7Cde">de</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/12/15/public-vs-private-forums/&langpair=en%7Ces">es</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/12/15/public-vs-private-forums/&langpair=en%7Cfr">fr</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/12/15/public-vs-private-forums/&langpair=en%7Cit">it</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/12/15/public-vs-private-forums/&langpair=en%7Cja">ja</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/12/15/public-vs-private-forums/&langpair=en%7Cko">ko</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/12/15/public-vs-private-forums/&langpair=en%7Cpt">pt</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/12/15/public-vs-private-forums/&langpair=en%7Cru">ru</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/12/15/public-vs-private-forums/&langpair=en%7Czh-CN">zh-CN</a> ]]]></content:encoded>
			<wfw:commentRss>http://www.j5live.com/2009/12/15/public-vs-private-forums/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Public Service Announcement &#8211; FUDCon and Passports</title>
		<link>http://www.j5live.com/2009/12/02/public-service-announcement-fudcon-and-passports/</link>
		<comments>http://www.j5live.com/2009/12/02/public-service-announcement-fudcon-and-passports/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 01:35:39 +0000</pubDate>
		<dc:creator>J5</dc:creator>
				<category><![CDATA[Fedora]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[travel]]></category>

		<guid isPermaLink="false">http://www.j5live.com/?p=701</guid>
		<description><![CDATA[For those who are going to FUDCon on the FUDBus, expecially those flying to Boston first, remember to bring your Passport.  Luckly these days they check both ways but at one point you could get into Canada without a passport but would be screwed on the way back.  In any case I thought I [...]]]></description>
			<content:encoded><![CDATA[<p>For those who are going to FUDCon on the FUDBus, expecially those flying to Boston first, remember to bring your Passport.  Luckly these days they check both ways but at one point you could get into Canada without a passport but would be screwed on the way back.  In any case I thought I would remind people as I had run into a problem where I didn&#8217;t check for my passport until a week before my sisters wedding in Italy.  Sure enough I couldn&#8217;t find it and ended up having to get it done the night before I left.  Not to mention the years it took off my life trying to figure out the best way to tell my twin sister I might not be able to make it to her wedding <img src='http://www.j5live.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   See you all at FUDCon!!! </p>
<div><a href='http://gnome.org/friends'><img border='0'src='http://www.gnome.org/friends/banners/friends-of-gnome.png' /></a></div>[read this post in: <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/12/02/public-service-announcement-fudcon-and-passports/&langpair=en%7Car">ar</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/12/02/public-service-announcement-fudcon-and-passports/&langpair=en%7Cde">de</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/12/02/public-service-announcement-fudcon-and-passports/&langpair=en%7Ces">es</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/12/02/public-service-announcement-fudcon-and-passports/&langpair=en%7Cfr">fr</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/12/02/public-service-announcement-fudcon-and-passports/&langpair=en%7Cit">it</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/12/02/public-service-announcement-fudcon-and-passports/&langpair=en%7Cja">ja</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/12/02/public-service-announcement-fudcon-and-passports/&langpair=en%7Cko">ko</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/12/02/public-service-announcement-fudcon-and-passports/&langpair=en%7Cpt">pt</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/12/02/public-service-announcement-fudcon-and-passports/&langpair=en%7Cru">ru</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/12/02/public-service-announcement-fudcon-and-passports/&langpair=en%7Czh-CN">zh-CN</a> ]]]></content:encoded>
			<wfw:commentRss>http://www.j5live.com/2009/12/02/public-service-announcement-fudcon-and-passports/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pre FUDCon Crash Space</title>
		<link>http://www.j5live.com/2009/11/24/pre-fudcon-crash-space/</link>
		<comments>http://www.j5live.com/2009/11/24/pre-fudcon-crash-space/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 14:45:16 +0000</pubDate>
		<dc:creator>J5</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[FUDCon]]></category>

		<guid isPermaLink="false">http://www.j5live.com/2009/11/24/pre-fudcon-crash-space/</guid>
		<description><![CDATA[For those who are flying into Boston and then taking the FUDBus up to FUDCon I have crash space literally down the block from where the FUDBus is picking us up.  I have two couches and an Areo Bed for anyone who needs it.  Get in touch with me on IRC. 
[read this [...]]]></description>
			<content:encoded><![CDATA[<p>For those who are flying into Boston and then taking the FUDBus up to FUDCon I have crash space literally down the block from where the FUDBus is picking us up.  I have two couches and an Areo Bed for anyone who needs it.  Get in touch with me on IRC. </p>
<div><a href='http://gnome.org/friends'><img border='0'src='http://www.gnome.org/friends/banners/monthly.png' /></a></div>[read this post in: <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/24/pre-fudcon-crash-space/&langpair=en%7Car">ar</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/24/pre-fudcon-crash-space/&langpair=en%7Cde">de</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/24/pre-fudcon-crash-space/&langpair=en%7Ces">es</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/24/pre-fudcon-crash-space/&langpair=en%7Cfr">fr</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/24/pre-fudcon-crash-space/&langpair=en%7Cit">it</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/24/pre-fudcon-crash-space/&langpair=en%7Cja">ja</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/24/pre-fudcon-crash-space/&langpair=en%7Cko">ko</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/24/pre-fudcon-crash-space/&langpair=en%7Cpt">pt</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/24/pre-fudcon-crash-space/&langpair=en%7Cru">ru</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/24/pre-fudcon-crash-space/&langpair=en%7Czh-CN">zh-CN</a> ]]]></content:encoded>
			<wfw:commentRss>http://www.j5live.com/2009/11/24/pre-fudcon-crash-space/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>FUDCon, the AMQP story</title>
		<link>http://www.j5live.com/2009/11/23/fudcon-the-amqp-story/</link>
		<comments>http://www.j5live.com/2009/11/23/fudcon-the-amqp-story/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 23:41:12 +0000</pubDate>
		<dc:creator>J5</dc:creator>
				<category><![CDATA[AMQP]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[messaging]]></category>
		<category><![CDATA[tubes]]></category>

		<guid isPermaLink="false">http://www.j5live.com/?p=691</guid>
		<description><![CDATA[With FUDCon being only two weeks away, I&#8217;ve been polishing up my presentation and looking into what is in store for the future of Fedora&#8217;s Infrastructure.  My main focus has been adding &#8220;push&#8221; capabilities throughout our infrastructure via the use of the AMQP protocol and qpid servers.
So why do we care about push messaging?
One [...]]]></description>
			<content:encoded><![CDATA[<p>With <a href="https://fedoraproject.org/wiki/FUDCon:Toronto_2009">FUDCon</a> being only two weeks away, I&#8217;ve been polishing up my presentation and looking into what is in store for the future of Fedora&#8217;s Infrastructure.  My main focus has been adding &#8220;push&#8221; capabilities throughout our infrastructure via the use of the <a href="http://amqp.org">AMQP protocol</a> and <a href="http://qpid.apache.org/">qpid</a> servers.</p>
<p><strong>So why do we care about push messaging?</strong></p>
<p>One can think of messaging as a conversation between two people.  Poll messaging goes something like this:</p>
<p><a href="http://www.j5live.com/wp-content/uploads/2009/11/push_vs_poll_comic.png"><img class="aligncenter size-full wp-image-695" title="Poll Messaging" src="http://www.j5live.com/wp-content/uploads/2009/11/push_vs_poll_comic_poll.png" alt="Poll Messaging" width="718" height="195" /></a></p>
<p>Push on the other hand is a bit less chatty:</p>
<p><a href="http://www.j5live.com/wp-content/uploads/2009/11/push_vs_poll_comic.png"><img class="aligncenter size-full wp-image-694" title="Push Messaging" src="http://www.j5live.com/wp-content/uploads/2009/11/push_vs_poll_comic_push.png" alt="Push Messaging" width="720" height="196" /></a></p>
<p>By eliminating the need to poll to know when an event has happened within Fedora&#8217;s Infrastucture, and making it easy for services to push out events in an easy fire and forget manner, we open up the door to a number of interesting possibilities.  For instance, instead of implementing mail notification functionality in every service we simply create a mail notification service that listens for events and sends e-mails to people who what them.  Do you want to get a notification on your desktop when your build is done instead?  This makes it possible to provide that functionality without bogging down the Koji build service.</p>
<p>Human consumable notifications isn&#8217;t the only advantage of adding push messaging to our infrastructure.  Because the data is first formatted for services to consume, notifications can be used for things like automation and synchronization.  For instance someone could write a script that listens for new git checkins at fedorahosted.org and tries to package it into a private repo for personal testing.</p>
<p><strong>What do we need to discuss at FUDCon?</strong></p>
<p>Though this change is minimally invasive and you can ignore it if you don&#8217;t need to work with notifications, it is never the less a large undertaking.  Some of the things we need to discuss are:</p>
<ul>
<li>Usecases &#8211; where can we benefit by adding notifications?  How do we envision the notifications will be consumed?</li>
<li>Payload format &#8211; what are the pros and cons of the different ways we can encode and decode data</li>
<li>Standardization &#8211; even though we have a routing protocol we still need to standardize on the type of data to expect</li>
<li>Libraries &#8211; we need to make it dirt easy for infrastructure developers to add notifications to their service</li>
<li>Performance and security concerns &#8211; AMQP is pretty complex so we will need to make sure all of our bases are covered when deploying the QPID servers</li>
</ul>
<p><strong>AMQP Sessions at FUDCon</strong></p>
<p>There are a couple of talks planned and a hackfest.  Come to the talks to get a deeper understanding of AMQP and how we envision using it within Fedora and then attend the hackfest to help us map out the future of the Fedora Messaging Infrastructure.</p>
<p>Saturday:</p>
<ul>
<li>AMQP Messaging for Fedora Developers &#8211; come to my session to find out the basics of AMQP messaging and how it is relevant to Fedora&#8217;s infrastructure</li>
<li>AMQP/Qpid on Fedora &#8211; The definitive guide &#8211; get a more in-depth view of AMQP in Rajith Attapattu session.  He will show you how to setup and configure the Qpid server on Fedora, use the client APIs, and where to go to find help when using AMQP.</li>
</ul>
<p>Sunday and/or Monday:</p>
<ul>
<li>Get on the (Message) BUS Hackfest! &#8211; come to Jesse Keating&#8217;s hackfest to work out details and hack on the messaging infrastructure.</li>
</ul>
<div><a href='http://gnome.org/friends'><img border='0'src='http://www.gnome.org/friends/banners/monthly.png' /></a></div>[read this post in: <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/23/fudcon-the-amqp-story/&langpair=en%7Car">ar</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/23/fudcon-the-amqp-story/&langpair=en%7Cde">de</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/23/fudcon-the-amqp-story/&langpair=en%7Ces">es</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/23/fudcon-the-amqp-story/&langpair=en%7Cfr">fr</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/23/fudcon-the-amqp-story/&langpair=en%7Cit">it</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/23/fudcon-the-amqp-story/&langpair=en%7Cja">ja</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/23/fudcon-the-amqp-story/&langpair=en%7Cko">ko</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/23/fudcon-the-amqp-story/&langpair=en%7Cpt">pt</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/23/fudcon-the-amqp-story/&langpair=en%7Cru">ru</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/23/fudcon-the-amqp-story/&langpair=en%7Czh-CN">zh-CN</a> ]]]></content:encoded>
			<wfw:commentRss>http://www.j5live.com/2009/11/23/fudcon-the-amqp-story/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I would just like to say PiTiVi rocks</title>
		<link>http://www.j5live.com/2009/11/20/i-would-just-like-to-say-pitivi-rocks/</link>
		<comments>http://www.j5live.com/2009/11/20/i-would-just-like-to-say-pitivi-rocks/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 17:10:40 +0000</pubDate>
		<dc:creator>J5</dc:creator>
				<category><![CDATA[community]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.j5live.com/2009/11/20/i-would-just-like-to-say-pitivi-rocks/</guid>
		<description><![CDATA[Having followed its development for a long time now and used other video editing software I can say that PiTiVi is an awesome app that is only going to get better.  Sure it isn&#8217;t perfect yet but that is software development for you.  It takes time to get all the features in and [...]]]></description>
			<content:encoded><![CDATA[<p>Having followed its development for a long time now and used other video editing software I can say that PiTiVi is an awesome app that is only going to get better.  Sure it isn&#8217;t perfect yet but that is software development for you.  It takes time to get all the features in and make them solid.  </p>
<p>One of the great parts of Open Source Software is you get to see it develop and grow.  It is also one of the biggest misunderstood aspects of such software.  In a world where people are gripped by the next best thing &#8211; a collective psychosis of product ADD &#8211;  where patience is no longer a virtue but an outdated notion of an age long gone, evolution is about as exciting as watching paint dry.  Just a reminder that even products that seem to just appear overnight, in reality had long periods of closed development to receive polish (and even then they aren&#8217;t always great but for some reason people tend to forgive shortcomings in something they bought as opposed to something they got for free).</p>
<p>Knowing the drive behind the developers working on PiTiVi I am confident that in time PiTiVi will become one of the prime examples of FOSS development.  For now it is useful enough for some my basic editing needs and every time I try a new version it just gets that much more useful.  Keep up the hard work!!!</p>
<div><a href='http://gnome.org/friends'><img border='0'src='http://www.gnome.org/friends/banners/monthly.png' /></a></div>[read this post in: <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/20/i-would-just-like-to-say-pitivi-rocks/&langpair=en%7Car">ar</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/20/i-would-just-like-to-say-pitivi-rocks/&langpair=en%7Cde">de</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/20/i-would-just-like-to-say-pitivi-rocks/&langpair=en%7Ces">es</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/20/i-would-just-like-to-say-pitivi-rocks/&langpair=en%7Cfr">fr</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/20/i-would-just-like-to-say-pitivi-rocks/&langpair=en%7Cit">it</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/20/i-would-just-like-to-say-pitivi-rocks/&langpair=en%7Cja">ja</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/20/i-would-just-like-to-say-pitivi-rocks/&langpair=en%7Cko">ko</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/20/i-would-just-like-to-say-pitivi-rocks/&langpair=en%7Cpt">pt</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/20/i-would-just-like-to-say-pitivi-rocks/&langpair=en%7Cru">ru</a> <a href="http://translate.google.com/translate?u=http://www.j5live.com/2009/11/20/i-would-just-like-to-say-pitivi-rocks/&langpair=en%7Czh-CN">zh-CN</a> ]]]></content:encoded>
			<wfw:commentRss>http://www.j5live.com/2009/11/20/i-would-just-like-to-say-pitivi-rocks/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
	</channel>
</rss>
