<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1974717641782726474</id><updated>2011-07-28T10:07:42.095-07:00</updated><title type='text'>Interactive Logic</title><subtitle type='html'>rss feed (atom): http://interactivelogic.blogspot.com/atom.xml</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>26</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-6809249367990864889</id><published>2009-09-29T11:20:00.000-07:00</published><updated>2009-09-29T12:09:16.768-07:00</updated><title type='text'>Retrievable iPhone numbers mean potential privacy issues [Macworld]</title><content type='html'>Ick.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.macworld.com/article/143047/2009/09/phone_hole.html?lsrc=rss_main"&gt;Retrievable iPhone numbers mean potential privacy issues | Software | iPhone Central | Macworld&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Let’s hope either a) app developers are responsible and don’t exploit this, or b) apple plugs this hole - it would absolutely drive me nuts if app development companies calling me to upgrade their app, and it would cause me to uninstall their product &lt;span style="font-style: italic;"&gt;&lt;a href="http://translate.google.com/translate_t?hl=en&amp;amp;sl=pt&amp;amp;tl=en#pt%7Cen%7Cimediatamente%0A%0A%0A%0A" target="_blank"&gt;imediatamente&lt;/a&gt;!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On the upside, when I first read the caption on the feed post, I thought it was referring to one's &lt;span style="font-weight: bold;"&gt;contacts &lt;/span&gt;being visible, which I personally think would be a more egregious security hole. But with this current issue, it would be important for users/customers of companies that do this kind of thing to give them ample feedback:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Contacting them and letting them know their actions stink&lt;/li&gt;&lt;li&gt;Rating them low in iTunes&lt;/li&gt;&lt;li&gt;Warn potential users in the comments section of the breach of security.&lt;/li&gt;&lt;/ul&gt;In other words, "what goes around, comes around."&lt;br /&gt;&lt;br /&gt;Here's the &lt;a href="http://www.mac4ever.com/news/48159/exclu_iphone_une_vraie_passoire_pour_certaines_donnees_personnelles/"&gt;source article&lt;/a&gt; that contains the tests performed by mac4ever (see the bottom of the page for the English version...).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-6809249367990864889?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/6809249367990864889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=6809249367990864889' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/6809249367990864889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/6809249367990864889'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2009/09/retrievable-iphone-numbers-mean.html' title='Retrievable iPhone numbers mean potential privacy issues [Macworld]'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-561179917581564649</id><published>2009-09-28T15:59:00.000-07:00</published><updated>2009-09-28T15:59:20.856-07:00</updated><title type='text'>Pear Note - Note Taking Utility for Mac - Useful Fruit Software</title><content type='html'>Thought this was an interesting application that reminds me of the &lt;a href="http://www.livescribe.com/"&gt;LiveScribe Pulse&lt;/a&gt;, but in an application form.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.usefulfruit.com/pearnote/"&gt;Pear Note - Note Taking Utility for Mac - Useful Fruit Software&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;...and it does video.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-561179917581564649?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.usefulfruit.com/pearnote/' title='Pear Note - Note Taking Utility for Mac - Useful Fruit Software'/><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/561179917581564649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=561179917581564649' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/561179917581564649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/561179917581564649'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2009/09/pear-note-note-taking-utility-for-mac.html' title='Pear Note - Note Taking Utility for Mac - Useful Fruit Software'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-7746357688312299079</id><published>2009-08-24T11:15:00.000-07:00</published><updated>2009-08-24T11:15:24.752-07:00</updated><title type='text'>Text is a UI</title><content type='html'>Thought this was an interesting quote from Jakob Nielsen in the alertbox article regarding Twitter Tweets...&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;"&lt;span style="font-weight: bold;"&gt;Text is a UI&lt;/span&gt;&lt;br /&gt;It's a common mistake to think that only full-fledged graphical user interfaces count as interaction design and deserve usability attention. As our earlier research has shown, URLs and email both contribute strongly to the Internet user experience and thus require close attention to usability to enhance the profitability of a company's Internet efforts.&lt;br /&gt;&lt;br /&gt;In fact, the shorter it is, the more important it is to design text for usability."&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.useit.com/alertbox/twitter-iterations.html"&gt;Twitter Postings: Iterative Design (Jakob Nielsen's Alertbox)&lt;/a&gt;:&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-7746357688312299079?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.useit.com/alertbox/twitter-iterations.html' title='Text is a UI'/><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/7746357688312299079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=7746357688312299079' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/7746357688312299079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/7746357688312299079'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2009/08/text-is-ui.html' title='Text is a UI'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-5207610224495014868</id><published>2009-05-25T14:35:00.000-07:00</published><updated>2009-05-25T14:50:54.393-07:00</updated><title type='text'>ASP.NET Forum Tags: Semicolons as Separators?</title><content type='html'>Ummm... OK I know Microsoft is trying to give the illusion of being user friendly and all, but when the delimiter for tags that categorize a post on the ASP.NET developer forums, they chose &lt;span style="font-weight: bold;"&gt;semicolons&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Is it just me or is that a &lt;span style="font-weight: bold;"&gt;ludicrous choice&lt;/span&gt;? Why not a space (my preference - a la delicious) or a comma?&lt;br /&gt;&lt;br /&gt;In addition, there is no &lt;span style="font-weight: bold;"&gt;example &lt;/span&gt;visible to show you what the legal delimiter is! You have to miraculously divine what it wants, or let it show you what it wants, as I chose to do.&lt;br /&gt;&lt;br /&gt;To find out what the delimiter is, I had to do the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Open the "Select Tags..." dialog.&lt;/li&gt;&lt;li&gt;Select two (short) tags. &lt;span style="font-style: italic;"&gt;(I notice lots of other folks thought that a space would be a logical delimiter too...!)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Close the dialog.&lt;/li&gt;&lt;li&gt;Oops. Closing the dialog didn't populate the text box with my selections. Awesome.&lt;/li&gt;&lt;li&gt;Trying again... Open the "Select Tags..." dialog.&lt;/li&gt;&lt;li&gt;Select two (short) tags, this time at the&lt;span style="font-weight: bold;"&gt; end of the list &lt;/span&gt;where I notice OK and Cancel buttons (yes - you heard that right. The buttons are embedded &lt;span style="font-weight: bold; font-style: italic;"&gt;in the list itself... &lt;/span&gt;and at the &lt;span style="font-weight: bold;"&gt;bottom &lt;/span&gt;of the list, no less! They're not on the dialog "window.")  &lt;/li&gt;&lt;li&gt;Click OK.&lt;/li&gt;&lt;li&gt;Observe that text box has the new selections delimited by semicolons. &lt;/li&gt;&lt;/ol&gt;The auto-populating text box is another usability nightmare deserving of its own article, but I'll let someone else write that one up. ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-5207610224495014868?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/5207610224495014868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=5207610224495014868' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/5207610224495014868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/5207610224495014868'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2009/05/aspnet-forum-tags-semicolons-as.html' title='ASP.NET Forum Tags: Semicolons as Separators?'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-6003752085405762478</id><published>2009-03-25T15:46:00.001-07:00</published><updated>2009-03-25T15:47:25.802-07:00</updated><title type='text'>Moving Home</title><content type='html'>From this point on, my Interactive Logic blog will be located here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.interactivelogic.net/"&gt;http://blog.interactivelogic.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;See you there!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-6003752085405762478?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/6003752085405762478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=6003752085405762478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/6003752085405762478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/6003752085405762478'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2009/03/moving-home.html' title='Moving Home'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-8528029580932043784</id><published>2009-03-01T14:10:00.000-08:00</published><updated>2009-03-01T14:10:30.537-08:00</updated><title type='text'>Intuit Labs blog – echominder has left the building</title><content type='html'>The genesis of a truly useful and innovative Intuit product...&lt;br /&gt;&lt;br /&gt;   &lt;a href="http://intuitlabs.com/blog/archive/2009/02/echominder-has-left-the-building/"&gt;Intuit Labs blog – echominder has left the building&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;...which they, of course, killed.&lt;br /&gt;&lt;br /&gt;Nice going.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-8528029580932043784?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://intuitlabs.com/blog/archive/2009/02/echominder-has-left-the-building/' title='Intuit Labs blog – echominder has left the building'/><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/8528029580932043784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=8528029580932043784' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/8528029580932043784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/8528029580932043784'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2009/03/intuit-labs-blog-echominder-has-left.html' title='Intuit Labs blog – echominder has left the building'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-6508064554003666705</id><published>2009-02-27T12:36:00.001-08:00</published><updated>2009-02-27T12:38:11.149-08:00</updated><title type='text'>Comcast DVR &amp; Controller: Pain &amp; Suffering Incarnate.</title><content type='html'>Bravo to "Rian" who posted this blog entry:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ux-sa.com/2008/09/remote-control-usability-comcast-vs.html"&gt;Reflections on user experience: Remote control usability: Comcast vs. Logitech Harmony&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I just had to respond with a comment since this is a real hot-button for me these days (i.e. Comcast's DVR &lt;span style="font-weight: bold;"&gt;un-&lt;/span&gt;usability...):&lt;br /&gt;&lt;blockquote&gt;Saying that the Comcast remote and its accompanying DVR system is "Bad" or "isn't that good" is being kind.&lt;br /&gt;&lt;br /&gt;I have never seen a bigger pile of steaming crap usability-wise in my life (save for the Bobrick B-2888 Toilet Tissue Dispenser). The Comcast DVR software is pathetically unresponsive (and it's not just unresponsive for OnDemand programs, despite what the service tech tried to tell me...). The Comcast system actually makes my wife visibly angry to even have to touch the remote and use their horrible product.&lt;br /&gt;&lt;br /&gt;Unfortunately, I would have to now fork over a significant amount of cash to purchase a TiVo that will do digita &amp;amp; HD, which unfortunately I don't have at the moment... But if I had the cash in hand, I would go buy one in a second and not think twice to drop-kick the Comcast DVR unit and the controller. We have actually kept our analog TiVo in the other room, and guess what? it gets more use because of the pain the Comcast system causes.&lt;br /&gt;&lt;br /&gt;Shame on comcast for even thinking of putting out such a lame product. Comcast desperately needs to read "The Essentials of Interaction Design" and totally rearchitect its hardware and software approach.&lt;br /&gt;&lt;br /&gt;No wonder they tried to acquire TiVo. Oh yeah... and failed. LOL.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-6508064554003666705?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/6508064554003666705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=6508064554003666705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/6508064554003666705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/6508064554003666705'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2009/02/bravo-to-rian-who-posted-this-blog.html' title='Comcast DVR &amp; Controller: Pain &amp; Suffering Incarnate.'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-3799702401475093322</id><published>2009-01-30T11:07:00.000-08:00</published><updated>2009-01-30T11:08:38.718-08:00</updated><title type='text'>ASP.NET Bug: Button.OnClientClick</title><content type='html'>I really don't understand this one.&lt;br /&gt;&lt;br /&gt;According to the ASP.NET MSDN online documentation for &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.onclientclick.aspx"&gt;Button.OnClientClick Property (System.Web.UI.WebControls)&lt;/a&gt;, you use &lt;span style="font-weight: bold;"&gt;Button.OnClientClick&lt;/span&gt; to assign a client-side script (javascript) when the button is clicked (for example if you want to have the button perform some action(s) before submitting, or to short-circuit the click entirely).&lt;br /&gt;&lt;br /&gt;However, I couldn't understand why the client-side onclick handler was not getting rendered, no matter what I tried!!!&lt;br /&gt;&lt;br /&gt;Then I scrolled down to the bottom and noticed the comment by user contributor "Perley":&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"MS has made it so that if you disable the button on the server then the onclick attribute is not even rendered to the client"&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Mystery solved.&lt;br /&gt;&lt;br /&gt;I had indeed set the button to be &lt;span style="font-weight: bold;"&gt;disabled&lt;/span&gt; in the markup, and it was flat-out not rendering the &lt;span style="font-weight: bold;font-family:courier new;" &gt;onclick&lt;/span&gt; handler in the HTML.&lt;br /&gt;&lt;br /&gt;I fixed the problem by wiring up the &lt;span style="font-weight: bold;font-family:courier new;" &gt;onclick&lt;/span&gt; event for the button &lt;span style="font-style: italic;"&gt;manually&lt;/span&gt; using a &lt;span style="font-weight: bold;font-family:courier new;" &gt;pageLoad&lt;/span&gt; function, but still it was a hassle.&lt;br /&gt;&lt;br /&gt;I really think the people who designed, approved, and coded that "feature" should get their head checked, because, seriously... if a button is disabled initially, don't you think it's possible that the &lt;span style="font-weight: bold;"&gt;button&lt;/span&gt; - a user interaction device - &lt;span style="font-style: italic;"&gt;might&lt;/span&gt; become enabled at some point, and not through &lt;span style="font-style: italic;"&gt;server-side&lt;/span&gt; intervention???&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-3799702401475093322?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/3799702401475093322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=3799702401475093322' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/3799702401475093322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/3799702401475093322'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2009/01/i-really-dont-understand-this-one.html' title='ASP.NET Bug: Button.OnClientClick'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-297624156969560040</id><published>2009-01-19T09:57:00.000-08:00</published><updated>2009-01-19T09:57:58.972-08:00</updated><title type='text'>.NET Rocks! Epsiode 406: Catching up with Scott Bellware</title><content type='html'>This episode of .NET Rocks! features an interview with Scott Bellware, who describes some new unit testing and coding practices that sounded very innovative, introducing the concepts of &lt;span style="font-style:italic;"&gt;usability&lt;/span&gt; into your code: &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=406"&gt;&lt;span style="font-style:italic;"&gt;.NET Rocks!&lt;/span&gt; - Epsiode 406: Catching up with Scott Bellware&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;...I just thought some might find it interesting. I did.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-297624156969560040?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.dotnetrocks.com/default.aspx?showNum=406' title='.NET Rocks! Epsiode 406: Catching up with Scott Bellware'/><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/297624156969560040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=297624156969560040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/297624156969560040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/297624156969560040'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2009/01/net-rocks-epsiode-406-catching-up-with.html' title='.NET Rocks! Epsiode 406: Catching up with Scott Bellware'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-816685735231604152</id><published>2008-12-18T13:57:00.000-08:00</published><updated>2008-12-18T14:03:56.269-08:00</updated><title type='text'>The Difference between "const" and "readonly" in C#</title><content type='html'>It has been baffling me for a while since I've used the two keywords for pretty much the same purposes, but after reading a little of the documentation, the difference between the two became much more clear (emphasis mine):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The readonly keyword differs from the const keyword.&lt;br /&gt;&lt;br /&gt;A &lt;span style="font-weight: bold;"&gt;const&lt;/span&gt; field can only be initialized at the &lt;span style="font-weight: bold;"&gt;declaration&lt;/span&gt; of the field.&lt;br /&gt;A &lt;span style="font-weight: bold;"&gt;readonly&lt;/span&gt; field can be initialized either at the &lt;span style="font-weight: bold;"&gt;declaration&lt;/span&gt; or in a &lt;span style="font-weight: bold;"&gt;constructor&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Therefore, &lt;span style="font-style: italic;"&gt;readonly fields can have different values depending on the constructor used.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Also, although a &lt;span style="font-weight: bold;"&gt;const &lt;/span&gt;field is a &lt;span style="font-weight: bold;"&gt;compile-time constant&lt;/span&gt;, the &lt;span style="font-weight: bold;"&gt;readonly &lt;/span&gt;field can be used for &lt;span style="font-weight: bold;"&gt;run-time constants&lt;/span&gt;, as in this line:&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-left:20px;font-family: courier new;"&gt;public static readonly uint l1 = (uint)DateTime.Now.Ticks;&lt;/div&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-816685735231604152?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/816685735231604152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=816685735231604152' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/816685735231604152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/816685735231604152'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2008/12/difference-between-const-and-readonly.html' title='The Difference between &quot;const&quot; and &quot;readonly&quot; in C#'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-4148016167503943965</id><published>2008-10-30T10:05:00.000-07:00</published><updated>2008-10-30T10:05:05.821-07:00</updated><title type='text'>SubWeaver: a Subversion plugin for Dreamweaver!</title><content type='html'>Awesome... a Subversion (SVN) plugin for Dreamweaver! Exactly what I was looking for!&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://sourceforge.net/projects/subweaver/"&gt;&lt;blockquote&gt;&lt;/blockquote&gt;SourceForge.net: SubWeaver&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The cool thing about it is that it integrates with TortoiseSVN (at least mine did), so that part of the interface feels very familiar!&lt;br /&gt;&lt;br /&gt;Way to go, guys!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-4148016167503943965?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://sourceforge.net/projects/subweaver/' title='SubWeaver: a Subversion plugin for Dreamweaver!'/><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/4148016167503943965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=4148016167503943965' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/4148016167503943965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/4148016167503943965'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2008/10/subweaver-subversion-plugin-for.html' title='SubWeaver: a Subversion plugin for Dreamweaver!'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-7674285392172040863</id><published>2008-10-08T17:12:00.000-07:00</published><updated>2008-10-08T17:15:43.945-07:00</updated><title type='text'>WPF: Getting at information entered in Assembly Information dialog</title><content type='html'>Had a perplexing problem with Getting at information entered in Assembly Information dialog in a WPF application, and it was very quickly answered by Krisha Barghav on the MSDN forums:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/8491e7f3-ace9-491b-9037-0643d77e09e3"&gt;WPF: Getting at information entered in Assembly Information dialog&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;anything you enter inside Assemblyinformation dialog sits in the AssemblyInfo.cs &lt;div&gt;&lt;br /&gt;&lt;/div&gt; &lt;div&gt;You can access these values using  Assembly.GetExecutingAssembly.GetCustomAttributes(true/false);&lt;/div&gt; &lt;div&gt;&lt;br /&gt;&lt;/div&gt; &lt;div&gt;If you print the types of attributes returned, you can see something like  shown below.&lt;/div&gt; &lt;div&gt;&lt;br /&gt;&lt;/div&gt; &lt;div&gt; &lt;div&gt;System.Windows.ThemeInfoAttribute&lt;/div&gt; &lt;div&gt;System.Diagnostics.DebuggableAttribute&lt;/div&gt; &lt;div&gt;System.Runtime.CompilerServices.CompilationRelaxationsAttribute&lt;/div&gt; &lt;div&gt;System.Runtime.InteropServices.ComVisibleAttribute&lt;/div&gt; &lt;div&gt;System.Reflection.AssemblyFileVersionAttribute&lt;/div&gt; &lt;div&gt;System.Runtime.CompilerServices.RuntimeCompatibilityAttribute&lt;/div&gt; &lt;div&gt;System.Reflection.AssemblyTitleAttribute&lt;/div&gt; &lt;div&gt;System.Reflection.AssemblyDescriptionAttribute&lt;/div&gt; &lt;div&gt;System.Reflection.AssemblyConfigurationAttribute&lt;/div&gt; &lt;div&gt;System.Reflection.AssemblyCompanyAttribute&lt;/div&gt; &lt;div&gt;System.Reflection.AssemblyProductAttribute&lt;/div&gt; &lt;div&gt;System.Reflection.AssemblyCopyrightAttribute&lt;/div&gt; &lt;div&gt;System.Reflection.AssemblyTrademarkAttribute&lt;/div&gt; &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt; &lt;div&gt;&lt;br /&gt;&lt;/div&gt; &lt;div&gt;So if you want to access the Description entered in the Assembly, you can  do something like this.&lt;/div&gt; &lt;div&gt;&lt;br /&gt;&lt;/div&gt; &lt;div&gt;&lt;br /&gt;&lt;/div&gt; &lt;div&gt; &lt;div&gt;    foreach (object o in  Assembly.GetExecutingAssembly().GetCustomAttributes(true))&lt;/div&gt; &lt;div&gt;            {&lt;/div&gt; &lt;div&gt;                if (o is AssemblyDescriptionAttribute) Debug.WriteLine((o  as AssemblyDescriptionAttribute).Description);&lt;/div&gt; &lt;div&gt;            }&lt;/div&gt; &lt;div&gt;&lt;br /&gt;&lt;/div&gt; &lt;div&gt;That is just an example.&lt;/div&gt; &lt;div&gt;&lt;br /&gt;&lt;/div&gt; &lt;div&gt;Hope this helps.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Worked great for me!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-7674285392172040863?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/7674285392172040863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=7674285392172040863' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/7674285392172040863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/7674285392172040863'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2008/10/wpf-getting-at-information-entered-in.html' title='WPF: Getting at information entered in Assembly Information dialog'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-1119000490113449341</id><published>2008-09-04T16:26:00.001-07:00</published><updated>2008-09-04T16:31:00.319-07:00</updated><title type='text'>Echominder is even cooler than I thought!</title><content type='html'>A while back I wrote about &lt;a href="http://www.echomider.com/"&gt;Echominder&lt;/a&gt; from Intuit Labs, and I discovered a really cool feature that I didn't even know was in there...&lt;br /&gt;&lt;br /&gt;Not only does echominder call you when you want it to, it also keeps a queue of your reminders on the website, and you can re-remind yourself by telling it to send you a particular message at a specific time (again).&lt;br /&gt;&lt;br /&gt;Previously I was under the impression that the messaging was just a one-time event. Turns out I was wrong (and can't read documentation)! Awesome!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-1119000490113449341?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/1119000490113449341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=1119000490113449341' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/1119000490113449341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/1119000490113449341'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2008/09/echominder-is-even-cooler-than-i.html' title='Echominder is even cooler than I thought!'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-4731011320683507689</id><published>2008-09-04T16:26:00.000-07:00</published><updated>2008-09-04T16:26:05.669-07:00</updated><title type='text'>Kaxaml - Great Lightweight XAML Editor</title><content type='html'>So after checking out some of the &lt;a href="http://visitmix.com/university/wpf/bc08/"&gt;WPF Bootcamp sessions&lt;/a&gt; at MIX08, I decided to install and try out Kaxaml...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.kaxaml.com/"&gt;Kaxaml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;...and it's great! It's really nice to be able to try out the default snippets that are in the tool, and then to be able to grab XAML code blocks off the web and try them out on-the-fly without having to create a Visual Studio 2008 project - which is just too time consuming to try stuff out.&lt;br /&gt;&lt;br /&gt;A very nice, and in my opinion, &lt;span style="font-weight: bold;"&gt;agile&lt;/span&gt; development tool!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-4731011320683507689?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.kaxaml.com/' title='Kaxaml - Great Lightweight XAML Editor'/><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/4731011320683507689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=4731011320683507689' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/4731011320683507689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/4731011320683507689'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2008/09/kaxaml-great-lightweight-xaml-editor.html' title='Kaxaml - Great Lightweight XAML Editor'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-6824555716384415757</id><published>2008-08-28T11:45:00.000-07:00</published><updated>2008-08-28T11:45:10.957-07:00</updated><title type='text'>CLI - The next new old interface paradigm:</title><content type='html'>Seems like there have been quite a few incarnations of the new (old) command line interface - in particular, Ubiquity from Mozilla Labs:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://labs.mozilla.com/2008/08/introducing-ubiquity/"&gt;&lt;span style="font-weight: bold;"&gt;Introducing Ubiquity&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;...which seems to be based on work done by the same guys who did Enso (in fact Aza Raskin is on both demo videos):&lt;br /&gt;&lt;br /&gt;&lt;a style="font-weight: bold;" href="http://www.humanized.com/enso/"&gt;Humanized - Enso&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;...but transformed from an OS utility into a browser mashup utility. I'm sure it's not for everyone, but it could make life simpler for some folks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-6824555716384415757?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.humanized.com/enso/' title='CLI - The next new old interface paradigm:'/><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/6824555716384415757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=6824555716384415757' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/6824555716384415757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/6824555716384415757'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2008/08/cli-next-new-old-interface-paradigm.html' title='CLI - The next new old interface paradigm:'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-7130544527384119721</id><published>2008-07-17T16:56:00.000-07:00</published><updated>2008-07-17T16:56:49.376-07:00</updated><title type='text'>WinForm Tip: Setting Opacity on Panel Control</title><content type='html'>This is a little hokey, but interesting.&lt;br /&gt;&lt;br /&gt;I'd really like to have genuine opacity in my panels and other controls (a la WPF), but this will work OK for now:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eggheadcafe.com/forumarchives/NETFrameworkdrawing/Feb2006/post25815823.asp"&gt;drawing Opacity For Panel Control&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-7130544527384119721?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.eggheadcafe.com/forumarchives/NETFrameworkdrawing/Feb2006/post25815823.asp' title='WinForm Tip: Setting Opacity on Panel Control'/><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/7130544527384119721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=7130544527384119721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/7130544527384119721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/7130544527384119721'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2008/07/winform-tip-setting-opacity-on-panel.html' title='WinForm Tip: Setting Opacity on Panel Control'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-431959414511082207</id><published>2008-05-19T16:58:00.000-07:00</published><updated>2008-05-19T17:03:04.993-07:00</updated><title type='text'>How to Create a Transparent User Control in .NET</title><content type='html'>I was in need of a transparent user control, and for some reason System.Windows.Forms.Control does not support opacity out-of-the-box. &lt;br /&gt;&lt;br /&gt;Thankfully there was a post from Zhi-Xin Ye of Microsoft on the &lt;a href="http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=8&amp;SiteID=1"&gt;MSDN Windows Forms Forums, in which he outlines how to "roll yer own" transparent UserControl:&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2363164&amp;SiteId=1"&gt;Transparent User Control&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-431959414511082207?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/431959414511082207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=431959414511082207' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/431959414511082207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/431959414511082207'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2008/05/how-to-create-transparent-user-control.html' title='How to Create a Transparent User Control in .NET'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-7187839792089855157</id><published>2008-05-07T12:57:00.000-07:00</published><updated>2008-05-07T13:42:19.979-07:00</updated><title type='text'>echominder: a home run from Intuit (and it's free!)</title><content type='html'>Being an ex-Intuit employee, I always like to keep tabs on stuff that they've been researching.&lt;br /&gt;&lt;br /&gt;One of the coolest services that has come out of their research group is Echominder:&lt;br /&gt;&lt;blockquote&gt;&lt;a href="https://echominder.com/"&gt;echominder&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Here's a description from the echominder site of how the service works:&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;scenario&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;you've got a flight tomorrow and just remembered you need to pick up your dry cleaning and set your out of office message. you're driving to work and can't stop to write it down, but echominder is in your speed dial:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;as you're driving home, call echominder and instruct it to have your cell phone ring at 4:30pm with a reminder to pick-up the dry cleaning.&lt;/li&gt;&lt;li&gt;leave another message to call you at 8:00am tomorrow morning to remind you to turn on your out of office message on your computer before you shut down and leave for the airport.&lt;/li&gt;&lt;li&gt;your phone rings right on time and you get the important things done.&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;I had actually been using a similar system before signing up for echominder: I'd call my voice mail at work to remind me to do certain things, but I would have to actually be in the office and then log into my voice mail to get the message.&lt;br /&gt;&lt;br /&gt;Now that I've used echominder a few times, I've found it to be invaluable since it takes out the variables that caused my older methodology to break down:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Location: I don't have to be in the office, because &lt;span style="font-weight: bold;"&gt;echominder calls &lt;span style="font-style: italic;"&gt;me &lt;/span&gt;&lt;/span&gt;wherever I am.&lt;/li&gt;&lt;li&gt;Timing: echominder calls me at the time I specify; I don't have to get a message and then remember to act on it at a particular time, or enter it into Outlook to remind me.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Great service. I just hope it doesn't get &lt;a href="http://zipingo.com/"&gt;Zipingoed&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-7187839792089855157?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/7187839792089855157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=7187839792089855157' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/7187839792089855157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/7187839792089855157'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2008/05/echominder-intuit-can-innovate.html' title='echominder: a home run from Intuit (and it&apos;s free!)'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-6847364995983030502</id><published>2008-05-02T15:46:00.000-07:00</published><updated>2008-07-01T11:13:34.604-07:00</updated><title type='text'>Visual Studio .NET Tip: Setting Tab Order</title><content type='html'>I banged my head against the wall trying to figure out how to &lt;span style="font-weight: bold;"&gt;easily&lt;/span&gt; readjust the tab order of controls on a form in Visual Studio 2005 (C#). It seemed silly to me that in this day and age I would have to adjust every control's tab order by &lt;span style="font-style: italic;"&gt;typing each value in the Properties window.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Thankfully there is a pretty slick way to do it, and I never would have guessed that it was there, but sure enough there was an MSDN Magazine "Advanced Basics" article on the subject back in 2002:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/cc301410.aspx"&gt;Advanced Basics: Visual Studio .NET: Setting Tab Order, Loading the Toolbox with an Add-in&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thankfully, they didn't change it. It's still there, and here's the procedure:&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;To set the tab order, you simply select [the controls on which you wish to change the tab order], then select &lt;span style="font-weight: bold;"&gt;Tab Order &lt;/span&gt;from the &lt;span style="font-weight: bold;"&gt;View &lt;/span&gt;menu. Then just click the controls in the order you want the tabs to sit. As you click each control, the tab order will be displayed on the control to keep you up to date. Press Esc when you're finished.&lt;/blockquote&gt;&lt;br /&gt;The good news is that this feature is still present in Visual Studio 2008 for Windows Forms, but I'm not sure about the WPF editor, though... hopefully it's still present.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-6847364995983030502?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/6847364995983030502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=6847364995983030502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/6847364995983030502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/6847364995983030502'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2008/05/visual-studio-net-tip-setting-tab-order.html' title='Visual Studio .NET Tip: Setting Tab Order'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-5307068482439287326</id><published>2008-05-02T11:49:00.000-07:00</published><updated>2008-05-02T12:01:03.267-07:00</updated><title type='text'>Kudos to Matthew MacDonald for "Pro .NET 2.0 Windows Forms and Custom Controls in C#" book!</title><content type='html'>On the recommendation of another engineer that I work with, I recently purchased Matthew MacDonald's book &lt;a href="http://www.amazon.com/NET-Windows-Forms-Custom-Controls/dp/1590594398/ref=cm_taf_title_featured?ie=UTF8&amp;tag=tellafriend-20"&gt;Pro .NET 2.0 Windows Forms and Custom Controls in C#&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.amazon.com/NET-Windows-Forms-Custom-Controls/dp/1590594398/ref=cm_taf_title_featured?ie=UTF8&amp;tag=tellafriend-20"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_cv5ehyS6LVY/SBtkRTGjrZI/AAAAAAAAAAM/BB2h6HV2H6c/s320/prowinformscover.jpg" alt="" id="BLOGGER_PHOTO_ID_5195856843450330514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This book has already paid for itself in just a couple of weeks -- due to the time saved in trying to find the information I need. Every time I have a question regarding an issue in Windows Forms or with Custom &amp;amp; User Controls, I can find it here. Additionally, the content is written in a manner that can be understood by mere mortals, with some good tips and tricks thrown in too.&lt;br /&gt;&lt;br /&gt;Highly recommended.&lt;br /&gt;&lt;br /&gt;On the merits of this text, I've already purchased Matthew MacDonald's WPF book (the 3.0 one, since I haven't *quite* moved to VS 2008 yet...).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-5307068482439287326?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/5307068482439287326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=5307068482439287326' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/5307068482439287326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/5307068482439287326'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2008/05/kudos-to-matthew-macdonald-for-pro-net.html' title='Kudos to Matthew MacDonald for &quot;Pro .NET 2.0 Windows Forms and Custom Controls in C#&quot; book!'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_cv5ehyS6LVY/SBtkRTGjrZI/AAAAAAAAAAM/BB2h6HV2H6c/s72-c/prowinformscover.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-4289825835504877483</id><published>2008-05-01T10:40:00.001-07:00</published><updated>2008-05-01T10:49:48.953-07:00</updated><title type='text'>XBAP First Glance...</title><content type='html'>Today I was watching a bit of the &lt;a href="http://www.visitmix.com/university/wpf/bc08/"&gt;WPF Boot Camp&lt;/a&gt; up on the &lt;a href="http://www.visitmix.com/"&gt;Mix website&lt;/a&gt;, and part way through the Day One, Part Two section, the presenter (Mark Wilson-Thomas) mentioned XBAPs which I had just read about in Matthew McDonald's Pro WPF book, but had never really seen in action.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ActiveX Document Redux?&lt;/span&gt;&lt;br /&gt;I had read about them in the context of ClickOnce deployment, which may ultimately be a great way to deploy desktop apps through the browser, but XBAP is a relative newcomer. I say relative, because, as &lt;a href="http://www.hanselman.com/blog/FirefoxWPFAndXBAP.aspx"&gt;Scott Hanselman points out&lt;/a&gt;, this smells a lot like ActiveX Documents, with the exception that XBAPs &lt;span style="font-style: italic;"&gt;do&lt;/span&gt; run in Firefox (but not on FF Mac/Linux unless the Mono guys can crack that nut).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Turning The Pages 2.0: a Live XBAP Example&lt;/span&gt;&lt;br /&gt;Anyway, I was really impressed by an amazing example of an XBAP in the application created by the British Library:&lt;br /&gt;&lt;blockquote&gt;Turning The Pages 2.0&lt;br /&gt;&lt;a href="http://www.bl.uk/ttp2/ttp1.html"&gt;http://www.bl.uk/ttp2/ttp1.html&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Just this morning I was zooming in on a hand-written copy of Jane Austen's "History of England" (which she wrote when she was 13!), and the experience was a little surreal, as was viewing and turning the pages of Leonardo Da Vinci's &lt;span style="font-style: italic;"&gt;Codex Arundel&lt;/span&gt;. It felt a little like turning the pages of the books in &lt;span style="font-style: italic;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Myst"&gt;Myst&lt;/a&gt; &lt;/span&gt;game series, except these are &lt;span style="font-style: italic;"&gt;real books.&lt;/span&gt; &lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Please note that &lt;span style="font-weight: bold;"&gt;this is not Silverlight &lt;/span&gt;(formerly known as WPF/E), this is an actual, full-blown .NET WPF application running in your browser, and the system requirements are commensurate with those technologies.&lt;br /&gt;&lt;br /&gt;It's certainly worth checking out, but I'm a little skeptical that this is the next big thing in application deployment (just try clicking the back button in your browser when running the application). The requirements may be a little heavy too,  but it definitely opens up some new doors, and machines will hopefully keep up with the demands of these new flavors of applications (WPF, XBPAP, etc.).&lt;br /&gt;&lt;br /&gt;Additional References:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;span class="a"&gt;&lt;a href="http://www.xbap.org/"&gt;&lt;b&gt;xbap&lt;/b&gt;.org&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa970060.aspx"&gt;&lt;span&gt;&lt;span class="a"&gt;MSDN: &lt;/span&gt;&lt;/span&gt;Windows Presentation Foundation XAML Browser Applications Overview&lt;/a&gt;&lt;span&gt;&lt;span class="a"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-4289825835504877483?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/4289825835504877483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=4289825835504877483' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/4289825835504877483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/4289825835504877483'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2008/05/xbap-first-glance.html' title='XBAP First Glance...'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-7589683672453696629</id><published>2008-04-28T10:05:00.000-07:00</published><updated>2008-04-28T10:21:38.557-07:00</updated><title type='text'>Remember to set SynchronizingObject property for System.Timers.Timer objects in .NET WinForms</title><content type='html'>Found this out the hard way.&lt;br /&gt;&lt;br /&gt;I'm currently building a cool animated window, and instead of using the drag-n-drop timer for WinForms I wanted to just use a timer in code (in this case &lt;span style="font-weight: bold; font-family: courier new;"&gt;System.Timers.Timer&lt;/span&gt;), since I need it to go into a couple of modes, and it just seemed more straightforward since all my code related to the timer could be &lt;span style="font-style: italic;"&gt;just&lt;/span&gt; in my &lt;span style="font-weight: bold; font-family: courier new;"&gt;.cs&lt;/span&gt; file, and not spread across the &lt;span style="font-weight: bold; font-family: courier new;"&gt;.Designer.cs&lt;/span&gt; and the &lt;span style="font-weight: bold; font-family: courier new;"&gt;.cs&lt;/span&gt; files.&lt;br /&gt;&lt;br /&gt;When I tried to set a property on the form from the event handler I had set up that responded to the Timer's &lt;span style="font-weight: bold; font-family: courier new;"&gt;Elapsed&lt;/span&gt;&lt;span style="font-family: courier new;"&gt; &lt;/span&gt;event, I was getting a nasty "Control control name accessed from a thread other than the thread it was created on" error.&lt;br /&gt;&lt;br /&gt;After scanning the help documentation (see the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.timers.timer.aspx"&gt;MSDN Help Link&lt;/a&gt;), it turns out that when using a timer with a form, it's advisable to set the &lt;span style="font-weight: bold; font-family: courier new;"&gt;SynchronizingObject&lt;/span&gt; property to the form object to prevent the aforementioned threading error:&lt;br /&gt;&lt;blockquote&gt;If you use the &lt;span class="selflink"&gt;Timer&lt;/span&gt; with a user interface element,  such as a form or control, assign the form or control that contains the &lt;span class="selflink"&gt;Timer&lt;/span&gt; to the SynchronizingObject property, so that the event is marshaled to the user interface thread.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;The good news is that after setting the &lt;span style="font-weight: bold; font-family: courier new;"&gt;SynchronizingObject&lt;/span&gt; to the form object, the threading issues went away and the form started to behave correctly!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-7589683672453696629?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/7589683672453696629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=7589683672453696629' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/7589683672453696629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/7589683672453696629'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2008/04/remember-to-set-synchronizingobject.html' title='Remember to set SynchronizingObject property for System.Timers.Timer objects in .NET WinForms'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-2484288083725503618</id><published>2008-04-22T10:07:00.000-07:00</published><updated>2008-04-22T10:13:46.111-07:00</updated><title type='text'>Extract Superclass Refactoring on UserControl</title><content type='html'>Yesterday I ran into an interesting problem when working on an internal application:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;How do you perform an "Extract Superclass" on an existing UserControl in .NET?&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;I then posted &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3215262&amp;amp;SiteID=1"&gt;this question on the MSDN Forums&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Honestly, I was hoping that there would be a tool for doing this, or at least a &lt;span style="font-weight: bold;"&gt;documented process&lt;/span&gt;. No such luck.&lt;br /&gt;&lt;br /&gt;So, I went ahead and did my best to perform the refactoring, all the while documenting the procedure. &lt;br /&gt;&lt;br /&gt;To summarize, here are the steps:&lt;br /&gt;&lt;br /&gt;&lt;span&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p align="left"&gt;As promised, here's an oversimplified list of the things I did to  accomplish this:&lt;/p&gt; &lt;ol&gt;&lt;li&gt; &lt;div align="left"&gt;Created a new UserControl to use as the base (let's just call it  "BaseUserControl").&lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div align="left"&gt;Moved private member variables, event handlers, and other  methods pertinent to the functionality I wanted up into BaseUserControl.&lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div align="left"&gt;Copied control(s) I needed from OriginalUserControl into the  BaseUserControl using the visual designer (it's just easier that way, plus  resources are managed correctly).&lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div align="left"&gt;Hooked up BaseUserControl events to the event handlers using the  visual designer (again, it was just easier).&lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div align="left"&gt;Commented out duplicate code in OriginalUserControl (i.e.  the methods, etc. that were moved up)&lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div align="left"&gt;Changed the inheritance of OriginalUserControl from UserControl  to BaseUserControl.&lt;/div&gt; &lt;/li&gt;&lt;li&gt; &lt;div align="left"&gt;Build, fix, build...&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p align="left"&gt;...and it worked! Now I can build a NewUserControl based on  BaseUserControl and it will have all the functionality that I was wanting in the  container, but I can still add more controls, etc. specific to each case I need  it.&lt;/p&gt; &lt;p align="left"&gt; &lt;/p&gt; &lt;p align="left"&gt;I just wanted to mention again why I wanted to do this in the  first place, since it may seem weird to go through all this:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;First, I created a pretty useful control for a project I was working on, but  &lt;strong&gt;didn't think about reuse &lt;/strong&gt;(oops!).  &lt;/li&gt;&lt;li&gt;Naturally, &lt;strong&gt;it became apparent that I would need another similar  component &lt;/strong&gt;after the initial proof-of-concept was done.  &lt;/li&gt;&lt;li&gt;After determining that the functionality of the container could be used in  other controls, I needed a way to &lt;strong&gt;pull that functionality up &lt;/strong&gt;so  that I could use inheritance to create new user controls based on the  container.&lt;/li&gt;&lt;/ul&gt; &lt;p align="left"&gt;Actually it wasn't as bad as I thought, though it sure would be  nice if this was an automated process, or at least if there was a documented  step-by-step how to on the subject.&lt;/p&gt; &lt;p align="left"&gt; &lt;/p&gt; &lt;p align="left"&gt;At any rate, I sincerely hope this helps other developers faced  with a similar challenge!&lt;/p&gt;&lt;/blockquote&gt;&lt;p align="left"&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-2484288083725503618?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/2484288083725503618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=2484288083725503618' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/2484288083725503618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/2484288083725503618'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2008/04/extract-superclass-refactoring-on.html' title='Extract Superclass Refactoring on UserControl'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-9143568080184239713</id><published>2008-04-22T09:53:00.000-07:00</published><updated>2008-04-22T10:06:44.317-07:00</updated><title type='text'>Eclipse Process Framework</title><content type='html'>I just got through listening to a year-old podcast (at the time of this writing) by &lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=210"&gt;DotNetRocks!&lt;/a&gt; in which they interview &lt;a href="http://www.ambysoft.com/"&gt;Scott W. Ambler&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In this podcast, he talks about an interesting tool, the &lt;a href="http://www.eclipse.org/epf/"&gt;Eclipse Process Framework&lt;/a&gt;, and it sounds like a really interesting tool for customizing software development processes:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The Eclipse Process Framework (EPF) aims at producing a customizable software process enginering framework, with exemplary process content and tools, supporting a broad variety of project types and development styles.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I'm not sure if this is something I would use, but one thing is certain:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;no &lt;span style="font-weight:bold;"&gt;one&lt;/span&gt; process works for &lt;span style="font-weight:bold;"&gt;all&lt;/span&gt; organizations.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;All groups are different, and some have legacy processes that they prefer or use.&lt;br /&gt;&lt;br /&gt;So the notion of being able to &lt;span style="font-style:italic;"&gt;pick and choose process components to fit your situation and organization&lt;/span&gt; is pretty compelling.&lt;br /&gt;&lt;br /&gt;Plus, it's all free and available as an Eclipse plug-in, which is pretty cool too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-9143568080184239713?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/9143568080184239713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=9143568080184239713' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/9143568080184239713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/9143568080184239713'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2008/04/eclipse-process-framework.html' title='Eclipse Process Framework'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-2113085750379563487</id><published>2008-04-15T10:50:00.000-07:00</published><updated>2008-04-15T11:00:21.599-07:00</updated><title type='text'>Visual Studio Wish List: Default to Code View in Windows Forms?</title><content type='html'>This one has been bugging me for a while (since the first version of VS .NET), but why is it that the HTML Designer options in Visual Studio 2005 allow you to default to Design or Code view, but that option is not available under the Windows Forms Designer options?&lt;br /&gt;&lt;br /&gt;I'm working in the code &lt;span style="font-weight:bold;"&gt;most&lt;/span&gt; of the time, and am in the visual designer just a very &lt;span style="font-style:italic;"&gt;small&lt;/span&gt; percentage of the time, so why can't I set the default to just open the code window? &lt;br /&gt;&lt;br /&gt;Crazy. &lt;br /&gt;&lt;br /&gt;Hopefully this has been fixed in Visual Studio .NET 2008, but I'm not keeping my hopes up. Alternatively, perhaps this option will be available in the WPF form designer, which would be an improvement - and I can see myself moving in that direction.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-2113085750379563487?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/2113085750379563487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=2113085750379563487' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/2113085750379563487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/2113085750379563487'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2008/04/visual-studio-wish-list-default-to-code.html' title='Visual Studio Wish List: Default to Code View in Windows Forms?'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1974717641782726474.post-7215103793966881395</id><published>2008-03-12T17:52:00.000-07:00</published><updated>2008-04-15T11:01:11.531-07:00</updated><title type='text'>New Beginnings...</title><content type='html'>After my demise at a well-known personal finance software company, I decided to start up a new software consulting company, &lt;a href="http://www.interactivelogic.net"&gt;Interactive Logic&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Thanks go to William Stone of IntraNotions, Inc. (no relation. pure coincidence.) for getting this idea planted in my brain, and thanks to my wife for getting enthused about helping out with the business end of things!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1974717641782726474-7215103793966881395?l=interactivelogic.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://interactivelogic.blogspot.com/feeds/7215103793966881395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1974717641782726474&amp;postID=7215103793966881395' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/7215103793966881395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1974717641782726474/posts/default/7215103793966881395'/><link rel='alternate' type='text/html' href='http://interactivelogic.blogspot.com/2008/03/new-beginnings.html' title='New Beginnings...'/><author><name>Evan K. Stone</name><uri>http://www.blogger.com/profile/05598990757415324913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_cv5ehyS6LVY/SvcvvNTFNZI/AAAAAAAAADQ/UVcoehMDDr4/S220/atom_black_70x70.gif'/></author><thr:total>0</thr:total></entry></feed>
