<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-22626958</id><updated>2011-12-14T21:44:58.864-05:00</updated><category term='netflixprize'/><category term='global.asax'/><category term='debug'/><category term='setup'/><category term='flash'/><category term='msdn'/><category term='winforms'/><category term='smtp'/><category term='tool'/><category term='howto'/><category term='varozhka'/><category term='example'/><category term='nant'/><category term='boost'/><category term='msi'/><category term='api'/><category term='open source'/><category term='ChangePassword'/><category term='wix'/><category term='chart'/><category term='OSS'/><category term='c#'/><category term='visual studio'/><category term='netflix prize'/><category term='anonymous'/><category term='google chart'/><category term='netflix'/><category term='build'/><category term='installer'/><category term='membership'/><category term='ngchart'/><category term='asp.net'/><category term='.net'/><category term='IE'/><category term='webdev'/><category term='JavaScript'/><category term='vs2005'/><category term='vs2003'/><category term='c++'/><category term='atlas'/><category term='utility'/><category term='google'/><category term='sitemap'/><title type='text'>Random stuff</title><subtitle type='html'>...moving from C++ to C#</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>31</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-22626958.post-222287776804849794</id><published>2008-07-20T08:33:00.005-04:00</published><updated>2008-07-20T08:50:35.835-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='OSS'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='google chart'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><category scheme='http://www.blogger.com/atom/ns#' term='ngchart'/><title type='text'>Version 0.6 of NGChart</title><content type='html'>New version of &lt;a href="http://code.google.com/p/ngchart/" title="Home of .NET wrapper for Google Chart API"&gt;NGChart library&lt;/a&gt; supports QR codes.&lt;br /&gt;&lt;br /&gt;From &lt;a href="http://code.google.com/apis/chart/#qrcodes" title="QR Codes overview section in the docs"&gt;Google Chart API docs&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;QR Codes are a popular type of two-dimensional barcode, which are  also known as hardlinks or  physical world hyperlinks. QR Codes store text which can be a hyperlink, contact information, telephone number, even whole verses of poems!&lt;/blockquote&gt;&lt;br /&gt;This is how encoded "Hello world" message looks like:&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?chs=150x150&amp;amp;cht=qr&amp;amp;chl=Hello%20world&amp;amp;choe=UTF-8" alt="QR Codes sample image" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;C# code for the image:&lt;br /&gt;&lt;br /&gt;&lt;div    style="background: rgb(238, 238, 238) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:Courier New;font-size:9pt;color:black;"&gt;&lt;br /&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;QRCodes&lt;/span&gt; chart = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;QRCodes&lt;/span&gt;(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ChartSize&lt;/span&gt;(150, 150), &lt;span style="color: rgb(163, 21, 21);"&gt;"Hello world"&lt;/span&gt;);&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-222287776804849794?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/222287776804849794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=222287776804849794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/222287776804849794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/222287776804849794'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2008/07/version-06-of-ngchart.html' title='Version 0.6 of NGChart'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-6808908307270208673</id><published>2007-12-09T15:10:00.001-05:00</published><updated>2007-12-09T15:10:39.338-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='example'/><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='OSS'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='google chart'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><category scheme='http://www.blogger.com/atom/ns#' term='ngchart'/><title type='text'>Updated NGChart library (.NET wrapper for Google Chart API)</title><content type='html'>&lt;p&gt;&lt;a title="Project page for NGChart" href="http://code.google.com/p/ngchart/" target="_blank"&gt;NGChart&lt;/a&gt; was updated with the new features:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Bar charts&lt;/strong&gt; &lt;/p&gt; &lt;p&gt;&lt;a title="How to generate a bar chart with Google Chart API with NGChart" href="http://code.google.com/p/ngchart/wiki/NGChartSamples" target="_blank"&gt;&lt;img src="http://chart.apis.google.com/chart?cht=bvg&amp;amp;chs=300x125&amp;amp;chd=s:UBZaz,HM85E&amp;amp;chco=1E90FF,9ACD32"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Pie charts with labels&lt;/strong&gt; &lt;/p&gt; &lt;p&gt;&lt;a title="Sample of pie chart with labels" href="http://code.google.com/p/ngchart/wiki/NGChartSamples" target="_blank"&gt;&lt;img src="http://chart.apis.google.com/chart?chl=DodgerBlue|Orchid|DarkSalmon&amp;amp;cht=p3&amp;amp;chs=400x150&amp;amp;chd=s:Zc1&amp;amp;chco=1E90FFFF,DA70D6FF,E9967AFF"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Chart title&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="How to generate a chart with title with Google Chart API with NGChart" href="http://code.google.com/p/ngchart/wiki/NGChartSamples" target="_blank"&gt;&lt;img src="http://chart.apis.google.com/chart?cht=lc&amp;amp;chs=200x125&amp;amp;chd=s:ABZaz09B&amp;amp;chco=1E90FF&amp;amp;chtt=Line+chart|simple+one&amp;amp;chts=808000,10"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;And the project wiki now has &lt;a title="How to generate a chart with Google Chart API with NGChart" href="http://code.google.com/p/ngchart/wiki/NGChartSamples" target="_blank"&gt;Samples page&lt;/a&gt;. &lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:3b737b9c-c9d3-46d6-a355-134d007770e4" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;del.icio.us tags: &lt;a href="http://del.icio.us/popular/google%20chart" rel="tag"&gt;google chart&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/google" rel="tag"&gt;google&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/.net" rel="tag"&gt;.net&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/C#" rel="tag"&gt;C#&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/csharp" rel="tag"&gt;csharp&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/ngchart" rel="tag"&gt;ngchart&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/example" rel="tag"&gt;example&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/library" rel="tag"&gt;library&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/wrapper" rel="tag"&gt;wrapper&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/webdev" rel="tag"&gt;webdev&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/open%20source" rel="tag"&gt;open source&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/OSS" rel="tag"&gt;OSS&lt;/a&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:3a0fc3ec-d56e-4496-8432-f2b10a8bf980" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/google%20chart" rel="tag"&gt;google chart&lt;/a&gt;, &lt;a href="http://technorati.com/tags/google" rel="tag"&gt;google&lt;/a&gt;, &lt;a href="http://technorati.com/tags/.net" rel="tag"&gt;.net&lt;/a&gt;, &lt;a href="http://technorati.com/tags/C#" rel="tag"&gt;C#&lt;/a&gt;, &lt;a href="http://technorati.com/tags/csharp" rel="tag"&gt;csharp&lt;/a&gt;, &lt;a href="http://technorati.com/tags/ngchart" rel="tag"&gt;ngchart&lt;/a&gt;, &lt;a href="http://technorati.com/tags/example" rel="tag"&gt;example&lt;/a&gt;, &lt;a href="http://technorati.com/tags/library" rel="tag"&gt;library&lt;/a&gt;, &lt;a href="http://technorati.com/tags/wrapper" rel="tag"&gt;wrapper&lt;/a&gt;, &lt;a href="http://technorati.com/tags/webdev" rel="tag"&gt;webdev&lt;/a&gt;, &lt;a href="http://technorati.com/tags/open%20source" rel="tag"&gt;open source&lt;/a&gt;, &lt;a href="http://technorati.com/tags/OSS" rel="tag"&gt;OSS&lt;/a&gt;&lt;/div&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f6b44d26-e38d-4a9e-92d8-e3b652b5f093" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;IceRocket tags: &lt;a href="http://blogs.icerocket.com/search?q=google%20chart" rel="tag"&gt;google chart&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=google" rel="tag"&gt;google&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=.net" rel="tag"&gt;.net&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=C#" rel="tag"&gt;C#&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=csharp" rel="tag"&gt;csharp&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=ngchart" rel="tag"&gt;ngchart&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=example" rel="tag"&gt;example&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=library" rel="tag"&gt;library&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=wrapper" rel="tag"&gt;wrapper&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=webdev" rel="tag"&gt;webdev&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=open%20source" rel="tag"&gt;open source&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=OSS" rel="tag"&gt;OSS&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-6808908307270208673?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/6808908307270208673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=6808908307270208673' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/6808908307270208673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/6808908307270208673'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2007/12/updated-ngchart-library-net-wrapper-for.html' title='Updated NGChart library (.NET wrapper for Google Chart API)'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-2538034468405990448</id><published>2007-12-07T17:50:00.001-05:00</published><updated>2007-12-07T17:50:30.599-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='example'/><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='OSS'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='google chart'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='chart'/><title type='text'>.NET wrapper for Google Chart API</title><content type='html'>&lt;p&gt;As you may know, Google created a simple and easy way to dynamically generate charts to use in web projects with the new &lt;a title="Homepage of Google Chart API" href="http://code.google.com/apis/chart/" target="_blank"&gt;Google Chart API&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;I started a &lt;a title="The .NET Chart project page at the Google Code site." href="http://code.google.com/p/ngchart/" target="_blank"&gt;project&lt;/a&gt; to wrap the library to simplify usage of it in .NET projects.&lt;/p&gt; &lt;p&gt;As example - say, you need to visually compare two line charts:&lt;/p&gt; &lt;p class="code"&gt;Chart chart = new Chart(ChartType.Line,&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;&amp;nbsp;&amp;nbsp; new ChartSize(200, 125),&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;&amp;nbsp;&amp;nbsp; new ChartData(new int[][]&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;&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;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;&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;&amp;nbsp; new int[] { 0, 1, 25, 26, 51, 52, 61, 1 }, &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;&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;&amp;nbsp; new int[] {7, 12, 60, 57, 4}&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;&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;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;&amp;nbsp;&amp;nbsp; new Color[] { Color.DodgerBlue, Color.Gainsboro }); &lt;br&gt;return chart.ToString(); &lt;/p&gt; &lt;p&gt;It will generate the following url:&lt;/p&gt; &lt;p&gt;&lt;a title="Chart sample" href="http://chart.apis.google.com/chart?cht=lc&amp;amp;chs=200x125&amp;amp;chd=s:ABZaz09B,HM85E&amp;amp;chco=1E90FFFF,DCDCDCFF" target="_blank"&gt;http://chart.apis.google.com/chart?cht=lc&amp;amp;chs=200x125&amp;amp;chd=s:ABZaz09B,HM85E&amp;amp;chco=1E90FFFF,DCDCDCFF&lt;/a&gt;&lt;/p&gt; &lt;p&gt;And the generated url shows the following chart:&lt;/p&gt; &lt;p&gt;&lt;img alt="Generated chart" src="http://chart.apis.google.com/chart?cht=lc&amp;amp;chs=200x125&amp;amp;chd=s:ABZaz09B,HM85E&amp;amp;chco=1E90FFFF,DCDCDCFF"&gt; &lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:115c4b56-f7a1-4326-af9c-d39de9189bdb" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;del.icio.us tags: &lt;a href="http://del.icio.us/popular/google%20chart" rel="tag"&gt;google chart&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/google" rel="tag"&gt;google&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/.net" rel="tag"&gt;.net&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/c#" rel="tag"&gt;c#&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/api" rel="tag"&gt;api&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/example" rel="tag"&gt;example&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/OSS" rel="tag"&gt;OSS&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/open%20source" rel="tag"&gt;open source&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/chart" rel="tag"&gt;chart&lt;/a&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:4bda5f00-0212-4975-9fcb-fbc925475cbd" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/google%20chart" rel="tag"&gt;google chart&lt;/a&gt;, &lt;a href="http://technorati.com/tags/google" rel="tag"&gt;google&lt;/a&gt;, &lt;a href="http://technorati.com/tags/.net" rel="tag"&gt;.net&lt;/a&gt;, &lt;a href="http://technorati.com/tags/c#" rel="tag"&gt;c#&lt;/a&gt;, &lt;a href="http://technorati.com/tags/api" rel="tag"&gt;api&lt;/a&gt;, &lt;a href="http://technorati.com/tags/example" rel="tag"&gt;example&lt;/a&gt;, &lt;a href="http://technorati.com/tags/OSS" rel="tag"&gt;OSS&lt;/a&gt;, &lt;a href="http://technorati.com/tags/open%20source" rel="tag"&gt;open source&lt;/a&gt;, &lt;a href="http://technorati.com/tags/chart" rel="tag"&gt;chart&lt;/a&gt;&lt;/div&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ca7ff6ad-4c33-4f5d-93f1-11dca1b7d3de" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;IceRocket tags: &lt;a href="http://blogs.icerocket.com/search?q=google%20chart" rel="tag"&gt;google chart&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=google" rel="tag"&gt;google&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=.net" rel="tag"&gt;.net&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=c#" rel="tag"&gt;c#&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=api" rel="tag"&gt;api&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=example" rel="tag"&gt;example&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=OSS" rel="tag"&gt;OSS&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=open%20source" rel="tag"&gt;open source&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=chart" rel="tag"&gt;chart&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-2538034468405990448?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/2538034468405990448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=2538034468405990448' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/2538034468405990448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/2538034468405990448'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2007/12/net-wrapper-for-google-chart-api.html' title='.NET wrapper for Google Chart API'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-2414054893905281554</id><published>2007-09-16T11:41:00.001-04:00</published><updated>2007-09-16T11:41:19.276-04:00</updated><title type='text'>Dell laptop and microphone problems</title><content type='html'>&lt;p&gt;Suddenly, mic stopped working in my Inspiron 6400 Dell laptop. All audio devices are from SigmaTel, and non of my actions (like, turn on Microphone boost) did not help.&lt;/p&gt; &lt;p&gt;The soluiton I found - Go to &lt;strong&gt;Control Panel&lt;/strong&gt; and Open &lt;strong&gt;SigmaTel Audio&lt;/strong&gt; applet. It contains a single checkbox &lt;strong&gt;Allow reconfiguration Pop-Ups&lt;/strong&gt;. You should check the box, and re-insert the microphone. You should see Audio System Event: "The system has detected an audion device connection event." Choose &lt;strong&gt;Microphone&lt;/strong&gt; there and hit &lt;strong&gt;Ok&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:61f75158-31c4-4332-aa4d-694d57606c3a" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/vista" rel="tag"&gt;vista&lt;/a&gt;, &lt;a href="http://technorati.com/tags/microphone" rel="tag"&gt;microphone&lt;/a&gt;, &lt;a href="http://technorati.com/tags/problem" rel="tag"&gt;problem&lt;/a&gt;, &lt;a href="http://technorati.com/tags/solution" rel="tag"&gt;solution&lt;/a&gt;, &lt;a href="http://technorati.com/tags/troubleshooting" rel="tag"&gt;troubleshooting&lt;/a&gt;, &lt;a href="http://technorati.com/tags/fix" rel="tag"&gt;fix&lt;/a&gt;, &lt;a href="http://technorati.com/tags/mic" rel="tag"&gt;mic&lt;/a&gt;, &lt;a href="http://technorati.com/tags/dell" rel="tag"&gt;dell&lt;/a&gt;, &lt;a href="http://technorati.com/tags/laptop" rel="tag"&gt;laptop&lt;/a&gt;, &lt;a href="http://technorati.com/tags/sigmatel" rel="tag"&gt;sigmatel&lt;/a&gt;, &lt;a href="http://technorati.com/tags/inspiron%206400" rel="tag"&gt;inspiron 6400&lt;/a&gt;, &lt;a href="http://technorati.com/tags/audio" rel="tag"&gt;audio&lt;/a&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:eafe3def-0788-497c-9f24-2679c17c93d8" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;del.icio.us tags: &lt;a href="http://del.icio.us/popular/vista" rel="tag"&gt;vista&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/microphone" rel="tag"&gt;microphone&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/problem" rel="tag"&gt;problem&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/solution" rel="tag"&gt;solution&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/troubleshooting" rel="tag"&gt;troubleshooting&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/fix" rel="tag"&gt;fix&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/mic" rel="tag"&gt;mic&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/dell" rel="tag"&gt;dell&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/laptop" rel="tag"&gt;laptop&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/sigmatel" rel="tag"&gt;sigmatel&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/inspiron%206400" rel="tag"&gt;inspiron 6400&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/audio" rel="tag"&gt;audio&lt;/a&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:386cf1d2-489b-47c0-81be-9c09df8cb74f" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;IceRocket tags: &lt;a href="http://blogs.icerocket.com/search?q=vista" rel="tag"&gt;vista&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=microphone" rel="tag"&gt;microphone&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=problem" rel="tag"&gt;problem&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=solution" rel="tag"&gt;solution&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=troubleshooting" rel="tag"&gt;troubleshooting&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=fix" rel="tag"&gt;fix&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=mic" rel="tag"&gt;mic&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=dell" rel="tag"&gt;dell&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=laptop" rel="tag"&gt;laptop&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=sigmatel" rel="tag"&gt;sigmatel&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=inspiron%206400" rel="tag"&gt;inspiron 6400&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=audio" rel="tag"&gt;audio&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-2414054893905281554?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/2414054893905281554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=2414054893905281554' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/2414054893905281554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/2414054893905281554'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2007/09/dell-laptop-and-microphone-problems.html' title='Dell laptop and microphone problems'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-2171675205548693124</id><published>2007-08-27T16:51:00.001-04:00</published><updated>2007-08-27T16:55:17.742-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='anonymous'/><category scheme='http://www.blogger.com/atom/ns#' term='global.asax'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='membership'/><title type='text'>Anonymous identification in ASP.NET 2.0 (nitpicking)</title><content type='html'>&lt;p&gt;MSDN page on &lt;strong&gt;HttpRequest.AnonymousID&lt;/strong&gt; says that the generated anonymous ID can be changed in &lt;strong&gt;AnonymousIdentification_OnCreate&lt;/strong&gt; handler. But in reality you should use &lt;strong&gt;AnonymousIdentification_Creating&lt;/strong&gt; handler (as it said in MSDN page on &lt;strong&gt;AnonymousIdentificationEventArgs&lt;/strong&gt; class).&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-2171675205548693124?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/2171675205548693124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=2171675205548693124' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/2171675205548693124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/2171675205548693124'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2007/08/anonymous-identification-in-aspnet-20.html' title='Anonymous identification in ASP.NET 2.0 (nitpicking)'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-2774100685136916395</id><published>2007-08-18T06:57:00.001-04:00</published><updated>2007-08-18T06:57:20.611-04:00</updated><title type='text'>System disk cleanup (part 1)</title><content type='html'>&lt;p&gt;Once a month I run out of free space at disk C: and everytime it's harder and harder to find what is safe to delete. I decided to create a list of temporary stuff which is safe to delete, and a&amp;nbsp;list of utilities I'm using.&lt;/p&gt; &lt;p&gt;Before you start to delete&amp;nbsp;files - &amp;nbsp;it's a good idea to&amp;nbsp;find out first who ate all the disk space. So you'll be sure you&amp;nbsp;concentrated on the big files and folders. And get the required free disk space much faster ;)&lt;/p&gt; &lt;p&gt;Personally, I would recommend a great utility to visualise the disk usage - &lt;a title="Homepage of WinDirStat utility" href="http://windirstat.info/" target="_blank"&gt;WinDirStat&lt;/a&gt;. It's&amp;nbsp;open source software and hosted at &lt;a title="WinDirStat development page at SourceForge.net" href="http://sourceforge.net/projects/windirstat/" target="_blank"&gt;SourceForge.net&lt;/a&gt;, free to use, small, fast&amp;nbsp;and pretty simple - start it and select a disk drive you would like to analyze. In a minute you will have a tree of folders sorted by size. In addition it has "treemap" feature&amp;nbsp;which gives you visual feeling of what and how is big.&lt;/p&gt; &lt;p&gt;&lt;a href="http://windirstat.info/" target="_new" atomicselection="true"&gt;&lt;img alt="Screenshot of disk space usage shown by WinDirStat " src="http://aycu06.webshots.com/image/23925/2001739718232297496_rs.jpg"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Try it. I bet you'll find a lot of unused stuff.&lt;/p&gt; &lt;p&gt;This is a first part of "System Disk Cleanup" series. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:1ec511fa-6007-4f21-a93a-b40a7581fa97" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/disk%20cleanup" rel="tag"&gt;disk cleanup&lt;/a&gt;, &lt;a href="http://technorati.com/tags/cleanup" rel="tag"&gt;cleanup&lt;/a&gt;, &lt;a href="http://technorati.com/tags/disk%20space" rel="tag"&gt;disk space&lt;/a&gt;, &lt;a href="http://technorati.com/tags/system%20disk" rel="tag"&gt;system disk&lt;/a&gt;, &lt;a href="http://technorati.com/tags/disk%20usage" rel="tag"&gt;disk usage&lt;/a&gt;, &lt;a href="http://technorati.com/tags/windirstat" rel="tag"&gt;windirstat&lt;/a&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:455b4e46-8bcc-4bc8-a872-2c04769e983b" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;del.icio.us tags: &lt;a href="http://del.icio.us/popular/disk%20cleanup" rel="tag"&gt;disk cleanup&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/cleanup" rel="tag"&gt;cleanup&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/disk%20space" rel="tag"&gt;disk space&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/system%20disk" rel="tag"&gt;system disk&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/disk%20usage" rel="tag"&gt;disk usage&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/windirstat" rel="tag"&gt;windirstat&lt;/a&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:19a96c00-6dd7-4964-91cd-52ea2e8aeb7c" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;BuzzNet tags: &lt;a href="http://www.buzznet.com/tags/disk%20cleanup/" rel="tag"&gt;disk cleanup&lt;/a&gt;, &lt;a href="http://www.buzznet.com/tags/cleanup/" rel="tag"&gt;cleanup&lt;/a&gt;, &lt;a href="http://www.buzznet.com/tags/disk%20space/" rel="tag"&gt;disk space&lt;/a&gt;, &lt;a href="http://www.buzznet.com/tags/system%20disk/" rel="tag"&gt;system disk&lt;/a&gt;, &lt;a href="http://www.buzznet.com/tags/disk%20usage/" rel="tag"&gt;disk usage&lt;/a&gt;, &lt;a href="http://www.buzznet.com/tags/windirstat/" rel="tag"&gt;windirstat&lt;/a&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:0c963436-a113-4296-b7dc-61c0aa7a3f64" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;IceRocket tags: &lt;a href="http://blogs.icerocket.com/search?q=disk%20cleanup" rel="tag"&gt;disk cleanup&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=cleanup" rel="tag"&gt;cleanup&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=disk%20space" rel="tag"&gt;disk space&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=system%20disk" rel="tag"&gt;system disk&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=disk%20usage" rel="tag"&gt;disk usage&lt;/a&gt;, &lt;a href="http://blogs.icerocket.com/search?q=windirstat" rel="tag"&gt;windirstat&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-2774100685136916395?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/2774100685136916395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=2774100685136916395' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/2774100685136916395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/2774100685136916395'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2007/08/system-disk-cleanup-part-1.html' title='System disk cleanup (part 1)'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-3140743909481478317</id><published>2007-06-21T17:17:00.001-04:00</published><updated>2007-06-21T17:30:07.248-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smtp'/><category scheme='http://www.blogger.com/atom/ns#' term='ChangePassword'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><title type='text'>Send an email by GMail from ASP.NET 2.0</title><content type='html'>&lt;p&gt;If you try to use &lt;strong&gt;&lt;a title="MSDN page about ChangePassword control" href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.changepassword(vs.80).aspx" target="_blank"&gt;ChangePassword&lt;/a&gt; &lt;/strong&gt;control with GMail server in your settings, you'll probably get failed. To fix that you need to use SSL to send an email, and also - set SMTP server port to 587.&lt;/p&gt; &lt;p&gt;To use SSL add a handler to &lt;strong&gt;&lt;a title="Help page on SendingMail event" href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.changepassword.sendingmail(VS.80).aspx" target="_blank"&gt;SendingMail&lt;/a&gt;&lt;/strong&gt; event of the control with the following body:&lt;/p&gt; &lt;div style="border-right: #000 1px solid; border-top: #000 1px solid; font-size: 8pt; border-left: #000 1px solid; color: black; border-bottom: #000 1px solid; font-family: courier new"&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; _ctrlPasswordRecovery_SendingMail(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: teal"&gt;MailMessageEventArgs&lt;/span&gt; e)&lt;/p&gt; &lt;p style="margin: 0px"&gt;{&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: green"&gt;// send the same email, but with SSL enable&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: teal"&gt;SmtpClient&lt;/span&gt; client = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;SmtpClient&lt;/span&gt;();&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; client.EnableSsl = &lt;span style="color: blue"&gt;true&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; client.Send(e.Message);&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; &lt;span style="color: green"&gt;// cancel the sending by control&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp; &amp;nbsp; e.Cancel = &lt;span style="color: blue"&gt;true&lt;/span&gt;; &lt;/p&gt; &lt;p style="margin: 0px"&gt;}&lt;/p&gt;&lt;/div&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:089b33dc-c6e8-4ee8-9601-eff5d1010de9" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;del.icio.us tags: &lt;a href="http://del.icio.us/popular/ChangePassword" rel="tag"&gt;ChangePassword&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/ASP.NET" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/.NET" rel="tag"&gt;.NET&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/SendingEmail" rel="tag"&gt;SendingEmail&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/smtp" rel="tag"&gt;smtp&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/gmail" rel="tag"&gt;gmail&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/SSL" rel="tag"&gt;SSL&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/SmtpClient" rel="tag"&gt;SmtpClient&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/mail" rel="tag"&gt;mail&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/email" rel="tag"&gt;email&lt;/a&gt;&lt;/div&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:aa6c4703-9da3-4577-8642-f722f92fa967" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/ChangePassword" rel="tag"&gt;ChangePassword&lt;/a&gt;, &lt;a href="http://technorati.com/tags/ASP.NET" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;, &lt;a href="http://technorati.com/tags/SendingEmail" rel="tag"&gt;SendingEmail&lt;/a&gt;, &lt;a href="http://technorati.com/tags/smtp" rel="tag"&gt;smtp&lt;/a&gt;, &lt;a href="http://technorati.com/tags/gmail" rel="tag"&gt;gmail&lt;/a&gt;, &lt;a href="http://technorati.com/tags/SSL" rel="tag"&gt;SSL&lt;/a&gt;, &lt;a href="http://technorati.com/tags/SmtpClient" rel="tag"&gt;SmtpClient&lt;/a&gt;, &lt;a href="http://technorati.com/tags/mail" rel="tag"&gt;mail&lt;/a&gt;, &lt;a href="http://technorati.com/tags/email" rel="tag"&gt;email&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-3140743909481478317?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/3140743909481478317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=3140743909481478317' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/3140743909481478317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/3140743909481478317'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2007/06/send-email-by-gmail-from-aspnet-20.html' title='Send an email by GMail from ASP.NET 2.0'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-8199314728461057294</id><published>2007-06-17T11:45:00.001-04:00</published><updated>2007-06-21T17:28:07.975-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vs2005'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><title type='text'>Restore IntelliSense for web.config</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;p&gt;Sometimes intellisense gets lost for web.config in VS2005.  &lt;p&gt;Seems like it happens after usage of&amp;nbsp;"ASP.NET Configuration" tool.&amp;nbsp;The tool&amp;nbsp;replaces &lt;strong&gt;&amp;lt;configuration&amp;gt;&lt;/strong&gt; tag with &lt;strong&gt;&amp;lt;configuration xmlns="&lt;/strong&gt;&lt;a href="http://schemas.microsoft.com/.NetConfiguration/v2.0&amp;quot;"&gt;&lt;strong&gt;http://schemas.microsoft.com/.NetConfiguration/v2.0"&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;, and IntelliSense is not available after that. &lt;p&gt;To fix the problem - just remove that &lt;strong&gt;xmlns="..."&lt;/strong&gt; from the &lt;strong&gt;&amp;lt;configuration&amp;gt;&lt;/strong&gt; tag. And save the web.config. &lt;p&gt;&amp;nbsp; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:3da8c124-2c35-4a9b-877f-62b6f359f1e3" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/vs2005" rel="tag"&gt;vs2005&lt;/a&gt;, &lt;a href="http://technorati.com/tags/intellisense" rel="tag"&gt;intellisense&lt;/a&gt;, &lt;a href="http://technorati.com/tags/web.config" rel="tag"&gt;web.config&lt;/a&gt;, &lt;a href="http://technorati.com/tags/problem" rel="tag"&gt;problem&lt;/a&gt;, &lt;a href="http://technorati.com/tags/fix" rel="tag"&gt;fix&lt;/a&gt;, &lt;a href="http://technorati.com/tags/asp.net%20configuration" rel="tag"&gt;asp.net configuration&lt;/a&gt;, &lt;a href="http://technorati.com/tags/configuration" rel="tag"&gt;configuration&lt;/a&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:0fda8ad5-b48f-4fad-9a78-444b93ac7cb9" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;del.icio.us tags: &lt;a href="http://del.icio.us/popular/vs2005" rel="tag"&gt;vs2005&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/intellisense" rel="tag"&gt;intellisense&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/web.config" rel="tag"&gt;web.config&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/problem" rel="tag"&gt;problem&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/fix" rel="tag"&gt;fix&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/asp.net%20configuration" rel="tag"&gt;asp.net configuration&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/configuration" rel="tag"&gt;configuration&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-8199314728461057294?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/8199314728461057294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=8199314728461057294' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/8199314728461057294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/8199314728461057294'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2007/06/restore-intellisense-for-webconfig.html' title='Restore IntelliSense for web.config'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-992221501982058814</id><published>2007-06-10T10:37:00.001-04:00</published><updated>2007-06-21T17:28:07.976-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vs2005'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='msdn'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><title type='text'>Fixing Visual Studio 2005 Documentation</title><content type='html'>&lt;p&gt;Documentation for .NET Framework disappeared after I installed some additional stuff to VS2005 (I guess it was after&amp;nbsp;"Web Client Software Factory - January 2007" installation). On hitting F1 in VS2005 usually I was getting "Information Not Found".&lt;/p&gt; &lt;p&gt;After unsuccessful searches in Google I gave up and decided to try&amp;nbsp;to find the problem myself. That was funny, because I found the solution in a minute.&lt;/p&gt; &lt;p&gt;In case you have the similar problem I would suggest to try the following:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Run &lt;strong&gt;Microsoft Visual Studio 2005 Documentation&lt;/strong&gt; from Start Menu. The Document Exproler should start with the page named &lt;strong&gt;The Visual Studio&amp;nbsp;Combined Help Collection&lt;/strong&gt;.  &lt;li&gt;At the page click on &lt;strong&gt;Visual&amp;nbsp;Studio&amp;nbsp;2005&amp;nbsp;Combined&amp;nbsp;Help&amp;nbsp;Collection Manager&lt;/strong&gt; hyperlink. That should go to a page with information on all help collections installed at your machine.  &lt;li&gt;Check all collections you need and hit &lt;strong&gt;Update VSCC&lt;/strong&gt;. Close all instances of Document Explorer and VS2005. On the next start it will update indexes and you&amp;nbsp;should&amp;nbsp;get the help back.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Good luck.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:62ea5b2d-3020-4bd4-9551-6608d47775cb" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/help" rel="tag"&gt;help&lt;/a&gt;, &lt;a href="http://technorati.com/tags/msdn" rel="tag"&gt;msdn&lt;/a&gt;, &lt;a href="http://technorati.com/tags/vs2005" rel="tag"&gt;vs2005&lt;/a&gt;, &lt;a href="http://technorati.com/tags/vs" rel="tag"&gt;vs&lt;/a&gt;, &lt;a href="http://technorati.com/tags/visual%20studio" rel="tag"&gt;visual studio&lt;/a&gt;, &lt;a href="http://technorati.com/tags/index" rel="tag"&gt;index&lt;/a&gt;, &lt;a href="http://technorati.com/tags/repair" rel="tag"&gt;repair&lt;/a&gt;, &lt;a href="http://technorati.com/tags/problem" rel="tag"&gt;problem&lt;/a&gt;, &lt;a href="http://technorati.com/tags/fix" rel="tag"&gt;fix&lt;/a&gt;&lt;/div&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:704b83b3-966e-4512-bca9-5a04b342e343" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;del.icio.us tags: &lt;a href="http://del.icio.us/popular/help" rel="tag"&gt;help&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/msdn" rel="tag"&gt;msdn&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/vs2005" rel="tag"&gt;vs2005&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/vs" rel="tag"&gt;vs&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/visual%20studio" rel="tag"&gt;visual studio&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/index" rel="tag"&gt;index&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/repair" rel="tag"&gt;repair&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/problem" rel="tag"&gt;problem&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/fix" rel="tag"&gt;fix&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-992221501982058814?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/992221501982058814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=992221501982058814' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/992221501982058814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/992221501982058814'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2007/06/fixing-visual-studio-2005-documentation.html' title='Fixing Visual Studio 2005 Documentation'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-416772061578800874</id><published>2006-12-15T17:14:00.001-05:00</published><updated>2006-12-15T17:14:12.779-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='varozhka'/><category scheme='http://www.blogger.com/atom/ns#' term='netflixprize'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='netflix'/><category scheme='http://www.blogger.com/atom/ns#' term='netflix prize'/><title type='text'>Varozhka: Generation of a prediction set (part 4)</title><content type='html'>&lt;p&gt;Now you should have Netflix dataset,&amp;nbsp;Varozhka and a compiled test estimator at your machine. Please, check previous posts if you don't.&lt;/p&gt; &lt;p&gt;Before you start the processing I would recommend to unload all unneccessary stuff, because importing and processing are CPU- and memory- consuming tasks.&lt;/p&gt; &lt;p&gt;1. Run &lt;strong&gt;Varozhka.UI.exe&lt;/strong&gt;. If this is a first run, it will ask you about settings:&lt;/p&gt; &lt;p&gt;&lt;img alt="Settings dialog" src="http://aycu28.webshots.com/image/6027/2000568706486242939_rs.jpg"&gt; &lt;/p&gt; &lt;p&gt;You should provide:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Directory with the Netflix dataset.  &lt;li&gt;Directory where prediction sets should be generated.  &lt;li&gt;Assembly with an estimator (if you followed steps from the previous post it should be&amp;nbsp;at &lt;em&gt;C:\Projects\MyEstimator\bin\Release&lt;/em&gt;).&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;2. Indexing will start automatically if settings are valid:&lt;/p&gt; &lt;p&gt;&lt;img alt="Indexing the Netflix dataset" src="http://aycu26.webshots.com/image/8385/2003326063239219252_rs.jpg"&gt; &lt;/p&gt; &lt;p&gt;This is a long operation... you can take a cup of coffee while it's importing. On my four years old P4 it takes around 40 minutes... a good place to optimize ;)&lt;/p&gt; &lt;p&gt;&amp;nbsp;3. The main UI will appear after the indexing is completed. Here you can check RMSE against the current estimator:&lt;/p&gt; &lt;p&gt;&lt;img alt="RMSE check in progress..." src="http://aycu37.webshots.com/image/8076/2003359760517373472_rs.jpg"&gt; &lt;/p&gt; &lt;p&gt;And, if results are good - generate a prediction set to submit:&lt;/p&gt; &lt;p&gt;&lt;img alt="Prediction set generation in progress..." src="http://aycu24.webshots.com/image/6823/2000575319212489590_rs.jpg"&gt; &lt;/p&gt; &lt;p&gt;On complete it will start &lt;a title="Submit Predictions page at Netflix Prize site" href="http://www.netflixprize.com/submissions"&gt;Submission&lt;/a&gt; page at Netflix Prize site, and will open Explorer window with the Output directory (you specified it in the Settings):&lt;/p&gt; &lt;p&gt;&lt;img alt="Prediction set is ready to submit" src="http://aycu31.webshots.com/image/5590/2000562917381758601_rs.jpg"&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;output.txt.gz&lt;/strong&gt; is the Prediction file, and &lt;strong&gt;md5.txt&lt;/strong&gt; contains md5 hash string.&lt;/p&gt; &lt;p&gt;To submit the generated prediction set:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Fill&amp;nbsp;up your team info.  &lt;li&gt;Choose &lt;strong&gt;output.txt.gz&lt;/strong&gt; in &lt;strong&gt;Prediction File&lt;/strong&gt; field.  &lt;li&gt;Put content of &lt;strong&gt;md5.txt&lt;/strong&gt; in &lt;strong&gt;MD5 Hash&lt;/strong&gt; field.  &lt;li&gt;Hit &lt;strong&gt;Submit&lt;/strong&gt; button.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Soon you should receive emails with submission results ;)&lt;/p&gt; &lt;p&gt;There are several things which are not implemented in the current version:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;processing cannot be stopped  &lt;li&gt;estimator cannot be reloaded, so you should quit and start the app again if you changed the estimator&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="wlWriterEditableSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:e9612eda-fc44-424a-9433-a75bedc67260" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/netflix" rel="tag"&gt;netflix&lt;/a&gt;, &lt;a href="http://technorati.com/tags/netflixprize" rel="tag"&gt;netflixprize&lt;/a&gt;, &lt;a href="http://technorati.com/tags/netflix%20prize" rel="tag"&gt;netflix prize&lt;/a&gt;, &lt;a href="http://technorati.com/tags/varozhka" rel="tag"&gt;varozhka&lt;/a&gt;, &lt;a href="http://technorati.com/tags/DIY" rel="tag"&gt;DIY&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterEditableSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:13d71452-8ab6-49c8-be33-1e22db7b91a1" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;del.icio.us tags: &lt;a href="http://del.icio.us/popular/netflix" rel="tag"&gt;netflix&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/netflixprize" rel="tag"&gt;netflixprize&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/netflix%20prize" rel="tag"&gt;netflix prize&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/varozhka" rel="tag"&gt;varozhka&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/DIY" rel="tag"&gt;DIY&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-416772061578800874?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/416772061578800874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=416772061578800874' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/416772061578800874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/416772061578800874'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/12/varozhka-generation-of-prediction-set.html' title='Varozhka: Generation of a prediction set (part 4)'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-7952640643125820480</id><published>2006-12-15T16:56:00.001-05:00</published><updated>2006-12-15T17:29:13.106-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='varozhka'/><category scheme='http://www.blogger.com/atom/ns#' term='netflixprize'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='netflix'/><category scheme='http://www.blogger.com/atom/ns#' term='netflix prize'/><title type='text'>Varozhka: Creating an estimator (part 3)</title><content type='html'>&lt;h5&gt;Overview&lt;/h5&gt; &lt;p&gt;The same results can be achieved with Notepad and csc.exe from .NET Framework distribution, but I would recommend to use Visual Studio 2005 for that. I'm using VS2005 Standard Edition, but I'm pretty sure you can use any edition. If you don't have VS2005 installed - get your free copy of VS2005 Express Edition&amp;nbsp;at &lt;a title="Visual Studio Express homepage" href="http://msdn.microsoft.com/vstudio/express/"&gt;http://msdn.microsoft.com/vstudio/express/&lt;/a&gt;.&lt;/p&gt; &lt;h5&gt;Estimator creation&lt;/h5&gt; &lt;p&gt;1. Run VS2005 and create a new Class Library project. Name the project as MyEstimator, and save it (say, to &lt;em&gt;C:\Projects&lt;/em&gt;).&lt;/p&gt; &lt;p&gt;&lt;img alt="New Project dialog" src="http://aycu30.webshots.com/image/7789/2003368332771690803_rs.jpg"&gt; &lt;/p&gt; &lt;p&gt;2. Add references to &lt;strong&gt;Varozhka.Processing.dll&lt;/strong&gt; and &lt;strong&gt;Varozhka.TrainingData.dll&lt;/strong&gt; assemblies.&amp;nbsp;These assemblies located at the directory where you extracted the Varozhka package (&lt;em&gt;C:\Varozhka&lt;/em&gt;).&lt;/p&gt; &lt;p&gt;&lt;img alt="Add Reference dialog" src="http://aycu08.webshots.com/image/6647/2000557405339156684_rs.jpg"&gt; &lt;/p&gt; &lt;p&gt;3. Create a new class named as &lt;strong&gt;TestEstimator&lt;/strong&gt;. Inherit the class from &lt;strong&gt;BaseEstimator &lt;/strong&gt;class. It's an abstract class to set some constraints to descendant classes. Implement required constructor and override &lt;strong&gt;GetRating()&lt;/strong&gt; method - this is a function where you have to implement your algorithm. For now let it return some constant value, say - 3.0.&lt;/p&gt; &lt;p&gt;The TestEstimator class should look something like:&lt;/p&gt; &lt;style type="text/css"&gt;&lt;br /&gt;.cf { font-family: courier new; font-size: 8pt; color: black; border: solid 1px #000; }&lt;br /&gt;.cl { margin: 0px; }&lt;br /&gt;.cln { color: #2b91af; }&lt;br /&gt;.cb1 { color: blue; }&lt;br /&gt;.cb2 { color: teal; }&lt;br /&gt;&lt;/style&gt;  &lt;div style="font-family: courier new; font-size: 8pt; color: black; border: solid 1px #000;"&gt; &lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System;&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt; Varozhka.Processing;&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt; Varozhka.TrainingData;&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt; MyEstimator&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;{&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: teal;"&gt;TestEstimator&lt;/span&gt; : &lt;span style="color: teal;"&gt;BaseEstimator&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; {&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; TestEstimator(&lt;span style="color: teal;"&gt;NetflixData&lt;/span&gt; netflixData) : &lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;base&lt;/span&gt;(netflixData)&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/span&gt;&amp;nbsp;&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;float&lt;/span&gt; GetRating(&lt;span style="color: blue;"&gt;int&lt;/span&gt; movieId, &lt;br/&gt;&lt;span style="color: #2b91af;"&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; &amp;nbsp; &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;int&lt;/span&gt; customerId, &lt;br/&gt;&lt;span style="color: #2b91af;"&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: teal;"&gt;DateTime&lt;/span&gt; date)&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br/&gt;&lt;span style="color: #2b91af;"&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; &lt;span style="color: blue;"&gt;return&lt;/span&gt; 3.0f;&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; }&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/span&gt;&amp;nbsp;}&lt;/div&gt; &lt;p&gt;Basically, the dumb estimator is ready, and&amp;nbsp;you can use it in estimations... but we will try to create something more complicated.&lt;/p&gt; &lt;p&gt;4. Let's create an estimator which will return average rating of the customer. We should sum up ratings of all rated movies, and divide it by number of ratings. Our estimator contains &lt;strong&gt;NetflixData&lt;/strong&gt; property, which gives access to Netflix information. In the current implementation it allows to get:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;movies&amp;nbsp;rated by user (&lt;strong&gt;GetMoviesByCustomer()&lt;/strong&gt;&amp;nbsp;method)  &lt;li&gt;customer/rating pairs for a movie (&lt;strong&gt;GetPacksByMovie()&lt;/strong&gt; method)  &lt;li&gt;customer who watched a movie (&lt;strong&gt;GetCustomersByMovie()&lt;/strong&gt; method). &lt;em&gt;This method is pretty slow in the current implementation, and I would not recommend to use it.&lt;/em&gt;  &lt;li&gt;rating of the movie&amp;nbsp;by the given customer (&lt;strong&gt;GetRating()&lt;/strong&gt; method).&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Straightforward implementation will be:&lt;/p&gt; &lt;style type="text/css"&gt;&lt;br /&gt;.cf { font-family: courier new; font-size: 8pt; color: black; border: solid 1px #000; }&lt;br /&gt;.cl { margin: 0px; }&lt;br /&gt;.cln { color: #2b91af; }&lt;br /&gt;.cb1 { color: blue; }&lt;br /&gt;.cb2 { color: teal; }&lt;br /&gt;.cb3 { color: green; }&lt;br /&gt;&lt;/style&gt;  &lt;div style="font-family: courier new; font-size: 8pt; color: black; border: solid 1px #000;"&gt; &lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;float&lt;/span&gt; GetRating(&lt;span style="color: blue;"&gt;int&lt;/span&gt; movieId, &lt;br/&gt;&lt;span style="color: #2b91af;"&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; customerId, &lt;br/&gt;&lt;span style="color: #2b91af;"&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: teal;"&gt;DateTime&lt;/span&gt; date)&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/span&gt;&amp;nbsp;{&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color: green;"&gt;// get all movies watched by the customer&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;short&lt;/span&gt;[] movies = NetflixData.GetMoviesByCustomer(customerId);&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/span&gt;&amp;nbsp;&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color: green;"&gt;// get sum of all ratings&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;int&lt;/span&gt; sumRatings = 0;&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue;"&gt;short&lt;/span&gt; movie &lt;span style="color: blue;"&gt;in&lt;/span&gt; movies)&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; {&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sumRatings += NetflixData.GetRating(movie, customerId);&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; }&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;27&lt;/span&gt;&amp;nbsp;&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;28&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color: green;"&gt;// calculate average rating&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; (&lt;span style="color: blue;"&gt;float&lt;/span&gt;)sumRatings / (&lt;span style="color: blue;"&gt;float&lt;/span&gt;)movies.Length;&lt;br/&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;30&lt;/span&gt;&amp;nbsp;}&lt;/div&gt; &lt;p&gt;&amp;nbsp;This implementation has&amp;nbsp;several drawbacks. Say:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;it will give wrong results for probe set, because we should ignore rating for movie with passed movieId.  &lt;li&gt;it's a good idea to cache calculated movie ratings.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;But the purpose of the sample is to show ability of indexes, so I'm ignoring these issues.&lt;/p&gt; &lt;p&gt;5. Compile the project in Release mode. Now we have working estimator, and it's ready to use in prediction generator&amp;nbsp;;)&lt;/p&gt; &lt;p&gt;Check the next post on how to generate predictions.&lt;/p&gt; &lt;p&gt;&lt;em&gt;NOTE: the project is under development, so that will obsolete some day.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterEditableSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:e9612eda-fc44-424a-9433-a75bedc67260" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/netflix" rel="tag"&gt;netflix&lt;/a&gt;, &lt;a href="http://technorati.com/tags/netflixprize" rel="tag"&gt;netflixprize&lt;/a&gt;, &lt;a href="http://technorati.com/tags/netflix%20prize" rel="tag"&gt;netflix prize&lt;/a&gt;, &lt;a href="http://technorati.com/tags/varozhka" rel="tag"&gt;varozhka&lt;/a&gt;, &lt;a href="http://technorati.com/tags/DIY" rel="tag"&gt;DIY&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterEditableSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:13d71452-8ab6-49c8-be33-1e22db7b91a1" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;del.icio.us tags: &lt;a href="http://del.icio.us/popular/netflix" rel="tag"&gt;netflix&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/netflixprize" rel="tag"&gt;netflixprize&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/netflix%20prize" rel="tag"&gt;netflix prize&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/varozhka" rel="tag"&gt;varozhka&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/DIY" rel="tag"&gt;DIY&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-7952640643125820480?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/7952640643125820480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=7952640643125820480' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/7952640643125820480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/7952640643125820480'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/12/varozhka-creating-estimator-part-3.html' title='Varozhka: Creating an estimator (part 3)'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-8379586884635203629</id><published>2006-12-15T15:40:00.001-05:00</published><updated>2006-12-15T15:40:33.525-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='varozhka'/><category scheme='http://www.blogger.com/atom/ns#' term='netflixprize'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='netflix'/><category scheme='http://www.blogger.com/atom/ns#' term='netflix prize'/><title type='text'>Varozhka: Installation (part 2)</title><content type='html'>&lt;h5&gt;Requirements&lt;/h5&gt; &lt;ul&gt; &lt;li&gt;Processing&amp;nbsp;is very memory-consuming because the Netflix dataset is big enough. You need at least&amp;nbsp;1GB of RAM.  &lt;li&gt;~3 GB of free space at HDD. Most of it is used by Netflix dataset.  &lt;li&gt;Windows 2000/XP/2003/Vista. (checked on XP only. Please, let me know if you tried it on any other systems).  &lt;li&gt;You need to have &lt;a title="Microsoft .NET Framework Version 2.0 Redistributable Package (x86)" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5&amp;amp;displaylang=en"&gt;.NET Framework 2.0&lt;/a&gt; installed. I guess everything (except the UI) can be migrated to Mono. Did not tried that though.&lt;/li&gt;&lt;/ul&gt; &lt;h5&gt;Preparations&lt;/h5&gt; &lt;p&gt;First - &lt;a title="Official download page at Netflix Prize site" href="http://www.netflixprize.com/download"&gt;download&lt;/a&gt; the archive with Netflix dataset. Extract it&amp;nbsp;to some directory (say, &lt;em&gt;c:\Netflix&lt;/em&gt;). Extract archive with movies (&lt;em&gt;training_set.tar&lt;/em&gt;) to &lt;strong&gt;training_set&lt;/strong&gt; subdirectory (&lt;em&gt;c:\Netflix\training_set&lt;/em&gt; ) - this&amp;nbsp;subdir&amp;nbsp;is expected by indexer.&lt;/p&gt; &lt;h5&gt;Installation&lt;/h5&gt; &lt;ol&gt; &lt;li&gt;Download the latest version of Varozhka from &lt;a title="Downloads for Varozhka" href="https://sourceforge.net/project/showfiles.php?group_id=181765"&gt;SF.net&lt;/a&gt;.  &lt;li&gt;Extract it to some directory (say, &lt;em&gt;c:\Varozhka&lt;/em&gt;).&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;And now it's time to implement an estimator with your algorithm. &lt;strong&gt;Samples&lt;/strong&gt; subdirectory (&lt;em&gt;c:\Varozhka\Samples&lt;/em&gt;) contains two samples of simple estimators. You can view the code, or check walkthrough in the next post.&lt;/p&gt; &lt;div class="wlWriterEditableSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:e9612eda-fc44-424a-9433-a75bedc67260" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/netflix" rel="tag"&gt;netflix&lt;/a&gt;, &lt;a href="http://technorati.com/tags/netflixprize" rel="tag"&gt;netflixprize&lt;/a&gt;, &lt;a href="http://technorati.com/tags/netflix%20prize" rel="tag"&gt;netflix prize&lt;/a&gt;, &lt;a href="http://technorati.com/tags/varozhka" rel="tag"&gt;varozhka&lt;/a&gt;, &lt;a href="http://technorati.com/tags/DIY" rel="tag"&gt;DIY&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterEditableSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:13d71452-8ab6-49c8-be33-1e22db7b91a1" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;del.icio.us tags: &lt;a href="http://del.icio.us/popular/netflix" rel="tag"&gt;netflix&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/netflixprize" rel="tag"&gt;netflixprize&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/netflix%20prize" rel="tag"&gt;netflix prize&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/varozhka" rel="tag"&gt;varozhka&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/DIY" rel="tag"&gt;DIY&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-8379586884635203629?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/8379586884635203629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=8379586884635203629' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/8379586884635203629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/8379586884635203629'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/12/varozhka-installation-part-2.html' title='Varozhka: Installation (part 2)'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-979730659459854437</id><published>2006-12-15T15:08:00.001-05:00</published><updated>2006-12-15T15:08:44.351-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='varozhka'/><category scheme='http://www.blogger.com/atom/ns#' term='netflixprize'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='netflix'/><category scheme='http://www.blogger.com/atom/ns#' term='netflix prize'/><title type='text'>Varozhka: Introduction (part 1)</title><content type='html'>&lt;p&gt;As you may know, &lt;a title="Netflix home" href="http://www.netflix.com/"&gt;Netflix&lt;/a&gt; organized a &lt;font color="#ff8040"&gt;&lt;a title="Home of Netflix Prize" href="http://www.netflixprize.com"&gt;competition&lt;/a&gt;&lt;/font&gt; for systems predicting user&amp;nbsp;ratings for movies. &lt;/p&gt; &lt;p&gt;I'm sure a lot of bright people have ideas on how to improve that, but do not have time to spend on it.&lt;/p&gt; &lt;p&gt;This project is a framework to&amp;nbsp;automate most&amp;nbsp;of the dirty work with the dataset.&amp;nbsp;So you can concentrate on the prediction algorithm ;)&lt;/p&gt; &lt;p&gt;Current features:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;No additional&amp;nbsp;DB engine is required. All indexes are loaded in memory.  &lt;li&gt;Abstract layer to play with data (this is a place to plug in).  &lt;li&gt;Data&amp;nbsp;access layer.  &lt;li&gt;Easy way to check RMSE against the probe set.  &lt;li&gt;Generation of submission dataset.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;So, basically you can download &lt;a title="Netflix Prize dataset" href="http://www.netflixprize.com/download"&gt;the Netflix dataset&lt;/a&gt;, extract it to a directory, start a wizard (which do all import tasks), implement your own rating estimator, and use a wizard to submit results to Netflix.&lt;/p&gt; &lt;p&gt;The project named Varozhka (belarusian word for "fortune-teller"). It hosted at &lt;a title="Project home at Google Code" href="http://code.google.com/p/varozhka/"&gt;Google Code&lt;/a&gt; and &lt;a title="Project home at SF.net" href="http://sourceforge.net/projects/varozhka"&gt;SourceForge.Net&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;This is an introductory post about the project. More details later...&lt;/p&gt; &lt;p&gt;NOTE: The project is under development, and most of the code is not optimized in any way.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:e9612eda-fc44-424a-9433-a75bedc67260" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/netflix" rel="tag"&gt;netflix&lt;/a&gt;, &lt;a href="http://technorati.com/tags/netflixprize" rel="tag"&gt;netflixprize&lt;/a&gt;, &lt;a href="http://technorati.com/tags/netflix%20prize" rel="tag"&gt;netflix prize&lt;/a&gt;, &lt;a href="http://technorati.com/tags/varozhka" rel="tag"&gt;varozhka&lt;/a&gt;, &lt;a href="http://technorati.com/tags/DIY" rel="tag"&gt;DIY&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:13d71452-8ab6-49c8-be33-1e22db7b91a1" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;del.icio.us tags: &lt;a href="http://del.icio.us/popular/netflix" rel="tag"&gt;netflix&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/netflixprize" rel="tag"&gt;netflixprize&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/netflix%20prize" rel="tag"&gt;netflix prize&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/varozhka" rel="tag"&gt;varozhka&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/DIY" rel="tag"&gt;DIY&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-979730659459854437?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/979730659459854437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=979730659459854437' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/979730659459854437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/979730659459854437'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/12/varozhka-introduction-part-1.html' title='Varozhka: Introduction (part 1)'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-5978927569932011714</id><published>2006-10-25T16:19:00.000-04:00</published><updated>2006-10-25T16:23:02.785-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='nant'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>NAnt 0.85 and active version of .NET Framework</title><content type='html'>&lt;p&gt;By default, &lt;a href="http://nant.sourceforge.net/"&gt;NAnt&lt;/a&gt; 0.85 (at least, RC4 I'm using) have .NET 2.0 Framework as active while running build scripts. And sometimes it's necessary to compile assembly (say, with &lt;a href="http://nant.sourceforge.net/release/latest/help/tasks/csc.html"&gt;&amp;lt;csc&amp;gt; task&lt;/a&gt;) for .NET 1.1 Framework. The info on how to change active .NET Framework is in the NAnt documentation, but&amp;nbsp;some digging required to find it. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;So here is&amp;nbsp;a&amp;nbsp;solution:&lt;/p&gt;&lt;br /&gt;&lt;div style="border-right: black 1px solid; border-top: black 1px solid; font-size: 8pt; border-left: black 1px solid; border-bottom: black 1px solid"&gt;&lt;font face="Courier New"&gt;&amp;nbsp; &amp;lt;property name="nant.settings.currentframework" value="net-1.1" /&amp;gt;&lt;/font&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:28d44539-8a36-4059-a521-5c8291e5826c" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/nant" rel="tag"&gt;nant&lt;/a&gt;, &lt;a href="http://technorati.com/tags/.net" rel="tag"&gt;.net&lt;/a&gt;, &lt;a href="http://technorati.com/tags/build" rel="tag"&gt;build&lt;/a&gt;, &lt;a href="http://technorati.com/tags/howto" rel="tag"&gt;howto&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-5978927569932011714?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/5978927569932011714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=5978927569932011714' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/5978927569932011714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/5978927569932011714'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/10/nant-085-and-active-version-of-net.html' title='NAnt 0.85 and active version of .NET Framework'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-8006014126355543097</id><published>2006-10-22T16:19:00.000-04:00</published><updated>2006-10-22T16:21:35.596-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='IE'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><title type='text'>DIV stays empty after innerHTML assignment in Internet Explorer 6.0</title><content type='html'>&lt;p&gt;I guess I'm not the first one who run into it, but I did not found a solution in the google. &amp;nbsp;So here is the problem and my solution...&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Problem&lt;/strong&gt;&lt;br&gt;There is an empty DIV, which is located in hidden outer DIV ('display' is 'none'). On some event (say, click) - outer DIV became visible, and innerDIV.innerHTML assigned to some string. It works perfectly for FF, but in IE the inner DIV stays empty. Nevertheless, &lt;a title="Download of IE Developer Toolbar" href="http://www.microsoft.com/downloads/thankyou.aspx?familyId=e59c3964-672d-4511-bb3e-2d5e1db91038&amp;amp;displayLang=en)"&gt;Internet Explorer Developer Toolbar&lt;/a&gt; shows that DIV content was changed and visible.&lt;br /&gt;&lt;p&gt;This is how it looks like in &lt;em&gt;simplified&lt;/em&gt; code:&lt;br&gt;HTML: &lt;br /&gt;&lt;div style="border-right: black 1px solid; border-top: black 1px solid; font-size: 8pt; border-left: black 1px solid; border-bottom: black 1px solid"&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div id='outer'&amp;gt;&amp;lt;div id='inner'&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;/font&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;JavaScript (with Prototype library 1.5.0_rc0):&lt;/p&gt;&lt;br /&gt;&lt;div style="border-right: black 1px solid; border-top: black 1px solid; font-size: 8pt; border-left: black 1px solid; border-bottom: black 1px solid"&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Element.show('outer');&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $('inner').innerHTML = 'foo'; &lt;/font&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;:&lt;br&gt;For the inner DIV I assigned style with height:100%, and it helped.&lt;br&gt;CSS:&lt;br /&gt;&lt;div style="border-right: black 1px solid; border-top: black 1px solid; font-size: 8pt; border-left: black 1px solid; border-bottom: black 1px solid"&gt;&lt;font face="Courier New"&gt;#inner&lt;br&gt;{&lt;br&gt;&amp;nbsp; height: 100%;&lt;br&gt;}&lt;/font&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Note&lt;/em&gt;&lt;/strong&gt;: Somehow I cannot reproduce the problem with some simple test, so maybe I missed something. &lt;/p&gt;&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:3e7fc33b-70e8-4e63-8029-66ab75f8a5d3" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/IE" rel="tag"&gt;IE&lt;/a&gt;, &lt;a href="http://technorati.com/tags/JavaScript" rel="tag"&gt;JavaScript&lt;/a&gt;, &lt;a href="http://technorati.com/tags/webdev" rel="tag"&gt;webdev&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-8006014126355543097?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/8006014126355543097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=8006014126355543097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/8006014126355543097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/8006014126355543097'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/10/div-stays-empty-after-innerhtml.html' title='DIV stays empty after innerHTML assignment in Internet Explorer 6.0'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-8597203586663369307</id><published>2006-10-17T16:15:00.000-04:00</published><updated>2006-10-17T16:23:16.564-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wix'/><category scheme='http://www.blogger.com/atom/ns#' term='setup'/><category scheme='http://www.blogger.com/atom/ns#' term='msi'/><category scheme='http://www.blogger.com/atom/ns#' term='installer'/><title type='text'>Wix 3.0: "tallow.exe" gone...</title><content type='html'>&lt;p&gt;I decided to try &lt;a title="Homepage of WiX project" href="http://wix.sourceforge.net/" target="_blank"&gt;WiX&lt;/a&gt; 3.0 (&lt;a title="Build 3.0.2128.0 of WiX" href="http://wix.sourceforge.net/"&gt;3.0.2128.0&lt;/a&gt;) for my current project.&amp;nbsp; And here is a first issue (with help file) I run into:&lt;br /&gt;I needed to generate information about files to install. It appears that WiX 2.0 contained an utility named "tallow.exe" to enumerate a directory and generate WiX Fragment for it. But the installed version of WiX doesn't have the utility.&lt;br /&gt;I did some searches, but without success - everyone referencing to "tallow.exe". I started to examine all executables in &lt;strong&gt;bin&lt;/strong&gt; directory, and finally found exactly what I need - "heat.exe" utility.&lt;br /&gt;So... it appears "tallow.exe" was superseded by "heat.exe". Also "heat.exe" can generate fragments about a website, but I did not tried that one.&lt;br /&gt;Here is a command line to generate a WiX fragment with files information:&lt;/p&gt;&lt;br /&gt;&lt;div style="border-right: black 1px solid; border-top: black 1px solid; font-size: 8pt; border-left: black 1px solid; border-bottom: black 1px solid"&gt;&lt;font face="Courier New"&gt;C:\Program Files\Windows Installer XML v3\bin&amp;gt;heat.exe dir D:\src\bin\ -out c:\files.wxs&lt;/font&gt; &lt;/div&gt;&lt;br /&gt;I guess it will be in WiX documentation soon, but not yet...&lt;br/&gt;&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:0ac48a98-7d94-4c89-93ff-6f622ec36337" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/wix" rel="tag"&gt;wix&lt;/a&gt;, &lt;a href="http://technorati.com/tags/installer" rel="tag"&gt;installer&lt;/a&gt;, &lt;a href="http://technorati.com/tags/msi" rel="tag"&gt;msi&lt;/a&gt;, &lt;a href="http://technorati.com/tags/setup" rel="tag"&gt;setup&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-8597203586663369307?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/8597203586663369307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=8597203586663369307' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/8597203586663369307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/8597203586663369307'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/10/wix-30-tallowexe-gone.html' title='Wix 3.0: &quot;tallow.exe&quot; gone...'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-115669942770429100</id><published>2006-08-27T13:23:00.000-04:00</published><updated>2006-08-27T13:41:03.763-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='winforms'/><title type='text'>Application Settings for Windows Forms .NET 2.0</title><content type='html'>&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/0zszyc6e.aspx"&gt;Application Settings&lt;/a&gt; in .NET 2.0&amp;nbsp;allows to a&amp;nbsp;developer to concentrate on real tasks, and not re-implement settings handling for every new application.&lt;/p&gt; &lt;p&gt;I did not have any experience with Application Settings, but with help of Visual Studio (it automatically generates all required stuff), it took&amp;nbsp;five minute to add settings to an application.&lt;/p&gt; &lt;p&gt;The only problem was to get settings from previous version(s) of application. So&amp;nbsp;it was time to load MSDN and read the documentation :)&lt;/p&gt; &lt;p&gt;&lt;span id="nsrTitle"&gt;&lt;strong&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/d1cddstd.aspx"&gt;ApplicationSettingsBase&lt;/a&gt;&lt;/strong&gt; class has almost everything for the&amp;nbsp;task: m&lt;/span&gt;&lt;span&gt;&lt;span&gt;igration should be performed right after the settings was loaded, so it can be performed in handler of &lt;span&gt;&lt;strong&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.configuration.applicationsettingsbase.settingsloaded.aspx"&gt;SettingsLoaded&lt;/a&gt;&lt;/strong&gt; event. And &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;strong&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.configuration.applicationsettingsbase.upgrade.aspx"&gt;Upgrade&lt;/a&gt;&lt;/strong&gt; method allows to automatically migrate settings. &lt;/span&gt;&lt;/p&gt; &lt;p&gt;So all you need to do is to add a special boolean setting &lt;strong&gt;IsFirstRun&lt;/strong&gt; with default value as &lt;strong&gt;true&lt;/strong&gt;, and in &lt;strong&gt;SettingsLoaded&lt;/strong&gt; handler call &lt;strong&gt;Upgrade&lt;/strong&gt; if &lt;strong&gt;IsFirstRun&lt;/strong&gt; is &lt;strong&gt;false&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Here is a snippet from Settings.cs (it should be generated by Visual Studio):&lt;/p&gt; &lt;br /&gt;&lt;div style="border: solid black 1px; font-size: 9pt;"&gt;&lt;br /&gt;internal sealed partial class Settings &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public Settings() &lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;SettingsLoaded += new SettingsLoadedEventHandler(Settings_SettingsLoaded);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;void Settings_SettingsLoaded(object sender, SettingsLoadedEventArgs e)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;if (IsFirstRun)&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Upgrade();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;IsFirstRun = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-115669942770429100?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/115669942770429100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=115669942770429100' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/115669942770429100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/115669942770429100'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/08/application-settings-for-windows-forms.html' title='Application Settings for Windows Forms .NET 2.0'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-115661710041777067</id><published>2006-08-26T14:31:00.000-04:00</published><updated>2006-08-26T14:31:40.433-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tool'/><category scheme='http://www.blogger.com/atom/ns#' term='sitemap'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><category scheme='http://www.blogger.com/atom/ns#' term='utility'/><title type='text'>Utility to convert ASP.NET sitemap to Google sitemap</title><content type='html'>&lt;p&gt;&lt;a title="Information about Google sitemaps" href="http://www.google.com/webmasters/sitemaps/docs/en/about.html"&gt;Google sitemaps&lt;/a&gt; is a way for webmaster to notify Google about site changes. A website created with ASP.NET 2.0 also could contain a &lt;a title="ASP.NET Site Navigation Overview" href="http://msdn2.microsoft.com/en-us/library/e468hxky.aspx"&gt;sitemap&lt;/a&gt; with navigation structure of the site. And, basically, both sitemaps are containing the same&amp;nbsp;urls, but in different formats. &lt;/p&gt; &lt;p&gt;I needed a tool to generate Google sitemap from ASP.NET sitemap. I searched for such utility, but did not find what I need, so I created one. The utility is open-sourced (BSD license). I registered project at both&amp;nbsp;&lt;a title="Utility hosted at Google Code" href="http://code.google.com/p/sitemaps-asp2google/"&gt;Google Code&lt;/a&gt;&amp;nbsp;and &lt;a title="Utility hosted at SourceForge" href="http://sourceforge.net/projects/sitemap-asp2goo"&gt;SourceForge&lt;/a&gt;, but Subversion hosted at&amp;nbsp; Google Code. (BTW, do you know that SF.net now allows to use third-party SVN hosting?). &lt;/p&gt; &lt;p&gt;&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=174897"&gt;Download&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-115661710041777067?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/115661710041777067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=115661710041777067' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/115661710041777067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/115661710041777067'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/08/utility-to-convert-aspnet-sitemap-to_26.html' title='Utility to convert ASP.NET sitemap to Google sitemap'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-115445936062259488</id><published>2006-08-01T14:58:00.000-04:00</published><updated>2006-08-01T15:20:04.090-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><title type='text'>SelectedDate property of Calendar control (ASP.NET 2.0)</title><content type='html'>Another day, another trick...&lt;br /&gt;Spent a while in attempts to select a specific date in ASP.NET &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.calendar.aspx" title="Overview of Calendar control"&gt;Calendar&lt;/a&gt; control. And it appears &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.calendar.selecteddate.aspx" title=" Gets or sets the selected date"&gt;SelectedDate&lt;/a&gt; property is ignoring assigned value if it's not a midnight of the day. &lt;a href="http://msdn2.microsoft.com/en-us/library/system.datetime.date.aspx" title=" Gets the date component"&gt;Date&lt;/a&gt; property of &lt;a href="http://msdn2.microsoft.com/en-us/library/system.datetime.aspx"&gt;DateTime&lt;/a&gt; class is useful for that.&lt;br /&gt;&lt;br /&gt;Here is a snippet:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family:courier new;font-size:8pt;border: solid 1px black; background-color:#daeff1;"&gt;_calendar.SelectedDate = DateTime.Now.&lt;b&gt;Date&lt;/b&gt;;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-115445936062259488?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/115445936062259488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=115445936062259488' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/115445936062259488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/115445936062259488'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/08/selecteddate-property-of-calendar.html' title='SelectedDate property of Calendar control (ASP.NET 2.0)'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-115437183654372767</id><published>2006-07-31T14:34:00.000-04:00</published><updated>2006-07-31T14:50:36.556-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><title type='text'>PostBack and selection in DropDownList control (ASP.NET 2.0)</title><content type='html'>Sometimes a simple task can take plenty of time. And today I tried to use &lt;strong&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.dropdownlist.aspx" title="DropDownList class overview"&gt;DropDownList&lt;/a&gt;&lt;/strong&gt; control without ViewState (in other words - by "manually" populating the combobox on each page loading). By some reason, DropDownList control is not raising &lt;strong&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.selectedindexchanged.aspx" title="Occurs when the index of the selected item in the drop-down control changes."&gt;SelectedIndexChanged&lt;/a&gt;&lt;/strong&gt; event if EnableViewState is False, and I'm not sure how to do it properly in ASP.NET way...&lt;br /&gt;&lt;br /&gt;As workaround I used the &lt;em&gt;&lt;a href="http://www.w3.org/TR/html4/interact/forms.html#control-name" title="HTML Controls"&gt;control-name/value&lt;/em&gt;&lt;/a&gt; pair for the drop-down which is passed in HTTP POST parameters (when form is submitted). Control-name is &lt;strong&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.control.uniqueid.aspx" title="Unique identifier for the ASP.NET server control"&gt;UniqueID&lt;/a&gt;&lt;/strong&gt; property of the drop-down, and the value contains the selected item.&lt;br /&gt;&lt;br /&gt;So to restore the selection I used:&lt;br /&gt;&lt;div style="font-family:courier new;font-size:8pt;border: solid 1px black; background-color:#daeff1;"&gt;_combo.SelectedValue = Request[_combo.UniqueID];&lt;/div&gt;&lt;br /&gt;Let me know if you know a better solution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-115437183654372767?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/115437183654372767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=115437183654372767' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/115437183654372767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/115437183654372767'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/07/postback-and-selection-in-dropdownlist.html' title='PostBack and selection in DropDownList control (ASP.NET 2.0)'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-115368025917971166</id><published>2006-07-23T14:38:00.000-04:00</published><updated>2006-07-23T14:44:19.190-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='boost'/><title type='text'>Compiling boost 1.33.1</title><content type='html'>Today I decided to update the &lt;a href="http://boost.org"&gt;boost&lt;/a&gt; library on my machine. And I got a strange error in attempt to compile &lt;a href="http://boost.org/tools/build/jam_src/index.html#introduction"&gt;Boost.Jam&lt;/a&gt; (bjam):&lt;br /&gt;&lt;div style="font-family:courier new;font-size:8pt;border: solid 1px black; background-color:#daeff1;"&gt;G:\boost_1_33_1\tools\build\jam_src&gt;build&lt;br /&gt;&lt;b&gt;&lt;span style="color:red;"&gt;\Utilities\Bin\x86 was unexpected at this time.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The problem was solved after (temporary) removing the following path&lt;br /&gt;from PATH environment variable:&lt;br /&gt;&lt;div style="font-family:courier new;font-size:8pt;border: solid 1px black; background-color:#daeff1;"&gt;H:\Program Files\Microsoft DirectX 9.0 SDK (October 2005)\Utilities\Bin\x86;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Seems like build.bat (or callee of it) do not like scopes in the PATH.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-115368025917971166?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/115368025917971166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=115368025917971166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/115368025917971166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/115368025917971166'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/07/compiling-boost-1331.html' title='Compiling boost 1.33.1'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-115256756211239605</id><published>2006-07-10T17:28:00.000-04:00</published><updated>2006-07-10T17:42:12.780-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='vs2003'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><title type='text'>Cleaning up web cache for Visual Studio 2003</title><content type='html'>Web cache in Visual Studio 2003 (maybe in VS2002 as well) can give you some unpleasant moments. In my case, two branches of the same project behave differently if you compile them manually, and unexpectedly similar if compiled automatically (by NAnt). The reason of the problem was a cached assembly...&lt;br /&gt;&lt;br /&gt;Visual Studio 2003 saves cached versions of your web projects in Web Cache directory. And if you are getting strange errors while opening your project, maybe it worth to clean up the cache.&lt;br /&gt;&lt;br /&gt;The cache usually located at &lt;b&gt;C:\Documents and Settings\&lt;i&gt;username&lt;/i&gt;\VSWebCache&lt;/b&gt;. The path can be customized, and stored in registry under&lt;br /&gt;&lt;b&gt;HKCU\Software\Microsoft\VisualStudio\7.1\WebProject\OfflineCacheDir&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Here is a small NAnt snippet to cleanup web cache (VSWebCache) for the current user. It takes path to the cache from the registry, and delete the whole directory for the current user.&lt;br /&gt;&lt;br /&gt;NOTE: you'll lose some of you user settings of your web projects, but automatic build will work correctly. But be sure you know what are you doing ;)&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family:courier new;font-size:8pt;border: solid 1px black; background-color:#daeff1;"&gt; &amp;lt;readregistry property="vs_web_cache" key="Software\Microsoft\VisualStudio\7.1\WebProject\OfflineCacheDir" hive="CurrentUser"&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;delete dir="${path::combine(vs_web_cache, environment::get-machine-name())}" failonerror="false"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-115256756211239605?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/115256756211239605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=115256756211239605' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/115256756211239605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/115256756211239605'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/07/cleaning-up-web-cache-for-visual.html' title='Cleaning up web cache for Visual Studio 2003'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-115206522304398906</id><published>2006-07-04T21:30:00.000-04:00</published><updated>2006-07-04T22:07:03.066-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><title type='text'>Flash player and textboxs in Firefox</title><content type='html'>&lt;h3&gt;Problem&lt;/h3&gt;&lt;br /&gt;Open a HTML page with a textbox and Flash Player in Firefox (FF1.5 and FP8.0). The textbox became locked if you hit Stop button in the Flash Player. It looks like focus is still in the text box, but it's impossible to type anything.&lt;br /&gt;The same page works fine in Internet Explorer 6.0.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Solution&lt;/h3&gt;&lt;br /&gt;It's not mine solution, I found it here &lt;a href="http://www.easterndesigner.com/forum/viewtopic.php?t=87"&gt;http://www.easterndesigner.com/forum/viewtopic.php?t=87&lt;/a&gt;. The solution was for another problem, but it works for locked textboxes as well.&lt;br /&gt;&lt;br /&gt;You should set &lt;span style="font-weight: bold;"&gt;wmode&lt;/span&gt; as &lt;span style="font-weight: bold;"&gt;transparent&lt;/span&gt; in object's params and in attributes for &lt;span style="font-weight: bold;"&gt;embed&lt;/span&gt; tag. Also &lt;span style="font-weight: bold;"&gt;embed&lt;/span&gt; should be styled as &lt;span style="font-weight: bold;"&gt;style="z-index:inherit"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;So the final code should looks something like:&lt;br /&gt;&lt;div style="font-family:courier new;font-size:8pt;border: solid 1px black; background-color:#daeff1;"&gt;&lt;br /&gt;&amp;lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"&lt;br /&gt;&amp;nbsp;codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"&lt;br /&gt;&amp;nbsp;width="300" height="200" align="middle" &gt;&lt;br /&gt;&amp;nbsp;&amp;lt;param name="movie" value="foo.swf" /&gt;&lt;br /&gt;&amp;nbsp;&amp;lt;param name="quality" value="high" /&gt;&lt;br /&gt;&amp;nbsp;&amp;lt;param name="wmode" value="transparent" /&gt;&lt;br /&gt;&amp;nbsp;&amp;lt;embed src="foo.swf" wmode="transparent" quality="high" width="300" &amp;nbsp;height="200" style="z-index:inherit" align="middle" &amp;nbsp;type="application/x-shockwave-flash" &amp;nbsp;pluginspage="http://www.macromedia.com/go/getflashplayer" /&gt;&lt;br /&gt;&amp;lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-115206522304398906?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/115206522304398906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=115206522304398906' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/115206522304398906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/115206522304398906'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/07/flash-player-and-textboxs-in-firefox.html' title='Flash player and textboxs in Firefox'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-115031929526372341</id><published>2006-06-14T17:00:00.000-04:00</published><updated>2006-06-14T17:42:47.796-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='atlas'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><title type='text'>Atlas ASP.NET - using external web services</title><content type='html'>&lt;div&gt;&lt;br /&gt;    &lt;p&gt;&lt;em&gt;The sample created with &lt;/em&gt;&lt;a href="http://atlas.asp.net" title="Atlas site"&gt;&lt;em&gt;Atlas&lt;/em&gt;&lt;/a&gt;&lt;em&gt; April 2006 CTP, so the example might be obsolete someday. And remember - it's just one from several different ways to achieve the same results.&lt;/em&gt;&lt;br /&gt;     "Atlas" allows to access external web services, but it took for me a while to create a working application. And I decided to write a walkthrough for it. The purpose of the walkthrough is to show how to access the web service with less code as possible, so - no error checking. As a test web service I choose &lt;a href="http://www.webservicex.net/geoipservice.asmx" title="WSDL of the service"&gt;GeoIPService&lt;/a&gt; - it detects country by IP address.&lt;br /&gt;         You can download sources for the walkthrough &lt;a href="http://www.digizzle.com/downloads/AtlasGeo.zip"&gt;here&lt;/a&gt; (6 KB). The archive doesn't contain Atlas dll, so you should add it yourself to the &lt;strong&gt;Bin&lt;/strong&gt; directory.&lt;/p&gt;&lt;br /&gt;     &lt;h1&gt;Preparation&lt;/h1&gt;In Visual Studio 2005 create a new web site using Atlas web site template:&lt;br /&gt;     &lt;center&gt;&lt;br /&gt;         &lt;img src="http://aycu20.webshots.com/image/2339/1311500324647006517_rs.jpg" alt="New project with Atlas Website template" /&gt; &lt;/center&gt;&lt;br /&gt; From the created project delete unnecessary stuff (&lt;em&gt;readme.txt&lt;/em&gt;, etc).&lt;br /&gt;     &lt;h1&gt;Server-side modifications&lt;/h1&gt;&lt;br /&gt;         To access an external web service: a web application is accessing its home server, and the home server is accessing the external web service. That process named &lt;em&gt;bridging&lt;/em&gt;. So let's create a bridge first.&lt;ol&gt;&lt;br /&gt;         &lt;li&gt;Generate server-side code for web service calls:&lt;br /&gt;             &lt;ol&gt;&lt;br /&gt;                 &lt;li&gt;Add &lt;strong&gt;App_Code&lt;/strong&gt; ASP.NET folder (right-click on the project in &lt;strong&gt; Solution Explorer&lt;/strong&gt;, &lt;strong&gt;Add ASP.NET folder \ App_Code&lt;/strong&gt;). &lt;/li&gt;&lt;li&gt;Launch &lt;strong&gt;VS2005 Command Prompt&lt;/strong&gt;. &lt;/li&gt;&lt;li&gt;In the console go to &lt;strong&gt;App_Code&lt;/strong&gt; folder.&lt;/li&gt;&lt;li&gt;Execute &lt;code&gt;"wsdl.exe http://www.webservicex.net/geoipservice.asmx?WSDL"&lt;/code&gt;.&lt;br /&gt;                     It will generated a strongly-typed proxy for the web service.&lt;center&gt; &lt;img src="http://aycu21.webshots.com/image/2500/1654288341268795420_rs.jpg" alt="Console with wsdl.exe" /&gt;&lt;/center&gt;&lt;br /&gt;                 &lt;/li&gt;&lt;li&gt;Add generated class (GeoIPService.cs) to the project under the &lt;strong&gt;App_Code&lt;/strong&gt; folder.&lt;/li&gt;&lt;br /&gt;            &lt;/ol&gt;&lt;br /&gt;         &lt;/li&gt;&lt;li&gt;Add a wrapper for the generated code. The wrapper class is simple - it creates an instance of the generated GeoIPService class, and perform a call to its method:&lt;br /&gt;         &lt;div class="code"&gt;&lt;code&gt;public class GeoIPWrapper&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public GeoIP LookupIP(string ip)&lt;br /&gt;   &amp;nbsp;{&lt;br /&gt;       &amp;nbsp;GeoIPService service = new GeoIPService();&lt;br /&gt;&lt;br /&gt;               &amp;nbsp;GeoIP geoIP = service.GetGeoIP(ip);&lt;br /&gt;       &amp;nbsp;return geoIP;&lt;br /&gt;   &amp;nbsp;}&lt;br /&gt;}&lt;/code&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;The wrapper is not accessible directly from javascript code. To access it a bridge should be declared. So create xml file, and save it to the root of the project as GeoService.asbx. Content of the file should be:&lt;br /&gt;         &lt;div class="code"&gt;&lt;code&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;bridge namespace="AtlasTests" className="GeoService" &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;proxy type="GeoIPWrapper, App_Code"  /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;method name="LookupIP"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;input&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameter name="ip" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/input&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/method&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bridge&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;     &lt;h1&gt;Client-side modifications&lt;/h1&gt;&lt;br /&gt;         Open &lt;strong&gt;Default.aspx&lt;/strong&gt;, and switch to Source view.&lt;br /&gt;         All changes will be done in this file, but I tried to separate changes logically.&lt;br /&gt;         &lt;br/&gt;&lt;b&gt;Changes in HTML part&lt;/b&gt;&lt;br /&gt;     &lt;ol&gt;&lt;li&gt;Add a reference to the web service bridge in the ScriptManager definition.&lt;br /&gt;             &lt;div class="code"&gt;&lt;code&gt;&amp;lt;atlas:ScriptManager ID="_scriptManager" runat="server"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;Services&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;atlas:ServiceReference Path="~/GeoService.asbx" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/Services&amp;gt;&lt;br /&gt;&amp;lt;/atlas:ScriptManager&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Add an edit box to enter an IP address.&lt;br /&gt;             &lt;div class="code"&gt;&lt;code&gt;&amp;lt;input type="text" id="_boxIP" /&amp;gt; &lt;/code&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Add Lookup button to initiate a call to the web service from the client-side. In &lt;strong&gt;onclick&lt;/strong&gt; handler add a call to JavaScript function (the function will be defined soon).&lt;br /&gt;             &lt;div class="code"&gt;&lt;code&gt;&amp;lt;input type="submit" id="_btnLookup" onclick="LookupIP(); return false;" /&amp;gt;&lt;br /&gt;             &lt;/code&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Add an empty DIV block for results.&lt;br /&gt;             &lt;div class="code"&gt;&lt;code&gt;&amp;lt;div id="_results"&amp;gt;&amp;lt;/div&amp;gt;             &lt;/code&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;         &lt;b&gt;Changes in JavaScript part&lt;/b&gt;&lt;br /&gt;         &lt;ol&gt;&lt;br /&gt;         &lt;li&gt;Add a script section.&lt;/li&gt;&lt;li&gt;Define variables for the edit box and results placeholder:&lt;br /&gt;             &lt;div class="code"&gt;&lt;code&gt;var _boxIP = new Sys.UI.TextBox($("_boxIP"));&lt;br /&gt;                 var _placeholder = new Sys.UI.Label($("_results"));&lt;/code&gt;&lt;br /&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Implement &lt;strong&gt;LookupIP()&lt;/strong&gt; function, it will make a call to the bridge. It's asynchronous call, so most parameters are callbacks.&lt;br /&gt;First parameter is a dictionary with &amp;lt;key, value&amp;gt; pairs - in our case it contains only one pair. Second parameter is a callback to receive results. Third parameter - a callback which will be called on timeout. Fourth parameter - a callback for errors. There are other parameters (&lt;code&gt;onMethodAborted, userContext, timeoutInterval, priority, useGetMethod&lt;/code&gt;), but they are ignored in this walkthrough.&lt;br /&gt;             &lt;div class="code"&gt;&lt;code&gt;function LookupIP()&lt;br /&gt;{&lt;br /&gt;   &amp;nbsp;var ip = _boxIP.get_text();&lt;br /&gt;   &amp;nbsp;AtlasTests.GeoService.LookupIP({'ip': ip}, OnGeoResults, OnTimeout, OnError);&lt;br /&gt;}&lt;/code&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Main callback is &lt;strong&gt;OnGeoResults()&lt;/strong&gt; function. It receives an object with structure that is mirroring the structure returned by the web service.&lt;br /&gt;             &lt;div class="code"&gt;&lt;code&gt;function OnGeoResults(results)&lt;br /&gt;{&lt;br /&gt;   &amp;nbsp;// if succeeded&lt;br /&gt;   &amp;nbsp;if (results.ReturnCode == 1)&lt;br /&gt;   &amp;nbsp;{&lt;br /&gt;       &amp;nbsp;&amp;nbsp;var strResult = "IP: " + results.IP + "&amp;lt;br/&amp;gt;Country: " + results.CountryName;&lt;br /&gt;   &amp;nbsp;&amp;nbsp;_placeholder.set_text(strResult);&lt;br /&gt;   &amp;nbsp;}&lt;br /&gt;   &amp;nbsp;else&lt;br /&gt;   &amp;nbsp;{&lt;br /&gt;   &amp;nbsp;&amp;nbsp;_placeholder.set_text(results.ReturnCodeDetails);&lt;br /&gt;   &amp;nbsp;}&lt;br /&gt;}&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;                 Two other callbacks are just stubs to notify us about critical situations.&lt;br /&gt;                 &lt;div class="code"&gt;&lt;code&gt;function OnTimeout(result, context)&lt;br /&gt;{&lt;br /&gt;   &amp;nbsp;alert("Timeout! "  + result.get_message());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;                 function OnError(result, response, context)&lt;br /&gt;{&lt;br /&gt;   &amp;nbsp;alert("Error! " + result.get_message());&lt;br /&gt;}&lt;/code&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;     &lt;h1&gt;Tests&lt;/h1&gt;&lt;br /&gt;     Now we have a web application which can call external web services. The application is simple, so tests are simple as well. :)&lt;br /&gt;         &lt;ol&gt;&lt;li&gt;Start the web application.&lt;br /&gt;         &lt;/li&gt;&lt;li&gt;Enter some valid IP address (remember, there are no error checking).&lt;br /&gt;         &lt;/li&gt;&lt;li&gt;And hit &lt;b&gt;Lookup&lt;/b&gt; button.&lt;br /&gt;         &lt;/li&gt;&lt;li&gt;If everything is OK you should get information about the IP address:&lt;br /&gt;     &lt;center&gt;&lt;br /&gt;         &lt;img src="http://aycu14.webshots.com/image/333/1617012099510027831_rs.jpg" alt="Results of lookup of IP address" style="border: 1px solid gray;" /&gt;&lt;/center&gt;&lt;br /&gt;         &lt;/li&gt;&lt;br /&gt;     &lt;/ol&gt;&lt;br /&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-115031929526372341?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/115031929526372341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=115031929526372341' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/115031929526372341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/115031929526372341'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/06/atlas-aspnet-using-external-web.html' title='Atlas ASP.NET - using external web services'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-114722905129757531</id><published>2006-05-09T22:33:00.000-04:00</published><updated>2006-05-09T22:44:11.306-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IE'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><title type='text'>Empty table cells and Internet Explorer</title><content type='html'>Now I understand why cross-browser development is the experience mostly.&lt;br /&gt;In nonogram I needed an empty cell (TD HTML object) with fixed size, and the cell can have several different backgrounds. And I'm building the table on fly with JavaScript.&lt;br /&gt;I'm doing all testing in FireFox, and I was surprised after I checked the game in IE and Opera - empty cells don't have borders.&lt;br /&gt;I tried to use CSS method - &lt;span style="color: rgb(0, 0, 102);"&gt;"empty-cells: show;"&lt;/span&gt;, it helped with Opera, but not with IE.&lt;br /&gt;I tried to put &lt;span style="color: rgb(0, 0, 102);"&gt;nbsp&lt;/span&gt; in the cell - size of cell became larger than I wanted.&lt;br /&gt;I put 1x1 transparent gif in each cell, that helped, but it took around 8 seconds to load/render the table in IE (1.5 sec in FF).&lt;br /&gt;&lt;br /&gt;So the current solution is to have a small char in the cell, say '.', with the same color as background of the cell. And set the cursor for cells as &lt;span style="color: rgb(0, 0, 102);"&gt;"cursor: default;"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Loading and rendering times now are:&lt;br /&gt;3 sec in IE, 0.85 sec in FF and 0.4 sec in Opera.&lt;br /&gt;Speed is still slow, but more acceptable. Maybe it makes sense to generate the table on server side.&lt;br /&gt;&lt;br /&gt;I still not sure how it will work with older versions of browsers. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-114722905129757531?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/114722905129757531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=114722905129757531' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/114722905129757531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/114722905129757531'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/05/empty-table-cells-and-internet.html' title='Empty table cells and Internet Explorer'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-114315418769646014</id><published>2006-03-23T17:43:00.000-05:00</published><updated>2006-03-23T17:49:47.720-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vs2005'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><title type='text'>Cool feature in Visual Studio 2005: Tracepoints</title><content type='html'>That's so obvious, I cannot beleive this feature was not there before!&lt;br /&gt;&lt;br /&gt;Idea is really simple (and great!) - perform some action when code line is hit.&lt;br /&gt;How many times you temporary modified a source code just to check how some var is changing by inserting ::OutputDebugString() or something similar.&lt;br /&gt;Now that technique is obsolete. Just insert a tracepoint to that code line, and specify a template for message you want to see in &lt;span style="font-weight: bold;"&gt;Output &lt;/span&gt;window. In addition in the message template you can show &lt;span style="font-weight: bold;"&gt;Thread ID&lt;/span&gt; (for MT debugging), &lt;span style="font-weight: bold;"&gt;CPU Tick&lt;/span&gt; Count (for simple profiling), &lt;span style="font-weight: bold;"&gt;Call Stack&lt;/span&gt;, etc.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;To insert tracepoint&lt;/span&gt;&lt;br /&gt;Right-click on a line of code, choose &lt;span style="font-weight: bold;"&gt;Breakpoint \ Insert Tracepoint&lt;/span&gt;.&lt;br /&gt;It will show dialog with all instructions.&lt;br /&gt;&lt;br /&gt;For more details check MSDN article &lt;a href="http://msdn2.microsoft.com/en-us/library/232dxah7%28VS.80%29.aspx"&gt;&lt;span style="font-weight: bold;"&gt;How to: Specify a Tracepoint/Breakpoint Action&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-114315418769646014?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/114315418769646014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=114315418769646014' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/114315418769646014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/114315418769646014'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/03/cool-feature-in-visual-studio-2005.html' title='Cool feature in Visual Studio 2005: Tracepoints'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-114294423368922753</id><published>2006-03-21T07:25:00.000-05:00</published><updated>2006-03-22T15:12:37.736-05:00</updated><title type='text'>Where is Microsoft going?</title><content type='html'>All the new game consoles (&lt;a href="http://en.wikipedia.org/wiki/PlayStation_3"&gt;PlayStation 3&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Xbox_360"&gt;XBOX 360&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Nintendo_Revolution"&gt;Nintendo Revolution&lt;/a&gt;) are based on &lt;a href="http://en.wikipedia.org/wiki/PowerPC"&gt;PowerPC&lt;/a&gt; processors. And recently Dan Fernandez &lt;a href="http://blogs.msdn.com/danielfe/archive/2006/03/20/555686.aspx"&gt;blogged&lt;/a&gt; about the &lt;a href="http://www.microsoft.com/xna/"&gt;XNA Framework&lt;/a&gt;, which allows to develop and execute managed code on both MS Windows and XBOX 360. So &lt;span style="font-style: italic;"&gt;theoretically &lt;/span&gt;XNA can be development platform for all these game consoles, but that's unlikely because it will make development much easier for the "enemies".&lt;br /&gt;&lt;br /&gt;But anyway - here are the facts:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; MS supported PowerPC processors in &lt;a href="http://en.wikipedia.org/wiki/Windows_NT"&gt;Windows NT&lt;/a&gt;, but dropped the support before release of Windows 2000. &lt;/li&gt;&lt;li&gt; Both XBOX and XBOX 360 are based on modified Windows 2000 kernel.&lt;/li&gt;&lt;li&gt;XBOX 360 uses &lt;a href="http://en.wikipedia.org/wiki/Xenon_CPU"&gt;Xenon processor&lt;/a&gt;, based on IBM's PowerPC technology. &lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Common_Language_Runtime"&gt;CLR&lt;/a&gt; for PowerPC (XNA Framework) is ready. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Do you think (as I am) that Windows is going to support PowerPC again? It would be fun, especially, after Apple moved from PowerPC to Intel processors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-114294423368922753?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/114294423368922753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=114294423368922753' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/114294423368922753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/114294423368922753'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/03/where-is-microsoft-going.html' title='Where is Microsoft going?'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-114087549919879837</id><published>2006-02-25T08:02:00.000-05:00</published><updated>2006-02-25T09:08:17.976-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='sitemap'/><category scheme='http://www.blogger.com/atom/ns#' term='debug'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><title type='text'>JavaScript debugging</title><content type='html'>After JavaScript debugging with boring alert() and slow Venkman (FireFox extension) I was glad to know that Visual Studio can handle javascripts. &lt;br /&gt;&lt;br /&gt;Not only ASP.NET projects can be debugged, but plain HTML + JavaScript sites/pages  as well (say - &lt;a href="http://www.digizzle.com/sudoku/"&gt;Random Sudoku&lt;/a&gt; ;)).&lt;br /&gt;&lt;br /&gt;It's pretty easy (not very straightforward though):&lt;br /&gt;1. Be sure Script Debugging in IE is enabled. (Uncheck &lt;span style="font-weight:bold;"&gt;Disable Script Debugging&lt;/span&gt; in &lt;span style="font-weight:bold;"&gt;Internet Options \ Advanced&lt;/span&gt;).&lt;br /&gt;2. Add &lt;span style="font-weight:bold;"&gt;debugger&lt;/span&gt; keyword in your JavaScript. It should be in the function you want to debug.&lt;br /&gt;E.g. if you need to debug Foo() when the keyword in Foo():&lt;br /&gt;&lt;br /&gt;Foo = function() {&lt;br /&gt;  &lt;span style="font-weight:bold;"&gt;debugger&lt;/span&gt;&lt;br /&gt;  var i = 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;If you put debugger outside of Foo() then you will not be able to set breakpoint in there.&lt;br /&gt;&lt;br /&gt;3. Start IE, and open your HTML. You'll see Visual Studio Just-In-Time Debugger dialog  when &lt;span style="font-weight:bold;"&gt;debugger&lt;/span&gt; keyword is reached.&lt;br /&gt;&lt;br /&gt;4. In the dialog choose debugger you wish to use, and enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-114087549919879837?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/114087549919879837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=114087549919879837' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/114087549919879837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/114087549919879837'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/02/javascript-debugging.html' title='JavaScript debugging'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-114072476648774960</id><published>2006-02-23T14:54:00.000-05:00</published><updated>2006-02-23T14:59:26.496-05:00</updated><title type='text'>Indexing is working</title><content type='html'>I was wrong, googlebot was there... now I see "we found some URLs listed in your sitemap that we cannot accept" error. So the problem is on my side, seems like trailing slash should not be there or something like this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-114072476648774960?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/114072476648774960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=114072476648774960' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/114072476648774960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/114072476648774960'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/02/indexing-is-working.html' title='Indexing is working'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-114071119448827895</id><published>2006-02-23T11:11:00.000-05:00</published><updated>2006-02-23T11:40:40.243-05:00</updated><title type='text'>Google index</title><content type='html'>Somehow my domain (&lt;a href="http://www.digizzle.com"&gt;www.digizzle.com&lt;/a&gt;) disappeared from google index. Seems like it can be a reason why even supplying Google Sitemaps for "&lt;a href="http://www.digizzle.com/sudoku"&gt;Random Sudoku&lt;/a&gt;" still not includes it in the index.&lt;br /&gt;OTOH - maybe I should wait more until googlebot gets here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-114071119448827895?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/114071119448827895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=114071119448827895' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/114071119448827895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/114071119448827895'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/02/google-index.html' title='Google index'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22626958.post-114023532058407967</id><published>2006-02-17T22:44:00.003-05:00</published><updated>2006-02-17T23:05:52.503-05:00</updated><title type='text'>Random Sudoku website</title><content type='html'>&lt;a href="http://www.digizzle.com/sudoku"&gt;Random Sudoku&lt;/a&gt; goes online! Each Sudoku generated randomly.&lt;br /&gt;&lt;br /&gt;This is a development blog - place for news about new features, improvements and bug fixes.&lt;br /&gt;&lt;br /&gt;Intention was to create a &lt;a href="http://en.wikipedia.org/wiki/Single_Page_Application"&gt;Single Page Application&lt;/a&gt;, which allows playing Sudoku online, without installations or page reloads.&lt;br /&gt;&lt;br /&gt;It’s my first experience with JavaScript, and IE still has some problems (FireFox and Opera don’t have these problems though). Eventually the problems will be fixed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22626958-114023532058407967?l=sudoku-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sudoku-dev.blogspot.com/feeds/114023532058407967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22626958&amp;postID=114023532058407967' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/114023532058407967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22626958/posts/default/114023532058407967'/><link rel='alternate' type='text/html' href='http://sudoku-dev.blogspot.com/2006/02/random-sudoku-website_114023532058407967.html' title='Random Sudoku website'/><author><name>digizzle</name><uri>http://www.blogger.com/profile/17173478165917507192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
