<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.alexthissen.nl/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"><channel><title>Home of Alex Thissen</title><link>http://www.alexthissen.nl/blogs/</link><description>&lt;P&gt;All of the things I like to share&lt;/P&gt;</description><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Revelations on Windows 8</title><link>http://www.alexthissen.nl/blogs/main/archive/2011/09/14/revelations-on-windows-8.aspx</link><pubDate>Wed, 14 Sep 2011 18:32:13 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22586</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Today the //BUILD/Windows conference started with a day full of main sessions. A two and a half hour keynote followed by three “Big Picture” sessions after lunch introduced all present to the new Windows 8 OS and platform. Personally, I am still catching my breath over the amazing amount of information that was given to us. Lots of people have asked me since then what I thought of the first day. I have told them: “Fantastic”. Here’s why, in my words and with a personal interpretation of the information that is available to everyone.&lt;/p&gt;  &lt;h3&gt;Merging the web with Windows&lt;/h3&gt;  &lt;p&gt;What I saw Microsoft present today is the new vision for the Windows 8 operating system. Windows 8 merges with the web in terms of devices and applications. It also brings together all your devices and makes them a mesh that is constantly in sync with one another. This mainly goes for data, be it application data, application settings or identities. The Cloud (Windows Live in particular, complemented by Windows Azure) acts as the conduit to flow and store information across devices and online storage. &lt;/p&gt;  &lt;h3&gt;Web of applications&lt;/h3&gt;  &lt;p&gt;Equally important is the fact that all applications are not only interconnected with the OS and the cloud, but also with one another. Searching and exchanging data has become a smooth continuum across OS and applications alike. I like to think of it as a new opportunity to create Windows-based mashups, just like it has become common place for Web 2.0 applications. This style of creating applications will now come to native Windows applications. The possibilities will be endless. All you need to do is reimagine your apps, just like Microsoft has reimagined Windows.&lt;/p&gt;  &lt;h3&gt;A new family of applications&lt;/h3&gt;  &lt;p&gt;Windows 8 distinguishes two types of applications: Desktop apps and Metro style apps. The Desktop apps are best described as the applications that will run on earlier versions of Windows (7, Vista, …). The Desktop can be built using the well known variety of APIs, ranging from native Win32 in C/C++, to .NET or Silverlight with C# or VB and HTML with JavaScript for Internet Explorer hosted web applications. Metro style applications are easily identified from their styling. Behind that new appearance there is a whole new stack of frameworks and APIs to build and run applications. The Metro applications can interconnect with each other and the OS. There is deep integration through the new API.&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/IMAG2035_5F00_084BB6D8.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px 10px 0px 0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMAG2035" border="0" alt="IMAG2035" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/IMAG2035_5F00_thumb_5F00_4F052A15.jpg" width="640" height="383" /&gt;&lt;/a&gt;&lt;/h3&gt;  &lt;h3&gt;Metro, great for users and developers&lt;/h3&gt;  &lt;p&gt;Metro applications use a new application model at system service level. This is the layer that runs on top of the Windows kernel. The application model also represents the way a Metro application lives in its eco-system, hooks into the operating system with its own execution environment and how it is packaged and deployed. On top of the app model you can build Metro apps with three new APIs: Data and Communication, Graphics and Media, Devices and Printers. You can choose from any kind programming interface, just like with the Desktop apps, boiling down to C++, managed languages and JavaScript. The first two use XAML to create the view layer. XAML has become a native part of the operating system.&lt;/p&gt;  &lt;p&gt;Whether you are going for the XAML or HTML5 approach, Metro apps have the same distinct look and feel, backed up with styling guidelines. The Visual Studio 2011 development environment embraces Metro and offers a whole slew of templates to facilitate in creating the right Metro views for your app.&lt;/p&gt;  &lt;p&gt;The Metro style will help users get a consistent feel across devices (desktop PC, tablet or phone) and form factors (small, medium, large). Whether they pick up a phone with WP7.5 or a tablet with Windows 8, it all looks and feels the same. For now, Metro style applications are built targeted at either Windows 8 or Phone 7.5&lt;/p&gt;  &lt;h3&gt;Opportunities for everyone&lt;/h3&gt;  &lt;p&gt;With all of this come great opportunities for everyone: users, designers, developers, architects and business, you name it. Since this is a developer conference, I would like to point out that the next couple of years will be very, very interesting for developers. The shift in programming paradigm from rich-client, high-end client applications to interconnected, cloud- and os-integrated applications are a new ball-game and a game changer to boot. This will give lots of change, chance and learning for all to enjoy. &lt;/p&gt;  &lt;h3&gt;The extra gift&lt;/h3&gt;  &lt;p&gt;As if all of this goodness and announcements weren’t enough there was the unexpected gift. Secretly anticipated and living up to speculation all attendees of //BUILD/Windows were giving a new Developer Preview Tablet: a Samsung tablet with amazing specs. The line for picking it up was unbelievable. I chose to wait until tomorrow to pick it up. I still need to do so. Everybody is excited about it. Check the specs to see why.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_13D14E4A.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_thumb_5F00_7B318B2C.png" width="244" height="160" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22586" width="1" height="1"&gt;</description><category domain="http://www.alexthissen.nl/blogs/main/archive/tags/Conferences/default.aspx">Conferences</category><category domain="http://www.alexthissen.nl/blogs/main/archive/tags/Windows+OS/default.aspx">Windows OS</category></item><item><title>Getting ready to unwrap the big picture at BUILD</title><link>http://www.alexthissen.nl/blogs/main/archive/2011/09/13/getting-ready-to-unwrap-the-big-picture-at-build.aspx</link><pubDate>Tue, 13 Sep 2011 05:47:11 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22585</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/IMAG2029_5F00_6CBD8A95.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px 10px 0px 0px;padding-left:0px;padding-right:0px;display:inline;float:left;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="IMAG2029" border="0" alt="IMAG2029" align="left" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/IMAG2029_5F00_thumb_5F00_576F3953.jpg" width="190" height="114" /&gt;&lt;/a&gt;Tomorrow is the first day of the //BUILD/Windows conference. BUILD is a highly anticipated conference and expectations are equally high. I thought it would be good to put some of my thoughts on my blog before the conference actually started. You see, BUILD is special in a way that most conference of the past years have not been: we know nothing about the announcements. Sure, there will most likely be information on Windows 8, HTML 5 and JavaScript, the developer roadmap and so on. But then again, this is only high over. Nobody knows anything about what will be announced, not even the average Microsoft employee. &lt;/p&gt;  &lt;p&gt;The almost complete silence and accompanying secrecy is not what we have seen in the past couple of years. Microsoft has always been very open in its directions. The product teams have engaged with the community early on and gotten feedback from the developers, architects and so on. Now, we have heard nothing up front. And this leads to a lot of speculation, criticism, fear and doubt. People complain about this approach. Apple and Google have been working this way for a long time now. The big announcements and revelations are made on an important conference. So, how bad is it that Microsoft has taken the same path?&lt;/p&gt;  &lt;p&gt;Taking a step back I feel spoiled. All these years we have had the luxury of knowing all upfront. It is like Christmas time (or Sinterklaas if you are Dutch), where you sent out a wish list to Santa Claus. Santa would tell you exactly what you would get. The unwrapping of the presents was fun to do, but there were hardly any surprises. This time is different. Tomorrow we will be given a lot of presents and we do not know what is in the boxes. Everyone will be thrilled to receive the gifts and find out what is inside. Best of all, there might even be presents that we hadn’t wished for. I am enjoying every moment of it. Because once the unwrapping is done, the nervousness and anxiety goes away and is replaced with the fun of playing with the new stuff. Still good, but different. Who knows how long it will be before we will have the experience of not knowing again?&lt;/p&gt;  &lt;p&gt;The registration today went very smooth. It was not busy (yet). The self-service terminals made it easy to register. The badge, wristband (for the party on Wednesday) and booklet were all the things we got. There were no details on the sessions, other than that the first day will be general sessions only. These general sessions are called “Big picture” in the booklet. Sort of indicates what we will getting from those. The breakout sessions are from Wednesday till Friday. It will be four fantastic days without a doubt. I am looking forward to it! &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/IMAG2030_5F00_114E5673.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="IMAG2030" border="0" alt="IMAG2030" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/IMAG2030_5F00_thumb_5F00_5D55EEBA.jpg" width="415" height="249" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22585" width="1" height="1"&gt;</description><category domain="http://www.alexthissen.nl/blogs/main/archive/tags/Conferences/default.aspx">Conferences</category><category domain="http://www.alexthissen.nl/blogs/main/archive/tags/Windows+OS/default.aspx">Windows OS</category></item><item><title>Dracula the Undead walkthrough</title><link>http://www.alexthissen.nl/blogs/atarilynx/archive/2011/07/19/dracula-the-undead-walkthrough.aspx</link><pubDate>Tue, 19 Jul 2011 06:50:00 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22583</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Below follows the complete solution to the graphical adventure on your Lynx, Dracula &amp;ndash; The Undead. &lt;/p&gt;
&lt;p&gt;&lt;img height="240" width="194" src="http://www.atariage.com/Lynx/boxes/b_Dracula_front.jpg" align="left" alt="Dracula the Undead - Box Front" border="0" style="margin:0px 25px 0px 0px;display:inline;float:left;" /&gt;&lt;/p&gt;
&lt;p&gt;Included are all the possibilities of exploration available in the game. You need not go through the list of commands given below. Stick to the bold commands and only execute the others if you&amp;#39;re interested in seeing what happens. Omitted are the commands that result in remarks like &amp;#39;there&amp;#39;s nothing unusual about it.&amp;#39; or &amp;#39;I don&amp;#39;t think that&amp;#39;ll work&amp;#39;. Some are quite interesting (and that&amp;#39;s the main reason I included them), since they more or less show the path of exploration you might have followed solving the game yourself. For instance, when you first try and climb out of the window in Jonathan&amp;#39;s antechamber he doesn&amp;#39;t believe it possible, whereas when he has seen Dracula do it, he does climb out, convinced it can be done.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap24_5F00_69B23B1D.png"&gt;&lt;img height="154" width="240" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap24_5F00_thumb_5F00_6226CBB0.png" alt="snap24" border="0" title="snap24" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap33_5F00_68D9D533.png"&gt;&lt;img height="154" width="240" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap33_5F00_thumb_5F00_419F8BFE.png" alt="snap33" border="0" title="snap33" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap55_5F00_081C7C07.png"&gt;&lt;img height="154" width="240" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap55_5F00_thumb_5F00_0ECF858A.png" alt="snap55" border="0" title="snap55" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Use the map in combination with the italic headers. The headers give the name of the location where you should be or move to before trying any of the actions given below them. If you would want to finish the game as quickly as possible, you should only execute the commands printed in bold. &lt;/p&gt;
&lt;p&gt;A note of caution: if something happens, like an animation of some sort or a narration by Bram Stoker, and the list prompts you to &lt;b&gt;use notebook&lt;/b&gt;, make sure you execute no other command. If you do, you might not be able to finish the game victoriously. Sometimes, however, you might be lucky if you accidently execute a false command, because in some instances you can examine something again and then use the notebook (like at Dracula&amp;#39;s coffin or in his study).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap64_5F00_554C7592.png"&gt;&lt;img height="154" width="240" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap64_5F00_thumb_5F00_2E122C5D.png" alt="snap64" border="0" title="snap64" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap66_5F00_0D8AECAB.png"&gt;&lt;img height="154" width="240" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap66_5F00_thumb_5F00_7B4225E8.png" alt="snap66" border="0" title="snap66" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap67_5F00_3F165A40.png"&gt;&lt;img height="154" width="240" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap67_5F00_thumb_5F00_65E47080.png" alt="snap67" border="0" title="snap67" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;On the other hand&lt;/h2&gt;
&lt;p&gt;Finishing the game in only two days (more like one) after about three go&amp;#39;s I really started wondering whether the solution given below is the only one. If you&amp;#39;ve read the original novel by Bram Stoker (which I can really, really recommend for all you English books readers or students who need a good book for their reading list), you find that the DRACULA - THE UNDEAD only covers about a seventh of the novel. Some arguments to confirm my doubts: in the sewing room where you fall asleep and nearly get killed by the three brides you come across several objects I cannot seem to use in any way. There are more of those unusable objects, by the way. Furthermore, most doors that are locked can be opened later on in the game. Some, however, not. What about the coins you carry, but do not seem to need? Although being warned several times to escape before the brides &amp;#39;claim you with their voluptuous kisses&amp;#39; I never got killed by them.&lt;/p&gt;
&lt;p&gt;I imagine this to be the result of always having broken open the window of Jonathan&amp;#39;s bedroom, so I could exit the room later in the game, when the door to the antechamber from the bedroom is locked. Does anybody know if this is really so? And last and certainly not least: if you happen to have GAMEZONE issue four handy, look on page 91, the LYNX previews. You&amp;#39;ll notice a picture from the DRACULA game showing Jonathan bending over Dracula in his coffin, stake in hand pointing towards Dracula&amp;#39;s chest. The text reads: &amp;#39;Finding a handy stake he is ready to end Draculas reign of terror.&amp;#39; I certainly did not find this picture anywhere in the game, so where did it go? Cancelled in a later version because Atari ran out of memory on the card, or did I miss out on a part of the game? &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap43_5F00_3EAA274B.png"&gt;&lt;img height="154" width="240" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap43_5F00_thumb_5F00_2C616089.png" alt="snap43" border="0" title="snap43" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap59_5F00_7E07DADB.png"&gt;&lt;img height="154" width="240" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap59_5F00_thumb_5F00_52C343D4.png" alt="snap59" border="0" title="snap59" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap61_5F00_0B6DEDE2.png"&gt;&lt;img height="154" width="240" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap61_5F00_thumb_5F00_7925271F.png" alt="snap61" border="0" title="snap61" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Walkthrough (Spoiler alert)&lt;/h2&gt;
&lt;p&gt;The actual walkthrough is too long for this blog post. I have uploaded it to the Media area of this blog. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.alexthissen.nl/media/p/22582.aspx"&gt;&lt;img height="110" width="113" src="http://t0.gstatic.com/images?q=tbn:ANd9GcSd8-JcdrlGpDcLoKiFTIhR0DJs-8oPVua2kZ0nDqYmvGmBNFGuVQ" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can find the PDF file for the walkthrough &lt;a href="http://www.alexthissen.nl/media/p/22582.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22583" width="1" height="1"&gt;</description><category domain="http://www.alexthissen.nl/blogs/atarilynx/archive/tags/Games/default.aspx">Games</category></item><item><title>Completing Chip’s Challenge game</title><link>http://www.alexthissen.nl/blogs/atarilynx/archive/2011/07/18/completing-chip-s-challenge-game.aspx</link><pubDate>Mon, 18 Jul 2011 14:52:47 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22581</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;To be honest, I do not remember whether I completed the Atari Lynx game Chip’s Challenge myself back at the time. Anyway, yesterday evening I sat down, looked up the level start code for the final level and gave it a spin. I quickly realized that I either had to use every memory muscle in my brain to finish this level, or make some notes. Well, some notes turned into a complete level map. Here is the layout of the final level:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/Chip4before_5F00_7C403959.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="Chip4before" border="0" alt="Chip4before" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/Chip4before_5F00_thumb_5F00_4AF14EF9.png" width="479" height="480" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You start off at the place where Chip is shown. You first need to get the four keys to consecutively open the yellow, blue, red and green door. Then you head into the teleporter and find out you need to shove some bricks/boxes, brown thingies. Easy enough, except: underneath some of the boxes is fire, roasting your fine, nerdy buttocks. By trial and error you can find out which ones are safe to use, which ones are not. You will have to remember those. That’s possible because there is no randomization involved. You will have to try each and every box until you find the exit to finish the game behind one of them.&lt;/p&gt;  &lt;h2&gt;Spoiler alert!!!&lt;/h2&gt;  &lt;p&gt;You can save some time looking at the map below. It shows what is beneath a box, if something is there at all. So the fire indicates hotness beyond your ability to handle. The question marks will say: “This spot would be too obvious!”. Finally, the exit is shown to be at the top row, slightly off to the left side of the middle (second block from the middle). Here’s the map with the locations:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/Chip4after_5F00_220639F0.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="Chip4after" border="0" alt="Chip4after" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/Chip4after_5F00_thumb_5F00_1A2E2181.png" width="479" height="480" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once you reach the exit, you are welcomed by the end sequence. Melissa is hugging you for completing this quest and takes you to the prom “E-prom”.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap31_5F00_181122B8.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="snap31" border="0" alt="snap31" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap31_5F00_thumb_5F00_70D6D982.png" width="240" height="154" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap32_5F00_3753C98B.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="snap32" border="0" alt="snap32" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap32_5F00_thumb_5F00_622C2D9D.png" width="240" height="154" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap33_5F00_0FAD4D61.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="snap33" border="0" alt="snap33" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap33_5F00_thumb_5F00_6873042B.png" width="240" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;For your entertainment I also uploaded a speedrun of the level to Youtube.&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:74ff0c58-37ef-4716-9e03-88633d87a214" class="wlWriterEditableSmartContent"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=QbHkL2spxkk&amp;amp;feature=youtube_gdata_player" target="_new"&gt;&lt;img src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/video83a2913e19cc_5F00_6F260DAE.jpg" style="border-style:none;" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="width:448px;clear:both;font-size:.8em;"&gt;Speedrun of level 149 “Special” of Atari Lynx game Chip’s Challenge&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;Have fun!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22581" width="1" height="1"&gt;</description><category domain="http://www.alexthissen.nl/blogs/atarilynx/archive/tags/Games/default.aspx">Games</category></item><item><title>Using WCF and WIF to perform WS-Trust active claim requests</title><link>http://www.alexthissen.nl/blogs/main/archive/2011/07/18/using-active-profile-for.aspx</link><pubDate>Mon, 18 Jul 2011 14:07:39 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22580</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;The last week I have been working on a claim-based identity scenario that involves two separate instances of a Active Directory Federation Services (ADFS) 2.0 as Security Token Service (STS). The first STS is an identity provider STS (IP-STS) and the second a resource STS (R-STS) . The R-STS and IP-STS have a trust relationship in that the IP-STS is a trusted identity provider to the R-STS. Typically this setup is used with the passive profile for federation from browser clients. The web application (SharePoint 2010 for our scenario) would require authentication, redirect to the R-STS, which in turn would redirected (after IP selection) to the IP-STS. Here the end-user will authenticate, gets a identity claims from the IP-STS and is redirected back to the R-STS. The resource STS can augment claims from information stored in AD Lightweight Directory Services (AD-LDS) and issue the final claim token to the passively federated web application.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_18889F28.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_thumb_5F00_4609BEEB.png" width="567" height="366" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In our case we have a SharePoint 2007 application, which does not have its own STS to initiate the entire process. Also, business requirements demand that &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;the user interface is completely controlled &lt;/li&gt;    &lt;li&gt;no redirects to other pages during authentication &lt;/li&gt;    &lt;li&gt;authentication takes place from within a certain screen flow &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;These requirements made us investigate the active profile flow for the setup. In an active profile flow you will use the web services of ADFS 2.0 to communicate directly to the STS instances. You can use either the WS-Trust or WS-Federation protocol depending on your requirements. WS-Federation allows you to call the R-STS directly with the retrieval of the IP-STS claim performed under the covers. WS-Trust is used for the individuals steps. You can also leverage WS-Trust to take full control of the individual steps. To get acquainted with the entire active scenario we chose to the latter approach. Windows Communication Foundation (WCF) and Windows Identity Foundation (WIF) provide ready-to-use channels for the WS-Trust protocol and WS-Federation protocol. The scenario will take several steps:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Acquire an identity claim from the IP-STS by using username/password authentication to authenticate. &lt;/li&gt;    &lt;li&gt;The IP-STS will issue a claim token regarding our identity, sign and encrypt it and send it back to us. &lt;/li&gt;    &lt;li&gt;Use the claim token from the IP-STS to authenticate against the R-STS and request a new claim token with additional claims from AD-LDS. &lt;/li&gt;    &lt;li&gt;The R-STS will also issue the (augmented) claim, sign and (optionally) encrypt it and send it. &lt;/li&gt;    &lt;li&gt;We need to decrypt the token, check its signature and issuer and convert the claim token to a principal object. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Note that we made some design choices, such as using username/password to authenticate against the IP-STS. You could make similar or different choices depending on your particular scenario.&lt;/p&gt;  &lt;h3&gt;Step 1: Acquiring an identity claims from an active STS&lt;/h3&gt;  &lt;p&gt;The first part of the process is the acquisition of a claim token from the IP-STS. We need one of the specialized WCF binding for a WS-Trust channel. Because we are using username and password to authenticate, this comes down to UserNameWSTrustBinding. We want to use transport security (an HTTPS connection) with credentials inside of the message (because Message security would mean that we need encryption and certificate exchange for this part). The endpoint at ADFS is &lt;a href="https://identityadfs.company.com/services/trust/2005/usernamemixed"&gt;https://identityadfs.company.com/services/trust/2005/usernamemixed&lt;/a&gt; to reflect our choices. The 2005 endpoint will use the newer WS-Trust 1.3 specification (as opposed to the February 2005 one).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_4C509579.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_thumb_5F00_1024C9D1.png" width="640" height="211" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;pre style="background:white;"&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; binding = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;UserNameWSTrustBinding&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;SecurityMode&lt;/font&gt;&lt;/span&gt;.TransportWithMessageCredential);
&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; factory = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;WSTrustChannelFactory&lt;/font&gt;&lt;/span&gt;(binding, &lt;/font&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;https://identityadfs.company.com/adfs/services/trust/13/usernamemixed&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font size="2"&gt;)
  {
    TrustVersion = &lt;span&gt;&lt;font color="#2b91af"&gt;TrustVersion&lt;/font&gt;&lt;/span&gt;.WSTrustFeb2005,
  };
 
factory.Credentials.UserName.UserName = &lt;span&gt;&lt;font color="#a31515"&gt;@&amp;quot;youraccount&amp;quot;&lt;/font&gt;&lt;/span&gt;;
factory.Credentials.UserName.Password = &lt;span&gt;&lt;font color="#a31515"&gt;@&amp;quot;abc123!&amp;quot;&lt;/font&gt;&lt;/span&gt;;
factory.ConfigureChannelFactory();&lt;/font&gt;
&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;We now have a configured channel factory to create an actual WS-Trust channel. Across that channel we want to send a Request Security Token (RST) message. &lt;/p&gt;

&lt;pre style="background:white;"&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; rst = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;RequestSecurityToken&lt;/font&gt;&lt;/span&gt;
  {
    RequestType = &lt;span&gt;&lt;font color="#2b91af"&gt;WSTrust13Constants&lt;/font&gt;&lt;/span&gt;.&lt;span&gt;&lt;font color="#2b91af"&gt;RequestTypes&lt;/font&gt;&lt;/span&gt;.Issue,
    AppliesTo = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;EndpointAddress&lt;/font&gt;&lt;/span&gt;(&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&lt;a href="http://resourceadfs.company.com/adfs/services/trust"&gt;http://resourceadfs.company.com/adfs/services/trust&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;),
    KeyType = &lt;span&gt;&lt;font color="#2b91af"&gt;WSTrust13Constants&lt;/font&gt;&lt;/span&gt;.&lt;span&gt;&lt;font color="#2b91af"&gt;KeyTypes&lt;/font&gt;&lt;/span&gt;.Symmetric
  };&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="background:white;"&gt;&lt;font face="Consolas"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; channel = factory.CreateChannel();
&lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; channel.Issue(rst);&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;As you can see this RST message indicates an issue request for the audience “http://sourceadfs.company.com/adfs/services/trust/active”, which is the identifier of the relying party (the IP-STS) administration in the R-STS . In other words: a identity claim token intended to be shown to the R-STS. &lt;/p&gt;

&lt;p&gt;We also ask the IP-STS issuer to encrypt the claim token with a symmetric key. You will see why this is in a moment. In other situations you could have asked for a Bearer (unecnrypted) key type token, which would have allowed you to inspect the token.&lt;/p&gt;

&lt;h3&gt;Step 2: Issue token from IP-STS&lt;/h3&gt;

&lt;p&gt;The IP-STS will accept and validate our credentials against the Active Directory Domain Services identity store. When successfully authenticated, ADFS will use its claim rules to extract information from ADDS and build a claim token with the indicated claims. Next it will encrypt this claim token using a certificate with a public key. This public key belongs to a public/private key pair that the R-STS holds. The IP-STS can encrypt the token, where only the R-STS can decrypt it using its private key.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_2B5D22D2.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_thumb_5F00_4B0BFC9A.png" width="640" height="211" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Step 3: Use claim token to authenticate and request augmented claim token&lt;/h3&gt;

&lt;p&gt;Now, we can use the issued identity claim token to authenticate against the R-STS. We will again use a WS-Trust channel, but now with issued token authentication.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_2A1889F3.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_thumb_5F00_30CB9376.png" width="640" height="175" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;pre style="background:white;"&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; binding = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;IssuedTokenWSTrustBinding&lt;/font&gt;&lt;/span&gt;();
binding.SecurityMode = &lt;span&gt;&lt;font color="#2b91af"&gt;SecurityMode&lt;/font&gt;&lt;/span&gt;.TransportWithMessageCredential;
binding.KeyType = &lt;span&gt;&lt;font color="#2b91af"&gt;SecurityKeyType&lt;/font&gt;&lt;/span&gt;.SymmetricKey;
 
&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; factory = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;WSTrustChannelFactory&lt;/font&gt;&lt;/span&gt;(binding, &lt;br /&gt;  &lt;/font&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;https://resourceadfs.company.com/adfs/services/trust/13/issuedtokenmixedsymmetricbasic256&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font size="2"&gt;);
factory.TrustVersion = &lt;span&gt;&lt;font color="#2b91af"&gt;TrustVersion&lt;/font&gt;&lt;/span&gt;.WSTrust13;
factory.Credentials.SupportInteractive = &lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;factory.ConfigureChannelFactory();&lt;/font&gt; &lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&lt;font style="font-size:12pt;"&gt;The configuration of the channel factory is similar to the first step. The key differences are that we now have an IssuedTokenWSTrustBinding and a symmetric key for the issued token. The reason for choosing the symmetric encrypted request in the first step is that the R-STS does not accept Bearer key tokens for authentication. They have to be (a)symmetrically signed for the R-STS to use them as an authentication means. Also, we suppress the Interactive support (meaning InfoCard c.q. CardSpace UI), as we are initiating a service request (hence, no user is available).&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="3"&gt;Next, we create another RST message and send it out to the R-STS.&lt;/font&gt;&lt;/p&gt;

&lt;pre style="background:white;"&gt;&lt;font face="Consolas"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; rst = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;RequestSecurityToken&lt;/font&gt;&lt;/span&gt;
  {
    RequestType = &lt;span&gt;&lt;font color="#2b91af"&gt;RequestTypes&lt;/font&gt;&lt;/span&gt;.Issue,
    AppliesTo = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;EndpointAddress&lt;/font&gt;&lt;/span&gt;(&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;http://sp2007webapp.company.com&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;),
    KeyType = &lt;span&gt;&lt;font color="#2b91af"&gt;KeyTypes&lt;/font&gt;&lt;/span&gt;.Bearer
  };&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; channel = factory.CreateChannelWithIssuedToken(token);
&lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; channel.Issue(rst);&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;The RST now indicates an audience for the SharePoint 2007 application. Its key type can be Bearer or (A)Symmetric, depending on how you want the token to be transferred. Should you choose the Symmetric or Asymmetric key type, you will need to install a server certificate on the web application’s IIS server, extract the public key and install it on the R-STS server as the encryption certificate for the relying party (i.e. the SharePoint app) trust.&lt;/p&gt;

&lt;p&gt;Finally, using an extension method from WIF we create a channel from the factory that can convey the token as an authentication means. Lastly, we send out the RST message and return the token to the caller after step 4 has completed.&lt;/p&gt;

&lt;h3&gt;Step 4: Issuing an augmented claim&lt;/h3&gt;

&lt;p&gt;Once the issued token arrives at the R-STS, ADFS will decrypt the token using its public/private keypair. If it is a valid token, the R-STS will believe its trusted IP-STS that the credentials originally provided where correct. According to the configured claim rules the R-STS will create new and/or additional claims (called claim augmentation) to the new claim token. It will include the audience, sign it, encrypt it if you indicated so in the RST, and send out the RST response (RSTR).&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_104453C4.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_thumb_5F00_61EACE16.png" width="640" height="160" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Step 5: Check claim token and create principal&lt;/h3&gt;

&lt;p&gt;The last step is back on the SharePoint application. &lt;/p&gt;

&lt;pre style="background:white;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#2b91af" size="2"&gt;GenericXmlSecurityToken&lt;/font&gt;&lt;/span&gt;&lt;font size="2"&gt; augmentedToken = AugmentClaims(issuedToken);
&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; tokenReader = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;StringReader&lt;/font&gt;&lt;/span&gt;(augmentedToken.TokenXml.OuterXml);
&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; reader = &lt;span&gt;&lt;font color="#2b91af"&gt;XmlReader&lt;/font&gt;&lt;/span&gt;.Create(tokenReader);&lt;/font&gt;
&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;The issuedToken variable contains the token received from step 1 and 2. The AugmentClaims method is the implementation shown in step 3. When the R-STS returns the augmented claim, it will surface as a GenericXmlSecurityToken. We set up an XmlReader to start reading the token.&lt;/p&gt;

&lt;p&gt;Remember that to read the token we need to decrypt it, check its signature, audience and issuer. This checking is taken care of by a set of token handlers&lt;/p&gt;

&lt;pre style="background:white;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#2b91af" size="2"&gt;SecurityTokenHandlerCollection&lt;/font&gt;&lt;/span&gt;&lt;font size="2"&gt; handlers = &lt;br /&gt;  &lt;span&gt;&lt;font color="#2b91af"&gt;SecurityTokenHandlerCollection&lt;/font&gt;&lt;/span&gt;.CreateDefaultSecurityTokenHandlerCollection();&lt;/font&gt;
&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;The default security handlers are some eight handlers for various types of tokens. They all use the configuration defined at the SecurityTokenHandlerCollection. First, we will add our public/private keypair as the certificate that the token resolver should use for decryption. The SecurityTokenResolver will use the thumbprint as a reference to the certificate &lt;/p&gt;

&lt;pre style="background:white;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#2b91af" size="2"&gt;X509Store&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;" size="2"&gt;&lt;font size="2"&gt; store = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;X509Store&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;StoreName&lt;/font&gt;&lt;/span&gt;.My, &lt;span&gt;&lt;font color="#2b91af"&gt;StoreLocation&lt;/font&gt;&lt;/span&gt;.LocalMachine);
store.Open(&lt;span&gt;&lt;font color="#2b91af"&gt;OpenFlags&lt;/font&gt;&lt;/span&gt;.ReadOnly);
&lt;span&gt;&lt;font color="#2b91af"&gt;X509Certificate2Collection&lt;/font&gt;&lt;/span&gt; certificates = store.Certificates;
&lt;span&gt;&lt;font color="#2b91af"&gt;X509Certificate2&lt;/font&gt;&lt;/span&gt; certificate = certificates.Find(&lt;br /&gt;  &lt;span&gt;&lt;font color="#2b91af"&gt;X509FindType&lt;/font&gt;&lt;/span&gt;.FindByThumbprint, &lt;br /&gt;  &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;&lt;em&gt;ThumbprintForWebAppPubPrivCertificateAllCapitals&lt;/em&gt;&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt;)[0];&lt;/font&gt;
&lt;font size="2"&gt; 
&lt;span&gt;&lt;font color="#2b91af"&gt;List&lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;SecurityToken&lt;/font&gt;&lt;/span&gt;&amp;gt; serviceTokens = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;List&lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;SecurityToken&lt;/font&gt;&lt;/span&gt;&amp;gt;();
serviceTokens.Add(&lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;X509SecurityToken&lt;/font&gt;&lt;/span&gt;(certificate));
&lt;span&gt;&lt;font color="#2b91af"&gt;SecurityTokenResolver&lt;/font&gt;&lt;/span&gt; serviceResolver = &lt;br /&gt;  &lt;span&gt;&lt;font color="#2b91af"&gt;SecurityTokenResolver&lt;/font&gt;&lt;/span&gt;.CreateDefaultSecurityTokenResolver(&lt;br /&gt;  serviceTokens.AsReadOnly(), &lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;);
handlers.Configuration.ServiceTokenResolver = serviceResolver;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;You will only need the code fragment for the token resolver above if you indicated an encrypted token. We did not, so these 8 lines of code are not necessary.&lt;/p&gt;

&lt;p&gt;Next, we will add a certificate store for the issuer resolution. The token handlers will look up the issuer’s certificate thumbprint in the Personal certificates store of Local machine (not a user’s store).&lt;/p&gt;

&lt;pre style="background:white;"&gt;&lt;font face="Consolas"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font color="#2b91af"&gt;SecurityTokenHandlerCollection&lt;/font&gt;&lt;/span&gt; handlers = &lt;br /&gt;  &lt;span&gt;&lt;font color="#2b91af"&gt;SecurityTokenHandlerCollection&lt;/font&gt;&lt;/span&gt;.CreateDefaultSecurityTokenHandlerCollection();&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font color="#2b91af"&gt;X509CertificateStoreTokenResolver&lt;/font&gt;&lt;/span&gt; certificateStoreIssuerResolver = &lt;br /&gt;  &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;X509CertificateStoreTokenResolver&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;StoreName&lt;/font&gt;&lt;/span&gt;.My, &lt;span&gt;&lt;font color="#2b91af"&gt;StoreLocation&lt;/font&gt;&lt;/span&gt;.LocalMachine);&lt;br /&gt;handlers.Configuration.IssuerTokenResolver = certificateStoreIssuerResolver;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="background:white;"&gt;&lt;font face="Consolas"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; registry = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;ConfigurationBasedIssuerNameRegistry&lt;/font&gt;&lt;/span&gt;();
registry.AddTrustedIssuer(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;&lt;em&gt;ThumbPrintForResourceADFSPubSigningAllCapitals&lt;/em&gt;&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;br /&gt;  &lt;span&gt;&lt;font color="#a31515"&gt;&lt;a href="http://resourceadfs.company.com/adfs/services/trust"&gt;http://resourceadfs.company.com/adfs/services/trust&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;);&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="background:white;"&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;handlers.Configuration.IssuerNameRegistry = registry;&lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;handlers.Configuration.AudienceRestriction.AllowedAudienceUris.&lt;br /&gt;  Add(&lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;Uri&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#a31515"&gt;&lt;a href="http://sp2007webapp.company.com"&gt;http://sp2007webapp.company.com&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;));&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;With all this setup, all that remains it to actually read (decrypt) the token and to check its signature, issuer and audience. The set of identities that is included will contain 1 IClaimsIdentity derived object containing our identity with corresponding claims.&lt;/p&gt;

&lt;p&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; samlToken = handlers.ReadToken(reader); 

      &lt;br /&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#2b91af"&gt;IClaimsIdentity &lt;/font&gt;&lt;/span&gt;&lt;/font&gt;identity = handlers.ValidateToken(samlToken)[0];&lt;/font&gt; &lt;/font&gt;&lt;/p&gt;

&lt;h2&gt;All done&lt;/h2&gt;

&lt;p&gt;At this point we have a ClaimsIdentity that we can use to construct a claim principal and start reading claims for authorization inside our application. You might want to have the claims principal set to the current thread Thread.CurrentPrincipal and the HTTP context via HttpContext.Current.User. Inside the identity you can see the initial authentication type (username/password in our case) and for each claim the issuer (R-STS) and the original issuer (IP-STS, only when you passed through the original IP-STS claim as a R-STS claim).&lt;/p&gt;

&lt;p&gt;All steps assume a happy flow, but you will need to include the usual exception handling for Timeout-, Communication-, ObjectDisposedException and other exceptions that may occur.&lt;/p&gt;

&lt;p&gt;Hope this helps.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22580" width="1" height="1"&gt;</description><category domain="http://www.alexthissen.nl/blogs/main/archive/tags/Security/default.aspx">Security</category><category domain="http://www.alexthissen.nl/blogs/main/archive/tags/WCF/default.aspx">WCF</category><category domain="http://www.alexthissen.nl/blogs/main/archive/tags/ADFS/default.aspx">ADFS</category></item><item><title>Maps of “Todd’s Adventures in Slimeworld”</title><link>http://www.alexthissen.nl/blogs/atarilynx/archive/2011/07/10/maps-of-todd-s-adventures-in-slimeworld.aspx</link><pubDate>Sun, 10 Jul 2011 19:44:46 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22577</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;These maps have been in my folder for a very, very long time (around 1992). I thought it would be a shame to see them go to waste. &lt;/p&gt;  &lt;p&gt;When I was still in university I had too much time and an Atari Lynx with “Todd’s Adventures in Slimeworld” to boot. A great combination. I drew all maps of the single player adventures by hand and stuck them in a folder. Today, I used my scanner to scan each of them. Then I stitched together the individual pages and came up with the maps you can see here. I hope you enjoy them and find them useful. Pay special attention to the map for adventure 6 (Arcade): it shows the easter egg to the zit-popping game.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap30_5F00_406919E4.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="snap30" border="0" alt="snap30" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap30_5F00_thumb_5F00_3F90B3FA.png" width="240" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Let me know what you think.&lt;/p&gt;  &lt;h2&gt;Adventure 1: Easy&lt;/h2&gt;  &lt;p&gt;&lt;a href="https://skydrive.live.com/?cid=bc47bfd75f6e49a0&amp;amp;sc=documents&amp;amp;id=BC47BFD75F6E49A0%211822#cid=BC47BFD75F6E49A0&amp;amp;id=BC47BFD75F6E49A0%211823&amp;amp;sc=documents"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SlimeWorld Adventure 1 - Easy 25percent" border="0" alt="SlimeWorld Adventure 1 - Easy 25percent" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/SlimeWorld_2D00_Adventure_2D00_1_2D002D002D00_Easy_2D00_25percent_5F00_780362C6.png" width="640" height="64" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Adventure 2: Exploration&lt;/h2&gt;  &lt;p&gt;&lt;a href="https://skydrive.live.com/?cid=BC47BFD75F6E49A0&amp;amp;id=BC47BFD75F6E49A0%211823&amp;amp;sc=documents#cid=BC47BFD75F6E49A0&amp;amp;id=BC47BFD75F6E49A0%211824&amp;amp;sc=documents"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SlimeWorld Adventure 2 - Exploration 25percent" border="0" alt="SlimeWorld Adventure 2 - Exploration 25percent" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/SlimeWorld_2D00_Adventure_2D00_2_2D002D002D00_Exploration_2D00_25percent_5F00_4AC5168A.png" width="640" height="87" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Adventure 3: Action&lt;/h2&gt;  &lt;p&gt;&lt;a href="https://skydrive.live.com/?cid=BC47BFD75F6E49A0&amp;amp;id=BC47BFD75F6E49A0%211823&amp;amp;sc=documents#cid=BC47BFD75F6E49A0&amp;amp;id=BC47BFD75F6E49A0%211825&amp;amp;sc=documents"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SlimeWorld Adventure 3 - Action 25percent" border="0" alt="SlimeWorld Adventure 3 - Action 25percent" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/SlimeWorld_2D00_Adventure_2D00_3_2D002D002D00_Action_2D00_25percent_5F00_25B4081B.png" width="640" height="73" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Adventure 4: Suspense&lt;/h2&gt;  &lt;p&gt;&lt;a href="https://skydrive.live.com/?cid=BC47BFD75F6E49A0&amp;amp;id=BC47BFD75F6E49A0%211823&amp;amp;sc=documents#cid=BC47BFD75F6E49A0&amp;amp;id=BC47BFD75F6E49A0%211826&amp;amp;sc=documents"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SlimeWorld Adventure 4 - Suspense 25percent" border="0" alt="SlimeWorld Adventure 4 - Suspense 25percent" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/SlimeWorld_2D00_Adventure_2D00_4_2D002D002D00_Suspense_2D00_25percent_5F00_24DBA231.png" width="640" height="77" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Adventure 5: Logic&lt;/h2&gt;  &lt;h2&gt;&lt;a href="https://skydrive.live.com/?cid=BC47BFD75F6E49A0&amp;amp;id=BC47BFD75F6E49A0%211823&amp;amp;sc=documents#cid=BC47BFD75F6E49A0&amp;amp;id=BC47BFD75F6E49A0%211827&amp;amp;sc=documents"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SlimeWorld Adventure 5 - Logic 25percent" border="0" alt="SlimeWorld Adventure 5 - Logic 25percent" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/SlimeWorld_2D00_Adventure_2D00_5_2D002D002D00_Logic_2D00_25percent_5F00_280D8A19.png" width="640" height="119" /&gt;&lt;/a&gt;&lt;/h2&gt;  &lt;h2&gt;Adventure 6: Arcade&lt;/h2&gt;  &lt;p&gt;&lt;a href="https://skydrive.live.com/?cid=BC47BFD75F6E49A0&amp;amp;id=BC47BFD75F6E49A0%211823&amp;amp;sc=documents#cid=BC47BFD75F6E49A0&amp;amp;id=BC47BFD75F6E49A0%211822&amp;amp;sc=documents"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SlimeWorld Adventure 6 - Arcade 25percent" border="0" alt="SlimeWorld Adventure 6 - Arcade 25percent" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/SlimeWorld_2D00_Adventure_2D00_6_2D002D002D00_Arcade_2D00_25percent_5F00_14802A78.png" width="640" height="38" /&gt;&lt;/a&gt;&lt;/p&gt;                &lt;h3&gt;Legend&lt;/h3&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="442"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="136"&gt;&lt;strong&gt;Key&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="304"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="136"&gt;Number&lt;/td&gt;        &lt;td valign="top" width="304"&gt;Spawn point (see lookup list at right of map for start code)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="136"&gt;G&lt;/td&gt;        &lt;td valign="top" width="304"&gt;Gem&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="136"&gt;SG&lt;/td&gt;        &lt;td valign="top" width="304"&gt;Super gem&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="136"&gt;M&lt;/td&gt;        &lt;td valign="top" width="304"&gt;Megabomb&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="136"&gt;V&lt;/td&gt;        &lt;td valign="top" width="304"&gt;Snapper&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="136"&gt;B&lt;/td&gt;        &lt;td valign="top" width="304"&gt;Bait&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="136"&gt;S&lt;/td&gt;        &lt;td valign="top" width="304"&gt;Shield&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="136"&gt;P&lt;/td&gt;        &lt;td valign="top" width="304"&gt;Gun powerup&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="136"&gt;J&lt;/td&gt;        &lt;td valign="top" width="304"&gt;Jetpack&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="136"&gt;C&lt;/td&gt;        &lt;td valign="top" width="304"&gt;Cleanser (changes slime pool to water)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="136"&gt;R&lt;/td&gt;        &lt;td valign="top" width="304"&gt;Mushroom&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="136"&gt;Blue&lt;/td&gt;        &lt;td valign="top" width="304"&gt;Water&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="136"&gt;Green&lt;/td&gt;        &lt;td valign="top" width="304"&gt;Slime&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="136"&gt;Green (marked M)&lt;/td&gt;        &lt;td valign="top" width="304"&gt;Moving slime&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="136"&gt;Double line&lt;/td&gt;        &lt;td valign="top" width="304"&gt;Passway (door or ceiling)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="136"&gt;Brown edge&lt;/td&gt;        &lt;td valign="top" width="304"&gt;Bouncy slime&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="136"&gt;Red edge&lt;/td&gt;        &lt;td valign="top" width="304"&gt;Sticky slime&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="136"&gt;Blue edge&lt;/td&gt;        &lt;td valign="top" width="304"&gt;Ice&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22577" width="1" height="1"&gt;</description><category domain="http://www.alexthissen.nl/blogs/atarilynx/archive/tags/Games/default.aspx">Games</category></item><item><title>Portable Libraries for Visual Studio 2010 SP1</title><link>http://www.alexthissen.nl/blogs/main/archive/2011/07/07/portable-libraries-for-visual-studio-2010-sp1.aspx</link><pubDate>Thu, 07 Jul 2011 21:47:03 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22576</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The Microsoft &lt;a href="http://blogs.msdn.com/b/bclteam/" target="_blank"&gt;BCL team&lt;/a&gt; recently released the RTM version of &lt;a href="http://msdn.microsoft.com/en-us/library/gg597391.aspx" target="_blank"&gt;Portable Libraries&lt;/a&gt; (PL). This &lt;a href="http://visualstudiogallery.msdn.microsoft.com/b0e0b5e9-e138-410b-ad10-00cb3caf4981" target="_blank"&gt;PowerTool&lt;/a&gt; for Visual Studio 2010 SP1 allow you to develop managed assemblies for more than one target .NET framework. It will let you aim your code at both the full .NET Framework, Silverlight, Silverlight for Windows Phone 7 and/or Xbox 360. By using the Portable Libraries you can control which targets you are aiming for and compile a single assembly that will work on all targets you selected.&lt;/p&gt; &lt;p&gt;The Portable Libraries has features that are close to, yet different from another piece of functionality in Visual Studio: multitargeting. It is similar in that it will help you find the allowed subset of functionality in the .NET Framework given the combination of targets you select. It is different, because it will let you have a single project where you would normally have multiple projects for class libraries targeting .NET FX (versions 2.0 to 4.0, with full or client profile) and Silverlight. For Xbox 360 you have the Xbox 360 Game Library which comes close, but is a different thing altogether. PL projects are class libraries which can host reusable managed code over all of the previously mentioned.&lt;/p&gt; &lt;p&gt;You can install the tooling for PL from &lt;a href="http://visualstudiogallery.msdn.microsoft.com/b0e0b5e9-e138-410b-ad10-00cb3caf4981" target="_blank"&gt;here&lt;/a&gt;. Once you have done that, a new library project is available:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_7B364EAA.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_thumb_5F00_48664836.png" width="640" height="211" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;A Portable Library project has its own project template. The main difference from a regular class library is in the AssemblyInfo.cs file. The contents are trimmed, because ComVisibleAttribute and GuidAttribute do not make sense for Silverlight and Xbox and are not allowed. The other difference is an extra tab on the Project Properties page. It allows you to specify the targets for your library.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_07C3FBC7.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_thumb_5F00_596A7619.png" width="640" height="314" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;In the screenshot below you can see a Class Library project converted to a Portable Library. The references to assemblies that are not part of the allowed assemblies for the targets are indicated with exclamation marks, just as when you had selected a not allowed assembly for the .NET Target Framework in a normal Class Library.&lt;br /&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_38770372.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_thumb_5F00_4CFC52F0.png" width="384" height="482" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The Portable Libraries have a different build target, which further distinguishes them from regular class libraries.&lt;/p&gt; &lt;p&gt;The allowed set of assemblies is listed &lt;a href="http://msdn.microsoft.com/en-us/library/gg597391.aspx" target="_blank"&gt;here&lt;/a&gt;, but to give you an idea, it is limited:&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;p&gt;&lt;strong&gt;mscorlib.dll&lt;/strong&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;strong&gt;System.dll&lt;/strong&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;strong&gt;System.Core.dll&lt;/strong&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;System.Xml.dll&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;em&gt;System.ComponentModel.Composition.dll&lt;/em&gt; (MEF)&lt;/p&gt; &lt;li&gt; &lt;p&gt;System.Net.dll&lt;/p&gt; &lt;li&gt; &lt;p&gt;System.Runtime.Serialization.dll&lt;/p&gt; &lt;li&gt; &lt;p&gt;System.ServiceModel.dll&lt;/p&gt; &lt;li&gt; &lt;p&gt;System.Xml.Serialization.dll&lt;/p&gt; &lt;li&gt; &lt;p&gt;System.Windows.dll (from Silverlight)&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;This set is the largest possible if you are only targeting .NET Framework 4. For Silverlight and Phone 7 you cannot use MEF (System.ComponentModel.Composition), and for Xbox 360 you can &lt;u&gt;only&lt;/u&gt; use the bold assemblies.&lt;/p&gt; &lt;p&gt;The use of the Portable Class Library project will pay of in finding which classes you can use and which not. If you are in doubt, you can check the MSDN documentation and make sure. Here is an example for the System.Runtime.InteropServices.StructLayoutAttribute class:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_1EA2CD43.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_thumb_5F00_4570E383.png" width="273" height="284" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;In the type’s members you can see whether a particular member is supported (when the type itself is):&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_053ACA09.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_thumb_5F00_5E0080D3.png" width="383" height="168" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The small project icon in the left column means it is supported.&lt;/p&gt; &lt;h2&gt;An example scenario&lt;/h2&gt; &lt;p&gt;Let’s say you have a piece of C# code that can be reused in an application or game for Windows, Phone and Xbox 360. Normally (without Portable Libraries), you would need to set up several projects:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_6FDD14A0.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_thumb_5F00_5D944DDE.png" width="257" height="371" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Each of the ReusableGameCore libraries contain the same code, but have a different target. They are referenced by the corresponding game (or application) version for Windows, Phone and Xbox. &lt;/p&gt; &lt;p&gt;You need to do so, because the build target need to be different for the various consumers of your reusable code. For example, referencing a normal Class Library project in an XNA Game Studio 4.0 project for Xbox 360 will get you compile errors. It will complain about the “wrong” target framework being selected, even though you have changed it to .NET 4 Client Profile (or something else). &lt;/p&gt; &lt;p&gt;As you can see in the screenshot the code in the Silverlight and Xbox360 library projects is linked from the Windows version. You will only have one version of the code, but having three project is not ideal.&lt;/p&gt; &lt;p&gt;The alternative is offered by Portable Libraries. In that case the three libraries can be combined into a single one. Your solution will look like this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_4F55D4EE.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_thumb_5F00_0F1FBB74.png" width="257" height="224" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The three other projects each reference the single portable class library. Quicker to set up and easier to maintain. Moreover, you can install additional frameworks, which allows you to target other or more from the same library.&lt;/p&gt; &lt;h2&gt;Converting a Class Library to a Portable Class Library&lt;/h2&gt; &lt;p&gt;It could very well be that you have a Visual Studio solution that holds class libraries which you would like to be Portable. One option is to create a new Portable Library project and transfer the files from the class library to the new Portable project. This should be the normal way to go. I tried whether it is possible to convert the class library project into a portable one. Turns out that it can be done. Here’s how:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Unload the Class Library project. Right-click the project and select Unload Project from the context menu to do so.  &lt;li&gt;Edit the .csproj or .vbproj file. Pick the option from the context menu.  &lt;li&gt;Add the following fragment to the first &amp;lt;PropertyGroup&amp;gt; under the &amp;lt;Project&amp;gt; root element:&lt;br /&gt;&lt;br /&gt;C#:&lt;pre style="background:white;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&lt;span&gt;&lt;font color="#a31515"&gt;ProjectTypeGuids&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;ProjectTypeGuids&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&lt;span&gt;&lt;font color="#a31515"&gt;TargetFrameworkProfile&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;Profile1&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;TargetFrameworkProfile&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="list-style-type:disc;background:white;"&gt;&lt;font face="Calibri"&gt;Visual Basic:&lt;/font&gt;&lt;/pre&gt;&lt;pre style="list-style-type:disc;background:white;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&lt;span&gt;&lt;font color="#a31515"&gt;ProjectTypeGuids&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;{14182A97-F7F0-4C62-8B27-98AA8AE2109A};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;ProjectTypeGuids&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;
&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;TargetFrameworkProfile&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;Profile2&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;TargetFrameworkProfile&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;
&lt;li&gt;Remove the &amp;lt;ProductVersion&amp;gt; and &amp;lt;SchemaVersion elements:&lt;br /&gt;&lt;br /&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&lt;span&gt;&lt;font color="#a31515"&gt;ProductVersion&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;8.0.30703&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;ProductVersion&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;SchemaVersion&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;2.0&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;SchemaVersion&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;
&lt;li&gt;Change the &amp;lt;Import&amp;gt; element just before the closing tag of the &amp;lt;Project&amp;gt; element to the . &lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&lt;span&gt;&lt;font color="#000000" face="Calibri"&gt;In C# replace&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;pre style="list-style-type:disc;background:white;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&lt;span&gt;&lt;font color="#a31515"&gt;Import&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt;Project&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;/span&gt;&amp;quot;&lt;span&gt;&lt;font color="#0000ff"&gt;$(MSBuildToolsPath)\Microsoft.CSharp.targets&lt;/font&gt;&lt;/span&gt;&amp;quot;&lt;span&gt;&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="list-style-type:disc;background:white;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&lt;span&gt;&lt;font color="#000000" face="Calibri"&gt;with&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="list-style-type:disc;background:white;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&lt;span&gt;&lt;font color="#a31515"&gt;Import&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt;Project&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;/span&gt;&amp;quot;&lt;span&gt;&lt;font color="#0000ff"&gt;$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets&lt;/font&gt;&lt;/span&gt;&amp;quot;&lt;span&gt;&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;/span&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&lt;span&gt;&lt;font color="#000000" face="Calibri"&gt;In Visual Basic replace&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre style="list-style-type:disc;background:white;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&lt;span&gt;&lt;font color="#a31515"&gt;Import&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt;Project&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;/span&gt;&amp;quot;&lt;span&gt;&lt;font color="#0000ff"&gt;$(MSBuildToolsPath)\Microsoft.VisualBasic.targets&lt;/font&gt;&lt;/span&gt;&amp;quot;&lt;span&gt;&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="list-style-type:disc;background:white;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&lt;span&gt;&lt;font color="#000000" face="Calibri"&gt;with&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="list-style-type:disc;background:white;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&lt;span&gt;&lt;font color="#a31515"&gt;Import&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt;Project&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;/span&gt;&amp;quot;&lt;span&gt;&lt;font color="#0000ff"&gt;$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.VisualBasic.targets&lt;/font&gt;&lt;/span&gt;&amp;quot;&lt;span&gt;&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;/span&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="list-style-type:disc;background:white;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:12pt;"&gt;&lt;span&gt;&lt;font color="#000000" face="Calibri"&gt;&lt;/pre&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt;
&lt;ul&gt;&lt;/ul&gt;&lt;/ul&gt;
&lt;li&gt;Remove the following code from AssemblyInfo.cs (or the equivalent from AssemblyInfo.vb)&lt;/li&gt;&lt;pre style="background:white;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#008000"&gt;&lt;font style="font-size:12pt;"&gt;// Setting ComVisible to false makes the types in this assembly not visible &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;
&lt;span&gt;&lt;font color="#008000"&gt;// to COM components.  If you need to access a type in this assembly from &lt;/font&gt;&lt;/span&gt;
&lt;span&gt;&lt;font color="#008000"&gt;// COM, set the ComVisible attribute to true on that type.&lt;/font&gt;&lt;/span&gt;
[&lt;span&gt;&lt;font color="#0000ff"&gt;assembly&lt;/font&gt;&lt;/span&gt;: ComVisible(&lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;)]
 
&lt;span&gt;&lt;font color="#008000"&gt;// The following GUID is for the ID of the typelib if this project is exposed to COM&lt;/font&gt;&lt;/span&gt;
[&lt;span&gt;&lt;font color="#0000ff"&gt;assembly&lt;/font&gt;&lt;/span&gt;: Guid(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;1e49a9ca-89db-46d1-9704-b76e10897ffb&amp;quot;&lt;/font&gt;&lt;/span&gt;)]&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;li&gt;Reload the project by right-clicking the project and selecting the menu item&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Please note that this is not an official and therefore not supported migration. No guarantees and make sure you have backups, checkins et cetera before you undertake this conversion.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22576" width="1" height="1"&gt;</description><category domain="http://www.alexthissen.nl/blogs/main/archive/tags/Gaming/default.aspx">Gaming</category><category domain="http://www.alexthissen.nl/blogs/main/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://www.alexthissen.nl/blogs/main/archive/tags/Windows+Phone/default.aspx">Windows Phone</category><category domain="http://www.alexthissen.nl/blogs/main/archive/tags/Xbox+360/default.aspx">Xbox 360</category></item><item><title>Running Atari Lynx emulator on a Windows Phone 7</title><link>http://www.alexthissen.nl/blogs/atarilynx/archive/2011/07/06/running-atari-lynx-emulator-on-a-windows-phone-7.aspx</link><pubDate>Wed, 06 Jul 2011 20:00:00 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22575</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The implementation of the emulator for the Atari Lynx has been progressing steadily. I thought it would be a good time to show a particular point of progress: a working implementation of the emulator running on a Windows Phone 7. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;(Please visit the site to view this media)&lt;/p&gt;
&lt;div&gt;Update: here is another video of the emulator running in Windows Phone 7 emulator.&lt;/div&gt;
&lt;p&gt;&amp;nbsp;(Please visit the site to view this media)&lt;/p&gt;
&lt;p&gt;Some details:&lt;/p&gt;
&lt;p&gt;The emulator core is used in a &lt;a target="_blank" href="http://www.microsoft.com/download/en/details.aspx?id=23714"&gt;XNA Game Studio 4.0&lt;/a&gt; implementation for Windows, Phone 7 and Xbox 360 client. The Windows and Phone 7 implementations work correctly (give and take the remaining bugs and mayor performance issues), but the Xbox 360 variant doesn&amp;rsquo;t work. &lt;/p&gt;
&lt;p&gt;As you can see in the video the framerate is pretty dramatic with an estimate of 2 fps (where 0.2 would probably be more accurate). The Windows version can run at 60 fps, but the Windows Phone 7 doesn&amp;rsquo;t even come close. The Windows Phone 7 emulator can run most games at 25 fps. This is something that needs to be investigated. There were no performance optimizations made just yet.&lt;/p&gt;
&lt;p&gt;You can find the source code for the emulator at &lt;a target="_blank" href="http://lynxemulator.codeplex.com"&gt;lynxemulator.codeplex.com&lt;/a&gt;. Suggestions for improvement are very welcome.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://pepijnsitter.wordpress.com/author/pepijnsitter/"&gt;Pepijn Sitter&lt;/a&gt; helped develop part of this code. He refactored the controller handling implementation and did some first, rough implementation of the gestures for the Phone, so we could at least get past the start screen. (Which didn&amp;rsquo;t work out as expected). Thanks Pepijn.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22575" width="1" height="1"&gt;</description><category domain="http://www.alexthissen.nl/blogs/atarilynx/archive/tags/Development/default.aspx">Development</category><category domain="http://www.alexthissen.nl/blogs/atarilynx/archive/tags/Emulation/default.aspx">Emulation</category></item><item><title>Compiling Handy 0.95 for Windows</title><link>http://www.alexthissen.nl/blogs/atarilynx/archive/2011/06/20/compiling-handy-0-95-for-windows.aspx</link><pubDate>Mon, 20 Jun 2011 08:25:20 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22573</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Quick runthrough to get the Handy sources to compile for Windows using Microsoft Visual Studio 2010 (or Microsoft Visual C++ 2010 Express, which is a free download).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/handylogo_5F00_69FF22D3.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="handylogo" border="0" alt="handylogo" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/handylogo_5F00_thumb_5F00_1AD1B472.jpg" width="486" height="142" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Download these first:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://sourceforge.net/projects/handy/files/handy/Handy%200.95/" target="_blank"&gt;Handy source code&lt;/a&gt; (Handy-win32src-0.95.zip contains the sources)&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express" target="_blank"&gt;Microsoft Visual C++ 2010 Express&lt;/a&gt; (in case you do not own a copy of Visual Studio that includes C++)&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=3904b19a-02b9-447b-ab58-c12e2456e9ba" target="_blank"&gt;DirectX 9.0 Software Development Kit Update (August 2005)&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Install Visual C++ and the DirectX SDK. Unpack the sources of Handy. &lt;/p&gt;  &lt;p&gt;Open the folder of the Handy sources and find the Handy.dsp file. Doubleclick to the open it in Visual C++. It will prompt you to convert the project. Choose Yes in the dialog.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_1D2B3670.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_thumb_5F00_0A0A09C4.png" width="436" height="263" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Save the solution. You must specify the location of the .sln solution file. The root of the project will be an appropriate location.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_48EB6492.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_thumb_5F00_661D1E6A.png" width="640" height="340" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Right-click the Handy project and open the Properties dialog. Go to the C/C++ section and enter a new entry under “Additional Include Directories”. This should be “C:\Program Files (x86)\Microsoft DirectX 9.0 SDK (August 2005)\Include” if you installed the DirectX 9 SDK to the default installation directory.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_16FBC1D7.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_thumb_5F00_31F4454B.png" width="640" height="168" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Next, go to the Linker section and add “C:\Program Files (x86)\Microsoft DirectX 9.0 SDK (August 2005)\Lib\x86” to the “Additional Libraries Directories”.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_06CBE5DF.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_thumb_5F00_390F6DC4.png" width="640" height="208" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When you first try to compile the sources you will get a number of errors. Fix each of these, bullet by bullet and recompile in between:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;22 errors: error C1083: Cannot open include file: &amp;#39;strstrea.h&amp;#39;: No such file or directory     &lt;br /&gt;Apply fix 1.&lt;/li&gt;    &lt;li&gt;96 errors: related to endl, ostream&amp;amp;, ostrstream and ostrstream&amp;amp; references and declarations in error.h     &lt;br /&gt;Apply fix 2.&lt;/li&gt;    &lt;li&gt;43 errors: &lt;/li&gt;    &lt;p&gt;error C4430: missing type specifier - int assumed. Note: C++ does not support default-int     &lt;br /&gt;error C2664: &amp;#39;CWnd::OnActivateApp&amp;#39; : cannot convert parameter 2 from &amp;#39;HTASK&amp;#39; to &amp;#39;DWORD&amp;#39;      &lt;br /&gt;error C2440: &amp;#39;static_cast&amp;#39; : cannot convert from &amp;#39;void (__thiscall CLynxWindow::* )(WPARAM,LPARAM)&amp;#39; to &amp;#39;LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)&amp;#39;      &lt;br /&gt;error C2065: &amp;#39;loop&amp;#39; : undeclared identifier      &lt;br /&gt;error C2065: &amp;#39;endl&amp;#39; : undeclared identifier&lt;/p&gt;    &lt;p&gt;Apply fixes 2 to 6&lt;/p&gt; &lt;/ul&gt;  &lt;p&gt;This is the list of fixes you will need to make to get the sources to compile.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Replace #include “strstrea.h” in error.h with these two lines:&lt;/li&gt;    &lt;pre&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;strstream&amp;gt;&lt;/pre&gt;

  &lt;li&gt;Prefix ostream&amp;amp;, ostrstream and ostrstream&amp;amp; declarations with:&lt;/li&gt;

  &lt;pre&gt;&lt;strong&gt;std::&lt;/strong&gt;&lt;/pre&gt;

  &lt;li&gt;Change line 1192 in Lynxwin.cpp to &lt;/li&gt;

  &lt;pre&gt;static bool firsttime=0;&lt;/pre&gt;

  &lt;li&gt;Change HTASK hTask in line 2365 of Lynxwin.cpp and line 325 of Lynxwin.h to&lt;/li&gt;

  &lt;pre&gt;&lt;strong&gt;DWORD hTask&lt;/strong&gt;&lt;/pre&gt;

  &lt;li&gt;Comment out the lines 868 and 869 of Lynxwin.cpp. I do not know how to really fix these errors yet.&lt;/li&gt;

  &lt;li&gt;Add a new line at 1552 in Lynxwin.cpp with:&lt;/li&gt;

  &lt;pre&gt;ULONG loop=0;&lt;/pre&gt;

  &lt;li&gt;Change line 95 of Debuggerwin.cpp to:&lt;/li&gt;

  &lt;pre&gt;for(int loop=0;loop&amp;lt;mWinHeight;loop++) LineOutput(&amp;quot;&amp;quot;);&lt;/pre&gt;

  &lt;li&gt;Change line 550 of Debuggerwin.cpp to these two:&lt;/li&gt;

  &lt;pre&gt;int loop;
for(loop=0;loop&amp;lt;mLineInput-1;loop++)&lt;/pre&gt;

  &lt;li&gt;Change line 487 of codewin.cpp to these two:&lt;/li&gt;

  &lt;pre&gt;int loop;
for(loop=0;loop&amp;lt;MAX_CPU_BREAKPOINTS;loop++)&lt;/pre&gt;
&lt;/ol&gt;

&lt;p&gt;After that you should have a Handy C++ project that compiles, links and runs correctly.&lt;/p&gt;

&lt;p&gt;For the developer version of Handy you should add a preprocessor definition _LYNXDBG to the project:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_0D0EA86E.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_thumb_5F00_3E1DBD41.png" width="640" height="195" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The developer version gives you a Code, Debugger and Graphics dump window and ability to debug/step-through the 65SC02 code.&lt;/p&gt;

&lt;p&gt;You will also get new compile errors. To fix these, apply fix 7 to 9 to get rid of those.&lt;/p&gt;

&lt;p&gt;Run the Handy emulator, find yourself LYNXBOOT.IMG if you have got the boot image and some rom images for (homebrew) games.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_19F5105A.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_thumb_5F00_711D4946.png" width="640" height="360" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For your convenience, you can download the revised sources here: &lt;a title="http://www.alexthissen.nl/media/p/22572.aspx" href="http://www.alexthissen.nl/media/p/22572.aspx"&gt;http://www.alexthissen.nl/media/p/22572.aspx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22573" width="1" height="1"&gt;</description><category domain="http://www.alexthissen.nl/blogs/atarilynx/archive/tags/Development/default.aspx">Development</category></item><item><title>SDN Event June 2011: ASP.NET Web Pages Framework for ASP.NET developers</title><link>http://www.alexthissen.nl/blogs/main/archive/2011/06/20/sdn-event-june-2011-asp-net-web-pages-framework-for-asp-net-developers.aspx</link><pubDate>Mon, 20 Jun 2011 05:43:22 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22570</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Last Friday saw another edition of a &lt;a href="http://www.sdn.nl/SDN/" target="_blank"&gt;Software Development Network&lt;/a&gt;&amp;#160;&lt;a href="http://www.sdn.nl/SDN/SDNEvent/Events2011/SDNEventjuni2011/tabid/205/Default.aspx" target="_blank"&gt;Event&lt;/a&gt;. A number of great sessions were on the list. I got to see &lt;a href="http://blogs.infosupport.com/blogs/marcelv/" target="_blank"&gt;Marcel de Vries&lt;/a&gt;’s session on combined development for Windows Phone 7, Android and iOS. I must say I was impressed with the state of tooling for Mono for Android and MonoTouch (for iOS). &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_717E0311.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_thumb_5F00_3542119C.png" width="595" height="58" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;My session for the SDN Event was on the ASP.NET Web Pages Framework. In it I show &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;what this new framework is, &lt;/li&gt;    &lt;li&gt;how it relates to ASP.NET WebForms, MVC and WebMatrix &lt;/li&gt;    &lt;li&gt;how to build applications with it &lt;/li&gt;    &lt;li&gt;introduction to Razor (see also my DevDays 2011 session on “Introduction to Razor” for more information on Razor) &lt;/li&gt;    &lt;li&gt;what the new concepts like “page hierarchies”, UrlData and PageData are &lt;/li&gt;    &lt;li&gt;working with models and model state (and how this is different than the model from MVC) &lt;/li&gt;    &lt;li&gt;automatic routing&lt;/li&gt;    &lt;li&gt;some more&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If you couldn’t make it, feel free to take a look at the &lt;a href="http://www.alexthissen.nl/media/p/22568.aspx" target="_blank"&gt;slides&lt;/a&gt; and the &lt;a href="http://www.alexthissen.nl/media/p/22569.aspx" target="_blank"&gt;demos&lt;/a&gt;. Thanks everyone who attended the session. Hopefully you found it useful.&lt;/p&gt;  &lt;p&gt;I missed the session of &lt;a href="http://pepijnsitter.wordpress.com/author/pepijnsitter/" target="_blank"&gt;Pepijn Sitter&lt;/a&gt; on XNA Game development for the Windows Phone 7, because he shared the timeslot with my own session. Luckily for me I had a chance to meet him before his session. We had a very enthusiastic talk on games, game development, the fun of it all and his Ms. Pacman implementation with XNA for XBox360 and Windows Phone 7. Brilliant stuff.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22570" width="1" height="1"&gt;</description></item><item><title>Come Lynx with me</title><link>http://www.alexthissen.nl/blogs/atarilynx/archive/2011/05/31/come-lynx-with-me.aspx</link><pubDate>Tue, 31 May 2011 20:03:06 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22567</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;One of the differentiating features of the Atari Lynx was its ability to link together up to 18 Lynx devices using a set of cables. This allows for multiplayer games, &lt;/p&gt;  &lt;p&gt;You need at least two Lynx devices and at least one ComLynx cable to make a connection. For more Lynxes you require an additional ComLynx cable for every extra Lynx. The ComLynx cable has two male connectors at either end. One end has a split cable with a female connector. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/IMAG1690_5F00_22FE3BD6.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMAG1690" border="0" alt="IMAG1690" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/IMAG1690_5F00_thumb_5F00_690EF8E9.jpg" width="244" height="148" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The single male side of a new cable can be connected to the female connector and to the next Lynx at the split end. This way you can connect an potentially unlimited chain of Lynxes. The practical limit is around 18 because of communication overhead and something called “pull-ups”.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/IMAG1686_5F00_28D8DF6F.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMAG1686" border="0" alt="IMAG1686" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/IMAG1686_5F00_thumb_5F00_68A2C5F4.jpg" width="125" height="70" /&gt;&lt;/a&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/IMAG1684_5F00_286CAC7A.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMAG1684" border="0" alt="IMAG1684" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/IMAG1684_5F00_thumb_5F00_3A494047.jpg" width="125" height="70" /&gt;&lt;/a&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/IMAG1684_5F00_7A1326CC.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMAG1684" border="0" alt="IMAG1684" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/IMAG1684_5F00_thumb_5F00_20E13D0D.jpg" width="125" height="70" /&gt;&lt;/a&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/IMAG1684_5F00_19C20095.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMAG1684" border="0" alt="IMAG1684" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/IMAG1684_5F00_thumb_5F00_6E7D698D.jpg" width="125" height="70" /&gt;&lt;/a&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/IMAG1684_5F00_2E475013.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMAG1684" border="0" alt="IMAG1684" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/IMAG1684_5F00_thumb_5F00_4023E3E0.jpg" width="125" height="70" /&gt;&lt;/a&gt; and so on.&lt;/p&gt;  &lt;p&gt;There were several games that used this capability for multiplayer support. Each Lynx will need a separate copy of the game. There is a possibility to game&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="573"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="246"&gt;         &lt;p&gt;&lt;strong&gt;Title&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="51"&gt;         &lt;p&gt;&lt;strong&gt;Players&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="220"&gt;         &lt;p&gt;&lt;strong&gt;Title&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="54"&gt;         &lt;p&gt;&lt;strong&gt;Players&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="242"&gt;         &lt;p&gt;Awesome Golf &lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="55"&gt;         &lt;p&gt;1-4&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="217"&gt;         &lt;p&gt;Pit-Fighter&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="57"&gt;         &lt;p&gt;1-2&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="239"&gt;         &lt;p&gt;Baseball Heroes&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="58"&gt;         &lt;p&gt;1-2&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="214"&gt;         &lt;p&gt;Raiden&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="60"&gt;         &lt;p&gt;1-2&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="236"&gt;         &lt;p&gt;Basketbrawl&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="61"&gt;         &lt;p&gt;1-2&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="212"&gt;         &lt;p&gt;Rampage&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="62"&gt;         &lt;p&gt;1-4&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="234"&gt;         &lt;p&gt;Battlewheels&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="63"&gt;         &lt;p&gt;1-6&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="211"&gt;         &lt;p&gt;Rampart&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="63"&gt;         &lt;p&gt;1-2&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="233"&gt;         &lt;p&gt;Battlezone 2000&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="65"&gt;         &lt;p&gt;1-4&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="210"&gt;         &lt;p&gt;Robo-squash&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="64"&gt;         &lt;p&gt;1-2&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="232"&gt;         &lt;p&gt;Bill and Ted’s Excellent Adventure&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="66"&gt;         &lt;p&gt;1-2&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="209"&gt;         &lt;p&gt;Shanghai&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="65"&gt;         &lt;p&gt;1-2&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="231"&gt;         &lt;p&gt;California Games&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="67"&gt;         &lt;p&gt;1-4&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="208"&gt;         &lt;p&gt;Super Off-Road&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="66"&gt;         &lt;p&gt;1-4&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="230"&gt;         &lt;p&gt;Checkered Flag&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="68"&gt;         &lt;p&gt;1-6&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="208"&gt;         &lt;p&gt;Super Skweek&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="67"&gt;         &lt;p&gt;1-2&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="230"&gt;         &lt;p&gt;Double Dragon&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="68"&gt;         &lt;p&gt;1-2&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="207"&gt;         &lt;p&gt;Todd’s Adventures in Slime World&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="67"&gt;         &lt;p&gt;1-8&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="230"&gt;         &lt;p&gt;European Soccer Challenge&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="68"&gt;         &lt;p&gt;1-2&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="207"&gt;         &lt;p&gt;Tournament Cyberball 2072&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="67"&gt;         &lt;p&gt;1-4&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="230"&gt;         &lt;p&gt;Gauntlet: The Third Encounter&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="68"&gt;         &lt;p&gt;1-4&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="207"&gt;         &lt;p&gt;Turbo Sub&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="67"&gt;         &lt;p&gt;1-2&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="230"&gt;         &lt;p&gt;Hockey&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="68"&gt;         &lt;p&gt;1-2&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="207"&gt;         &lt;p&gt;Warbirds&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="67"&gt;         &lt;p&gt;1-4&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="230"&gt;         &lt;p&gt;Jimmy Connors Tennis&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="68"&gt;         &lt;p&gt;1-4&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="207"&gt;         &lt;p&gt;World Class Soccer&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="67"&gt;         &lt;p&gt;1-2&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="230"&gt;         &lt;p&gt;Joust&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="68"&gt;         &lt;p&gt;1-2&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="207"&gt;         &lt;p&gt;Xenophobe&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="67"&gt;         &lt;p&gt;1-4&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="230"&gt;         &lt;p&gt;Lynx Casino&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="68"&gt;         &lt;p&gt;1-2&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="207"&gt;         &lt;p&gt;Xybots&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="67"&gt;         &lt;p&gt;1-2&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="230"&gt;         &lt;p&gt;Malibu Bikini Volleyball&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="68"&gt;         &lt;p&gt;1-4&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="207"&gt;         &lt;p&gt;Zarlor Mercenary&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="67"&gt;         &lt;p&gt;1-4&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="230"&gt;         &lt;p&gt;NFL Football&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="69"&gt;         &lt;p&gt;1-2&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="213"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="69"&gt;&amp;nbsp;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;The ComLynx-able games can be recognized by the yellow triangle at the bottom-right corner of the box. This shows that players can “Lynx Up” and the maximum number of players. The game “California Games” is an exception, in that is says “1 To 2 Players” on the box, where a total number of 4 players are possible.&lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="Todd&amp;#39;s Adventures in Slime World - Box Front" src="http://www.atariage.com/Lynx/boxes/b_ToddsAdventuresInSlimeWorld_front.jpg" width="191" height="230" /&gt; and pay special attention to the corner. &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_66F1FA20.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_thumb_5F00_05C86DFF.png" width="244" height="231" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Here is a video that shows two Lynxes connected together:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:b6337df4-367f-4571-a18f-2afaeeeedee9" class="wlWriterEditableSmartContent"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=xikzrc0BgfA" target="_new"&gt;&lt;img src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/videobc0298ec3ab1_5F00_239C70D8.jpg" style="border-style:none;" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="width:448px;clear:both;font-size:.8em;"&gt;Atari Lynx version I and version II ComLynxed together&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;Remarks found all over the Internet:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;“The ComLynx does not have any hardware bugs. But the format is pretty much fixed to start bit, 8 data bits, even parity, 1 stop bit. And the only sensible baud rates are 9600 and 62500. The ComLynx has a combined Rx/Tx pin and it can sense if two Lynxes transmit at the same time. … The Lynx has +5V on one pin that is enough to power up the communications cable.” – &lt;a href="http://www.atariage.com/forums/topic/65776-red-eye-protocol-for-commlynx/" target="_blank"&gt;AtariAge forums&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;“&lt;a href="http://en.wikipedia.org/wiki/ComLynx"&gt;ComLynx&lt;/a&gt; was originally developed to run over infrared links (and was codenamed RedEye).&lt;sup&gt;&lt;a href="http://en.wikipedia.org/wiki/#cite_note-3"&gt;[4]&lt;/a&gt;&lt;/sup&gt; This was changed to a cable-based networking system before the final release.” – &lt;a href="http://en.wikipedia.org/wiki/Atari_Lynx" target="_blank"&gt;Wikipedia&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;“UART (for ComLynx) (fixed format 8E1, up to 62500 Bd)” – &lt;a href="http://en.wikipedia.org/wiki/Atari_Lynx" target="_blank"&gt;Wikipedia&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;img style="margin:10px 10px 10px 0px;display:inline;float:right;" align="right" src="http://www.mr-atari.com/afbeeldingen/lynx%20cable%20box.jpg" width="97" height="410" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;Bugs in the ComLynx (from the Lynx development manual):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;“A design error causes the power up state of the output to be TTL high, ALL code must set the TXOPEN bit in order to fix this&amp;quot; &lt;/li&gt;    &lt;li&gt;&amp;quot;Well, we did screw something up after all. Both the transmit and receive interrupts are &amp;#39;level&amp;#39; sensitive, rather than &amp;#39;edge&amp;#39; sensitive&amp;quot; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Links that seemed useful to me:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="http://www.monlynx.de/lynx/lynx8a.html#_11" href="http://www.monlynx.de/lynx/lynx8a.html#_11"&gt;http://www.monlynx.de/lynx/lynx8a.html#_11&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a title="http://www.freebsd.org/doc/en_US.ISO8859-1/articles/serial-uart/index.html" href="http://www.freebsd.org/doc/en_US.ISO8859-1/articles/serial-uart/index.html"&gt;http://www.freebsd.org/doc/en_US.ISO8859-1/articles/serial-uart/index.html&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://www.atariage.com/forums/topic/166164-new-usb-serial-to-comlynx-adapter/" href="http://www.atariage.com/forums/topic/166164-new-usb-serial-to-comlynx-adapter/"&gt;http://www.atariage.com/forums/topic/166164-new-usb-serial-to-comlynx-adapter/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://www.classicgamedev.com/Blog:Hacking_Classics/USB_Serial_to_ComLynx_Adapter" href="http://www.classicgamedev.com/Blog:Hacking_Classics/USB_Serial_to_ComLynx_Adapter"&gt;http://www.classicgamedev.com/Blog:Hacking_Classics/USB_Serial_to_ComLynx_Adapter&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Here are some observations I made, which I hadn’t read on the Internet anywhere:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Some (maybe all?) ComLynx-able games can connect players while the start-menu/animations is displayed.      &lt;br /&gt;In other words: as long as no player has started the game, other players can join by switching their Lynx on. Bear in mind the next observation. I always believed that the Lynxes needed to be powered on at the (near-exact) same time. &lt;/li&gt;    &lt;li&gt;When multiple Lynxes are linked together, the outsides of the chain can switch off, without disrupting the other connected Lynxes. The same goes for switching the Lynxes on at a later time (see previous point) &lt;/li&gt;    &lt;li&gt;You can &lt;a href="http://www.classicgamedev.com/Lynx:Disable_cart_detection" target="_blank"&gt;disable the cartridge detection&lt;/a&gt; of the Lynx. In theory this should allow for multiple Lynxes to connect on one cartridge, provided that the Lynx have detection disabled and that the cartridge is read only at the startup of the game. Did anyone try this?&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;From the Lynx Frequently Asked Questions:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Q. What does &amp;quot;ComLynx&amp;quot; mean, exactly?        &lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;A. Some Lynx games allow multiple players to play together simultaneously. This works when each player has a Lynx game machine, and all of the machines are connected to each other via cables. The connection is the ComLynx port, and the cables are ComLynx cables. Games that support this mutiplayer simultaneous play are usually identified by the phrase &amp;quot;1 to N players Lynx up&amp;quot; on the box, the instruction manual, and/or the game card. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Q. Do all players &amp;quot;Lynxed up&amp;quot; via the ComLynx need a copy of the game being played?        &lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;A. Yes. All players need a copy of the game card. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Q. What&amp;#39;s the ComLynx port like? &lt;/em&gt;&lt;/strong&gt;    &lt;br /&gt;A. There is limit of 18 players via ComLynx. In practice it may be possible to connect more units together, but to operate within specifications, the drivers in the Lynx cannot drive over more than 17 units with pull-ups on the serial ports. ComLynx runs from 300.5 to 62.5K baud. It works on a &amp;quot;listen and send&amp;quot; structure. Data transmission between Lynxes is done in the background, freeing up the CPU to run the game instead of communicating. It&amp;#39;s called &amp;quot;RedEye&amp;quot; in-house at Atari, named after an early idea of having Lynxes communicate with infra-red transmissions. It uses a three-wire cable (+5V/Ground/Data) and allows for bi- directional serial communications. The system frames messages in terms of 11-bit words, each consisting of a start bit, eight data bits, a parity bit, and a stop bit. The ComLynx port is used solely for communications; it can&amp;#39;t be used to control other aspects of the Lynx, though in theory it can be used to send signals to external devices. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Q. Sometimes a multiplayer ComLynx game will freeze up. Why?        &lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;A. A ComLynxed game will freeze if communication between the Lynxes is interrupted. If communications can be restored, the game will continue. The most common cause of this problem is a fray in one of the ComLynx cables, or a loose seating in one of the ComLynx jacks. Communication is broken, and the game &amp;quot;freezes&amp;quot;. Jiggling the cable or reseating the jacks may fix the solution temporarily, but the best cure is a new cable. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Q. I hear there&amp;#39;s a ComLynx port on the Atari Jaguar. How does that work? Can I connect my Lynx to it? Will there be a Lynx adaptor for the Jaguar?        &lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;A. The ComLynx port allows communication between Jaguar units and Lynx units. In theory, it would be possible to daisy-chain multiple units of either machine type for multiplayer games. At the current time, however, no such plans are in the works. Instead, it is seen as allowing Lynxes to be used as peripherals: software can be developed to allow Lynxes to be part of a Jaguar game as controllers. An adaptor to allow the Jaguar to play Lynx games is not currently planned.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22567" width="1" height="1"&gt;</description></item><item><title>Choosing from all the great sessions at the Dutch Developer Days 2011</title><link>http://www.alexthissen.nl/blogs/main/archive/2011/04/19/choosing-from-all-the-great-sessions-at-the-dutch-developer-days-2011.aspx</link><pubDate>Tue, 19 Apr 2011 05:44:37 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22566</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The organization of the Microsoft Developer Days has an outstanding reputation for selecting excellent speakers from abroad and both new and well known speakers in The Netherlands. This year I intend to go see more sessions than in previous years. It is hard to choose from all of the sessions that are listed. Instead of randomly picking from that list, I first came up with a strategy to select them. It turned out to be a criteria list that should help prioritize sessions.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;Strategic initiative from Microsoft        &lt;br /&gt;&lt;/em&gt;If there is a session on Windows Azure, Windows Phone or the next version of some product&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Practice over theory        &lt;br /&gt;&lt;/em&gt;I guess that you can go a long way by following the training kits, blogs and documentation on new platforms, frameworks and technologies. The lessons learned by using these in real-life/business scenarios is a lot harder to come by. &lt;/li&gt;    &lt;li&gt;&lt;em&gt;New and broad information over in-depth information (on topics that are known already)        &lt;br /&gt;&lt;/em&gt;Learning new things gets preference over going deeper into topics I already feel comfortable with &lt;/li&gt;    &lt;li&gt;&lt;em&gt;Speaker&amp;#160; reputation&lt;/em&gt;      &lt;br /&gt;Some speakers are a delight to go see. If none of the above make a difference or end in a tie, I will decide based on the speaker. This can be based on entertainment value, technical accuracy or experiences in the past. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_27B03875.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_thumb_5F00_7956B2C7.png" width="690" height="103" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Developer Days - 1&lt;/h2&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="730"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="127"&gt;9:15 – 10:45&lt;/td&gt;        &lt;td valign="top" width="601"&gt;The easiest timeslot to choose a session: the keynote &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="127"&gt;11:05 – 12:20&lt;/td&gt;        &lt;td valign="top" width="601"&gt;         &lt;ol&gt;           &lt;li&gt;&lt;a href="http://www.techdays.nl/SessieDetails.aspx?cid=1317"&gt;What&amp;#39;s New in SQL Server &amp;quot;Denali&amp;quot; for Developers?&lt;/a&gt;, Paul van Wingerden.              &lt;br /&gt;New technology and I’m very rusty on the developer side of SQL Server. Catching up required.&lt;/li&gt;            &lt;li&gt;&lt;a href="http://www.techdays.nl/SessieDetails.aspx?cid=1518"&gt;Windows Phone 7 (title to be disclosed after MIX)&lt;/a&gt;, Ben Riga:               &lt;br /&gt;Summary of WP7 as discussed at Mix 2011. Should save a lot of time viewing this session instead of the &lt;a href="http://channel9.msdn.com/Events/MIX/MIX11" target="_blank"&gt;recorded videos at Channel 9&lt;/a&gt;&lt;/li&gt;            &lt;li&gt;&lt;a href="http://www.techdays.nl/SessieDetails.aspx?cid=1513"&gt;MVC 3 – 101&lt;/a&gt;, Scott Hanselman              &lt;br /&gt;Guaranteed fun and overview of MVC3 to boot&lt;/li&gt;         &lt;/ol&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="127"&gt;13:30 – 14:45&lt;/td&gt;        &lt;td valign="top" width="601"&gt;         &lt;ol&gt;           &lt;li&gt;&lt;a href="http://www.techdays.nl/SessieDetails.aspx?cid=1515"&gt;Reactive Extensions for .NET for the Rest of Us&lt;/a&gt;, Mike Taulty              &lt;br /&gt;Mike is an excellent speaker with loads of high-speed demos and more information than a human could handle in one hour.&lt;/li&gt;            &lt;li&gt;&lt;a href="http://www.techdays.nl/SessieDetails.aspx?cid=1524"&gt;Windows Azure AppFabric: Building, Managing, and Connecting High-Density, Multi-Tenant Cloud Applications &lt;/a&gt;, Clemens Vasters              &lt;br /&gt;Clemens is Mr. ServiceBus and the authority on this part of AppFabric.&lt;/li&gt;            &lt;li&gt;&lt;a href="http://www.techdays.nl/SessieDetails.aspx?cid=1444"&gt;De Locatie Centraal met Windows Phone 7&lt;/a&gt;, Marco Wagemakers              &lt;br /&gt;Lower on the list as Achmea is also using ArcGIS and it should be close to home.&lt;/li&gt;         &lt;/ol&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="127"&gt;15:05 – 16:20&lt;/td&gt;        &lt;td valign="top" width="601"&gt;         &lt;ol&gt;           &lt;li&gt;&lt;a href="http://www.techdays.nl/SessieDetails.aspx?cid=1523"&gt;Produceer Betere Product Kwaliteit door Gebruik te Maken van de Ultimate Test Tools&lt;/a&gt;, Marcel de Vries              &lt;br /&gt;It’s been a long time since I saw Marcel speak. I also need some better overview of the test tooling&lt;/li&gt;            &lt;li&gt;&lt;a href="http://www.techdays.nl/SessieDetails.aspx?cid=1427"&gt;Taking Control of your World with the .NET Micro Framework&lt;/a&gt;, Rob Miles              &lt;br /&gt;Great speaker who could easily have been standup comedian. I’m curious what the .NET Micro Framework will bring us in the future.&lt;/li&gt;         &lt;/ol&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="127"&gt;16:30 – 17:45&lt;/td&gt;        &lt;td valign="top" width="601"&gt;         &lt;ol&gt;           &lt;li&gt;&lt;a href="http://www.techdays.nl/SessieDetails.aspx?cid=1614"&gt;What&amp;#39;s New in Silverlight 5&lt;/a&gt;, Jeff Prosise              &lt;br /&gt;What can I say: Jeff Prosise of Windows and MFC fame to tell us about the new things in SL5. A must see.&lt;/li&gt;            &lt;li&gt;&lt;a href="http://www.techdays.nl/SessieDetails.aspx?cid=1302"&gt;Visual Studio LightSwitch - Beyond the Basics&lt;/a&gt;, Beth Massi              &lt;br /&gt;I saw a LightSwitch session by Stefan Kamphuis at the Dutch CodeCamp a couple of weeks ago. I looks very promising as a new tool and I want to know more about the developer potential of this tool.&lt;/li&gt;         &lt;/ol&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h2&gt;Developer Days - 2&lt;/h2&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="733"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="129"&gt;9:15 – 10:30&lt;/td&gt;        &lt;td valign="top" width="602"&gt;         &lt;ol&gt;           &lt;li&gt;&lt;a href="http://www.techdays.nl/SessieDetails.aspx?cid=1546"&gt;HTML 5 - That&amp;#39;s What You Need to Know Today!&lt;/a&gt;, Ingo Rammer              &lt;br /&gt;Ingo Rammer is famous for his book and knowledge on .NET Remoting. HTML 5 is going to make an impact over the next couple of years. Better not to stay behind.&lt;/li&gt;            &lt;li&gt;&lt;a href="http://www.techdays.nl/SessieDetails.aspx?cid=1323"&gt;Identity &amp;amp; Access Control in the Cloud&lt;/a&gt;, Vittorio Bertocci              &lt;br /&gt;What can I say: the next generation security combined with the cloud. If it weren’t for my involvement in a project that goes deep into claims and identity, I would go see this one.&lt;/li&gt;            &lt;li&gt;&lt;a href="http://www.techdays.nl/SessieDetails.aspx?cid=1562"&gt;Improving Legacy .NET Code&lt;/a&gt;, Thomas Huijer              &lt;br /&gt;Something we all have to deal with: legacy code. I wonder what Thomas’s insights are in improving this.&lt;/li&gt;         &lt;/ol&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="129"&gt;10:50 – 12:05&lt;/td&gt;        &lt;td valign="top" width="602"&gt;         &lt;ol&gt;           &lt;li&gt;&lt;a href="http://www.techdays.nl/SessieDetails.aspx?cid=1423"&gt;Demystifying the .NET Asynchronous Programming Landscape&lt;/a&gt;, Bart de Smet              &lt;br /&gt;Bart has been involved in Linq and other language features at the source in Redmond. This will give a great insight into the async options and the upcoming VB and C# support.&lt;/li&gt;            &lt;li&gt;&lt;a href="http://www.techdays.nl/SessieDetails.aspx?cid=1345"&gt;Real World Architecture with ASP.NET MVC&lt;/a&gt;, Hadi Hariri&lt;/li&gt;            &lt;li&gt;&lt;a href="http://www.techdays.nl/SessieDetails.aspx?cid=1276"&gt;Real World Windows Azure Development: Tips &amp;amp; Tricks&lt;/a&gt;, Wade Wegner              &lt;br /&gt;Hard to choose between number 2 and 3. If it comes down to one of these, I think I’ll toss a coin. (I’ve done so before, ask &lt;a href="http://bloggingabout.net/blogs/dennis" target="_blank"&gt;Dennis&lt;/a&gt;)&lt;/li&gt;         &lt;/ol&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="129"&gt;13:15 – 14:30&lt;/td&gt;        &lt;td valign="top" width="602"&gt;         &lt;ol&gt;           &lt;li&gt;&lt;a href="http://www.techdays.nl/SessieDetails.aspx?cid=1346"&gt;Windows Azure AppFabric Access Control Service: Deep Dive&lt;/a&gt;, Vittorio Bertocci&lt;/li&gt;            &lt;li&gt;&lt;a href="http://www.techdays.nl/SessieDetails.aspx?cid=1343"&gt;Advanced Debugging with Visual Studio 2010&lt;/a&gt;, Ingo Rammer              &lt;br /&gt;Just yesterday I did some low level debugging with WinDbg and DotTrace to track down a memory leak in an ASP.NET application. Ingo will be able to tell more on the topic.&lt;/li&gt;         &lt;/ol&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="129"&gt;14:50 – 16:05&lt;/td&gt;        &lt;td valign="top" width="602"&gt;I’ll be at my own session. Come see this if you are interested in finding out more on Razor and the Web Pages framework surrounding it.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="129"&gt;16:15 – 17:30&lt;/td&gt;        &lt;td valign="top" width="602"&gt;         &lt;ol&gt;           &lt;li&gt;&lt;a href="http://www.techdays.nl/SessieDetails.aspx?cid=1422"&gt;Developing SaaS Solutions with the Windows Azure Platform&lt;/a&gt;, Vittorio Bertocci&lt;/li&gt;            &lt;li&gt;&lt;a href="http://www.techdays.nl/SessieDetails.aspx?cid=1482"&gt;Web Services Interoperability tussen WCF en Java&lt;/a&gt;, Edwin van Wijk en Bert Erman&lt;/li&gt;            &lt;li&gt;&lt;a href="http://www.techdays.nl/SessieDetails.aspx?cid=1602"&gt;WCF Data Services Introductie - De Serverkant&lt;/a&gt;, Erno de Weerd&lt;/li&gt;         &lt;/ol&gt;          &lt;p&gt;At the end of the conference I have no idea what I think is a nice roundup. These three seemed to come to mind. We’ll see.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Hopefully this list or the criteria will help you select from all of the sessions, if you are in doubt. Whichever way, the DevDays 2011 should be a great event. Have fun and see you there!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22566" width="1" height="1"&gt;</description></item><item><title>A new role: Microsoft Regional Director</title><link>http://www.alexthissen.nl/blogs/main/archive/2011/04/04/a-new-role-microsoft-regional-director.aspx</link><pubDate>Mon, 04 Apr 2011 20:49:27 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22565</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Since early March I have been given a new role as Microsoft Regional Director (RD). In The Netherlands there are two positions for RD, and for the past few years &lt;a href="http://blogs.infosupport.com/blogs/marcelv/" target="_blank"&gt;Marcel de Vries&lt;/a&gt; and &lt;a href="https://blogs.microsoft.nl/members/Anko-Duizer.aspx" target="_blank"&gt;Anko Duizer&lt;/a&gt; have fulfilled both. Last year Anko rejoined the ranks of Microsoft and automatically stopped being an RD. August last year I was contacted by Microsoft NL to talk about the RD program. I happily accepted the invitation to become the new RD.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/RegionalDirector_5F00_7A28196A.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;float:right;border-top:0px;border-right:0px;padding-top:0px;" title="RegionalDirector" border="0" alt="RegionalDirector" align="right" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/RegionalDirector_5F00_thumb_5F00_62413244.png" width="156" height="57" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I’ve waited for a good moment to announce my new role and finished some other work, in order to be able to spend more time on the RD program. The appearance of the RD column that Marcel and myself wrote for the the last issue of the Dutch &lt;a href="http://www.dotnetmag.nl/" target="_blank"&gt;DotNetMagazine&lt;/a&gt; seemed like a good time. I am very enthusiastic about the program and the part I can play in it. I really believe that RDs can serve as an intermediate between Microsoft and the community at large (being the .NET community, end users and businesses). Very soon Marcel and myself will start building an “attack plan” to maximize the impact we can make as RDs. Stay tuned.&lt;/p&gt;  &lt;p&gt;Next up will be a translation of the RD column in English, because I think that it explains the purpose of the Regional Director program from a different angle. I’ve named it “Regional Directors: the antennas for Microsoft and the community”.&lt;/p&gt;  &lt;p&gt;If you are interested to read more on the Regional Director program, you can take a look at the &lt;a href="http://TheRegion.com" target="_blank"&gt;TheRegion.com&lt;/a&gt;. Also, there is a nice blog post by Jeffrey Pallermo that has some frequently asked questions on “&lt;a href="http://weblogs.asp.net/palermo4/archive/2008/01/04/who-are-the-microsoft-regional-directors.aspx" target="_blank"&gt;who are the Regional Directors&lt;/a&gt;?”. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22565" width="1" height="1"&gt;</description><category domain="http://www.alexthissen.nl/blogs/main/archive/tags/Regional+Director/default.aspx">Regional Director</category></item><item><title>Dirty Larry Renegade Cop</title><link>http://www.alexthissen.nl/blogs/atarilynx/archive/2010/11/29/dirty-larry-renegade-cop.aspx</link><pubDate>Mon, 29 Nov 2010 14:20:10 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22563</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Some time ago I decided to finish some of the Atari Lynx games that I hadn’t played that much or hadn’t completed. This post is on Dirty Larry Renegade Cop, a nice side-scrolling shooter/bash’m up in the tradition of games like Double Dragon (also a Lynx title). In a future post I will explain how I managed to complete the game. &lt;/p&gt;  &lt;p&gt;On a personal note: I pretty much enjoyed the game after some practice, but was glad I could play the game with the Handy emulator to save the game at different points of progress. Especially defeating the first boss (Mr. Snuff) was pretty much impossible without being able to reload the game at level 5. The bullets are your lifeline as much as your health is. No bullets means a certain death. You will (almost) always take damage using your fists. The more difficult villains like the machinegun toting Rastafarian are hard to beat.&lt;/p&gt;  &lt;p&gt;For now, here is some information and nowhere to be found screenshots of the game. Enjoy. &lt;/p&gt;  &lt;h2&gt;Synopsis (spoiler-alert!)&lt;/h2&gt;  &lt;p&gt;You are a police cop with an attitude and a will of his own. You are just gotten yelled at by your boss and learned that you do not get a car anymore.&lt;/p&gt;  &lt;p&gt;Larry’s boss: “&lt;em&gt;And darn it Larry, that’s the third car this week! You need to learn to respect police property! As of this moment, you walk or take the subway! Judge Smite just threw out another case! Get to the Knight Shade Hotel, this time with a proper warrant, and bring in Harold Snuff, A.K.A. Mr. White, an iceman boss. The charge is drug trafficking...&lt;/em&gt;”&lt;/p&gt;  &lt;p&gt;So, off you go to the Knight Shade Hotel on foot. First you travel to the subway, ride a cart on the sub and deal with a lot of criminals and scoundrels along the way. You face gun and knife wielding gang members, big mommas with chains, biker dudes, baseball club swinging crazies (like in the movie The Warriors) and self-igniting pyromaniac&amp;#160; and arrive at the hotel armed with a machine gun you found in the subway. In the meantime someone known as Mr. Big has a conversation with Harold Snuff.&lt;/p&gt;  &lt;p&gt;Mr. Big: “&lt;em&gt;Mr. Snuff, I require a favor of you. There is a cop that I need out of the way.&lt;/em&gt;”     &lt;br /&gt;Mr. Snuff: ”&lt;em&gt;Consider it done, Mr. Big…&lt;/em&gt;”&lt;/p&gt;  &lt;p&gt;You work your way through three levels of the hotel with assorted baddies and end up in a confrontation with Mr. Snuff/White. After you have defeated him you acquire grenades and head back to the office.&lt;/p&gt;  &lt;p&gt;Larry’s boss: “&lt;em&gt;Congratulations, Larry, you finally did something right! Mr. White goes on trial today. We got the address of a warehouse from one of his papers. Check it out and remember, ask questions first!&lt;/em&gt;”&lt;/p&gt;  &lt;p&gt;So, foot patrol to the warehouse along the sidewalks of Steelburg and through the subway. As you leave the subway there is another conversation, this time between Mr. Big and Dr. Electro.&lt;/p&gt;  &lt;p&gt;Mr. Big: “&lt;em&gt;Dr. Electro, it seems that Mr. Snuff was unable to do his duty. Would you mind showing Larry the light?&lt;/em&gt;”     &lt;br /&gt;Dr. Electro starts blinking with electricity.&lt;/p&gt;  &lt;p&gt;You enter a warehouse and get confronted with more villains, including grenade throwing mad scientists. At the far end of the warehouse you discover a trap door and open it to descend into the sewers. Near the end you battle against Dr. Electro. His electrifying rays may hurt you, but he is no match against the awesome power of your grenades and machine gun. You exit the sewers and find you are in… the courthouse of Judge Smite.&lt;/p&gt;  &lt;p&gt;Yet another conversation takes place. Mr. Big has a talk with &lt;/p&gt;  &lt;p&gt;Mr. Big: “&lt;em&gt;Office Stobbe, one of your detectives has been harassing my men. Could you see that it stops?&lt;/em&gt;”     &lt;br /&gt;Office Stobbe: “&lt;em&gt;Yes sir, I’ll get a few of my men to have a talk with him…&lt;/em&gt;”&lt;/p&gt;  &lt;p&gt;Office Stobbe must be a quick guy, because you are faced with a dozen or so corrupt cops that want to have a “talk” with you. They use a lot of bullits to do the talking. Finally, you reach the office room of the courthouse and find that none other than Judge Smite is waiting for you. He starts throwing his wooden hammer at you and hammers the floor to make earthquakes. A big man and hard to defeat. You manage to do so any way. &lt;/p&gt;  &lt;p&gt;As it turns out, Judge Smite is actually Mr. Big! Your actions will put Judge Smite behind bars for a long time. &lt;/p&gt;  &lt;h2&gt;The levels&lt;/h2&gt;  &lt;p&gt;Level 1 and 6, 2 and 7, 4 and 5 are pretty much the same levels. The levels 5, 9 and 10 have Boss battles with Mr. Snuff, Dr. Electro and Judge Smite. After defeating the corrupt judge you have finished the game and end credits are displayed. &lt;/p&gt;  &lt;p&gt;Level 1: The Steelburg Sidewalks &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap71_5F00_5209B69D.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap71" border="0" alt="snap71" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap71_5F00_thumb_5F00_0EDE3870.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap72_5F00_14B8DC09.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap72" border="0" alt="snap72" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap72_5F00_thumb_5F00_33231CF2.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap95_5F00_1DC5678A.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap95" border="0" alt="snap95" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap95_5F00_thumb_5F00_5C4AB530.png" width="240" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Level 2: The Steelburg Subway&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap96_5F00_70D004AE.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap96" border="0" alt="snap96" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap96_5F00_thumb_5F00_5A2DB667.png" width="240" height="154" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap98_5F00_79042A45.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap98" border="0" alt="snap98" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap98_5F00_thumb_5F00_176E6B2F.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap00_5F00_76E72B7C.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap00" border="0" alt="snap00" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap00_5F00_thumb_5F00_2323B261.png" width="240" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Meanwhile&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap01_5F00_2DE109B6.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap01" border="0" alt="snap01" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap01_5F00_thumb_5F00_47D4C9D8.png" width="240" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Level 3: The Knight Shade Hotel Ground Floor&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap02_5F00_51B9BB43.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap02" border="0" alt="snap02" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap02_5F00_thumb_5F00_564FC5FD.png" width="240" height="154" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap05_5F00_432E9951.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap05" border="0" alt="snap05" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap05_5F00_thumb_5F00_41119A88.png" width="240" height="154" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap04_5F00_5281FB60.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap04" border="0" alt="snap04" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap04_5F00_thumb_5F00_6A3932C6.png" width="240" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Level 4: The Knight Shade Hotel Second Floor&lt;/h3&gt;  &lt;h3&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap07_5F00_7EBE8244.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap07" border="0" alt="snap07" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap07_5F00_thumb_5F00_5BAE10D4.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap11_5F00_6D1E71AC.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap11" border="0" alt="snap11" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap11_5F00_thumb_5F00_3F50A8E7.png" width="240" height="154" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap09_5F00_70DC167C.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap09" border="0" alt="snap09" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap09_5F00_thumb_5F00_4DCBA50C.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap94_5F00_7B4CC4CF.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap94" border="0" alt="snap94" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap94_5F00_thumb_5F00_1303FC36.png" width="240" height="154" /&gt;&lt;/a&gt;&lt;/h3&gt;  &lt;h3&gt;Level 5: The Knight Shade Hotel 3rd Floor&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap08_5F00_1297C941.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap08" border="0" alt="snap08" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap08_5F00_thumb_5F00_49257485.png" width="240" height="154" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap18_5F00_419A0518.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap18" border="0" alt="snap18" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap18_5F00_thumb_5F00_3F10D35A.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap19_5F00_1360095E.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap19" border="0" alt="snap19" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap19_5F00_thumb_5F00_1C0061EA.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap21_5F00_42624535.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap21" border="0" alt="snap21" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap21_5F00_thumb_5F00_38B9D6FF.png" width="240" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Back at the office&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap22_5F00_1F51D3C5.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap22" border="0" alt="snap22" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap22_5F00_thumb_5F00_35583F57.png" width="240" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Level 6: The Steelburg Sidewalks&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap23_5F00_29C28218.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap23" border="0" alt="snap23" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap23_5F00_thumb_5F00_40A15394.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap25_5F00_6AA151BC.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap25" border="0" alt="snap25" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap25_5F00_thumb_5F00_44CB2B59.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap27_5F00_0F526934.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap27" border="0" alt="snap27" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap27_5F00_thumb_5F00_1B73E35B.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap28_5F00_4CFF50F0.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap28" border="0" alt="snap28" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap28_5F00_thumb_5F00_67CB76FC.png" width="240" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Level 7: The Steelburg Subway 2&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap29_5F00_0B849E97.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap29" border="0" alt="snap29" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap29_5F00_thumb_5F00_05C984F1.png" width="240" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Meanwhile&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap30_5F00_2982AC8B.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap30" border="0" alt="snap30" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap30_5F00_thumb_5F00_03405333.png" width="240" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Level 8: The Warehouse&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap31_5F00_66572E5D.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap31" border="0" alt="snap31" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap31_5F00_thumb_5F00_42DA89F8.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap33_5F00_02383D89.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap33" border="0" alt="snap33" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap33_5F00_thumb_5F00_3F0CBF5B.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap36_5F00_5A45185C.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap36" border="0" alt="snap36" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap36_5F00_thumb_5F00_106690AC.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap38_5F00_3AD2C1C9.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap38" border="0" alt="snap38" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap38_5F00_thumb_5F00_47606EE5.png" width="240" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Level 9: The Sewers&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap39_5F00_545A4EF6.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap39" border="0" alt="snap39" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap39_5F00_thumb_5F00_4BF6799F.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap41_5F00_3698C437.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap41" border="0" alt="snap41" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap41_5F00_thumb_5F00_29523B24.png" width="240" height="154" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap40_5F00_28E6082F.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap40" border="0" alt="snap40" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap40_5F00_thumb_5F00_2E5478D3.png" width="240" height="154" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;h3&gt;Level 9: Boss battle with Dr. Electro&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap46_5F00_78DBB6AD.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap46" border="0" alt="snap46" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap46_5F00_thumb_5F00_0C88A042.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap47_5F00_3041C7DC.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap47" border="0" alt="snap47" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap47_5F00_thumb_5F00_55CB453D.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap44_5F00_555F1248.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap44" border="0" alt="snap44" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap44_5F00_thumb_5F00_73C95331.png" width="240" height="154" /&gt;&lt;/a&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap50_5F00_0C58F082.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap50" border="0" alt="snap50" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap50_5F00_thumb_5F00_396DDD50.png" width="240" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Meanwhile&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap51_5F00_2B2F6460.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap51" border="0" alt="snap51" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap51_5F00_thumb_5F00_04ED0B08.png" width="240" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Level 10: The courthouse&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap52_5F00_4F7448E2.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap52" border="0" alt="snap52" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap52_5F00_thumb_5F00_3B0E8357.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap54_5F00_6C99F0EC.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap54" border="0" alt="snap54" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap54_5F00_thumb_5F00_6AE92518.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap55_5F00_1791DEF2.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap55" border="0" alt="snap55" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap55_5F00_thumb_5F00_35FC1FDB.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;Level 10: Boss battle with Judge Smite&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap56_5F00_7C790FE3.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap56" border="0" alt="snap56" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap56_5F00_thumb_5F00_2CBFE49A.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap59_5F00_212A275B.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap59" border="0" alt="snap59" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap59_5F00_thumb_5F00_22AB436F.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap60_5F00_502C6332.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap60" border="0" alt="snap60" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap60_5F00_thumb_5F00_3D0B3686.png" width="240" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;End credits&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap61_5F00_60C45E20.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap61" border="0" alt="snap61" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap61_5F00_thumb_5F00_732CAED5.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap64_5F00_1D98DFF3.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap64" border="0" alt="snap64" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap64_5F00_thumb_5F00_496933E2.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap69_5F00_300130A8.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="snap69" border="0" alt="snap69" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap69_5F00_thumb_5F00_4E6B7191.png" width="240" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Regular villains (in order of appearance)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_35036E57.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_thumb_5F00_7FF6DF26.png" width="141" height="197" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_3F5492B7.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_thumb_5F00_53D9E235.png" width="146" height="213" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_4CBAA5BD.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_thumb_5F00_779309CF.png" width="293" height="184" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_1E612010.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_thumb_5F00_1741E398.png" width="101" height="218" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_53017C4B.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_thumb_5F00_36F0BD60.png" width="199" height="221" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_5DBED3A0.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_thumb_5F00_4B760CDE.png" width="172" height="290" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_52291661.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_thumb_5F00_6405AA2E.png" width="111" height="219" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_75E23DFB.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_thumb_5F00_63997739.png" width="156" height="211" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_0A678D7A.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_thumb_5F00_3135A3BA.png" width="217" height="234" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_305D3DD0.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/image_5F00_thumb_5F00_221EC4E0.png" width="166" height="248" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22563" width="1" height="1"&gt;</description></item><item><title>Vacature “Microsoft Technisch consultant” bij Nokavision</title><link>http://www.alexthissen.nl/blogs/main/archive/2010/11/29/vacature-microsoft-technisch-consultant-bij-nokavision.aspx</link><pubDate>Mon, 29 Nov 2010 13:55:26 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22562</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Het bedrijf &lt;a href="http://www.nokavision.com/" target="_blank"&gt;Nokavision&lt;/a&gt; uit ‘s-Hertogenbosch heeft een interessante vacature beschikbaar. Ben je op zoek naar een nieuwe uitdaging in het zuidelijke deel van Nederland, lees dan de beschrijving eens door. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/cid_5F00_image001_5F00_gif01CB7CF2_5F00_762F6F27.gif"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px 10px 0px 0px;padding-left:0px;padding-right:0px;display:inline;float:left;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="!cid_image001_gif@01CB7CF2" border="0" alt="!cid_image001_gif@01CB7CF2" align="left" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/cid_5F00_image001_5F00_gif01CB7CF2_5F00_thumb_5F00_2D294D61.gif" width="219" height="50" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Ik ken Nokavision als een bedrijf dat graag bezig is met nieuwe Microsoft technologien. Ze hebben een sterk verleden met document management en document stromen en business process management in organisaties. Om meer te weten te komen over Nokavision, kun je natuurlijk &lt;a href="http://www.nokavision.com/" target="_blank"&gt;hun website&lt;/a&gt; bezoeken. Daar vind je onder andere &lt;a href="http://www.nokavision.com/case_studies.htm" target="_blank"&gt;case studies&lt;/a&gt; van eerdere klanten, hun producten (o.a. Skelta, StreamServe en Captaris producten) en de diensten die ze bieden.&lt;/p&gt;  &lt;p&gt;Hieronder de vacaturetekst. Ben je geinteresseerd, neem dan contact op met Rob Steenvoorden. De contactgegevens staan onderaan.&lt;/p&gt;  &lt;h2&gt;Microsoft Technisch consultant&lt;/h2&gt;  &lt;h3&gt;Doel van functie&lt;/h3&gt;  &lt;p&gt;Als Consultant maak je deel uit van een professioneel team dat als standplaats Den Bosch heeft. Onze werkzaamheden vinden plaats aan oplossingen die als product in de markt worden gezet. Je werkt aan de ontwikkeling, uitbreiding en beheer van Microsoft oplossingen. Je werkt met professionele collega’s met diverse ideeën, achtergronden en werkwijzen. Je wordt aangemoedigd je technische vaardigheden uit te breiden en je thuis te voelen in een “lerende” cultuur. &lt;/p&gt;  &lt;h3&gt;Verantwoordelijkheden en taken&lt;/h3&gt;  &lt;p&gt;Je bent verantwoordelijk voor de ontwikkeling, oplevering en onderhoud van nieuwe en bestaande&amp;#160; producten op basis van Microsoft technologieën. Je werkt met de modernste Microsoft technologieën waaronder C#, .NET 4, Silverlight 4, WCF RIA Services, Entity Framework, Enterprise Library, SQL Server. Tevens maken we gebruik van Workflow technologie die .NET gerelateerd is. &lt;/p&gt;  &lt;h3&gt;Ideale profiel&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Ervaring met C# en .NET &lt;/li&gt;    &lt;li&gt;Junior/Medior software ontwikkelaar &lt;/li&gt;    &lt;li&gt;Je bent accuraat en hebt een actieve houding &lt;/li&gt;    &lt;li&gt;Belangstelling voor complexe bedrijfskundige en technische omgevingen &lt;/li&gt;    &lt;li&gt;Gewend om volgens methodieken te werken &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Een pré is:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Kennis van UML &amp;amp; Design Patterns &lt;/li&gt;    &lt;li&gt;Kennis van en ervaring met Silverlight en/of WPF &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Arbeidsvoorwaarden&lt;/h3&gt;  &lt;p&gt;Nokavision is een zeer sociaal bedrijf. Nokavision biedt uitstekende primaire/secundaire arbeidsvoorwaarden. De opleidingsmogelijkheden zowel intern als extern zijn uitstekend. Daarnaast besteden wij veel tijd en energie aan persoonlijke groei en ontwikkeling.&lt;/p&gt;  &lt;p&gt;Wil je meer weten of reageren: stuur je bericht met CV naar &lt;a href="mailto:r.steenvoorden@nokavision.com"&gt;r.steenvoorden@nokavision.com&lt;/a&gt; of bel met 073-6408490.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22562" width="1" height="1"&gt;</description></item><item><title>Two exam opportunities</title><link>http://www.alexthissen.nl/blogs/main/archive/2010/10/16/two-exam-opportunities.aspx</link><pubDate>Sat, 16 Oct 2010 20:46:48 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22558</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Quick post on two beta Microsoft exams that you are allowed to participate in. &lt;a href="http://blogs.msdn.com/b/gerryo/" target="_blank"&gt;Gerry o’Brien&lt;/a&gt; posted that the exams:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.msdn.com/b/gerryo/archive/2010/10/13/windows-azure-beta-exam-announcement.aspx" target="_blank"&gt;71-583, Pro: Designing and Developing Windows Azure Applications&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/b/gerryo/archive/2010/10/13/silverlight-beta-exam-announcement.aspx" target="_blank"&gt;71-506, TS: Silverlight 4, Development&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;are now available to take. The beauty is that if you manage to pass the qualifying score on the beta exam, you also pass the exam as soon as it is released. Of course, it is also a good challenge for your brain and a test of your knowledge on the topic of the exam. When you’re into the business of training, coaching or other knowledge transfer areas, this is a great opportunity to find out which training, books and e-learning material is needed to prepare for this exam.&lt;/p&gt;  &lt;p&gt;The Microsoft Learning website lists extra information on the exams &lt;a href="http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-583&amp;amp;locale=en-us" target="_blank"&gt;70-583&lt;/a&gt; and &lt;a href="http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-506&amp;amp;locale=en-us" target="_blank"&gt;70-506&lt;/a&gt;. The exams seem to be the one exam to pass to acquire either the “MCPD: Windows Azure Developer 4” or “MCTS: Silverlight 4, Development” certifications.&lt;/p&gt;  &lt;p&gt;You can take these exams for free if you use the promotion codes AZPRO and SL410 respectively. You need to enter these code at the Payment Information screen.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_4DF72B5B.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_thumb_5F00_576FE9D1.png" width="552" height="253" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Time is limited, so be sure to register immediately at &lt;a href="http://www.prometric.com/default.htm" target="_blank"&gt;Prometric&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22558" width="1" height="1"&gt;</description></item><item><title>Arcade machines converted to Atari Lynx</title><link>http://www.alexthissen.nl/blogs/atarilynx/archive/2010/09/22/arcade-machines-converted-to-atari-lynx.aspx</link><pubDate>Wed, 22 Sep 2010 10:51:15 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22556</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The &lt;a href="http://www.ataritimes.com/" target="_blank"&gt;Atari Times&lt;/a&gt; has a really nice article “&lt;a href="http://www.ataritimes.com/article.php?showarticle=567" target="_blank"&gt;Arcade to Lynx&lt;/a&gt;”. It shows a graphical list of games that once lived as a standalone arcade machine and got converted to a game for the Atari Lynx. I had no idea there were that many arcade games. It is not surprising to see Atari’s own games, such as Xybots and Gauntlet, in the list. These Arcade games were new to me:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A.P.B.&lt;/li&gt;    &lt;li&gt;Blockout&lt;/li&gt;    &lt;li&gt;Hydra&lt;/li&gt;    &lt;li&gt;Pac-Land&lt;/li&gt;    &lt;li&gt;Road Riot&lt;/li&gt;    &lt;li&gt;Tournament Cyberball&lt;/li&gt;    &lt;li&gt;Xenophobe&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;At least, I had not seen them in the arcade halls (when those were still around).&lt;/p&gt;  &lt;p&gt;Here’s is a sample from the site: Ms. Pac-man&lt;/p&gt;  &lt;p&gt;&lt;img border="0" src="http://www.ataritimes.com/images/arcade/mspacman.gif" alt="" /&gt;&amp;#160; &lt;br /&gt;&lt;em&gt;Original Ms. Pac-man arcade machine&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap72_5F00_5F9E1734.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="snap72" border="0" alt="snap72" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap72_5F00_thumb_5F00_0FD4C61E.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap73_5F00_2817BA6C.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="snap73" border="0" alt="snap73" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap73_5F00_thumb_5F00_1900DB92.png" width="240" height="154" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap74_5F00_780D68EA.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="snap74" border="0" alt="snap74" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap74_5F00_thumb_5F00_5EA565B0.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap76_5F00_252255B9.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="snap76" border="0" alt="snap76" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap76_5F00_thumb_5F00_56ADC34E.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Atari Lynx conversion of Ms. Pac-man&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;The beauty of most conversion to the Lynx is the addition of extras. Take Ms. Pac-man again as an example. Besides the original gameplay including the intermissions between different level types, there are also new levels that are larger and landscape oriented instead of the normal portrait ones. Moreover, every round has a new level layout. I found at least 17 unique layouts.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap77_5F00_2E9B142F.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="snap77" border="0" alt="snap77" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap77_5F00_thumb_5F00_62CF3D75.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap78_5F00_13EE7816.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="snap78" border="0" alt="snap78" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap78_5F00_thumb_5F00_5A6B681E.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap87_5F00_44354CCC.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="snap87" border="0" alt="snap87" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap87_5F00_thumb_5F00_78697612.png" width="240" height="154" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;New levels in Lynx version of Ms. Pac-Man&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Also, there are cheats and easter eggs all over the place. In the case of Ms. Pac-Man you can get extra lives and lightning speed, plus you can skip levels. Obviously not available in the arcade machine.&lt;/p&gt;  &lt;p&gt;For your convenience, here are the actions required to activate the cheats.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;5 Extra lives:      &lt;br /&gt;PAUSE, OPTION 1, B, B, A, A, OPTION 1&lt;/li&gt;    &lt;li&gt;Lightning speed:      &lt;br /&gt;PAUSE, OPTION 1, A, and OPTION 1. A lightning bolt will appear. Press B to use it.&lt;/li&gt;    &lt;li&gt;Skip levels:     &lt;br /&gt;PAUSE, OPTION 1, B, B, B, OPTION 1, PAUSE and skip levels with OPTION 1&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;TIP: When pausing on the Handy emulator, make sure you use Q to pause instead of F5. “Pause” should appear on-screen.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22556" width="1" height="1"&gt;</description></item><item><title>Architecture of the Atari Lynx</title><link>http://www.alexthissen.nl/blogs/atarilynx/archive/2010/09/20/architecture-of-the-atari-lynx.aspx</link><pubDate>Sun, 19 Sep 2010 22:26:00 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22555</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;The Atari Lynx is a handheld console that has two form factors over its lifetime. The Lynx I and II models have a different casing and internal layout, but hold nearly exact same electronic hardware. The main difference is lower power consumption and stereo sound (but less loud) for the Lynx II incarnation.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/258_5F00_61175232.jpg"&gt;&lt;img height="133" width="271" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/258_5F00_thumb_5F00_694B77C9.jpg" alt="Atari Lynx I" border="0" title="Atari Lynx I" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/Atari_5F00_Lynx_5F00_II_5F00_5702B107.png"&gt;&lt;img height="103" width="220" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/Atari_5F00_Lynx_5F00_II_5F00_thumb_5F00_144365CF.png" alt="Atari Lynx II" border="0" title="Atari Lynx II" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Atari Lynx I and II handhelds&lt;/em&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This fragment found at Atari &lt;a href="mailto:Lynx@Everything.com"&gt;Lynx@Everything.com&lt;/a&gt; describes the Lynx fairly well:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The Lynx had two &lt;/em&gt;&lt;em&gt;16-bit&lt;/em&gt;&lt;em&gt; &lt;/em&gt;&lt;em&gt;co-processors&lt;/em&gt;&lt;em&gt; running at 16 &lt;/em&gt;&lt;em&gt;MHz&lt;/em&gt;&lt;em&gt; each, nicknamed &lt;/em&gt;&lt;em&gt;Mikey&lt;/em&gt;&lt;em&gt; and &lt;/em&gt;&lt;em&gt;Suzy&lt;/em&gt;&lt;em&gt;. Mikey supported the sound engine and the video driver, the system &lt;/em&gt;&lt;em&gt;interrupt&lt;/em&gt;&lt;em&gt;s routine, ComLynx support, and the system &lt;/em&gt;&lt;em&gt;timer&lt;/em&gt;&lt;em&gt;s. Mikey was also responsible for loading the games with the 512 bytes of &lt;/em&gt;&lt;em&gt;ROM&lt;/em&gt;&lt;em&gt; it had for that function. Suzy supported the &lt;/em&gt;&lt;em&gt;graphics&lt;/em&gt;&lt;em&gt; engine and a &lt;/em&gt;&lt;em&gt;math&lt;/em&gt;&lt;em&gt; co-processor. The Lynx contains half a &lt;/em&gt;&lt;em&gt;megabit&lt;/em&gt;&lt;em&gt; of ROM. Game cards support up to 2 &lt;/em&gt;&lt;em&gt;MB&lt;/em&gt;&lt;em&gt; of ROM, but most contain either 128K or 256K, with only 3 games supporting 512K.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The various chips inside the machine are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;U1: (Mikey, see below)&lt;/li&gt;
&lt;li&gt;U2: (Suzy, see below)&lt;/li&gt;
&lt;li&gt;U3 and U4: &lt;br /&gt;Lynx I &amp;ndash; HM-50464-12 &lt;br /&gt;Lynx II - HY53C464LS-10 (Two 256 KB DRAM chips (64K X 4 nMOS general purpose Dynamic RAM, page-mode operation DIP-18, 256 cycles/4 msec)&lt;/li&gt;
&lt;li&gt;U5: LM386 (Low voltage audio power amplifier)&lt;/li&gt;
&lt;li&gt;U6: 4069 (CMOS 16 MHz Square wave oscillator)&lt;/li&gt;
&lt;li&gt;U7: 74HC04 (Hex inverter, used multiple times)&lt;/li&gt;
&lt;li&gt;U8: 74HC4040 (12-stage binary ripple counter; generates cartridge addresses A0-A10)&lt;/li&gt;
&lt;li&gt;U9: 74HC164 (8-bit serial-in, parallel-out shift register; generates cartridge addresses A12-A19)&lt;/li&gt;
&lt;li&gt;U10: Unknown&lt;/li&gt;
&lt;li&gt;U11: 74HC74 (High Speed CMOS Logic Dual Positive-Edge-Triggered D-Type Flip-Flops with Set and Reset)&lt;/li&gt;
&lt;li&gt;U12: LM386 (Low voltage audio power amplifier)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Mikey&lt;/strong&gt; &lt;br /&gt;16-bit custom CMOS chip running at 16MHz&lt;/p&gt;
&lt;table width="733" cellpadding="2" cellspacing="0" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="200" valign="top"&gt;MOS 65SC02&lt;/td&gt;
&lt;td width="531" valign="top"&gt;Processor running at up to 4MHz (~3.6MHz average) 8-bit CPU, 16-bit address space&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="200" valign="top"&gt;Sound engine&lt;/td&gt;
&lt;td width="531" valign="top"&gt;4 channel sound 8-bit DAC for each channel (4 channels x 8-bits/channel = 32 bits commonly quoted) &lt;br /&gt;Lynx II has panning support &lt;br /&gt;Atari reports the range is &amp;quot;100Hz to above the range of human hearing&amp;quot;; spectrum analysis shows the range may go as low as 32Hz. &lt;br /&gt;Stereo with panning (mono for original Lynx)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="200" valign="top"&gt;Video DMA driver&lt;/td&gt;
&lt;td width="531" valign="top"&gt;Video DMA driver for LCD display &lt;br /&gt;4096 color (12-bit) palette &lt;br /&gt;16 simultaneous colors (4 bits) from palette per scanline (more than 16 colors can be displayed by changing palettes after each scanline)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="200" valign="top"&gt;System timers&lt;/td&gt;
&lt;td width="531" valign="top"&gt;8 System timers (2 reserved for LCD timing, one for UART)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="200" valign="top"&gt;Interrupt controller&lt;/td&gt;
&lt;td width="531" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="200" valign="top"&gt;UART (for ComLynx)&lt;/td&gt;
&lt;td width="531" valign="top"&gt;Universal Asynchronous Receive/Transmit &lt;br /&gt;Fixed framing format 8E1 (meaning an 8-way connection between two &amp;ldquo;users&amp;rdquo;) &lt;br /&gt;Baud rate up to 62500Bd&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="200" valign="top"&gt;512 bytes ROM&lt;/td&gt;
&lt;td width="531" valign="top"&gt;Bootstrap and game-card loading ROM&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Suzy &lt;br /&gt;&lt;/strong&gt;16-bit custom CMOS chip running at 16MHz&lt;/p&gt;
&lt;table width="734" cellpadding="2" cellspacing="0" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="200" valign="top"&gt;Blitter unit&lt;/td&gt;
&lt;td width="532" valign="top"&gt;Bit-map block transfer unit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="200" valign="top"&gt;Graphics engine&lt;/td&gt;
&lt;td width="532" valign="top"&gt;Hardware drawing support &lt;br /&gt;Unlimited number of high-speed sprites with collision detection &lt;br /&gt;Hardware high-speed sprite scaling, distortion, and tilting effects &lt;br /&gt;Hardware decoding of compressed sprite data &lt;br /&gt;Hardware clipping and multi-directional scrolling &lt;br /&gt;Variable frame rate (up to 75 frames/second) &lt;br /&gt;160 x 102 &amp;quot;triad&amp;quot; standard resolution (16,320 addressable pixels) (A triad is three LCD elements: red, green, and blue) &lt;br /&gt;Capability of 480 x 102 artificially high resolution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="200" valign="top"&gt;Math co-processor&lt;/td&gt;
&lt;td width="532" valign="top"&gt;Hardware 16-bit multiply and divide &lt;br /&gt;16-bit &amp;times; 16-bit &amp;rarr; 32-bit multiply with optional accumulation; &lt;br /&gt;32-bit &amp;divide; 16-bit &amp;rarr; 16-bit divide &lt;br /&gt;Parallel processing of CPU and single multiply or divide instruction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="200" valign="top"&gt;Controller Input &lt;/td&gt;
&lt;td width="532" valign="top"&gt;Handles input from joypad, pause, option and fire buttons&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Parts of the Mikey and Suzy information was taken from the &lt;a target="_blank" href="http://www.faqs.org/faqs/games/video-games/atari/lynx/"&gt;Atari Lynx FAQ&lt;/a&gt;, which has more detailed information on all physical aspects of the Atari Lynx.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.monlynx.de/lynx/misc.html"&gt;Bastian Schick&lt;/a&gt; has the &lt;a target="_blank" href="http://www.monlynx.de/download/lynx/schematics.zip"&gt;electronic schematics&lt;/a&gt; up on his website (in a single ZIP file, but with two images of board split in left and right side). He also has a file listing the &lt;a target="_blank" href="http://www.monlynx.de/lynx/pinout.txt"&gt;pin layout of the cartridge port&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/lynx_5F00_ii_5F00_21A978D5.jpg"&gt;&lt;img height="271" width="640" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/lynx_5F00_ii_5F00_thumb_5F00_129299FB.jpg" alt="lynx_ii" border="0" title="lynx_ii" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Another famous Lynx developer &lt;a target="_blank" href="http://www.mdgames.de"&gt;Matthias Domin&lt;/a&gt; has the &lt;a target="_blank" href="http://www.mdgames.de/lynx_i_description.htm"&gt;Lynx I&lt;/a&gt; and &lt;a target="_blank" href="http://www.mdgames.de/lynx_ii_description.htm"&gt;Lynx II&lt;/a&gt; opened up and describes what part is what.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.mdgames.de/l2_opened.jpg" alt="Opened Lynx II (turned around)" border="0" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22555" width="1" height="1"&gt;</description></item><item><title>Game endings at Video Game Museum</title><link>http://www.alexthissen.nl/blogs/atarilynx/archive/2010/09/19/game-endings-at-video-game-museum.aspx</link><pubDate>Sun, 19 Sep 2010 18:35:45 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22554</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Some games are just too hard to finish, or take too much time to do so. And if you did, on a device like the Atari Lynx, it is hard to show others what the end scenes and screens of the game look like. The quality of photographs usually don’t show this very well. Thanks to the emulators it is possible to both save games (by storing the entire state of the emulator) and create high quality images of the screens. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/shabe1_5F00_74F3CF11.gif"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="shabe-1" border="0" alt="shabe-1" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/shabe1_5F00_thumb_5F00_29942B4D.gif" width="160" height="102" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/shabe2_5F00_0D836C62.gif"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="shabe-2" border="0" alt="shabe-2" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/shabe2_5F00_thumb_5F00_49430515.gif" width="160" height="102" /&gt;&lt;/a&gt;    &lt;br /&gt;&lt;em&gt;Ending for Shadow of the Beast&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Apparently over at &lt;a href="http://www.vgmuseum.com/" target="_blank"&gt;The Video Game Museum&lt;/a&gt; they have been collecting game endings for a number of games. One of the collections is the &lt;a href="http://www.vgmuseum.com/end/lynx/" target="_blank"&gt;Atari Lynx game endings&lt;/a&gt;. I must say that there is an impressive number of games listed with screenshots showing the last sequences of the game. There are even some games I have never finished, but was curious to see what it would be like. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/kung0_5F00_2D32462A.gif"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="kung-0" border="0" alt="kung-0" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/kung0_5F00_thumb_5F00_6CFC2CAF.gif" width="160" height="102" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/kung2_5F00_13CA42F0.gif"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="kung-2" border="0" alt="kung-2" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/kung2_5F00_thumb_5F00_219C88EB.gif" width="160" height="102" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/kung4_5F00_6C8FF9BA.gif"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="kung-4" border="0" alt="kung-4" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/kung4_5F00_thumb_5F00_135E0FFB.gif" width="160" height="102" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;em&gt;Ending for Kung Food&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Go &lt;a href="http://www.vgmuseum.com/end/lynx/" target="_blank"&gt;check it out&lt;/a&gt; yourself. Now all I need to find is a website that has the savegames for a decent emulator (like Handy), so I can relive those endings myself. If it is not out there, I guess that I will need to create one myself. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/vik3_5F00_0C3ED383.gif"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="vik-3" border="0" alt="vik-3" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/vik3_5F00_thumb_5F00_47FE6C36.gif" width="160" height="102" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/vik4_5F00_12F1DD06.gif"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="vik-4" border="0" alt="vik-4" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/vik4_5F00_thumb_5F00_0BD2A08E.gif" width="160" height="102" /&gt;&lt;/a&gt;    &lt;br /&gt;&lt;em&gt;Ending for Viking Child &lt;/em&gt;(which I did finish myself)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22554" width="1" height="1"&gt;</description></item><item><title>Google Android versus Atari Lynx’s Gauntlet the Third Encounter</title><link>http://www.alexthissen.nl/blogs/atarilynx/archive/2010/09/19/google-android-versus-atari-lynx-s-gauntlet-the-third-encounter.aspx</link><pubDate>Sun, 19 Sep 2010 16:25:01 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22553</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Personally, I haven’t played Gauntlet III on the Lynx much. Consequently I hadn’t noticed the similarities between the Android character and the new logo of Google’s mobile operating system.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://bugbig.com/shocker-googles-android-logo-boosted-from-atari-lynx-title-gauntlet-the-third-encounter"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="androidcopyeng[1]" border="0" alt="androidcopyeng[1]" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/androidcopyeng1_5F00_610FAD0F.jpg" width="365" height="256" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;To wet your Lynx appetite some more, here are some additional screenshots:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap05_5F00_3A9CB821.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;margin:0px 5px 0px 0px;display:inline;border-top:0px;border-right:0px;" title="snap05" border="0" alt="snap05" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap05_5F00_thumb_5F00_2C5E3F31.png" width="154" height="240" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap71_5F00_4DEE8063.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;margin:0px 5px 0px 0px;display:inline;border-top:0px;border-right:0px;" title="snap71" border="0" alt="snap71" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap71_5F00_thumb_5F00_0DB866E9.png" width="154" height="240" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap69_5F00_13FF3D77.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;margin:0px 5px 0px 0px;display:inline;border-top:0px;border-right:0px;" title="snap69" border="0" alt="snap69" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap69_5F00_thumb_5F00_25DBD144.png" width="154" height="240" /&gt;&lt;/a&gt; &lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap70_5F00_256F9E4F.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="snap70" border="0" alt="snap70" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/snap70_5F00_thumb_5F00_374C321C.png" width="154" height="240" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Go read the full story &lt;a href="http://bugbig.com/shocker-googles-android-logo-boosted-from-atari-lynx-title-gauntlet-the-third-encounter" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22553" width="1" height="1"&gt;</description></item><item><title>Writing a .NET based Atari Lynx emulator</title><link>http://www.alexthissen.nl/blogs/atarilynx/archive/2010/09/17/writing-a-net-based-atari-lynx-emulator.aspx</link><pubDate>Fri, 17 Sep 2010 19:21:56 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22552</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Yep, I needed a new train project. I spent my time when travelling to work by train on a small notebook (HP Pavilion 1030ed) reading blogs, browsing the internet and all. Every now and then I have a pet project that I like to do. Hardly ever does it amount to anything useful, but it’s the pleasure and focus of thing that interest me. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/Atari_5F00_Lynx_5F00_II_5F00_1BF4E657.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="Atari_Lynx_II" border="0" alt="Atari_Lynx_II" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/atarilynx/Atari_5F00_Lynx_5F00_II_5F00_thumb_5F00_18FF81A4.png" width="240" height="113" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I combined my love for the Atari Lynx machine with the Microsoft platform. It seems like a nice exercise write an emulator for the Atari Lynx. I will allow me to learn more of the internals of the Lynx machine, processor and hardware emulation and various older chipsets that I knew from my teen ages. When I was 13-15 years old I spent quite some time on the Commodore 64 machine, wrote some childish C64 Basic programs and even a little assembly. I had no idea what I was doing at the time, but I do remember stuff like LDA (load accumulator). Bringing it all together I thought it would be nice to write an emulator for the Atari Lynx using the .NET Framework. This will allow it to be used on a variety of platforms:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Windows based operating systems with DirectX or maybe Windows Presentation Foundation (WPF) and the Media Integration Layer&lt;/li&gt;    &lt;li&gt;Windows Phone 7&lt;/li&gt;    &lt;li&gt;XNA Game Studio, which allows targeting both Windows and XBox360&lt;/li&gt;    &lt;li&gt;Silverlight inside cross-platform browsers&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;At the moment there are two emulators available for the Windows OS: Handy and MetaLynx. The latter is old, not feature complete and it has no source code that I could find. The first however is very good, with source code in C++ (for Visual Studio). It has been ported to a number of other devices, such as the PSP, GP2X, MacOS and many more.&lt;/p&gt;  &lt;p&gt;I could do a straight port of the source code of Handy. I think it is doable, but will be error-prone. It will also defeat the purpose of learning about emulation, the processors inside the Atari Lynx, the other hardware and so on. That’s why I want to rewrite the code, refactor it where necessary and improve it where possible. It will be rewritten “from scratch”. I do not mean from scratch literally, because I intend to have the Handy source code right next to me, to take a look at how it is done there.&lt;/p&gt;  &lt;p&gt;Ideally, I will document everything I learn along the way, so anyone can learn some or all of what I have encountered. I have no idea if this will ever get finished, but the fun is what counts.&lt;/p&gt;  &lt;p&gt;Let’s get started.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22552" width="1" height="1"&gt;</description></item><item><title>Microsoft Most Valuable Professional for 2010</title><link>http://www.alexthissen.nl/blogs/main/archive/2010/07/02/microsoft-most-valuable-professional-for-2010.aspx</link><pubDate>Fri, 02 Jul 2010 14:59:32 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22551</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/MVPLogo_5F00_1C802089.gif"&gt;&lt;img style="border-bottom:0px;border-left:0px;margin:0px 15px 15px 0px;display:inline;border-top:0px;border-right:0px;" title="MVPLogo" border="0" alt="MVPLogo" align="left" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/MVPLogo_5F00_thumb_5F00_7C35640B.gif" width="115" height="180" /&gt;&lt;/a&gt;Yesterday I received mail from Toby Richards with the title “Congratulations 2010 Microsoft MVP!”. This means that Microsoft grants me this title as a Microsoft community contributor for another year.&lt;/p&gt;  &lt;p&gt; The mail is pretty flattering: “&lt;em&gt;This award is given to exceptional technical community leaders who actively share their high quality, real world expertise with others.&lt;/em&gt;” I do hope people like the presentations I give at the various Dutch conferences. That’s my main place to share.&lt;/p&gt;  &lt;p&gt;Thanks Microsoft. Thanks community. Hope to meet you again soon.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22551" width="1" height="1"&gt;</description></item><item><title>Extracting files from an MSI package</title><link>http://www.alexthissen.nl/blogs/main/archive/2010/06/17/extracting-files-from-an-msi-package.aspx</link><pubDate>Thu, 17 Jun 2010 09:03:19 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22550</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Reminder to self, as I have searched for this too many times:&lt;/p&gt;  &lt;p&gt;How to extract files from an MSI file without actually installing it:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:2f7a4b70-cf9f-4020-b092-25f5a7ffcc6d" class="wlWriterEditableSmartContent"&gt;&lt;pre class="c"&gt;msiexec /a c:\downloads\WCFRestStarterKit.msi /qb TARGETDIR=c:\RESTStarterKit&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Run this from an elevated command prompt. The target directory does not have to be created beforehand.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22550" width="1" height="1"&gt;</description><category domain="http://www.alexthissen.nl/blogs/main/archive/tags/Windows+OS/default.aspx">Windows OS</category><category domain="http://www.alexthissen.nl/blogs/main/archive/tags/Tools+and+Utilities/default.aspx">Tools and Utilities</category></item><item><title>WCF Extensibility part 5: Make your endpoints behave</title><link>http://www.alexthissen.nl/blogs/main/archive/2009/08/25/wcf-extensibility-part-5-make-your-endpoints-behave.aspx</link><pubDate>Tue, 25 Aug 2009 06:36:00 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22532</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;In the previous post we looked at an operation behavior that applied the operation formatter to a particular operation description. Because this is default behavior for all operations in the interface defined, we will make life a little easier on us to have the operation behaviors applied automatically. A WCF endpoint consists of address, binding and contract. The latter is represented by the [ServiceContract] annotated interface, in our case IRcon and the target of our exercise. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_7BAA35EC.png"&gt;&lt;img height="252" width="670" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_thumb_5F00_33C8616B.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;The extensibility point that the WCF runtime provides is an endpoint behavior. Endpoint behaviors allow you to manipulate an endpoint&amp;rsquo;s definition. To create an endpoint behavior you need to implement the System.ServiceModel.Description.IEndpointBehavior interface:&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:ae19c08b-4e08-41e0-8b3a-0e5d1324c144" style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;"&gt;
&lt;pre class="brush: csharp; gutter: true; first-line: 1; tab-size: 2;  toolbar: true;"&gt;public interface IEndpointBehavior
{
    void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters);
    void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime);
    void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher);
    void Validate(ServiceEndpoint endpoint);
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This should look pretty familiar to you if you have read the previous part in this series. Again, you can apply your behavior both on the client and service side. There&amp;rsquo;s another validation moment in the Validate method and you can add binding parameters to the binding context for later use.&lt;/p&gt;
&lt;p&gt;The implementation of ApplyClientBehavior is the most interesting one. Here we will apply the operation behavior to each of the endpoint&amp;rsquo;s operations.&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:37b23b2a-92e9-4fa0-9453-7312ea3ebd23" style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;"&gt;
&lt;pre class="brush: csharp; gutter: true; first-line: 1; tab-size: 2;  toolbar: true;"&gt;public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
    if (endpoint.Binding is SourceRconTcpBinding)
    {
        foreach (OperationDescription description in endpoint.Contract.Operations)
        {
            ApplyFormatterBehavior(description, endpoint);
        }
    }
}

private void ApplyFormatterBehavior(OperationDescription operationDescription, ServiceEndpoint endpoint)
{
    if (operationDescription.Behaviors.Find&amp;lt;SourceRconOperationFormatterBehavior&amp;gt;() == null)
    {
        SourceRconOperationFormatterBehavior formatterBehavior = new SourceRconOperationFormatterBehavior();
        operationDescription.Behaviors.Add(formatterBehavior);
    }
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Inside the implementation a simple loop over the operation descriptions in the contract is enough to get things going. The helper method ApplyFormatterBehavior makes sure that the SourceRconOperationFormatterBehavior behavior is applied only once.&lt;/p&gt;
&lt;p&gt;An endpoint behavior needs to be added to the Behaviors collection of an endpoint to make it do its work. Given the client-side interface definition IRconProxy (which derives from both IRcon and IClientChannel) you can create a channel factory. The factory holds the the definition of the endpoint, provided by the implicit ABC in line 1 (address and binding are obvious, the generic &amp;lt;T&amp;gt; of the ChannelFactory represents the contract).&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:c14be624-47f4-419f-9b12-ff7e0a4b7f16" style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;"&gt;
&lt;pre class="brush: csharp; gutter: true; first-line: 1; tab-size: 2;  toolbar: true;"&gt;ChannelFactory&amp;lt;IRconProxy&amp;gt; factory = new ChannelFactory&amp;lt;IRconProxy&amp;gt;(binding, new EndpointAddress(uri));
factory.Endpoint.Behaviors.Add(new SourceRconEndpointBehavior());
factory.Open();&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Line 2 adds the behavior to the Behaviors collection of the endpoint. When the factory opens, the behavior gets applied. The operation formatters get applied at that moment as well. The operation formatters are used when the actual calls through the channel are made.&lt;/p&gt;
&lt;p&gt;Side note: if you were to use a ClientBase&amp;lt;T&amp;gt; derived proxy, you would need to drill down into the proxy.ChannelFactory.Endpoint.Behaviors to get at the Behaviors collection, or use the proxy.Endpoint property for easier access.&lt;/p&gt;
&lt;p&gt;To summarize, an endpoint behavior allows you to manipulate your endpoint. Behaviors are an opt-in, so it is your choice whether to apply them or not. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22532" width="1" height="1"&gt;</description><category domain="http://www.alexthissen.nl/blogs/main/archive/tags/Gaming/default.aspx">Gaming</category><category domain="http://www.alexthissen.nl/blogs/main/archive/tags/Protocols/default.aspx">Protocols</category><category domain="http://www.alexthissen.nl/blogs/main/archive/tags/.NET+FX+3.5+SP1/default.aspx">.NET FX 3.5 SP1</category><category domain="http://www.alexthissen.nl/blogs/main/archive/tags/WCF/default.aspx">WCF</category></item><item><title>WCF Extensibility part 4: Applying formatting to operations</title><link>http://www.alexthissen.nl/blogs/main/archive/2009/08/21/wcf-extensibility-part-4-applying-formatting-to-operations.aspx</link><pubDate>Fri, 21 Aug 2009 20:11:00 GMT</pubDate><guid isPermaLink="false">badf6229-ffeb-484a-8c5a-fc9c9987c8f2:22521</guid><dc:creator>Alex Thissen</dc:creator><slash:comments>5</slash:comments><description>&lt;p&gt;In the previous part we inspected the way you can influence the transition from a service operation to a WCF Message object. This was accomplished with an implementation of the IClientMessageFormatter interface, in our case the SourceRconOperationFormatter class. Now it&amp;rsquo;s time to look at how to apply this message formatter to the client channel stack.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_65ADA55C.png"&gt;&lt;img height="254" width="673" src="http://www.alexthissen.nl/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/main/image_5F00_thumb_5F00_3CC29053.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;The message formatting happens based on the formatter that is specified as part of the description of an operation. This means that in theory you could change the formatter from operation to operation. In order to get the formatter in place you need to change the Formatter property of the System.ServiceModel.Description.OperationDescription for the operation of your choice. Obviously this has to be done before the first method call is made. The extensibility point that allows you define which formatters are used for client and service operations is an operation behavior. When applied an operation behavior will influence the way an operation behaves when called. Hence the name.&lt;/p&gt;
&lt;p&gt;Operation behaviors must implement the System.ServiceModel.Decription.IOperationBehavior interface. First of all look at that interface definition:&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:aa86fa62-127d-4f19-8cf2-bc4ed09015de" style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;"&gt;
&lt;pre class="brush: csharp; gutter: true; first-line: 1; tab-size: 2;  toolbar: true;"&gt;public interface IOperationBehavior
{
    void AddBindingParameters(OperationDescription operationDescription, BindingParameterCollection bindingParameters);
    void ApplyClientBehavior(OperationDescription operationDescription, ClientOperation clientOperation);
    void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation);
    void Validate(OperationDescription operationDescription);
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;As you can see it has two methods to apply the specifics of your behavior to an operation description: one for client-side and one for service-side operations. We need to fill in the client-side proxy part of it only. Furthermore, the behavior can validate the operation to which it is applied. More on this in a moment. And finally, should the behavior need to add specific parameters to the entire binding (which can be accessed later on from the binding context) it is free to do so in the AddBindingParameters method.&lt;/p&gt;
&lt;p&gt;The SourceRconOperationFormatterBehavior class explicitly implements the IOperationBehavior interface. There is no point to have public method as it is unlikely that the implementation will be called other than via the interface.&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:cdfeef7d-2528-46b2-89ee-4f49a38deb2b" style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;"&gt;
&lt;pre class="brush: csharp; gutter: true; first-line: 1; tab-size: 2;  toolbar: true;"&gt;public class SourceRconOperationFormatterBehavior: IOperationBehavior
{
    #region IOperationBehavior Members

    void IOperationBehavior.AddBindingParameters(OperationDescription operationDescription, BindingParameterCollection bindingParameters)
    {
        // Nothing for us to do
    }

    void IOperationBehavior.ApplyClientBehavior(OperationDescription operationDescription, ClientOperation clientOperation)
    {
        // Apply our own formatter
        clientOperation.Formatter = new SourceRconOperationFormatter(operationDescription);

        // This behavior takes care of both request and replies at client
        clientOperation.SerializeRequest = true;
        clientOperation.DeserializeReply = true;
    }

    void IOperationBehavior.ApplyDispatchBehavior(OperationDescription operationDescription, System.ServiceModel.Dispatcher.DispatchOperation dispatchOperation)
    {
        // Client-side only
        throw new NotImplementedException();
    }

    void IOperationBehavior.Validate(OperationDescription operationDescription)
    {
        // Always valid?
        // In our case we cannot have ref or out parameters
        // We could check that parameters are primitive types
    }

    #endregion
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The ApplyClientBehavior method set the Formatter property of the client operation to which the behavior is applied. It also expresses that the client operation will serialize and deserialize both request and reply messages.&lt;/p&gt;
&lt;p&gt;Inside the Validate method we could check whether the operation is compatible with the behavior. For example, we should check that there are no ref or out parameters. We could check that the parameters are either representable as a string, and whether the return value is either of type string (the reply messages always contain string data) or that it is deserializable from a string. I have not been able to get the validate method to be triggered and all implementations of IOperationBehavior inside the framework have an empty method body. With Reflector you can see that the client validations on behaviors should go off when the ChannelFactory is opening. I&amp;rsquo;m not sure why it does not fire.&lt;/p&gt;
&lt;p&gt;You can go the extra mile and have your behavior derive from Attribute:&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:a37777bd-ae37-4504-ac48-f1392d75f025" style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;"&gt;
&lt;pre class="brush: csharp; gutter: true; first-line: 1; tab-size: 2;  toolbar: true;"&gt;[AttributeUsage(AttributeTargets.Method)]
public sealed class SourceRconOperationFormatterBehaviorAttribute : Attribute, IOperationBehavior&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;so it can be used as an attribute above a method:&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:87d7b200-7785-4e00-99ab-77891efda061" style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;"&gt;
&lt;pre class="brush: csharp; gutter: true; first-line: 1; tab-size: 2;  toolbar: true;"&gt;[ServiceContract]
public interface IRcon
{
    [OperationContract(Action = &amp;quot;status&amp;quot;)]
    [SourceRconOperationFormatterBehavior]
    string GetStatus();&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;You would probably want to change the name of the behavior/attribute class to something like SourceRconOperationAttribute so it looks like [SourceRconOperation]. This makes more sense. In our case the behavior is not really optional as we need to apply the operation formatter for every operation in a service contract to make things work. Having an interface that is only partially usable for remote control seems weird.&lt;/p&gt;
&lt;p&gt;Having made the remarks above on how behaviors are non-optional, the next topic will be about a streamlined way to accomplish that all operations in a service contract will have the operation formatter behavior applied.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.alexthissen.nl/aggbug.aspx?PostID=22521" width="1" height="1"&gt;</description></item></channel></rss>
