<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0"><channel><title>slimCODE, aka Martin Plante</title><link>http://www.slimcode.com/cs/blogs/martin/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/slimcode" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>The most awkward debugging experience just happened to me</title><link>http://www.slimcode.com/cs/blogs/martin/archive/2009/10/21/the-most-awkward-debugging-experience-just-happened-to-me.aspx</link><pubDate>Wed, 21 Oct 2009 14:52:00 GMT</pubDate><guid isPermaLink="false">ccca17bc-cc72-4bae-972f-7bd738c168c1:558</guid><dc:creator>slimcode</dc:creator><slash:comments>0</slash:comments><comments>http://www.slimcode.com/cs/blogs/martin/comments/558.aspx</comments><wfw:commentRss>http://www.slimcode.com/cs/blogs/martin/commentrss.aspx?PostID=558</wfw:commentRss><wfw:comment>http://www.slimcode.com/cs/blogs/martin/rsscomments.aspx?PostID=558</wfw:comment><description>&lt;p&gt;I’m currently testing a Windows Mobile application. I’m doing final tests directly on my real devices. I had my HTC Touch Pro2 phone hooked via USB, and the tests went perfectly. Then, I unplugged it and plugged my old HTC P4000 to make tests on an older device. I pressed F5 in Visual Studio .NET, and checked my P4000’s screen for the usual “Do you trust that application” prompt… Nothing. But from the corner on my eye, I saw that my Touch Pro2 was asking for the question. Hun? I clicked “Yes”, and there I was, in the middle of a debugging session via WIFI!!! Tracing was working well, I could breakpoint, pause and continue.&lt;/p&gt;  &lt;p&gt;I had no idea my phone was still connected to Windows Mobile Center. As a matter of fact, Mobile Center was waiting for my feedback about how to sync the newly plugged P4000. Once I answered “Connect without synching”, VS.NET started using the P4000 for debugging.&lt;/p&gt;  &lt;p&gt;And all this happened 5 minutes after I told myself I should tweet that I want my phone to sync via WIFI.&lt;/p&gt;  &lt;p&gt;Now, I’m trying to reproduce this, and I can’t. It seems timing had a lot to do with this, and the fact it was the first time Mobile Center saw my P4000 in this session. If only Windows Mobile Center (and VS.NET) was supporting multiple devices connected at the same time.&lt;/p&gt;&lt;img src="http://www.slimcode.com/cs/aggbug.aspx?PostID=558" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=Y3aQ8OSYzXw:tjlibOOJPU8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=Y3aQ8OSYzXw:tjlibOOJPU8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=Y3aQ8OSYzXw:tjlibOOJPU8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=Y3aQ8OSYzXw:tjlibOOJPU8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=Y3aQ8OSYzXw:tjlibOOJPU8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=Y3aQ8OSYzXw:tjlibOOJPU8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/English/default.aspx">English</category><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/Non-technical/default.aspx">Non-technical</category></item><item><title>Windows Mobile Marketplace numbers</title><link>http://www.slimcode.com/cs/blogs/martin/archive/2009/10/21/windows-mobile-marketplace-numbers.aspx</link><pubDate>Tue, 20 Oct 2009 23:40:50 GMT</pubDate><guid isPermaLink="false">ccca17bc-cc72-4bae-972f-7bd738c168c1:555</guid><dc:creator>slimcode</dc:creator><slash:comments>2</slash:comments><comments>http://www.slimcode.com/cs/blogs/martin/comments/555.aspx</comments><wfw:commentRss>http://www.slimcode.com/cs/blogs/martin/commentrss.aspx?PostID=555</wfw:commentRss><wfw:comment>http://www.slimcode.com/cs/blogs/martin/rsscomments.aspx?PostID=555</wfw:comment><description>&lt;p&gt;In the iPhone world, it is not rare to see developers share their numbers with the rest of the community. I decided to do the same with the &lt;a href="http://marketplace.windowsphone.com/" target="_blank"&gt;Windows Mobile Marketplace&lt;/a&gt;, after its first two weeks.&lt;/p&gt;  &lt;p&gt;I submitted three applications to the Marketplace, two of them, &lt;a href="http://www.slimcode.com/DutchTab/" target="_blank"&gt;DutchTab&lt;/a&gt; and &lt;a href="http://www.slimcode.com/RateThings/" target="_blank"&gt;RateThings&lt;/a&gt;, to multiple English markets (US, Canada, UK, Australia, India), and &lt;a href="http://www.slimcode.com/slimPASSWORDS/" target="_blank"&gt;slimPASSWORDS&lt;/a&gt; only to the US and Canadian markets. Since this third application is free, I wanted to avoid the 15$ fee per extra market submission.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;DutchTab (1.99$ US): 12 downloads&lt;/p&gt;    &lt;p&gt;RateThings (2.99$ US): 9 downloads&lt;/p&gt;    &lt;p&gt;slimPASSWORDS (free): 1010 downloads&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Wow! A total of 50.79$ in sales!!! 35.55$ in my pockets!!! I’ve coded myself a new Volvo!!!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;(you can insert here a very long silence of discomfort)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now, let’s put everything in perspective. The Windows Mobile Marketplace is young, very young. And contrary to other application stores, it did not appear on all devices and platforms at the same time. Only Windows Mobile 6.5 devices can benefit from it, or those impatient enough to find the hacked CAB and install it on their WM 6.0 or 6.1 device (like I did).&lt;/p&gt;  &lt;p&gt;Once the Marketplace gets a web interface and official support for older devices, numbers will mean something.&lt;/p&gt;  &lt;p&gt;In the meantime, I’m happy to see slimPASSWORDS get a few downloads.&lt;/p&gt;&lt;img src="http://www.slimcode.com/cs/aggbug.aspx?PostID=555" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=rIJ3PTnqEkQ:37h833tVTDU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=rIJ3PTnqEkQ:37h833tVTDU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=rIJ3PTnqEkQ:37h833tVTDU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=rIJ3PTnqEkQ:37h833tVTDU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=rIJ3PTnqEkQ:37h833tVTDU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=rIJ3PTnqEkQ:37h833tVTDU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>A shout from my heart to Microsoft</title><link>http://www.slimcode.com/cs/blogs/martin/archive/2009/10/20/a-shout-from-my-heart-to-microsoft.aspx</link><pubDate>Tue, 20 Oct 2009 14:23:41 GMT</pubDate><guid isPermaLink="false">ccca17bc-cc72-4bae-972f-7bd738c168c1:554</guid><dc:creator>slimcode</dc:creator><slash:comments>0</slash:comments><comments>http://www.slimcode.com/cs/blogs/martin/comments/554.aspx</comments><wfw:commentRss>http://www.slimcode.com/cs/blogs/martin/commentrss.aspx?PostID=554</wfw:commentRss><wfw:comment>http://www.slimcode.com/cs/blogs/martin/rsscomments.aspx?PostID=554</wfw:comment><description>&lt;p&gt;&lt;img title="Steve Ballmer - His thoughts on that Google phone" hspace="12" align="right" src="http://www.coolsmartphone.com/images/stories/balmer-balmer-balmer-balmer.jpg" width="150" height="108" /&gt;It could have been the very poor download numbers I’m getting for my three apps on the &lt;a href="http://marketplace.windowsphone.com" target="_blank"&gt;Windows Mobile Marketplace&lt;/a&gt;. It could have been the total confusion I’m seeing within &lt;a href="http://www.microsoft.com" target="_blank"&gt;Microsoft&lt;/a&gt; about overlapping projects (FolderShare vs SkyDrive vs Live Mesh vs My Phone, Azure vs Live Framework, Win32 vs WinForms vs WPF vs Silverlight, WebForms vs MVC, etc). It could have been the disgust I have for Mr. Balmer, though I’m sure he works hard.&lt;/p&gt;  &lt;p&gt;No. The hit came from behind. It came from a source I did not expect. I can still hear her sentence, thrown like a banality, just like when she talks to me about gossips.&lt;/p&gt;  &lt;p&gt;“Why don’t you make your little applications for the iPhone? You’d have more success.”&lt;/p&gt;  &lt;p&gt;Bam. I was stunt. My wife, that wonderfully non-technically versed, non-gadget prone person I share my life with was just stabbing me in the back… And I couldn’t answer. To keep the face and the technical superiority I’m suppose to have over her, I tried to made a “honey, what do you know about all this?” kind-of-face, and said without thinking “it would cost me a lot of money to jump in that boat, and I would have to relearn everything. I’m not ready for this.”.&lt;/p&gt;  &lt;p&gt;Translation: I could not justify the purchase of a Tablet PC and a new Windows Mobile phone in the past months, and I’m too damn lazy to learn something new.&lt;/p&gt;  &lt;p&gt;And I kept thinking about this the whole weekend. I felt stupid. I felt ashamed. I felt exposed and vulnerable. The reasons for me to keep developing for the Windows and Windows Mobile platforms were just a “façade” in front of my laziness and comfort. Am I doing the wrong thing by staying in that comfort zone?&lt;/p&gt;  &lt;p&gt;I dug deeper and deeper, trying to convince myself I could not be THAT lazy, and finally pinpointed the true explanation for me to hold onto the Windows Mobile platform. Simple and sincere attachment to Microsoft, and a true desire to see them succeed. If I’m still developing for Windows Mobile, it’s not because I &lt;u&gt;think&lt;/u&gt; they will succeed, it’s because I &lt;u&gt;want&lt;/u&gt; them to succeed.&lt;/p&gt;  &lt;p&gt;They spoiled me with the best development tools, an awesome managed framework, a huge developer community, tons of sample code and a new openness that makes you feel part of the gang.&lt;/p&gt;  &lt;p&gt;In the meantime, they forgot about actual users and their own perception. While Balmer was busy shouting “developers, developers, developers” in one room, and talk to big corporations in another, the simple general public user was forgotten by Microsoft. Their new desktop OS, Vista, almost crumbled after MS decided it was more important to be secure than usable. And their mobile OS was forgotten in a closet, accumulating dust and a bad odour.&lt;/p&gt;  &lt;p&gt;Today, Tuesday October the 20th, 2009, as a developer, I’m shouting from the deepest of my heart: Microsoft, stop thinking like developers, stop thinking like evangelists or regional directors. Put your “general user” shoes and hat, and act. Don’t talk. Act. Straighten up you act, I should say. Clean up the complete mess you are displaying with those overlapping product ideas that rarely come to completion. Simplify your offerings into simple and user-friendly products and terms. Force developers to use APIs that will make the user the most important target, not the developer’s comfort. Give us a unified and up to date API to address the users’ demands. Consolidate your Windows Mobile, Zune and Windows Phone offerings once and for all under one roof, with the best framework you can give developers so they can concentrate on users.&lt;/p&gt;  &lt;p&gt;I will not wait until 2010 to make a final decision between Windows Mobile and the iPhone. Show me… no… prove me before the end of the year that you have a consolidated and ubiquitous vision of the Windows Phone, the Zune brand, their respective Marketplace and Silverlight development. I’m not ready to wait any longer. I’ve waited enough. It’s now or never.&lt;/p&gt;&lt;img src="http://www.slimcode.com/cs/aggbug.aspx?PostID=554" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=yC5Fqd4ooNs:2039ArPW4iM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=yC5Fqd4ooNs:2039ArPW4iM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=yC5Fqd4ooNs:2039ArPW4iM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=yC5Fqd4ooNs:2039ArPW4iM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=yC5Fqd4ooNs:2039ArPW4iM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=yC5Fqd4ooNs:2039ArPW4iM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/English/default.aspx">English</category><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/Non-technical/default.aspx">Non-technical</category></item><item><title>Performance tests using Bitmap with different PixelFormat under the .NET CF</title><link>http://www.slimcode.com/cs/blogs/martin/archive/2009/09/25/performance-tests-using-bitmap-with-different-pixelformat-under-the-net-cf.aspx</link><pubDate>Fri, 25 Sep 2009 04:53:20 GMT</pubDate><guid isPermaLink="false">ccca17bc-cc72-4bae-972f-7bd738c168c1:547</guid><dc:creator>slimcode</dc:creator><slash:comments>1</slash:comments><comments>http://www.slimcode.com/cs/blogs/martin/comments/547.aspx</comments><wfw:commentRss>http://www.slimcode.com/cs/blogs/martin/commentrss.aspx?PostID=547</wfw:commentRss><wfw:comment>http://www.slimcode.com/cs/blogs/martin/rsscomments.aspx?PostID=547</wfw:comment><description>&lt;p&gt;I don’t have any answer for all the data I’m about to write here, but I thought it would be interesting to share with you the results of my performance tests using &lt;a href="http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.aspx" target="_blank"&gt;Bitmap&lt;/a&gt; objects under the .NET Compact Framework.&lt;/p&gt;  &lt;p&gt;My Windows Mobile applications use a custom-made control library, where controls perform their own painting based on templates and views. All the painting is performed in an image, which is then copied back to the display, to avoid flickering.&lt;/p&gt;  &lt;p&gt;While testing my applications on higher resolutions, I hit a very frustrating wall: &lt;a href="http://msdn.microsoft.com/en-us/library/system.outofmemoryexception.aspx" target="_blank"&gt;OutOfMemoryException&lt;/a&gt;. That’s right. Creating the buffer Bitmap was too demanding for the emulator images I’m testing with. And we’re not speaking about very huge images. The typical size where it fails is 480x696, for a single form test application. Assuming a 32bit per pixel image, we’re talking about 1336320 bytes. That’s not that much. What is happening?&lt;/p&gt;  &lt;p&gt;First, I decided that my library would fall back to a smaller bpp (bit per pixel) image when this happens. By default, I try creating my Bitmap using the &lt;a href="http://msdn.microsoft.com/en-us/library/7we6s1x3.aspx" target="_blank"&gt;constructor that takes only a width and height&lt;/a&gt;. When this fails, I rollback to using the &lt;a href="http://msdn.microsoft.com/en-us/library/3z132tat.aspx" target="_blank"&gt;constructor that also takes a PixelFormat&lt;/a&gt;, passing &lt;a href="http://msdn.microsoft.com/en-us/library/system.drawing.imaging.pixelformat.aspx" target="_blank"&gt;Format16bppRgb565&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;That’s when the roof fell on me. Performance degraded dramatically. And after some profiling (by hand using &lt;a href="http://msdn.microsoft.com/en-us/library/ms886788.aspx" target="_blank"&gt;QueryPerformanceCounter&lt;/a&gt;), the culprit was identified: Copying the buffer image back to the display’s &lt;a href="http://msdn.microsoft.com/en-us/library/system.drawing.graphics.aspx" target="_blank"&gt;Graphics&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;So I decided to test and compare the various &lt;a href="http://msdn.microsoft.com/en-us/library/system.drawing.imaging.pixelformat.aspx" target="_blank"&gt;PixelFormat&lt;/a&gt; values, on a real 480x800 device running WM 6.1 (HTC Touch Pro 2), expecting Format32bppRgb to give me the same results as passing no PixelFormat parameter to Bitmap’s ctor. I was wrong!&lt;/p&gt;  &lt;table cellspacing="2" cellpadding="5"&gt;     &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;&lt;u&gt;PixelFormat&lt;/u&gt;&lt;/strong&gt;&amp;#160;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;&lt;u&gt;Drawing ticks&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;&lt;u&gt;Copying ticks&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;None: &lt;/td&gt;        &lt;td&gt;287392&lt;/td&gt;        &lt;td&gt;215296&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppRgb: &lt;/td&gt;        &lt;td&gt;1233216 (4.3x slower) &lt;/td&gt;        &lt;td&gt;1963200 (9.1x slower)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format24bppRgb: &lt;/td&gt;        &lt;td&gt;1302496 (4.5x slower) &lt;/td&gt;        &lt;td&gt;601088 (2.8x slower)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb565: &lt;/td&gt;        &lt;td&gt;561696 (1.9x slower) &lt;/td&gt;        &lt;td&gt;301344 (1.4x slower)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb555: &lt;/td&gt;        &lt;td&gt;586976 (2.0x slower) &lt;/td&gt;        &lt;td&gt;2163360 (10.0x slower)&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;As you can see, the constructor that does not take a PixelFormat parameter is doing something special, because performance is drastically better. In the best case, using Format16bppRgb565, it was still almost 2 times slower. It was time for some &lt;a href="http://www.red-gate.com/products/reflector/" target="_blank"&gt;Reflector&lt;/a&gt;! While the desktop version was calling its overload with Format32bppArgb (0x26200a, which is not available in the PixelFormat enum under .NET CF), the CF version was doing things completely differently than the ctor with a PixelFormat parameter:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;.NET Framework:&lt;/h4&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;public Bitmap(int width, int height)      &lt;br /&gt;{       &lt;br /&gt;&amp;#160; this..ctor(width, height, &lt;strong&gt;&lt;font color="#ff0000"&gt;0x26200a&lt;/font&gt;&lt;/strong&gt;);       &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;.NET Compact Framework:&lt;/h4&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;public Bitmap(int width, int height)      &lt;br /&gt;{       &lt;br /&gt;&amp;#160; base..ctor();       &lt;br /&gt;&amp;#160; this._Init(width, height);       &lt;br /&gt;}       &lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;     &lt;br /&gt;public unsafe Bitmap(int width, int height, PixelFormat format)       &lt;br /&gt;{       &lt;br /&gt;&amp;#160; PAL_ERROR pal_error;       &lt;br /&gt;&amp;#160; IntPtr ptr;       &lt;br /&gt;&amp;#160; base..ctor();       &lt;br /&gt;&amp;#160; pal_error = &lt;strong&gt;&lt;font color="#ff0000"&gt;GL.CreatePixfmt&lt;/font&gt;&lt;/strong&gt;(width, height, format, &amp;amp;ptr);       &lt;br /&gt;&amp;#160; if (pal_error &amp;lt; 0)       &lt;br /&gt;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; goto Label_002A;       &lt;br /&gt;&amp;#160; }       &lt;br /&gt;&amp;#160; base.m_cx = width;       &lt;br /&gt;&amp;#160; base.m_cy = height;       &lt;br /&gt;&amp;#160; base.m_how = ptr;       &lt;br /&gt;Label_002A:       &lt;br /&gt;&amp;#160; MISC.HandleAr(pal_error);       &lt;br /&gt;}       &lt;br /&gt;      &lt;br /&gt;private unsafe void _Init(int cx, int cy)       &lt;br /&gt;{       &lt;br /&gt;&amp;#160; PAL_ERROR pal_error;       &lt;br /&gt;&amp;#160; IntPtr ptr;       &lt;br /&gt;&amp;#160; pal_error = &lt;font color="#ff0000"&gt;&lt;strong&gt;GL.Create&lt;/strong&gt;&lt;/font&gt;(cx, cy, &amp;amp;ptr);       &lt;br /&gt;&amp;#160; if (pal_error &amp;lt; 0)       &lt;br /&gt;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; goto Label_0023;       &lt;br /&gt;&amp;#160; }       &lt;br /&gt;&amp;#160; base.m_cx = cx;       &lt;br /&gt;&amp;#160; base.m_cy = cy;       &lt;br /&gt;&amp;#160; base.m_how = ptr;       &lt;br /&gt;Label_0023:       &lt;br /&gt;&amp;#160; MISC.HandleAr(pal_error);       &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;When providing a PixelFormat, GL.CreatePixfmt is called, while it’s GL.Create that is called when no format is provided. What kind of image does that create? I have no clue. To try to identify it, I decided to try the other PixelFormat values available on the regular .NET Framework, but absent from the .NET CF. They all failed with an ArgumentException, except one! Format32bpp&lt;u&gt;A&lt;/u&gt;rgb, the default value on the .NET Framework! And here were the results.&lt;/p&gt;  &lt;table cellspacing="2" cellpadding="5"&gt;     &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;&lt;u&gt;PixelFormat&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;&lt;u&gt;Drawing ticks&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;&lt;u&gt;Copying ticks&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppArgb: &lt;/td&gt;        &lt;td&gt;1251968 (4.4x slower) &lt;/td&gt;        &lt;td&gt;1945504 (9.0x slower)&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;Still not the same results. Now is the best part: It did not cause OutOfMemoryException on high res emulators! Hun? The image created without a PixelFormat has greater resolution than 32bit? But Format48bppRgb, Format64bppArgb and Format64bppPArgb failed.&lt;/p&gt;  &lt;p&gt;You might think I was done with the surprise, right? No.&lt;/p&gt;  &lt;p&gt;The above numbers were clearly showing that using the PixelFormat-less Bitmap constructor was the preferred choice, and that I could revert to Format16bppRgb565 in case of OutOfMemoryException. Then I tested on a real 240x320 WM 6.1 device (HTC P4000):&lt;/p&gt;  &lt;table cellspacing="2" cellpadding="5"&gt;     &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;&lt;u&gt;PixelFormat&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;&lt;u&gt;Drawing ticks&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;&lt;u&gt;Copying ticks&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;None: &lt;/td&gt;        &lt;td&gt;425056&lt;/td&gt;        &lt;td&gt;287520&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppRgb: &lt;/td&gt;        &lt;td&gt;502240 (1.18x slower) &lt;/td&gt;        &lt;td&gt;721280 (2.5x slower)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format24bppRgb: &lt;/td&gt;        &lt;td&gt;569952 (1.34x slower) &lt;/td&gt;        &lt;td&gt;646784 (2.25x slower)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb565: &lt;/td&gt;        &lt;td&gt;373152 (&lt;strong&gt;1.14x faster&lt;/strong&gt;) &lt;strong&gt;&lt;font color="#ff0000"&gt;!!! &lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;286144 (&lt;strong&gt;same speed&lt;/strong&gt;) &lt;strong&gt;&lt;font color="#ff0000"&gt;!!!&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb555: &lt;/td&gt;        &lt;td&gt;371072 (&lt;strong&gt;1.15x faster&lt;/strong&gt;) &lt;strong&gt;&lt;font color="#ff0000"&gt;!!! &lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;765984 (2.7x slower)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppArgb: &lt;/td&gt;        &lt;td&gt;518496 (1.22 slower) &lt;/td&gt;        &lt;td&gt;722048 (2.5x slower)&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;This time, the PixelFormat-less constructor is not the fastest option. If I want to achieve the best performance possible, I have to make different decisions on different platforms. Oh great. That’s just great… To complete the big picture, I tested on many emulator images. Here are the results, always comparing with the default format:&lt;/p&gt;  &lt;h4&gt;WM 6.0 Classic QVGA (240x320)&lt;/h4&gt;  &lt;table cellspacing="2" cellpadding="5"&gt;     &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;PixelFormat&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Drawing diff &lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Copying diff&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppRgb: &lt;/td&gt;        &lt;td&gt;3.7x slower&lt;/td&gt;        &lt;td&gt;32.3x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format24bppRgb: &lt;/td&gt;        &lt;td&gt;4.0x slower&lt;/td&gt;        &lt;td&gt;29.5x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb565: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.41x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;1.03x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb555: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.37x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;38.7x &lt;u&gt;slower&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppArgb: &lt;/td&gt;        &lt;td&gt;3.7x slower&lt;/td&gt;        &lt;td&gt;32.5x slower&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h4&gt;WM 6.0 Pro QVGA (240x320)&lt;/h4&gt;  &lt;table cellspacing="2" cellpadding="5"&gt;     &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;PixelFormat&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Drawing ticks &lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Copying ticks&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppRgb: &lt;/td&gt;        &lt;td&gt;3.7x slower&lt;/td&gt;        &lt;td&gt;32.0x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format24bppRgb: &lt;/td&gt;        &lt;td&gt;4.0x slower&lt;/td&gt;        &lt;td&gt;29.4x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb565: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.3x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;1.07x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb555: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.43x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;36.3x &lt;u&gt;slower&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppArgb: &lt;/td&gt;        &lt;td&gt;3.8x slower&lt;/td&gt;        &lt;td&gt;32.3x slower&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h4&gt;WM 6.0 Pro VGA (480x640)&lt;/h4&gt;  &lt;table cellspacing="2" cellpadding="5"&gt;     &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;PixelFormat&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Drawing diff &lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Copying diff&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppRgb: &lt;/td&gt;        &lt;td&gt;6.8x slower&lt;/td&gt;        &lt;td&gt;76x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format24bppRgb: &lt;/td&gt;        &lt;td&gt;7.7x slower&lt;/td&gt;        &lt;td&gt;72x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb565: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.45x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;1.04x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb555: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.45x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;88x &lt;u&gt;slower&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppArgb: &lt;/td&gt;        &lt;td&gt;6.9x slower&lt;/td&gt;        &lt;td&gt;77x slower&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h4&gt;WM 6.1 Classic QVGA (240x320)&lt;/h4&gt;  &lt;table cellspacing="2" cellpadding="5"&gt;     &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;PixelFormat&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Drawing diff &lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Copying diff&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppRgb: &lt;/td&gt;        &lt;td&gt;3.6x slower&lt;/td&gt;        &lt;td&gt;27.1x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format24bppRgb: &lt;/td&gt;        &lt;td&gt;3.8x slower&lt;/td&gt;        &lt;td&gt;24.7x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb565: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.47x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.10x faster&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb555: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.43x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;30.4x &lt;u&gt;slower&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppArgb: &lt;/td&gt;        &lt;td&gt;3.5x slower&lt;/td&gt;        &lt;td&gt;26.7x slower&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h4&gt;WM 6.1 Pro QVGA (240x320)&lt;/h4&gt;  &lt;table cellspacing="2" cellpadding="5"&gt;     &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;PixelFormat&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Drawing diff &lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Copying diff&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppRgb: &lt;/td&gt;        &lt;td&gt;3.8x slower&lt;/td&gt;        &lt;td&gt;32.1x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format24bppRgb: &lt;/td&gt;        &lt;td&gt;4.1x slower&lt;/td&gt;        &lt;td&gt;29.7x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb565: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.41x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;1.02x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb555: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.41x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;36.8x &lt;u&gt;slower&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppArgb: &lt;/td&gt;        &lt;td&gt;3.8x slower&lt;/td&gt;        &lt;td&gt;31.7x slower&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h4&gt;WM 6.1 Pro VGA (480x640)&lt;/h4&gt;  &lt;table cellspacing="2" cellpadding="5"&gt;     &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;PixelFormat&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Drawing diff &lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Copying diff&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppRgb: &lt;/td&gt;        &lt;td&gt;6.9x slower&lt;/td&gt;        &lt;td&gt;75x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format24bppRgb: &lt;/td&gt;        &lt;td&gt;7.5x slower&lt;/td&gt;        &lt;td&gt;68x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb565: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.52x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.04x faster&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb555: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.37x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;83x &lt;u&gt;slower&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppArgb: &lt;/td&gt;        &lt;td&gt;6.9x slower&lt;/td&gt;        &lt;td&gt;76x slower&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h4&gt;WM 6.1 Pro WVGA (480x800)&lt;/h4&gt;  &lt;table cellspacing="2" cellpadding="5"&gt;     &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;PixelFormat&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Drawing diff &lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Copying diff&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppRgb: &lt;/td&gt;        &lt;td&gt;7.2x slower&lt;/td&gt;        &lt;td&gt;87x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format24bppRgb: &lt;/td&gt;        &lt;td&gt;7.8x slower&lt;/td&gt;        &lt;td&gt;80x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb565: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.54x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;1.01x faster&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb555: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.54x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;100x &lt;u&gt;slower&lt;/u&gt; (10000%!!!)&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppArgb: &lt;/td&gt;        &lt;td&gt;7.3x slower&lt;/td&gt;        &lt;td&gt;88x slower&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h4&gt;WM 6.5 Pro QVGA (240x320)&lt;/h4&gt;  &lt;table cellspacing="2" cellpadding="5"&gt;     &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;PixelFormat&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Drawing diff &lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Copying diff&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppRgb: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.33x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;2.2x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format24bppRgb: &lt;/td&gt;        &lt;td&gt;2.1x slower&lt;/td&gt;        &lt;td&gt;21.7x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb565: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.39x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;1.02x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb555: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.33x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;26.2x &lt;u&gt;slower&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppArgb: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.32x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;2.1x slower&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h4&gt;WM 6.5 Pro VGA (480x640)&lt;/h4&gt;  &lt;table cellspacing="2" cellpadding="5"&gt;     &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;PixelFormat&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Drawing diff &lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Copying diff&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppRgb: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.41x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;3.6x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format24bppRgb: &lt;/td&gt;        &lt;td&gt;3.5x slower&lt;/td&gt;        &lt;td&gt;44.7x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb565: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.49x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;1.01x slower&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format16bppRgb555: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.45x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;55.5x &lt;u&gt;slower&lt;/u&gt;&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Format32bppArgb: &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;1.41x faster&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;3.4x slower&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h4&gt;WM 6.5 Pro WVGA (480x800)&lt;/h4&gt;  &lt;p&gt;The default format gives me an OutOfMemoryException, but forced formats show similar results as with VGA.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;A lot of numbers that can be resumed to:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Under WM 6.0 and 6.1, using Format16bppRgb565 can improve drawing times without compromising image copying times. &lt;/li&gt;    &lt;li&gt;Under WM 6.5, 32bpp formats have also improved drawing, offering better results than the default format, but still lacking by 2x on image copying. Format16bppRgb565 is still the best alternative to the default. &lt;/li&gt;    &lt;li&gt;The greater the resolution, the worse image copying is for non-default formats, except with Format16bppRgb565, which stays roughly on par. &lt;/li&gt;    &lt;li&gt;There is no good reason for using Format16bppRgb555 instead of Format16bppRgb565. Though drawing is as good, image copying is terrible on all platforms. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;At this point, I’m clueless about what is different with a Bitmap created without a PixelFormat parameter, but my approach will be the following:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Always use the PixelFormat-less constructor by default. &lt;/li&gt;    &lt;li&gt;If I get an OutOfMemoryException, call the other ctor with Format16bppRgb565. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I understand that all this could be different on real devices. But without answers, one must &lt;a href="http://www.joelonsoftware.com/items/2009/09/23.html" target="_blank"&gt;use its Duct Tape&lt;/a&gt; and move on.&lt;/p&gt;&lt;img src="http://www.slimcode.com/cs/aggbug.aspx?PostID=547" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=bOXmy8lkojE:jk7vVAW03uc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=bOXmy8lkojE:jk7vVAW03uc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=bOXmy8lkojE:jk7vVAW03uc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=bOXmy8lkojE:jk7vVAW03uc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=bOXmy8lkojE:jk7vVAW03uc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=bOXmy8lkojE:jk7vVAW03uc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/English/default.aspx">English</category><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/Technical/default.aspx">Technical</category></item><item><title>A week with a Tablet PC</title><link>http://www.slimcode.com/cs/blogs/martin/archive/2009/07/25/a-week-with-a-tablet-pc.aspx</link><pubDate>Sat, 25 Jul 2009 13:17:32 GMT</pubDate><guid isPermaLink="false">ccca17bc-cc72-4bae-972f-7bd738c168c1:528</guid><dc:creator>slimcode</dc:creator><slash:comments>0</slash:comments><comments>http://www.slimcode.com/cs/blogs/martin/comments/528.aspx</comments><wfw:commentRss>http://www.slimcode.com/cs/blogs/martin/commentrss.aspx?PostID=528</wfw:commentRss><wfw:comment>http://www.slimcode.com/cs/blogs/martin/rsscomments.aspx?PostID=528</wfw:comment><description>&lt;p&gt;My friend &lt;a href="http://twitter.com/kosmatos" target="_blank"&gt;Odi&lt;/a&gt; and I were “chattwitting” about a possible Apple Netbook or Tablet PC, and we didn’t have the same vision about what that computer would look like. I could not imagine there was a big enough market for a Tablet-only computer for the market-savvy Apple.&lt;/p&gt;  &lt;p&gt;Because I wanted to explore development of multi-touch applications, I didn’t hesitate buying myself a Tablet PC. It’s a convertible laptop, as I wanted this computer to replace my current laptop. Anyway, nobody could use a Tablet like a laptop, right?&lt;/p&gt;  &lt;p&gt;Well, I decided to try it, for a week. I’m sure that’s enough to get the idea. That week already started, with the installation of Windows Live Writer, and creation of this post, fully written with the on-screen keyboard. I can already say that typing with the on-screen keyboard is far from optimal, not much better than those phone keyboards. The #1 problem is when typing the same letter twice. If you double-tap too fast, only one letter is typed. Also, because the keyboard window can (and must) be moved, your fingers don’t get the hang of positions.&lt;/p&gt;  &lt;p&gt;Another thing I miss is quick access to slimKEYS and its slimLAUNCH extension. It would make more sense to have an icon in the taskbar to open slimLAUNCH. It still works with the on-screen keyboard but takes more time.&lt;/p&gt;  &lt;p&gt;Right clicks can also become a problem. Normally, you can tap-and-hold and wait for imitating it, but it does not always work, or is imprecise. Take Windows Live Writer for example: correcting typos with those red underlines is difficult since it often thinks you’re tapping a line below.&lt;/p&gt;  &lt;p&gt;Finally, every time you need to enter text in a textbox and the keyboard isn’t visible, three taps are necessary, a little excessive, but I didn’t check the options yet.&lt;/p&gt;  &lt;p&gt;During this week, I’ll be trying the following tasks (and more):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Read and post on Twitter. &lt;/li&gt;    &lt;li&gt;Read and write emails with Gmail. &lt;/li&gt;    &lt;li&gt;Surf the web. &lt;/li&gt;    &lt;li&gt;Listen to music with Windows Media Player. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I won’t stop myself from using the stylus, but instead compare touch and stylus head to head.&lt;/p&gt;  &lt;p&gt;See ya in a week, or on &lt;a href="http://twitter.com/slimcode" target="_blank"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://www.slimcode.com/cs/aggbug.aspx?PostID=528" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=9VJ7mFl6j60:7T_FWLCcOe8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=9VJ7mFl6j60:7T_FWLCcOe8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=9VJ7mFl6j60:7T_FWLCcOe8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=9VJ7mFl6j60:7T_FWLCcOe8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=9VJ7mFl6j60:7T_FWLCcOe8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=9VJ7mFl6j60:7T_FWLCcOe8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/English/default.aspx">English</category><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/Non-technical/default.aspx">Non-technical</category></item><item><title>The slimLAUNCH.Passwords extension if now open source!</title><link>http://www.slimcode.com/cs/blogs/martin/archive/2009/07/24/the-slimlaunch-passwords-extension-if-now-open-source.aspx</link><pubDate>Fri, 24 Jul 2009 18:48:43 GMT</pubDate><guid isPermaLink="false">ccca17bc-cc72-4bae-972f-7bd738c168c1:525</guid><dc:creator>slimcode</dc:creator><slash:comments>0</slash:comments><comments>http://www.slimcode.com/cs/blogs/martin/comments/525.aspx</comments><wfw:commentRss>http://www.slimcode.com/cs/blogs/martin/commentrss.aspx?PostID=525</wfw:commentRss><wfw:comment>http://www.slimcode.com/cs/blogs/martin/rsscomments.aspx?PostID=525</wfw:comment><description>&lt;p&gt;I &lt;a href="http://www.slimcode.com/cs/blogs/martin/archive/2007/01/25/slimkeys-1-0-is-out-the-door.aspx"&gt;promised it&lt;/a&gt; a very long time ago. It &lt;a href="http://www.slimcode.com/cs/blogs/martin/archive/2009/05/06/slimkeys-is-now-free-why.aspx"&gt;was asked&lt;/a&gt; recently. That gave me the kick I needed to finally open the doors to the &lt;a href="http://www.slimcode.com/slimKEYS/slimLAUNCH.aspx"&gt;slimLAUNCH.Passwords&lt;/a&gt; extension, so everybody can check the sensitive code it’s made of, in case I’ve goofed somewhere.&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://slimlaunchpasswords.codeplex.com/SourceControl/ListDownloadableCommits.aspx" target="_blank"&gt;sources for the slimLAUNCH.Passwords extension&lt;/a&gt; are now available on &lt;a href="http://slimlaunchpasswords.codeplex.com/" target="_blank"&gt;CodePlex&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;For the moment, it’s more of a “for consultation” open source project. I’ll gladly look at your suggestions for features, but the main reason for opening the sources is because of all the encryption code it contains, and the confidence you need to have into this product before handing it all those precious passwords.&lt;/p&gt;  &lt;p&gt;We'll see how it goes. I’ll open the sources to the &lt;a href="http://www.slimcode.com/slimPASSWORDS/"&gt;slimPASSWORDS&lt;/a&gt; Windows Mobile application once I’m used to CodePlex.&lt;/p&gt;&lt;img src="http://www.slimcode.com/cs/aggbug.aspx?PostID=525" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=Aaz9EZnNuVY:a0TKqvqNOzQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=Aaz9EZnNuVY:a0TKqvqNOzQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=Aaz9EZnNuVY:a0TKqvqNOzQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=Aaz9EZnNuVY:a0TKqvqNOzQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=Aaz9EZnNuVY:a0TKqvqNOzQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=Aaz9EZnNuVY:a0TKqvqNOzQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/English/default.aspx">English</category><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/Technical/default.aspx">Technical</category></item><item><title>How does slimKEYS auto-update itself?</title><link>http://www.slimcode.com/cs/blogs/martin/archive/2009/07/07/how-does-slimkeys-auto-update-itself.aspx</link><pubDate>Tue, 07 Jul 2009 04:59:12 GMT</pubDate><guid isPermaLink="false">ccca17bc-cc72-4bae-972f-7bd738c168c1:518</guid><dc:creator>slimcode</dc:creator><slash:comments>2</slash:comments><comments>http://www.slimcode.com/cs/blogs/martin/comments/518.aspx</comments><wfw:commentRss>http://www.slimcode.com/cs/blogs/martin/commentrss.aspx?PostID=518</wfw:commentRss><wfw:comment>http://www.slimcode.com/cs/blogs/martin/rsscomments.aspx?PostID=518</wfw:comment><description>&lt;p&gt;Brant, a fellow developer and slimKEYS user was asking me how slimKEYS was auto-updating itself. I thought this would make a good blog post, so here is my answer, Brant!&lt;/p&gt;  &lt;h4&gt;The installer&lt;/h4&gt;  &lt;p&gt;Because I’m exposing a plug-in interface (and I’m too lazy trying to figure out how click-once would fit in this scenario), I’m not using click-once, but instead relying only on the installer being smart enough to uninstall any old version and install the new one. With modern installer makers, this is pretty straightforward. Simply make sure to generate a new GUID every time you change the version number. I’m using &lt;a href="http://www.advancedinstaller.com/"&gt;Advanced Installer&lt;/a&gt;, and it automatically suggests me this when I change the version.&lt;/p&gt;  &lt;p&gt;The second gotcha is correctly closing any existing slimKEYS process before the installation proceeds. Because slimKEYS does not have a real visible main window, relying on a simple WM_QUIT wasn’t always working for me. Honestly, I should have kept trying this method, but instead decided to go with a custom closing mechanism. When slimKEYS starts, it calls the &lt;a href="http://msdn.microsoft.com/en-us/library/ms644947(VS.85).aspx"&gt;RegisterWindowMessage&lt;/a&gt; like this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;m_stopMessage = Win32.User32.RegisterWindowMessage( &amp;quot;StopSlimKeys&amp;quot; );&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In the main form’s WndProc, I have this very simple and explicit code:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;else if( m.Msg == (int) m_stopMessage )        &lt;br /&gt;{         &lt;br /&gt;&amp;#160; Application.Exit();         &lt;br /&gt;} &lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;You can think of this as a placeholder in case one day I want to perform some special task when closing because of uninstallation. For the installer part, I created a very simple DLL which is broadcasting the same message to all processes, like this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;extern &amp;quot;C&amp;quot; STOPSLIMKEYS_API void StopSlimKeys( void )        &lt;br /&gt;{         &lt;br /&gt;&amp;#160; UINT uMessage = RegisterWindowMessage( L&amp;quot;StopSlimKeys&amp;quot; ); &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160; SendMessage( HWND_BROADCAST, uMessage, 0, 0 );        &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I’m deliberately using &lt;a href="http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspx"&gt;SendMessage&lt;/a&gt; with the special HWND_BROADCAST handle, since I had less success using &lt;a href="http://msdn.microsoft.com/en-us/library/ms644932(VS.85).aspx"&gt;BroadcastSystemMessage&lt;/a&gt;{Ex} on both Windows XP and Vista. Go figure!&lt;/p&gt;  &lt;p&gt;Another OS-related problem I had to fight a lot with during the past years is when to call this custom DLL in the installer phases. Broadcasting this message seems to require my custom DLL to be running elevated. The earliest step is under InstallSequence/FindRelatedProducts. Unfortunately, under Vista, a new “Close running process” dialog appears before that step. Bummer. Turns out you can run a custom action under the Install&lt;u&gt;UI&lt;/u&gt;Sequence/FindRelatedProducts. This occurs after elevation, but before that special Vista prompt. But not so fast! Under XP, you still need to call your custom action under InstallSequence. That’s why my installer is calling my custom action twice!&lt;/p&gt;  &lt;p&gt;Having packaged my installer into an EXE requiring elevation in the first place would have saved me all this trouble, but I initially went for an MSI, and spread an URL with that extension to many sites. I had to live and die with an MSI.&lt;/p&gt;  &lt;h4&gt;The updater&lt;/h4&gt;  &lt;p&gt;Now that my installer behaves correctly when updating a running version of slimKEYS, all I need to do is download the latest package if a newer version is available. You’re probably already thinking about some XML file you could check via HTTP, with version information and small descriptions. If you’re using Advanced Installer, stop trying to reinvent the wheel, that’s already supported.&lt;/p&gt;  &lt;p&gt;When creating your package, you can enable “Advanced Updater”. This will generate and embed into the MSI two sibbling EXE and INI files. If you check your slimKEYS install folder, you can see files slimCODE.slimKEYS.AutoUpdate.exe and slimCODE.slimKEYS.AutoUpdate.ini. Take a peek at the INI file, you’ll see a line like this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;URL=&lt;a href="http://www.slimcode.com/slimkeys/downloads/updates.ini"&gt;http://www.slimcode.com/slimkeys/downloads/updates.ini&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;That’s the file I’m changing every time a new MSI is available. You can easily manage that INI file with Advanced Installer, by creating a new “Updates Configuration” project.&lt;/p&gt;  &lt;h4&gt;The glue between&lt;/h4&gt;  &lt;p&gt;So my MSI is installing a nice slimCODE.slimKEYS.AutoUpdate.exe file with my other executable. It will serve very little if nobody runs that program! And nobody calls it automatically either. &lt;u&gt;You&lt;/u&gt; have to execute that file, or tell the MSI to add a Windows scheduled task. I’m not a fan of the later option. Turns out slimKEYS does look for and execute that file every time you start slimKEYS. Because the INI says to check once a day, running that file many times a day won’t cause multiple checks.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;private void CheckForUpdates()       &lt;br /&gt;{        &lt;br /&gt;&amp;#160; try        &lt;br /&gt;&amp;#160; {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; string updaterFilename = Path.Combine(         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Path.GetDirectoryName( Application.ExecutablePath ),         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;slimCODE.slimKEYS.AutoUpdate.exe&amp;quot; ); &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; if( File.Exists( updaterFilename ) )       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; System.Diagnostics.Process.Start( updaterFilename, &amp;quot;/silent&amp;quot; );        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;&amp;#160; }        &lt;br /&gt;&amp;#160; catch( Exception except )        &lt;br /&gt;&amp;#160; {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; System.Diagnostics.Trace.WriteLine( &amp;quot;[EX] MainMessageForm.CheckForUpdates:&amp;quot; );        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; System.Diagnostics.Trace.WriteLine( except.Message );        &lt;br /&gt;&amp;#160; }        &lt;br /&gt;} &lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I hope this sheds some light on how slimKEYS updates itself. Oh, and &lt;a href="http://www.slimcode.com/cs/blogs/martin/archive/2007/09/06/implementing-something-you-don-t-call.aspx"&gt;remember to keep calling that updater file&lt;/a&gt;!&lt;/p&gt;&lt;img src="http://www.slimcode.com/cs/aggbug.aspx?PostID=518" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=Qv8lHNGwvLg:vwOwNHBWiQM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=Qv8lHNGwvLg:vwOwNHBWiQM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=Qv8lHNGwvLg:vwOwNHBWiQM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=Qv8lHNGwvLg:vwOwNHBWiQM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=Qv8lHNGwvLg:vwOwNHBWiQM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=Qv8lHNGwvLg:vwOwNHBWiQM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/English/default.aspx">English</category><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/Technical/default.aspx">Technical</category></item><item><title>Referencing a debug assembly in debug builds, and a release assembly in release builds</title><link>http://www.slimcode.com/cs/blogs/martin/archive/2009/06/12/referencing-a-debug-assembly-in-debug-builds-and-a-release-assembly-in-release-builds.aspx</link><pubDate>Fri, 12 Jun 2009 05:29:41 GMT</pubDate><guid isPermaLink="false">ccca17bc-cc72-4bae-972f-7bd738c168c1:509</guid><dc:creator>slimcode</dc:creator><slash:comments>0</slash:comments><comments>http://www.slimcode.com/cs/blogs/martin/comments/509.aspx</comments><wfw:commentRss>http://www.slimcode.com/cs/blogs/martin/commentrss.aspx?PostID=509</wfw:commentRss><wfw:comment>http://www.slimcode.com/cs/blogs/martin/rsscomments.aspx?PostID=509</wfw:comment><description>&lt;p&gt;I have a few VS.NET 2008 projects that share usage of libraries I made for Windows Mobile. I used to include the libraries’ projects directly into each solution, but this is leading me to rebuilding those libraries each time, even if the sources do not change often. It also could cause two applications to look like they’re using the same build of those libraries, while they’re not actually the same bits.&lt;/p&gt;  &lt;p&gt;So I decided to move those libraries outside my solutions, and have a separate build for each. Now, I still wanted to reference the debug builds when building the debug versions of my applications, and the release builds when building in release. Turns out you can hack into your project files to accomplish exactly that.&lt;/p&gt;  &lt;p&gt;Open your .csproj files with a text editor and locate your references. They should look like this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;Reference Include=&amp;quot;slimCODE.slimCONTROLS, Version=1.0.9312.0, Culture=neutral, processorArchitecture=MSIL&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;SpecificVersion&amp;gt;False&amp;lt;/SpecificVersion&amp;gt;        &lt;br /&gt;&amp;#160; &amp;lt;HintPath&amp;gt;..\..\Binaries\Release\slimCODE.slimCONTROLS.dll&amp;lt;/HintPath&amp;gt;        &lt;br /&gt;&amp;lt;/Reference&amp;gt; &lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;There are two ways to make the above reference change target based on the active configuration.&lt;/p&gt;  &lt;h4&gt;Add a condition&lt;/h4&gt;  &lt;p&gt;You can add a “Condition” attribute to the &amp;lt;Reference&amp;gt; tag that will make that reference toggle based on that condition. It can be anything. In our case, it would look like this (important stuff in &lt;font color="#ff8080"&gt;&lt;strong&gt;red&lt;/strong&gt;&lt;/font&gt;):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;Reference Include=&amp;quot;slimCODE.slimCONTROLS, Version=1.0.9312.0, Culture=neutral, processorArchitecture=MSIL&amp;quot; &lt;strong&gt;&lt;font color="#ff8080"&gt;Condition=&amp;quot;'$(Configuration)' == 'Release'&amp;quot;&lt;/font&gt;&lt;/strong&gt;&amp;gt;        &lt;br /&gt;&amp;#160; &amp;lt;SpecificVersion&amp;gt;False&amp;lt;/SpecificVersion&amp;gt;        &lt;br /&gt;&amp;#160; &amp;lt;HintPath&amp;gt;..\..\Binaries\&lt;strong&gt;&lt;font color="#ff8080"&gt;Release&lt;/font&gt;&lt;/strong&gt;\slimCODE.slimCONTROLS.dll&amp;lt;/HintPath&amp;gt;        &lt;br /&gt;&amp;lt;/Reference&amp;gt;        &lt;br /&gt;&amp;lt;Reference Include=&amp;quot;slimCODE.slimCONTROLS, Version=1.0.9312.0, Culture=neutral, processorArchitecture=MSIL&amp;quot; &lt;strong&gt;&lt;font color="#ff8080"&gt;Condition=&amp;quot;'$(Configuration)' == 'Debug'&amp;quot;&lt;/font&gt;&lt;/strong&gt;&amp;gt;        &lt;br /&gt;&amp;#160; &amp;lt;SpecificVersion&amp;gt;False&amp;lt;/SpecificVersion&amp;gt;        &lt;br /&gt;&amp;#160; &amp;lt;HintPath&amp;gt;..\..\Binaries\&lt;strong&gt;&lt;font color="#ff8080"&gt;Debug&lt;/font&gt;&lt;/strong&gt;\slimCODE.slimCONTROLS.dll&amp;lt;/HintPath&amp;gt;        &lt;br /&gt;&amp;lt;/Reference&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Thus, for each reference you want conditional, you must add a second entry for each subsequent configuration name. Don’t forget to change the &amp;lt;HintPath&amp;gt; accordingly.&lt;/p&gt;  &lt;h4&gt;Cheat the hint&lt;/h4&gt;  &lt;p&gt;Turns out the &amp;lt;HintPath&amp;gt; can contain variables, like $(Configuration). That’s an easier way to redirect to the proper build, given your binaries are located in folders using the configuration names. That was my case.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;Reference Include=&amp;quot;slimCODE.slimFORMS, Version=1.0.9312.0, Culture=neutral, processorArchitecture=MSIL&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;SpecificVersion&amp;gt;False&amp;lt;/SpecificVersion&amp;gt;        &lt;br /&gt;&amp;#160; &amp;lt;HintPath&amp;gt;..\..\Binaries\&lt;strong&gt;&lt;font color="#ff8080"&gt;$(Configuration)&lt;/font&gt;&lt;/strong&gt;\slimCODE.slimFORMS.dll&amp;lt;/HintPath&amp;gt;        &lt;br /&gt;&amp;lt;/Reference&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Though the first way looks more Kosher, the second way seems to behave correctly too, is simpler, and adapts automatically for each new configuration, given you use the correct folder names. Changing the active configuration does make the reference’s “Path” value in the “Properties” window change accordingly.&lt;/p&gt;  &lt;p&gt;I’ll try both and give you more feedback if one fails.&lt;/p&gt;&lt;img src="http://www.slimcode.com/cs/aggbug.aspx?PostID=509" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=V20GoPNi2M8:NnucDfnyCdY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=V20GoPNi2M8:NnucDfnyCdY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=V20GoPNi2M8:NnucDfnyCdY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=V20GoPNi2M8:NnucDfnyCdY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=V20GoPNi2M8:NnucDfnyCdY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=V20GoPNi2M8:NnucDfnyCdY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/English/default.aspx">English</category><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/Technical/default.aspx">Technical</category></item><item><title>slimKEYS is now free - Why?</title><link>http://www.slimcode.com/cs/blogs/martin/archive/2009/05/06/slimkeys-is-now-free-why.aspx</link><pubDate>Wed, 06 May 2009 13:49:52 GMT</pubDate><guid isPermaLink="false">ccca17bc-cc72-4bae-972f-7bd738c168c1:490</guid><dc:creator>slimcode</dc:creator><slash:comments>4</slash:comments><comments>http://www.slimcode.com/cs/blogs/martin/comments/490.aspx</comments><wfw:commentRss>http://www.slimcode.com/cs/blogs/martin/commentrss.aspx?PostID=490</wfw:commentRss><wfw:comment>http://www.slimcode.com/cs/blogs/martin/rsscomments.aspx?PostID=490</wfw:comment><description>&lt;p&gt;In case you &lt;a href="http://www.slimcode.com/cs/blogs/martin/archive/2009/05/06/slimkeys-v1-4-9255-is-released.aspx"&gt;haven't heard yet&lt;/a&gt;, &lt;a href="http://www.slimcode.com/slimKEYS"&gt;slimKEYS&lt;/a&gt; is now free to use. Totally free. No catch, No ads, no malware, nothing.&lt;/p&gt;  &lt;h4&gt;&lt;em&gt;Why would someone earning money from a product decide to make it suddenly free?&lt;/em&gt;&lt;/h4&gt;  &lt;p&gt;Because I never made any money with slimKEYS.&lt;/p&gt;  &lt;p&gt;Now, you're probably thinking &amp;quot;&lt;em&gt;slimCODE decided to make slimKEYS free so they can stop putting energy on it&lt;/em&gt;&amp;quot;, right?&lt;/p&gt;  &lt;h4&gt;&lt;em&gt;Is this the end of slimKEYS?&lt;/em&gt;&lt;/h4&gt;  &lt;p&gt;&lt;strong&gt;No way!&lt;/strong&gt; For a simple reason: I'm the number one customer myself. I couldn't work on a computer without slimKEYS.&lt;/p&gt;  &lt;h4&gt;&lt;em&gt;Then, why not leave it at 15$?&lt;/em&gt;&lt;/h4&gt;  &lt;p&gt;Because I still dream of seeing slimKEYS becoming a successful product, and I realize my definition of &amp;quot;successful&amp;quot; isn't based on the amount of money I can bring in with slimKEYS, but more with the number of users I can gather. The equation is obvious:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;I'll never make a fortune with slimKEYS, never. &lt;/li&gt;    &lt;li&gt;I want to continue to work on slimKEYS. &lt;/li&gt;    &lt;li&gt;I need motivation in order to work on a product. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So my last attempt in keeping motivation is to make it used by more and more people. And for that, I'll need help from the current very loyal users. Spread the word! Blog it, tweet it! slimKEYS is free, and there's no catch.&lt;/p&gt;  &lt;p&gt;And if people still think it deserves money, it's always possible to &lt;a href="http://www.slimcode.com/shop/slimkeys.aspx"&gt;make donations&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;And besides, if I can't make money with it, why not drive traffic at least?&lt;/p&gt;  &lt;h4&gt;&lt;em&gt;But I paid for slimKEYS! That's not fair!&lt;/em&gt;&lt;/h4&gt;  &lt;p&gt;I agree, it's not fair for those who paid. If you really feel betrayed, you can ask a refund. If you really think that back then, slimKEYS was worth something, but now it doesn't, even some small donation, I'll gladly refund.&lt;/p&gt;  &lt;p&gt;Just &lt;a href="mailto:support@slimcode.com?subject=Refund"&gt;send me an email&lt;/a&gt; with your registration information.&lt;/p&gt;  &lt;h4&gt;&lt;em&gt;Why not make it open source?&lt;/em&gt;&lt;/h4&gt;  &lt;p&gt;The answer should now be obvious: I still want full control and ownership of the hard work I've put into slimKEYS. Else, motivation would drain away a little more. Starting an open source project is a logical pattern. Turning a 4+ years old project into open source is resignation.&lt;/p&gt;  &lt;p&gt;Maybe one day. Once the user base is strong enough? Maybe.&lt;/p&gt;  &lt;h4&gt;&lt;em&gt;How do you pay your bills, then?&lt;/em&gt;&lt;/h4&gt;  &lt;p&gt;I hope this does not surprise you, but slimKEYS is not my only professional activity. I do contracts for custom development, and I also work on other product ideas (too many, must focus!). I'm leaning toward mobile development. For example, I have slimPASSWORD for Windows Mobile coming soon, for opening your slimLAUNCH.Passwords file on your phone. I also have two other Windows Mobile apps in the oven.&lt;/p&gt;  &lt;p&gt;As for DutchTab for Windows Mobile, still at 5$, it will also become free in a few weeks, with a small update. I don't think my &lt;strong&gt;two&lt;/strong&gt; customers will mind.&lt;/p&gt;&lt;img src="http://www.slimcode.com/cs/aggbug.aspx?PostID=490" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=Qt2LzXuVpgs:LWtg4SwkC7E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=Qt2LzXuVpgs:LWtg4SwkC7E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=Qt2LzXuVpgs:LWtg4SwkC7E:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=Qt2LzXuVpgs:LWtg4SwkC7E:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=Qt2LzXuVpgs:LWtg4SwkC7E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=Qt2LzXuVpgs:LWtg4SwkC7E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/English/default.aspx">English</category><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/Technical/default.aspx">Technical</category></item><item><title>slimKEYS v1.4.9255 is released!</title><link>http://www.slimcode.com/cs/blogs/martin/archive/2009/05/06/slimkeys-v1-4-9255-is-released.aspx</link><pubDate>Wed, 06 May 2009 13:46:56 GMT</pubDate><guid isPermaLink="false">ccca17bc-cc72-4bae-972f-7bd738c168c1:489</guid><dc:creator>slimcode</dc:creator><slash:comments>1</slash:comments><comments>http://www.slimcode.com/cs/blogs/martin/comments/489.aspx</comments><wfw:commentRss>http://www.slimcode.com/cs/blogs/martin/commentrss.aspx?PostID=489</wfw:commentRss><wfw:comment>http://www.slimcode.com/cs/blogs/martin/rsscomments.aspx?PostID=489</wfw:comment><description>&lt;p&gt;A &lt;a href="http://www.slimcode.com/slimkeys/History.aspx"&gt;new version&lt;/a&gt; of slimKEYS was &lt;a href="http://www.slimcode.com/slimKEYS/Downloads/slimKEYS.msi"&gt;released yesterday&lt;/a&gt;. The main two new features involve slimSIZE and slimVOLUME, in somewhat related features.&lt;/p&gt;  &lt;p&gt;New with version 1.4.9255, you can tell a slimSIZE hotkey to grow or shrink a window, instead of only forcing a specific size.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;border-top:0px;border-right:0px;" border="0" alt="My Ctrl-Win-Add hotkey" src="http://www.slimcode.com/cs/blogs/files/slimKEYSv1.4.9255isreleased_8936/image.png" width="325" height="327" /&gt; &lt;/p&gt;  &lt;p&gt;In a same thinking, but opposite result, you can now create slimVOLUME hotkeys that set the volume to a specific level, instead of just increasing or decreasing the level. For example, I created myself a Win-VolumeUp hotkey that fixes the volume level to 50%, and another Win-VolumeDown that fixes it to 5%.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;border-top:0px;border-right:0px;" border="0" alt="My Win-VolumeUp hotkey" src="http://www.slimcode.com/cs/blogs/files/slimKEYSv1.4.9255isreleased_8936/image_3.png" width="490" height="532" /&gt; &lt;/p&gt;  &lt;p&gt;Other than those two features, a small change to how the slimLAUNCH window behaves when you type alternate shortcuts. For example, when a FileSystem item is selected, you could press Ctrl-F to open its parent folder. According to my own SDK documentation, the implementation should have made the slimLAUNCH window close, but those were only words. Now it does close the window.&lt;/p&gt;  &lt;p&gt;Oh, and another small detail: &lt;strong&gt;slimKEYS is now free!!!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;(more on this in a following post)&lt;/p&gt;&lt;img src="http://www.slimcode.com/cs/aggbug.aspx?PostID=489" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=XZ01ghQu63g:Qsu9GEQBZco:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=XZ01ghQu63g:Qsu9GEQBZco:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=XZ01ghQu63g:Qsu9GEQBZco:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=XZ01ghQu63g:Qsu9GEQBZco:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=XZ01ghQu63g:Qsu9GEQBZco:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=XZ01ghQu63g:Qsu9GEQBZco:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/English/default.aspx">English</category><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/Technical/default.aspx">Technical</category></item><item><title>I'm an HTC Touch Pro fan... but why a Pro2?</title><link>http://www.slimcode.com/cs/blogs/martin/archive/2009/02/16/i-m-an-htc-touch-pro-fan-but-why-a-pro2.aspx</link><pubDate>Mon, 16 Feb 2009 14:28:54 GMT</pubDate><guid isPermaLink="false">ccca17bc-cc72-4bae-972f-7bd738c168c1:475</guid><dc:creator>slimcode</dc:creator><slash:comments>0</slash:comments><comments>http://www.slimcode.com/cs/blogs/martin/comments/475.aspx</comments><wfw:commentRss>http://www.slimcode.com/cs/blogs/martin/commentrss.aspx?PostID=475</wfw:commentRss><wfw:comment>http://www.slimcode.com/cs/blogs/martin/rsscomments.aspx?PostID=475</wfw:comment><description>&lt;p&gt;I'm an &lt;a href="http://www.htc.com/ca/product.aspx?id=52564" target="_blank"&gt;HTC P4000&lt;/a&gt; owner, and I really like having a phone with a sliding keyboard. I had my eyes on the new &lt;a href="http://www.htc.com/ca/product.aspx?id=77510" target="_blank"&gt;HTC Touch Pro&lt;/a&gt; for a couple weeks now, but I just noticed (via &lt;a href="http://twitter.com/wmdev" target="_blank"&gt;@wmdev&lt;/a&gt;) that HTC released a second generation Touch Pro, called &lt;a href="http://www.htc.com/www/product/touchpro2/overview.html" target="_blank"&gt;Touch Pro2&lt;/a&gt; (what did you expect for a name?). I have nothing against multiple generations, they are a sign a company is evolving and improving. The Touch Pro was available since only a couple months. Why release a Pro2 so early? Is the first gen buggy? Is there something we should know about it?&lt;/p&gt;  &lt;p&gt;Looking at the sales pitch for the Pro2, it looks like the only improvement is the conference call features. It's about the only thing they brag about. I decided to compare both specs to get a better glimpse at the differences.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The Pro is smaller in width and height (102 x 51 mm) than the Pro2 (116 x 59 mm), but is actually thicker (18 mm versus 17.25 mm), which is not apparent when looking at photos.&lt;/li&gt;    &lt;li&gt;The display screen is way bigger on the Pro2, at 3.6&amp;quot; instead of 2.8&amp;quot;. This enables a better resolution of 480x800 (WVGA) on the Pro2, versus the 480x640 (VGA) resolution for the Pro.&lt;/li&gt;    &lt;li&gt;The Pro2 is slightly heavier at 175 grams, only 10 more than the Pro at 165 grams. But with a bigger body and screen, that's expected.&lt;/li&gt;    &lt;li&gt;The Pro2's sliding screen can be tilt for better viewing.&lt;/li&gt;    &lt;li&gt;The battery in the Pro2 has a 1500 mAh capacity instead of 1340 mAh for the Pro, but with a WVGA resolution to drive, it shortens the Pro2's use time on WCDMA networks from 378 minutes to 270 minutes (that's a lot). Strangely, on GSM networks, it's the same for both devices (I don't get it).&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The rest is about the same. 512 MB ROM and 288 MB RAM, almost the same Qualcomm processor at 528 MHz (7200A for the Pro2, 7201A for the Pro).&lt;/p&gt;  &lt;p&gt;HTC should really push more the fact it has a bigger screen and better resolution. Those are far more important features for me than conference calls. I was preparing myself to buy a Touch Pro so that I could play with G-Sensor development. I think I'll wait for the Pro2!&lt;/p&gt;&lt;img src="http://www.slimcode.com/cs/aggbug.aspx?PostID=475" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=7ZLS7SjsMIU:JBfUt87wdw0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=7ZLS7SjsMIU:JBfUt87wdw0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=7ZLS7SjsMIU:JBfUt87wdw0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=7ZLS7SjsMIU:JBfUt87wdw0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=7ZLS7SjsMIU:JBfUt87wdw0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=7ZLS7SjsMIU:JBfUt87wdw0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/English/default.aspx">English</category><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/Non-technical/default.aspx">Non-technical</category></item><item><title>Fixing error code 29506 when trying to install SQL Management Studio Express</title><link>http://www.slimcode.com/cs/blogs/martin/archive/2009/01/30/fixing-error-code-29506-when-trying-to-install-sql-management-studio-express.aspx</link><pubDate>Fri, 30 Jan 2009 18:15:00 GMT</pubDate><guid isPermaLink="false">ccca17bc-cc72-4bae-972f-7bd738c168c1:470</guid><dc:creator>slimcode</dc:creator><slash:comments>15</slash:comments><comments>http://www.slimcode.com/cs/blogs/martin/comments/470.aspx</comments><wfw:commentRss>http://www.slimcode.com/cs/blogs/martin/commentrss.aspx?PostID=470</wfw:commentRss><wfw:comment>http://www.slimcode.com/cs/blogs/martin/rsscomments.aspx?PostID=470</wfw:comment><description>&lt;P&gt;&lt;A href="http://search.yahoo.com/search?p=error+29506+sql+management+studio" target=_blank&gt;Like many others&lt;/A&gt;, I was getting an error code 29506 when trying to install SQL Server Management Studio Express 2005 on my Vista x64 machine. Searching for a fix kept sending me to posts talking about running the MSI as administrator from the beginning, but this didn't solve it for me, neither did it solve it for many other commenters out there.&lt;/P&gt;
&lt;P&gt;The good news is, I did find a solution! And I bet that if you end up reading this post because of a similar error, we have something in common: we downloaded the MSI using Internet Explorer 7 (or 8)! The file gets stamped as "coming from the net", thus has restricted privileges, even when running it as administrator.&lt;/P&gt;
&lt;P&gt;Simply right-click the file and select "Properties". At the bottom of the "General" tab, you should see a security message with an "Unblock" button:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;BORDER-TOP:0px;BORDER-RIGHT:0px;" border=0 alt=image src="http://www.slimcode.com/cs/blogs/files/Fixingerrorcode29506whentryingtoinstallS_BA62/image.png" width=419 height=513&gt; &lt;/P&gt;
&lt;P&gt;Pressing that "Unblock" button will remove metadata associated with that file. Running the MSI again should now work fine, even without running it from an administrator prompt, but I did ran it from an admin prompt just to make sure.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Update&lt;/STRONG&gt;: As many commenters mentioned, you still need to execute the MSI from an admin command prompt.&lt;/P&gt;
&lt;P&gt;Hope this helps!&lt;/P&gt;&lt;img src="http://www.slimcode.com/cs/aggbug.aspx?PostID=470" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=EQIpEhIAHY0:4CWY3Y-0SoM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=EQIpEhIAHY0:4CWY3Y-0SoM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=EQIpEhIAHY0:4CWY3Y-0SoM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=EQIpEhIAHY0:4CWY3Y-0SoM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=EQIpEhIAHY0:4CWY3Y-0SoM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=EQIpEhIAHY0:4CWY3Y-0SoM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/English/default.aspx">English</category><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/Technical/default.aspx">Technical</category></item><item><title>Babies Know</title><link>http://www.slimcode.com/cs/blogs/martin/archive/2009/01/28/babies-know.aspx</link><pubDate>Wed, 28 Jan 2009 13:30:28 GMT</pubDate><guid isPermaLink="false">ccca17bc-cc72-4bae-972f-7bd738c168c1:468</guid><dc:creator>slimcode</dc:creator><slash:comments>1</slash:comments><comments>http://www.slimcode.com/cs/blogs/martin/comments/468.aspx</comments><wfw:commentRss>http://www.slimcode.com/cs/blogs/martin/commentrss.aspx?PostID=468</wfw:commentRss><wfw:comment>http://www.slimcode.com/cs/blogs/martin/rsscomments.aspx?PostID=468</wfw:comment><description>&lt;p&gt;I got this by email yesterday. It was too good to leave as an email... And I'm against an email chains, so better start a Twitter chain! ;)&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="354" alt="image0011" src="http://www.slimcode.com/cs/blogs/files/BabiesKnow_775E/image0011.jpg" width="494" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="330" alt="image0022" src="http://www.slimcode.com/cs/blogs/files/BabiesKnow_775E/image0022.jpg" width="494" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="363" alt="image0033" src="http://www.slimcode.com/cs/blogs/files/BabiesKnow_775E/image0033.jpg" width="494" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="387" alt="image0044" src="http://www.slimcode.com/cs/blogs/files/BabiesKnow_775E/image0044.jpg" width="494" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="321" alt="image0055" src="http://www.slimcode.com/cs/blogs/files/BabiesKnow_775E/image0055.jpg" width="494" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="335" alt="image0066" src="http://www.slimcode.com/cs/blogs/files/BabiesKnow_775E/image0066.jpg" width="494" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="363" alt="image0077" src="http://www.slimcode.com/cs/blogs/files/BabiesKnow_775E/image0077.jpg" width="277" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="246" alt="image0088" src="http://www.slimcode.com/cs/blogs/files/BabiesKnow_775E/image0088.jpg" width="339" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="326" alt="image0099" src="http://www.slimcode.com/cs/blogs/files/BabiesKnow_775E/image0099.jpg" width="414" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="276" alt="image01010" src="http://www.slimcode.com/cs/blogs/files/BabiesKnow_775E/image01010.jpg" width="334" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="266" alt="image01111" src="http://www.slimcode.com/cs/blogs/files/BabiesKnow_775E/image01111.jpg" width="326" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;And&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="282" alt="image01212" src="http://www.slimcode.com/cs/blogs/files/BabiesKnow_775E/image01212.jpg" width="366" border="0" /&gt;&lt;/p&gt;&lt;img src="http://www.slimcode.com/cs/aggbug.aspx?PostID=468" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=pWfl3__ubjw:UwfrojHPNl0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=pWfl3__ubjw:UwfrojHPNl0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=pWfl3__ubjw:UwfrojHPNl0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=pWfl3__ubjw:UwfrojHPNl0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=pWfl3__ubjw:UwfrojHPNl0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=pWfl3__ubjw:UwfrojHPNl0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/English/default.aspx">English</category><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/Non-technical/default.aspx">Non-technical</category></item><item><title>Another slimKEYS release, v1.3.9063</title><link>http://www.slimcode.com/cs/blogs/martin/archive/2009/01/14/another-slimkeys-release-v1-3-9063.aspx</link><pubDate>Wed, 14 Jan 2009 21:54:27 GMT</pubDate><guid isPermaLink="false">ccca17bc-cc72-4bae-972f-7bd738c168c1:460</guid><dc:creator>slimcode</dc:creator><slash:comments>0</slash:comments><comments>http://www.slimcode.com/cs/blogs/martin/comments/460.aspx</comments><wfw:commentRss>http://www.slimcode.com/cs/blogs/martin/commentrss.aspx?PostID=460</wfw:commentRss><wfw:comment>http://www.slimcode.com/cs/blogs/martin/rsscomments.aspx?PostID=460</wfw:comment><description>&lt;p&gt;There's a &lt;a href="http://www.slimcode.com/slimKEYS/Downloads/slimKEYS.msi"&gt;new slimKEYS release&lt;/a&gt; around town, version 1.3.9063. Why the &amp;quot;3&amp;quot; in &amp;quot;1.3&amp;quot;? Simply because there was a minor change in the plug-in programming interface, and I'm a purist. But I'm not ashamed of increasing the minor version number, since there's also a new plug-in: &lt;a href="http://www.slimcode.com/slimKEYS/slimZOOM.aspx"&gt;slimZOOM&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.slimcode.com/images/slimZOOM.png" /&gt; &lt;/p&gt;  &lt;p&gt;The default hotkey is &lt;strong&gt;Win-A&lt;/strong&gt;. Move the mouse over the area you wish to zoom in, and press the hotkey. A zoom window will appear. You can press &lt;strong&gt;W&lt;/strong&gt; to toggle the window to use a full monitor or your whole display (yes, for single monitor systems, that's the same thing).&lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.slimcode.com/images/slimZOOM-Help.png" /&gt; &lt;/p&gt;  &lt;p&gt;There are many other options, I'll let you play with it to learn more (or &lt;a href="http://www.slimcode.com/slimKEYS/slimZOOM.Demo.aspx"&gt;watch the demos&lt;/a&gt;). As usual, &lt;a href="http://www.slimcode.com/slimKEYS/History.aspx"&gt;many other small things&lt;/a&gt; have been fixed or improved, but one thing worth mentioning is the ability to rename hotkey descriptions to use your own.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="125" alt="Default description" src="http://www.slimcode.com/cs/blogs/files/AnotherslimKEYSreleasev1.3.9063_ED16/image.png" width="478" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="125" alt="Custom description" src="http://www.slimcode.com/cs/blogs/files/AnotherslimKEYSreleasev1.3.9063_ED16/image_3.png" width="478" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="100" alt="image" src="http://www.slimcode.com/cs/blogs/files/AnotherslimKEYSreleasev1.3.9063_ED16/image_4.png" width="578" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Have fun with this new release, and thank you all for the suggestions and bug reports. I'm listening, and I'll continue working on very nice suggestions received &lt;a href="http://www.slimcode.com/cs/forums/default.aspx?GroupID=4"&gt;on the forums&lt;/a&gt; and &lt;a&gt;by email&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://www.slimcode.com/cs/aggbug.aspx?PostID=460" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=HVgyWhBACA4:C4WJBu_mSQM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=HVgyWhBACA4:C4WJBu_mSQM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=HVgyWhBACA4:C4WJBu_mSQM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=HVgyWhBACA4:C4WJBu_mSQM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=HVgyWhBACA4:C4WJBu_mSQM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=HVgyWhBACA4:C4WJBu_mSQM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/English/default.aspx">English</category><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/Technical/default.aspx">Technical</category></item><item><title>Souvenir of a PDC</title><link>http://www.slimcode.com/cs/blogs/martin/archive/2008/11/03/souvenir-of-a-pdc.aspx</link><pubDate>Mon, 03 Nov 2008 15:11:33 GMT</pubDate><guid isPermaLink="false">ccca17bc-cc72-4bae-972f-7bd738c168c1:431</guid><dc:creator>slimcode</dc:creator><slash:comments>1</slash:comments><comments>http://www.slimcode.com/cs/blogs/martin/comments/431.aspx</comments><wfw:commentRss>http://www.slimcode.com/cs/blogs/martin/commentrss.aspx?PostID=431</wfw:commentRss><wfw:comment>http://www.slimcode.com/cs/blogs/martin/rsscomments.aspx?PostID=431</wfw:comment><description>&lt;p&gt;I’m back from &lt;a href="http://microsoftpdc.com/" target="_blank"&gt;PDC 2008&lt;/a&gt;, sitting at my computer, trying to apply in more concrete ways what I’ve learn there, and evaluating how this will affect my projects in the near future. Indeed, &lt;a href="http://azure.com" target="_blank"&gt;Windows Azure&lt;/a&gt; was a great announcement, and seems a great platform, though I haven’t worked with it yet. During the PDC, what seems a great product idea popped up in my mind, and Azure will be the target platform for that idea. But it’s only out off laziness that it won’t be implemented on Amazon or Google platforms. Again, Microsoft is making sure developers are comfortable, have a great - scratch that - an awesome development platform to work with, so they make their technologies de facto in the industry.&lt;/p&gt;  &lt;p&gt;But Azure was expected, written in the sky, the next logical move from Microsoft to address the concurrence of &lt;a href="http://aws.amazon.com/" target="_blank"&gt;Amazon Web Services&lt;/a&gt; and &lt;a href="http://www.google.com/apps/" target="_blank"&gt;Google Apps&lt;/a&gt;. It was even a platform they needed themselves for their web-page app offerings (e.g. &lt;a href="http://channel9.msdn.com/posts/PDCNews/First-Look-Office-14-for-Web/" target="_blank"&gt;Office 14 Web&lt;/a&gt;). I wasn’t going at the PDC to learn more about what was being that &lt;a href="http://mesh.com" target="_blank"&gt;Mesh&lt;/a&gt; thing, but to learn more about the two Windows 7 that they are cooking for us, the desktop and the mobile.&lt;/p&gt;  &lt;p&gt;The first one was a very early glimpse, with cool UI features, but we didn’t learn much of the inners. Ok, we’ll get touch APIs, that’s great. The “libraries” view is a good way to make us forget about one of the three pillars of Longhorn that was dropped after PDC 2003: WinFS. It’s a simple interface with a simple API, which will do the work for a while. But let me give you a good example why it’s still not enough: This morning, my wife needed a picture of Clément to upload to a web site. She doesn’t exactly know where our pictures are located. So opening the “Browse” button on that web site turned out to be quite an adventure for her. Once I told her pictures were in “K:\Photos”, she faced a second problem: She couldn’t browse pictures by tag or date like she’s used to in Windows Photo Gallery or Picasa. She had to open each folder one by one, change the view to see bigger thumbnails, remember paths of interesting pictures while she browsed other folders. Then I told her to open Windows Photo Gallery, find the correct picture, right click it and select “Open File Location”. Ok, great! She ends up in a folder containing 150 pictures, the correct one being selected. All filenames look the same (PICT####.jpg), but she can’t copy that file’s full path, only its folder path. Back to the web app, paste the folder path (which is already a power user action in my book), and search for that filename. Painful.&lt;/p&gt;  &lt;p&gt;This experience really made the cool “libraries” section in Windows 7 become much less cool in my mind. It’s still not enough. The normal computer users need an operating system that does not talk to them in terms of paths, but really in terms of properties. It was time for this shift in 2003, it’s even more pressing now.&lt;/p&gt;  &lt;p&gt;For the moment, Windows 7 is simply an improved Vista, which is not a bad thing. I like Vista, call me crazy if you want, but I live very well with the various UAC and warning prompts. Sure, having less of them will always be welcomed. But it’s still a necessary evil. Ubuntu has them, Mac OS X has them, Vista simply needs to reduce their occurrence. The simple fact that a file downloaded from the net causes two prompts is the single most important aspect the Windows 7 / Explorer / Internet Explorer teams must address. Then a few other Explorer annoyances, and the UAC subject will be almost closed. But Windows 7 wasn’t such a big news at this PDC.&lt;/p&gt;  &lt;p&gt;The other Windows 7 is one very important stone for Microsoft. They have addressed a “corporate developer” need in Windows Azure, but have neglected the &lt;a href="http://www.microsoft.com/windowsmobile/en-us/default.mspx" target="_blank"&gt;Windows Mobile&lt;/a&gt; platform (at least in our eyes, I’m sure that team is working hard). Why? Too “general user”? Wake up! The iPhone is a corporate success too. I saw more iPhones than Blackberrys at this PDC, in the hands of professional developers. And I saw more non-Windows Blackberrys than any Windows Mobile devices combined. Their smaller Windows 7 needs love too, but it’s not at this PDC that it received a hug. The foundations of Windows Mobile are strong. It is a serious operating system with a rich API, which is unfortunately often its biggest flaw. Developers don’t program well for this mobile platform. They use too many resources, apply practices learned from the desktop, do not behave well in this multitasking, application switching context, because they still don’t care about being the active application or not. Hey, it’s not important on Windows, why care about it on Windows Mobile?&lt;/p&gt;  &lt;p&gt;So, what is missing from Windows Mobile? A serious development platform, paradigm, framework. As of today, the Microsoft offering for developing for Windows Mobile can be resumed at two things: Normal Win32, or .NET WinForms applications. In the first case, you’re faced with the desktop way of developing. In the second case, you’re told to work with that obsolete technology that is not good enough for the desktop, and does not apply well to the mobile world anyway. WinForms is a “one form per screen” framework enforcing the notion of a main form. What happens on Windows Mobile when a form opens a child form? You see it twice when you switch between applications. I had to create my own framework based on UserControls to create something more appropriate to the device.&lt;/p&gt;  &lt;p&gt;Then comes what you put on those screens. Windows Mobile gives us the same old controls we have on the desktop, but uglier. The control set on Windows Mobile should be placed in a museum. It is useless when you want to create interfaces that work well with touch devices. Wake up, Microsoft! People can work really well on their iPhones without the need for a pen. I’ve seen people type on their iPhone faster than me on my HTC P4000, even if I have a sliding keyboard. You need to upgrade the user experience on Windows Mobile. And just like you do so good on the desktop, you need to make developers comfortable to develop for it, so their laziness becomes your number one weapon.&lt;/p&gt;  &lt;p&gt;I went to PDC 2008 with the naive intuition I was in for a great surprise about Windows Mobile. I spent 3200$ (PDC + Hotel + Plane) out of my own pockets to be there. What a mistake. The only thing I officially learned was that Silverlight would work on Windows Mobile. But I have no bits to work with yet, and no serious information of how (and if!) it will work as a stand-alone client-based solution. During the various keynotes, we kept seeing the same slide showing the three important areas for Microsoft: The desktop, the web and the phone. But we heard nothing, “nathing”, of that last piece of the equation. Then, on the Ask The Experts evening, when I finally found the Windows Mobile table (which was not where the plan said it was), I could not get any answers, the team clearly bound by a non-disclosure thing. I could only understand, by their smiles and shoulders, that something was coming, but my 2200$ PDC ticket was worth nothing when it was time to learn about it.&lt;/p&gt;  &lt;p&gt;So, this morning, I’m in front of my computer, wondering how I should spend my energies toward the Windows Mobile platform and my future projects, and I have no answer. 3200$ later, I’m at point A. Worse, anybody can watch all the sessions for free, just by visiting &lt;a href="http://channel9.msdn.com/" target="_blank"&gt;Channel 9&lt;/a&gt;. What a slap in the face! That Cocoa thing looks interesting. I heard their documentation is awesome. Maybe that was the price to pay to learn it the hard way?&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:564b0630-33fc-41bc-a086-a1bfc5b11d9e" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/PDC+2008" rel="tag"&gt;PDC 2008&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Azure" rel="tag"&gt;Azure&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Windows+7" rel="tag"&gt;Windows 7&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Windows+Mobile" rel="tag"&gt;Windows Mobile&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.slimcode.com/cs/aggbug.aspx?PostID=431" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=UtCX_jRs1E8:YzqRHgcXKeQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=UtCX_jRs1E8:YzqRHgcXKeQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=UtCX_jRs1E8:YzqRHgcXKeQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=UtCX_jRs1E8:YzqRHgcXKeQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slimcode?a=UtCX_jRs1E8:YzqRHgcXKeQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slimcode?i=UtCX_jRs1E8:YzqRHgcXKeQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/English/default.aspx">English</category><category domain="http://www.slimcode.com/cs/blogs/martin/archive/tags/Technical/default.aspx">Technical</category></item></channel></rss>
