<feed version="0.3" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns="http://purl.org/atom/ns#" xml:lang="en-US"><title>JosephCooney</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/josephcooney/default.aspx" /><tagline type="text/html">Putting the 'Junk' in DotNetJunkies</tagline><id>http://www.dotnetjunkies.com/WebLog/josephcooney/default.aspx</id><author><url>http://www.dotnetjunkies.com/WebLog/josephcooney/default.aspx</url></author><generator url="http://communityserver.org" version="1.0.1.50214">Community Server</generator><modified>2004-10-20T21:09:00Z</modified><entry><title>Still a dotnet junky, nolonger hosted on DotNetJunkies</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/josephcooney/archive/2005/02/01/49591.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:49591</id><created>2005-02-01T19:07:00Z</created><content type="text/html" mode="escaped">I've moved my weblog to my own site &lt;a href="http://jcooney.net/"&gt;jcooney.net&lt;/a&gt; and will try and resume posting stuff more regularly (albeit to a probably non-existant audience). Thanks for hosting my blog DotNetJunkies. Those SqlParameter exceptions just got to be too much to bear, and seeing ads for Crystal Reports beside my own work just felt wrong wrong WRONG. I've switched off comments here to prevent spam.&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=49591" width="1" height="1"&gt;</content><slash:comments>0</slash:comments></entry><entry><title>CodeCamp Oz</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/josephcooney/archive/2005/01/30/49113.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:49113</id><created>2005-01-30T20:17:00Z</created><content type="text/html" mode="escaped">&lt;P&gt;My readify co-hort &lt;A href="http://www.notgartner.com/"&gt;Mitch Denny&lt;/A&gt; (with some assistance from others in the Australian .NET community like&amp;nbsp;&lt;A href="http://msmvps.com/greglow/"&gt;Greg Lowe&lt;/A&gt; and &lt;A href="http://weblogs.asp.net/acoat/"&gt;Andrew Coates&lt;/A&gt;)&amp;nbsp;is organizing a &lt;A href="http://notgartner.com/posts/1162.aspx"&gt;Code Camp&lt;/A&gt;&amp;nbsp;for the 23rd and 24th of April in Wagga Wagga.&amp;nbsp;Should be a great&amp;nbsp;get-together for the Australian .NET developer community in a simmilar vein to &lt;A href="http://www.msdncodecamp.com/"&gt;other code camps&lt;/A&gt; that have been held.&amp;nbsp;If you have a topic you'd like to speak on don't forget to get in touch with Mitch.&lt;/P&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=49113" width="1" height="1"&gt;</content><slash:comments>0</slash:comments></entry><entry><title>HIS Grab-bag</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/josephcooney/archive/2005/01/17/44998.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:44998</id><created>2005-01-17T11:26:00Z</created><content type="text/html" mode="escaped">Some random HIS stuff (mostly so I don't forget them)&lt;br&gt;&lt;br&gt;

&lt;strong&gt;Calling PL/1 from HIS:&lt;/strong&gt; (or "it's define your own wrapper time")  &lt;a href="http://support.microsoft.com/?id=183179"&gt;http://support.microsoft.com/?id=183179&lt;/a&gt;&lt;br&gt;&lt;br&gt;

&lt;strong&gt;SNA Base service causes explorer to hang when viewing list of network connections:&lt;/strong&gt; If I have no network connectivity and try to get a list of my network connections (so, for example if I wanted to dial up) explorer locks. This seems to be caused by the SNA Base service (which was still set at a status of "starting" half an hour after booting up, and which had written a large number of errors to the event log). I set the SNA Base service to manual startup, restarted and I was able to get a list of my network connections.&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=44998" width="1" height="1"&gt;</content><slash:comments>0</slash:comments></entry><entry><title>Something funny from the Java world</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/josephcooney/archive/2005/01/14/44160.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:44160</id><created>2005-01-14T09:22:00Z</created><content type="text/html" mode="escaped">&lt;a href="http://madbean.com/blog/2004/30/ep3.html"&gt;Jarwars - Episode III - Revenge of the &amp;lt;T&amp;gt;&lt;/a&gt;&lt;br&gt;

As master yoda says "tiger leads to generics, generics leads to autoboxing, autoboxing leads to NPE!"&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=44160" width="1" height="1"&gt;</content><slash:comments>2</slash:comments></entry><entry><title>CodeDom Provider for Managed C++</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/josephcooney/archive/2005/01/10/43015.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:43015</id><created>2005-01-10T19:58:00Z</created><content type="text/html" mode="escaped">One of the great things about working with people smarter than you is that you find out about your mistakes quickly. Today I was giving a demo presentation to some of my &lt;a href="http://readify.net"&gt;Readify.Net&lt;/a&gt; cohorts on the classes in the System.CodeDom namespace. In my presentation I mentioned that managed C++ does not have a CodeDom implementation. After the presentation one of my colleagues approached me quietly and said "you know what Joseph, I think managed C++ DOES have a CodeDom implementation" and he is absolutely right. Although it was omitted in Visual C++ 2002, as of Visual C++ 2003 it does. You can read all about it &lt;a href="http://www.developer.com/net/cplus/article.php/3431041"&gt;here&lt;/a&gt;. To all those I may have misled with this falsehood I deeply apologize.&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=43015" width="1" height="1"&gt;</content><slash:comments>0</slash:comments></entry><entry><title>Google store, Oracle DBAs and leading teams</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/josephcooney/archive/2004/11/25/33555.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:33555</id><created>2004-11-25T19:27:00Z</created><content type="text/html" mode="escaped">&lt;P&gt;My third-favorite technology company Google has an-online store. Love those &lt;A href="http://www.google-store.com/product_info.php?products_id=106"&gt;&amp;#8220;I'm feeling lucky&amp;#8221; boxer shorts&lt;/A&gt; and &lt;A href="http://www.google-store.com/product_info.php?products_id=29"&gt;shirts&lt;/A&gt;. Somebody I would love to get a blog is Donald Burleson the &lt;A href="http://www.dba-oracle.com/redneck.htm"&gt;Redneck Oracle DBA&lt;/A&gt;. From the list of books he's written it looks like he and his crew have some &lt;A href="http://www.dba-oracle.com/index.htm"&gt;serious Oracle skills&lt;/A&gt;. The only other Oracle DBA I know is Chris - certainly not a redneck, who has a band called &lt;A href="http://www.scuzzybus.com/"&gt;ScuzzyBus&lt;/A&gt;. I'm proud to say I had a small part to play in him choosing a geek name for his band.&lt;/P&gt;
&lt;P&gt;I recently finished reading &lt;A href="http://www.amazon.com/exec/obidos/tg/detail/-/0201675269/qid=1101384872/sr=8-1/ref=pd_csp_1/104-0979931-8280727?v=glance&amp;amp;s=books&amp;amp;n=507846"&gt;Leading a Software Development Team&lt;/A&gt; by Richard Whitehead. In 40 &amp;#8220;question focused&amp;#8221; chapters Richard covers topics like &amp;#8220;How do I draw up a project plan?&amp;#8221;, &amp;#8220;How should I reward good work?&amp;#8221; and &amp;#8220;When should I let someone do a thing their own way, and when should I make them do it my way?&amp;#8221;. The book covers a great deal of material so&amp;nbsp;it can only really cover the basics of each topic, but it does so&amp;nbsp;well. It&amp;nbsp;is clearly written (something I realize is not easy after reading my previous sentence a few times....), and advocates a pragmatic and principled approach to team management. In particular some of the most interesting chapters cover the problems that occur when somebody very technical goes from doing technical things (like writing code) to doing more &amp;#8220;human focused&amp;#8221; things (like managing others), and the emotions the newly promoted manager goes through. Recommended.&lt;/P&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=33555" width="1" height="1"&gt;</content><slash:comments>0</slash:comments></entry><entry><title>You know you're getting screwed by a vendor when</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/josephcooney/archive/2004/11/24/33383.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:33383</id><created>2004-11-24T18:36:00Z</created><content type="text/html" mode="escaped">&lt;P&gt;
&lt;UL&gt;
&lt;LI&gt;You pay a six-figure amount for some "custom" COM objects that sit on top of their system.&lt;/LI&gt;
&lt;LI&gt;You get an API that looks basicly like this: public object[] DoStuff(string operationName, object[] args)&lt;/LI&gt;
&lt;LI&gt;You get "properties with exciting and unexpected side effects" in the COM API you paid through the nose for. Think "read a property and a whole bunch of other stuff gets reset". Now think how exciting this would be to debug, when adding a watch changes state.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;And yet they defend their design in spite of it's obvious flaws and claim that the developers just "don't get it". I think I've come to expect a certain level of intellectual honesty when it comes to software development, and it's very disappointing when you don't see it.&lt;/P&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=33383" width="1" height="1"&gt;</content><slash:comments>2</slash:comments></entry><entry><title>Sun.Clue.Dispose();</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/josephcooney/archive/2004/11/23/33204.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:33204</id><created>2004-11-23T20:34:00Z</created><content type="text/html" mode="escaped">It seems that &lt;A href="http://www.sun.com/"&gt;Sun&lt;/A&gt; (TM)'s &lt;A href="http://www.medterms.com/script/main/art.asp?articlekey=13763"&gt;Crack&lt;/A&gt; Legal Team (TM) have served &lt;A href="http://www.neward.net/ted/weblog/index.jsp"&gt;Ted Neward&lt;/A&gt; (TM) with a &lt;A href="http://www.neward.net/ted/weblog/index.jsp?date=20041102#1099442708136"&gt;Cease-and-desist letter&lt;A&gt; regarding his mis-use (TM) of the &lt;A href="http://java.sun.com/"&gt;Java&lt;/A&gt; (TM) trademark on his small &lt;A href="http://www.javageeks.com/index.html"&gt;Java(TM) developer community site(TM)&lt;/A&gt;. Wow. This would be like the ASP.NET team suing Fritz &lt;A href="http://pluralsight.com/blogs/fritz/"&gt;Onion&lt;/A&gt;.&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=33204" width="1" height="1"&gt;</content><slash:comments>2</slash:comments></entry><entry><title>Is your bug a smoker, or non-smoker?</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/josephcooney/archive/2004/11/17/32446.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:32446</id><created>2004-11-17T20:31:00Z</created><content type="text/html" mode="escaped">&lt;P&gt;In the spirit of &lt;A href="http://www.thedailywtf.com/"&gt;the daily wtf&lt;/A&gt; I wanted to share this little gem with you all. Once upon a time&amp;nbsp;I knew a programmer who was doing some maintenance work on a &amp;#8220;classic&amp;#8221; ASP&amp;nbsp;issue tracking system his company had written.&amp;nbsp;All of the developers who originally &amp;#8220;wrote&amp;#8221; [1]&amp;nbsp;the system were long gone. The system apparently&amp;nbsp;had a complicated UI, was quite confusing to use, and had a number of other qirks. Because it sort-of worked management were reluctant to scrap it for &lt;A href="http://www.fogcreek.com/FogBUGZ/"&gt;something&lt;/A&gt; &lt;A href="http://www.asp.net/StarterKits/WhitePapers/Issue%20Tracker%20Whitepaper.htm"&gt;better&lt;/A&gt;, and said programmer was charged from time to time with making enhancements to it, and fixing bugs. In spite of the &amp;#8220;classic&amp;#8221; ASP spagetti code he managed to craft some new features on to it, and fix some bugs, but unfortunately many times when&amp;nbsp;changes were deployed they caused probelms and had to be rolled back. When I asked him (OK, it was a him) about this he explained how the code had morphed and atrophied over time. Because nobody had really understood how things worked, and becuase the thing seemed so fragile things were never removed.&amp;nbsp;As an example he showed me the &amp;#8220;Issue&amp;#8221; table which had a number of fairly non-sensical fields for an issue tracking system, including one&amp;nbsp;bit field called &amp;#8220;smoker&amp;#8221; (or something similar - I can't remember the exact name). Apparently the system's database had been &amp;#8220;refactored&amp;#8221; from a patient care system database and the &amp;#8220;smoker/non-smoker&amp;#8221; field had never been removed, so to this day in the crufty issue tracking system each issue sill had a field for recording this.&lt;/P&gt;
&lt;P&gt;[1] perhaps &amp;#8220;wrote&amp;#8221; is too kind a word for what they did...&lt;/P&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=32446" width="1" height="1"&gt;</content><slash:comments>0</slash:comments></entry><entry><title>Web Grab-bag</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/josephcooney/archive/2004/11/10/31539.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:31539</id><created>2004-11-10T19:31:00Z</created><content type="text/html" mode="escaped">&lt;P&gt;Some interesting links from around the web:&lt;/P&gt;
&lt;P&gt;CSS Astronaut &lt;A href="http://www.meyerweb.com/eric/"&gt;Eric Meyer&lt;/A&gt; has created a CSS + XHTML + JavaScript slideshow system called &lt;A href="http://www.meyerweb.com/eric/tools/s5/s5-intro.html"&gt;S&lt;SUP&gt;5&lt;/SUP&gt;&lt;/A&gt;. I checked it in IE6 and Firefox 0.9 (OK, so I'm behind the times)&amp;nbsp;and it worked well.&lt;/P&gt;
&lt;P&gt;Fritz Onion and others share info on doing &lt;A href="http://pluralsight.com/wiki/default.aspx/Fritz.AspNetWithoutWebProjects"&gt;ASP.NET development without web projects&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Ernie Booth has written a short article on some of the &lt;A href="http://erniebooth.name/articles/145.aspx"&gt;internals of Comega&lt;/A&gt;, which I have also been looking into &lt;A href="http://dotnetjunkies.com/WebLog/josephcooney/articles/27776.aspx"&gt;recently&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Also I've been&amp;nbsp;chatting via&amp;nbsp;MSN messenger with a .NET developer and computer science student&amp;nbsp;called &lt;A href="http://blog.csdn.net/upto/"&gt;Li Bo&lt;/A&gt; from China for a couple of months now. Li originally contacted me because he had downloaded some code I wrote on &lt;A href="http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=dfef25fa-f545-4289-b9fc-05270ea41fb3"&gt;GotDotNet&lt;/A&gt;. He was writing a code generator as part of a university project (wow, I wish I had done cool stuff like that at university). A couple of months later this is the finished product - &lt;A href="http://www.jiameibeads.com/zwy/RapidTier.rar"&gt;Rapidtier&lt;/A&gt; - a template-based code generator written in .NET. It comes with a fairly fully-featured &lt;A href="http://blog.csdn.net/upto/gallery/image/19911.aspx"&gt;IDE&lt;/A&gt; (something I never quite got around to doing in any of my tools), and some&amp;nbsp;decent templates. I went from RapidTier newbie to running my first 100% generated multi-tier winforms app (with basic master-detail drill-down and&amp;nbsp;CRUD capabilites on all the tables) in about 5 minutes. It generates code, solution/project files and stored procedures. Li has done some nice work with the UI, and making the code generation run quite fast. If you have any questions about RapidTier or want to discuss code-generation stuff get in touch with Li.&lt;/P&gt;
&lt;P&gt;One last link before I go: Scott Hanselman &lt;A href="http://www.hanselman.com/blog/PermaLink.aspx?guid=4deb3ddd-8211-46fc-9cef-f6154785c1fe"&gt;points&lt;/A&gt; to the interesting ASP.NET application running the&amp;nbsp;&lt;A href="http://www.bungie.net/"&gt;Bungie website&lt;/A&gt;&amp;nbsp;and the amazing facilities it offers for tracking your performance in HALO 2 (when played via XBox Live)&amp;nbsp;including perspectives on how you were killed in every game instance and RSS feeds of all your games. What are they gathering all this data for? &lt;A href="http://www.imdb.com/title/tt0087597/"&gt;Making recruitment easier&lt;/A&gt;?&lt;/P&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=31539" width="1" height="1"&gt;</content><slash:comments>0</slash:comments></entry><entry><title>SmartCassini - a managed web server for SmartPhone 2003</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/josephcooney/archive/2004/11/09/31441.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:31441</id><created>2004-11-09T21:28:00Z</created><content type="text/html" mode="escaped">After talking about doing this a great deal, I finally spent a couple of evenings porting the &lt;A href="http://asp.net/projects/cassini/download/"&gt;Cassini&lt;/A&gt; code to my smartphone. Here is a screen-shot of it serving up a directory listing in the emulator, in pocket IE.&lt;BR&gt;&lt;IMG src="/WebLog/images/dotnetjunkies_com/josephcooney/134/o_smartcassini2.gif"&gt; &lt;BR&gt;I think I spent more time just &amp;#8220;finding my way around&amp;#8221; in SmartPhone development than actually porting the cassini code, but it has been a fun experience. I will post the code on GotDotNet when I get around to it. On the topic of GotDotNet I noticed that the download count&amp;nbsp;for my 5 samples has gone over the 10K mark. I was&amp;nbsp;somewhat disappointed to see that some of my samples have been marked down to 3 stars (from 4 - 5). I wish people would leave some sort of comment explaining WHY they didn't like something (so I can explain to them how wrong they are ;-) - who says I can't take criticism well&amp;nbsp;). &lt;A href="http://dcooney.com/"&gt;Dominic&lt;/A&gt; is back from Redmond. It sounds like he had a great time there. Unfortunately I haven't been able to get him to break all those NDAs and &amp;#8220;spill the beans&amp;#8221; on what he was working on.
&lt;br&gt;&lt;br&gt;
&lt;b&gt;&lt;i&gt;Update:&lt;/i&gt;&lt;/b&gt;If you need to host webservices on the compact framework you should also have a look at &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetcomp/html/NETCFMA.asp"&gt;this&lt;/a&gt; on the MSDN.&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=31441" width="1" height="1"&gt;</content><slash:comments>0</slash:comments></entry><entry><title>Code Camp, Books for a month off-line and other ramblings</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/josephcooney/archive/2004/11/04/30960.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:30960</id><created>2004-11-04T17:52:00Z</created><content type="text/html" mode="escaped">&lt;P&gt;Thursday evening seems to be &amp;#8220;the night for blogging&amp;#8221; for me, so here goes:&lt;/P&gt;
&lt;P&gt;I saw this cool &lt;A href="http://pluralsight.com/blogs/aaron/archive/2004/11/02/3153.aspx"&gt;programming challenge&lt;/A&gt; over on Aaron Skonnard's blog (from day 1 of Code Camp that Pluralsight are running).&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;!--StartFragment --&gt;&amp;nbsp;&lt;STRONG&gt;Programming challenge&lt;/STRONG&gt;: at the end of the day, we held a contest that required students to write code to chase a technology trail. It was a race. They were to start by sending a specific HTTP message to a specific endpoint (it required a special header so you had to write WebRequest code). The HTTP response contained the name of a private queue on the network that they subsequently had to read a message from. The message contained a WSDL document from which they had to generate a WS proxy class. Invoking the WS proxy returned the address to a .NET remoting endpoint, for which they already had an interface assembly. The .NET Remoting call returned a secret, identifying the winner. It took the winner about 20-25 mins. It required them to use every communication technique that we discussed in detail today. Hard? Easy? &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;In other news from this week &lt;A href="http://weblogs.asp.net/dneimke/"&gt;Darren Neimke&lt;/A&gt; has joined &lt;A href="http://readify.net/"&gt;Readify&lt;/A&gt;. I haven't really blogged about it yet ('cause I try not to blog about work stuff) but I joined Readify 2 months ago and have been very happy here.&amp;nbsp;Last time Darren and I worked for the same company it&amp;nbsp;didn't last very long - hopefully this time will be different.&lt;/P&gt;
&lt;P dir=ltr&gt;At the end of this month I will be traveling to Japan and &lt;A href="http://www.coffeeresearch.org/market/italy.htm"&gt;Italy&lt;/A&gt; (my spiritual home, which consumes about 14 billion espressos&amp;nbsp;annually, and where&amp;nbsp;you can&amp;nbsp;get a decent doppio on the train)&amp;nbsp;and won't be on-line much. Does anybody have any book suggestions for an extended period off-line? I'm keen to &amp;#8220;travel light&amp;#8220; 1-2 books, and no &lt;A href="http://www.amazon.com/exec/obidos/ASIN/0764543814/ref=pd_ecc_rvi_f/104-7412206-7611952"&gt;1000-page monsters&lt;/A&gt;. Code-intensive books make me want to code, and that will probably just lead to frustration. Does anybody have any good ideas?&lt;/P&gt;
&lt;P dir=ltr&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=30960" width="1" height="1"&gt;</content><slash:comments>0</slash:comments></entry><entry><title>Interesting HST tip from Draco.NET source</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/josephcooney/archive/2004/10/28/30133.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:30133</id><created>2004-10-28T20:09:00Z</created><content type="text/html" mode="escaped">I noticed an interesting &amp;#8220;&lt;A href="http://www.theserverside.net/talks/videos/PatHelland/interview.tss?bandwidth=dsl"&gt;hooking stuff together&lt;/A&gt;&amp;#8221; technique in the &lt;A href="http://draconet.sourceforge.net/"&gt;Draco.NET&lt;/A&gt; source for integrating with crufty old (but often extremely useful) command line utilities. The Process class has a &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdiagnosticsprocessclassstandardoutputtopic.asp"&gt;StandardOutput&lt;/A&gt; property&amp;nbsp;that can return a streamreader for reading standard output from. Much better than the VisualBasic &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vblr7/html/vafctshell.asp"&gt;Shell&lt;/A&gt; function.&amp;nbsp;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=30133" width="1" height="1"&gt;</content><slash:comments>0</slash:comments></entry><entry><title>All about mobility</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/josephcooney/archive/2004/10/21/29288.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:29288</id><created>2004-10-21T21:38:00Z</created><content type="text/html" mode="escaped">&lt;P&gt;I went to the &lt;A href="http://www.cbrdev.net/"&gt;local .NET users group&lt;/A&gt; here in Canberra (after missing a few too many meetings at my &lt;A href="http://www.qmsdnug.org/"&gt;local group&lt;/A&gt;) and saw a presentation on mobile development from&amp;nbsp;Smart Client Program Manager&amp;nbsp;&lt;A href="http://weblogs.asp.net/onoj"&gt;Jonathan Wells&lt;/A&gt;. Jonathan looked like he was in the twilight-zone, and said that he had given the talk in 8 different cities since Monday (yikes), but his talk was surprisingly lucid. I've been&amp;nbsp;keen to write something for my&amp;nbsp;SmartPhone, and have just started working on a &lt;A href="http://msdn.microsoft.com/mobility/netcf/"&gt;Compact Framework&lt;/A&gt; project so I'm certainly interested in the topic.&lt;/P&gt;
&lt;P&gt;One thing that came up was obfuscation of source code to reduce the code size (for deployment to devices). I had heard &lt;A href="http://www.franklins.net/fnetdotnetrocks/dotnetrocks.aspx?showid=74"&gt;Jeffrey Richter mention this on DotNetRocks&lt;/A&gt; once, and wanted to know if Jonathan had any thoughts on if this was a good idea or not. He gave the classic performance question smackdown - &amp;#8220;measure it and see for yourself&amp;#8221;, so I did. In my pseudo-scientific test&amp;nbsp;I randomly chose the following assemblies from the CF and obfuscated them with the community edition of &lt;A href="http://www.dotfuscator.com/products/dotfuscator/Editions.html"&gt;Dotfuscator&lt;/A&gt; that comes with VS.NET 2003 (Note: Dotfuscator Professional which I did not use&amp;nbsp;bosts &amp;#8220;Comprehensive support for the .NET Compact Framework&amp;#8220; whatever that means). Here are the size differences between the &amp;#8220;regular&amp;#8221; assemblies and the obfuscated ones.&lt;/P&gt;
&lt;P&gt;
&lt;TABLE bgColor=aliceblue border=0&gt;
&lt;TBODY&gt;
&lt;TR bgColor=navy&gt;
&lt;TD&gt;&lt;FONT face=Tahoma color=white size=1&gt;Assembly&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma color=white size=1&gt;Size (before obfuscation)&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma color=white size=1&gt;Size (obfuscated)&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma color=white size=1&gt;Difference&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR bgColor=gainsboro&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;Microsoft.VisualBasic.dll&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;136&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;128&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;6%&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;System.Data.Sqlclient.dll&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;145&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;128&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;12%&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR bgColor=gainsboro&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;System.Data.SqlServerCe.dll&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;121&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;109&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;10%&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;System.Drawing.dll&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;38&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;31&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;18%&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR bgColor=gainsboro&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;System.Net.IrDA.dll&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;11&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;10&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;9%&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;System.SR.dll&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;91&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;92&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;(1%)&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR bgColor=gainsboro&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;System.Web.Services.dll&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;94&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;83&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;12%&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;System.Windows.Forms.dll&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;137&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;116&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;15%&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR bgColor=gainsboro&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;System.Xml.dll&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;197&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;173&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;12%&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;Dotfuscator also has a &amp;#8220;library&amp;#8221; mode where exposed APIs are not obfuscated. Here is the size difference using this library setting for the same random sample:&lt;/P&gt;
&lt;P&gt;
&lt;TABLE bgColor=aliceblue border=0&gt;
&lt;TBODY&gt;
&lt;TR bgColor=navy&gt;
&lt;TD&gt;&lt;FONT face=Tahoma color=white size=1&gt;Assembly&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma color=white size=1&gt;Size (before obfuscation)&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma color=white size=1&gt;Size (obfuscated)&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma color=white size=1&gt;Difference&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR bgColor=gainsboro&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;Microsoft.VisualBasic.dll&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;136&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;132&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;3%&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;System.Data.Sqlclient.dll&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;145&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;133&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;8%&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR bgColor=gainsboro&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;System.Data.SqlServerCe.dll&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;121&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;115&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;5%&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;System.Drawing.dll&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;38&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;39&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;(3%)&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR bgColor=gainsboro&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;System.Net.IrDA.dll&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;11&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;11&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;0%&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;System.SR.dll&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;91&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;92&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;(1%)&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR bgColor=gainsboro&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;System.Web.Services.dll&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;94&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;89&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;5%&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;System.Windows.Forms.dll&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;137&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;134&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;2%&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR bgColor=gainsboro&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;System.Xml.dll&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;197&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;185&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT face=Tahoma size=1&gt;6%&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;Note that in a couple of cases the size of the assembly actually increased, which seems very odd. Assuming that this random sample is representative of the size&amp;nbsp;savings that could be achieved across the whole Compact Framework (roughly 4 -5%), think of the missing functionality that could have been added in the 100~ish K extra space they would have had. That's about the size of&amp;nbsp;System.Web.Services.dll in the Compact Framework. Like so many other things,&amp;nbsp;some of this&amp;nbsp;missing functionality is fixed in whidbey.&amp;nbsp;Apart from the Compact Framework team (who apparently had a very strict&amp;nbsp;size requirement and tons of functionality to&amp;nbsp;try and cram in) I don't&amp;nbsp;know if obfuscation for size reduction makes a great deal of sense given that the gains are not that great.&amp;nbsp;Also I don't know how obfuscation like this affects run-time performance.&lt;/P&gt;
&lt;P&gt;As well as a good presentation from Jonathan&amp;nbsp;I&amp;nbsp;got a DVD with all the presentations from the Mobile DevCon from this year, and a bunch of other freebies. Love those freebies.&lt;/P&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=29288" width="1" height="1"&gt;</content><slash:comments>0</slash:comments></entry><entry><title>Coding rule of thumb</title><link rel="alternate" type="text/html" href="http://www.dotnetjunkies.com/WebLog/josephcooney/archive/2004/10/20/29174.aspx" /><id>58df7014-fd75-437c-9641-150997716d1c:29174</id><created>2004-10-20T21:09:00Z</created><content type="text/html" mode="escaped">If you find yourself putting #regions &lt;STRONG&gt;inside &lt;/STRONG&gt;a method (or if you're a VB.NET programmer -&amp;nbsp;wishing that you could do such a thing) you &lt;STRONG&gt;might&lt;/STRONG&gt; want to think about&amp;nbsp;making that a separate method.&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=29174" width="1" height="1"&gt;</content><slash:comments>0</slash:comments></entry></feed>