<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Christoph Burgdorf's Blog</title>
	<atom:link href="http://cburgdorf.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://cburgdorf.wordpress.com</link>
	<description>just my random thoughts about free software, politics, the world and everything in between ;-)</description>
	<lastBuildDate>Sat, 06 Aug 2011 09:33:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='cburgdorf.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Christoph Burgdorf's Blog</title>
		<link>http://cburgdorf.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://cburgdorf.wordpress.com/osd.xml" title="Christoph Burgdorf&#039;s Blog" />
	<atom:link rel='hub' href='http://cburgdorf.wordpress.com/?pushpress=hub'/>
		<item>
		<title>From jQuery Deferred to RxJS ForkJoin</title>
		<link>http://cburgdorf.wordpress.com/2011/03/24/117/</link>
		<comments>http://cburgdorf.wordpress.com/2011/03/24/117/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 20:09:02 +0000</pubDate>
		<dc:creator>cburgdorf</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[RxJS]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[flow based programming]]></category>
		<category><![CDATA[functional programming]]></category>
		<category><![CDATA[reactive extensions]]></category>
		<category><![CDATA[reactive programming]]></category>

		<guid isPermaLink="false">http://cburgdorf.wordpress.com/?p=117</guid>
		<description><![CDATA[In a recent posting I blogged about how to process some code after several asynchronous operations have finished and how to access each return value of those operations no matter in which order those would finish. To make this happen I used the new jQuery Deferred API. While this is a great way, I would [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cburgdorf.wordpress.com&amp;blog=5781222&amp;post=117&amp;subd=cburgdorf&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://cburgdorf.wordpress.com/2011/02/22/accessing-return-values-from-multiple-deferreds/">In a recent posting I blogged about how to process some code after several asynchronous operations have finished and how to access each return value of those operations no matter in which order those would finish</a>.</p>
<p>To make this happen I used the new jQuery Deferred API. While this is a great way, I would also like to show you that there are other (even more advanced) ways to do so.</p>
<p>One of my heart warming interests is to dig deep into reactive functional programming and therefore digging into RxJS.</p>
<p>So let’s see how we can rewrite our example to make use of RxJS!</p>
<p><pre class="brush: plain;">
$(document).ready(function(){

    var example = function (){
        var deferred = new Rx.AsyncSubject();

        setTimeout(function(){
            deferred.OnNext(5);
            deferred.OnCompleted();
        }, 1000); //Will finish first

        return deferred;
    };

    var example2 = function (){
        var deferred = new Rx.AsyncSubject();
        setTimeout(function(){
            deferred.OnNext(10);
            deferred.OnCompleted();

        }, 2000); //Will finish second

        return deferred;
    };

    Rx.Observable
      .ForkJoin(Example(), Example2())
      .Subscribe(function(args){
            console.log(&quot;Example1 (Should be 5): &quot; + args[0]);
            console.log(&quot;Example2 (Should be 10): &quot; + args[1]);
          });
    });
</pre></p>
<p>As you can see, nothing ground shaking happened to our code. Things are just named slightly different.</p>
<p>Did we gain anything? Yes, we did! ForkJoin not only combines two observable streames and waits until both have finished, but in fact returns a new observable stream. Having an observable stream as an first class object is a major benefit! For example, let’s say we are only interested if first stream matches a certain condition. We can just filter out the undesired values using the Where operator.</p>
<p><pre class="brush: plain;">
    Rx.Observable
      .ForkJoin(Example(), Example2())
      .Where(function(x){ return x[0] == 5; })
      .Subscribe(function(args){
            console.log(&quot;Example1 (Should be 5): &quot; + args[0]);
            console.log(&quot;Example2 (Should be 10): &quot; + args[1]);
          });
    });
</pre></p>
<p>And once again, the Where operator returns a new observable stream. This is great in terms of composability. You can easily just hand this new observable stream over to another component which will react on a stream of data that exactly matches the conditions the component was intended for.</p>
<p>Having events as first class citizen which you can compose and pass on, is what makes Rx so great.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cburgdorf.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cburgdorf.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cburgdorf.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cburgdorf.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cburgdorf.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cburgdorf.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cburgdorf.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cburgdorf.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cburgdorf.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cburgdorf.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cburgdorf.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cburgdorf.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cburgdorf.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cburgdorf.wordpress.com/117/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cburgdorf.wordpress.com&amp;blog=5781222&amp;post=117&amp;subd=cburgdorf&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cburgdorf.wordpress.com/2011/03/24/117/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1bb69b75c5e73a7c9f4ebbc4835d622f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cburgdorf</media:title>
		</media:content>
	</item>
		<item>
		<title>Clean up your code with RxJS!</title>
		<link>http://cburgdorf.wordpress.com/2011/03/02/cleaning-up-with-the-help-of-rxjs/</link>
		<comments>http://cburgdorf.wordpress.com/2011/03/02/cleaning-up-with-the-help-of-rxjs/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 20:05:06 +0000</pubDate>
		<dc:creator>cburgdorf</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[RxJS]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[async]]></category>

		<guid isPermaLink="false">http://cburgdorf.wordpress.com/?p=102</guid>
		<description><![CDATA[Today I would like to talk a bit about the Reactive Extensions for JavaScript (aka LinqToEvents).  From when I heard the first rumors about it, I had a very keen eye on the project because I just felt there was something fascinating about it. Unfortunatly, I didn’t really “got it right” and never found a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cburgdorf.wordpress.com&amp;blog=5781222&amp;post=102&amp;subd=cburgdorf&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Today I would like to talk a bit about the Reactive Extensions for JavaScript (aka LinqToEvents).  From when I heard the first rumors about it, I had a very keen eye on the project because I just felt there was something fascinating about it.</p>
<p>Unfortunatly, I didn’t really “got it right” and never found a real use case to test things out. But with all this noise around the new jQuery deferred API I recognized some common ground between those two technics and started digging into RxJS/Rx .NET again.</p>
<p>Finally, I was able to scratch a bit on the surface which I would like to share with you <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>So let’s say you have built a web app with a search textbox that fires up an ajax request while the user is typing. This is quite common and I’m sure you have done that before.</p>
<p>You don’t want to fire up the ajax call on every keystroke but only when the user stopped typing instead.  So, you just encountered the first brainer. What does it mean “when the user stopped typing”?</p>
<p>There is no native way to do something like that:</p>
<p><pre class="brush: plain;">
$(“#searchinput”).bind(“StoppedTyping”, function() {console.log(“stopped typing”)};
</pre></p>
<p>What you actually mean is, “I want this code only to execute when 500 milliseconds have passed after the last occurrence of the ‘keyup’ event”.</p>
<p>So, maybe u managed this by saving a timestamp inside an outter var. Or you were lucky enough to come up with a solution which doesn&#8217;t  rely on an outter var at all.</p>
<p>This is the Rx way to acomplish what I described earlier. How does that look for you? Pretty straight forward, isn&#8217;t it?</p>
<p><pre class="brush: plain;">
$(document).ready(function(){
    $('#myInput')
        .toObservable(&quot;keyup&quot;)
        .Select(function(){ return $('#myInput').val(); })
        .Throttle(500)
        .Subscribe(function(text){ console.log(&quot;fire up ajax call&quot;); });
});
</pre></p>
<p>There is no outter var, therefore no side effect. I&#8217;m not going much into the details because there are <a href="http://rxwiki.wikidot.com/101samples">better resources to look this up.</a></p>
<p>So let&#8217;s sum things up so far. While you type, nothing fires. The call will fire after you finished typing. But what if you finished typing a word, the call fires, you type again but end up with the same word for which you just fired the ajax call, the moment before. Let&#8217;s say we want avoid such a needless call. It&#8217;s trivial with RxJS!</p>
<p><pre class="brush: plain;">
$(document).ready(function(){
    $('#myInput')
        .toObservable(&quot;keyup&quot;)
        .Select(function(){ return $('#myInput').val(); })
        .Throttle(500)
        .DistinctUntilChanged()
        .Subscribe(function(text){ console.log(&quot;fire up ajax call&quot;); });
});
</pre></p>
<p>Easy, isn&#8217;t it?</p>
<p>Or how about avoiding calls, for words with less than three letters?</p>
<p><pre class="brush: plain;">
$(document).ready(function(){
    $('#myInput')
        .toObservable(&quot;keyup&quot;)
        .Select(function(){ return $('#myInput').val(); })
        .SkipWhile(function(text){ return text.length &lt; 3; })
        .Throttle(500)
        .DistinctUntilChanged()
        .Subscribe(function(text){ console.log(&quot;fire up ajax call&quot;); });
});
</pre></p>
<p>This is just scratching the surface of what can be down with RxJS. I&#8217;m just starting my RxJS journey&#8230;but I like what I have seen so far!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cburgdorf.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cburgdorf.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cburgdorf.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cburgdorf.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cburgdorf.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cburgdorf.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cburgdorf.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cburgdorf.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cburgdorf.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cburgdorf.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cburgdorf.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cburgdorf.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cburgdorf.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cburgdorf.wordpress.com/102/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cburgdorf.wordpress.com&amp;blog=5781222&amp;post=102&amp;subd=cburgdorf&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cburgdorf.wordpress.com/2011/03/02/cleaning-up-with-the-help-of-rxjs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1bb69b75c5e73a7c9f4ebbc4835d622f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cburgdorf</media:title>
		</media:content>
	</item>
		<item>
		<title>Accessing return values from multiple Deferreds</title>
		<link>http://cburgdorf.wordpress.com/2011/02/22/accessing-return-values-from-multiple-deferreds/</link>
		<comments>http://cburgdorf.wordpress.com/2011/02/22/accessing-return-values-from-multiple-deferreds/#comments</comments>
		<pubDate>Tue, 22 Feb 2011 20:55:49 +0000</pubDate>
		<dc:creator>cburgdorf</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[async]]></category>
		<category><![CDATA[Deferreds]]></category>

		<guid isPermaLink="false">http://cburgdorf.wordpress.com/?p=88</guid>
		<description><![CDATA[It’s been a while since I wrote my last posting. As I feel that I am constantly in a hurry I rarely manage to find some time *sigh*. However, too many interesting stuff which is worth blogging keeps flooding our beloved tech world! One of those things is the new Deferred object in jQuery 1.5. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cburgdorf.wordpress.com&amp;blog=5781222&amp;post=88&amp;subd=cburgdorf&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It’s been a while since I wrote my last posting. As I feel that I am constantly in a hurry I rarely manage to find some time *sigh*.</p>
<p>However, too many interesting stuff which is worth blogging keeps flooding our beloved tech world! One of those things is the new Deferred object in jQuery 1.5.</p>
<p>I won&#8217;t go into every detail about what Deferreds are for because Eric Hynds already <a href="http://www.erichynds.com/jquery/using-deferreds-in-jquery/" target="_blank">wrote an awesome article about it</a>.</p>
<p>Just to give an example: Some month ago, <a title="I asked on stackoverflow" href="http://stackoverflow.com/questions/3296974/trigger-event-after-several-ajax-calls-succeeded" target="_blank">I asked on stackoverflow</a> which was the best way to spin off several async calls and do something when all those async calls have completed. Well, that’s one of the things that Deferreds can solve.</p>
<p>Today I want to show you how to deal with that and also how to deal with it if each call returns a value which you need to have access to afterwards.</p>
<p>Let’s look at this code:</p>
<p><pre class="brush: plain;">
$(document).ready(function(){

    var example = function (){
        var deferred = $.Deferred();

        setTimeout(function(){
            deferred.resolve(5);
        }, 1000); //Will finish first

        return deferred.promise();
    };

    var example2 = function (){
        var deferred = $.Deferred();
        setTimeout(function(){
            deferred.resolve(10);
        }, 2000); //Will finish second

        return deferred.promise();
    };

    $.when(example(), example2())
        .then(function(arg1, arg2){
            console.log(&quot;Example1 (Should be 5): &quot; + arg1);
            console.log(&quot;Example2 (Should be 10): &quot; + arg2);
          });
    });
</pre></p>
<p>jsFiddle: <a href="http://jsfiddle.net/cburgdorf/M4JKR/">http://jsfiddle.net/cburgdorf/M4JKR/</a></p>
<p>We created two Deferred objects (Example1, Example2) which both resolve with an return value. In the callback, which is called on $.then we have access to those return values. It might be obvious to you (but wasn&#8217;t to me) that those parameters will be sorted in the order in which the Deferreds were registered to $.when. That means, no matter in which order those async operations complete, you will be save to access the values in the expected order.</p>
<p>Here comes the proof with the operations turned around:</p>
<p><pre class="brush: plain;">
$(document).ready(function(){

    var example = function (){
        var deferred = $.Deferred();

        setTimeout(function(){
            deferred.resolve(5);
        }, 2000); //Will finish second

        return deferred.promise();
    };

    var example2 = function (){
        var deferred = $.Deferred();
        setTimeout(function(){
            deferred.resolve(10);
        }, 1000); //Will finish first

        return deferred.promise();
    };

    $.when(example(), example2())
        .then(function(arg1, arg2){
            console.log(&quot;Example1 (Should be 5): &quot; + arg1);
            console.log(&quot;Example2 (Should be 10): &quot; + arg2);
          });
    });
</pre></p>
<p>jsFiddle: <a href="http://jsfiddle.net/cburgdorf/vmLfF/">http://jsfiddle.net/cburgdorf/vmLfF/</a></p>
<p>There is a lot more to discover with jQuery Deferreds, but I hope you found this little piece useful <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cburgdorf.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cburgdorf.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cburgdorf.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cburgdorf.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cburgdorf.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cburgdorf.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cburgdorf.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cburgdorf.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cburgdorf.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cburgdorf.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cburgdorf.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cburgdorf.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cburgdorf.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cburgdorf.wordpress.com/88/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cburgdorf.wordpress.com&amp;blog=5781222&amp;post=88&amp;subd=cburgdorf&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cburgdorf.wordpress.com/2011/02/22/accessing-return-values-from-multiple-deferreds/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1bb69b75c5e73a7c9f4ebbc4835d622f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cburgdorf</media:title>
		</media:content>
	</item>
		<item>
		<title>struggleing through the ajax world</title>
		<link>http://cburgdorf.wordpress.com/2009/05/13/struggleing-through-the-ajax-world/</link>
		<comments>http://cburgdorf.wordpress.com/2009/05/13/struggleing-through-the-ajax-world/#comments</comments>
		<pubDate>Wed, 13 May 2009 14:31:45 +0000</pubDate>
		<dc:creator>cburgdorf</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[kohana]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://cburgdorf.wordpress.com/?p=66</guid>
		<description><![CDATA[We recently decided to port our website over to the Kohana Framework. A great decision! However, we are not only switching over to Kohana and the MVC approach, we also want to make more use of ajax. Not at least because we want to give our users a better experience. Whatever, I will go more [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cburgdorf.wordpress.com&amp;blog=5781222&amp;post=66&amp;subd=cburgdorf&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We recently decided to port our website over to the Kohana Framework. A great decision! However, we are not only switching over to Kohana and the MVC approach, we also want to make more use of ajax. Not at least because we want to give our users a better experience. Whatever, I will go more deeper into the whole migration process in some weeks. Today Im asking the jQuery heros for their help.</p>
<p><strong>What I want is</strong></p>
<p>1. to save a form</p>
<p>2. to show a modal box, telling the user the form can&#8217;t be saved, incase of any validation rule violation</p>
<p>3. to ask the user for confirmation incase of any special conditions. For example, if he changes his zipcode he will be informed that this will lead to loosing his credit points and he must confirm with yes in order to save the form.</p>
<p><strong>What I have</strong></p>
<p>I won&#8217;t post every detail but hopefully enough to understand my problem <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  I should also mention that I use the simplemodal box[1] to show the dialog. And it might be also worth knowing that Im a total noob on javascript and the whole ajax thing.</p>
<p><em>The View</em></p>
<p>I have a simple form like that:</p>
<p><pre class="brush: xml;">
&lt;?=form::open('editroot/save', array('id' =&gt; 'edit_root'), NULL)?&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;5&quot; cellspacing=&quot;5&quot;&gt;
&lt;tr&gt;
&lt;td width=&quot;100&quot;&gt;Vorname:&lt;/td&gt;
&lt;td&gt;&lt;?=form::input('firstname',$firstname, ' class=&quot;inputbox_mp&quot; maxlength=&quot;50&quot;');?&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nachname:&lt;/td&gt;
&lt;td&gt;&lt;?=form::input('lastname',$lastname, ' class=&quot;inputbox_mp&quot; maxlength=&quot;50&quot;');?&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;?=form::close()?&gt;
</pre></p>
<p>And my javascript looks like that&#8230;</p>
<p><pre class="brush: jscript;">

$(document).ready(function()
{
     //attach onSubmit to the form
     $('#edit_root').submit(function()
     {
         //When submitted do an ajaxSubmit
         $(this).ajaxSubmit(
         {
             dataType: 'json',
             success: function(data, responseCode)
             {
                 if (data.category == 'conditionApplied')
                 {
                     confirm(&quot;Are you sure you want to ignore condition XYZ&quot;, function ()
                     {
                         jQuery.post('&lt;?=url::base(FALSE)?&gt;editroot/save', {ignoreConditions : &quot;ignoreConditions&quot;});
                     });
                 }
                 else if (data.category == 'invalid')
                 {
                     confirm(&quot;Your data is wrong (invalid email etc.)&quot;, function ()
                     {
                         // do nothing because the user has to change his inputs
                     });
                 }
             }
         });
         //return false to prevent normal submit
         return false;
     })
 }); 

function confirm(message, callback)
{
    $('#confirm').modal(
    {
        close:false,
        position: [&quot;20%&quot;,],
        overlayId:'confirmModalOverlay',
        containerId:'confirmModalContainer',
        onShow: function (dialog)
        {
            dialog.data.find('.message').append(message);
            // if the user clicks &quot;yes&quot;
            dialog.data.find('.yes').click(function ()
            {
                 // call the callback
                 if ($.isFunction(callback))
                 {
                     callback.apply();
                 }
                 // close the dialog
                 $.modal.close();
            });
        }
    });
}
</pre></p>
<p><em>The Controller</em></p>
<p><pre class="brush: php;">
	public function save()
	{
		if(request::is_ajax())
		{
			$post = new Validation($_POST);
			$post-&gt;add_rules('firstname', 'required');
			if(!$post-&gt;validate())
			{
				echo json_encode(array('category'=&gt;'invalid','text'=&gt;'Error during saving'));
			}
			else
			{
				if (isset($_POST['ignoreConditions']))
					$this-&gt;store();
				else
				{
					echo json_encode(array('category'=&gt;'conditionApplied','text'=&gt;'Error during saving'));
				}
			}
			$this-&gt;auto_render=false; 
			return;
		}
	}
	
	private function store()
	{
		//its valid, the user had been asked to accept special conditions etc.
                //we are ready to update the user account in the database
	}
</pre></p>
<p>Let me explain what the code does:</p>
<p>1. When the user clicks on the submit button, the $_POST array will be send through an ajax request to the controller.</p>
<p>2. The controller validates the data:</p>
<p>Now A.) If the user made an invalid input (missing firstname in this example) the controller will return &#8216;category&#8217;=&gt;&#8217;invalid&#8217;. The javascript will show a message telling the user that the data was wrong.</p>
<p>Or B.) If the user made an input that will lead to something special (loosing credit points etc.) the controller will return &#8216;category&#8217;=&gt;&#8217;conditionApplied&#8217;. The javascript will show a confirm message asking the user if he was sure to save and accept the special conditions coming along with his decision.</p>
<p>The first one is not really interesting because it means the user can not proceed until he changes his input. However the second one is more interesting. Incase the user clicks &#8216;Yes&#8217; I want to send the $_POST data again and would like to append a value as an indicator for the controller.</p>
<p>It&#8217;s easy to send this single $_POST indicator but I need it to be send TOGETHER with the actual data. I find that hard to manage. Does it mean that I need to manipulate the form by appending a hidden field or anything?</p>
<p>And somehow, I think the whole js code smells and it feels like a dirty hack to me. There must be a more straight forward approach to it, isnt there? I also dislike the way I return the json answers&#8230;however I just took an example from the web and changed it a bit to make it run for me <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Happy for anybody trying to help me on this&#8230;</p>
<p><b>UPDATE</b></p>
<p>I finally got it working on my own. So here is what I did:</p>
<p><pre class="brush: jscript;">

$(document).ready(function()
{
     //attach onSubmit to the form
     $(document).ready(function() 
{ 
	//attach onSubmit to the form
	$('#edit_root').submit(function()
	{
		//When submitted do an ajaxSubmit
		$(this).ajaxSubmit(
		{
			dataType: 'json',
			success: function(data, responseCode) 
			{
				if (data.category == 'conditionApplied')
				{
					confirm(data.message, 'irgendein title', 'yesAndNo', function () 
					{
						var queryString = $('#edit_root').formSerialize(); 
						queryString = queryString + &quot;&amp;acceptConditions&quot;
						jQuery.post('&lt;?=url::base(FALSE)?&gt;editroot/save', queryString);
					});
				}
				else if (data.category == 'invalid')
				{
					confirm(data.message,'irgendein anderer title', 'ok', function () 
					{
						// do nothing because the user has to change his inputs
					});
				}
			}
		});
	//return false to prevent normal submit
	return false;
	})
}
);  

function confirm(message, title, buttons, callback) {
	$('#confirm').modal({
		close:false,
		position: [&quot;20%&quot;,],
		overlayId:'confirmModalOverlay',
		containerId:'confirmModalContainer', 
		onShow: function (dialog) {
		
		if (buttons == 'yesAndNo')
			dialog.data.find('.ok').remove();
		else if (buttons == 'ok')
		{
			dialog.data.find('.yes').remove();
			dialog.data.find('.no').remove();
		}
			
			dialog.data.find('.message').append(message);
			dialog.data.find('.header').append('&lt;span&gt;' + title + '&lt;/span&gt;');			
			dialog.data.find('.yes').click(function () {
				if ($.isFunction(callback)) {
					callback.apply();
				}
				$.modal.close();
			});
			
			dialog.data.find('.ok').click(function () {
				if ($.isFunction(callback)) {
					callback.apply();
				}
				$.modal.close();
			});
		}
	});
}</pre></p>
<p><em>The Controller</em></p>
<p><pre class="brush: php;">
		public function save()
	{
		if(request::is_ajax())
		{
			$post = new Validation($_POST);
			$post-&gt;add_rules('firstname', 'required');
			if(!$post-&gt;validate())
			{
				$errorMessage = '';
				$errors = $post-&gt;errors();
				foreach ($errors as $key =&gt; $val)
				{
				   $errorMessage .= $key.' failed rule '.$val.'&lt;br /&gt;';
				}				   
				
				echo json_encode(array('category'=&gt;'invalid','message'=&gt;$errorMessage));
			}
			else
			{
				if (isset($_POST['acceptConditions']))
					$this-&gt;store();
				else if (1 == 1) //special condition is true
					echo json_encode(array('category'=&gt;'conditionApplied','message'=&gt;'Wollen Sie Kondition XYZ in Kauf nehmen?'));
				else
					$this-&gt;store();	
			}
			$this-&gt;auto_render=false; 
			return;
		}
		else
		$this-&gt;template-&gt;content = 'Ohne Javascript nix los :-(';
	}
	
	private function store()
	{
		//its valid, the user had been asked to accept special conditions etc.
	}
</pre></p>
<p>Well, basically I wasn&#8217;t really aware that Im using jQuerys form plugin here. Once I figured it out, I just checked the docs and found out I can serialize the form and just append any variable I want. The rest is more or less some sugar&#8230;I modified the confirm dialog to be flexible with its button etc. Maybe this will ease the pain of some other ajax newbie out there&#8230;</p>
<p>[1] http://www.ericmmartin.com/projects/simplemodal/</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cburgdorf.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cburgdorf.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cburgdorf.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cburgdorf.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cburgdorf.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cburgdorf.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cburgdorf.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cburgdorf.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cburgdorf.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cburgdorf.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cburgdorf.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cburgdorf.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cburgdorf.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cburgdorf.wordpress.com/66/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cburgdorf.wordpress.com&amp;blog=5781222&amp;post=66&amp;subd=cburgdorf&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cburgdorf.wordpress.com/2009/05/13/struggleing-through-the-ajax-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1bb69b75c5e73a7c9f4ebbc4835d622f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cburgdorf</media:title>
		</media:content>
	</item>
		<item>
		<title>Writing a GetFirstDayOfWeek(int week, int year) function</title>
		<link>http://cburgdorf.wordpress.com/2009/04/15/writing-a-getfirstdayofweekint-week-int-year-function/</link>
		<comments>http://cburgdorf.wordpress.com/2009/04/15/writing-a-getfirstdayofweekint-week-int-year-function/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 07:59:44 +0000</pubDate>
		<dc:creator>cburgdorf</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://cburgdorf.wordpress.com/?p=59</guid>
		<description><![CDATA[It took me some time to write a DateTime GetFirstDayOfWeek(int week, int year) function yesterday. I&#8217;m not going to say HOW long it took me but just&#8230;I HATE date calculations. This should be a built in .NET feature! Hopefully this will ease the pain of someone out there!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cburgdorf.wordpress.com&amp;blog=5781222&amp;post=59&amp;subd=cburgdorf&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It took me some time to write a DateTime GetFirstDayOfWeek(int week, int year) function yesterday. I&#8217;m not going to say HOW long it took me but just&#8230;I HATE date calculations. This should be a built in .NET feature!</p>
<p>Hopefully this will ease the pain of someone out there!</p>
<p><pre class="brush: csharp;">
public static class DateHelper
	{		

		public static DateTime GetFirstDayOfWeek(int week, int year)
		{
			ThrowExceptionOnInvalidWeek(week);
			return GetFirstDayOfFirstWeek(year).AddDays((week - 1) * 7);
		}

		private static void ThrowExceptionOnInvalidWeek(int week)
		{
			if (week &lt; 1 || week &gt; 54)
			{
				throw new ArgumentException(&quot;the week must be within 1 and 54&quot;);
			}
		}

		private static DateTime GetFirstDayOfFirstWeek(int year)
		{
			DateTime firstDayOfYear = new DateTime(year, 1, 1);
			DateTime firstDayOfFirstWeek = new DateTime(year, 1, 1);			

			if (firstDayOfYear.DayOfWeek == DayOfWeek.Monday)
			{
				firstDayOfFirstWeek = firstDayOfYear;
			}
			else if (firstDayOfYear.DayOfWeek == DayOfWeek.Tuesday)
			{
				firstDayOfFirstWeek = firstDayOfYear.AddDays(-1);
			}
			else if (firstDayOfYear.DayOfWeek == DayOfWeek.Wednesday)
			{
				firstDayOfFirstWeek = firstDayOfYear.AddDays(-2);
			}
			else if (firstDayOfYear.DayOfWeek == DayOfWeek.Thursday)
			{
				firstDayOfFirstWeek = firstDayOfYear.AddDays(-3);
			}
			else if (firstDayOfYear.DayOfWeek == DayOfWeek.Friday)
			{
				firstDayOfFirstWeek = firstDayOfYear.AddDays(-4);
			}
			else if (firstDayOfYear.DayOfWeek == DayOfWeek.Saturday)
			{
				firstDayOfFirstWeek = firstDayOfYear.AddDays(-5);
			}
			else if (firstDayOfYear.DayOfWeek == DayOfWeek.Sunday)
			{
				firstDayOfFirstWeek = firstDayOfYear.AddDays(-6);
			}
			return firstDayOfFirstWeek;
		}

	}
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cburgdorf.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cburgdorf.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cburgdorf.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cburgdorf.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cburgdorf.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cburgdorf.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cburgdorf.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cburgdorf.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cburgdorf.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cburgdorf.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cburgdorf.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cburgdorf.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cburgdorf.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cburgdorf.wordpress.com/59/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cburgdorf.wordpress.com&amp;blog=5781222&amp;post=59&amp;subd=cburgdorf&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cburgdorf.wordpress.com/2009/04/15/writing-a-getfirstdayofweekint-week-int-year-function/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1bb69b75c5e73a7c9f4ebbc4835d622f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cburgdorf</media:title>
		</media:content>
	</item>
		<item>
		<title>Some trivia out of my life</title>
		<link>http://cburgdorf.wordpress.com/2009/03/16/some-trivia-out-of-my-life/</link>
		<comments>http://cburgdorf.wordpress.com/2009/03/16/some-trivia-out-of-my-life/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 21:58:31 +0000</pubDate>
		<dc:creator>cburgdorf</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ac/dc]]></category>
		<category><![CDATA[banshee]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[taekwondo]]></category>

		<guid isPermaLink="false">http://cburgdorf.wordpress.com/?p=50</guid>
		<description><![CDATA[I haven&#8217;t been blogging for a while but in fact several things happened that were worth to do so. I won&#8217;t go too much into detail as I would like to keep this blog a place for technic stuff&#8230;basically at least. However, here comes some trivia out of my life.  Some weeks ago I got [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cburgdorf.wordpress.com&amp;blog=5781222&amp;post=50&amp;subd=cburgdorf&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t been blogging for a while but in fact several things happened that were worth to do so. I won&#8217;t go too much into detail as I would like to keep this blog a place for technic stuff&#8230;basically at least. However, here comes some trivia out of my life.  Some weeks ago I got my green belt in Taekwondo&#8230;actually, I got it again for the second time in my life. I started Taekwondo with the age of 10 or so and had to quit it being a green belt for some personal reasons. However I always knew I would start it again. For those of you who are not familiar with the different martial arts. Have a look at this video:</p>
<span style="text-align:center; display: block;"><a href="http://cburgdorf.wordpress.com/2009/03/16/some-trivia-out-of-my-life/"><img src="http://img.youtube.com/vi/E_XnOXDtRXs/2.jpg" alt="" /></a></span>
<p>Two years ago I started Taekwondo again but decided to begin from scratch as a white belt and did all the tests again. Although I would have been allowed to wear my green belt I didn&#8217;t like to wear a belt that doesn&#8217;t reflect my phyisical skills. So, now Im once again a green belt and everything from now on will be new for me. Exciting stuff ahead!</p>
<p><strong>Banshee</strong></p>
<p>Banshee&#8230;yeah&#8230;banshee!!! For those of you following me on twitter you should have noticed there are already three patches from me commited to trunk. Rocks! I&#8217;m getting deeper into the source and I&#8217;m looking forward to hack on bigger tasks. I already got so much back from the banshee project. My coding skills developed a lot&#8230;it&#8217;s amazing how the banshee source is like a teacher to me!</p>
<p><strong>Got one thing of my personal &#8220;must do&#8221; list</strong></p>
<p>You know the phrase &#8220;a man must build a house, plant a tree, get a son and see AC/DC. Well, I just saw AC/DC yesterday&#8230;live in Dortmund. Stunning! Absolutely! I can&#8217;t believe what these guys perform on the stage&#8230;<strong><br />
</strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cburgdorf.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cburgdorf.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cburgdorf.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cburgdorf.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cburgdorf.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cburgdorf.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cburgdorf.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cburgdorf.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cburgdorf.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cburgdorf.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cburgdorf.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cburgdorf.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cburgdorf.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cburgdorf.wordpress.com/50/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cburgdorf.wordpress.com&amp;blog=5781222&amp;post=50&amp;subd=cburgdorf&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cburgdorf.wordpress.com/2009/03/16/some-trivia-out-of-my-life/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1bb69b75c5e73a7c9f4ebbc4835d622f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cburgdorf</media:title>
		</media:content>
	</item>
		<item>
		<title>banshee 1.4.2 makes me a lucky hacker</title>
		<link>http://cburgdorf.wordpress.com/2009/01/22/40/</link>
		<comments>http://cburgdorf.wordpress.com/2009/01/22/40/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 20:23:14 +0000</pubDate>
		<dc:creator>cburgdorf</dc:creator>
				<category><![CDATA[open source]]></category>
		<category><![CDATA[banshee]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[gnome]]></category>

		<guid isPermaLink="false">http://cburgdorf.wordpress.com/?p=40</guid>
		<description><![CDATA[Some weeks ago I blogged about my first banshee patch which fixed the alignment issues with banshees track number. I can say proudly that my patch has recently been commited by Gabriel Burt and made it into the 1.4.2 release.  Some might think it&#8217;s ridiculous to blog about it, but some also might feel and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cburgdorf.wordpress.com&amp;blog=5781222&amp;post=40&amp;subd=cburgdorf&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Some weeks ago I blogged about my first banshee patch which fixed the alignment issues with banshees track number. I can say proudly that my patch has recently been commited by Gabriel Burt and made it into the 1.4.2 release.  Some might think it&#8217;s ridiculous to blog about it, but some also might feel and share the joy.</p>
<p>Of course, what I did wasn&#8217;t world shaking, it&#8217;s truly just a small bit of code. But banshee is a big, fast growing project that will soon become one of the most important media player applications due to its clean code base. That&#8217;s at least what I think. Up to the moment the project is available for the linux and apple plattform while the windows version is still under development.  I guess the influence will rapidly grow once the player will be full functionally on all three major plattforms.</p>
<p>So, beeing a part of this great project just feels great. Some month ago I wouldnt have thought I could find my name on the list of banshee contributors in the near future.  But here it is:</p>
<p><a href="http://banshee-project.org/download/archives/1.4.2/"><img class="alignnone size-full wp-image-41" title="banshee_contributors" src="http://cburgdorf.files.wordpress.com/2009/01/banshee_contributors.gif?w=500&#038;h=121" alt="banshee_contributors" width="500" height="121" /></a></p>
<p>What is the intension of this blog post? Am I just a geek looking for some fame? NO! I want to share the joy that I have with others and I want to encourage others to step up and join the project. The patch I wrote is the perfect proof, that it is possible for beginners to join the project and find some easy tasks to hack on.  It feels awesome to be  a part of a great project and hack together with other well known free software hackers. No money would have brought me the joy that I feel with that.</p>
<p>I defenetly will keep it up and Im quite confident that there will be banshee patches of my own in the future&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cburgdorf.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cburgdorf.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cburgdorf.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cburgdorf.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cburgdorf.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cburgdorf.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cburgdorf.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cburgdorf.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cburgdorf.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cburgdorf.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cburgdorf.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cburgdorf.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cburgdorf.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cburgdorf.wordpress.com/40/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cburgdorf.wordpress.com&amp;blog=5781222&amp;post=40&amp;subd=cburgdorf&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cburgdorf.wordpress.com/2009/01/22/40/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1bb69b75c5e73a7c9f4ebbc4835d622f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cburgdorf</media:title>
		</media:content>

		<media:content url="http://cburgdorf.files.wordpress.com/2009/01/banshee_contributors.gif" medium="image">
			<media:title type="html">banshee_contributors</media:title>
		</media:content>
	</item>
		<item>
		<title>customize tasques todays tasks color</title>
		<link>http://cburgdorf.wordpress.com/2008/12/28/customize-tasques-todays-tasks-color/</link>
		<comments>http://cburgdorf.wordpress.com/2008/12/28/customize-tasques-todays-tasks-color/#comments</comments>
		<pubDate>Sun, 28 Dec 2008 13:11:11 +0000</pubDate>
		<dc:creator>cburgdorf</dc:creator>
				<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://cburgdorf.wordpress.com/?p=34</guid>
		<description><![CDATA[While I reside in Berlin at my girlfriends parents house for some days, I started to have a look at the young tasque project. Tasque is a small programm that creates to-do lists. Its quite handy and can use different backends (including evolution). And the best, its entirely written in c#! I picked one of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cburgdorf.wordpress.com&amp;blog=5781222&amp;post=34&amp;subd=cburgdorf&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>While I reside in Berlin at my girlfriends parents house for some days, I started to have a look at the young tasque project. Tasque is a small programm that creates to-do lists. Its quite handy and can use different backends (including evolution). And the best, its entirely written in c#!</p>
<p>I picked one of the suggested enhancement bugs and started to hack on it!</p>
<p>So here it goes. The color for todays tasks can now be customized from the preferences dialog:</p>
<div id="attachment_35" class="wp-caption alignnone" style="width: 510px"><img class="size-full wp-image-35" title="customize_todays_tasks_color" src="http://cburgdorf.files.wordpress.com/2008/12/customize_todays_tasks_color.png?w=500&#038;h=457" alt="customize todays tasks color" width="500" height="457" /><p class="wp-caption-text">customize todays tasks color</p></div>
<p>I like to thank Sandy Armstrong for his help. The patch is now awaiting its review and will hopefully soon be committed to trunk.</p>
<p>Bugzilla Link: <a title="http://bugzilla.gnome.org/show_bug.cgi?id=563748" href="http://bugzilla.gnome.org/show_bug.cgi?id=563748" target="_blank">http://bugzilla.gnome.org/show_bug.cgi?id=563748</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cburgdorf.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cburgdorf.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cburgdorf.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cburgdorf.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cburgdorf.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cburgdorf.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cburgdorf.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cburgdorf.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cburgdorf.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cburgdorf.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cburgdorf.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cburgdorf.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cburgdorf.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cburgdorf.wordpress.com/34/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cburgdorf.wordpress.com&amp;blog=5781222&amp;post=34&amp;subd=cburgdorf&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cburgdorf.wordpress.com/2008/12/28/customize-tasques-todays-tasks-color/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1bb69b75c5e73a7c9f4ebbc4835d622f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cburgdorf</media:title>
		</media:content>

		<media:content url="http://cburgdorf.files.wordpress.com/2008/12/customize_todays_tasks_color.png" medium="image">
			<media:title type="html">customize_todays_tasks_color</media:title>
		</media:content>
	</item>
		<item>
		<title>My first banshee patch fixed #553322</title>
		<link>http://cburgdorf.wordpress.com/2008/12/20/my-first-banshee-patch-fixed-553322/</link>
		<comments>http://cburgdorf.wordpress.com/2008/12/20/my-first-banshee-patch-fixed-553322/#comments</comments>
		<pubDate>Sat, 20 Dec 2008 16:21:43 +0000</pubDate>
		<dc:creator>cburgdorf</dc:creator>
				<category><![CDATA[open source]]></category>
		<category><![CDATA[banshee]]></category>
		<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://cburgdorf.wordpress.com/?p=25</guid>
		<description><![CDATA[Yesterday I submitted my first patch for the popular banshee player. It fixes the issue that the track number is not right aligned.  It&#8217;s actually my first patch ever contributed to an open source project.  I have a desire growing inside me, that tells me to contribute code to open source projects. While I know [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cburgdorf.wordpress.com&amp;blog=5781222&amp;post=25&amp;subd=cburgdorf&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Yesterday I submitted my first patch for the popular banshee player. It fixes the issue that the track number is not right aligned.  It&#8217;s actually my first patch ever contributed to an open source project.  I have a desire growing inside me, that tells me to contribute code to open source projects. While I know that time is a valuable thing &#8211; and especially when you have to share it with many other persons and projects &#8211; I think whenever you feel a desire growing inside you, you have to follow it.</p>
<p>The patch I wrote isn&#8217;t worldshaking but means a lot to me though.</p>
<p>I still don&#8217;t know if or when it will be accepted, but if you like to check it out, you can get it here:</p>
<p>http://bugzilla.gnome.org/show_bug.cgi?id=553322</p>
<p>Bug 553322:</p>
<p><img class="alignnone size-full wp-image-27" title="banshee_bug_5533221" src="http://cburgdorf.files.wordpress.com/2008/12/banshee_bug_5533221.png?w=500&#038;h=278" alt="banshee_bug_5533221" width="500" height="278" /></p>
<p>Fixed <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><img class="alignnone size-full wp-image-28" title="banshee_bug_553322_fixed" src="http://cburgdorf.files.wordpress.com/2008/12/banshee_bug_553322_fixed.png?w=500&#038;h=278" alt="banshee_bug_553322_fixed" width="500" height="278" /></p>
<p>&#8230;to be continued!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cburgdorf.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cburgdorf.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cburgdorf.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cburgdorf.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cburgdorf.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cburgdorf.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cburgdorf.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cburgdorf.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cburgdorf.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cburgdorf.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cburgdorf.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cburgdorf.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cburgdorf.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cburgdorf.wordpress.com/25/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cburgdorf.wordpress.com&amp;blog=5781222&amp;post=25&amp;subd=cburgdorf&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cburgdorf.wordpress.com/2008/12/20/my-first-banshee-patch-fixed-553322/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1bb69b75c5e73a7c9f4ebbc4835d622f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cburgdorf</media:title>
		</media:content>

		<media:content url="http://cburgdorf.files.wordpress.com/2008/12/banshee_bug_5533221.png" medium="image">
			<media:title type="html">banshee_bug_5533221</media:title>
		</media:content>

		<media:content url="http://cburgdorf.files.wordpress.com/2008/12/banshee_bug_553322_fixed.png" medium="image">
			<media:title type="html">banshee_bug_553322_fixed</media:title>
		</media:content>
	</item>
		<item>
		<title>Picasa webalbum fetcher</title>
		<link>http://cburgdorf.wordpress.com/2008/12/16/picasa-webalbum-fetcher/</link>
		<comments>http://cburgdorf.wordpress.com/2008/12/16/picasa-webalbum-fetcher/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 21:17:42 +0000</pubDate>
		<dc:creator>cburgdorf</dc:creator>
				<category><![CDATA[open source]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[picasa]]></category>

		<guid isPermaLink="false">http://cburgdorf.wordpress.com/?p=17</guid>
		<description><![CDATA[Some days ago I wrote a little tool to download whole picasa web albums. I actually wrote it for my gf, who wanted to download a friends album. I was looking around but couldn&#8217;t find any comfortable way to get that done without installing the picasa software. The tool I wrote is based on mono/gtk# [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cburgdorf.wordpress.com&amp;blog=5781222&amp;post=17&amp;subd=cburgdorf&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Some days ago I wrote a little tool to download whole picasa web albums. I actually wrote it for my gf, who wanted to download a friends album. I was looking around but couldn&#8217;t find any comfortable way to get that done without installing the picasa software.</p>
<p>The tool I wrote is based on mono/gtk# and runs on linux and windows and I guess it should also run on a mac (not tested). If anybody cares for a .NET/Winforms solution &#8211; I have that, too. Just ask and I&#8217;ll bring it on.</p>
<p>Actually the winforms version is even more mature, because that&#8217;s the one I created for my girlfriend but as I use linux myself, I thought I should make an gtk# version for this blog.</p>
<p>I seperated the process of fetching the album into an assembly so that makes it easy for you to implement it anywhere else. Use it for whatever you like.</p>
<div id="attachment_21" class="wp-caption alignnone" style="width: 510px"><img class="size-full wp-image-21" title="picasa_album_fetcher" src="http://cburgdorf.files.wordpress.com/2008/12/picasa_album_fetcher.png?w=500&#038;h=290" alt="album fetcher in action" width="500" height="290" /><p class="wp-caption-text">album fetcher in action</p></div>
<p>Download source and binary:</p>
<p><a href="http://www.bvsn.org/download/AlbumFetcher.zip"><img src="http://cburgdorf.files.wordpress.com/2008/12/box_download_48.png?w=48&#038;h=48" alt="" width="48" height="48" /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cburgdorf.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cburgdorf.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cburgdorf.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cburgdorf.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cburgdorf.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cburgdorf.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cburgdorf.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cburgdorf.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cburgdorf.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cburgdorf.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cburgdorf.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cburgdorf.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cburgdorf.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cburgdorf.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cburgdorf.wordpress.com&amp;blog=5781222&amp;post=17&amp;subd=cburgdorf&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cburgdorf.wordpress.com/2008/12/16/picasa-webalbum-fetcher/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1bb69b75c5e73a7c9f4ebbc4835d622f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cburgdorf</media:title>
		</media:content>

		<media:content url="http://cburgdorf.files.wordpress.com/2008/12/picasa_album_fetcher.png" medium="image">
			<media:title type="html">picasa_album_fetcher</media:title>
		</media:content>

		<media:content url="http://cburgdorf.files.wordpress.com/2008/12/box_download_48.png" medium="image" />
	</item>
	</channel>
</rss>
