<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Tony Schreiner's WebLog : Random</title><link>http://blogs.msdn.com/tonyschr/archive/tags/Random/default.aspx</link><description>Tags: Random</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>The Inline Returns Option</title><link>http://blogs.msdn.com/tonyschr/archive/2006/01/26/517991.aspx</link><pubDate>Thu, 26 Jan 2006 23:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:517991</guid><dc:creator>tonyschr</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/tonyschr/comments/517991.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tonyschr/commentrss.aspx?PostID=517991</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;Using my last example, &lt;A href="http://sab39.dev.netreach.com/"&gt;Stuart Ballard&lt;/A&gt; pointed out that using inline returns is another way to avoid the uninitialized variable mistake:&lt;/FONT&gt;&lt;/P&gt;&lt;PRE&gt;if (hwndParent != NULL) 
{ 
    if (fFoo) 
    { 
        return DoOperationWithFoo(hwndParent); 
    } 
    else if (fBar) 
    { 
        return DoOperationWithBar(hwndParent); 
    } 
} 

return whatever_the_default_return_code_should_be;&lt;/PRE&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;This is true, although whether to use inline returns vs. the structured programming technique of one entry point and one exit point is a separate consideration. :-)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Inline returns (and even exceptions) are usually fine as long as you are using a language with garbage collection, such as C# or Java, or you religiously adhere to the &lt;A href="http://en.wikipedia.org/wiki/Resource_acquisition_is_initialization"&gt;RAII&lt;/A&gt; technique (using smart pointers and such). However, in many programming environments where you're still &lt;EM&gt;manually&lt;/EM&gt; managing resources: memory, reference counting COM objects, critical sections, registry and file handles, etc.,&amp;nbsp;inline returns can be dangerous. We use RAII quite a bit in our code, but not enough yet to reliably switch to the model of inline returns, so I didn't even think of mentioning that in my original post.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;(There's also something to be said for being able to rewind the instruction pointer and step through code again while debugging, something that's made easy with the technique of one entry point and one exit point.)&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=517991" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tonyschr/archive/tags/Random/default.aspx">Random</category></item><item><title>More Micro-optimizations</title><link>http://blogs.msdn.com/tonyschr/archive/2006/01/25/517727.aspx</link><pubDate>Thu, 26 Jan 2006 07:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:517727</guid><dc:creator>tonyschr</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/tonyschr/comments/517727.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tonyschr/commentrss.aspx?PostID=517727</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;Here's another micro-optimization that I'm not very fond of. I should note that we don't really obsess about these things too much internally - in general we have established coding practices and only occasionally debate a few debatable things, usually on the fringes. But they do make reasonable blog fodder and I'm trying to cover ones that haven't been debated ad nauseam.&lt;/FONT&gt;&lt;/P&gt;&lt;PRE&gt;HRESULT DoSomething(HWND hwndParent, BOOL fFoo, BOOL fBar)
{
    HRESULT hr;

    if (hwndParent != NULL)
    {
        if (fFoo)
        {
            hr = DoOperationWithFoo(hwndParent);
        }
        else if (fBar)
        {
            hr = DoOperationWithBar(hwndParent);
        }
    }

    return hr;
}
&lt;/PRE&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Catch the bug? This one's so obvious I'm not going to wait a day: if "hwndParent" is NULL then "hr" is left uninitialized. The micro-optimization here is that &lt;B&gt;not&lt;/B&gt; initializing "hr" up front potentially saves a few instructions. The argument is that code size is one of the most critical factors for application performance on a heavily multitasking modern desktop (which is true; nearly all of our code is compiled for minimum size rather than maximum performance) and that this helps because it all adds up. The fix for the people who do not prefer initializing up front is to add "else" clauses to set "hr" to the correct error values. You may guess that with that fix you end up with a similar total number of instructions (or even more in this example), but in many cases initializing up front &lt;I&gt;is&lt;/I&gt; certainly redundant.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;The counter argument, of course, is that the risk of using uninitialized variables far outweighs the minor performance increase. This is the school of thought that I subscribe to.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;The counter-counter argument is that modern compilers are likely to pick this up, and even if they don't our more advanced static analysis tools will.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;The counter-counter-counter argument is that I've personally fixed around a dozen bugs in other people's code over the years that were the direct result of doing this, and it's also annoying when stepping through the debugger and seeing garbage values. :-)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;For the most part this debate can be skirted by doing what I consider a C++ best practice:&lt;/FONT&gt;&lt;/P&gt;&lt;PRE&gt;HRESULT hr = DoSomething(hwndBlah, TRUE, TRUE);
&lt;/PRE&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;That is, reducing the scope of variables as much as possible&amp;nbsp;and avoid splitting initialization from assignment. However, in the above contrived example this isn't really possible.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=517727" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tonyschr/archive/tags/Random/default.aspx">Random</category></item><item><title>The Risk of Micro-optimizations - follow-up</title><link>http://blogs.msdn.com/tonyschr/archive/2006/01/24/517088.aspx</link><pubDate>Wed, 25 Jan 2006 00:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:517088</guid><dc:creator>tonyschr</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/tonyschr/comments/517088.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tonyschr/commentrss.aspx?PostID=517088</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;In yesterday's post I gave an example of a bug where an attempted micro-optimization combined with a common C++ idiom causes a fairly subtle bug. For those who didn't look long enough to catch it, the flaw was in these two lines:&lt;/FONT&gt;&lt;/P&gt;&lt;PRE&gt;BOOL _fRaining:1;
_fRaining = (dwFlags &amp;amp; WEATHER_RAINING);
&lt;/PRE&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;The assumption that the coder was making was that he could save memory by only using a single bit for the boolean value, whereas BOOL is typedef'd as an "int" and will take 32 bits (on a 32-bit processor). As I pointed out in the post, this was an object which would have very few instances (in my real-world case it was tied to the top-level window of an application), so the most this could even &lt;I&gt;theoretically&lt;/I&gt; save is a handful of bytes.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;The bug is that "(dwFlags &amp;amp; WEATHER_RAINING)", which is a common way to check whether a flag is set, gives 0x02 as the answer, or 00000010 in binary. When this value is assigned to _fRaining, which is only a single bit, the value is truncated and only the least significant bit is kept: the 0. Therefore, _fRaining is set to FALSE.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;In the comments, &lt;a href="http://blogs.msdn.com/rick_schaut/"&gt;Rick Schaut&lt;/A&gt; pointed out that using "(dwFlags &amp;amp; WEATHER_RAINING) != 0" is more correct. This is true and would have avoided the bug. &lt;A href="http://mikedimmick.blogspot.com/"&gt;Mike Dimmick&lt;/A&gt; also pointed out that the compiler is going to round up to a whole byte (at minimum) anyway, and even then it's unlikely that you'll see any performance benefit due to the way processors access memory.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;There are certainly scenarios where it is useful to carefully pack variables into a struct or class to save memory or bandwidth, but, like most micro-optimizations, in most cases it more likely to cause bugs than have any tangible benefit.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=517088" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tonyschr/archive/tags/Random/default.aspx">Random</category></item><item><title>The Risk of Micro-optimizations</title><link>http://blogs.msdn.com/tonyschr/archive/2006/01/23/516372.aspx</link><pubDate>Mon, 23 Jan 2006 23:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:516372</guid><dc:creator>tonyschr</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/tonyschr/comments/516372.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tonyschr/commentrss.aspx?PostID=516372</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;A lot of things have been said over the years about premature optimization, and after running into the following bug I thought it served as a good example of a type of premature optimization that I call "micro-optimization". That is, doing something quirky in order to save a tiny amount of RAM or CPU cycles. More often than not these quirks lead to bugs and less maintainable code, with no actual performance increase. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;The following bug was in a class in an application designed to run on a modern desktop, and there would only be a few instances alive at any one time (say, 1-10 typically, maybe 100 in edge cases), so the amount of memory saved was negligible (if any).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;This is a rather easy "spot the bug" exercise so I won't give it away. ;-)&lt;/FONT&gt;&lt;/P&gt;&lt;PRE&gt;DWORD WEATHER_SUNNY   = 0x0001;
DWORD WEATHER_RAINING = 0x0002;

struct CWeather
{
    BOOL _fRaining:1;

    CWeather(DWORD dwFlags)
    {
        _fRaining = (dwFlags &amp;amp; WEATHER_RAINING);
    }

    BOOL IsRaining()
    {
        return _fRaining;
    }
};

int main()
{
    CWeather weather(WEATHER_RAINING);

    if (weather.IsRaining())
    {
        cout &amp;lt;&amp;lt; "It's raining!" &amp;lt;&amp;lt; endl;
    }
    else
    {
        cout &amp;lt;&amp;lt; "It's not raining!" &amp;lt;&amp;lt; endl;
    }

    return 0;
}
&lt;/PRE&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Note: Depending on your compiler, if you crank up your warning level high enough you should get a warning for this. (Although curiously I didn't with VS 2005 and /W4).&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=516372" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tonyschr/archive/tags/Random/default.aspx">Random</category></item><item><title>RAW Conversion and Photo Manipulation</title><link>http://blogs.msdn.com/tonyschr/archive/2006/01/17/513679.aspx</link><pubDate>Tue, 17 Jan 2006 11:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:513679</guid><dc:creator>tonyschr</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/tonyschr/comments/513679.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tonyschr/commentrss.aspx?PostID=513679</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;Last fall I purchased a digital SLR: the popular (and relatively inexpensive) Canon Rebel XT. I had been dabbling with digital cameras for a few years and was having increasing amounts of fun using the limited manual controls of my Canon S50.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;As a technical person part of the draw is simply learning about the equipment, and in particular how to quickly adapt to various shooting conditions by changing the ISO, shutter speed, depth of field. Then there's the gadget factor with being able to choose from a variety of lenses (and flashes, etc.), often with difficult trade-offs. Oh, and it's funny how my personal taste often tends to drift towards "pixel peeping": the sharpness of the part of the subject I had intended to be in focus, the bokeh, the dynamic range, etc., sometimes at the expense of the subject. :-) I've done this forever. Back when I was an Amiga user I would find pictures that exemplified what the Amiga could do, also ignoring the subject ("Look, isn't that a high quality image!").&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;With this in mind, I find it fun to shoot almost exclusively in RAW and later post-process all of the images. After searching around and trying out various pieces of software I've converged on three main photo-related applications:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;&lt;B&gt;&lt;A href="http://www.pixmantec.com/products/rawshooter_essentials.asp"&gt;pixmantec RawShooter Essentials&lt;/A&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;This is an excellent RAW processing application and is available for free download. There's also a &lt;A href="http://esd.element5.com/product.html?productid=545270"&gt;premium&lt;/A&gt; version available for a reasonable price.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;RawShooter is great for going through an initial large batch of photos, flagging and categorizing the ones worth keeping, doing initial adjustments, and converting to JPEG. It is fast and has a pleasant real-time preview of most of the operations, and the output is reasonably high quality. The application is multithreaded so that you can queue up images and have it convert them in the background as you continue to sort and adjust. Overall I highly recommend this app, with only a few minor caveats:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;The sharpening / detail extraction algorithm sometimes creates what I call a "watercolor" effect on parts of the image that are out of focus. This effect seems to be atypical of most sharpening algorithms and sometimes occurs even with very low sharpening (too low, given that RAW files generally need &lt;I&gt;some &lt;/I&gt;sharpening).&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;The workflow is &lt;I&gt;great&lt;/I&gt;, the engine is good, but parts of the UI are a bit quirky. This isn't a reason to not use RawShooter, but a bit of polish could go along way.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;So far I use RawShooter for most initial conversion and I highly recommend it. However when I have a really good image I reach for...&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;&lt;B&gt;&lt;A href="http://www.adobe.com/products/photoshop/main.html"&gt;Adobe Photoshop CS2&lt;/A&gt; &lt;/B&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Due to the price, and the fact that I'm not a professional graphic designer, photographer, or any of those things, I had&amp;nbsp;been hesitant to take the plunge. However, there is such a community around Photoshop that if you want to participate in certain graphics forums, read books, learn tips, share Actions, and generally have the best tool available, it's almost unavoidable.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Photoshop's &lt;A href="http://www.adobe.com/products/photoshop/cameraraw.html"&gt;Camera Raw&lt;/A&gt; plug-in is more cumbersome to use than RawShooter, but gives more control and (in my experience) higher overall image quality. In particular, the "watercolor" effect isn't present, and it's nice to have Curves (which are available in RawShooter premium). It's also nice to import the files directly into Photoshop to do additional post-processing while keeping the higher dynamic range. I've saved at least a couple of blown out skies this way (and without going overboard on post-processing either).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;The downside of the Camera Raw plug-in is that it's relatively slow and so far I haven't found it effective for converting many images in sequence. When combined with Adobe Bridge it is capable of batch processing, but for me RawShooter is still better for the initial culling and conversion steps.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Once I've converted and finished post-processing I reach for...&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;&lt;B&gt;&lt;A href="http://www.microsoft.com/products/imaging/ProductDetails.aspx?pid=003"&gt;Microsoft Digital Image Suite 2006 Library&lt;/A&gt; &lt;/B&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;You knew there had to be at least &lt;I&gt;one&lt;/I&gt; Microsoft product in the mix, right? :-)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;After trying a variety of photo managers I found that our product was best for my needs. It's fast and great&amp;nbsp;for cataloging and rating pictures. The latest version's built-in image viewer is pretty good as well. It doesn't require any kind of custom directory structure or try to rearrange my images and otherwise complements the OS. For me the fact that it looks and feels like a normal Win32 application is a bonus; I'm not a fan of skinned UI with nonstandard behavior unless there's a strong justification.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=513679" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tonyschr/archive/tags/Random/default.aspx">Random</category></item><item><title>Bug Triage</title><link>http://blogs.msdn.com/tonyschr/archive/2006/01/12/512164.aspx</link><pubDate>Thu, 12 Jan 2006 23:08:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:512164</guid><dc:creator>tonyschr</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/tonyschr/comments/512164.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tonyschr/commentrss.aspx?PostID=512164</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;Eric Sink has a &lt;A href="http://software.ericsink.com/articles/Four_Questions.html"&gt;good article&lt;/A&gt; on the process of triaging bugs. In it he pokes a little bit of fun at the people who don't understand why all good software ships with known bugs and then discusses a process for determining which ones to fix.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Determining which bugs to fix and how to prioritize them is often a challenge, particularly for bugs in the middle of the severity/frequency ranges. There's no objective algorithm, so as Eric's article&amp;nbsp;suggests it often boils down to a couple people discussing the bug and making the call.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;However, there's another subtlety: certain classes of bugs often have strong advocates, including external teams tracking metrics and driving to get those bugs fixed. This puts extra weight behind those classes of bugs, which can be both a good thing and a bad thing. The good part is that in general these are severe bugs which the team would to fix anyway, and the metrics and pressure to get them fixed helps ensure that the team is shipping a product with known high quality. However, the downside is that this removes some amount of control (both consciously and subconsciously) from the product team, which can sometimes result in the wrong bugs getting fixed.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;As an example, let's imagine that there are two bugs open, and the team only has time to fix one of them before a beta release ships:&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;1) Crash&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;2) UI element doesn't behave quite right&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Crashes are a class of bugs which always rank extremely high on the priority scale, are tracked by metrics, and have strong advocates to get them fixed. In the absence of other information someone triaging these bugs will almost certainly rank #1 as a higher priority bug than #2.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;But wait a minute: there &lt;I&gt;is&lt;/I&gt; more information. The crash only happens in an obscure feature, and has only been observed while stressing the product using automated tests. There is no known way to manually reproduce the crash (the people who work on the feature can't get it to crash on demand), the fix isn't straightforward, and it doesn't appear to be a security risk. The fix might even be risky, or mask a more serious bug. Furthermore, suppose the UI element is in a high-profile feature, and that feature not behaving correctly will grate on the beta tester every hour that they use the product.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Now which bug do you fix? Clearly you fix #2.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;This becomes obvious once you have enough information to make an informed decision, which is the key. Bugs cannot be triaged blindly by objective criteria; they must be judged by people that are not only familiar with the product and feature, but also have sufficient information about the bug to make an informed decision.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=512164" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tonyschr/archive/tags/Random/default.aspx">Random</category></item><item><title>How ! to code</title><link>http://blogs.msdn.com/tonyschr/archive/2005/10/04/477165.aspx</link><pubDate>Wed, 05 Oct 2005 05:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:477165</guid><dc:creator>tonyschr</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/tonyschr/comments/477165.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tonyschr/commentrss.aspx?PostID=477165</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;A little rant to prove I'm still alive. :-)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Here's a pattern I see every now and then that makes my brain explode. This is a simplification, but the two bools that are named exactly the same except the word&amp;nbsp;"Dont" are real, as is&amp;nbsp;the "partial assert" and not-completely-mutually-exclusive logic that&amp;nbsp;follows.&amp;nbsp;Can anybody explain why you would write code like this?&lt;/FONT&gt;&lt;/P&gt;&lt;PRE&gt;bool fDoFoo = SomeLogic();
bool fDontDoFoo = SomeOtherLogic();

assert(!(fDooFoo &amp;amp;&amp;amp; fDontDoFoo));

if (fDoFoo)
{
    // Do something
}

if (!fDontDoFoo &amp;amp;&amp;amp; !fDoFoo)
{
    // Do some other thing
}&lt;/PRE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=477165" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tonyschr/archive/tags/Random/default.aspx">Random</category></item><item><title>XP SP2 fixes</title><link>http://blogs.msdn.com/tonyschr/archive/2004/07/25/196587.aspx</link><pubDate>Mon, 26 Jul 2004 05:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:196587</guid><dc:creator>tonyschr</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/tonyschr/comments/196587.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tonyschr/commentrss.aspx?PostID=196587</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;One interesting change&amp;nbsp;I discovered in&amp;nbsp;XP SP2 was that &lt;STRIKE&gt;Subspace&lt;/STRIKE&gt; &lt;A href="http://www.ssdownloads.com/index.php"&gt;Continuum&lt;/A&gt;&amp;nbsp;-- the first and (by far)&amp;nbsp;&lt;STRONG&gt;best&lt;/STRONG&gt; massively multiplayer online game --&amp;nbsp;now runs on XP without entering an infinite loop trying to launch the process. This only repro'd under certain accounts, and I suspect it was a bug in their anti-hacking/cheating code, but SP2 seems to fix the problem.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Well, what are you waiting for? It's free! Start playing today!&amp;nbsp;I can sometimes be found as &amp;#8220;IUnknown*&amp;#8221; in Alpha West (I'm a perpetual newbie). Mention that you saw my blog and I won't kill you. :-)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;[Edit: Speaking of great games, &lt;A href="http://193.151.73.87/games/lemmings/index.html"&gt;here's a remake of Lemmings in DHTML&lt;/A&gt;! Very cool, I wonder how long this link will last.&amp;nbsp;What ever happened to Psygnosis? Their games for the Amiga were excellent...]&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=196587" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tonyschr/archive/tags/Random/default.aspx">Random</category></item><item><title>Breaking-in electronics</title><link>http://blogs.msdn.com/tonyschr/archive/2004/06/14/155788.aspx</link><pubDate>Tue, 15 Jun 2004 05:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:155788</guid><dc:creator>tonyschr</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/tonyschr/comments/155788.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tonyschr/commentrss.aspx?PostID=155788</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;For best performance, you should make sure to &lt;/FONT&gt;&lt;A href="http://www.cableburner.com/"&gt;&lt;FONT face=Arial size=2&gt;break in&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt; your cables. Otherwise, you may be getting substandard audio performance and transfer rates - I hear that breaking in your modem cable will let you get 64kbps out of a standard 56k modem!.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;;-)&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=155788" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tonyschr/archive/tags/Random/default.aspx">Random</category></item><item><title>Expression 3: Vector drawing application available for download</title><link>http://blogs.msdn.com/tonyschr/archive/2004/06/07/150389.aspx</link><pubDate>Mon, 07 Jun 2004 22:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:150389</guid><dc:creator>tonyschr</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/tonyschr/comments/150389.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tonyschr/commentrss.aspx?PostID=150389</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://blogs.msdn.com/tims/archive/2004/06/07/150000.aspx"&gt;&lt;FONT face=Arial size=2&gt;As others have pointed out&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt;, Microsoft has made available a &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/products/expression/"&gt;&lt;FONT face=Arial size=2&gt;free download&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt; of Expression 3, apparently acquired from Creature House. &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;My first impression, having only played with it during breakfast and lunch,&amp;nbsp;is that it's a very cool app. It has a standard, user-friendly palette-based UI with&amp;nbsp;a few interesting quirks -- a good &lt;A href="http://blogs.msdn.com/tonyschr/archive/2004/01/21/61018.aspx"&gt;antidote&lt;/A&gt; to applications such as Digital Image Pro that favor a more &amp;#8220;Inductive UI&amp;#8221; style approach. ;-)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;From reading the comments&amp;nbsp;on Tim's blog I now notice that a note on the download web page implies it's for existing customers. When you install, the EULA doesn't say anything extraordinary, although it does call it a &amp;#8220;Preview&amp;#8221;, and there's a&amp;nbsp;non-intrusive &amp;#8220;Preview&amp;#8221; watermark&amp;nbsp;in the MDI client area. Until we hear more official communication, draw your own conclusions I suppose. (Or paint them using MS Paint, but that would just be a bad pun.)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;On a side note, I'm a bit puzzled by how &lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;schizophrenic Microsoft has been&amp;nbsp;in the graphics space. We built and discontinued Image Composer, Photo Draw, and Photo Draw 2000, and created Digital Image Pro, Picture It, and various&amp;nbsp;image manipulation and drawing features in apps like Office and&amp;nbsp;Visual Studio. We also bought Visio, and&amp;nbsp;bought and sold SoftImage. Of course, there's MS Paint. And rumors about Sparkle. Am I missing any?&lt;/SPAN&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=150389" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tonyschr/archive/tags/Random/default.aspx">Random</category></item><item><title>My MSN</title><link>http://blogs.msdn.com/tonyschr/archive/2004/05/29/144509.aspx</link><pubDate>Sun, 30 May 2004 01:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:144509</guid><dc:creator>tonyschr</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/tonyschr/comments/144509.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tonyschr/commentrss.aspx?PostID=144509</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;I'm not sure when the changes happened, so this could be really old news, but I was pleasantly surprised when I visited &lt;/FONT&gt;&lt;A href="http://my.msn.com"&gt;&lt;FONT face=Arial size=2&gt;http://my.msn.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt; today.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;It's always been configurable, but&amp;nbsp;now it's pretty slick.&amp;nbsp;You can easily add and remove content modules that you're interested in (Hotmail inbox preview, news, sports, weather, entertainment, stocks, etc.) and completely configure how and where they're shown.&amp;nbsp;Configuration is done through live&amp;nbsp;drag and drop... you can even resize the columns by dragging splitters that show up when you hover over a column border! The UI is dense in terms of information, but doesn't feel cluttered like the main MSN home page.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=144509" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tonyschr/archive/tags/Random/default.aspx">Random</category></item><item><title>A Good MP3 Player </title><link>http://blogs.msdn.com/tonyschr/archive/2004/05/13/131593.aspx</link><pubDate>Fri, 14 May 2004 02:11:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:131593</guid><dc:creator>tonyschr</dc:creator><slash:comments>33</slash:comments><comments>http://blogs.msdn.com/tonyschr/comments/131593.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tonyschr/commentrss.aspx?PostID=131593</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;Check out these features:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Supports MP3 and WMA (and mounts as a hard drive)&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;4 GB storage&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;10+ hr removable lithium-ion battery&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Size is 3" x 2.5" x 0.4" for the one standing up, 2.4" x 3.1" x 0.4" for the one laying down. Around the size of the iPod mini, but smaller in some dimensions.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;USB 2.0 or Firewire, and recharges over the connection&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;&lt;A href="http://www.rim.net/"&gt;RIM&lt;/A&gt;-style navigation, including side scrollwheel and back button&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;AM/FM radio, including "Personal Audio Recorder" features such as recording at scheduled times, pausing live radio, and actively buffering the last 30 minutes in RAM&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;
&lt;BLOCKQUOTE&gt;&lt;FONT face=Arial size=2&gt;&lt;A href="http://www.tonyschr.net/images/TonyMP3Player.jpg"&gt;&lt;IMG src="http://www.tonyschr.net/images/TonyMP3Player_small.jpg" border=1&gt;&lt;/A&gt;&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;There's only one problem: it doesn't exist.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;I've been looking for an MP3 player with, at minimum, 4 GB, WMA support, and a built-in radio (not on a "remote"). Ideally it would be relatively small with a big display and navigation that doesn't require a clumsy protruding joystick-like apparatus. Any suggestions?&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;My failure to find a good player did give me an excuse to do some 3D modeling and rendering, though. :-) The above image illustrates what I want hardware-wise (within the constraints of current, inexpensive technology)&amp;nbsp;and is also my first attempt to use radiosity and HDRI in Lightwave. There are no lights in the scene, only the High Dynamic Range Image for the environment, and a gray plane for the ground. This approach tends to produce more realistic images, at the expense of rendering time: the 800x600 version of this image took over 48 hours to render on a 2.4 GHz P4. Of course, there are a variety of techniques you can use to significantly reduce rendering time (using multiple passes, "baking" radiosity info onto the surface, interpolated mode, etc.), but so far all of the things I've tried degraded the quality too much for a still image like this one (reflection, etc.).&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=131593" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tonyschr/archive/tags/Random/default.aspx">Random</category></item><item><title>Getting the flat menus back in Windows XP</title><link>http://blogs.msdn.com/tonyschr/archive/2004/05/10/129412.aspx</link><pubDate>Mon, 10 May 2004 23:39:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:129412</guid><dc:creator>tonyschr</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/tonyschr/comments/129412.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tonyschr/commentrss.aspx?PostID=129412</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;I'm not sure if anybody else has this problem, but after I have used XP for a while the menus seem to revert to an ugly 3D look instead of having the clean, flat border. No amount of tweaking seems to get back the flat menus except going back to the original XP theme and re-customizing everything.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;After turning up empty handed on Google and elsewhere I diff'd the registry against a machine I hadn't contaminated yet. Here's the registry key that seems to cause it:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;FONT face=Arial size=2&gt;3D menu look&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;[HKEY_CURRENT_USER\Control Panel\Desktop]&lt;BR&gt;"UserPreferencesMask"=hex:90,32,&lt;FONT color=#ff0000&gt;05&lt;/FONT&gt;,80&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;FONT face=Arial size=2&gt;Flat menu look&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;[HKEY_CURRENT_USER\Control Panel\Desktop]&lt;BR&gt;"UserPreferencesMask"=hex:90,32,&lt;FONT color=#ff0000&gt;07&lt;/FONT&gt;,80&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;You'll need to log out and log back in again to make it take effect. As always, edit the registry at your own risk.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=129412" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tonyschr/archive/tags/Random/default.aspx">Random</category></item><item><title>High DPI in IE: Tip &amp; Mystery Solved</title><link>http://blogs.msdn.com/tonyschr/archive/2004/05/05/126305.aspx</link><pubDate>Wed, 05 May 2004 07:53:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:126305</guid><dc:creator>tonyschr</dc:creator><slash:comments>11</slash:comments><comments>http://blogs.msdn.com/tonyschr/comments/126305.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tonyschr/commentrss.aspx?PostID=126305</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Arial size=2&gt;On &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/omars/archive/2004/05/05/126218.aspx"&gt;&lt;FONT face=Arial size=2&gt;his blog&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt; (and in a comment on my &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/tonyschr/archive/2004/03/23/94391.aspx"&gt;&lt;FONT face=Arial size=2&gt;120 DPI post&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt;) Omar points out a &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/overview/highdpi.asp"&gt;&lt;FONT face=Arial size=2&gt;super-secret registry tweak make IE do extra&amp;nbsp;scaling in&amp;nbsp;high DPI mode&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt;. IE already adjusts for well-written web pages, but if you're using&amp;nbsp;high DPI and still feeling cramped on some sites,&amp;nbsp;you might want to give it a shot.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;I don't like it because it has a tendency to distort graphics, and it makes some&amp;nbsp;fonts &lt;EM&gt;too&lt;/EM&gt; &lt;EM&gt;big&lt;/EM&gt; for my displays, but it's good to know about.&amp;nbsp;I mentioned an alternative in my own comments a few weeks ago, but I suspect not many people&amp;nbsp;saw it.&amp;nbsp;For the occasional web sites that hard code small font sizes, here's a very simple&amp;nbsp;&amp;#8220;per-page zoom&amp;#8221; workaround:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;1) Create a local file (i.e. &lt;FONT face="Courier New"&gt;c:\web\zoom200.htm&lt;/FONT&gt;) that has the following script:&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;script language="JavaScript"&amp;gt; &lt;BR&gt;external.menuArguments.document.body.style.zoom="200%"; &lt;BR&gt;&amp;lt;/script&amp;gt; &lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;2) Add it to the right-click menu in IE, by adding a registry key:&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;Key: "HKCU\SOFTWARE\Microsoft\Internet Explorer\MenuExt\Zoom 200%" &lt;BR&gt;Value (Default): "c:\web\zoom200.htm"&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Adjust the zoom&amp;nbsp;percentage and file locations as needed and then restart IE. Now when you right click on a page the menu should have a new option to &amp;#8220;Zoom 200%&amp;#8221;. Clicking on that will zoom the entire page, including graphics and (most) controls. A 125% or 150% zoom is probably more reasonable for normal reading; I've created several zoom levels in this way.&amp;nbsp;Unfortunately&amp;nbsp;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;zoom has a few issues with font kerning/spacing, selection, controls, and an overall lack of polish, which is why you don&amp;#8217;t see this exposed directly in the browser yet.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=126305" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tonyschr/archive/tags/Random/default.aspx">Random</category><category domain="http://blogs.msdn.com/tonyschr/archive/tags/Internet+Explorer/default.aspx">Internet Explorer</category></item><item><title>Fonts on XP</title><link>http://blogs.msdn.com/tonyschr/archive/2004/04/28/121908.aspx</link><pubDate>Wed, 28 Apr 2004 09:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:121908</guid><dc:creator>tonyschr</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/tonyschr/comments/121908.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tonyschr/commentrss.aspx?PostID=121908</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://scoblecomments.scripting.com/comments?u=1011&amp;amp;amp;p=7304&amp;amp;amp;link=http%3A%2F%2Fradio.weblogs.com%2F0001011%2F2004%2F04%2F27.html%23a7304"&gt;&lt;FONT face=Arial size=2&gt;Scoble&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt; and &lt;/FONT&gt;&lt;A href="http://nowhere.2entwine.com/archives/000095.html"&gt;&lt;FONT face=Arial size=2&gt;Dudley&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt;&amp;nbsp;are having a debate about &lt;A href="http://blogs.msdn.com/tonyschr/archive/2004/03/23/94391.aspx"&gt;fonts&lt;/A&gt; and I can't help but think the little screenshot isn't enough to go on. For one, it's clear that Japanese fonts are not rendered using ClearType, so that's a topic for a different&amp;nbsp;day. Right now I want to focus on regular Latin fonts.&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;A href="http://www.tonyschr.net/images/fonts.png"&gt;&lt;IMG src="http://www.tonyschr.net/images/fonts_small.png"&gt;&lt;/A&gt;&lt;/BLOCKQUOTE&gt;&lt;FONT face=Arial size=2&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;I've put up a &lt;A href="http://www.tonyschr.net/fonts.htm"&gt;&lt;STRONG&gt;test page&lt;/STRONG&gt;&lt;/A&gt;&amp;nbsp;along with a &lt;A href="http://www.tonyschr.net/images/fonts.png"&gt;&lt;STRONG&gt;screenshot&lt;/STRONG&gt;&lt;/A&gt; that shows what everyday&amp;nbsp;fonts look like on my Windows XP machine (with ClearType, tuned to my eyes on a Dell 2000FP, and 120 DPI fonts). I'm interested in seeing comparisons rendered&amp;nbsp;on OS X, Linux, Windows with different settings,&amp;nbsp;etc. Feel free to swap out fonts with ones you think look better; overall&amp;nbsp;quality is what matters, not font-for-font rendering comparisons.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Note: When viewing the screenshot, make sure you have image scaling disabled. Also, if you post your own, please use PNG.&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=121908" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tonyschr/archive/tags/Random/default.aspx">Random</category></item></channel></rss>