<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://codebetter.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>Brendan Tompkins [MVP]</title><link>http://codebetter.com/blogs/brendan.tompkins/default.aspx</link><description>Blog First. Ask Questions Later.</description><dc:language>en</dc:language><generator>CommunityServer 2007 (Build: 20416.853)</generator><item><title>Dave Laribee Video Coverage of Mix08</title><link>http://codebetter.com/blogs/brendan.tompkins/archive/2008/03/06/dave-laribee-video-coverage-of-mix08.aspx</link><pubDate>Thu, 06 Mar 2008 15:50:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:174994</guid><dc:creator>Brendan Tompkins</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/brendan.tompkins/rsscomments.aspx?PostID=174994</wfw:commentRss><comments>http://codebetter.com/blogs/brendan.tompkins/archive/2008/03/06/dave-laribee-video-coverage-of-mix08.aspx#comments</comments><description>
&lt;p&gt;Just a quick administrative note, as this information is timely and not to be missed.&lt;/p&gt;

&lt;p&gt;Dave Laribee is our man at Mix08 and is &lt;a href="http://qik.com/codebetter"&gt;doing some great Qik.com videos&lt;/a&gt; with the CodeBetter Video Phone (Nokia N82)... Be sure to check it out, and if you&amp;#39;d like to get in front of the camera to say hi, try to hook up with Dave.&lt;/p&gt;

&lt;ul class="video_list"&gt;
			
				
	
&lt;li id="video31741" class="video medium yours"&gt;
		&lt;a href="http://qik.com/video/31741" class="thumb"&gt;&lt;img src="http://qik.com/redir/b51528eb9f6145eba3399bfeb9080354.jpg?1204766542" alt="Rob Connery, Steve Harman @ MIX08" /&gt;&lt;/a&gt;
		
			&lt;b style="background-color:transparent;background-image:none;" class="title edit"&gt;Rob Connery, Steve H...&lt;/b&gt;
		
				
		&lt;span class="time"&gt;
			
				about 15 hours ago					
			
		&lt;/span&gt;
		
		
		
	&lt;/li&gt;

			
				
	
&lt;li id="video31733" class="video medium yours"&gt;
		&lt;a href="http://qik.com/video/31733" class="thumb"&gt;&lt;img src="http://qik.com/redir/cb60e1b5f05a4ca7ae7fdb743dfee0db.jpg?1204765425" alt="Miguel de Icaza @ MIX08" /&gt;&lt;/a&gt;
		
			&lt;b class="title edit"&gt;Miguel de Icaza @ MI...&lt;/b&gt;
		
				
		&lt;span class="time"&gt;
			
				about 15 hours ago					
			
		&lt;/span&gt;
		
		
		
	&lt;/li&gt;

			
				
	
&lt;li id="video31684" class="video medium yours last_child"&gt;
		&lt;a href="http://qik.com/video/31684" class="thumb"&gt;&lt;img src="http://qik.com/redir/d0e4ae097b9243f18d6b07e8c25b28fe.jpg?1204757010" alt="Pablo Castro @ MIX08" /&gt;&lt;/a&gt;
		
			&lt;b class="title edit"&gt;Pablo Castro @ MIX08&lt;/b&gt;
		
				
		&lt;span class="time"&gt;
			
				about 17 hours ago					
			
		&lt;/span&gt;
		
		
	
	&lt;/li&gt;

			
				
	
&lt;li id="video31679" class="video medium yours"&gt;
		&lt;a href="http://qik.com/video/31679" class="thumb"&gt;&lt;img src="http://qik.com/redir/3236fb390079460090b985bad32a66eb.jpg?1204756296" alt="John Lam @ MIX08" /&gt;&lt;/a&gt;
		
			&lt;b style="background-color:transparent;background-image:none;" class="title edit"&gt;John Lam @ MIX08&lt;/b&gt;
		
				
		&lt;span class="time"&gt;
			
				about 17 hours ago					
			
		&lt;/span&gt;
		
		
		
	&lt;/li&gt;

			
				
	
&lt;li id="video31678" class="video medium yours"&gt;
		&lt;a href="http://qik.com/video/31678" class="thumb"&gt;&lt;img src="http://qik.com/redir/d83afb1014284a48ae12d218412b2a28.jpg?1204755968" alt="Microsoft Surface @ MIX08" /&gt;&lt;/a&gt;
		
			&lt;b class="title edit"&gt;Microsoft Surface @ ...&lt;/b&gt;
		
				
		&lt;span class="time"&gt;
			
				about 18 hours ago					
			
		&lt;/span&gt;
		
		
	&lt;/li&gt;

			
				
	
&lt;li id="video31661" class="video medium yours last_child"&gt;
		&lt;a href="http://qik.com/video/31661" class="thumb"&gt;&lt;img src="http://qik.com/redir/8e8315bf100a4f33bb70327e3ac39d5e.jpg?1204754997" alt="Josh Holmes @ MIX08" /&gt;&lt;/a&gt;
		
			&lt;b class="title edit"&gt;Josh Holmes @ MIX08&lt;/b&gt;
		
				
		&lt;span class="time"&gt;
			
				about 18 hours ago					
			
		&lt;/span&gt;
		
		
		
	&lt;/li&gt;

			
				
	
			
				
	
&lt;li id="video31489" class="video medium yours"&gt;
		&lt;a href="http://qik.com/video/31489" class="thumb"&gt;&lt;img src="http://qik.com/redir/102fc9695eb14ff88ca0d6befcf68427.jpg?1204743337" alt="MIX08 - Keynote" /&gt;&lt;/a&gt;
		
			&lt;b class="title edit"&gt;MIX08 - Keynote&lt;/b&gt;
		
				
		&lt;span class="time"&gt;
			
				about 21 hours ago					
			
		&lt;/span&gt;
		
	
	&lt;/li&gt;
&lt;/ul&gt;

&lt;br /&gt;
&lt;p&gt;...Now back to our regularly scheduled program. &lt;br /&gt;&lt;/p&gt;
&lt;img src="http://codebetter.com/aggbug.aspx?PostID=174994" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/brendan.tompkins/archive/tags/Featured/default.aspx">Featured</category><category domain="http://codebetter.com/blogs/brendan.tompkins/archive/tags/Mix08/default.aspx">Mix08</category><category domain="http://codebetter.com/blogs/brendan.tompkins/archive/tags/Video/default.aspx">Video</category></item><item><title>New Ajax-Enabled CAPTCHA for Community Server 2007</title><link>http://codebetter.com/blogs/brendan.tompkins/archive/2007/12/05/new-ajax-enabled-captcha-for-community-server-2007.aspx</link><pubDate>Wed, 05 Dec 2007 16:57:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:171691</guid><dc:creator>Brendan Tompkins</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/brendan.tompkins/rsscomments.aspx?PostID=171691</wfw:commentRss><comments>http://codebetter.com/blogs/brendan.tompkins/archive/2007/12/05/new-ajax-enabled-captcha-for-community-server-2007.aspx#comments</comments><description>&lt;p&gt;Just a quick post to announce the release of the latest version of CodeBetter.CommunityServerExtensions which includes some bugfixes and the much anticipated CAPTCHA validation on the server via Ajax stuff.&lt;/p&gt;
&lt;p&gt;I knew it was time when I started getting comments like this to &lt;a href="http://codebetter.com/blogs/brendan.tompkins/archive/2007/04/27/captcha-for-community-server-2007.aspx"&gt;the original announcement&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;sorry brendan, using a cookie to store the captcha code sucks.&lt;/p&gt;
&lt;p&gt;and &amp;quot;probably not something that a spammer would be motivated to
do..&amp;quot; would maybe be true of you had written your own proprietary
system, but this being the best available captcha control for cs 2007
... come on.&lt;/p&gt;
&lt;p&gt;jacob &lt;br /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The previous solution did rely on the CAPTCHA text being stored in a cookie, which was an easy way to enable the validation at the browser.&amp;nbsp; I had always maintained that a spammer wouldn&amp;#39;t be motivated to write the code to break the CAPTCHA in this implementation, but it was breakable.&amp;nbsp; Jacob was right about the sucking part, but it *did* work pretty well to kill comment spam.&amp;nbsp; The new version will allow you to use AJAX to validate the CAPTCHA on the server. It&amp;#39;s a much better solution.&lt;/p&gt;
&lt;p&gt;There are some other bugfixes too, including support for forum posts as well.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://codebetter.com/files/folders/community_server_add-ons/entry162534.aspx"&gt;You can get the dll and source code here *.&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;

* Latest Version - 1.1 December 5, 2007&lt;img src="http://codebetter.com/aggbug.aspx?PostID=171691" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/brendan.tompkins/archive/tags/CAPTCHA/default.aspx">CAPTCHA</category><category domain="http://codebetter.com/blogs/brendan.tompkins/archive/tags/Community+Server/default.aspx">Community Server</category></item><item><title>ASP/ASP.NET MVP!</title><link>http://codebetter.com/blogs/brendan.tompkins/archive/2007/07/02/asp-asp-net-mvp.aspx</link><pubDate>Mon, 02 Jul 2007 14:50:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:165061</guid><dc:creator>Brendan Tompkins</dc:creator><slash:comments>11</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/brendan.tompkins/rsscomments.aspx?PostID=165061</wfw:commentRss><comments>http://codebetter.com/blogs/brendan.tompkins/archive/2007/07/02/asp-asp-net-mvp.aspx#comments</comments><description>&lt;p&gt;Got the word yesterday that I received an MVP award for &amp;quot;Visual Developer - ASP/ASP.NET&amp;quot; ...&lt;/p&gt;
&lt;p&gt;I&amp;#39;m going to be spending the next few weeks brushing up on my ASP skills, because as an MVP I surely must be expected to know these things.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Thanks to Raymond for the nomination this year, Sahil for the nomination last year and all the other folks for the support. &lt;/p&gt;
&lt;p&gt;Now, where did I put those include files again? .. hmm.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=165061" width="1" height="1"&gt;</description></item><item><title>Refactoring Unsafe Code: GIF Image Color Quantizer, Now with Safe Goodness</title><link>http://codebetter.com/blogs/brendan.tompkins/archive/2007/06/14/gif-image-color-quantizer-now-with-safe-goodness.aspx</link><pubDate>Thu, 14 Jun 2007 14:07:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:164229</guid><dc:creator>Brendan Tompkins</dc:creator><slash:comments>19</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/brendan.tompkins/rsscomments.aspx?PostID=164229</wfw:commentRss><comments>http://codebetter.com/blogs/brendan.tompkins/archive/2007/06/14/gif-image-color-quantizer-now-with-safe-goodness.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;ve had a few requests to create a safe version of the Image Quantization library I&amp;#39;ve blogged about quite a few times: see &lt;a href="http://codebetter.com/blogs/brendan.tompkins/archive/2004/01/26/6103.aspx"&gt;Use GDI+ to Save Crystal-Clear GIF Images with .NET.&lt;/a&gt;&amp;nbsp; It turns out this is quite useful for a lot of people, but the old version contained unsafe code, which wouldn&amp;#39;t run under medium trust with .NET 2.0.&lt;/p&gt;

&lt;p&gt;I spent a few hours yesterday creating a safe version of this library.&amp;nbsp; The re-factoring process was fun, and I found a few cool things you can do with Marshal class with .NET.&amp;nbsp;&lt;br /&gt; &lt;/p&gt;

&lt;p&gt;&lt;b&gt;Incrementing IntPtrs &lt;br /&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;I didn&amp;#39;t know you could do this, and there&amp;#39;s probably going to be situations where this doesn&amp;#39;t work, but provided you have used something like the Bitmap&amp;#39;s LockBits method to lock the bits into system memory, you can increment an IntPtr like so:&lt;/p&gt;

&lt;p&gt;&lt;span&gt;IntPtr &lt;/span&gt;pSourcePixel;&lt;br /&gt;

&lt;/p&gt;
&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&lt;/span&gt;pSourcePixel = (&lt;span&gt;IntPtr&lt;/span&gt;)((&lt;span&gt;long&lt;/span&gt;)pSourcePixel + _pixelSize);&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;&lt;br /&gt;&lt;b&gt;Pointers To Structures&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Never knew about this either, but if you can map a structure to memory by using the Marshal.PtrToStructure method.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&lt;/span&gt;(&lt;span&gt;Color32&lt;/span&gt;) &lt;span&gt;Marshal&lt;/span&gt;.PtrToStructure(pSourcePixel, &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span&gt;Color32&lt;/span&gt;));&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;... where Color32 is a structure that looks like this specifying FieldOffset, and pSourcePixel points to a 32-Bit color value&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;

&lt;/p&gt;

&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;p style="margin:0px;"&gt;[&lt;span&gt;StructLayout&lt;/span&gt;(&lt;span&gt;LayoutKind&lt;/span&gt;.Explicit)]&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;struct&lt;/span&gt; &lt;span&gt;Color32&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;{&lt;/p&gt;
&lt;br /&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span&gt;FieldOffset&lt;/span&gt;(0)]&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;byte&lt;/span&gt; Blue;&lt;/p&gt;
&lt;br /&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span&gt;FieldOffset&lt;/span&gt;(1)]&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;byte&lt;/span&gt; Green;&lt;/p&gt;
&lt;br /&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span&gt;FieldOffset&lt;/span&gt;(2)]&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;byte&lt;/span&gt; Red;&lt;/p&gt;
&lt;br /&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span&gt;FieldOffset&lt;/span&gt;(3)]&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;byte&lt;/span&gt; Alpha;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;} &lt;/p&gt;

&lt;p&gt;&amp;nbsp;So, in the end, a method that looked like this (unsafe)&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; Execute the first pass through the pixels in the image&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;param name=&amp;quot;sourceData&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The source data&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;param name=&amp;quot;width&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The width in pixels of the image&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;param name=&amp;quot;height&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The height in pixels of the image&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;protected&lt;/span&gt; &lt;span style="color:blue;"&gt;unsafe virtual&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; FirstPass ( BitmapData sourceData , &lt;span style="color:blue;"&gt;int&lt;/span&gt; width , &lt;span style="color:blue;"&gt;int&lt;/span&gt; height )&lt;/p&gt;

&lt;p style="margin:0px;"&gt;{&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// Define the source data pointers. The source row is a byte to&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // keep addition of the stride value easier (as this is in bytes)&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;byte&lt;/span&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp; pSourceRow = (&lt;span style="color:blue;"&gt;byte&lt;/span&gt;*)sourceData.Scan0.ToPointer ( ) ;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;Int32&lt;/span&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp; pSourcePixel ;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// Loop through each row&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;for&lt;/span&gt; ( &lt;span style="color:blue;"&gt;int&lt;/span&gt; row = 0 ; row &amp;lt; height ; row++ )&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set the source pixel to the first pixel in this row&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pSourcePixel = (&lt;span&gt;Int32&lt;/span&gt;*) pSourceRow ;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // And loop through each column&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;for&lt;/span&gt; ( &lt;span style="color:blue;"&gt;int&lt;/span&gt; col = 0 ; col &amp;lt; width ; col++ , pSourcePixel++ )&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// Now I have the pixel, call the FirstPassQuantize function...&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; InitialQuantizePixel ( (Color32*)pSourcePixel ) ;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// Add the stride to the source row&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pSourceRow += sourceData.Stride ;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;

&lt;p style="margin:0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;Was refactored to this:&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; Execute the first pass through the pixels in the image&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;param name=&amp;quot;sourceData&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The source data&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;param name=&amp;quot;width&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The width in pixels of the image&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;param name=&amp;quot;height&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The height in pixels of the image&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;protected&lt;/span&gt;&amp;nbsp; &lt;span style="color:blue;"&gt;virtual&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; FirstPass(&lt;span&gt;BitmapData&lt;/span&gt; sourceData, &lt;span style="color:blue;"&gt;int&lt;/span&gt; width, &lt;span style="color:blue;"&gt;int&lt;/span&gt; height)&lt;/p&gt;

&lt;p style="margin:0px;"&gt;{&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// Define the source data pointers. The source row is a byte to&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// keep addition of the stride value easier (as this is in bytes)&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;IntPtr&lt;/span&gt; pSourceRow = sourceData.Scan0;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// Loop through each row&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;for&lt;/span&gt; (&lt;span style="color:blue;"&gt;int&lt;/span&gt; row = 0; row &amp;lt; height; row++)&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set the source pixel to the first pixel in this row&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IntPtr&lt;/span&gt; pSourcePixel = pSourceRow;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// And loop through each column&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;for&lt;/span&gt; (&lt;span style="color:blue;"&gt;int&lt;/span&gt; col = 0; col &amp;lt; width; col++)&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Color32 color = (&lt;span&gt;Color32&lt;/span&gt;) &lt;span&gt;Marshal&lt;/span&gt;.PtrToStructure(pSourcePixel, &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span&gt;Color32&lt;/span&gt;));&lt;/p&gt;
&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;/div&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// Now I have the pixel, call the FirstPassQuantize function...&lt;/span&gt; &lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; InitialQuantizePixel(&lt;span style="color:blue;"&gt;color&lt;/span&gt;); &lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pSourcePixel = (&lt;span&gt;IntPtr&lt;/span&gt;)((&lt;span style="color:blue;"&gt;long&lt;/span&gt;&lt;span&gt;&lt;/span&gt;)pSourcePixel + _pixelSize);&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// Add the stride to the source row&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pSourceRow = (&lt;span&gt;IntPtr&lt;/span&gt;)((&lt;span style="color:blue;"&gt;long&lt;/span&gt;)pSourceRow + sourceData.Stride);&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;

&lt;p style="margin:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;p&gt;So, get the new improved, &lt;a href="http://codebetter.com/files/folders/image_quantizer/entry164231.aspx"&gt;safe version of the image quantizer here&lt;/a&gt;, and &lt;a href="http://codebetter.com/files/folders/image_quantizer/entry164230.aspx"&gt;the source code here&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://codebetter.com/aggbug.aspx?PostID=164229" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/brendan.tompkins/archive/tags/GDI_2B00_/default.aspx">GDI+</category><category domain="http://codebetter.com/blogs/brendan.tompkins/archive/tags/Refactoring/default.aspx">Refactoring</category></item><item><title>Lazy Friday Thoughts on Addictive Technology</title><link>http://codebetter.com/blogs/brendan.tompkins/archive/2007/05/18/Lazy-Friday-Thoughts-on-Addictive-Technology.aspx</link><pubDate>Fri, 18 May 2007 18:35:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:163151</guid><dc:creator>Brendan Tompkins</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/brendan.tompkins/rsscomments.aspx?PostID=163151</wfw:commentRss><comments>http://codebetter.com/blogs/brendan.tompkins/archive/2007/05/18/Lazy-Friday-Thoughts-on-Addictive-Technology.aspx#comments</comments><description>&lt;p&gt;There&amp;#39;s something in me that&amp;#39;s generally skeptical about new technology. Recently I&amp;#39;ve been trying to understand why I&amp;#39;m slightly under-whelmed by Silverlight.&amp;nbsp;&amp;nbsp;  On the face of it, having a truly cross-platform CLR sounds absolutely incredible.&amp;nbsp; I&amp;#39;ve invested the last 6 years of my career and the majority of my coding for the CLR, why am I not jumping up and down for joy?&lt;/p&gt;I think it might be because what&amp;#39;s really exciting to me these days are these addictive technologies like &lt;a href="http://www.twitter.com"&gt;Twitter&lt;/a&gt;, that you can create with very simple very thin client techniques that don&amp;#39;t require something like Silverlight to work.&amp;nbsp; Perhaps this is where I&amp;#39;m not quite seeing the (silver) light.&amp;nbsp; To really try to sort out what goes into an addictive application, I&amp;#39;m trying to explore whether or not addictive technologies have things in common.&amp;nbsp; I think they do &lt;a href="http://www.twitter.com/btompkins"&gt;This blog post continued over on my twitter account:&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;....&amp;nbsp;&lt;p&gt;A final thought about Addictive Technology is that it helps if it&amp;#39;s mobile.&amp;nbsp; If I can&amp;#39;t do it on my phone at a stoplight, I&amp;#39;m not going to become addicted.&amp;nbsp; Silverlight is just one more thing I need to be sitting down at my desk for. &lt;/p&gt;&lt;p&gt;-Brendan&amp;nbsp;&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=163151" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/brendan.tompkins/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>CAPTCHA for Community Server 2007</title><link>http://codebetter.com/blogs/brendan.tompkins/archive/2007/04/27/captcha-for-community-server-2007.aspx</link><pubDate>Fri, 27 Apr 2007 16:17:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:162537</guid><dc:creator>Brendan Tompkins</dc:creator><slash:comments>34</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/brendan.tompkins/rsscomments.aspx?PostID=162537</wfw:commentRss><comments>http://codebetter.com/blogs/brendan.tompkins/archive/2007/04/27/captcha-for-community-server-2007.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;m happy to announce that CodeBetter.Com is carrying on the legacy of CAPTCHA for &lt;a href="http://codebetter.com/controlpanel/blogs/www.communityserver.org"&gt;Community Server&lt;/a&gt;.&amp;nbsp; CAPTCHA for CS2007 is the next generation of &lt;a href="http://codebetter.com/controlpanel/blogs/www.dbvt.com"&gt;CS Guru Dave Burke&amp;#39;s&lt;/a&gt; most excellent &lt;a href="http://dbvt.com/files/folders/addons/entry5198.aspx"&gt;CAPTCHA control for Community Server 2.1&lt;/a&gt;.&amp;nbsp; &lt;a href="http://weblogs.asp.net/scottgu/archive/2005/12/21/asp-net-2-0-control-adapter-architecture.aspx"&gt;This version is implemented as a Control Adapter&lt;/a&gt; which allows CAPTCHA to be added to Community Server site-wide without touching any ASPX or ASCX markup code.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://codebetter.com/files/folders/community_server_add-ons/entry162534.aspx"&gt;You can get the dll and source code here *.&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;

* Latest Version -&amp;nbsp; April 29th 2007&lt;br /&gt;

&lt;p&gt;IMPORTANT NOTE:&amp;nbsp; If the form in your ASPX control specifies a validation group, your controls must also specify the same group. Some skins that ship with CS2007 have a validation group specified for the form, but not for the controls.&amp;nbsp; The CAPTCHA control will not work for these forms.&amp;nbsp; To fix, either remove the validation group from the form code or add to all of your form&amp;#39;s controls.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;EX:&amp;nbsp; Form specifying a validation group:&lt;/p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;CSFile:CreateEntryCommentForm runat=&amp;quot;server&amp;quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageTextBoxId=&amp;quot;CommentBody&amp;quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NameTextBoxId=&amp;quot;CommentName&amp;quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RememberCheckboxId=&amp;quot;CommentRemember&amp;quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SubjectTextBoxId=&amp;quot;CommentTitle&amp;quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SubmitButtonId=&amp;quot;CommentSubmit&amp;quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UrlTextBoxId=&amp;quot;CommentWebsite&amp;quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ControlIdsToHideFromRegisteredUsers=&amp;quot;RememberWrapper,AnonymousUser&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt; ValidationGroup=&amp;quot;CreateCommentForm&amp;quot;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;
&lt;p&gt;&amp;nbsp;Must also specify the validation group in the controls to be validated:&lt;/p&gt;
&lt;img src="http://codebetter.com/aggbug.aspx?PostID=162537" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/brendan.tompkins/archive/tags/CAPTCHA/default.aspx">CAPTCHA</category><category domain="http://codebetter.com/blogs/brendan.tompkins/archive/tags/Community+Server/default.aspx">Community Server</category></item><item><title>CodeBetter.Com Community Server 2007 Upgrade!</title><link>http://codebetter.com/blogs/brendan.tompkins/archive/2007/04/20/codebetter-com-community-server-2007-upgrade.aspx</link><pubDate>Fri, 20 Apr 2007 21:05:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:162222</guid><dc:creator>Brendan Tompkins</dc:creator><slash:comments>20</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/brendan.tompkins/rsscomments.aspx?PostID=162222</wfw:commentRss><comments>http://codebetter.com/blogs/brendan.tompkins/archive/2007/04/20/codebetter-com-community-server-2007-upgrade.aspx#comments</comments><description>&lt;p&gt;If you&amp;#39;re a regular visitor.&amp;nbsp; You may have noticed that today CodeBetter.Com has a new site skin.&amp;nbsp;&amp;nbsp; Hopefully this skin is better to look at, and loads faster than our old ugly digs. &lt;br /&gt; &lt;/p&gt;&lt;p&gt;I&amp;#39;m happy to report that we&amp;#39;re up and running on &lt;a href="http://www.communityserver.org"&gt;Telligent&amp;#39;s Community Server 2007&lt;/a&gt;,&amp;nbsp; which was released earlier this week.&amp;nbsp;&amp;nbsp;  If you&amp;#39;re a CS user, you&amp;#39;ve got to check out this version.&amp;nbsp; The codebase has come leaps and bounds since the last release, with all sorts of goodness in the skinning and template departments.&amp;nbsp; It was such a pleasure to code this latest version of CodeBetter with the new bits.&amp;nbsp; All the guys over there deserve a big pat on the back.&lt;/p&gt;&lt;p&gt;One of the controls that I could not go live with with this latest version was &lt;a href="http://www.dbvt.com"&gt;Dave Burke&amp;#39;s&lt;/a&gt; outstandingly fabulous &lt;a href="http://dbvt.com/files/folders/addons/entry5198.aspx"&gt;CS CAPTCHA control&lt;/a&gt; for comment spam filtering.&amp;nbsp; His version was for CS 2.1, so I had some coding to do to get this working. I&amp;#39;m happy to report that I&amp;#39;ve built a version that can be deployed with CS 2007, and the first chance I get I&amp;#39;ll release the source and blog about it here.&amp;nbsp; Dave&amp;#39;s asked me to release it, so I guess CodeBetter will be the new home for this control.&lt;/p&gt;&lt;p&gt;(p.s. I know we have 45 validation errors, and I&amp;#39;m working on it!)&lt;br /&gt;&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=162222" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/brendan.tompkins/archive/tags/Featured/default.aspx">Featured</category></item><item><title>An Open Source Translation Dictionary for Windows Mobile</title><link>http://codebetter.com/blogs/brendan.tompkins/archive/2007/03/30/An-Open-Source-Translating-Dictionary-for-Windows-Mobile.aspx</link><pubDate>Fri, 30 Mar 2007 18:51:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:161021</guid><dc:creator>Brendan Tompkins</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/brendan.tompkins/rsscomments.aspx?PostID=161021</wfw:commentRss><comments>http://codebetter.com/blogs/brendan.tompkins/archive/2007/03/30/An-Open-Source-Translating-Dictionary-for-Windows-Mobile.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://devlicio.us/blogs/brendantompkins/archive/2007/03/29/an-open-source-free-windows-mobile-translation-dictionary.aspx"&gt;Over at Devlicio.us&lt;/a&gt; I&amp;#39;m blogging about my experiences developing an application for my Samsung Blackjack:&lt;/p&gt;&lt;p&gt;&lt;img /&gt;&amp;nbsp;&lt;img /&gt;&lt;/p&gt;&lt;img alt="samsung_i607.jpg" id="image110" src="http://www.samsunghub.com/wp-content/uploads/2006/10/samsung_i607.jpg" /&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;
&lt;br /&gt;It&amp;#39;s a Translation Dictionary with a Flashcard feature that supports multiple
dictionaries, with the ability to create and more. Currently I&amp;#39;m packaging an English-French dictionary with over 16,000 Entries, and
an English-Spanish dictionary with over 10,000.&amp;nbsp; There&amp;#39;s over 1,000 Flashcards
of common words in each Dictionary. Each term is hyperlinked when it
appears in a definition. It&amp;#39;s absolutely free and open source.&lt;br /&gt;&lt;br /&gt;Here&amp;#39;s a screenshot:&lt;br /&gt;&lt;br /&gt;&lt;img height="321" src="http://devlicio.us/photos/brendan/images/20310/original.aspx" width="240" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I&amp;#39;m going to blog about and release the dictionary loader with more dictionaries as soon as I can get some time.&amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Downloading and Installation&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;quot;Translation Dictionary v 0.1&amp;quot; is optimized and designed for
Windows Mobile.&amp;nbsp; Get it and the source code for the application it here:&amp;nbsp;&lt;/p&gt;&lt;div class="FileFileName"&gt;&lt;a href="http://devlicio.us/files/folders/20312/download.aspx"&gt;&lt;img border="0" src="http://devlicio.us/utility/filethumbnails/zip-Small.gif" /&gt;&lt;/a&gt;&lt;a href="http://devlicio.us/files/folders/20312/download.aspx"&gt; &lt;/a&gt;&lt;a href="http://devlicio.us/files/folders/20312/download.aspx" id="ctl00_ctl01_bcr_FolderGroupView1___Entrylisting1___Entries_ctl00_Name"&gt;Translation Dictoinary v 0.1 Setup&lt;/a&gt;&lt;/div&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=161021" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/brendan.tompkins/archive/tags/SQL+2005/default.aspx">SQL 2005</category><category domain="http://codebetter.com/blogs/brendan.tompkins/archive/tags/Compact+Framework/default.aspx">Compact Framework</category></item><item><title>Edit SQL 2005 Analysis Server Cube Report Models </title><link>http://codebetter.com/blogs/brendan.tompkins/archive/2007/02/28/SQL-2005-Report-Models-from-an-Analysis-Server-OLAP-Cube.aspx</link><pubDate>Wed, 28 Feb 2007 14:34:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:159301</guid><dc:creator>Brendan Tompkins</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/brendan.tompkins/rsscomments.aspx?PostID=159301</wfw:commentRss><comments>http://codebetter.com/blogs/brendan.tompkins/archive/2007/02/28/SQL-2005-Report-Models-from-an-Analysis-Server-OLAP-Cube.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;ve been spending a good portion of the year so far working with SQL Server 2005. &amp;nbsp; I have to comment that when Microsoft hits the mark with a product release, they really nail it.&amp;nbsp;&amp;nbsp; With SQL 2005 and all of its component services, they&amp;#39;ve created a hugely powerful suite of servers. It&amp;#39;s been well worth my time spent learning this new tool set. &lt;/p&gt;&lt;p&gt;The learning curve is steep, however, and there have been numerous times where I have been stumped with problems integrating the various tools, setting up servers, and using &amp;quot;SQL Server Business Development Studio&amp;quot; um.. Sorry Visual Studio.&lt;/p&gt;&lt;p&gt;One of my goals has been to create a Report Model that will simplify the ability for end users to create reports.&amp;nbsp; If you&amp;#39;re not familiar with how Report Models make Reporting Services easier to use, watch this webcast: &lt;a href="http://msevents.microsoft.com/cui/eventdetail.aspx?eventid=1032273698&amp;amp;culture=en-us"&gt;End-User Ad Hoc Reporting with SSRS (Level 300)&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Here was my problem.&amp;nbsp; After creating a report model from my cube (using the auto-generate feature of SSMS or Reporting Services)&amp;nbsp; the model really wasn&amp;#39;t usable.&amp;nbsp; Click-through entities weren&amp;#39;t setup properly, naming was not right, and there were a lot of fields I didn&amp;#39;t want the end-user report writers to see.. It was a start, but not deployment ready. &lt;/p&gt;&lt;p&gt;I was unable to use Visual Studio&amp;#39;s support for report model projects to let me create a model from an Analysis Server Cube... This functionality seems to be absent from this release, or at least wouldn&amp;#39;t work with my installation.&amp;nbsp; I did manage, in a round about way to edit my generated report models in Visual Studio: Here&amp;#39;s what I did:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 1: Add A Report Model Project to your Solution&lt;/strong&gt;: &lt;/p&gt;&lt;p&gt;The key to getting this to work was to add a Report Model Project to my solution which already contained my Analysis Server Project.&amp;nbsp; Copy the Data Source and Data Source View from your SSAS project to your Report Model Project.&amp;nbsp; This is important! Without the same named Data Source View and Data Source, your won&amp;#39;t be able to import this report model.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img /&gt;&lt;img src="http://codebetter.com/photos/brendan.tompkins/images/159305/original.aspx" /&gt;&lt;img /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 2: Export and Add your Generated Report Model (.smdl)&amp;nbsp; to your Project&lt;/strong&gt;&amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;You can use SSMS or the Reporting Services web interface to do this.&amp;nbsp; I found it easier to do this in SSMS by Right-Clicking the Model and selecting Edit.&lt;/p&gt;&lt;p&gt;&lt;img src="http://codebetter.com/photos/brendan.tompkins/images/159306/original.aspx" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Import this model into your new Report Model Project, and you should be able to edit all of the entities:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img src="http://codebetter.com/photos/brendan.tompkins/images/159307/original.aspx" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 3: Import&amp;nbsp; the Model back into SSRS, using SSMS.  &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;DO NOT publish your model back to the server using Visual Studio.&amp;nbsp; This will add some schema information to your model, and it will no longer function against your cube in Reporting services.&amp;nbsp; The key here is to use SSMS to &amp;quot;Import File&amp;quot; and import your edited .smdl model back into SSRS.&lt;/p&gt;&lt;p&gt;&lt;img src="http://codebetter.com/photos/brendan.tompkins/images/159308/original.aspx" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step 4. Re-Configure the Model&amp;#39;s Data Source&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The final step is to re-set the data source back to use the Analysis Server Cube. You&amp;#39;ll notice that the newly imported data model has an invalid data source.&amp;nbsp; Select the original cube data source:&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;img src="http://codebetter.com/photos/brendan.tompkins/images/159310/original.aspx" /&gt;&lt;img src="http://codebetter.com/photos/brendan.tompkins/images/159309/original.aspx" /&gt;&lt;/p&gt;&lt;p&gt;Once you&amp;#39;ve done this, your new model should work against your Cube, and will provide your end-user report writers a customized Model of your data.&amp;nbsp; Over time, as you customize your Cube, you will have to re-generate a model from the cube, and migrate the changes into your production report model file by hand. You&amp;#39;ll find that this can be done using a diff tool quite easily, since the .smdl file is XML.&lt;br /&gt;&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=159301" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/brendan.tompkins/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="http://codebetter.com/blogs/brendan.tompkins/archive/tags/SQL+2005/default.aspx">SQL 2005</category></item><item><title>Funny Error Message</title><link>http://codebetter.com/blogs/brendan.tompkins/archive/2006/12/18/Funny-Error-Message.aspx</link><pubDate>Mon, 18 Dec 2006 18:58:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:156461</guid><dc:creator>Brendan Tompkins</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/brendan.tompkins/rsscomments.aspx?PostID=156461</wfw:commentRss><comments>http://codebetter.com/blogs/brendan.tompkins/archive/2006/12/18/Funny-Error-Message.aspx#comments</comments><description>&lt;p&gt;While unfruitfully plodding my way through creating an OLAP cube with SSAS 2005, I saw this error today which made me chuckle:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&amp;quot;If you see this there was a major bug while creating object Dimension&amp;quot;&lt;/p&gt;&lt;/blockquote&gt;Is this the coding&amp;nbsp; equivalent of the &amp;quot;If you can read this, you&amp;#39;re too close&amp;quot; bumper stickers? &lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=156461" width="1" height="1"&gt;</description></item><item><title>Book Giveaway - Final Winner</title><link>http://codebetter.com/blogs/brendan.tompkins/archive/2006/12/15/Book-Giveaway-_2D00_-Final-Winner.aspx</link><pubDate>Fri, 15 Dec 2006 18:34:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:156370</guid><dc:creator>Brendan Tompkins</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/brendan.tompkins/rsscomments.aspx?PostID=156370</wfw:commentRss><comments>http://codebetter.com/blogs/brendan.tompkins/archive/2006/12/15/Book-Giveaway-_2D00_-Final-Winner.aspx#comments</comments><description>&lt;p&gt;Congratulations to the final winner of &lt;a href="http://codebetter.com/blogs/brendan.tompkins/archive/2006/10/23/The-Great-CodeBetter-Eight_2D00_Week-Fall-Book-Giveaway.aspx" id="bp___v___ctl00_ctl00_bcr_r___postlist___EntryItems_ctl09_PostTitle"&gt;The Great CodeBetter Eight-Week Fall Book Giveaway,&amp;nbsp;&lt;/a&gt; &lt;a href="http://blogs.clearscreen.com/migs"&gt;&lt;span id="_user_miguel@ilitia.com" style="color:#00681c;"&gt;Miguel Jimenez Antelo&lt;/span&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Miguel gets a copy of :&amp;nbsp;&lt;/p&gt;&lt;div id="cover"&gt;&lt;div id="cover"&gt;&lt;img alt="Essential ASP.NET 2.0" src="http://www.awprofessional.com/ShowCover.asp?isbn=0321237706&amp;amp;type=c" width="125" /&gt; 
&lt;p&gt;&lt;a href="http://www.keithrull.com/ct.ashx?id=17b5c77c-b2c5-4dd6-9a50-85b6f91643f7&amp;amp;url=http%3a%2f%2fwww.awprofessional.com%2fbookstore%2fproduct.asp%3fisbn%3d0321237706%26rl%3d1"&gt;&lt;font color="#000000"&gt;Essential ASP.NET 2.0&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;By &lt;a href="http://www.keithrull.com/ct.ashx?id=17b5c77c-b2c5-4dd6-9a50-85b6f91643f7&amp;amp;url=http%3a%2f%2fwww.awprofessional.com%2fauthors%2fbio.asp%3fa%3dc44b7983-3d05-4f6b-8409-db6f1504cc52"&gt;&lt;font color="#000000"&gt;Fritz Onion&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://www.keithrull.com/ct.ashx?id=17b5c77c-b2c5-4dd6-9a50-85b6f91643f7&amp;amp;url=http%3a%2f%2fwww.awprofessional.com%2fauthors%2fbio.asp%3fa%3dec47c64d-afa4-44f8-a730-e121257b5e15"&gt;&lt;font color="#000000"&gt;Keith Brown&lt;/font&gt;&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;We&amp;#39;ll be getting some more books to give away, and next time, I promise to make the contest more interesting. &lt;img src="http://codebetter.com/emoticons/emotion-10.gif" alt="Embarrassed" /&gt; If anyone has any good ideas, let me know. &lt;/p&gt;&lt;p&gt;-Brendan&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id="cover"&gt;
&lt;/div&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=156370" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/brendan.tompkins/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>GIF Image Color Reduction in .NET</title><link>http://codebetter.com/blogs/brendan.tompkins/archive/2006/12/08/GIF-Image-Color-Reduction-in-.NET.aspx</link><pubDate>Fri, 08 Dec 2006 13:26:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:156126</guid><dc:creator>Brendan Tompkins</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/brendan.tompkins/rsscomments.aspx?PostID=156126</wfw:commentRss><comments>http://codebetter.com/blogs/brendan.tompkins/archive/2006/12/08/GIF-Image-Color-Reduction-in-.NET.aspx#comments</comments><description>&lt;p&gt;A while back, I posed a solution for creating an adaptive GIF image from a JPEG image source in .NET, &lt;a href="http://codebetter.com/blogs/brendan.tompkins/archive/2004/01/26/6103.aspx"&gt;Use GDI+ to Save Crystal-Clear GIF Images with .NET&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Recently a question was asked in the comments about how to save a 16-color GIF image using this library. It&amp;#39;s pretty simple actually, in fact, here&amp;#39;s the code:&lt;br /&gt;

&lt;/p&gt;&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;Image&lt;/span&gt; img = &lt;span&gt;Image&lt;/span&gt;.FromFile(&lt;span&gt;&amp;quot;original_image.gif&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;OctreeQuantizer&lt;/span&gt; quantizer = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span&gt;OctreeQuantizer&lt;/span&gt;(15, 4);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;using&lt;/span&gt; ( &lt;span&gt;Bitmap&lt;/span&gt; quantized = quantizer.Quantize ( img ) )&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; quantized.Save(&lt;span&gt;&amp;quot;new_image.gif&amp;quot;&lt;/span&gt;, &lt;span&gt;ImageFormat&lt;/span&gt;.Gif);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;The OctreeQuantizer class&amp;#39; constructor takes two parameters, the size of the color array (zero-based) and the bitdepth of the image.&amp;nbsp; You can use this to create an image with varying palette sizes. &lt;/p&gt;&lt;p&gt;I thought that a quick downloadable example project would be in order, since there seems to be a lot of interest in saving gif images with adaptive palettes in .NET.&lt;/p&gt;&lt;p&gt;&lt;a href="http://codebetter.com/blogs/brendan.tompkins/archive/2007/06/14/gif-image-color-quantizer-now-with-safe-goodness.aspx"&gt;See this post here for the latest on this project&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=156126" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/brendan.tompkins/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Book Giveaway - Week 7 Winner</title><link>http://codebetter.com/blogs/brendan.tompkins/archive/2006/12/08/Book-Giveaway-_2D00_-Week-7.aspx</link><pubDate>Fri, 08 Dec 2006 12:49:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:156120</guid><dc:creator>Brendan Tompkins</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/brendan.tompkins/rsscomments.aspx?PostID=156120</wfw:commentRss><comments>http://codebetter.com/blogs/brendan.tompkins/archive/2006/12/08/Book-Giveaway-_2D00_-Week-7.aspx#comments</comments><description>&lt;p&gt;Congratulations to Week 7 winner &lt;a href="http://devpinoy.org/blogs/keithrull/"&gt;Keith Rull!&lt;/a&gt;&lt;strong&gt;&amp;nbsp; Keith runs &lt;a href="http://codebetter.com/controlpanel/blogs/www.devpinoy.com"&gt;Devpinoy.Org&lt;/a&gt;, a &lt;/strong&gt;Filipino Developers Community... definitely check it out. Keith gets a copy of&lt;strong&gt; &lt;/strong&gt;&lt;a href="http://www.samspublishing.com/bookstore/product.asp?isbn=0672324539&amp;amp;rl=1"&gt;Data Structures and Algorithms in Java, 2nd Edition&lt;/a&gt; by &lt;a href="http://www.samspublishing.com/authors/bio.asp?a=e8178a8c-d171-4b68-a507-127de6ff7b9c"&gt;Robert LaFore&lt;/a&gt;.&lt;/p&gt;&lt;div id="cover"&gt;&lt;img alt="Data Structures and Algorithms in Java, 2nd Edition" src="http://www.samspublishing.com/ShowCover.asp?isbn=0672324539&amp;amp;type=c" width="125" /&gt;&lt;/div&gt;&lt;div id="cover"&gt;&amp;nbsp;&lt;/div&gt;&lt;div id="cover"&gt;One more week left, and it&amp;#39;s a doosey! &lt;/div&gt;&lt;div id="cover"&gt;&amp;nbsp;&lt;/div&gt;&lt;div id="cover"&gt;&lt;div id="cover"&gt;&lt;img alt="Essential ASP.NET 2.0" src="http://www.awprofessional.com/ShowCover.asp?isbn=0321237706&amp;amp;type=c" width="125" /&gt; 
&lt;p&gt;&lt;a href="http://www.keithrull.com/ct.ashx?id=17b5c77c-b2c5-4dd6-9a50-85b6f91643f7&amp;amp;url=http%3a%2f%2fwww.awprofessional.com%2fbookstore%2fproduct.asp%3fisbn%3d0321237706%26rl%3d1"&gt;&lt;font color="#000000"&gt;Essential ASP.NET 2.0&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;By &lt;a href="http://www.keithrull.com/ct.ashx?id=17b5c77c-b2c5-4dd6-9a50-85b6f91643f7&amp;amp;url=http%3a%2f%2fwww.awprofessional.com%2fauthors%2fbio.asp%3fa%3dc44b7983-3d05-4f6b-8409-db6f1504cc52"&gt;&lt;font color="#000000"&gt;Fritz Onion&lt;/font&gt;&lt;/a&gt;, &lt;a href="http://www.keithrull.com/ct.ashx?id=17b5c77c-b2c5-4dd6-9a50-85b6f91643f7&amp;amp;url=http%3a%2f%2fwww.awprofessional.com%2fauthors%2fbio.asp%3fa%3dec47c64d-afa4-44f8-a730-e121257b5e15"&gt;&lt;font color="#000000"&gt;Keith Brown&lt;/font&gt;&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id="cover"&gt;
&lt;/div&gt;More about &lt;a href="http://codebetter.com/blogs/brendan.tompkins/archive/2006/10/23/The-Great-CodeBetter-Eight_2D00_Week-Fall-Book-Giveaway.aspx" id="bp___v___ctl00_ctl00_bcr_r___postlist___EntryItems_ctl09_PostTitle"&gt;The Great CodeBetter Eight-Week Fall Book Giveaway here.&lt;/a&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=156120" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/brendan.tompkins/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Book Giveaway - Week 6 Winner</title><link>http://codebetter.com/blogs/brendan.tompkins/archive/2006/12/01/Book-Giveaway-_2D00_-Week-6-Winner.aspx</link><pubDate>Fri, 01 Dec 2006 12:49:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:155786</guid><dc:creator>Brendan Tompkins</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/brendan.tompkins/rsscomments.aspx?PostID=155786</wfw:commentRss><comments>http://codebetter.com/blogs/brendan.tompkins/archive/2006/12/01/Book-Giveaway-_2D00_-Week-6-Winner.aspx#comments</comments><description>&lt;p&gt;Congratulations to Week 6 winner &lt;a href="http://lfoust.wordpress.com/2006/10/27/the-spice-of-life/"&gt;Luke Foust&lt;/a&gt; who will be getting &lt;a href="http://www.samspublishing.com/bookstore/product.asp?isbn=0672325802&amp;amp;rl=1"&gt;Microsoft Visual C# .NET 2003 Developer&amp;#39;s Cookbook &lt;/a&gt;by &lt;a href="http://www.samspublishing.com/authors/bio.asp?a=6d8bceda-3a7b-46b7-acab-2f0726898fe5"&gt;Mark Schmidt&lt;/a&gt;, &lt;a href="http://www.samspublishing.com/authors/bio.asp?a=fc0c88c9-158a-44fd-bd94-7b4a1c43b9ba"&gt;Simon Robinson&lt;/a&gt;.&lt;/p&gt;&lt;div id="cover"&gt;&lt;img alt="Microsoft Visual C# .NET 2003 Developer&amp;#39;s Cookbook" src="http://www.samspublishing.com/ShowCover.asp?isbn=0672325802&amp;amp;type=c" width="125" /&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;Next week up for grabs is &lt;/strong&gt;&lt;a href="http://www.samspublishing.com/bookstore/product.asp?isbn=0672324539&amp;amp;rl=1"&gt;Data Structures and Algorithms in Java, 2nd Edition&lt;/a&gt; by &lt;a href="http://www.samspublishing.com/authors/bio.asp?a=e8178a8c-d171-4b68-a507-127de6ff7b9c"&gt;Robert LaFore&lt;/a&gt;.&lt;/p&gt;&lt;div id="cover"&gt;&lt;img alt="Data Structures and Algorithms in Java, 2nd Edition" src="http://www.samspublishing.com/ShowCover.asp?isbn=0672324539&amp;amp;type=c" width="125" /&gt;&lt;/div&gt;&lt;div id="cover"&gt;&amp;nbsp;&lt;/div&gt;&lt;div id="cover"&gt;
&lt;/div&gt;More about &lt;a href="http://codebetter.com/blogs/brendan.tompkins/archive/2006/10/23/The-Great-CodeBetter-Eight_2D00_Week-Fall-Book-Giveaway.aspx" id="bp___v___ctl00_ctl00_bcr_r___postlist___EntryItems_ctl09_PostTitle"&gt;The Great CodeBetter Eight-Week Fall Book Giveaway here.&lt;/a&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=155786" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/brendan.tompkins/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>CodeBetter.Com Breaks the 5 Digit Bloglines Subs Barrier!</title><link>http://codebetter.com/blogs/brendan.tompkins/archive/2006/11/30/CodeBetter.Com-Breaks-the-5-Digit-Bloglines-Subs-Barrier_2100_.aspx</link><pubDate>Thu, 30 Nov 2006 14:06:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:155745</guid><dc:creator>Brendan Tompkins</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/brendan.tompkins/rsscomments.aspx?PostID=155745</wfw:commentRss><comments>http://codebetter.com/blogs/brendan.tompkins/archive/2006/11/30/CodeBetter.Com-Breaks-the-5-Digit-Bloglines-Subs-Barrier_2100_.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;ve been waiting for this for a while now, but today, &lt;a href="http://www.bloglines.com/userdir?siteid=1077773"&gt;CodeBetter.Com has reached 10,000 Bloglines subscriptions!&lt;/a&gt;&amp;nbsp; Just wanted to say congratulations to the CodeBetter.Com guys for the great blogging that&amp;#39;s gotten us here, and to everyone who participates in this community!&lt;br /&gt;&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=155745" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/brendan.tompkins/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item></channel></rss>