<?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>Michael Wolbert's Blog &#187; Development</title>
	<atom:link href="http://michaelwolbert.nl/blog/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://michaelwolbert.nl/blog</link>
	<description></description>
	<lastBuildDate>Thu, 06 May 2010 12:44:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Protected: WP7 Internal screencast</title>
		<link>http://michaelwolbert.nl/blog/2010/05/wp7-internal-screencast/</link>
		<comments>http://michaelwolbert.nl/blog/2010/05/wp7-internal-screencast/#comments</comments>
		<pubDate>Thu, 06 May 2010 12:38:23 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[WP7]]></category>

		<guid isPermaLink="false">http://michaelwolbert.nl/blog/?p=213</guid>
		<description><![CDATA[There is no excerpt because this is a protected post.]]></description>
			<content:encoded><![CDATA[<form action="http://michaelwolbert.nl/blog/wp-pass.php" method="post">
<p>This post is password protected. To view it please enter your password below:</p>
<p><label for="pwbox-213">Password:<br />
<input name="post_password" id="pwbox-213" type="password" size="20" /></label><br />
<input type="submit" name="Submit" value="Submit" /></p></form>
]]></content:encoded>
			<wfw:commentRss>http://michaelwolbert.nl/blog/2010/05/wp7-internal-screencast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hijacking HTTP headers starring Vodafone</title>
		<link>http://michaelwolbert.nl/blog/2009/09/hijacking-http-headers-starring-vodafone/</link>
		<comments>http://michaelwolbert.nl/blog/2009/09/hijacking-http-headers-starring-vodafone/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 08:35:48 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Smarty]]></category>
		<category><![CDATA[Vodafone]]></category>
		<category><![CDATA[WURFL]]></category>

		<guid isPermaLink="false">http://michaelwolbert.nl/blog/?p=204</guid>
		<description><![CDATA[Currently I&#8217;m working on a mobile website and I&#8217;m in the midst of some pain-in-the-arse compatibility issues on page rendering on multiple handsets. I ran across WURFL (Wireless Universal Resource FiLe) , a project which can help you detect a device and to retrieve its device specific properties. WURFL models the properties of wireless/mobile devices [...]]]></description>
			<content:encoded><![CDATA[<p>Currently I&#8217;m working on a mobile website and I&#8217;m in the midst of some pain-in-the-arse compatibility issues on page rendering on multiple handsets. I ran across <a href="http://wurfl.sourceforge.net/" target="_self">WURFL</a> (<strong>W</strong>ireless <strong>U</strong>niversal <strong>R</strong>esource <strong>F</strong>i<strong>L</strong>e) , a project which can help you detect a device and to retrieve its device specific properties. WURFL models the properties of wireless/mobile devices in a 13mb XML file.</p>
<p>Next to that there are a lot of APIs (<a href="http://www.tera-wurfl.com/" target="_self">TERA-WURFL PHP</a>, <a href="http://www.madagasgar.com/wurfl/">WURFL-PHP</a>, WURFL-Java, WURFL-.NET and WURFL-Perl). I&#8217;m using the TERA-WURFL PHP API since I&#8217;m also fond of the <a href="http://smarty.net" target="_self">Smarty template engine</a>. :-)</p>
<p><strong>How it works<br />
<span style="font-weight: normal;">The WURFL-PHP API uses a mysql instance to store device specific properties. </span></strong>A caching mechanisms works on top of the mysql instance to enable lightning fast queries on the database.</p>
<p>By querying the device table (11,000+ rows) using $_SERVER['HTTP_USER_AGENT'], we can now retrieve our device screen width capability:</p>
<pre>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;"><span class="re0">$width</span> = <span class="re0">$wurfl</span>-&amp;gt;getCapa<span class="br0">&#40;</span><span class="st0">'resolution_width'</span><span class="br0">&#41;</span>; <span class="co1">// get width capability</span></div>
</div>
</pre>
<p>All capabilities can be found at WURFL&#8217;s documentation: <a href="http://wurfl.sourceforge.net/help_doc.php">http://wurfl.sourceforge.net/help_doc.php</a>.</p>
<p><strong>Back to Vodafone:<br />
<span style="font-weight: normal;">Ok, so why does Vodafone suck?</span></strong></p>
<p><strong><span style="font-weight: normal;">Well, it is all about Vodafone&#8217;s reformatting proxy. A what? Yeah, a reformatting proxy. Vodafone uses reformatting proxies to reformat a page to display only the content of interest (ie. article text, article thumbnail, <strong>no</strong> layout). This comes in handy when a website doesn&#8217;t have a mobile design; think about reading <a href="http://slashdot.org/" target="_self">Slashdot</a> without a reformat. However, many websites have a mobile specific website nowadays, which leads to better user experience, since reformatted pages are mostly completely stripped down. The big problem in this case is that Vodafone&#8217;s reformatting proxy changes crucial HTTP headers..</span></strong></p>
<ul>
<li>A normal request from a mobile phone:
<pre>HTTP_USER_AGENT =&gt; Nokia6288/2.0 (05.92) Profile/MIDP-2.0 Configuration/CLDC-1.1
HTTP_X_WAP_PROFILE =&gt; "http://nds1.nds.nokia.com/uaprof/N6288r100.xml"</pre>
</li>
<li>Vodaphone&#8217;s reformatting proxy&#8217;s request:
<pre>HTTP_USER_AGENT =&gt; = Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/
Firefox/1.5.0.7 MG (Novarra-Vision/6.1)
HTTP_X_DEVICE_USER_AGENT =&gt; Nokia6288/2.0 (05.94) Profile/MIDP-2.0 Configuration/CLDC-1.1</pre>
</li>
</ul>
<p>The reformat proxy changed the HTTP_USER_AGENT header to a desktop browser version [sigh]. HTTP_X_DEVICE_USER_AGENT is a non-standard HTTP header. Hijacking HTTP headers is great sport, way to go Vodafone! Is this just as bad as <a href="http://michaelwolbert.nl/blog/2008/09/free-magenta-from-these-evil-minds-at-t-mobile/" target="_self">claiming a color</a>?</p>
<p><strong>References:</strong></p>
<ul>
<li><a href="http://wurfl.sourceforge.net/vodafonerant/">http://wurfl.sourceforge.net/</a></li>
<li><a href="http://wurfl.sourceforge.net/vodafonerant/">http://wurfl.sourceforge.net/vodafonerant/</a></li>
<li><a href="http://www.betavine.net/bvportal/forums/index.html?threadId=207&amp;postPage=6">http://www.betavine.net/bvportal/forums/index.html?threadId=207&amp;postPage=6</a></li>
<li><a href="http://wapple.net/press-releases/33/vodafone-misses-the-point-of-the-mobile-internet.htm">http://wapple.net/press-releases/33/vodafone-misses-the-point-of-the-mobile-internet.htm</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://michaelwolbert.nl/blog/2009/09/hijacking-http-headers-starring-vodafone/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Preparing for a trip to Seattle</title>
		<link>http://michaelwolbert.nl/blog/2009/06/preparing-for-a-trip-to-seattle/</link>
		<comments>http://michaelwolbert.nl/blog/2009/06/preparing-for-a-trip-to-seattle/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 10:37:16 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Microsoft Oslo]]></category>
		<category><![CDATA[Study]]></category>
		<category><![CDATA[Travel]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Redmond]]></category>
		<category><![CDATA[SDR]]></category>
		<category><![CDATA[Seattle]]></category>
		<category><![CDATA[trip]]></category>

		<guid isPermaLink="false">http://michaelwolbert.nl/blog/?p=200</guid>
		<description><![CDATA[Hi there! My bachelor project is almost coming to an end: time to graduate! Friday the 26nd of June I have to defend my thesis at the Hogeschool Utrecht. In the meantime I&#8217;ll be heading to Seattle to attend an &#8220;Oslo&#8221; Software Design Review (SDR) from June 19th till 24th which I got invited to [...]]]></description>
			<content:encoded><![CDATA[<p>Hi there! My <a href="http://michaelwolbert.nl/blog/2009/01/been-a-while/" target="_self">bachelor project</a> is almost coming to an end: time to graduate! Friday the 26nd of June I have to defend my thesis at the Hogeschool Utrecht. In the meantime I&#8217;ll be heading to <a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=seattle&amp;sll=47.619891,-122.334523&amp;sspn=0,359.973435&amp;g=2301+8TH+AVENUE,+SEATTLE&amp;ie=UTF8&amp;ll=47.606163,-122.34375&amp;spn=24.861096,54.404297&amp;z=5&amp;iwloc=A" target="_self">Seattle</a> to attend an &#8220;Oslo&#8221; Software Design Review (SDR) from June 19th till 24th which I got invited to by Microsoft. At this event I&#8217;ll be discussing experiences I had during the development of a prototype for my bachelor project at <a href="http://avanade.com" target="_blank">Avanade</a>.</p>
<div class="wp-caption aligncenter" style="width: 346px"><img title="Seattle Skyline" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/17/Seattle_skyline_night.jpg/800px-Seattle_skyline_night.jpg" alt="" width="336" height="249" /><p class="wp-caption-text">Seattle skyline</p></div>
<p style="text-align: center;">
<p>Next to this event I have some time off to go to <a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=olympic+national+park&amp;sll=37.579413,-95.712891&amp;sspn=57.196548,108.808594&amp;ie=UTF8&amp;ll=47.652438,-123.266602&amp;spn=1.550452,3.400269&amp;z=9" target="_self">Olympic National Park</a>; roam downtown Seattle and have a look on how the American Dream is lived. Or do you have to be asleep to believe it?</p>
<p style="text-align: left;"><em>The reason they call it the American Dream is because you have to be asleep to believe it.</em><br />
- <a href="http://www.youtube.com/watch?v=acLW1vFO-2Q" target="_blank">George Carlin</a></p>
<p>Hang around for photos! :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelwolbert.nl/blog/2009/06/preparing-for-a-trip-to-seattle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using a Makefile to launch Oslo&#8217;s executables from Intellipad</title>
		<link>http://michaelwolbert.nl/blog/2009/03/using-a-makefile-to-launch-oslos-executables-from-intellipad/</link>
		<comments>http://michaelwolbert.nl/blog/2009/03/using-a-makefile-to-launch-oslos-executables-from-intellipad/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 15:30:17 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Microsoft Oslo]]></category>
		<category><![CDATA[Study]]></category>
		<category><![CDATA[Intellipad]]></category>
		<category><![CDATA[Makefile]]></category>
		<category><![CDATA[MGrammar]]></category>

		<guid isPermaLink="false">http://michaelwolbert.nl/blog/?p=178</guid>
		<description><![CDATA[In my previous post I mentioned Bryan Sumter&#8217;s GUI tool, which executes the right command from the configuration of the GUI. Sometimes I love my keyboard more than I love my mouse, so I decided to have a try on integrating the tool&#8217;s functionality into Intellipad using a Makefile to configure the commands. (Scroll down [...]]]></description>
			<content:encoded><![CDATA[<p>In my <a href="http://michaelwolbert.nl/blog/2009/03/oslotool-a-gui-on-top-of-mexe-mxexe-mgexe-and-mgxexe/" target="_self">previous</a> post I mentioned Bryan Sumter&#8217;s GUI tool, which executes the right command from the configuration of the GUI. Sometimes I love my keyboard more than I love my mouse, so I decided to have a try on integrating the tool&#8217;s functionality into Intellipad using a Makefile to configure the commands. (Scroll down for download!)</p>
<p><strong>Developing:<br />
</strong>First of a snippet from the input Makefile:</p>
<pre>
<div class="codesnip-container" >######################################
# m builds
+m #executable
    @All #target
        files 	= m\*.m
	out	= bin\mx\Image.mx
	package = Image

    @AllToRepository
	files 	= m\*.m
	out	= bin\sql\ImageRep.sql
	target 	= Repository

    @AllToTsql
	files 	= m\*.m
	out	= bin\sql\ImageTsql.sql
	target	= Tsql10</div>
</pre>
<p>After specifying the input file, we continue..</p>
<ul>
<li><strong>Create MGrammar</strong> to parse Makefile to a graph.</li>
<li><strong>Compile MGrammar</strong> to Mgx or MgxResource to use in the runtime.</li>
<li><strong>Build a runtime</strong>: at first I wanted to build a runtime in Intellipads scriptengine (IronPython), but I encountered errors on DynamicParser.Parse(), which I couldn&#8217;t resolve. Since IronPython was no use for me at the moment, I used the .NET 3.5 Console Application (<em>mmake.exe &lt;executable&gt;.&lt;target&gt;</em>) to parse the graph and execute the build command with the proper parameters from the graph.</li>
<li><strong>Create a new Minibuffer command</strong> in IronPython which takes a <em>&lt;executable&gt;.&lt;target&gt;</em> as parameter (eg m.All). A new process will be created to call <em>mmake.exe m.All</em> and its stdout will be redirected to a new BufferView in Intellipad.</li>
</ul>
<p><strong>Python Magic</strong></p>
<p>FindHelper.py</p>
<pre>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;"><span class="kw1">from</span> Microsoft.<span class="me1">Intellipad</span>.<span class="me1">Host</span> <span class="kw1">import</span> HostWindow
<span class="kw1">from</span> System.<span class="me1">Windows</span> <span class="kw1">import</span> MessageBox, MessageBoxButton, MessageBoxImage
<span class="kw1">from</span> System.<span class="me1">Diagnostics</span> <span class="kw1">import</span> Process, ProcessStartInfo
<span class="kw1">from</span> System.<span class="me1">IO</span> <span class="kw1">import</span> Directory, Path
...
<span class="kw1">def</span> BuildImpl<span class="br0">&#40;</span>activeView, target<span class="br0">&#41;</span>:
&nbsp; &nbsp; filePath = GetFriendlyFilePath<span class="br0">&#40;</span>activeView.<span class="me1">Buffer</span>.<span class="me1">Uri</span>.<span class="me1">AbsolutePath</span><span class="br0">&#41;</span> &nbsp; &nbsp;

&nbsp; &nbsp; <span class="kw1">if</span> filePath.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&quot;Makefile&quot;</span><span class="br0">&#41;</span> &gt;= <span class="nu0">0</span>:
&nbsp; &nbsp; &nbsp; &nbsp; hostWindow = HostWindow.<span class="me1">GetHostWindowForBufferView</span><span class="br0">&#40;</span>activeView<span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; buildBuffer = Common.<span class="me1">BufferManager</span>.<span class="me1">GetBuffer</span><span class="br0">&#40;</span>System.<span class="me1">Uri</span><span class="br0">&#40;</span><span class="st0">'transient://build'</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; Common.<span class="me1">Clear</span><span class="br0">&#40;</span>buildBuffer<span class="br0">&#41;</span>

&nbsp; &nbsp; &nbsp; &nbsp; view = Common.<span class="me1">GetView</span><span class="br0">&#40;</span>hostWindow, buildBuffer<span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> view <span class="kw1">is</span> <span class="kw2">None</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hostWindow.<span class="me1">ShowInRoot</span><span class="br0">&#40;</span>buildBuffer, <span class="nu0">40.0</span><span class="br0">&#41;</span>

&nbsp; &nbsp; &nbsp; &nbsp; fileDir = Path.<span class="me1">GetDirectoryName</span><span class="br0">&#40;</span>filePath<span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span>exitCode, stdout, stderr<span class="br0">&#41;</span> = RunBuildCommand<span class="br0">&#40;</span><span class="st0">&quot;mmake&quot;</span>, fileDir, target<span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; Common.<span class="me1">Write</span><span class="br0">&#40;</span>buildBuffer, stdout + <span class="st0">&quot;<span class="es0">\n</span>&quot;</span> + stderr<span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">else</span>:
&nbsp; &nbsp; &nbsp; &nbsp; message = <span class="st0">&quot;Error: Makefile needs to be in the active buffer.&quot;</span>
&nbsp; &nbsp; &nbsp; &nbsp; MessageBox.<span class="me1">Show</span><span class="br0">&#40;</span>message, IntellipadMessageBoxTitle , MessageBoxButton.<span class="me1">OK</span>,
&nbsp;MessageBoxImage.<span class="me1">Information</span><span class="br0">&#41;</span>

<span class="kw1">def</span> GetFriendlyFilePath<span class="br0">&#40;</span>fileUri<span class="br0">&#41;</span>:
&nbsp; &nbsp; path = <span class="kw2">str</span><span class="br0">&#40;</span>fileUri<span class="br0">&#41;</span>.<span class="me1">replace</span><span class="br0">&#40;</span><span class="st0">'%20'</span>, <span class="st0">' '</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">return</span> path.<span class="me1">replace</span><span class="br0">&#40;</span><span class="st0">'/'</span>, <span class="st0">'<span class="es0">\\</span>'</span><span class="br0">&#41;</span>

<span class="kw1">def</span> RunBuildCommand<span class="br0">&#40;</span><span class="kw3">cmd</span>, <span class="kw3">pwd</span>, args<span class="br0">&#41;</span>:
&nbsp; &nbsp; processStartInfo = ProcessStartInfo<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; processStartInfo.<span class="me1">WorkingDirectory</span> = <span class="kw3">pwd</span>
&nbsp; &nbsp; processStartInfo.<span class="me1">FileName</span> = <span class="kw3">cmd</span>
&nbsp; &nbsp; processStartInfo.<span class="me1">Arguments</span> = args
&nbsp; &nbsp; processStartInfo.<span class="me1">UseShellExecute</span> = <span class="kw2">False</span>
&nbsp; &nbsp; processStartInfo.<span class="me1">RedirectStandardOutput</span> = <span class="kw2">True</span>
&nbsp; &nbsp; processStartInfo.<span class="me1">RedirectStandardError</span> = <span class="kw2">True</span>

&nbsp; &nbsp; process = Process<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; process.<span class="me1">StartInfo</span> = processStartInfo
&nbsp; &nbsp; process.<span class="me1">Start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; process.<span class="me1">WaitForExit</span><span class="br0">&#40;</span><span class="br0">&#41;</span>

&nbsp; &nbsp; stdout = process.<span class="me1">StandardOutput</span>.<span class="me1">ReadToEnd</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; stderr = process.<span class="kw2">StandardError</span>.<span class="me1">ReadToEnd</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">return</span> process.<span class="me1">ExitCode</span>, stdout, stderr</div>
</div>
</pre>
<p>MiniBufferCommandSetup.py</p>
<pre>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;"><span class="kw1">def</span> Build<span class="br0">&#40;</span>target<span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; FindHelper.<span class="me1">BuildImpl</span><span class="br0">&#40;</span>MiniBufferHelper.<span class="me1">GetActiveView</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, target<span class="br0">&#41;</span></div>
</div>
</pre>
<p><strong>Running the Makefile:<br />
</strong>When I use Intellipad to work on my grammars and models, I have the following directory setup:</p>
<p><a href="http://michaelwolbert.nl/blog/wp-content/uploads/2009/03/projectdir.jpg"><img class="size-medium wp-image-181 aligncenter" title="projectdir" src="http://michaelwolbert.nl/blog/wp-content/uploads/2009/03/projectdir-262x300.jpg" alt="" width="206" height="236" /></a></p>
<p>Now open up the Makefile in Intellipad:<br />
<span style="color: #ff0000;">Note: All paths specified in the Makefile are relative to the path of the Makefile.</span></p>
<p style="text-align: center;"><a href="http://michaelwolbert.nl/blog/wp-content/uploads/2009/03/makefilemanytomany.jpg"><img class="size-medium wp-image-182 aligncenter" title="makefilemanytomany" src="http://michaelwolbert.nl/blog/wp-content/uploads/2009/03/makefilemanytomany-300x167.jpg" alt="" width="329" height="182" /></a></p>
<p>Hit Ctrl+/ to bring up the Minibuffer and type: Build(&#8217;&lt;executable&gt;.&lt;target&gt;&#8217;)<br />
<span style="color: #ff0000;">Note: Intellipad needs to know what directory the Makefile is in, so the Makefile buffer should be active (selected) before bringing up the Minibuffer.</span></p>
<p style="text-align: center;"><a href="http://michaelwolbert.nl/blog/wp-content/uploads/2009/03/minibufferbuildcommand.jpg"><img class="size-medium wp-image-183 aligncenter" title="minibufferbuildcommand" src="http://michaelwolbert.nl/blog/wp-content/uploads/2009/03/minibufferbuildcommand-300x168.jpg" alt="" width="326" height="181" /></a></p>
<p>Command will run and output to a new BufferView:</p>
<p style="text-align: center;"><a href="http://michaelwolbert.nl/blog/wp-content/uploads/2009/03/commandexecuted.jpg"><img class="size-medium wp-image-185 aligncenter" title="commandexecuted" src="http://michaelwolbert.nl/blog/wp-content/uploads/2009/03/commandexecuted-300x168.jpg" alt="" width="330" height="184" /></a></p>
<p><strong><br />
Download:<br />
</strong></p>
<ul>
<li><a href="http://michaelwolbert.nl/projects/Oslo/mmake/project_sample.zip" target="_self">Sample project directory</a> (Makefile and samples from Oslo SDK 1.0 for sample builds).</li>
<li><a href="http://michaelwolbert.nl/projects/Oslo/mmake/mmake-0.1.zip" target="_self">mmake</a> (1 runtime, 1 mgx and 2 .py): <span style="color: #ff0000;">Extract archive in %PATH_TO_OSLO_SDK%\Bin</span></li>
</ul>
<p><span style="color: #ff0000;"><span style="color: #000000;"><strong>Install notes:<br />
</strong></span></span></p>
<ul>
<li><span style="color: #ff0000;">Add </span><span style="color: #ff0000;">%PATH_TO_OSLO_SDK%\Bin to system var: PATH</span></li>
<li>Backup .py files in case Intellipad stops working: FindHelper.py and MiniBufferCommandSetup.<br />
<span style="color: #000000;">%PATH_TO_OSLO_SDK%\</span>Bin\Intellipad\FindHelper.py<br />
<span style="color: #000000;">%PATH_TO_OSLO_SDK%\</span>Bin\Intellipad\Components\Microsoft.Intellipad.Scripting\PrivateScripts</li>
<li>Write permission errors on %PATH_TO_OSLO_SDK%: fix directory settings.</li>
</ul>
<p><strong>What&#8217;s next?</strong></p>
<ul>
<li>Hyperlinks on buildtargets in Intellipad: click to compile.</li>
<li>Resolving IronPython issues with DynamicParser.Parse().</li>
<li>Build a horizontal DSL instead of a vertical DSL for Makefiles.</li>
</ul>
<p><strong>Bugs and errors:<br />
</strong>Post bugs or suggestions in the comments or drop me a line via email. :-)</p>
<p><strong>References:</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/Intellipad/" target="_self">http://blogs.msdn.com/Intellipad/</a></li>
<li><a href="http://www.ironpython.info/index.php/Contents" target="_self">http://www.ironpython.info/index.php/Contents</a></li>
<li><a href="http://www.sellsbrothers.com/news/showTopic.aspx?ixTopic=2256">http://www.sellsbrothers.com/news/showTopic.aspx?ixTopic=2256</a></li>
</ul>
<p><span style="color: #ff0000;"><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://michaelwolbert.nl/blog/2009/03/using-a-makefile-to-launch-oslos-executables-from-intellipad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OsloTool, a GUI on top of m.exe, mx.exe, mg.exe and mgx.exe</title>
		<link>http://michaelwolbert.nl/blog/2009/03/oslotool-a-gui-on-top-of-mexe-mxexe-mgexe-and-mgxexe/</link>
		<comments>http://michaelwolbert.nl/blog/2009/03/oslotool-a-gui-on-top-of-mexe-mxexe-mgexe-and-mgxexe/#comments</comments>
		<pubDate>Fri, 06 Mar 2009 14:23:27 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Microsoft Oslo]]></category>
		<category><![CDATA[M]]></category>
		<category><![CDATA[MGrammar]]></category>
		<category><![CDATA[MSchema]]></category>

		<guid isPermaLink="false">http://michaelwolbert.nl/blog/?p=171</guid>
		<description><![CDATA[Bryan Sumter wrote a cool GUI to compile our grammars and models:


Dear readers,
I&#8217;ve been working on a small project called &#8220;OsloTool&#8221; and I thought it would be best to share this with the rest of the Oslo developers. It saved me a lot of time developing Oslo applications.
Basically it&#8217;s a Graphical User Interface on top [...]]]></description>
			<content:encoded><![CDATA[<p>Bryan Sumter wrote a cool GUI to compile our grammars and models:</p>
<p><a href="http://michaelwolbert.nl/blog/wp-content/uploads/2009/03/oslotool.jpg"><img class="alignnone size-full wp-image-172" title="OsloTool" src="http://michaelwolbert.nl/blog/wp-content/uploads/2009/03/oslotool.jpg" alt="" width="500" height="413" /></a></p>
<p><em><br />
Dear readers,</em></p>
<p><em>I&#8217;ve been working on a small project called &#8220;OsloTool&#8221; and I thought it would be best to share this with the rest of the Oslo developers. It saved me a lot of time developing Oslo applications.</em></p>
<p><em>Basically it&#8217;s a Graphical User Interface on top of the commandline tools: mg.exe, mgx.exe, m.exe and mx.exe. Untill Microsoft Implements build-options into IntelliPad u can use this (if you hate commandline as much as I do).</em></p>
<p><em>I&#8217;ll post the source as well, so you can modify and maybe even expand it.</em></p>
<p><em>Screenshot:<br />
http://img9.imageshack.us/img9/1353/oslotool.jpg</em></p>
<p><em>Download:<br />
http://michaelwolbert.nl/projects/Oslo/OsloTool.zip (thanks to my dear colleague and friend, Michael Wolbert)</em></p>
<p><em>Mirror:<br />
http://www.zshare.net/download/56614958a3fce0d5/</em></p>
<p><em>Note:<br />
In &#8220;Commands.cs&#8221; there is this line of code which specifies Oslo Directory:<br />
static string OsloDirectory = &#8220;C:/program files/microsoft oslo sdk 1.0&#8243;;</em></p>
<p><em>If you got any questions concerning OsloTool feel free to leave a message!</em></p>
<p><em>Greeting,<br />
Bryan Sumter<br />
</em></p>
<p><a href="http://social.msdn.microsoft.com/Forums/en-US/oslo/thread/31856f60-1924-4c2c-836c-17664e1302e6">Oslo MSDN Community post</a></p>
<p>Grab the executable and source <a href="http://michaelwolbert.nl/projects/Oslo/OsloTool.zip">here</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelwolbert.nl/blog/2009/03/oslotool-a-gui-on-top-of-mexe-mxexe-mgexe-and-mgxexe/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>World&#8217;s most tiny blogparser written in MGrammar</title>
		<link>http://michaelwolbert.nl/blog/2009/03/worlds-most-tiny-blogparser-written-in-mgrammar/</link>
		<comments>http://michaelwolbert.nl/blog/2009/03/worlds-most-tiny-blogparser-written-in-mgrammar/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 16:50:16 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Microsoft Oslo]]></category>
		<category><![CDATA[Study]]></category>
		<category><![CDATA[Avanade]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[MGrammar]]></category>
		<category><![CDATA[Model Driven Software Development]]></category>

		<guid isPermaLink="false">http://michaelwolbert.nl/blog/?p=159</guid>
		<description><![CDATA[My first small parser I&#8217;ve written in MGrammar. Nothing fancy though..
I&#8217;ve defined the way I&#8217;d like to create my blogs, posts and blogrolls in a textual way:

Blog
    With Title OsloBlog
    Section Posts
        Post With Title MGrammar And Desc MGrammar
    [...]]]></description>
			<content:encoded><![CDATA[<p>My first small parser I&#8217;ve written in <a href="http://msdn.microsoft.com/en-us/library/dd129869.aspx" target="_self">MGrammar</a>. Nothing fancy though..</p>
<p>I&#8217;ve defined the way I&#8217;d like to create my blogs, posts and blogrolls in a textual way:</p>
<pre>
<div class="codesnip-container" >Blog
    With Title OsloBlog
    Section Posts
        Post With Title MGrammar And Desc MGrammar
        Post With Title Quadrant And Desc Quadrant
    End Section
    Section Blogroll
        Link With Title Oslo And Url http://microsoft.com
        Link With Title Michael And Url http://michaelwolbert.nl
    End Section
End Blog
Blog
    With Title MichaelBlog
    Section Posts
        Post With Title Avanade And Desc Ava
        Post With Title Testing123 And Desc Testing123456789
    End Section
End Blog</div>
</pre>
<p>With our grammar (parser) we can now create projections of our textual DSL:</p>
<pre>
<div class="codesnip-container" >Blog[
    Title[
      "MichaelBlog"
    ],
    Sections[
      Posts[
        Post[
          Title[
            "Avanade"
          ],
          Desc[
            "Ava"
          ]
        ],
        Post[
          Title[
            "Testing123"
          ],
          Desc[
            "Testing123456789"
          ]
        ]
      ]
    ]
  ]</div>
</pre>
<p>Next step would be to push this projections to Oslo&#8217;s repository (just a plain ol&#8217; SQL 2008 database), so a runtime can access it. We could also create a runtime which uses a set of classes to parse our textual DSL directly to the runtime. But that will be covered later on.</p>
<p>See this <a href="http://michaelwolbert.nl/blog/wp-content/uploads/2009/03/mgrammarblog.jpg" target="_self">Intellipad screenshot</a> for the textual DSL, the MGrammar and the projections (from L to R).</p>
<p>Some nice samples can be found in the <a href="http://msdn.microsoft.com/en-us/oslo/cc749619.aspx" target="_self">&#8220;M&#8221; Language Gallery</a>. Especially <a href="http://www.infoq.com/articles/natural-language-date-dsl-oslo">Natural Language Dates</a> has some good pointers to get started.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelwolbert.nl/blog/2009/03/worlds-most-tiny-blogparser-written-in-mgrammar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Second video of Bangalore online!</title>
		<link>http://michaelwolbert.nl/blog/2008/11/second-video-of-bangalore-online/</link>
		<comments>http://michaelwolbert.nl/blog/2008/11/second-video-of-bangalore-online/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 07:41:57 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[Study]]></category>
		<category><![CDATA[Travel]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Bangalore]]></category>
		<category><![CDATA[India]]></category>
		<category><![CDATA[trip]]></category>

		<guid isPermaLink="false">http://michaelwolbert.nl/blog/?p=128</guid>
		<description><![CDATA[Once again credits go out to Bart Boonstra!

]]></description>
			<content:encoded><![CDATA[<p>Once again credits go out to <a href="http://www.bartboonstra.nl/2008/11/bangalore-deel-3-video/" target="_blank">Bart Boonstra</a>!</p>
<p style="text-align: center;"><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/idPAO9wJ_XY&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/idPAO9wJ_XY&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://michaelwolbert.nl/blog/2008/11/second-video-of-bangalore-online/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting ready for my trip to Bangalore, India</title>
		<link>http://michaelwolbert.nl/blog/2008/10/getting-ready-for-my-trip-to-bangalore-india/</link>
		<comments>http://michaelwolbert.nl/blog/2008/10/getting-ready-for-my-trip-to-bangalore-india/#comments</comments>
		<pubDate>Fri, 31 Oct 2008 21:43:26 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[Study]]></category>
		<category><![CDATA[Travel]]></category>
		<category><![CDATA[Bangalore]]></category>
		<category><![CDATA[India]]></category>

		<guid isPermaLink="false">http://michaelwolbert.nl/blog/?p=85</guid>
		<description><![CDATA[Next Sunday I&#8217;ll be of to Bangalore for a project about outsourcing to India and Indian culture(s). I&#8217;ll try to keep you guys informed about this wonderful experience.
I recently hooked up my Flickraccount to my blog. I&#8217;ll probably upload some photos every now and then.
See you soon!
]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" style="margin: 10px;" title="India Flag" src="http://www.britishcouncil.org.br/champions/blog/upload/06052008074302_India_flag.gif" alt="" width="54" height="36" />Next Sunday I&#8217;ll be of to <a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;geocode=&amp;q=Bangalore,+Bengaluru,+Karnataka,+India&amp;sll=37.0625,-95.677068&amp;sspn=34.396866,79.101563&amp;ie=UTF8&amp;ll=14.774883,77.607422&amp;spn=20.882687,39.550781&amp;z=5" target="_self">Bangalore</a> for a <a href="http://michaelwolbert.nl/blog/2008/10/minor-site-has-been-launched/" target="_self">project</a> about outsourcing to India and Indian culture(s). I&#8217;ll try to keep you guys informed about this wonderful experience.</p>
<p>I recently hooked up my <a href="http://flickr.com/photos/29644524@N02/" target="_self">Flickraccount</a> to my blog. I&#8217;ll probably upload some photos every now and then.</p>
<p>See you soon!</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelwolbert.nl/blog/2008/10/getting-ready-for-my-trip-to-bangalore-india/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ULab 1.0 Silverlight case published in .NET Magazine</title>
		<link>http://michaelwolbert.nl/blog/2008/10/ulab-10-silverlight-case-published-in-net-magazine/</link>
		<comments>http://michaelwolbert.nl/blog/2008/10/ulab-10-silverlight-case-published-in-net-magazine/#comments</comments>
		<pubDate>Tue, 07 Oct 2008 15:13:15 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Study]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[.NET Magazine]]></category>
		<category><![CDATA[ULab]]></category>

		<guid isPermaLink="false">http://michaelwolbert.nl/blog/?p=60</guid>
		<description><![CDATA[Our Silverlight case has recenlty been published in the .NET Magazine of the Benelux (Belgium, the Netherlands and Luxembourg). We got ourselfs a covershot!
Full article (PDF alert, 3.5mb).
]]></description>
			<content:encoded><![CDATA[<p>Our <a href="http://michaelwolbert.nl/blog/2008/09/ulab-10/" target="_self">Silverlight case</a> has recenlty been published in the .NET Magazine of the Benelux (Belgium, the Netherlands and Luxembourg). We got ourselfs a covershot!</p>
<div id="attachment_61" class="wp-caption aligncenter" style="width: 211px"><img class="size-medium wp-image-61" title="dotnetmagazine_cover" src="http://michaelwolbert.nl/blog/wp-content/uploads/2008/10/dotnetmagazine_cover-201x300.jpg" alt="Front row left to right: Pieter Brinkman (Software Developer), Dennis Van Baalen (Manager Software Development), Herbert Pesch (Owner of Evident Interactive); back row left to right: me, Bryan Sumter, Ruben De Gooijer" width="201" height="300" /><p class="wp-caption-text">Front row left to right: Pieter Brinkman (Software Developer), Dennis Van Baalen (Manager Software Development), Herbert Pesch (Owner of Evident Interactive); back row left to right: me, Bryan Sumter, Ruben De Gooijer</p></div>
<p><a href="http://www.evident.nl/ulab/includes/img/assets/dotNETmagazine.pdf" target="_blank">Full article</a> (PDF alert, 3.5mb).</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelwolbert.nl/blog/2008/10/ulab-10-silverlight-case-published-in-net-magazine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ULab 1.0</title>
		<link>http://michaelwolbert.nl/blog/2008/09/ulab-10/</link>
		<comments>http://michaelwolbert.nl/blog/2008/09/ulab-10/#comments</comments>
		<pubDate>Fri, 19 Sep 2008 15:48:55 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Study]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[DevDays 2008]]></category>
		<category><![CDATA[Evident Interactive]]></category>
		<category><![CDATA[Hogeschool Utrecht]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[MixEssentials 2008]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[ULab]]></category>

		<guid isPermaLink="false">http://michaelwolbert.nl/blog/?p=12</guid>
		<description><![CDATA[There are a lot of things that happend in the past which I will be mentioning in upcoming posts. For example my role in ULab 1.0 from February 2008 till June 2008.
Evident Interactive, a company which primarily focuses on existing .NET technologies, was keen to know the latest ins and outs on new Microsoft technologies, [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">There are a lot of things that happend in the past which I will be mentioning in upcoming posts. For example my role in <a title="ULab 1.0" href="http://ulab.nl" target="_blank">ULab 1.0</a> from February 2008 till June 2008.<a href="http://ulab.nl"><img class="aligncenter" title="ULab logo" src="http://www.evident.nl/ulab/includes/img/ulab-logo.jpg" alt="" width="279" height="173" /></a></p>
<p style="text-align: left;"><a title="Evident Interactive" href="http://evident.nl" target="_blank">Evident Interactive</a>, a company which primarily focuses on existing .NET technologies, was keen to know the latest ins and outs on new Microsoft technologies, such as <a title="Silverlight homepage" href="http://silverlight.net" target="_self">Silverlight</a> and mapping technologies (<a title="Virtual Earth" href="http://maps.live.com" target="_blank">Virtual Earth</a> &amp; <a title="Google Maps" href="http://maps.google.com" target="_blank">Google Maps</a>). Although mapping technologies aren&#8217;t that new, Silverlight could deliver the extra punch of User Experience the company was looking for in creating small lightweight webapplications.</p>
<p style="text-align: left;">Evident Interactive made an agreement with the <a title="HU" href="http://hu.nl" target="_blank">Hogeschool Utrecht</a> to hire students from IT related studies to study and to develop a pilot given these technologies. <strong><em>We the students</em></strong>, Bryan, Bastiaan, Ruben and I took the opportunity to join the team.</p>
<div class="wp-caption aligncenter" style="width: 516px"><img title="ULabteam" src="http://www.evident.nl/ulab/includes/img/assets/Studenten_ULab.jpg" alt="" width="506" height="339" /><p class="wp-caption-text">left to right: Ruben, Bastiaan, Pieter (coworker@Evident), Bryan and me</p></div>
<p style="text-align: left;">While we where studying and developing we had contact with <a title="User Experience Blog" href="http://blogs.microsoft.nl/ux/default.aspx" target="_self">Martin Tirion</a>, who is a Microsoft User Experience Evangelist. He proposed that we&#8217;d demo the pilot at <a title="MixEssentials 2008" href="http://www.microsoft.com/netherlands/evenementen/mix/default.html" target="_blank">MixEssentials 2008</a>, which was concurrent to the <a title="DevDays 2008" href="http://www.devdays.nl" target="_blank">DevDays 2008</a>. So we did!</p>
<p style="text-align: center;"><img class="aligncenter" title="Presentation@MixEssentials" src="http://www.evident.nl/ulab/includes/img/assets/HU_ULab.jpg" alt="" width="506" height="339" /></p>
<ul>
<li><a title="MixEssentials Presentation Impression" href="http://www.evident.nl/ulab/video-ulab.html?KeepThis=true&amp;TB_iframe=true&amp;height=500&amp;width=700" target="_blank">Short impression of the presentation</a> (video with funky music)</li>
<li><a title="Full presentation" href="http://www.microsoft.com/library/errorpages/smarterror.aspx?aspxerrorpath=/emea/msdn/spotlight/event.aspx" target="_blank">Full presentation</a> (requires Live passport.. booooo!)</li>
<li><a title="MixEssentials Presentation Impression" href="http://www.evident.nl/ulab/video-hu-int.html?KeepThis=true&amp;TB_iframe=true&amp;height=500&amp;width=700" target="_blank">Screencapture</a></li>
</ul>
<p style="text-align: left;">It was pretty exciting and cool to demo an application in front of 150 people, trying to take their breath away.. ;-) For all the efforts we received a nice bottle of Prosecco (the bottle was empty next day) and a trip to <a title="TechEd 2008" href="http://www.microsoft.com/emea/teched2008/developer/" target="_blank">TechEd 2008</a> in Barcelona! Pretty nice.. but unfortunately I&#8217;m going on a trip to <a title="Bangalore, India" href="http://maps.google.com/maps?f=q&amp;hl=en&amp;q=Bangalore,+Bengaluru,+Karnataka,+India&amp;ie=UTF8&amp;cd=1&amp;geocode=FVbuxQAdCP-fBA&amp;ll=19.311143,79.453125&amp;spn=37.933436,79.101563&amp;t=h&amp;z=4" target="_blank">Bangalore, India</a> from the 2th till the 22th of November for my study.. Too bad..</p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://michaelwolbert.nl/blog/2008/09/ulab-10/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

