<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Geekswithblogs.net</title><link>http://geekswithblogs.net/mainfeed.aspx</link><description>Geekswithblogs.net</description><generator>Subtext Version 0.0.0.0</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/geekswithblogs" type="application/rss+xml" /><item><title>Getting WCF to work with Azure</title><link>http://feeds.feedburner.com/~r/geekswithblogs/~3/505671535/getting-wcf-to-work-with-azure.aspx</link><pubDate>Wed, 07 Jan 2009 23:04:11 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/paulschapman/archive/2009/01/07/getting-wcf-to-work-with-azure.aspx</guid><wfw:comment>http://geekswithblogs.net/paulschapman/comments/128468.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/paulschapman/comments/commentRss/128468.aspx</wfw:commentRss><comments>http://geekswithblogs.net/paulschapman/archive/2009/01/07/getting-wcf-to-work-with-azure.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/paulschapman/services/trackbacks/128468.aspx</trackback:ping><source url="http://geekswithblogs.net/paulschapman/rss.aspx">Getting WCF to work with Azure</source><description>&lt;p&gt;Silverlight makes creating compelling Rich Internet Applications fairly easy. That said the cut down version of .Net means some things that you would do within an application have to be relegated to Web Services which can benefit from the full .Net library. One of these is of course Azure, after all that is the whole point - an online store of Business Logic and data.&lt;/p&gt;
&lt;p&gt;The application I'm working on uses Silverlight on the front end, and Azure will provide the bulk of the backend. There are reasons for this; my budget for the site is not that large, adopting Azure means first off that it will be free during development, but almost as important - hosting costs will be related to the success of the site. &lt;/p&gt;
&lt;p&gt;Thing is dealing with pre-beta software has meant an increase in grey hairs and those that are left are getting fewer. One of the parts that needs looking at is in WCF. If you run the Azure Labs the WCF lab does not work. This is because the Development Fabric is not hosting the service correctly, and WCF metadata is not being returned correctly.&lt;/p&gt;
&lt;p&gt;Thanks must go to David Burela and his &lt;a target="_blank" href="http://davidburela.wordpress.com/"&gt;House-o-blog&lt;/a&gt;. In it he describes a way to get WCF working despite the problems with the Development Fabric. So what I thought I would do is write a version of the Azure Services Training Kits Exercise 3: Hosting a WCF Service&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128468"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128468" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/paulschapman/aggbug/128468.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/505671535" height="1" width="1"/&gt;</description><dc:creator>paulschapman</dc:creator><feedburner:origLink>http://geekswithblogs.net/paulschapman/archive/2009/01/07/getting-wcf-to-work-with-azure.aspx</feedburner:origLink></item><item><title>Eclipse: Minor beef (a calf?)</title><link>http://feeds.feedburner.com/~r/geekswithblogs/~3/505639458/128467.aspx</link><pubDate>Wed, 07 Jan 2009 22:05:42 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/tmoore/archive/2009/01/07/128467.aspx</guid><wfw:comment>http://geekswithblogs.net/tmoore/comments/128467.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/tmoore/comments/commentRss/128467.aspx</wfw:commentRss><comments>http://geekswithblogs.net/tmoore/archive/2009/01/07/128467.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/tmoore/services/trackbacks/128467.aspx</trackback:ping><source url="http://geekswithblogs.net/tmoore/rss.aspx">Eclipse: Minor beef (a calf?)</source><description>&lt;p&gt;&lt;font face="Arial"&gt;Anyway, I wanted to get the full Java JDK to support ANT and so, I dutifully did so. Only when I did, Eclipse would't start. I got a huge ugly dialog box which started with:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;JVM Terminated: Error Code=-1&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;followed by a ton of parameter information.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;What followed I won't detail here, but it suffices to say I lost a couple of hours of my time. I tried all kinds of things to get it work, but nothing. I even installed netbeans in an attempt to verify that Java was working.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Turns out it was all my goof:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;I'd installed the 64bit version of Java, and Eclipse only states it is supported on 32. Now, it doesn't say it won't support 64, and makes a point of saying it should work fine on all platforms. I could have screamed when I realized it was that simple. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Sure wish that first dialog box had said something a little more helpful!&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128467"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128467" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/tmoore/aggbug/128467.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/505639458" height="1" width="1"/&gt;</description><dc:creator>Theo Moore</dc:creator><feedburner:origLink>http://geekswithblogs.net/tmoore/archive/2009/01/07/128467.aspx</feedburner:origLink></item><item><title>Silverlight Cream for January 07, 2009 -- #478</title><link>http://feeds.feedburner.com/~r/geekswithblogs/~3/505628123/128466.aspx</link><pubDate>Wed, 07 Jan 2009 21:53:47 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/WynApseTechnicalMusings/archive/2009/01/07/128466.aspx</guid><wfw:comment>http://geekswithblogs.net/WynApseTechnicalMusings/comments/128466.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/WynApseTechnicalMusings/comments/commentRss/128466.aspx</wfw:commentRss><comments>http://geekswithblogs.net/WynApseTechnicalMusings/archive/2009/01/07/128466.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/WynApseTechnicalMusings/services/trackbacks/128466.aspx</trackback:ping><source url="http://geekswithblogs.net/WynApseTechnicalMusings/rss.aspx">Silverlight Cream for January 07, 2009 -- #478</source><description>&lt;font face="tahoma"&gt;In this issue: Quadra Silverlight Outsourcing, John Papa, Tim Heuer, Laurence Moroney, Terence Tsang, and Robby Ingebretsen. &lt;br /&gt;
&lt;br /&gt;
Shoutouts: &lt;br /&gt;
&lt;br /&gt;
For those of you not up on it yet, Laurence Moroney has a post up about &lt;a href="http://blogs.msdn.com/webnext/archive/2009/01/06/silverlight-and-windows-live.aspx"&gt;&lt;u&gt;Silverlight and Windows Live&lt;/u&gt;&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Barak has a couple cool &lt;a href="http://blogs.msdn.com/bardak/archive/2009/01/06/happy-new-2009.aspx"&gt;&lt;u&gt;New Year's Cards&lt;/u&gt;&lt;/a&gt; up. I liked the video on the Ascentium one, but the comments on the Razorfish are pretty good, such as "Seattle grunge band discovers a fifth chord" :) &lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;hr width="50%" /&gt;
&lt;/center&gt;  From &lt;a href="http://www.silverlightcream.com"&gt;&lt;u&gt;SilverlightCream.com&lt;/u&gt;&lt;/a&gt;:  &lt;dl&gt;     &lt;dt&gt;&lt;a href="http://quadraodc.com/index.php/silverlight/image-carousel"&gt;&lt;u&gt;Quadra Silverlight Image Carousel&lt;/u&gt;&lt;/a&gt;&lt;/dt&gt;       &lt;dd&gt;&lt;strong&gt;Quadra Silverlight Outsourcing&lt;/strong&gt; wrote to me about another of their offerings to the developer community... a very nice Image Carousel. Check out the demo, and give it a dance.&lt;/dd&gt;     &lt;dt&gt;&lt;a href="http://johnpapa.net/silverlight/tip-getting-hierarchical-entities-via-ado-net-data-services-from-silverlight/"&gt;&lt;u&gt;Tip: Getting Hierarchical Entities via ADO.NET Data Services from Silverlight&lt;/u&gt;&lt;/a&gt;&lt;/dt&gt;       &lt;dd&gt;&lt;strong&gt;John Papa&lt;/strong&gt; has a great ADO.NET Data Services blog post up. I've just started reading his &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0596523092/johnpanet-20"&gt;&lt;u&gt;Data-Driven Services with Silverlight 2&lt;/u&gt;&lt;/a&gt; and I recommend not only his blog, but the book very highly... it covers every aspect of data and Silverlight that you can imagine. I'll mention more about that later, but wanted to say that much now!   &lt;/dd&gt;     &lt;dt&gt;&lt;a href="http://timheuer.com/blog/archive/2009/01/06/silverlight-install-on-linux-moonlight.aspx"&gt;&lt;u&gt;Screencast of Silverlight installation on Linux&lt;/u&gt;&lt;/a&gt;&lt;/dt&gt;       &lt;dd&gt;&lt;strong&gt;Tim Heuer&lt;/strong&gt; demonstrates installing Silverlight on OpenSUSE. This has been a while in coming, so I'm sure it's going to get wrung out pretty well.&lt;/dd&gt;     &lt;dt&gt;&lt;a href="http://blogs.msdn.com/webnext/archive/2009/01/05/silverlight-2-update-for-bidirectional-text-in-hebrew-and-arabic.aspx"&gt;&lt;u&gt;Silverlight 2 Update for BiDirectional Text in Hebrew and Arabic&lt;/u&gt;&lt;/a&gt;&lt;/dt&gt;       &lt;dd&gt;&lt;strong&gt;Laurence Moroney&lt;/strong&gt; posted this on Monday and I blew past it and shouldn't have ... this is a Silverlight bidi solution posted on CodePlex.&lt;/dd&gt;     &lt;dt&gt;&lt;a href="http://www.shinedraw.com/animation-effect/silverlight-vs-flash-double-clicking/"&gt;&lt;u&gt;Silverlight vs Flash: Double Click&lt;/u&gt;&lt;/a&gt;&lt;/dt&gt;       &lt;dd&gt;&lt;strong&gt;Terence Tsang&lt;/strong&gt; discusses, implements, and demos double-clicks in Silverlight. I didn't consider it a big deal... I don't think I ever wrote a win32 app that didn't have a message loop, and lots of times I had double-click problems in winforms... similar solution I'm thinking... and he's also getting lots of advice in the comments :)&lt;/dd&gt;     &lt;dt&gt;&lt;a href="http://blog.nerdplusart.com/archives/become-a-kaxaml-power-user-in-about-7-minutes"&gt;&lt;u&gt;Become a Kaxaml Power User in about 7 Minutes&lt;/u&gt;&lt;/a&gt;&lt;/dt&gt;       &lt;dd&gt;&lt;strong&gt;Robby Ingebretsen&lt;/strong&gt; has 3 videos up on his site for using Kaxaml... please don't say "what is Kaxaml"... at least not out loud :)&lt;/dd&gt;  &lt;/dl&gt;&lt;br /&gt;
&lt;font color="#0000ff"&gt;&lt;strong&gt;Stay in the 'Light!&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;
&lt;center&gt;&lt;hr width="50%" /&gt;
&lt;a href="http://twitter.com/SilverlightNews"&gt;&lt;u&gt;Twitter SLNews&lt;/u&gt;&lt;/a&gt; | &lt;a href="http://tech.groups.yahoo.com/group/SilverlightCream/join"&gt;&lt;u&gt;Join me @ SilverlightCream&lt;/u&gt;&lt;/a&gt; | &lt;a href="http://www.wynapse.com/TagContent.aspx?Tag=Silverlight"&gt;&lt;u&gt;SL Web Articles&lt;/u&gt;&lt;/a&gt; | &lt;a href="http://www.wynapse.com/TagContent.aspx?Tag=Silverlight2"&gt;&lt;u&gt;SL2 Web Articles&lt;/u&gt;&lt;/a&gt; | &lt;a href="http://www.wynapse.com/Silverlight.aspx"&gt;&lt;u&gt;My Articles&lt;/u&gt;&lt;/a&gt; | &lt;a href="http://www.wynapse.com/Silverlight_Tutorials.aspx"&gt;&lt;u&gt;My Tutorials&lt;/u&gt;&lt;/a&gt; | &lt;a href="http://www.wynapse.com/Silverlight_Tooltips.aspx"&gt;&lt;u&gt;My Tooltips&lt;/u&gt;&lt;/a&gt; | &lt;a href="http://www.wynapse.com/Silverlight2.aspx"&gt;&lt;u&gt;My SL2 Articles&lt;/u&gt;&lt;/a&gt; | &lt;a href="http://www.wynapse.com/Silverlight2_Tooltips.aspx"&gt;&lt;u&gt;My SL2 ToolTips&lt;/u&gt;&lt;/a&gt; | &lt;a href="http://www.silverlightcream.com"&gt;&lt;u&gt;SilverlightCream&lt;/u&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/center&gt; &lt;br /&gt;
&lt;br /&gt;
Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tag/Silverlight"&gt;&lt;img alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=Silverlight" style="border: 0pt none ; vertical-align: middle; margin-left: 0.4em;" /&gt;Silverlight&lt;/a&gt;    &lt;a rel="tag" href="http://technorati.com/tag/SilverlightCream"&gt;&lt;img alt=" " src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=SilverlightCream" style="border: 0pt none ; vertical-align: middle; margin-left: 0.4em;" /&gt;SilverlightCream&lt;/a&gt;  &lt;/font&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128466"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128466" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/WynApseTechnicalMusings/aggbug/128466.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/505628123" height="1" width="1"/&gt;</description><dc:creator>Dave Campbell</dc:creator><feedburner:origLink>http://geekswithblogs.net/WynApseTechnicalMusings/archive/2009/01/07/128466.aspx</feedburner:origLink></item><item><title>Brimful of Azure</title><link>http://feeds.feedburner.com/~r/geekswithblogs/~3/505618524/128465.aspx</link><pubDate>Wed, 07 Jan 2009 21:36:54 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/asmith/archive/2009/01/07/128465.aspx</guid><wfw:comment>http://geekswithblogs.net/asmith/comments/128465.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/asmith/comments/commentRss/128465.aspx</wfw:commentRss><comments>http://geekswithblogs.net/asmith/archive/2009/01/07/128465.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/asmith/services/trackbacks/128465.aspx</trackback:ping><source url="http://geekswithblogs.net/asmith/rss.aspx">Brimful of Azure</source><description>&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;The “Yull” vacation has finally given be the chance to start digging into Windows Azure. There’s quite a few services in the Azure platform and as I’ve already spent some time looking at “BizTalk Services” before it was re-branded to .net Services I thought I’d take a look at SQL Data Services (SDS).&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;SDS is very easy to work with if you know a bit about WCF and choose to take the SOAP road. I labbed a bit with the REST stuff and found it more complex than SOAP, so I stuck with the SOAP client.&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;I’ve put up a couple of &lt;a target="_blank" href="http://bloggersguides.net/media/g/azurewebcasts/default.aspx"&gt;&lt;font color="#993300"&gt;webcasts&lt;/font&gt;&lt;/a&gt; on &lt;a target="_blank" href="http://bloggersguides.net/"&gt;&lt;font color="#993300"&gt;BloggersGuides.net&lt;/font&gt;&lt;/a&gt;. Enjoy...&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128465"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128465" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/asmith/aggbug/128465.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/505618524" height="1" width="1"/&gt;</description><dc:creator>Alan Smith</dc:creator><feedburner:origLink>http://geekswithblogs.net/asmith/archive/2009/01/07/128465.aspx</feedburner:origLink></item><item><title>Audio CD operation including CD-Text reading in pure C#</title><link>http://feeds.feedburner.com/~r/geekswithblogs/~3/505481630/audio-cd-operation-including-cd-text-reading-in-pure-c.aspx</link><pubDate>Wed, 07 Jan 2009 18:47:43 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/tamir/archive/2009/01/07/audio-cd-operation-including-cd-text-reading-in-pure-c.aspx</guid><wfw:comment>http://geekswithblogs.net/tamir/comments/128464.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/tamir/comments/commentRss/128464.aspx</wfw:commentRss><comments>http://geekswithblogs.net/tamir/archive/2009/01/07/audio-cd-operation-including-cd-text-reading-in-pure-c.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/tamir/services/trackbacks/128464.aspx</trackback:ping><source url="http://geekswithblogs.net/tamir/rss.aspx">Audio CD operation including CD-Text reading in pure C#</source><description>&lt;p&gt;Recently we spoke about &lt;a target="_blank" href="http://khason.net/dev/usb-fm-radio-library-was-published-on-codeplex/"&gt;reading radio data in C#&lt;/a&gt;, however as in any vehicle we have also CD players. So what can be better, than to have an ability to play CDs while being notified about track name, gathered from &lt;a target="_blank" href="http://en.wikipedia.org/wiki/CD-Text"&gt;CD-Text&lt;/a&gt;?&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/tamir/WindowsLiveWriter/AudioCDoperationincludingCDTextreadingin_1241D/image_e64d3826-30df-4793-b2b5-2b70d3471aa5.png" width="240" height="198" /&gt; &lt;/p&gt;  &lt;p&gt;So, let’s start. First of all, I want to express my pain with MSDN documentation &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms808417.aspx"&gt;about CD-ROM structure&lt;/a&gt;. Documentation team, please, please, please update it. First of all it is no accurate, then there are a ton of things missing. However, “À la guerre comme à la guerre”, thus I invested three days in deep DDK research.&lt;/p&gt;  &lt;p&gt;Before we can do anything with CD-ROM, we have to find it. I took the same approach as &lt;a target="_blank" href="http://khason.net/blog/read-and-use-fm-radio-or-any-other-usb-hid-device-from-c/"&gt;I used for HID devices&lt;/a&gt;. Let’s create a device&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;[SecurityPermission(SecurityAction.InheritanceDemand, UnmanagedCode = true)]      &lt;br /&gt;[SecurityPermission(SecurityAction.Demand, UnmanagedCode = true)]       &lt;br /&gt;public class CDDADevice : SafeHandleZeroOrMinusOneIsInvalid, IDisposable, INotifyPropertyChanged {&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Internal constructor for security reasons&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;[SecurityPermission(SecurityAction.Demand, UnmanagedCode = true)]      &lt;br /&gt;internal CDDADevice(char drive) : base(true) {       &lt;br /&gt;   findDevice(drive);       &lt;br /&gt;}&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;And a find method itself&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;[SecurityPermission(SecurityAction.Demand, UnmanagedCode = true)]      &lt;br /&gt;private void findDevice(char drive) {       &lt;br /&gt;   if (Drive == drive) return;       &lt;br /&gt;   if (Native.GetDriveType(string.Concat(drive, ":\\")) == Native.DRIVE.CDROM) {       &lt;br /&gt;      this.handle = Native.CreateFile(string.Concat("\\\\.\\", drive, ':'), Native.GENERIC_READ, Native.FILE_SHARE_READ, IntPtr.Zero, Native.OPEN_EXISTING, Native.FILE_ATTRIBUTE_READONLY | Native.FILE_FLAG_SEQUENTIAL_SCAN, IntPtr.Zero);       &lt;br /&gt;      if (this.handle.ToInt32() != -1 &amp;amp;&amp;amp; this.handle.ToInt32() != 0) this.Drive = drive;       &lt;br /&gt;   }       &lt;br /&gt;}&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Where GetDriveType and CreateFile are win32 methods with following signatures&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]      &lt;br /&gt;[DllImport("kernel32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]       &lt;br /&gt;internal static extern DRIVE GetDriveType(string drive);       &lt;br /&gt;[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]       &lt;br /&gt;[DllImport("kernel32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]       &lt;br /&gt;internal static extern IntPtr CreateFile(       &lt;br /&gt;      string lpFileName,       &lt;br /&gt;      uint dwDesiredAccess,       &lt;br /&gt;      uint dwShareMode,       &lt;br /&gt;      IntPtr SecurityAttributes,       &lt;br /&gt;      uint dwCreationDisposition,       &lt;br /&gt;      uint dwFlagsAndAttributes,       &lt;br /&gt;      IntPtr hTemplateFile);       &lt;br /&gt;[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]       &lt;br /&gt;[DllImport("kernel32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]       &lt;br /&gt;internal static extern bool CloseHandle(IntPtr hHandle);&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Also, we need some constants&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;internal enum DRIVE : byte {      &lt;br /&gt;   UNKNOWN = 0,       &lt;br /&gt;   NO_ROOT_DIR,       &lt;br /&gt;   REMOVABLE,       &lt;br /&gt;   FIXED,       &lt;br /&gt;   REMOTE,       &lt;br /&gt;   CDROM,       &lt;br /&gt;   RAMDISK       &lt;br /&gt;}&lt;/p&gt;    &lt;p&gt;internal const uint GENERIC_READ = 0x80000000;      &lt;br /&gt;internal const uint FILE_SHARE_READ = 0x00000001;       &lt;br /&gt;internal const uint OPEN_EXISTING = 3;       &lt;br /&gt;internal const uint FILE_ATTRIBUTE_READONLY = 0x00000001;       &lt;br /&gt;internal const uint FILE_FLAG_SEQUENTIAL_SCAN = 0x08000000;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now, when we have our cdrom handle in hands, we can read it’s Table Of Content. Now, thing become harder because of the fact, that we have to use very complicated platform method:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]      &lt;br /&gt;[DllImport("kernel32.dll", EntryPoint = "DeviceIoControl", SetLastError=true)]       &lt;br /&gt;[return: MarshalAs(UnmanagedType.Bool)]       &lt;br /&gt;internal static extern bool DeviceIoControl(       &lt;br /&gt;   [In] IntPtr hDevice,       &lt;br /&gt;   IOCTL dwIoControl,       &lt;br /&gt;   [In] IntPtr lpInBuffer,       &lt;br /&gt;   uint nInBufferSize,       &lt;br /&gt;   IntPtr lpOutBuffer,       &lt;br /&gt;   uint nOutBufferSize,       &lt;br /&gt;   out uint lpBytesReturned,       &lt;br /&gt;   IntPtr lpOverlapped);&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;When thing are generic it’s good, however this one is, probably, most generic method in Win32 API. You can do anything with this method and you never know what to expect in lpOutBuffer :) &lt;/p&gt;  &lt;p&gt;However, as I told earlier, I invested three days in investigations and researches (tnx to DDK documentation team) and now things become to be clearer. We need to get CDROM_TOC. It done by invoking IOCTL_CDROM_READ_TOC call&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;uint bytesRead = 0;      &lt;br /&gt;TOC = new Native.CDROM_TOC();       &lt;br /&gt;TOC.Length = (ushort)Marshal.SizeOf(TOC);       &lt;br /&gt;var hTOC = Marshal.AllocHGlobal(TOC.Length);       &lt;br /&gt;Marshal.StructureToPtr(TOC, hTOC, true);       &lt;br /&gt;if (Native.DeviceIoControl(this.handle, Native.IOCTL.CDROM_READ_TOC, IntPtr.Zero, 0, hTOC, TOC.Length, out bytesRead, IntPtr.Zero)) Marshal.PtrToStructure(hTOC, TOC);       &lt;br /&gt;Marshal.FreeHGlobal(hTOC);&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;But, not too fast. CDROM_TOC contains array of TRACK_DATA with unknown size.&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre&gt;typedef struct _CDROM_TOC {&lt;br /&gt;  UCHAR  Length[2];&lt;br /&gt;  UCHAR  FirstTrack;&lt;br /&gt;  UCHAR  LastTrack;&lt;br /&gt;  TRACK_DATA  TrackData[MAXIMUM_NUMBER_TRACKS];&lt;br /&gt;} CDROM_TOC, *PCDROM_TOC;&lt;/pre&gt;

  &lt;pre&gt;typedef struct _TRACK_DATA {&lt;br /&gt;  UCHAR  Reserved;&lt;br /&gt;  UCHAR  Control : 4;&lt;br /&gt;  UCHAR  Adr : 4;&lt;br /&gt;  UCHAR  TrackNumber;&lt;br /&gt;  UCHAR  Reserved1;&lt;br /&gt;  UCHAR  Address[4];&lt;br /&gt;} TRACK_DATA, *PTRACK_DATA;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a target="_blank" href="http://khason.net/blog/pinvoke-cheat-sheet/"&gt;P/Invoke&lt;/a&gt; it! But how to marshal unknown array? We should create wrapper object. Also there is very fun BitVector, used in this structure! What’s the problem? Pin it with some Math!&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] 
    &lt;br /&gt;public class CDROM_TOC { 

    &lt;br /&gt;   public ushort Length; 

    &lt;br /&gt;   public byte FirstTrack; 

    &lt;br /&gt;   public byte LastTrack; 

    &lt;br /&gt;   public TRACK_DATA_ARRAY TrackData; 

    &lt;br /&gt;}&lt;/p&gt;

  &lt;p&gt;[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] 
    &lt;br /&gt;public struct TRACK_DATA { 

    &lt;br /&gt;   public byte Reserved; 

    &lt;br /&gt;   public byte bitVector; 

    &lt;br /&gt;   public byte Control { 

    &lt;br /&gt;      get { return ((byte)((this.bitVector &amp;amp; 15u))); } 

    &lt;br /&gt;      set { this.bitVector = ((byte)((value | this.bitVector))); } 

    &lt;br /&gt;   } 

    &lt;br /&gt;   public byte Adr { 

    &lt;br /&gt;      get { return ((byte)(((this.bitVector &amp;amp; 240u) / 16))); } 

    &lt;br /&gt;      set { this.bitVector = ((byte)(((value * 16) | this.bitVector))); } 

    &lt;br /&gt;   } 

    &lt;br /&gt;   public byte TrackNumber; 

    &lt;br /&gt;   public byte Reserved1; 

    &lt;br /&gt;   public uint Address; 

    &lt;br /&gt;}&lt;/p&gt;

  &lt;p&gt;[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] 
    &lt;br /&gt;internal sealed class TRACK_DATA_ARRAY { 

    &lt;br /&gt;   internal TRACK_DATA_ARRAY() { data = new byte[MAXIMUM_NUMBER_TRACKS * Marshal.SizeOf(typeof(TRACK_DATA))]; } &lt;/p&gt;

  &lt;p&gt;   [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAXIMUM_NUMBER_TRACKS * 8)] 
    &lt;br /&gt;   private byte[] data; 

    &lt;br /&gt;   public TRACK_DATA this[int idx] { 

    &lt;br /&gt;      get { 

    &lt;br /&gt;         if ((idx &amp;lt; 0) | (idx &amp;gt;= MAXIMUM_NUMBER_TRACKS)) throw new IndexOutOfRangeException(); 

    &lt;br /&gt;         TRACK_DATA res; 

    &lt;br /&gt;         var hData = GCHandle.Alloc(data, GCHandleType.Pinned); 

    &lt;br /&gt;         try { 

    &lt;br /&gt;            var buffer = hData.AddrOfPinnedObject(); 

    &lt;br /&gt;            buffer = (IntPtr)(buffer.ToInt32() + (idx * Marshal.SizeOf(typeof(TRACK_DATA)))); 

    &lt;br /&gt;            res = (TRACK_DATA)Marshal.PtrToStructure(buffer, typeof(TRACK_DATA)); 

    &lt;br /&gt;         } finally { 

    &lt;br /&gt;            hData.Free(); 

    &lt;br /&gt;         } 

    &lt;br /&gt;         return res; 

    &lt;br /&gt;      } 

    &lt;br /&gt;   } 

    &lt;br /&gt;}&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Fuf, done. The code is rather self explaining, we just “tell” marshaler, that we have byte array, while calculating pointers to pinned object to get actual value and marshal it back. So, now we have TOC. So, we know how many tracks we have and addresses to data chunks inside the CD. &lt;/p&gt;

&lt;p&gt;But it now enough to understand where our tracks. &lt;a target="_blank" href="http://en.wikipedia.org/wiki/CD-ROM"&gt;CD-ROM&lt;/a&gt; structure is very tricky. There we have blocks or sectors (which is the smallest chunks of data), so we have to convert bytes into sector addresses. Each block is 2352 bytes in RAW mode, while address value inside TRACK_DATA points us to layout address with is sync, sector id, error detection etc… So, in order to convert TRACK object into actual track number on disk, we have to stick to following method&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;public static int SectorAddress(this TRACK_DATA data) { 
    &lt;br /&gt;   var addr = BitConverter.GetBytes(data.Address); 

    &lt;br /&gt;   return (addr[1] * 60 * 75 + addr[2] * 75 + addr[3]) - 150; 

    &lt;br /&gt;}&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, when we know numbers of tracks, we also know start and end sector, disk type and other useful information we are ready to twist it a bit and read CD-Text (if there are and your CD reader supports it).&lt;/p&gt;

&lt;p&gt;So, coming back to our favorite method DeviceIoControl, but this time with IOCTL_CDROM_READ_TOC_EX control. &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;bytesRead = 0;            &lt;br /&gt;TOCex = new Native.CDROM_READ_TOC_EX { 

    &lt;br /&gt;   Format = Native.CDROM_READ_TOC_EX_FORMAT.CDTEXT 

    &lt;br /&gt;}; 

    &lt;br /&gt;var sTOCex = Marshal.SizeOf(TOCex); 

    &lt;br /&gt;var hTOCex = Marshal.AllocHGlobal(sTOCex); 

    &lt;br /&gt;Marshal.StructureToPtr(TOCex, hTOCex, true); &lt;/p&gt;

  &lt;p&gt;var Data = new Native.CDROM_TOC_CD_TEXT_DATA(); 
    &lt;br /&gt;Data.Length = (ushort)Marshal.SizeOf(Data); 

    &lt;br /&gt;var hData = Marshal.AllocHGlobal(Data.Length); 

    &lt;br /&gt;Marshal.StructureToPtr(Data, hData, true); 

    &lt;br /&gt;if (Native.DeviceIoControl(this.handle, Native.IOCTL.CDROM_READ_TOC_EX, hTOCex, (ushort)sTOCex, hData, Data.Length, out bytesRead, IntPtr.Zero)) Marshal.PtrToStructure(hData, Data); 

    &lt;br /&gt;Marshal.FreeHGlobal(hData); 

    &lt;br /&gt;Marshal.FreeHGlobal(hTOCex);&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Looks too simple? Let’s see inside CDROM_READ_TOC_EX structure. It is very similar to _CDROM_TOC.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre&gt;typedef struct _CDROM_READ_TOC_EX {&lt;br /&gt;  UCHAR Format : 4;&lt;br /&gt;  UCHAR Reserved1 : 3; &lt;br /&gt;  UCHAR Msf : 1;&lt;br /&gt;  UCHAR SessionTrack;&lt;br /&gt;  UCHAR Reserved2;&lt;br /&gt;  UCHAR Reserved3;&lt;br /&gt;} CDROM_READ_TOC_EX, *PCDROM_READ_TOC_EX;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Simple. Isn’t it?&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] 
    &lt;br /&gt;public struct CDROM_READ_TOC_EX { 

    &lt;br /&gt;   public uint bitVector; 

    &lt;br /&gt;   public CDROM_READ_TOC_EX_FORMAT Format { 

    &lt;br /&gt;      get { return ((CDROM_READ_TOC_EX_FORMAT)((this.bitVector &amp;amp; 15u))); } 

    &lt;br /&gt;      set { this.bitVector = (uint)((byte)value | this.bitVector); } 

    &lt;br /&gt;   } &lt;/p&gt;

  &lt;p&gt;   public uint Reserved1 { 
    &lt;br /&gt;      get { return ((uint)(((this.bitVector &amp;amp; 112u) / 16))); } 

    &lt;br /&gt;      set { this.bitVector = ((uint)(((value * 16) | this.bitVector))); } 

    &lt;br /&gt;   } &lt;/p&gt;

  &lt;p&gt;   public uint Msf { 
    &lt;br /&gt;      get { return ((uint)(((this.bitVector &amp;amp; 128u) / 128))); } 

    &lt;br /&gt;      set { this.bitVector = ((uint)(((value * 128) | this.bitVector))); } 

    &lt;br /&gt;   } 

    &lt;br /&gt;   public byte SessionTrack; 

    &lt;br /&gt;   public byte Reserved2; 

    &lt;br /&gt;   public byte Reserved3; 

    &lt;br /&gt;}&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But what will come inside lpOutBuffer? Fellow structure, named CDROM_TOC_CD_TEXT_DATA with unknown size array of CDROM_TOC_CD_TEXT_DATA_BLOCK&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre&gt;typedef struct _CDROM_TOC_CD_TEXT_DATA {&lt;br /&gt;  UCHAR  Length[2];&lt;br /&gt;  UCHAR  Reserved1;&lt;br /&gt;  UCHAR  Reserved2;&lt;br /&gt;  CDROM_TOC_CD_TEXT_DATA_BLOCK  Descriptors[0];&lt;br /&gt;} CDROM_TOC_CD_TEXT_DATA, *PCDROM_TOC_CD_TEXT_DATA;&lt;/pre&gt;

  &lt;pre&gt;typedef struct _CDROM_TOC_CD_TEXT_DATA_BLOCK {&lt;br /&gt;  UCHAR  PackType;&lt;br /&gt;  UCHAR  TrackNumber:7;&lt;br /&gt;  UCHAR  ExtensionFlag:1;&lt;br /&gt;  UCHAR  SequenceNumber;&lt;br /&gt;  UCHAR  CharacterPosition:4;&lt;br /&gt;  UCHAR  BlockNumber:3;&lt;br /&gt;  UCHAR  Unicode:1;&lt;br /&gt;  union {&lt;br /&gt;    UCHAR  Text[12];&lt;br /&gt;    WCHAR  WText[6];&lt;br /&gt;  };&lt;br /&gt;  UCHAR  CRC[2];&lt;br /&gt;} CDROM_TOC_CD_TEXT_DATA_BLOCK, *PCDROM_TOC_CD_TEXT_DATA_BLOCK;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Too bad to be true. Isn’t it? Let’s try to marshal it my hands (with the trick used for TRACK_DATA&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] 
    &lt;br /&gt;public class CDROM_TOC_CD_TEXT_DATA { 

    &lt;br /&gt;   public ushort Length; 

    &lt;br /&gt;   public byte Reserved1; 

    &lt;br /&gt;   public byte Reserved2; 

    &lt;br /&gt;   public CDROM_TOC_CD_TEXT_DATA_BLOCK_ARRAY Descriptors; 

    &lt;br /&gt;} &lt;/p&gt;

  &lt;p&gt;[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] 
    &lt;br /&gt;internal sealed class CDROM_TOC_CD_TEXT_DATA_BLOCK_ARRAY { 

    &lt;br /&gt;   internal CDROM_TOC_CD_TEXT_DATA_BLOCK_ARRAY() { data = new byte[MINIMUM_CDROM_READ_TOC_EX_SIZE * MAXIMUM_NUMBER_TRACKS * Marshal.SizeOf(typeof(CDROM_TOC_CD_TEXT_DATA_BLOCK))]; } &lt;/p&gt;

  &lt;p&gt;   [MarshalAs(UnmanagedType.ByValArray, SizeConst = MINIMUM_CDROM_READ_TOC_EX_SIZE * MAXIMUM_NUMBER_TRACKS * 18)] 
    &lt;br /&gt;   private byte[] data; 

    &lt;br /&gt;   public CDROM_TOC_CD_TEXT_DATA_BLOCK this[int idx] { 

    &lt;br /&gt;      get { 

    &lt;br /&gt;         if ((idx &amp;lt; 0) | (idx &amp;gt;= MINIMUM_CDROM_READ_TOC_EX_SIZE * MAXIMUM_NUMBER_TRACKS)) throw new IndexOutOfRangeException(); 

    &lt;br /&gt;         CDROM_TOC_CD_TEXT_DATA_BLOCK res; 

    &lt;br /&gt;         var hData = GCHandle.Alloc(data, GCHandleType.Pinned); 

    &lt;br /&gt;         try { 

    &lt;br /&gt;            var buffer = hData.AddrOfPinnedObject(); 

    &lt;br /&gt;            buffer = (IntPtr)(buffer.ToInt32() + (idx * Marshal.SizeOf(typeof(CDROM_TOC_CD_TEXT_DATA_BLOCK)))); 

    &lt;br /&gt;            res = (CDROM_TOC_CD_TEXT_DATA_BLOCK)Marshal.PtrToStructure(buffer, typeof(CDROM_TOC_CD_TEXT_DATA_BLOCK)); 

    &lt;br /&gt;         } finally { 

    &lt;br /&gt;            hData.Free(); 

    &lt;br /&gt;         } 

    &lt;br /&gt;         return res; 

    &lt;br /&gt;      } 

    &lt;br /&gt;   } 

    &lt;br /&gt;} &lt;/p&gt;

  &lt;p&gt;[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] 
    &lt;br /&gt;public struct CDROM_TOC_CD_TEXT_DATA_BLOCK { 

    &lt;br /&gt;   public CDROM_CD_TEXT_PACK PackType; 

    &lt;br /&gt;   public byte bitVector1; 

    &lt;br /&gt;   public byte TrackNumber { 

    &lt;br /&gt;      get { return ((byte)((this.bitVector1 &amp;amp; 127u))); } 

    &lt;br /&gt;      set { this.bitVector1 = ((byte)((value | this.bitVector1))); } 

    &lt;br /&gt;   } &lt;/p&gt;

  &lt;p&gt;   public byte ExtensionFlag { 
    &lt;br /&gt;      get { return ((byte)(((this.bitVector1 &amp;amp; 128u) / 128))); } 

    &lt;br /&gt;      set { this.bitVector1 = ((byte)(((value * 128) | this.bitVector1))); } 

    &lt;br /&gt;   } &lt;/p&gt;

  &lt;p&gt;   public byte SequenceNumber; 
    &lt;br /&gt;   public byte bitVector2;         &lt;/p&gt;

  &lt;p&gt;   public byte CharacterPosition { 
    &lt;br /&gt;      get { return ((byte)((this.bitVector2 &amp;amp; 15u))); } 

    &lt;br /&gt;      set { this.bitVector2 = ((byte)((value | this.bitVector2))); } 

    &lt;br /&gt;   } &lt;/p&gt;

  &lt;p&gt;   public byte BlockNumber { 
    &lt;br /&gt;      get { return ((byte)(((this.bitVector2 &amp;amp; 112u) / 16))); } 

    &lt;br /&gt;      set { this.bitVector2 = ((byte)(((value * 16) | this.bitVector2))); } 

    &lt;br /&gt;   } &lt;/p&gt;

  &lt;p&gt;   public byte Unicode { 
    &lt;br /&gt;      get { return ((byte)(((this.bitVector2 &amp;amp; 128u) / 128))); } 

    &lt;br /&gt;      set { this.bitVector2 = ((byte)(((value * 128) | this.bitVector2))); } 

    &lt;br /&gt;   } 

    &lt;br /&gt;   [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12, ArraySubType = UnmanagedType.I1)] 

    &lt;br /&gt;   public byte[] TextBuffer; &lt;/p&gt;

  &lt;p&gt;   public string Text { 
    &lt;br /&gt;      get { return (Unicode == 1) ? ASCIIEncoding.ASCII.GetString(TextBuffer) : UTF32Encoding.UTF8.GetString(TextBuffer); } 

    &lt;br /&gt;   } &lt;/p&gt;

  &lt;p&gt;   public ushort CRC; 
    &lt;br /&gt;}&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Can’t you see a small problem here? Yes, we do not know the actual/maximum size of CDROM_TOC_CD_TEXT_DATA_BLOCK array. Until, I’ll find a nice way to marshal smart pointers, we’ll stick to MAX_TRACKS (100) * MIN_DATA_BLOCK (2).&lt;/p&gt;

&lt;p&gt;We almost finished and the worst things are behind us. Now you should enumerate thru CDROM_TOC_CD_TEXT_DATA_BLOCK and look for Text, TrackNumber and SequenceNumber (which is continuation of text reported). For example, slot for ALBUM_NAME “Satisfaction” will looks as following &lt;/p&gt;

&lt;table border="0" cellspacing="0" cellpadding="2" width="200"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td valign="top" width="100"&gt;BlockNumber&lt;/td&gt;

      &lt;td valign="top" width="100"&gt;0x00&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="100"&gt;CharacterPosition&lt;/td&gt;

      &lt;td valign="top" width="100"&gt;0x00&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="100"&gt;CRC&lt;/td&gt;

      &lt;td valign="top" width="100"&gt;0x3EAB&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="100"&gt;SequenceNumber&lt;/td&gt;

      &lt;td valign="top" width="100"&gt;0x00&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="100"&gt;Text&lt;/td&gt;

      &lt;td valign="top" width="100"&gt;\0SATISFACTIO&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;table border="0" cellspacing="0" cellpadding="2" width="219"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td valign="top" width="100"&gt;BlockNumber&lt;/td&gt;

      &lt;td valign="top" width="117"&gt;0x00&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="100"&gt;CharacterPosition&lt;/td&gt;

      &lt;td valign="top" width="117"&gt;0x0B&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="100"&gt;CRC&lt;/td&gt;

      &lt;td valign="top" width="117"&gt;0x0564&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="100"&gt;SequenceNumber&lt;/td&gt;

      &lt;td valign="top" width="117"&gt;0x01&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="100"&gt;Text&lt;/td&gt;

      &lt;td valign="top" width="117"&gt;N\0&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;And so on… What to do with all other data and how to use it to enhance listening (ripping/crunching/seeking) experience we’ll speak next time. Have a good day and be good people.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:eeb67b17-3e9f-4256-8b73-87096ef1d693" class="wlWriterEditableSmartContent"&gt;&lt;div id="a10638d0-ab0c-45b1-bc45-a9f681f4721b" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=Y7T49_LPt-8" target="_new"&gt;&lt;img src="http://geekswithblogs.net/images/geekswithblogs_net/tamir/WindowsLiveWriter/AudioCDoperationincludingCDTextreadingin_1241D/video700e59bee511.jpg" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('a10638d0-ab0c-45b1-bc45-a9f681f4721b'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/Y7T49_LPt-8&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/Y7T49_LPt-8&amp;amp;hl=en\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;[X-Posted from &lt;/strong&gt;&lt;a title="http://khason.net/dev/audio-cd-operation-including-cd-text-reading-in-pure-c/" href="http://khason.net/dev/audio-cd-operation-including-cd-text-reading-in-pure-c/"&gt;&lt;strong&gt;http://khason.net/dev/audio-cd-operation-including-cd-text-reading-in-pure-c/&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128464"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128464" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/tamir/aggbug/128464.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/505481630" height="1" width="1"/&gt;</description><dc:creator>tamir</dc:creator><feedburner:origLink>http://geekswithblogs.net/tamir/archive/2009/01/07/audio-cd-operation-including-cd-text-reading-in-pure-c.aspx</feedburner:origLink></item><item><title>Orchestration Designer Crash</title><link>http://feeds.feedburner.com/~r/geekswithblogs/~3/505459662/128463.aspx</link><pubDate>Wed, 07 Jan 2009 18:00:20 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/wmichel/archive/2009/01/07/128463.aspx</guid><wfw:comment>http://geekswithblogs.net/wmichel/comments/128463.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/wmichel/comments/commentRss/128463.aspx</wfw:commentRss><comments>http://geekswithblogs.net/wmichel/archive/2009/01/07/128463.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/wmichel/services/trackbacks/128463.aspx</trackback:ping><source url="http://geekswithblogs.net/wmichel/rss.aspx">Orchestration Designer Crash</source><description>I recently encountered a troubling problem while creating a BizTalk 2006 R2 solution.  Everything was working fine until I tried to open the Orchestration Designer to edit one of the orchestrations I had been working of for a couple of days.  Visual Studio crashed immediately.  I tried a few things, but I could not open any orchestration without Visual Studio crashing (no errors in event log, no dialog, nothing...).

I finally fixed it by backing up and deleting my Visual Studio profile.  The profile information is stored in a folder.  This folder is located in C:\Documents and Settings\user\Application Data\Microsoft\VisualStudio\8.0.

I don't know what got messed up in the profile.  Clearly some sort of VS/BizTalk bug.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128463"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128463" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/wmichel/aggbug/128463.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/505459662" height="1" width="1"/&gt;</description><dc:creator>Walter Michel</dc:creator><feedburner:origLink>http://geekswithblogs.net/wmichel/archive/2009/01/07/128463.aspx</feedburner:origLink></item><item><title>Possibly good news!! Obama and his IT stimulus!</title><link>http://feeds.feedburner.com/~r/geekswithblogs/~3/505445273/possibly-good-news-obama-and-his-it-stimulus.aspx</link><pubDate>Wed, 07 Jan 2009 17:56:47 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/ITStaffer/archive/2009/01/07/possibly-good-news-obama-and-his-it-stimulus.aspx</guid><wfw:comment>http://geekswithblogs.net/ITStaffer/comments/128462.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/ITStaffer/comments/commentRss/128462.aspx</wfw:commentRss><comments>http://geekswithblogs.net/ITStaffer/archive/2009/01/07/possibly-good-news-obama-and-his-it-stimulus.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/ITStaffer/services/trackbacks/128462.aspx</trackback:ping><source url="http://geekswithblogs.net/ITStaffer/rss.aspx">Possibly good news!! Obama and his IT stimulus!</source><description>&lt;h1 style="MARGIN: auto 0in"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;
&lt;h1 style="MARGIN: auto 0in"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;
&lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="6"&gt;
&lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; BACKGROUND: #fcfcf7; COLOR: #354669; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: EN"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;
&lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 12pt"&gt;Just in case you weren’t convinced that I read it all of the time, I’m referencing another article from Computerworld. In it, the writer discusses how President-elect Barack Obama’s stimulus could create thousands of IT jobs. This is good news for you and great news for me!! &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;So watch the stimulus closely to see how you or your organization can utilize it. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;font size="3"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;font size="3"&gt;Even without the stimulus, the article continues to say that the IT job outlook for 2009 is better than other industries. So keep on coding, troubleshooting and installing! It could actually be a great year!&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="citation" style="MARGIN: 0in 0in 0pt"&gt;&lt;em&gt;&lt;span style="FONT-SIZE: 10pt; BACKGROUND: #fcfcf7; FONT-FAMILY: Arial"&gt;Thibodeau&lt;/span&gt;&lt;/em&gt;&lt;em&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; BACKGROUND: #fcfcf7; FONT-FAMILY: Arial; mso-ansi-language: EN"&gt;, Patrick. "&lt;/span&gt;&lt;/em&gt;&lt;em&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; BACKGROUND: #fcfcf7; FONT-FAMILY: Arial; mso-ansi-language: EN"&gt; &lt;/span&gt;&lt;/em&gt;&lt;em&gt;&lt;span style="FONT-SIZE: 10pt; BACKGROUND: #fcfcf7; FONT-FAMILY: Arial"&gt;Stimulus could create thousands of IT jobs&lt;/span&gt;&lt;/em&gt;&lt;em&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; BACKGROUND: #fcfcf7; FONT-FAMILY: Arial; mso-ansi-language: EN"&gt;." &lt;u&gt;Computerworld&lt;/u&gt;. 5 January 2009&lt;span style="COLOR: #354669"&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;span lang="EN" style="FONT-SIZE: 10pt; BACKGROUND: #fcfcf7; COLOR: #330066; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: EN"&gt; &lt;a href="http://www.computerworld.com.au/article/272042/stimulus_could_create_thousands_it_jobs"&gt;&lt;font color="#800080"&gt;http://www.computerworld.com.au/article/272042/stimulus_could_create_thousands_it_jobs&lt;/font&gt;&lt;/a&gt; &lt;/span&gt;&lt;span lang="EN" style="FONT-SIZE: 9pt; BACKGROUND: #fcfcf7; COLOR: #354669; FONT-FAMILY: &amp;quot;Courier New&amp;quot;; mso-ansi-language: EN"&gt;.&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;/font&gt;&lt;/h2&gt;
&lt;/span&gt;&lt;/h1&gt;
&lt;/span&gt;&lt;/h1&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128462"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128462" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/ITStaffer/aggbug/128462.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/505445273" height="1" width="1"/&gt;</description><dc:creator>ITStaffer</dc:creator><feedburner:origLink>http://geekswithblogs.net/ITStaffer/archive/2009/01/07/possibly-good-news-obama-and-his-it-stimulus.aspx</feedburner:origLink></item><item><title>My Computer Industry Predictions for 2009</title><link>http://feeds.feedburner.com/~r/geekswithblogs/~3/505445274/128461.aspx</link><pubDate>Wed, 07 Jan 2009 17:55:21 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/TakeNote/archive/2009/01/07/128461.aspx</guid><wfw:comment>http://geekswithblogs.net/TakeNote/comments/128461.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/TakeNote/comments/commentRss/128461.aspx</wfw:commentRss><comments>http://geekswithblogs.net/TakeNote/archive/2009/01/07/128461.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/TakeNote/services/trackbacks/128461.aspx</trackback:ping><source url="http://geekswithblogs.net/TakeNote/rss.aspx">My Computer Industry Predictions for 2009</source><description>&lt;p&gt;Unwrapping my new &lt;a href="http://www.calendars.com/xq/asp/PID.1/MGID.68/IID.44452/gAffInfo._Phrase/qx/product.htm" target="_blank"&gt;Wolves wall calendar&lt;/a&gt; I realized its time to do some &lt;a href="http://www.thefreedictionary.com/prognosticating" target="_blank"&gt;prognosticating&lt;/a&gt;. I've blown the dust off my &lt;a href="http://en.wikipedia.org/wiki/Nostradamus" target="_blank"&gt;Nostradamus&lt;/a&gt; predictions book, taken some fresh tea leaves and smeared them all over my cracked crystal ball (it rolled off my desk last March and I haven't taken the time to get a replacement) and I'm ready to peer deep into the future... Oh yeah, don't hold me to these. :-)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Google Acquires IKEA&lt;/strong&gt;: Google figures the best approach to gaining ground on the computer desktop is to buy the company that makes desks. Seems logical.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Advertising Prediction&lt;/strong&gt;: PC finally snaps under the pressure and ridicule from that pesky and trendy Mac guy. He takes the witness stand during the murder trial wearing a t-shirt with a penguin on it. When asked if he did it he says "I'm NOT a PC." Jury doesn't buy it and convicts him thus finally ending the PC vs Mac advertising campaign. Microsoft stock jumps 13%.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Microsoft Acquisition Prediction&lt;/strong&gt;: Microsoft somehow ends up with a piece of Yahoo in 2009. In more interesting news, Microsoft, in an attempt to boost its Internet search market share, acquires a small, start-up software company which specializes in applying artificial intelligence technology to Internet search algorithms. While performing an in-depth inventory review of all the software assets they just acquired, one Microsoft engineer turns to another and says "Hey Tim, check out this really cool chess game I found in the AI_Games folder. It's called The Turk ". And so it begins....   Didn't you just know Microsoft had something to do with SkyNet????? :-)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;December 28, 2009 Prediction&lt;/strong&gt;: Looking back on 2009, Steve Ballmer is very pleased with the fantastic reception that Windows 7 received from the computer press and the market. Holiday PC sales bucked downward recessionary trends because people wanted a new PC with Windows 7 under the Christmas tree, next to the Menorah, or tied to the Festivus pole. Microsoft stock rises 18% from the time Windows 7 is released in early November until December 28. The debacle that was Vista is now behind them, Windows Server 2008 sales are surpassing expectations, armed with their new A.I. Internet search technology Live Search surpasses Google and achieves a 55% Internet search share, the new touch screen features in the new Windows Mobile are making those devices a "must have" in the consumer space, and of course those PC vs Mac ads are gone. All is finally good again at Microsoft.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;December 29, 2009 Prediction&lt;/strong&gt;: A memory management bug in the Universe's dark matter compressor driver causes the Universe to freeze up. A reboot is required and the universe starts all over from the beginning thus bringing to an end Microsoft's one day of joy and bliss.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Rich Internet and Desktop Applications Flourish&lt;/strong&gt;: With the continued interest and success of &lt;a href="http://www.silverlight.net" target="_blank"&gt;Silverlight&lt;/a&gt; more developers are brought into the world of &lt;a href="http://msdn.microsoft.com/en-us/library/ms752059.aspx" target="_blank"&gt;XAML&lt;/a&gt;. This has an unexpected benefit of driving up &lt;a href="http://windowsclient.net/" target="_blank"&gt;WPF&lt;/a&gt; adoption as developers become aware of the applications they can deliver on the client.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Laptop Hardware Prediction&lt;/strong&gt;: Solid State Drive (SSD) capacity continues to increase and prices continue to drop making SSDs a very attractive replacement for traditional hard drives on netbooks and laptop computers. Ok, that was a gimme. :-)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Solar Activity Prediction&lt;/strong&gt;: The sun will continue to rise in the east and set in the west for the entire year. I bet you thought this one had to do with solar flares, sunspots, or solar storms didn't you. Another gimme. :-)&lt;/p&gt;  &lt;p&gt;Uh oh, the cold water from the tea leaves (ice tea!) reacted with the glass in my crystal ball and caused the crack to expand, splitting my crystal ball in two. Looks likes I'm done prognosticating for this year. I figure next year I can look back on these and know that I got at least two right. Which two? Only time will tell... :-)&lt;/p&gt;  &lt;p&gt;I hope 2009 brings joy, happiness, and prosperity to you and your family!&lt;/p&gt;  &lt;p&gt;Have a great 2009!!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128461"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128461" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/TakeNote/aggbug/128461.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/505445274" height="1" width="1"/&gt;</description><dc:creator>Jim Duffy</dc:creator><feedburner:origLink>http://geekswithblogs.net/TakeNote/archive/2009/01/07/128461.aspx</feedburner:origLink></item><item><title>The road to passing the Joel Test revisited</title><link>http://feeds.feedburner.com/~r/geekswithblogs/~3/505405728/the-road-to-passing-the-joel-test-revisited.aspx</link><pubDate>Wed, 07 Jan 2009 17:11:57 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/WTFNext/archive/2009/01/07/the-road-to-passing-the-joel-test-revisited.aspx</guid><wfw:comment>http://geekswithblogs.net/WTFNext/comments/128460.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/WTFNext/comments/commentRss/128460.aspx</wfw:commentRss><comments>http://geekswithblogs.net/WTFNext/archive/2009/01/07/the-road-to-passing-the-joel-test-revisited.aspx#comment</comments><slash:comments>5</slash:comments><trackback:ping>http://geekswithblogs.net/WTFNext/services/trackbacks/128460.aspx</trackback:ping><source url="http://geekswithblogs.net/WTFNext/rss.aspx">The road to passing the Joel Test revisited</source><description>&lt;p&gt;A while back I made a post about &lt;a href="http://www.wtfnext.com/archive/2008/10/29/the-road-to-passing-the-joel-test.aspx"&gt;the Joel test and how badly my current employer is doing according to it.&lt;/a&gt; I've made it a personal goal to help improve my working conditions here as long as I am employed here, and as such I've started tackling weak areas, namely beginning with implementing source control management (SCM).&lt;/p&gt;  &lt;p&gt;As I've mentioned in my year wrap-up, we've made great progress in this department. I no longer write code unless I've first created a repository. For older jobs, as I use and update them, I add them to the repository. Slowly, many of our critical projects are making their way into our Subversion based solution.&lt;/p&gt;  &lt;p&gt;The reason I went with Subversion is because I currently don't have much pull here. Subversion is free (something management loves hearing) and proved easy to implement. We're using &lt;a href="http://www.visualsvn.com/server/"&gt;VisualSVN Server&lt;/a&gt; for the repository and &lt;a href="http://tortoisesvn.net/"&gt;TortoiseSVN&lt;/a&gt; for the client side (checking out, updating and commiting).&lt;/p&gt;  &lt;p&gt;My goals have changed from implementing source control to now making sure that any critical and changing code is available and updated to the source control server. Also, I hope we can migrate the server eventually from a spare dev box to an actual server, because I'm having some issues with VisualSVN and the the box suspending or sleeping (namely I can't commit at these times, and have to wake the box AND log in... I thought it shouldn't happen like this since VisualSVN runs as a service).&lt;/p&gt;  &lt;p&gt;So altogether, our work environment is improving. Next on my list is something so critical it serves as an assumption rather than a question on the Joel Test, and that is proper unit testing / testing period. This needs to be overhauled here, and I'll be working on it.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:71f9fceb-dad6-44c1-bbc6-4e9e69197433" 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/Joel%20on%20Software" rel="tag"&gt;Joel on Software&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Joel%20Test" rel="tag"&gt;Joel Test&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128460"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128460" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/WTFNext/aggbug/128460.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/505405728" height="1" width="1"/&gt;</description><dc:creator>Stacy Vicknair</dc:creator><feedburner:origLink>http://geekswithblogs.net/WTFNext/archive/2009/01/07/the-road-to-passing-the-joel-test-revisited.aspx</feedburner:origLink></item><item><title>MacWorld MacDull: Is Apple's Innovative Era Over? | Newsweek Daniel Lyons | Techtonic Shifts | Newsweek.com</title><link>http://feeds.feedburner.com/~r/geekswithblogs/~3/505358983/128459.aspx</link><pubDate>Wed, 07 Jan 2009 15:51:12 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/murraybgordon/archive/2009/01/07/128459.aspx</guid><wfw:comment>http://geekswithblogs.net/murraybgordon/comments/128459.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/murraybgordon/comments/commentRss/128459.aspx</wfw:commentRss><comments>http://geekswithblogs.net/murraybgordon/archive/2009/01/07/128459.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/murraybgordon/services/trackbacks/128459.aspx</trackback:ping><source url="http://geekswithblogs.net/murraybgordon/rss.aspx">MacWorld MacDull: Is Apple's Innovative Era Over? | Newsweek Daniel Lyons | Techtonic Shifts | Newsweek.com</source><description>&lt;p&gt;What a Scathing review from Newsweek about MacWorld. Wow. Never thought I would see that from MacWorld.&lt;/p&gt;  &lt;p&gt;An opening quote like this is a rough as it gets: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“At the annual &lt;a href="http://www.newsweek.com/related.aspx?subject=MacWorld"&gt;Macworld trade show&lt;/a&gt; in San Francisco today, Apple put on an excruciating 90-minute keynote that may go down in history as the worst Apple event of all time. In brief: for the first time in recent memory, Apple has nothing interesting to sell. And the company's remarkable decadelong run as the hottest company in consumer electronics may be drawing to a close.” &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Check out the article yourself: &lt;a href="http://www.newsweek.com/id/178187"&gt;MacWorld MacDull: Is Apple's Innovative Era Over? | Newsweek Daniel Lyons | Techtonic Shifts | Newsweek.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Thanks for checking out this post!&lt;/p&gt;  &lt;table style="width: 650px" cellspacing="0" cellpadding="0" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td width="106"&gt;Cheers,          &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="94" alt="MurraySignature" src="http://wqblcw.bay.livefilestore.com/y1pimC8-UG0OX4P2kDbb4H3NCnrtgri02lDGrq0syF-CiBSfwpOfmQW16qAnMQA-jMWHc8usNeRzMI/MurraySig.png" width="120" border="0" /&gt; &lt;/td&gt;        &lt;td width="119"&gt;         &lt;div class="wlWriterSmartContent" id="scid:8747F07C-CDE8-481f-B0DF-C6CFD074BF67:e8f08a21-848c-4682-81d5-202cefaeb403" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;a title="" href="" rel="thumbnail"&gt;&lt;img src="http://wqblcw.bay.livefilestore.com/y1p0O6ya2VdEQcvZIpKmgbyvnVZB9TF-n8xWwVNuZRKKs4sN8sKQCxdcAJqOw_H2TYa-XHk0yKSDzM/Headshot.jpg" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;       &lt;/td&gt;        &lt;td width="296"&gt;         &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="EN-GB" style="font-size: 14pt; color: #548dd4; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Segoe UI'; mso-ansi-language: en-gb"&gt;Murray &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="EN-GB" style="font-size: 14pt; color: black; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: minor-fareast; mso-bidi-font-family: 'Segoe UI'; mso-ansi-language: en-gb"&gt;Gordon                &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; mso-no-proof: yes; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: minor-fareast"&gt;ISV Architect Evangelist              &lt;br /&gt;Microsoft Corporation  &lt;span style="mso-bidi-font-size: 11.0pt"&gt;               &lt;br /&gt;&lt;a href="sip:murrayg@microsoft.com" target="_blank"&gt;&lt;img height="16" alt="chat" src="http://wqblcw.bay.livefilestore.com/y1pHgjj4LpAg979gS55cNCrzizIOjGUeu0cPFSK5IAPuQu-_yh0a8U3L0PBLPFQUAiHW4yT3YZXqkk/OfficeCommunicator.gif" width="16" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt; &lt;a href="http://www.facebook.com/profile.php?id=557466916" target="_blank"&gt;&lt;img height="16" alt="facebook" src="http://wqblcw.bay.livefilestore.com/y1phiYtqdt01WbX-WEkFeHdgc-vGh3uFaTXPkWWsSxBgSwGmjVFtf3ng7PyxsJc3-Yqi2QynvaL6yg/Facebook.gif" width="16" border="0" /&gt;&lt;/a&gt; &lt;a href="http://twitter.com/murraybgordon" target="_blank"&gt;&lt;img height="16" alt="Twitter" src="http://wqblcw.bay.livefilestore.com/y1pFQPRF30RihrH1twKjGCuXhhRR0tWxZDxgoEr_pwDvZJ3mD5Mgm7JM0szdleOWYSOIAXrYJeaHqo/Twitter.gif" width="16" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.linkedin.com/in/murraybgordon" target="_blank"&gt;&lt;img height="16" alt="linkedin" src="http://wqblcw.bay.livefilestore.com/y1pR3zivTY9cjlrke7b1fEP372RxZzpJ97ZTTpGTudkvE0tRfmeEg40fNMS0rYICJm5cdx_5r9hgZY/linkedin.gif" width="16" border="0" /&gt;&lt;/a&gt; &lt;a href="http://murraybgordon.spaces.live.com" target="_blank"&gt;&lt;img height="16" alt="WindowsSpaces" src="http://wqblcw.bay.livefilestore.com/y1pPjL-ojiTDCMwqLxLSWQSPDkPkev4k5kKpCZbZe3BxEOnfPFSEzAM8SHaoll9PXUkUKY7KvlwZS8/WindowsSpaces.gif" width="16" border="0" /&gt;&lt;/a&gt; &lt;a href="http://live.xbox.com/member/the+mad+virus" target="_blank"&gt;&lt;img height="15" alt="XBox Live" src="http://wqblcw.bay.livefilestore.com/y1pUjKFgTWo4NjG35ac-Q8O2JOf8UHxtKgtjmJGdtQshZ-FhCA06sAQ6WnrUPvvAiOavNdf8Nl8TVE/XBoxLive.gif" width="32" border="0" /&gt;&lt;/a&gt; &lt;a href="http://murraybgordon.multiply.com" target="_blank"&gt;&lt;img height="16" alt="Multiply" src="http://wqblcw.bay.livefilestore.com/y1pjDC_D_ytCrA5WbvqsH5YbJlx-JeDS463KbVwrE2iySGwfy1uPiy95mGAwYR-IHHYJNkWIdfNWHM/Multiply.gif" width="16" border="0" /&gt;&lt;/a&gt;  &lt;a href="sip:murraybgordon@live.com" target="_blank"&gt;&lt;img height="16" alt="LiveMessenger" src="http://wqblcw.bay.livefilestore.com/y1pdcsaD8p3VRUj4-6rwc1ROkFLpFROI3SVyeSZFwZ-_6RbZdMnFLG8wHlFd1n3Th5XVARoEhLYE1o/Online.gif" width="16" border="0" /&gt;&lt;/a&gt;             &lt;br /&gt;&lt;a href="http://blogs.msdn.com/MurrayG" target="_blank"&gt;&lt;img height="16" alt="blog" src="http://wqblcw.bay.livefilestore.com/y1pPLr8rptcZMN9riffvqGJY881BPAm1DDVgcjfUmrzgPtDTlzmmOq0cbKTBvxPqGNz6n2L_yZ579g/Blog.gif" width="16" border="0" /&gt;&lt;/a&gt; &lt;a href="http://blogs.msdn.com/MurrayG"&gt;http://blogs.msdn.com/MurrayG&lt;/a&gt;             &lt;br /&gt;&lt;a href="http://blogs.msdn.com/usisvde" target="_blank"&gt;&lt;img height="16" alt="blog" src="http://wqblcw.bay.livefilestore.com/y1pPLr8rptcZMN9riffvqGJY881BPAm1DDVgcjfUmrzgPtDTlzmmOq0cbKTBvxPqGNz6n2L_yZ579g/Blog.gif" width="16" border="0" /&gt;&lt;/a&gt; &lt;a href="http://blogs.msdn.com/usisvde" target="_blank"&gt;US ISV Team Blog&lt;/a&gt;             &lt;br /&gt;&lt;a href="http://geekswithblogs.net/murraybgordon" target="_blank"&gt;&lt;img height="16" alt="blog" src="http://wqblcw.bay.livefilestore.com/y1pPLr8rptcZMN9riffvqGJY881BPAm1DDVgcjfUmrzgPtDTlzmmOq0cbKTBvxPqGNz6n2L_yZ579g/Blog.gif" width="16" border="0" /&gt;&lt;/a&gt; &lt;a href="http://geekswithblogs.net/murraybgordon" target="_blank"&gt;My GeeksWithBlogs Blog&lt;/a&gt; &lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128459"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128459" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/murraybgordon/aggbug/128459.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/505358983" height="1" width="1"/&gt;</description><dc:creator>Murray Gordon</dc:creator><feedburner:origLink>http://geekswithblogs.net/murraybgordon/archive/2009/01/07/128459.aspx</feedburner:origLink></item><item><title>SOA is Dead. Long Live SOA!</title><link>http://feeds.feedburner.com/~r/geekswithblogs/~3/505358984/128458.aspx</link><pubDate>Wed, 07 Jan 2009 15:51:02 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/MSARCH/archive/2009/01/07/128458.aspx</guid><wfw:comment>http://geekswithblogs.net/MSARCH/comments/128458.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/MSARCH/comments/commentRss/128458.aspx</wfw:commentRss><comments>http://geekswithblogs.net/MSARCH/archive/2009/01/07/128458.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/MSARCH/services/trackbacks/128458.aspx</trackback:ping><source url="http://geekswithblogs.net/MSARCH/rss.aspx">SOA is Dead. Long Live SOA!</source><description>&lt;div&gt;&lt;font size="2"&gt;A bittersweet emotion came over me when I heard that some of the most renowned of &lt;/font&gt;&lt;a href="http://weblog.infoworld.com/realworldsoa/archives/2009/01/burton_group_as_1.html"&gt;&lt;font size="2"&gt;industry experts&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;, even those heavily invested into the SOA movement, have now declared that &lt;/font&gt;&lt;a href="http://apsblog.burtongroup.com/2009/01/soa-is-dead-long-live-services.html"&gt;&lt;font size="2"&gt;SOA officially died&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; on 1 Jan 2009. {a moment of silence, please}&lt;br /&gt;
&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;It will not come as a great loss for me, as I have had a difficult time explaining SOA to technologists and making the business case to financial stakeholders. But since I firmly believe in the scalability benefit of loosely coupled, autonomous systems as proscribed by SOA principles, we need to look deeper into the thinking behind why these industry pundits are saying what they are saying. Officially the cause of death has been reported to be the current economic downturn. Budgets are tight, they argue and there will be little money left for funding expenditures on SOA products like ESB’s and dedicated application servers. SOA, they argue, was a failure because IT was too deeply embroiled in technological debates to deliver real solutions. Instead, business leaders now have profound new capabilities in mashups, SaaS and Cloud Services, they reason, which inevitably leads to the demise of the &lt;em&gt;SOA product space&lt;/em&gt;.&lt;br /&gt;
&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;Oh, some of the criticism concerning endless technological debating is certainly fair. And I do believe &lt;em&gt;SOA product vendor&lt;/em&gt;s contributed substantially to confusing the understanding of SOA. If anyone has heard me speak, you will understand, though, that SOA is not a product (specific application server) or a specific technology (like ESB). Therefore, these industry pundits show their profound misunderstanding of the SOA founding principles, in the form of loosely coupled, autonomous systems, by describing mashups, SaaS and Cloud Services as a replacement for SOA. On the contrary, these new capabilities are precisely the embodiment of the Service Oriented &lt;em&gt;Architectures&lt;/em&gt; that we technologists have been describing, planning and creating.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size="2"&gt;So as a firm believer in the scalability benefit of loosely coupled, autonomous systems, I will let the industry pundits apply whatever terminology makes they feel comfortable, but a rose by any other name would smell as sweet. So, on a personal level I will know that regardless of the term that the experts use, SOA will still run through it, to the very core. I will not mourn the loss of the hype surrounding the term SOA, because I will now be free to explain all of the misunderstanding and confusion away with a curt “Oh, SOA died in ’09.” Do not make the mistake of assuming that mashups, SaaS and Cloud Services are a silver bullet, though. As an enterprise architect or developer, therefore, you cannot blindly exploit the benefits of &lt;/font&gt;&lt;a href="http://www.google.com/apps/"&gt;&lt;font size="2"&gt;Google Apps&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;, &lt;/font&gt;&lt;a href="http://aws.amazon.com/"&gt;&lt;font size="2"&gt;Amazon AWS&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; or &lt;/font&gt;&lt;a href="http://dev.live.com/"&gt;&lt;font size="2"&gt;Microsoft Live Services/Azure&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;, without clearly understanding and following all of the principles of Service Oriented &lt;em&gt;Architecture&lt;/em&gt;, as well as proper &lt;strong&gt;&lt;a href="http://www.amazon.com/Design-Patterns-Prentice-Service-Oriented-Computing/dp/0136135161/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1231339317&amp;amp;sr=8-1"&gt;SOA Design Patterns&lt;/a&gt;&lt;/strong&gt; and best practices, otherwise you are likely to fail as profoundly as any previous unsuccessful EAI project that preceded yours. Despite the tight budgets, perhaps now is the best time to &lt;/font&gt;&lt;a href="http://www.microsoft.com/soa/conference/"&gt;&lt;font size="2"&gt;gain the required understanding&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; of how to best plan for and apply &lt;s&gt;SOA&lt;/s&gt; services to achieve the IT scalability that will be required once the business cycle recovers.&lt;/font&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128458"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128458" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/MSARCH/aggbug/128458.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/505358984" height="1" width="1"/&gt;</description><dc:creator>Jim Kita</dc:creator><feedburner:origLink>http://geekswithblogs.net/MSARCH/archive/2009/01/07/128458.aspx</feedburner:origLink></item><item><title>Selenium: the odyssey continues!</title><link>http://feeds.feedburner.com/~r/geekswithblogs/~3/505342244/128457.aspx</link><pubDate>Wed, 07 Jan 2009 15:46:27 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/tmoore/archive/2009/01/07/128457.aspx</guid><wfw:comment>http://geekswithblogs.net/tmoore/comments/128457.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/tmoore/comments/commentRss/128457.aspx</wfw:commentRss><comments>http://geekswithblogs.net/tmoore/archive/2009/01/07/128457.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://geekswithblogs.net/tmoore/services/trackbacks/128457.aspx</trackback:ping><source url="http://geekswithblogs.net/tmoore/rss.aspx">Selenium: the odyssey continues!</source><description>&lt;p&gt;&lt;font face="Arial"&gt;I've been working in Selenium RC for the past couple of weeks, and so far, I am pretty pleased. Selenium does some very cool things. However, it is open source, so there are some missing pieces.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Some random thoughts (good and bad) in no particular order:&lt;br /&gt;
- Web only. Totally cool with this, though. All of the apps I am expected to test are web-based.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;- No default logging mechanisim. By my own research (which could be wrong), it seems that most people have written their own logging mechanism. I'll do the same (something rudimentary at first, no doubt). Would be a great feature, but enh, this way I suppose you can use whatever pleases you. Double-edged sword, that.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;- Supports many languages. Very nice. I can write my actual tests in Java (JUnit) while I have C# (NUnit) up alongside. Given that I am more familiar with C#, this provides me some extra assistance to figure out if something is a "Theo don't know Java" issue or a Selenium issue. Most like the problem is the former, mind you.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;- Since it is written in real, no kidding, full-featured development languages, you can do some pretty cool things. Don't like the default version of the objects in the API? No problem! SubClass them and go on your merry. Very sweet. Don't know how many times I've wished the script-based tools would allow for this.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;- No direct access to the DOM. I can't begin to tell you how much I miss this. There are times when I'd like to iterate the DOM and do things. I used to do this a lot with other tools I've used. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;- No object recognition. Unlike many of the tools available, there is NO object recognition (i.e., some repository of bits used to identify an object in a simple way) out of the box. All objects on page are accessed via xPath expressions, although this isn't too tough if you know xPath and have access to a Firefox plugin to extract the xPath from the page. You could, in theory, write utility classes that take xPath in the constructor and fake up an object if you like, wrapping the calls. I have a hunch a lot of people do this and I might do the same here if I get time. Overall, though, the xPath method seems to be as good, if not better, than the object recog. model.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;- Documentation is seriously weak. A lot of what you learn is by trial and screw up. In one sense, this is effective; you tend to rememeber the things you screw up.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;- This is NOT a beginner's tool! You can do some recording in the Selenium IDE version (on Firefox only), but I get the impression most people record the base test in IDE then export it to the language of their choice for modification. You probably need some dev. background to really get the most out of this tool. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;- "Open" Source in this case can mean "breaks often". This is by no means a criticism, btw. Since there is a nightly (approx) build, issues are resolved and introduced all of the time. Just life in the big city. Overall, it seems the team that works on this product do a great job. Is it perfect? Nope. Is it usuable and available via Open Source? You betcha!&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;More on this as I get deeper into it.....&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128457"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128457" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/tmoore/aggbug/128457.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/505342244" height="1" width="1"/&gt;</description><dc:creator>Theo Moore</dc:creator><feedburner:origLink>http://geekswithblogs.net/tmoore/archive/2009/01/07/128457.aspx</feedburner:origLink></item><item><title>GoDaddy Marketing Flaw | Wow this is so not cool&amp;hellip;</title><link>http://feeds.feedburner.com/~r/geekswithblogs/~3/505342246/128456.aspx</link><pubDate>Wed, 07 Jan 2009 15:43:57 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/jjulian/archive/2009/01/07/128456.aspx</guid><wfw:comment>http://geekswithblogs.net/jjulian/comments/128456.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/jjulian/comments/commentRss/128456.aspx</wfw:commentRss><comments>http://geekswithblogs.net/jjulian/archive/2009/01/07/128456.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://geekswithblogs.net/jjulian/services/trackbacks/128456.aspx</trackback:ping><source url="http://geekswithblogs.net/jjulian/rss.aspx">GoDaddy Marketing Flaw | Wow this is so not cool&amp;hellip;</source><description>&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/jjulian/WindowsLiveWriter/GoDaddyMarketingFlawWowthisissonotcool_88D0/image_2.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="264" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/jjulian/WindowsLiveWriter/GoDaddyMarketingFlawWowthisissonotcool_88D0/image_thumb.png" width="477" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So I received a exciting email from GoDaddy this weekend stating I could &lt;strong&gt;“Get www.Julian.com for 25% off”&lt;/strong&gt; and I was shocked.  Not only is it a common name and most likely in &lt;font color="#ff0000"&gt;high demand&lt;/font&gt;, but it was on sale?  But of course there is fine print when you see the “**” so what did that say?&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/jjulian/WindowsLiveWriter/GoDaddyMarketingFlawWowthisissonotcool_88D0/image_4.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="29" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/jjulian/WindowsLiveWriter/GoDaddyMarketingFlawWowthisissonotcool_88D0/image_thumb_1.png" width="471" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Ok, so I think at this point they put this because they send out enough emails to people with the name Julian that it is “first come first serve” and I may be late to the game.&lt;/p&gt;  &lt;p&gt;So I rush over the GoDaddy and make it through their advertisements and finally get to the Domain Search.  The results of the search were as expected:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/jjulian/WindowsLiveWriter/GoDaddyMarketingFlawWowthisissonotcool_88D0/image_6.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="64" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/jjulian/WindowsLiveWriter/GoDaddyMarketingFlawWowthisissonotcool_88D0/image_thumb_2.png" width="342" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Someone beat me to this great deal, my hopes were not shot because they were not really high to begin with, but then I saw something that made me a little sick.  &lt;em&gt;(Whois record from GoDaddy)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/jjulian/WindowsLiveWriter/GoDaddyMarketingFlawWowthisissonotcool_88D0/image_8.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="82" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/jjulian/WindowsLiveWriter/GoDaddyMarketingFlawWowthisissonotcool_88D0/image_thumb_3.png" width="401" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Not only did someone beat me to it, but they beat me by &lt;strong&gt;NEARLY 14 YEARS&lt;/strong&gt;!!!  This domain was never available, nor have the owners even come close to their expiration date (5 months is a long time). &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Moral of the story&lt;/em&gt; is that even though the economy is in the toilet right now, this does not mean companies should move to blatant lies to sell product or retrieve advertising impressions.  Their hopes were that I would go to the site and see it was taken and go “Gosh, I guess I will buy one of these like domains,” when the real fact is that this domain was never for sale.&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:7cafd0da-1acd-4190-8dc9-75d8b02bd981" 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/GoDaddy" rel="tag"&gt;GoDaddy&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Domain" rel="tag"&gt;Domain&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Economy" rel="tag"&gt;Economy&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Marketing" rel="tag"&gt;Marketing&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128456"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128456" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jjulian/aggbug/128456.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/505342246" height="1" width="1"/&gt;</description><dc:creator>Jeff Julian</dc:creator><feedburner:origLink>http://geekswithblogs.net/jjulian/archive/2009/01/07/128456.aspx</feedburner:origLink></item><item><title>Compiler for file type '*.xsd' failed</title><link>http://feeds.feedburner.com/~r/geekswithblogs/~3/505594785/compiler-for-file-type-.xsd-failed.aspx</link><pubDate>Wed, 07 Jan 2009 15:26:57 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/jorgennilsson/archive/2009/01/07/compiler-for-file-type-.xsd-failed.aspx</guid><wfw:comment>http://geekswithblogs.net/jorgennilsson/comments/128455.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/jorgennilsson/comments/commentRss/128455.aspx</wfw:commentRss><comments>http://geekswithblogs.net/jorgennilsson/archive/2009/01/07/compiler-for-file-type-.xsd-failed.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/jorgennilsson/services/trackbacks/128455.aspx</trackback:ping><source url="http://geekswithblogs.net/jorgennilsson/rss.aspx">Compiler for file type '*.xsd' failed</source><description>&lt;p&gt;Today, after more than two weeks of vacation I run into a totally new error when trying to compile any BizTalk project. The error message was:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Build failed. Compiler for file type '*.xsd' failed. Value cannot be null. Parameter name: pUnk&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Huh!??! Punk!??! What the F*** does that mean!??!   &lt;br /&gt;I googled on the message and didn't find much so I guess it's not a very common problem. But I found this old article &lt;a href="http://support.microsoft.com/kb/884412"&gt;KB 884412&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I'm still not sure what caused the problem but I did a repair on the BizTalk installation and the problem was gone. Hmm Maybe BizTalk had a christmas vacation too :)&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128455"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128455" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jorgennilsson/aggbug/128455.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/505594785" height="1" width="1"/&gt;</description><dc:creator>Jorgen Nilsson</dc:creator><feedburner:origLink>http://geekswithblogs.net/jorgennilsson/archive/2009/01/07/compiler-for-file-type-.xsd-failed.aspx</feedburner:origLink></item><item><title>How 6 Ounces Changed My World View</title><link>http://feeds.feedburner.com/~r/geekswithblogs/~3/505254621/128453.aspx</link><pubDate>Wed, 07 Jan 2009 13:49:06 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/dlussier/archive/2009/01/07/128453.aspx</guid><wfw:comment>http://geekswithblogs.net/dlussier/comments/128453.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/dlussier/comments/commentRss/128453.aspx</wfw:commentRss><comments>http://geekswithblogs.net/dlussier/archive/2009/01/07/128453.aspx#comment</comments><slash:comments>4</slash:comments><trackback:ping>http://geekswithblogs.net/dlussier/services/trackbacks/128453.aspx</trackback:ping><source url="http://geekswithblogs.net/dlussier/rss.aspx">How 6 Ounces Changed My World View</source><description>&lt;blockquote&gt;   &lt;p&gt;     &lt;br /&gt;The world is a vampire, sent to drain. Secret destroyers, holds you up to the flame. And what do I get for my pain? Betrayed desires, and a piece of the game.      &lt;br /&gt;~ Smashing Pumpkins, Bullet with Butterfly Wings&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I had a horrible world view in 2008. I embraced everything negative, unjust, and unscrupulous that I saw around me, experienced, and remembered, and viewed the world through glasses tainted with bitterness, anger, jadedness, and defeat. Hope had no place in my world and I formed a barrier of numbness around me. 2008 was for all purposes a banner year filled with travel, speaking opportunities, new friends, and a successful consulting practice. Yet I kept defaulting to a state of waiting for the next negative event in my life to occur, the next obstacle to overcome, the next let down, the next betrayal. The happy, positive, good things in life were anomalies…life was about suffering, surviving, overcoming, and survival of the fittest.&lt;/p&gt;  &lt;p&gt;That all changed yesterday.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/dlussier/WindowsLiveWriter/How6OuncesChangedMyWorldView_145A3/image_2.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/dlussier/WindowsLiveWriter/How6OuncesChangedMyWorldView_145A3/image_thumb.png" width="215" border="0" /&gt;&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;So this is Noah. Noah was our companion for the last 10 years. Note I said “companion” and not “pet”. Bird people get it, but for those that have never owned a bird: they’re smarter than dogs, more independent than cats, and have the personality of a Hollywood star.&lt;/p&gt;  &lt;p&gt;We got Noah literally days out of the egg. He looked like &lt;a href="http://www.pbase.com/webofnature/image/69210297" target="_blank"&gt;this&lt;/a&gt;, but with green and peach obviously. Every morning I’d get up early to hunger cries, mix his special food, wrap him in a blanket and proceed to hand-feed him using a plastic syringe. As he grew, my wife helped teach him how to fly by tossing him up over our bed and letting him try to flap down on his own. We saw him grow through all his early stages until he became an adult.&lt;/p&gt;  &lt;p&gt;Life moved on, and we experienced a tonne of stuff that I won’t get into here…but through it all, Noah was with us. While I was out traveling or working late he was at home keeping my wife company. When we experienced the loss of loved ones, he was there reacting to our emotion. When we were frustrated, he was the clown that would try to cheer us up. Before we knew it, Christmas 2008 had arrived.&lt;/p&gt;  &lt;p&gt;Noah had gotten sick before…little colds and such…so when he started to show symptoms of a cold and began sleeping a lot, we assumed he wasn’t feeling well but thought nothing serious. We also had a *horrible* experience with one vet in the city a few years back, and not a lot of places take birds. A really bad bug was going around, as everyone seemed to be getting sick at work, within our family, and with our friends.&lt;/p&gt;  &lt;p&gt;Noah’s condition got worse over Christmas and New Year’s. His breathing was faster now and you could hear a crackling sound whenever he breathed. He was constantly sleeping now, and started getting very weak. He didn’t fly, he didn’t chirp. Age was also catching up to him: while some lovebirds can live to 15 or 20, its very rare…most average at 10. He was 9 and a half.&lt;/p&gt;  &lt;p&gt;Monday night he was different…indecisive, skittish…Yesterday I took him to a new vet. I was hoping that there was still time, that we could still get some medication or something to help him…that we could bring him back and everything could go back to how it was before December.&lt;/p&gt;  &lt;p&gt;While we were in the examination room waiting for the vet, there was a couch and I sat with him resting on my chest. I noticed he was breathing differently: through his mouth now, as if gasping for air. Reality set in…he didn’t have much time left. This sounds crazy, but I tried to talk him into fighting…to hang on for just a little while and wait for the doctor…that we would get something for him.&lt;/p&gt;  &lt;p&gt;His legs were limp by this time, his wings hanging loosely. He tucked his head to the side and shook once…twice…and was gone. There is something so personal, so mystical, about seeing a life…any life…end. We see visions of death on TV all the time, we experience it at a distance, but to physically hold something as it passes from this world…to see a glimpse of the fate that we’re all hurtling towards…to see your own mortality in the passing of another…and processing the loss that you’ve just experienced…that is something the most realistic documentary cannot convey.&lt;/p&gt;  &lt;p&gt;The vet came in just as I was placing him back in his carrier. She was very nice, considering the awkwardness of the situation, and explained that it sounded like pneumonia based on his symptoms. She also said that at his age and with his sickness, he may not have survived the exam. I left, and got into the truck.&lt;/p&gt;  &lt;p&gt;I began to put on my 2008 world view glasses. 2009, and here’s how it starts. Not unexpected, of course the world is going to piss on you again…its what the world does! It’s about loss and despair, and…then I stopped. And I cried. And I took off those glasses.&lt;/p&gt;  &lt;p&gt;I thought about how precious life really is. How we are all one second away from not being here. How &lt;strong&gt;one second&lt;/strong&gt; separates us from those that have passed on before us. How so many of the things of this world get in our way and become our focus when in the grand scheme they rob us of precious time that we’re already too short on.&lt;/p&gt;  &lt;p&gt;I thought back on this past year. How I allowed all the positives of my year get overshadowed by the small blips of negative…or the negative I brought along with me from years past, and how I had robbed myself of experiencing the joy of those moments.&lt;/p&gt;  &lt;p&gt;Of course, I also thought about losing Noah and what that would mean. How I had just taken for granted that he would always be there: eating off our plates, sitting on hangers while we did laundry, shredding the newspaper while we read it. He had become such a mainstay in our life we never considered what life without him would be like.&lt;/p&gt;  &lt;p&gt;What other good things in my life have I just taken for granted, or assumed would just be there, or never really appreciated before? How have I gotten to the point where you assume the bad and count the good as an anomaly?&lt;/p&gt;  &lt;p&gt;So with 2009 starting, I’m not going to make any resolutions or predictions or any of the other stuff that most people do when a new year rolls around. Instead, I’m just going to try and take the final lesson my little companion helped me realize:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The importance and need to seek out the good instead of just accepting the bad in people, in ourselves, and in our circumstance.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Our time here is unbelievably precious. Life, as fragile and finite as it is, holds immense power. My life, your life, has the ability to alter the lives of others, has the ability to alter your surroundings, your environment. But its up to us, especially now when so many are experiencing shared hardships all over the world, to try and persevere in seeking out the good that exists.&lt;/p&gt;  &lt;p&gt;You don’t need Deepak Chopra or Oprah or anyone else to give you the answers to life. Sometimes it can just take a few ounces of feathers, beak, and love to do that.&lt;/p&gt;  &lt;p&gt;RIP Noah.&lt;/p&gt;  &lt;p&gt;D&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128453"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128453" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dlussier/aggbug/128453.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/505254621" height="1" width="1"/&gt;</description><dc:creator>D'Arcy Lussier</dc:creator><feedburner:origLink>http://geekswithblogs.net/dlussier/archive/2009/01/07/128453.aspx</feedburner:origLink></item><item><title>The duck...go duck, go!</title><link>http://feeds.feedburner.com/~r/geekswithblogs/~3/505236152/128452.aspx</link><pubDate>Wed, 07 Jan 2009 16:17:19 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/lvega/archive/2009/01/07/128452.aspx</guid><wfw:comment>http://geekswithblogs.net/lvega/comments/128452.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/lvega/comments/commentRss/128452.aspx</wfw:commentRss><comments>http://geekswithblogs.net/lvega/archive/2009/01/07/128452.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/lvega/services/trackbacks/128452.aspx</trackback:ping><source url="http://geekswithblogs.net/lvega/rss.aspx">The duck...go duck, go!</source><description>&lt;p&gt;I pulled into my driveway after work yesterday and my son immediately starts asking if we could go feed the ducks near one of the ponds in the neighborhood. I had told him yesterday that we could do it and so we grabbed some bread and his wagon and walked down there. My wife and daughter followed (at first, then raced ahead of us) on their bikes.&lt;/p&gt;  &lt;p&gt;The pond we picked was along one of two main roads in our neighborhood. Even though the speed limit is 25 and there's a pool and playground near the pond there are still a fair number of cars that really whiz down that road. We have sidewalks and the pond is set off a good distance from the road so we thought we'd be fine as we started to break apart bread and throw it to the hordes of ducks that descended upon our little family.&lt;/p&gt;  &lt;p&gt;We had been feeding the ducks for about 10 minutes when we heard a loud "BUMP!". I turned to the road and saw a small white car with a cloud of feathers flying around it. The car's brake lights lit up briefly and then the car continued on its way. I then noticed the small feathered mass in the center of a LOT of feathers in the road...some still swirling around in the breeze created by the car that had just caused this accident. My daughter screamed and started crying saying that the car had just killed that duck. We were easily 150 feet away from it so I couldn't tell if the duck was alive or dead from where I was but I offered to go check for her to see if it was OK. Thankfully my son was too involved in feeding the ducks to have noticed the whole incident. &lt;/p&gt;  &lt;p&gt;As I walked closer to the duck I thought it was dead at first. Just a big mess of feathers around this mostly black mass in the road...then as I was about 15 feet away it raised it's head and looked at me. "At least it's alive" I thought, though I then wondered how badly it might be injured. I saw another car coming down the road so I stepped slowly into the road to motion for the driver to move around the duck and as I got closer it started to try to move but looked like it couldn't get up. I told my daughter the duck was still alive but might be hurt pretty bad so she could come see (there wasn't any blood around or visible external injuries) the duck. I tried to get it to move out of the road so that it wouldn't get plowed into again just laying there but it just looked around and wiggled a bit, never trying to move even when I tried to entice it with some bread.&lt;/p&gt;  &lt;p&gt;A lot of cars passed by, oddly enough none willing to help or even find out what was going on until one guy in a truck stopped to ask if we needed help. Right about then one of my neighbors who's a police officer came by on his way home. I had explained what happened and how I was trying to get the duck to move and he was getting ready to call animal control when all of a sudden the duck stood up and slowly waddled off the road and back towards the pond. My daughter was real excited to see it move like that and I followed the duck over to the sidewalk where my daughter was. The duck stopped on the grass just off the sidewalk and sat down again. My daughter was still trying to get it to eat and by this time my son had run out of bread so he and my wife walked down to where we were...his 3 year old attention span quickly turned from the ducks to the police car that my neighbor was driving.&lt;/p&gt;  &lt;p&gt;My neighbor and I ended up talking for a few more minutes and the duck ended up walking down the small hill toward the water and sat down again. It seemed the duck was fine, though understandably dazed. My wife and daughter raced off on their bikes as my daughter had wanted to tell one of her friends about this "adventure" and my son hopped back in his wagon so I could take him home.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128452"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128452" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/lvega/aggbug/128452.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/505236152" height="1" width="1"/&gt;</description><dc:creator>Lou Vega</dc:creator><feedburner:origLink>http://geekswithblogs.net/lvega/archive/2009/01/07/128452.aspx</feedburner:origLink></item><item><title>'WebForm_PostBackOptions' is undefined error, ASP.NET 2.0</title><link>http://feeds.feedburner.com/~r/geekswithblogs/~3/505205265/webform_postbackoptions-is-undefined-error-asp.net-2.0.aspx</link><pubDate>Wed, 07 Jan 2009 12:59:48 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/ranganh/archive/2009/01/07/webform_postbackoptions-is-undefined-error-asp.net-2.0.aspx</guid><wfw:comment>http://geekswithblogs.net/ranganh/comments/128451.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/ranganh/comments/commentRss/128451.aspx</wfw:commentRss><comments>http://geekswithblogs.net/ranganh/archive/2009/01/07/webform_postbackoptions-is-undefined-error-asp.net-2.0.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/ranganh/services/trackbacks/128451.aspx</trackback:ping><source url="http://geekswithblogs.net/ranganh/rss.aspx">'WebForm_PostBackOptions' is undefined error, ASP.NET 2.0</source><description>&lt;p&gt;&lt;font color="#0000ff" size="2" face="Tahoma"&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" size="2" face="Tahoma"&gt;Recently one of our customers had an issue when migrating from ASP.NET 1.1 to ASP.NET 2.0.  The issue came up particularly in the deployment server where any page that had validations raised the error ‘Webform_PostBackOptions’ is undefined.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" size="2" face="Tahoma"&gt;If you had worked with ASP.NET 1.1 you would recollect there was an aspnet_client folder that contains all the scripts that help in client side validation as well as raising the postback events.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" size="2" face="Tahoma"&gt;In ASP.NET 2.0, the “WebResource.axd” file is the handler that generates all the client side scripts which were earlier processed by the aspnet_client folder.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" size="2" face="Tahoma"&gt;Coming back to this particular customer scenario, they were running URL Scan utility on their server &lt;a title="http://learn.iis.net/page.aspx/473/using-urlscan" href="http://learn.iis.net/page.aspx/473/using-urlscan"&gt;http://learn.iis.net/page.aspx/473/using-urlscan&lt;/a&gt; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" size="2" face="Tahoma"&gt;URL Scan is an useful free utility that can be installed on servers that allows you to restrict the file extensions served by the IIS.  This way, potentially harmful requests can be denied and thereby injection attacks avoided.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" size="2" face="Tahoma"&gt;However, the WebResource.axd handler had to be manually added as an extension to be allowed and thereafter this error went off.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" size="2" face="Tahoma"&gt;There are many more causes of this particular error and I found that it has been discussed enough in forums.  Here below is one of them for your reference&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;a title="http://www.eggheadcafe.com/tutorials/aspnet/03cedfc8-e623-4fee-81d8-04663b71b675/aspnet-11-to-aspnet-2.aspx" href="http://www.eggheadcafe.com/tutorials/aspnet/03cedfc8-e623-4fee-81d8-04663b71b675/aspnet-11-to-aspnet-2.aspx"&gt;http://www.eggheadcafe.com/tutorials/aspnet/03cedfc8-e623-4fee-81d8-04663b71b675/aspnet-11-to-aspnet-2.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;font color="#000080" size="2" face="Tahoma"&gt;Cheers&lt;/font&gt; !!!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128451"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128451" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/ranganh/aggbug/128451.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/505205265" height="1" width="1"/&gt;</description><dc:creator>Harish Ranganathan</dc:creator><feedburner:origLink>http://geekswithblogs.net/ranganh/archive/2009/01/07/webform_postbackoptions-is-undefined-error-asp.net-2.0.aspx</feedburner:origLink></item><item><title>South Florida Code Camp - DotNetNuke Track</title><link>http://feeds.feedburner.com/~r/geekswithblogs/~3/505205266/128450.aspx</link><pubDate>Wed, 07 Jan 2009 12:20:44 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/bscarbeau/archive/2009/01/07/128450.aspx</guid><wfw:comment>http://geekswithblogs.net/bscarbeau/comments/128450.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/bscarbeau/comments/commentRss/128450.aspx</wfw:commentRss><comments>http://geekswithblogs.net/bscarbeau/archive/2009/01/07/128450.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/bscarbeau/services/trackbacks/128450.aspx</trackback:ping><source url="http://geekswithblogs.net/bscarbeau/rss.aspx">South Florida Code Camp - DotNetNuke Track</source><description>&lt;p&gt;Will Strohl has put together a nice track for all DotNetNuke users at the &lt;a target="_blank" href="http://codecamp09.fladotnet.com/Agenda.aspx"&gt;South Florida code camp&lt;/a&gt; scheduled for next month. Here's the lineup:&lt;/p&gt;
&lt;h5&gt;&lt;strong&gt;DotNetNuke 5: Introduction &amp;amp; Overview&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;Brian Scarbeau, co-author of the upcoming Professional DotNetNuke 5 book by Wrox gives an overview of DotNetNuke 5. This session will review an Introduction to DotNetNuke and some of the new features that comes with DNN 5. Learn how to install DNN and learn how to create pages and put modules on your pages. Learn how to get free skins and modules for your site. Finally, learn how to create your own module using Open Smart Module.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DotNetNuke 5: Architecture &amp;amp; API&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Darrell Hardy, a co-author of the upcoming Professional DotNetNuke 5 book by Wrox goes over some of the most important areas of the architecture in the newest version of DotNetNuke. DNN 5 has many new features and back-end functionality that often goes overlooked. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DotNetNuke 5: Module Development&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Stan Schultes will begin with a quick technical overview of DotNetNuke, and a discussion of why you might build a custom DNN module. Demos will include how to install the DNN portal on a development machine, and how to install a custom module into the portal. Then we'll dive into setting up Visual Studio 2008 for module development and demonstrate how to install a module source package and run it in design mode. Finally, we'll walk through the process of developing a custom module using the sample module to provide details, and we'll see some development tips &amp;amp; tricks along the way. This is a 300-level session - some experience with DotNetNuke will be assumed. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DotNetNuke 5: Pure CSS Skinning&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ryan Morgan, co-author of the upcoming Professional DotNetNuke 5 book by Wrox shows us how to create skins using "Pure CSS" techniques. DotNetNuke 5 provides resources to skinners to create Pure CSS skins right out of the box now. Pure CSS designs help your DNN site to be rendered faster, have semantic output, and get indexed better by search engines.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DotNetNuke 5: Widgets&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Will Strohl, contributing Technical Editor of Professional DotNetNuke 5 by Wrox gives an overview and functional demonstration of what widgets are included in DotNetNuke 5, and how to work with them. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DotNetNuke 5: Management &amp;amp; Administration&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tracy Wittenkeller, author of the DotNetNuke Websites Problem Design Solution book by Wrox show us how to manage a DotNetNuke website, highlighting the new features in DotNetNuke 5. The newest version of DNN is packed with new features and ways that DNN can be managed.&lt;/p&gt;
&lt;p&gt;All of the speakers are veterans and you'll learn a great deal. &lt;span style="font-weight: bold;"&gt;It's FREE!&lt;/span&gt; Hope to see you there. &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div style="margin: 0px; padding: 0px; display: inline;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:4c81a517-3ae2-4b48-8754-4cbbc31d846e" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/Code%20Camp"&gt;Code Camp&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/South%20Florida%20Code%20Camp"&gt;South Florida Code Camp&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/DotNetNuke"&gt;DotNetNuke&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/Administration"&gt;Administration&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/Skins"&gt;Skins&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/Module%20Development"&gt;Module Development&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/CSS"&gt;CSS&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/Widgets"&gt;Widgets&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128450"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128450" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/bscarbeau/aggbug/128450.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/505205266" height="1" width="1"/&gt;</description><dc:creator>Brian Scarbeau</dc:creator><feedburner:origLink>http://geekswithblogs.net/bscarbeau/archive/2009/01/07/128450.aspx</feedburner:origLink></item><item><title>I&amp;rsquo;m Speaking at Code Camp NYC</title><link>http://feeds.feedburner.com/~r/geekswithblogs/~3/505174473/128449.aspx</link><pubDate>Wed, 07 Jan 2009 11:35:13 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/.NETonMyMind/archive/2009/01/07/128449.aspx</guid><wfw:comment>http://geekswithblogs.net/.NETonMyMind/comments/128449.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/.NETonMyMind/comments/commentRss/128449.aspx</wfw:commentRss><comments>http://geekswithblogs.net/.NETonMyMind/archive/2009/01/07/128449.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/.NETonMyMind/services/trackbacks/128449.aspx</trackback:ping><source url="http://geekswithblogs.net/.NETonMyMind/rss.aspx">I&amp;rsquo;m Speaking at Code Camp NYC</source><description>&lt;p&gt;I’m Speaking at Code Camp NYC (&lt;a href="http://nyc.codecamp.us/" target="_blank"&gt;http://nyc.codecamp.us/&lt;/a&gt;) this Saturday, January 10 on &lt;a href="http://cid-c3a729d382d8ce56.skydrive.live.com/self.aspx/Presentation%20Slide%20Decks/Virtualization%20for%20Developers.pptx" target="_blank"&gt;Virtualization for Developers&lt;/a&gt;.  You can register for the code camp at &lt;a href="https://www.clicktoattend.com/invitation.aspx?code=134146" target="_blank"&gt;https://www.clicktoattend.com/invitation.aspx?code=134146&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Hope to see you there!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128449"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128449" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/.NETonMyMind/aggbug/128449.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/505174473" height="1" width="1"/&gt;</description><dc:creator>David Douglass</dc:creator><feedburner:origLink>http://geekswithblogs.net/.NETonMyMind/archive/2009/01/07/128449.aspx</feedburner:origLink></item><item><title>#66 of Mr Bad's List</title><link>http://feeds.feedburner.com/~r/geekswithblogs/~3/505146842/128448.aspx</link><pubDate>Wed, 07 Jan 2009 10:43:13 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/yowhann/archive/2009/01/07/128448.aspx</guid><wfw:comment>http://geekswithblogs.net/yowhann/comments/128448.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/yowhann/comments/commentRss/128448.aspx</wfw:commentRss><comments>http://geekswithblogs.net/yowhann/archive/2009/01/07/128448.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/yowhann/services/trackbacks/128448.aspx</trackback:ping><source url="http://geekswithblogs.net/yowhann/rss.aspx">#66 of Mr Bad's List</source><description>I was recently reminded of an article for &lt;a href="http://www.pigdog.org/auto/mr_bads_list/shortcolumn/1914.html"&gt;"Things to Say When You're Losing a Technical Argument"&lt;/a&gt;. In recent years with RoR and ASP.NE