<?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>Jeroen&#039;s blog</title>
	<atom:link href="http://blog.osx.eu/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.osx.eu</link>
	<description></description>
	<lastBuildDate>Wed, 14 Mar 2012 15:50:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>1 jaar!</title>
		<link>http://blog.osx.eu/2010/05/31/1-jaar/</link>
		<comments>http://blog.osx.eu/2010/05/31/1-jaar/#comments</comments>
		<pubDate>Mon, 31 May 2010 11:28:34 +0000</pubDate>
		<dc:creator>duh</dc:creator>
				<category><![CDATA[thoughts]]></category>

		<guid isPermaLink="false">http://blog.osx.eu/?p=1631</guid>
		<description><![CDATA[Vandaag is het exact 1 jaar geleden dat ik voor het eerst in mijn nieuwe woning heb geslapen. Ter ere van dat heugelijke feit heb ik ter vergelijking een paar nieuwe foto&#8217;s gemaakt van foto&#8217;s die ik op 6 maart &#8230; <a href="http://blog.osx.eu/2010/05/31/1-jaar/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Vandaag is het exact <a href="/2009/05/31/sei-bottiglie-di-vino-bianco/">1 jaar geleden</a> dat ik voor het eerst in mijn nieuwe woning heb geslapen. Ter ere van dat heugelijke feit heb ik ter vergelijking een paar nieuwe foto&#8217;s gemaakt van <a href="/2009/05/18/monsieur-bricolage/">foto&#8217;s die ik op 6 maart 2009 heb gemaakt</a> toen mijn appartement nog &#8216;under construction was&#8217;. Nieuw huis, nieuwe inboedel, nieuwe start <img src='http://blog.osx.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<div id="attachment_1634" class="wp-caption alignnone" style="width: 1510px"><a href="http://new.blog.osx.eu/wp-content/uploads/2010/06/woonkamer1-large.jpg" rel="lightbox[1631]"><img src="http://new.blog.osx.eu/wp-content/uploads/2010/06/woonkamer1-large.jpg" alt="Woonkamer 1" title="Woonkamer 1" width="1500" height="500" class="size-full wp-image-1634" /></a><p class="wp-caption-text">Woonkamer 1</p></div>
<div id="attachment_1635" class="wp-caption alignnone" style="width: 1510px"><a href="http://new.blog.osx.eu/wp-content/uploads/2010/06/woonkamer2-large.jpg" rel="lightbox[1631]"><img src="http://new.blog.osx.eu/wp-content/uploads/2010/06/woonkamer2-large.jpg" alt="Woonkamer 2" title="Woonkamer 2" width="1500" height="500" class="size-full wp-image-1635" /></a><p class="wp-caption-text">Woonkamer 2</p></div>
<div id="attachment_1633" class="wp-caption alignnone" style="width: 1510px"><a href="http://new.blog.osx.eu/wp-content/uploads/2010/06/slaapkamer-large.jpg" rel="lightbox[1631]"><img src="http://new.blog.osx.eu/wp-content/uploads/2010/06/slaapkamer-large.jpg" alt="Slaapkamer" title="Slaapkamer" width="1500" height="500" class="size-full wp-image-1633" /></a><p class="wp-caption-text">Slaapkamer</p></div>
<div id="attachment_1632" class="wp-caption alignnone" style="width: 678px"><a href="http://new.blog.osx.eu/wp-content/uploads/2010/06/gang-large.jpg" rel="lightbox[1631]"><img src="http://new.blog.osx.eu/wp-content/uploads/2010/06/gang-large.jpg" alt="Gang" title="Gang" width="668" height="500" class="size-full wp-image-1632" /></a><p class="wp-caption-text">Gang</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.osx.eu/2010/05/31/1-jaar/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Whale sharks</title>
		<link>http://blog.osx.eu/2010/04/28/whale-sharks/</link>
		<comments>http://blog.osx.eu/2010/04/28/whale-sharks/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 06:03:28 +0000</pubDate>
		<dc:creator>duh</dc:creator>
				<category><![CDATA[flora & fauna]]></category>

		<guid isPermaLink="false">http://blog.osx.eu/?p=1625</guid>
		<description><![CDATA[I just saw this video on Facebook about the world&#8217;s second largest fish tank where you see numerous whale shark and manta rays swimming by&#8230; amazing!]]></description>
			<content:encoded><![CDATA[<p>I just saw this video on Facebook about the world&#8217;s second largest fish tank where you see numerous <a href="/2008/05/04/whalesharks/">whale shark</a> and manta rays swimming by&#8230; amazing!</p>
<iframe style="background:#000000;" src="http://player.vimeo.com/video/5606758?title=0&amp;byline=0&amp;portrait=0&amp;color=&amp;autoplay=0&amp;loop=0" width="800" height="330" frameborder="0"></iframe>
]]></content:encoded>
			<wfw:commentRss>http://blog.osx.eu/2010/04/28/whale-sharks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating dependent selects in Grails</title>
		<link>http://blog.osx.eu/2010/04/13/creating-dependent-selects-in-grails/</link>
		<comments>http://blog.osx.eu/2010/04/13/creating-dependent-selects-in-grails/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 10:36:42 +0000</pubDate>
		<dc:creator>duh</dc:creator>
				<category><![CDATA[Groovy & Grails]]></category>

		<guid isPermaLink="false">http://blog.osx.eu/?p=1620</guid>
		<description><![CDATA[In my previous post I explained how to use Ajaxify Grails Webflows, and this time I will address how to add two select boxes where the latter is depending on the input of the first. Let&#8217;s say we would like &#8230; <a href="http://blog.osx.eu/2010/04/13/creating-dependent-selects-in-grails/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.grails.org" target="_new"><img class="alignright size-full wp-image-1592" title="Grails" src="http://new.blog.osx.eu/wp-content/uploads/2010/01/grails_logo.png" alt="Grails" width="163" height="43" border="0" /></a><br />
In my <a href="/2010/01/18/ajaxifying-a-grails-webflow/">previous post</a> I explained how to use Ajaxify Grails Webflows, and this time I will address how to add two select boxes where the latter is depending on the input of the first. Let&#8217;s say we would like to add a select containing <em>species</em>, and a select containing <em>genotypes</em> of a particular species. As the latter is depending on the first, we would like the latter to automatically update whenever another species is selected.</p>
<p>First, we will create the two select elements in the view. The genotype select can be empty as it will be dynamically filled by the species select. The species select, however, is a little bit more complicated as it uses a list (<em>speciesList</em>) as input and contains an onChange action:</p>
<pre>
...
    &lt;tr&gt;
      &lt;td class=&quot;title&quot;&gt;Species&lt;/td&gt;
      &lt;td&gt;
          &lt;g:select
              name=&quot;species_id&quot;
              value=&quot;${species?.id}&quot;
              optionKey=&quot;id&quot;
              optionValue=&quot;name&quot;
              from=&quot;${speciesList}&quot;
              noSelection=&quot;[&#039;&#039;:&#039;-Choose species-&#039;]&quot;
              onChange=&quot;${remoteFunction( action:&#039;ajaxGetGenotypeBySpecies&#039;,
                                          params: &#039;\&#039;id=\&#039;+escape(this.value)&#039;,
                                          onSuccess:&#039;updateSelect(\&#039;genotype_id\&#039;,data,false,false,\&#039;default\&#039;)&#039;)}&quot; /&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td class=&quot;title&quot;&gt;Genotype&lt;/td&gt;
      &lt;td&gt;&lt;g:select name=&quot;genotype_id&quot; optionKey=&quot;id&quot; optionValue=&quot;name&quot; from=&quot;[]&quot; /&gt;&lt;/td&gt;
    &lt;/tr&gt;
    ...
</pre>
<p>Looking at the two selects, you will see the species select will use Grails&#8217; <a href="http://www.grails.org/Tag+-+remoteFunction">remoteFunction</a> to remotely call <em>ajaxGetGenotypeBySpecies</em> in the controller. That particular action just fetches all genotypes for a particular species, and renders the list as a JSON object which, in turn, is given back to the calling JavaScript.</p>
<pre>
    // use Grails' converters to be able to render JSON
    import grails.converters.*

    ...

    /**
     * Fetch all genotypes for a species and render them as JSON
     * @param int species id
     * @return string JSON response
     */
    def ajaxGetGenotypeBySpecies = {
        // find species by id
        def species = Species.get(params.id)

        // fetch genotypes of a particular species
        def genotypes = Genotype.findAllBySpecies(species, [sort:'name',order:'asc'])

	// render as JSON
        render genotypes as JSON
    }
</pre>
<p>When the call has been a success, the <em>updateSelect(\&#8217;genotype_id\&#8217;&#8230;)</em> JavaScript function is executed, stating we would like to update the select element with <em>genotype_id</em> as id.</p>
<pre>
/**
 * Update one select based on another select
 *
 * @author you
 * @see     http://www.grails.org/Tag+-+remoteFunction
 * @param   string  select (form) name
 * @param   string  JSON data
 * @param   boolean keep the first option
 * @param   int     selected option
 * @param   string  if null, show this as option instead
 * @void
 */
function updateSelect(name,data,keepFirstOption,selected,presentNullAsThis) {
    var rselect = $('#'+name).get(0);
    if (data) {
        // remove old options
        var start = (keepFirstOption) ? 0 : -1;
        var i = rselect.length;
        while (i > start) {
            rselect.remove(i);
            i--;
        }

        // add new options
        $.each(items,function() {
            var i = rselect.options.length
            rselect.options[i] = new Option(
                (presentNullAsThis &#038;&#038; this.name == null) ? presentNullAsThis : this.name,
                this.id
            );
            if (this.id == selected) rselect.options[i].selected = true;
        });
    }
}
</pre>
<p>Now that the whole chain is working, we have one last thing to do. When the user enters the page the first time, the species list is populated and the genotype list is empty. However, when he has already previously selected a species, we would like the genotype list to be populated and properly selected as well. In order to do this we will call do the following when a <em>species</em> is available:</p>
<pre>
    &lt;g:if test=&quot;${species}&quot;&gt;&lt;script&gt;&lt;g:remoteFunction action=&quot;ajaxGetGenotypeBySpecies&quot; params=&quot;&#039;id=${species.id}&#039;&quot; onSuccess=&quot;updateSelect(&#039;genotype_id&#039;,data,false,${genotype?.id},&#039;default&#039;)&quot; /&gt;&lt;/script&gt;&lt;/g:if&gt;
</pre>
<p>And we&#8217;re done! <img src='http://blog.osx.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ps. Note that this is only <em>one</em> way to accomplish creating dependent selects. There are several other ways to accomplish the same result</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.osx.eu/2010/04/13/creating-dependent-selects-in-grails/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>24 Season 8</title>
		<link>http://blog.osx.eu/2010/01/18/24-season-8/</link>
		<comments>http://blog.osx.eu/2010/01/18/24-season-8/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 16:57:30 +0000</pubDate>
		<dc:creator>duh</dc:creator>
				<category><![CDATA[TV Series]]></category>

		<guid isPermaLink="false">http://blog.osx.eu/?p=1605</guid>
		<description><![CDATA[I just noticed that SABnzbd+ fetched the first two Episodes of 24 Season 8 this morning&#8230; Just as Heroes is coming to an end, and Lost&#8216;s final season is about to start as well&#8230;]]></description>
			<content:encoded><![CDATA[<p><img src="http://new.blog.osx.eu/wp-content/uploads/2010/01/100117054057463513.jpg" alt="24 Season 8" title="24 Season 8" width="520" height="293" class="alignnone size-full wp-image-1606" /></p>
<p>I just noticed that <a href="http://sabnzbd.org/">SABnzbd+</a> fetched the first two <a href="http://www.tvnzb.com/shows/298">Episodes</a> of <a href="http://www.fox.com/24/">24</a> Season 8 this morning&#8230; Just as <a href="http://www.nbc.com/heroes/">Heroes</a> is coming to an end, and <a href="http://abc.go.com/shows/lost">Lost</a>&#8216;s final season is about to start as well&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.osx.eu/2010/01/18/24-season-8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajaxifying a Grails Webflow</title>
		<link>http://blog.osx.eu/2010/01/18/ajaxifying-a-grails-webflow/</link>
		<comments>http://blog.osx.eu/2010/01/18/ajaxifying-a-grails-webflow/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 13:39:35 +0000</pubDate>
		<dc:creator>duh</dc:creator>
				<category><![CDATA[Groovy & Grails]]></category>

		<guid isPermaLink="false">http://blog.osx.eu/?p=1588</guid>
		<description><![CDATA[Ajaxify a Grails Webflow <a href="http://blog.osx.eu/2010/01/18/ajaxifying-a-grails-webflow/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.grails.org" target="_new"><img src="http://new.blog.osx.eu/wp-content/uploads/2010/01/grails_logo.png" alt="Grails" title="Grails" width="163" height="43" class="alignright size-full wp-image-1592" border="0" /></a><br />
The Grails framework is a very powerful <a href="http://en.wikipedia.org/wiki/Model–view–controller">MVC</a> web framework based on technology that has proven itself (Spring, Hibernate, Java, etc). For a while now Grails has supported Spring <a href="http://grails.org/WebFlow">webflows</a> which is a great way to develop wizard like user interfaces and underlying logic. While Grails webflows work very well for full page refreshes, they do not really work in an Ajax manner to allow rendering of fractions of pages. This would be useful for a number of reasons:<br />
- separation of templates and template elements<br />
- limit page rendering to the things that change instead of the complete page<br />
- reduce bandwidth and only download require JavaScript and CSS once when the complete page is loaded.<br />
- bookmarking the wizard would only bookmark the initial wizard page<br />
- etc</p>
<p>In order for a webflow to work with Ajax the webflow should be able to render and refresh only portions of a front-end. While Grails does provide a submitToRemote tag to perform an Ajax submit, the tag itself does not work with webflows. That is because a Grails webflow links form buttons to flow actions. So, if you have a submit button named &#8216;delete&#8217;, the delete action will be executed in the particular flow execution element. This is done by adding &#8216;_eventId_delete=1&#8242; to the POST data. However, the Grails tag submitToRemote does not do that, so the webflow is not executed properly.</p>
<p>So, to solve this particular issue we have to create a new tag library to extend / modify the default submitToRemote tag behaviour. In the example below I have created a new tag library called <em>myTagLib</em> (grails create-tag-lib com.example.myTagLib) in which I extend the default tag library. It currently contains one method (&#8216;tag&#8217;) called <em>ajaxButton</em> which wraps around the <em>submitToRemote</em> tag to add the webflow variable (_eventId_<em>buttonName</em>) to the Ajax call (note that I use jQuery as Ajax provider):</p>
<pre>
package com.example
import org.codehaus.groovy.grails.plugins.web.taglib.JavascriptTagLib

class MyTagLib extends JavascriptTagLib {
	// define the tag namespace (e.g.: &lt;my:action ... /&gt;
	static namespace = &quot;my&quot;

	/**
	 * ajaxButton tag, this is a modified version of the default
	 * grails submitToRemote tag to work with grails webflows.
	 * Usage is identical to submitToRemote with the only exception
	 * that a &#039;name&#039; form element attribute is required. E.g.
	 * &lt;my:ajaxButton name=&quot;myAction&quot; value=&quot;myButton ... /&gt;
	 *
	 * @see http://www.grails.org/WebFlow
	 * @see http://www.grails.org/Tag+-+submitToRemote
	 * @param Map attributes
	 * @param Closure body
	 */
	def ajaxButton = {attrs, body -&gt;
		// get the jQuery version
		def jQueryVersion = grailsApplication.getMetadata()[&#039;plugins.jquery&#039;]

		// fetch the element name from the attributes
		def elementName = attrs[&#039;name&#039;].replaceAll(/ /, &quot;_&quot;)

		// generate a normal submitToRemote button
		def button = submitToRemote(attrs, body)

		/**
		 * as of now (grails 1.2.0 and jQuery 1.3.2.4) the grails webflow does
		 * not properly work with AJAX as the submitToRemote button does not
		 * handle and submit the form properly. In order to support webflows
		 * this method modifies two parts of a &#039;normal&#039; submitToRemote button:
		 *
		 * 1) replace &#039;this&#039; with &#039;this.form&#039; as the &#039;this&#039; selector in a button
		 *    action refers to the button and / or the action upon that button.
		 *    However, it should point to the form the button is part of as the
		 *    the button should submit the form data.
		 * 2) prepend the button name to the serialized data. The default behaviour
		 *    of submitToRemote is to remove the element name altogether, while
		 *    the grails webflow expects a parameter _eventId_BUTTONNAME to execute
		 *    the appropriate webflow action. Hence, we are going to prepend the
		 *    serialized formdata with an _eventId_BUTTONNAME parameter.
		 */
		if (jQueryVersion =~ /^1.([1|2|3]).(.*)/) {
			// fix for older jQuery plugin versions
			button = button.replaceFirst(/data\:jQuery\(this\)\.serialize\(\)/, &quot;data:\&#039;_eventId_${elementName}=1&amp;\&#039;+jQuery(this.form).serialize()&quot;)
		} else {
			// as of jQuery plugin version 1.4.0.1 submitToRemote has been modified and the
			// this.form part has been fixed. Consequently, our wrapper has changed as well...
			button = button.replaceFirst(/data\:jQuery/, &quot;data:\&#039;_eventId_${elementName}=1&amp;\&#039;+jQuery&quot;)
		}

		// render button
		out &lt;&lt; button
	}
}
</pre>
<p>Now that we have this tag library in place we can add a webflow compatible submitToRemote button by adding the following tag:</p>
<pre>
&lt;my:ajaxButton name=&quot;next&quot; value=&quot;next &raquo;&quot; url=&quot;[controller:&#039;wizard&#039;,action:&#039;pages&#039;]&quot; update=&quot;[success:&#039;wizardPage&#039;,failure:&#039;wizardError&#039;]&quot; class=&quot;prevnext&quot; /&gt;
</pre>
<p>As the new ajaxButton tag is a wrapper of the submitToRemote tag it supports all arguments the <a href="http://www.grails.org/Tag+-+submitToRemote">submitToRemote</a> tag supports, but in contrast it does not ignore the <em>name</em> argument. In fact, the <em>name</em> argument is <strong>required</strong> as it is responsible for executing webflow actions. The only thing which remains is to make sure the webflow only renders portions, and not complete pages.</p>
<p>Observe the following WizardController code:</p>
<pre>
package com.example

class WizardController {
    def index = {
      redirect(action:'pages')
    }

    def pagesFlow = {
      // render the main wizard page
      mainPage {
	 render(view:"/wizard/index")
         on("next") {
            println "next page!"
          }.to "pageTwo"
       }

       // render page one
       pageOne {
         render(view:"_one")
         on("next") {
           println "next page!"
         }.to "pageTwo"
       }

       // render page two
       pageTwo {
         render(view:"_two")
         on("next") {
             println "next page!"
         }.to "pageThree"
         on("previous") {
            println "previous page!"
         }.to "pageOne"
	}
    }
}
</pre>
<p>As seen in the webflow we have a two paged wizard. The mainpage renders the initial wizard page (index.gsp), while the pageOne and pageTwo actions only render portions of a page (respectively: pages/_one.gsp and pages/_two.gsp). We could split this up into the following four templates. Note that you can seperate templates even more, but for this example I will stick to these four:</p>
<p><strong>index.gsp</strong></p>
<pre>
&lt;html&gt;
 &lt;head&gt;
  &lt;meta name=&quot;layout&quot; content=&quot;main&quot; /&gt;
 &lt;/head&gt;
 &lt;body&gt;
  &lt;g:render template=&quot;common/wizard&quot;/&gt;
 &lt;/body&gt;
&lt;/html&gt;
</pre>
<p><strong>common/_wizard.gsp</strong></p>
<pre>
  &lt;div id=&quot;wizard&quot; class=&quot;wizard&quot;&gt;
    &lt;h1&gt;Proof of concept AJAXified  Webflow Wizard&lt;/h1&gt;
    &lt;g:form action=&quot;pages&quot; name=&quot;_wizard&quot; &gt;
    &lt;div id=&quot;wizardPage&quot;&gt;
      &lt;g:render template=&quot;pages/one&quot;/&gt;
    &lt;/div&gt;
    &lt;div id=&quot;wizardError&quot; class=&quot;error&quot;/&gt;
    &lt;/g:form&gt;
  &lt;/div&gt;
</pre>
<p><strong>pages/_one.gsp</strong></p>
<pre>
...my form content for page 1...&lt;br /&gt;
&lt;my:ajaxButton name=&quot;next&quot; value=&quot;next &raquo;&quot; url=&quot;[controller:&#039;wizard&#039;,action:&#039;pages&#039;]&quot; update=&quot;[success:&#039;wizardPage&#039;,failure:&#039;wizardError&#039;]&quot; class=&quot;prevnext&quot; /&gt;
</pre>
<p><strong>pages/_two.gsp</strong></p>
<pre>
...my form content for page 2...&lt;br /&gt;
&lt;my:ajaxButton name=&quot;previous&quot; value=&quot;&laquo; prev&quot; url=&quot;[controller:&#039;wizard&#039;,action:&#039;pages&#039;]&quot; update=&quot;[success:&#039;wizardPage&#039;,failure:&#039;wizardError&#039;]&quot; class=&quot;prevnext&quot; /&gt;
</pre>
<p>As you can see, index.gsp will render default layout (add your CSS here) and renders common/_wizard.gsp. Wizard.gsp will, on it&#8217;s turn, render the first web flow template (pages/_one.gsp) which includes a form and the ajaxButton we created in the tag library above. This button will now use and Ajax call to submit to our webflow and execute the <em>on(&#8220;next&#8221;)</em> action in the pageOne part of our webflow, which will make the logic jump to the pageTwo part. Upon entry pageTwo will render pages/_two.gsp and return the rendered content to the Ajax call.</p>
<p>The ajaxButton contains update=&#8221;[success:'wizardPage'...]&#8221; which makes the Ajax call refresh the wizardPage div with the result of the Ajax call. Hence, the wizardPage div will now contain the rendered content of pages/_two.gsp with it&#8217;s own form.</p>
<p>Hence, we have Ajaxified our Grails webflow <img src='http://blog.osx.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.osx.eu/2010/01/18/ajaxifying-a-grails-webflow/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>What&#039;s that sound, I like that sound&#8230;</title>
		<link>http://blog.osx.eu/2009/09/22/just-take-off-your-shoes-youve-nothing-left-to-loose/</link>
		<comments>http://blog.osx.eu/2009/09/22/just-take-off-your-shoes-youve-nothing-left-to-loose/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 21:23:54 +0000</pubDate>
		<dc:creator>duh</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://blog.osx.eu/?p=1584</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.youtube.com/watch?v=lE2B8PfsvGk"><img src="http://img.youtube.com/vi/lE2B8PfsvGk/2.jpg"></a></p>
<p><a href="http://www.youtube.com/watch?v=lE2B8PfsvGk">Click here to view the video on YouTube</a>.</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.osx.eu/2009/09/22/just-take-off-your-shoes-youve-nothing-left-to-loose/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My New MacBook Pro</title>
		<link>http://blog.osx.eu/2009/08/26/my-new-macbook-pro/</link>
		<comments>http://blog.osx.eu/2009/08/26/my-new-macbook-pro/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 12:23:40 +0000</pubDate>
		<dc:creator>duh</dc:creator>
				<category><![CDATA[apple]]></category>

		<guid isPermaLink="false">http://blog.osx.eu/?p=1571</guid>
		<description><![CDATA[De nieuwe unibody MacBook Pro 3.06Ghz die ik 18 augustus heb besteld is in circa 2 dagen van Shanghai, via Polen en Duitsland vandaag bezorgd. Wat een mooi apparaat, hij voelt veel robuuster dan mijn oude MacBook Pro. Kan ook &#8230; <a href="http://blog.osx.eu/2009/08/26/my-new-macbook-pro/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>De nieuwe unibody MacBook Pro 3.06Ghz die ik 18 augustus heb besteld is in circa 2 dagen van Shanghai, via Polen en Duitsland vandaag bezorgd.</p>
<div id="attachment_1577" class="wp-caption aligncenter" style="width: 310px"><img src="/wp-content/uploads/2009/08/package-tracking.jpg" alt="Track n Trace" title="Track n Trace" width="300" height="405" class="size-full wp-image-1577" /><p class="wp-caption-text">Track n Trace</p></div>
<p>Wat een mooi apparaat, hij voelt veel robuuster dan mijn oude MacBook Pro. Kan ook haast niet anders aangezien de kast gefreesd is uit één blok aluminium. Ook is dit de eerste keer dat ik toch een glanzend scherm heb genomen, en ook dat is een prima keuze geweest. Nu nog even wachten op Snow Leopard voordat ik hem volledig ga installeren&#8230;</p>
<div id="attachment_1572" class="wp-caption aligncenter" style="width: 423px"><img src="/wp-content/uploads/2009/09/macbrookpro-unibody.jpg" alt="Unibody MacBook Pro 3.06Ghz" title="Unibody MacBook Pro 3.06Ghz" width="413" height="247" class="size-full wp-image-1572" /><p class="wp-caption-text">Unibody MacBook Pro 3.06Ghz</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.osx.eu/2009/08/26/my-new-macbook-pro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apple (doesn&#039;t) Care &#8211; deel 2</title>
		<link>http://blog.osx.eu/2009/08/24/apple-doesnt-care-deel-2/</link>
		<comments>http://blog.osx.eu/2009/08/24/apple-doesnt-care-deel-2/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 13:00:33 +0000</pubDate>
		<dc:creator>duh</dc:creator>
				<category><![CDATA[apple]]></category>

		<guid isPermaLink="false">http://blog.osx.eu/?p=1561</guid>
		<description><![CDATA[Naar aanleiding van mijn aangetekende brief werd ik vandaag teruggebeld door Katia Vanhauwaert van customer relations (Cork, Ireland). Katia, die zelf geregeld problemen heeft gehad met Apple&#8217;s WebObjects, vertelde me nogmaals dat het Apple niets voor me kan betekenen, ook &#8230; <a href="http://blog.osx.eu/2009/08/24/apple-doesnt-care-deel-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Naar aanleiding van mijn <a href="/2009/08/18/apple-doesnt-care/">aangetekende brief</a> werd ik vandaag teruggebeld door Katia Vanhauwaert van customer relations (Cork, Ireland). Katia, die zelf geregeld <a href="http://www.google.com/search?hl=en&#038;client=safari&#038;rls=en&#038;q=%22Katia+Vanhauwaert%22+AND+Apple&#038;aq=f&#038;oq=&#038;aqi=">problemen</a> heeft gehad met Apple&#8217;s WebObjects, vertelde me nogmaals dat het Apple niets voor me kan betekenen, ook al schrijft Apple zelf dat de NVIDIA 8600M GT spontaan kan overlijden en daar 3 jaar garantie op geeft.</p>
<p>Omdat ik sowieso twijfels had bij de kwaliteiten van het A Mac servicecenter (ze hebben alléén de Apple diagnostic software gedraaid en niet eens de moeite genomen om via screensharing mijn MBP nader te onderzoeken) adviseerde ze me mijn MacBook Pro aan te bieden bij een ander Apple Service center. Ik vertelde haar dat ik er weinig voor voelde om nogmaals € 85,- te gaan betalen om wederom te horen dat Apple niet thuis geeft.</p>
<p>Ze probeerde mijn negatieve arvaring af te kopen door een € 30,- voucher te sturen (die nota bene slechts 1 maand geldig is bij een aankoop van tenminste € 100,-). Wat denk je zelf Katia, dat ik nu opeens een positieve AppleCare ervaring heb? Los van &#8216;t feit dat ik dan nog steeds € 58,- in de min sta vind ik het een uitermate beroerde ervaring dat zowel <a href="http://theappleblog.com/2008/10/10/apple-officially-admits-to-faulty-nvidia-gpus/">Apple</a> als <a href="http://support.apple.com/kb/TS2377">NVIDIA</a> erkennen dat het inderdaad een probleem is, dat het in de media redelijk breek is uitgemeten dat <a href="http://www.tomshardware.com/news/nvidia-g84-g86-chips-overheating,6121.html">alle 8600M chips problemen vertonen</a>, dat Apple wereldkundig maakt dat het een probleem is maar dat ze het voor je oplossen als je er <a href="http://support.apple.com/kb/TS2377">binnen 3 jaar na aanschaf</a> last van krijgt, en áls je het dan daadwerkelijk hebt, dan geeft Apple niet thuis?!</p>
<p>Echt een ontzettend belabberde service Katia! Als geen problemen waren met deze chips en de nvidia chip houdt er mee op dan had ik er &#8216;vrede&#8217; mee (ook al vind ik dat je redelijkerwijs mag verwachten dat laptop van € 2400,- waar je behoorlijk voorzichtig mee omgaat er <em>niet</em> spontaan mee ophoud na net 2 jaar), maar nu het zowel door NVIDIA als Apple is erkend vind ik ook dat het moet worden opgelost. Vanwege deze beroerde service heb ik besloten deze slechte apple service ervaringen <a href="http://experience.osx.eu">op te schrijven</a> en op diverse fora te gaan plaatsen&#8230;</p>
<div id="attachment_1562" class="wp-caption aligncenter" style="width: 423px"><img src="/wp-content/uploads/2009/09/bad-apple.jpg" alt="Apple (Doesn&#039;t) Care" title="Apple (Doesn&#039;t) Care" width="413" class="size-full wp-image-1562" /><p class="wp-caption-text">Apple (Doesn't) Care</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.osx.eu/2009/08/24/apple-doesnt-care-deel-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pukkelpop 2009</title>
		<link>http://blog.osx.eu/2009/08/23/pukkelpop-2009/</link>
		<comments>http://blog.osx.eu/2009/08/23/pukkelpop-2009/#comments</comments>
		<pubDate>Sun, 23 Aug 2009 12:00:32 +0000</pubDate>
		<dc:creator>duh</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://blog.osx.eu/?p=1559</guid>
		<description><![CDATA[De afgelopen dagen even geen Apple en defecte MacBook Pro&#8217;s maar muziek in de brandende zon bij Pukkelpop 2009! Hoogtepunten: Faith No More, Them Crooked Vultures en de overvloed aan Drum &#8216;n Bass grootheden. Een kleine impressie:]]></description>
			<content:encoded><![CDATA[<p>De afgelopen dagen even geen Apple en defecte MacBook Pro&#8217;s maar muziek in de brandende zon bij Pukkelpop 2009! Hoogtepunten: Faith No More, <a href="/2009/08/09/them-crooked-vultures-pukkelpop-lowlands/">Them Crooked Vultures</a> en de overvloed aan Drum &#8216;n Bass grootheden. Een kleine impressie:</p>
<div id="attachment_1551" class="wp-caption aligncenter" style="width: 320px"><img src="/wp-content/uploads/2009/09/200820091050.jpg" alt="Nog schoon fris en fruitig bij Bert en Bobje" title="Bert &amp; Bobje" width="310" height="413" class="size-full wp-image-1551" /><p class="wp-caption-text">Nog schoon fris en fruitig bij Bert en Bobje</p></div>
<div id="attachment_1552" class="wp-caption aligncenter" style="width: 423px"><img src="/wp-content/uploads/2009/09/210820091061.jpg" alt="Friet mét" title="Friet mét" width="413" height="310" class="size-full wp-image-1552" /><p class="wp-caption-text">Friet mét</p></div>
<div id="attachment_1553" class="wp-caption aligncenter" style="width: 423px"><img src="/wp-content/uploads/2009/09/210820091063.jpg" alt="Radio Melinda was er ook" title="Radio Melinda was er ook" width="413" height="310" class="size-full wp-image-1553" /><p class="wp-caption-text">Radio Melinda was er ook</p></div>

<!-- YouTube Embed v2.5.2 | http://www.artiss.co.uk/artiss-youtube-embed -->
<!-- The YouTube ID of blo81VkSOX8 is invalid. -->
<p>The video cannot be shown at the moment. Please try again later.</p>
<!-- End of YouTube Embed code -->

<div id="attachment_1554" class="wp-caption aligncenter" style="width: 423px"><img src="/wp-content/uploads/2009/09/210820091066.jpg" alt="Marten en zijn dnb moves" title="Marten en zijn dnb moves" width="413" height="310" class="size-full wp-image-1554" /><p class="wp-caption-text">Marten en zijn dnb moves</p></div>

<!-- YouTube Embed v2.5.2 | http://www.artiss.co.uk/artiss-youtube-embed -->
<!-- The YouTube ID of EnT_BWg9JEk is invalid. -->
<p>The video cannot be shown at the moment. Please try again later.</p>
<!-- End of YouTube Embed code -->

<div id="attachment_1555" class="wp-caption aligncenter" style="width: 423px"><img src="/wp-content/uploads/2009/09/210820091067.jpg" alt="Stephke!" title="Stephke!" width="413" height="310" class="size-full wp-image-1555" /><p class="wp-caption-text">Stephke!</p></div>
<div id="attachment_1556" class="wp-caption aligncenter" style="width: 423px"><img src="/wp-content/uploads/2009/09/210820091068.jpg" alt="Bart, Jeroen en Sjoerd hebben heel andere dnb moves" title="Bart, Jeroen en Sjoerd hebben heel andere dnb moves" width="413" height="310" class="size-full wp-image-1556" /><p class="wp-caption-text">Bart, Jeroen en Sjoerd hebben heel andere dnb moves</p></div>
<div id="attachment_1557" class="wp-caption aligncenter" style="width: 423px"><img src="/wp-content/uploads/2009/09/220820091074.jpg" alt="Jurrasic Park" title="Jurrasic Park" width="413" height="310" class="size-full wp-image-1557" /><p class="wp-caption-text">Jurrasic Park</p></div>
<div id="attachment_1558" class="wp-caption aligncenter" style="width: 423px"><img src="/wp-content/uploads/2009/09/220820091076.jpg" alt="The Boiler Room" title="The Boiler Room" width="413" height="310" class="size-full wp-image-1558" /><p class="wp-caption-text">The Boiler Room</p></div>
<p><a href="http://www.youtube.com/watch?v=2GgH5R-rGII"><img src="http://img.youtube.com/vi/2GgH5R-rGII/2.jpg"></a></p>
<p><a href="http://www.youtube.com/watch?v=2GgH5R-rGII">Click here to view the video on YouTube</a>.</p>

<p><a href="http://www.youtube.com/watch?v=WYYdli0P8YI"><img src="http://img.youtube.com/vi/WYYdli0P8YI/2.jpg"></a></p>
<p><a href="http://www.youtube.com/watch?v=WYYdli0P8YI">Click here to view the video on YouTube</a>.</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.osx.eu/2009/08/23/pukkelpop-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apple (doesn&#039;t) Care</title>
		<link>http://blog.osx.eu/2009/08/18/apple-doesnt-care/</link>
		<comments>http://blog.osx.eu/2009/08/18/apple-doesnt-care/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 13:00:38 +0000</pubDate>
		<dc:creator>duh</dc:creator>
				<category><![CDATA[apple]]></category>

		<guid isPermaLink="false">http://blog.osx.eu/?p=1538</guid>
		<description><![CDATA[Nadat ik gisteren werd gebeld door het A Mac servicecenter dat mijn defecte MacBook Pro inderdaad een defecte videokaart had maar dat een programmatje van Apple zei dat mijn MacBook Pro níét onder de verlengde Apple garantie van 3 jaar &#8230; <a href="http://blog.osx.eu/2009/08/18/apple-doesnt-care/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Nadat ik gisteren werd gebeld door het A Mac servicecenter dat mijn <a href="/2009/08/06/macbook-reproratie/">defecte MacBook Pro</a> inderdaad een defecte videokaart had maar dat een programmatje van Apple zei dat mijn MacBook Pro níét onder de verlengde Apple garantie van 3 jaar viel (quote: <em>If the NVIDIA graphics processor in your MacBook Pro has failed, or fails within three years of the original date of purchase, a repair will be done free of charge, even if your MacBook Pro is out of warranty</em>) kon ik hem vandaag -na het betalen van € 85,- nutteloze onderzoekskosten- weer ophalen bij A Mac op de Mariaplaats in Utrecht. Bij mijn MacBook Pro zat -per ongeluk- een printout van de Apple test software:</p>
<blockquote><p>GPT Test Log<br />
Serial Number: W872xxxxxxG<br />
Eligible Graphics Processor Not Found &#8211; FAILED Error Code: 2<br />
vc: NVQ-fba5e521-02</p></blockquote>
<p>Hoezo eligible graphics processor not found?! Ik heb toch zeker een MacBook Pro uit de problematische serie mét de NVIDIA 8600M GT? Ik besloot mijn MacBook Pro dus zelf nog eens nader te onderzoeken en heb via <a href="http://www.apple.com/accessibility/voiceover/">Voice Over</a> (fn-cmd-F5) screen sharing en ssh aangezet. Via screen sharing kon ik mijn (voor de rest perfect werkende) MacBook Pro benaderen en in <a href="http://developer.apple.com/testing/systemprofiler.html">System Profiler</a> zag ik het volgende:</p>
<div id="attachment_1541" class="wp-caption aligncenter" style="width: 423px"><a rel="lightbox[systemprofiler]" href="/wp-content/uploads/2009/09/systemprofiler1.jpg"><img src="/wp-content/uploads/2009/09/systemprofiler1-413.jpg" alt="System Profiler - MacBook Pro 3,1 (2.4GHz)" title="System Profiler - Hardware" width="413" height="277" class="size-full wp-image-1541" /></a><p class="wp-caption-text">System Profiler - MacBook Pro 3,1 (2.4GHz)</p></div>
<div id="attachment_1542" class="wp-caption aligncenter" style="width: 423px"><a rel="lightbox[systemprofiler]" href="/wp-content/uploads/2009/09/systemprofiler2.jpg"><img src="/wp-content/uploads/2009/09/systemprofiler2-413.jpg" alt="System Profiler - Intel GMA X3100 ???" title="System Profile - Graphics" width="413" height="277" class="size-full wp-image-1542" /></a><p class="wp-caption-text">System Profiler - Intel GMA X3100 ???</p></div>
<p>Volgens de system zit er geen NVIDIA 8600M GT meer in mijn MacBook Pro, maar een Intel integrated GMA X3100? Vind je het gek dat hun diagnostische software de nvidia niet kan vinden? Nogmaals uitgebreid met Apple Care aan de telefoon gehangen, evenals A Mac, maar dat leverde wederom helemaal niets op, en dat terwijl zowel <a href="http://discussions.apple.com/thread.jspa?threadID=1478474&#038;start=0&#038;tstart=0">Apple&#8217;s eigen support fora</a> vol staan met honderden (en bij <a href="http://forums.macrumors.com/showthread.php?t=515067">macrumors</a> zelfs een kleine twee duizend) identieke ervaringen&#8230; Erg slechte service van Apple!</p>
<p>Omdat ik nu niet kan werken, Apple niet thuis geeft en ik tijdelijk de Powerbook G4 (traaaag) van mijn ouders heb geleend heb ik uiteindelijk maar besloten een nieuwe MacBook Pro te bestellen (ik heb nu dan wel een erg slechte Apple service ervaring, maar ben toch Apple hooked) en een aangetekende brief naar Apple te sturen waarbij ik ze in gebreke stel. Je moet wat&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.osx.eu/2009/08/18/apple-doesnt-care/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
