<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D0EBSH85fSp7ImA9WhRRFE4.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797</id><updated>2011-11-27T18:14:19.125-05:00</updated><category term="VBScript" /><category term="Visual Studio" /><category term="Rotation" /><category term="Run" /><category term="Windows Script Host Object Model" /><category term="Print" /><category term="Outlook" /><category term="VB.NET" /><category term="UBound" /><category term="Office 2003" /><category term="Output" /><category term="DataSource" /><category term="ASP.NET" /><category term="Recall" /><category term="Username" /><category term="Code" /><category term="Visual Studio 2008" /><category term="Languages" /><category term="OLE" /><category term="License" /><category term="Case" /><category term="Flex" /><category term="Flag" /><category term="Finalize" /><category term="Property" /><category term="Insert" /><category term="Catalog" /><category term="Create Commons" /><category term="weather" /><category term="POST" /><category term="Dictionary" /><category term="ReportCodeGenerator" /><category term="CSS" /><category term="Window Style" /><category term="Fill" /><category term="Distinct" /><category term="DevExpress" /><category term="Word" /><category term="Variable" /><category term="Left" /><category term="DateTime" /><category term="Array" /><category term="Oslo" /><category term="Garbage Collection" /><category term="0x80000206" /><category term="Item" /><category term="Local" /><category term="Method" /><category term="Load" /><category term="Key" /><category term="Order" /><category term="Event" /><category term="ReDim" /><category term="Len" /><category term="MAPI" /><category term="Exchange" /><category term=".Net" /><category term="MyBase" /><category term="DirectoryEntry" /><category term="Eric Brown" /><category term="Configuration" /><category term="M" /><category term="Shell" /><category term="Version" /><category term="Natural Logarithm" /><category term="IDisposable" /><category term="Opportunity Costs" /><category term="DataSet" /><category term="IE 7" /><category term="Parameter" /><category term="Full Trust" /><category term="Viewer" /><category term="Finalization Queue" /><category term="Read-Only" /><category term="WithEvents" /><category term="Natural Log" /><category term="Julian M. Bucknall" /><category term="ShiftDateTime" /><category term="Restore" /><category term="SharePoint" /><category term="ln" /><category term="Registry" /><category term="Shortcut" /><category term="PHP" /><category term="Intranet" /><category term="NewScientist" /><category term="Reflection" /><category term="Time Zone" /><category term="Icon" /><category term="Database" /><category term="Active Directory" /><category term="BindingSource" /><category term="Having" /><category term="Authentication" /><category term="Gender" /><category term="Google Voice" /><category term="wunderground" /><category term="Persist Security Info" /><category term="test data" /><category term="Login" /><category term="Export" /><category term="SQL" /><category term="EST" /><category term="Release" /><category term="Image" /><category term="Best Kept Secrets of Peer Code Review" /><category term="New Topics" /><category term="Economics" /><category term="Limit" /><category term="Preserve" /><category term="Default" /><category term="CodeProject" /><category term="Property Get" /><category term="Delete" /><category term="Favorite" /><category term="Paste" /><category term="triangle" /><category term="System.Runtime.InteropServices.ComException" /><category term="Basic Syntax" /><category term="Databind" /><category term="HTTP" /><category term="Formula" /><category term="ReBoot" /><category term="Return" /><category term="2000" /><category term="Comment" /><category term="List" /><category term="Address Book" /><category term="Data Source" /><category term="Error" /><category term="Concat" /><category term="Initial Catalog" /><category term="Startup" /><category term="Command Line" /><category term="Adobe" /><category term="All" /><category term="fReachable Queue" /><category term="After" /><category term="Input" /><category term="Sage" /><category term="Class Library" /><category term="Login failed for user" /><category term="Manage Add-ons" /><category term="TableAdapter" /><category term="Select" /><category term="LDAP" /><category term="Crystal Report" /><category term="Handles" /><category term="Filter" /><category term="Blank" /><category term="AND" /><category term="Count" /><category term="Copy" /><category term="Table" /><category term="Dynamic" /><category term="HTML" /><category term="Debug" /><category term="Right" /><category term="Toolbars" /><category term="Education" /><category term="Analytics" /><category term="Instead" /><category term="Binding" /><category term="Run-time" /><category term="Trigger" /><category term="UTC" /><category term="Visual Studio 2005" /><category term="BAK" /><category term="AJAX" /><category term="Report" /><category term="Standardize" /><category term="Interface" /><category term="Programming" /><category term="EDT" /><category term="C++" /><category term="Google Toolbar" /><category term="Group" /><category term="Code Review" /><category term="IWshRuntimeLibrary" /><category term="Function" /><category term="Jason Cohen" /><category term="OR" /><category term="Property Let" /><category term="Bookmark" /><category term="XHTML" /><category term="ConnectionString" /><category term="Extends" /><category term="Style" /><category term="Windows 7" /><category term="Menu" /><category term="Databound" /><category term="Arguments" /><category term="Coalesce" /><category term="Return Receipt" /><category term="GMT" /><category term="Invest 94" /><category term="NULL" /><category term="Concatenate" /><category term="Charles Babbage" /><category term="About" /><category term="File Path" /><category term="CRRedist2008" /><category term="Printer" /><category term="Attachments" /><category term="Binary" /><category term="DirectorySearcher" /><category term="EventHandler" /><category term="Update" /><category term="SalesLogix" /><category term="Time" /><category term="Enum" /><category term="AD" /><title>Taf's Tech Treasures &amp; Solutions</title><subtitle type="html">A storage house of great ideas; a source of quick help; a site for samples and directions for programming in Visual Basic, SQL, Crystal Reports and other technologies.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://taf-tech.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>60</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/TafsTechTreasuresSolutions" /><feedburner:info uri="tafstechtreasuressolutions" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;D0EEQH4yeyp7ImA9Wx5UFU8.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-3230307006045889914</id><published>2010-10-19T18:00:00.000-04:00</published><updated>2010-10-19T18:00:01.093-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-19T18:00:01.093-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Property Let" /><category scheme="http://www.blogger.com/atom/ns#" term="VBScript" /><category scheme="http://www.blogger.com/atom/ns#" term="Property Get" /><title>VBScript Properties</title><content type="html">I've been spending a lot (make that a &lt;em&gt;LOT&lt;/em&gt;) of time in VBScript lately.  I needed to reproduce some properties that I regularly use in .NET, and I wasn't sure I'd be able to do it.  After discovering that it's actually NOT as hard as I expected, I thought I'd post the template out here:&lt;br /&gt;&lt;br /&gt;Class myClass&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Private ldteTime()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Public Property Let Time(intIteration, dteValue)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;On Error Resume Next&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim i&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i = UBound(ldteTime)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If (Err.Number = 0) and (i &gt; -1) Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If intIteration &gt; i Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i = UBound(ldteTime) + 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ReDim Preserve ldteTime(i)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End If&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ReDim ldteTime(i)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End If&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ldteTime(i) = cDate(dteValue)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Property&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Public Property Get Time(intIteration)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim i&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If intIteration &lt;= UBound(ldteTime) Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i = intIteration&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i = UBound(ldteTime)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End If&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Time = cDate(ldteTime(i))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Property&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Public Property Let LastTime(dteValue)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim i&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i = UBound(ldteTime)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ldteTime(i) = cDate(dteValue)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Property&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Public Property Get LastTime&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim i&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i = UBound(ldteTime)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LastTime = ldteTime(i)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Property&lt;br /&gt;End Class&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-3230307006045889914?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Kh3Gv_Pw7aMpErfYjNG5T6XOdoI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Kh3Gv_Pw7aMpErfYjNG5T6XOdoI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Kh3Gv_Pw7aMpErfYjNG5T6XOdoI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Kh3Gv_Pw7aMpErfYjNG5T6XOdoI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/VP0WVxXbtX8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/3230307006045889914/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=3230307006045889914" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/3230307006045889914?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/3230307006045889914?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/VP0WVxXbtX8/vbscript-properties.html" title="VBScript Properties" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2010/10/vbscript-properties.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4ERXw4eip7ImA9Wx9VGE0.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-7225664646289428194</id><published>2010-09-06T11:02:00.003-04:00</published><updated>2011-02-04T02:35:04.232-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-04T02:35:04.232-05:00</app:edited><title>One user control at a time!</title><content type="html">Got the itch today and started researching Silverlight... which of course--being a developer--meant opening Visual Studio 2010 and jumping right in to poke around.  Sadly, that didn't get me very far on my own.&lt;br /&gt;&lt;br /&gt;I started searching around for a simple HOW TO on new Silverlight projects and found one by &lt;a href="http://www.kunal-chowdhury.com" target="_blank"&gt;Kunal Chowdhury&lt;/a&gt; on &lt;a href="http://www.dotnetfunda.com/" target="_blank"&gt;.net Funda&lt;/a&gt;.  It's &lt;a href="http://www.dotnetfunda.com/articles/article857-introduction-to-silverlight-application-development--silverlight-tutorial--.aspx" target="_blank"&gt;part two&lt;/a&gt; of his Silverlight series.  This article was more my speed for startup:&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Open a new project&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Do "Hello World" a couple different ways&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Through a design-time text control&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Through a run-time code block&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Create additional page material (static in this case) and OOP-it around the project&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;More importantly (to me) I learned a few things on my own:&lt;ol&gt;&lt;br /&gt;&lt;li&gt;How to stop the web instance/port when the application is no longer viable and I can't get it to unload through VS&lt;/li&gt;&lt;br /&gt;&lt;li&gt;F5 to Run With Debugging, Shift-F5 to Stop Debugging (but not the server instance), and Terminate All will close your entire browser (even if you're blogging on another tab) but still not stop the server instance!&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Intellisense error help means absolutely nothing when working with the LayoutRoot (display Grid) node&lt;/li&gt;&lt;br /&gt;&lt;li&gt;That adding a design-time text control with data and then adding an additional run-time text code block to the same LayoutRoot (display Grid) node will cause EITHER an error (see the Intellisense gripe above) or an eternal loading loop on the browser&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-7225664646289428194?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YTglze3mXtZu7iBMGzOaTkig1Bk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YTglze3mXtZu7iBMGzOaTkig1Bk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YTglze3mXtZu7iBMGzOaTkig1Bk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YTglze3mXtZu7iBMGzOaTkig1Bk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/I4lsaZhcYlI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/7225664646289428194/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=7225664646289428194" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/7225664646289428194?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/7225664646289428194?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/I4lsaZhcYlI/one-user-control-at-time.html" title="One user control at a time!" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2010/09/one-user-control-at-time.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEINQXk7eCp7ImA9Wx5SE0s.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-439097188137313342</id><published>2010-08-09T09:47:00.004-04:00</published><updated>2010-08-09T10:03:10.700-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-09T10:03:10.700-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="wunderground" /><category scheme="http://www.blogger.com/atom/ns#" term="triangle" /><category scheme="http://www.blogger.com/atom/ns#" term="weather" /><category scheme="http://www.blogger.com/atom/ns#" term="Invest 94" /><title>Monday Mornings...</title><content type="html">A little off-topic for me, but I thought this was an interesting phenomenon of either &lt;a href="wunderground.com" target="_blank"&gt;Weather Underground&lt;/a&gt; (or it's data crunchers) or possibly Mother Nature, herself, having a 'Case of the Mondays.'  I love how the start points just kind of jump all over the place!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_D6vZpUuRUM4/TGAJY2YENsI/AAAAAAAAAKw/qRG2_ioii_s/s1600/Manic+Monday+1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 239px;" src="http://2.bp.blogspot.com/_D6vZpUuRUM4/TGAJY2YENsI/AAAAAAAAAKw/qRG2_ioii_s/s320/Manic+Monday+1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5503409067164710594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_D6vZpUuRUM4/TGAJZcSC1lI/AAAAAAAAAK4/PbQwi94YXw4/s1600/Manic+Monday+2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 289px;" src="http://2.bp.blogspot.com/_D6vZpUuRUM4/TGAJZcSC1lI/AAAAAAAAAK4/PbQwi94YXw4/s320/Manic+Monday+2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5503409077340001874" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Maybe the triangle over Northern Florida, Georgia and Alabama should have me a little freaked out... I live (on land) near the bottom-right corner of it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-439097188137313342?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QFM_hMpBiQU9NG0oqal50J4_sMU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QFM_hMpBiQU9NG0oqal50J4_sMU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QFM_hMpBiQU9NG0oqal50J4_sMU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QFM_hMpBiQU9NG0oqal50J4_sMU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/I6jUR5pD53E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/439097188137313342/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=439097188137313342" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/439097188137313342?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/439097188137313342?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/I6jUR5pD53E/monday-mornings.html" title="Monday Mornings..." /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_D6vZpUuRUM4/TGAJY2YENsI/AAAAAAAAAKw/qRG2_ioii_s/s72-c/Manic+Monday+1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2010/08/monday-mornings.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UEQ3k7fyp7ImA9WxFUGU4.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-1887550432776091047</id><published>2010-06-30T18:00:00.002-04:00</published><updated>2010-06-30T18:00:02.707-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-30T18:00:02.707-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Rotation" /><category scheme="http://www.blogger.com/atom/ns#" term="CSS" /><category scheme="http://www.blogger.com/atom/ns#" term="Image" /><title>Ups and Downs in Rotating Web Images</title><content type="html">I spent part of my morning preparing an e-postcard for my client's upcoming Independence Day weekend.  I chose a nice picture and a nice poem, formatted it all and previewed it.  It was nice, but the alignment seemed off.&lt;br /&gt;&lt;br /&gt;The picture was a flag at a -45 degree angle and the size was just right without having to specify width and height, so I thought I'd rotate it 90 degrees, changing a landscape image to a portrait image, allowing more space to the side for verbage.  I could either delete the uploaded image AND edit the existing image by rotating it clockwise AND upload it again; OR I could just rotate it 90 degrees on the page.  Wow!  No-brainer, right?&lt;br /&gt;&lt;br /&gt;But, I haven't done this before, so I looked-up the CSS commands to rotate it, courtesy of an &lt;a href="http://answers.oreilly.com/topic/1004-how-to-rotate-an-image-with-css/" target="_blank"&gt;O'Reilly Answers posting&lt;/a&gt;:&lt;br /&gt;&lt;p&gt;&amp;lt;img src="my picture path"&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;style=" -webkit-transform: rotate(270deg);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-moz-transform: rotate(270deg);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);"&lt;br /&gt;&lt;br /&gt;/&amp;gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;The first rotate command affects browsers that are neither Mozilla nor Microsoft in nature, such as Safari, Opera, etc.&lt;br /&gt;&lt;br /&gt;The second rotate command (as you might be able to guess) &lt;em&gt;does&lt;/em&gt; affect Mozilla; and the third rotate command (shocker!) affects Microsoft.&lt;br /&gt;&lt;br /&gt;I like the Webkit and Mozilla solutions because they give you the impression that you can rotate to degrees at-will.  Microsoft, of course, is more monolithic: you WILL rotate at 0 degrees ("rotation=0"), 90 degrees ("rotation=1"), 180 degrees ("rotation=2") or 270 degrees ("rotation=3").&lt;br /&gt;&lt;br /&gt;So, I'm happy as a clam with my preview of the message that the email service provides online as a webpage.  Then I get the preview in Outlook.  Outlook--if you haven't noticed--is a Microsoft product, so everything's going to be great, right?!&lt;br /&gt;&lt;br /&gt;WRONG!  I failed to consider the very basic distinction between webpages and winform applications.&lt;br /&gt;&lt;br /&gt;Lesson learned: next time, 1) account for the target application; 2) find a more thorough way to rotate across web and windows platforms; 3) do step 2 when I've got more time to play with it.&lt;br /&gt;&lt;br /&gt;Sadly, I wound up doing it the hard way and re-uploaded the image manually turned 90 degrees.  It wasn't the best solution, but sometimes you've got to trade away COOL to get FUNCTIONAL.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-1887550432776091047?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/V3moBnJ8IIYynczPrPAkzeqZd-Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V3moBnJ8IIYynczPrPAkzeqZd-Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/V3moBnJ8IIYynczPrPAkzeqZd-Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V3moBnJ8IIYynczPrPAkzeqZd-Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/LCQAqhOXKLM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/1887550432776091047/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=1887550432776091047" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/1887550432776091047?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/1887550432776091047?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/LCQAqhOXKLM/ups-and-downs-in-rotating-web-images.html" title="Ups and Downs in Rotating Web Images" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2010/06/ups-and-downs-in-rotating-web-images.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IDRXo_eSp7ImA9WxFXFEs.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-1012896002375797352</id><published>2010-05-21T13:06:00.000-04:00</published><updated>2010-05-21T13:06:14.441-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-21T13:06:14.441-04:00</app:edited><title>Zombies are open source; humans are proprietary</title><content type="html">&lt;a href="http://www.networkworld.com/community/node/60101"&gt;Zombies are open source; humans are proprietary | NetworkWorld.com Community&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Awesome blog entry by &lt;a href="http://www.networkworld.com/community/user/12313" target="_blank"&gt;Amy Vernon&lt;/a&gt;!  She makes an interesting and memorable analogy to the differences in how Open Source software propagates compared to proprietary software.  Check-out the user comments, though: there are some interesting points made in that discussion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-1012896002375797352?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/T2IGnlH23LVWkwo_GZZV8Us8vnM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/T2IGnlH23LVWkwo_GZZV8Us8vnM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/T2IGnlH23LVWkwo_GZZV8Us8vnM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/T2IGnlH23LVWkwo_GZZV8Us8vnM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/KX5hxisMSiQ" height="1" width="1"/&gt;</content><link rel="related" href="http://www.networkworld.com/community/node/60101" title="Zombies are open source; humans are proprietary" /><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/1012896002375797352/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=1012896002375797352" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/1012896002375797352?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/1012896002375797352?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/KX5hxisMSiQ/zombies-are-open-source-humans-are.html" title="Zombies are open source; humans are proprietary" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2010/05/zombies-are-open-source-humans-are.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cERn06eyp7ImA9WxBaFk8.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-5131814497710832862</id><published>2010-03-26T12:29:00.001-04:00</published><updated>2010-03-26T12:30:07.313-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-26T12:30:07.313-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="AND" /><category scheme="http://www.blogger.com/atom/ns#" term="CodeProject" /><category scheme="http://www.blogger.com/atom/ns#" term="NewScientist" /><category scheme="http://www.blogger.com/atom/ns#" term="OR" /><category scheme="http://www.blogger.com/atom/ns#" term="Charles Babbage" /><title>Nano-light switches</title><content type="html">Wanted to share a fascinating article posted yesterday on &lt;a href="www.newscientist.com"&gt;NewScientist.com&lt;/a&gt;.  (I got this via free subscription to &lt;a href="www.codeproject.com"&gt;CodeProject.com&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;Giving credit to the designs of Charles Babbage, a team of researchers has created a nano-scale AND/OR | NAND/NOR gate (see the article's comments).  What's remarkable about it is that they believe these new gates will be considerably more energy efficient (although &lt;em&gt;slower&lt;/em&gt;) than their current counterparts.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.newscientist.com/article/mg20527536.600-babbage-nanomachine-promises-lowenergy-computing.html" target="_blank"&gt;Check it out!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Personally, I'm just glad it's not another practical excuse for using gold in computers!  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-5131814497710832862?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cC3KXRJ_tZk-p_jED2L5ZhtpCto/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cC3KXRJ_tZk-p_jED2L5ZhtpCto/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cC3KXRJ_tZk-p_jED2L5ZhtpCto/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cC3KXRJ_tZk-p_jED2L5ZhtpCto/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/lXWJF2-pIEw" height="1" width="1"/&gt;</content><link rel="related" href="http://www.newscientist.com/article/mg20527536.600-babbage-nanomachine-promises-lowenergy-computing.html" title="Nano-light switches" /><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/5131814497710832862/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=5131814497710832862" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/5131814497710832862?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/5131814497710832862?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/lXWJF2-pIEw/nano-light-switches.html" title="Nano-light switches" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2010/03/nano-light-switches.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUARns4fyp7ImA9WxBaFUk.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-5480412471473252</id><published>2010-03-25T15:31:00.003-04:00</published><updated>2010-03-25T15:44:07.537-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-25T15:44:07.537-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Economics" /><category scheme="http://www.blogger.com/atom/ns#" term="DevExpress" /><category scheme="http://www.blogger.com/atom/ns#" term="Julian M. Bucknall" /><category scheme="http://www.blogger.com/atom/ns#" term="Opportunity Costs" /><title>An excellent defense on Opportunity Costs</title><content type="html">Another excellent blog from DevExpress this week:&lt;br /&gt;&lt;blockquote&gt;In software development, opportunity costs come up all the time: we often have to make a decision about which project to take on, given a choice, and the opportunity cost of choosing a particular one is the best idea we didn't choose. ...  "There ain't no such thing as a free lunch"... to get something we desire generally means giving up the opportunity to get something else. It "costs" us in some sense to make the choice; it is not free. This is opportunity cost. &lt;/br&gt;&lt;br /&gt;... The opportunity cost of doing a possible new feature over here is not doing another feature over there, and that second feature may in fact be more valuable in terms of revenue. However if enough people vote for or pester us about the first feature, it may be more valuable in terms of goodwill &lt;div align="right"&gt;--Julian M. Bucknall, CTO of DevExpress&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;I don't usually get to check out the video side of their blog, but this one was worth the three-minutes to watch...and definitely worth the five minutes to blog about!  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-5480412471473252?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8ddX0_AKNtOszy9Fss0k9i0C_Gg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8ddX0_AKNtOszy9Fss0k9i0C_Gg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8ddX0_AKNtOszy9Fss0k9i0C_Gg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8ddX0_AKNtOszy9Fss0k9i0C_Gg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/QFgB0pKnOR4" height="1" width="1"/&gt;</content><link rel="related" href="http://community.devexpress.com/blogs/ctodx/archive/2010/03/24/devexpress-newsletter-24-message-from-the-cto.aspx" title="An excellent defense on Opportunity Costs" /><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/5480412471473252/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=5480412471473252" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/5480412471473252?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/5480412471473252?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/QFgB0pKnOR4/excellent-defense-on-opportunity-costs.html" title="An excellent defense on Opportunity Costs" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2010/03/excellent-defense-on-opportunity-costs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUHRnk-fip7ImA9WxBUGE4.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-708900710446510564</id><published>2010-03-05T19:39:00.003-05:00</published><updated>2010-03-05T20:17:17.756-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-05T20:17:17.756-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blank" /><category scheme="http://www.blogger.com/atom/ns#" term="SalesLogix" /><category scheme="http://www.blogger.com/atom/ns#" term="Database" /><category scheme="http://www.blogger.com/atom/ns#" term="Sage" /><category scheme="http://www.blogger.com/atom/ns#" term="Read-Only" /><title>SalesLogix Field Access Problems</title><content type="html">Since I haven't had anything interesting to talk about lately, I thought I'd blog an anecdote about something silly this week while trying to work in Sage SalesLogix 7.2.1's LAN Client Architect tool.&lt;br /&gt;&lt;br /&gt;My client wanted to move a field that tracks what user is assigned to perform a certain function for a contact: specifically, I needed to move this field from the least-specific data table, ACCOUNTS--which contains information about how each CONTACT in a relationship is related--down to the most-specific data table, OPPORTUNITIES--which contains details about how the contact came to our attention and what processes are involved in making them a client.  (i.e. An ACCOUNT defines "Mr. &amp; Mrs. Johnson" which is about a set of CONTACTS.  A CONTACT--such as "Mr. Johnson", "Mrs. Johnson" and each of the kids--contains information about how to contact them and how we are pursuing them as clients.  An OPPORTUNITY is the detail about the CONTACT--like "Mrs. Johnson"--responded to a marketing campaign to become a prospective client.  "Mr. Johnson" may also have his own OPPORTUNITY, as may each of their adult children.)&lt;br /&gt;&lt;br /&gt;I created the new field in the OPPORTUNITY table (in the integrated database editor) and copied the appropriate ACCOUNT table field data into the OPPORTUNITY table field.  In the Administrator's testing view, everything was hunky-dory.  I then logged in as my Test user and the field is blank and read-only.&lt;br /&gt;&lt;br /&gt;Thoughts:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;WTF?!&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;The script might be locking my user out because of a user role setting.&lt;/strong&gt;  I checked this assumption and couldn't immediately find it.  &lt;strong&gt;Maybe the data field is somehow rights-protected.&lt;/strong&gt;  (SalesLogix Customer Support wondered that, too.)  No, no view I could see showed me that.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Maybe the field was malformed.&lt;/strong&gt;  I deleted the field and copied-and-pasted a field from elsewhere on the form that called to a different target, but with the same features.  Nope.  Worked as Administrator; Busted as User.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;So, I called in Sage SalesLogix Customer Support.  We spent about 25 minutes making sure the field was properly mapped and the data was present and making sure the script was being completely unloaded after the failures so that the next test was clean.&lt;br /&gt;&lt;br /&gt;Finally, the CS technician was as frustrated as I was.  By process of elimination, we came down to a rumor that he had heard long before.  He told me, "Add another new custom field."  ?!  Okay, I added a new custom field to that table.  Guess what happened.  :-)  It started working perfectly!&lt;br /&gt;&lt;br /&gt;It seems that somewhere in Sage SalesLogix's twisted history, a bug crept in that &lt;em&gt;sometimes&lt;/em&gt; causes the database to invisibly rights-protect the most recently added custom field.  When you create a new field, the field lock is released.&lt;br /&gt;&lt;br /&gt;I felt foolish for having wasted so much time on such a weird bug, but at least it wasn't one either the CS technician or I really could have foreseen.  A small comfort--and a great reminder that even really expensive tools have their hidden bugs!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-708900710446510564?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_A368QbcYkMNd2czZGA7WZvbbwI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_A368QbcYkMNd2czZGA7WZvbbwI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_A368QbcYkMNd2czZGA7WZvbbwI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_A368QbcYkMNd2czZGA7WZvbbwI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/6st3gYzglwk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/708900710446510564/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=708900710446510564" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/708900710446510564?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/708900710446510564?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/6st3gYzglwk/saleslogix-field-access-problems.html" title="SalesLogix Field Access Problems" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2010/03/saleslogix-field-access-problems.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UASHoyfCp7ImA9WxBXF00.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-4123807662361049818</id><published>2010-01-28T15:05:00.002-05:00</published><updated>2010-01-28T15:07:29.494-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-28T15:07:29.494-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Print" /><category scheme="http://www.blogger.com/atom/ns#" term="Limit" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 7" /><title>Printing documents in Windows 7</title><content type="html">I've been using Windows 7 Ultimate at home since early October and have loved just about every minute of it. It's been smooth as ice (only had a couple program crashes) except for the battery sensor, but I can live with that.&lt;br /&gt;&lt;br /&gt;A client today called me into her office to see if I could help with a problem: she needed to printout multiple MS Word 2007 documents from the directory she stored them in and she couldn't find the option to do it. As we both recalled from Windows XP, you could highlight/select multiple documents and then right-click and choose Print. Now, in Windows 7 Professional, she had about 25+- documents selected and no option to Print! We mulled it over and then started experimenting.&lt;br /&gt;&lt;br /&gt;To make a long story short &lt;span style="FONT-STYLE: italic; font-weight:bolder; font-color: #FF0000"&gt;(too late!)&lt;/span&gt; we found you can only select up to 15 documents before the Print option disappears.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-4123807662361049818?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/01W1IGQ7377Eody-XAmeO5a2tEM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/01W1IGQ7377Eody-XAmeO5a2tEM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/01W1IGQ7377Eody-XAmeO5a2tEM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/01W1IGQ7377Eody-XAmeO5a2tEM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/dPvZcQ880r4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/4123807662361049818/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=4123807662361049818" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/4123807662361049818?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/4123807662361049818?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/dPvZcQ880r4/printing-documents-in-windows-7.html" title="Printing documents in Windows 7" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2010/01/printing-documents-in-windows-7.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ENQXoycCp7ImA9WxBaFUk.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-6092425437795580021</id><published>2010-01-28T14:49:00.001-05:00</published><updated>2010-03-25T15:34:50.498-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-25T15:34:50.498-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Error" /><category scheme="http://www.blogger.com/atom/ns#" term="test data" /><category scheme="http://www.blogger.com/atom/ns#" term="DevExpress" /><category scheme="http://www.blogger.com/atom/ns#" term="Julian M. Bucknall" /><title>Your Comments and Test Data will come back to bite you...</title><content type="html">An excellent word-to-the-wise in this week's DevExpress newsletter:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;[W]rite your code assuming that it will be public and scrutinized. Don't play funny games with it. Make sure your text -- be it error messages, test data, comments, whatever -- is squeaky clean. Don't end up on the Daily WTF with a red face. &lt;div align="right"&gt;--Julian M. Bucknall, CTO of DevExpress&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/6418827604778313797-6092425437795580021?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-zzplyg_qC-eh06Y0ft9HBVBb-M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-zzplyg_qC-eh06Y0ft9HBVBb-M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-zzplyg_qC-eh06Y0ft9HBVBb-M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-zzplyg_qC-eh06Y0ft9HBVBb-M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/LXvaGGLDNkU" height="1" width="1"/&gt;</content><link rel="related" href="http://community.devexpress.com/blogs/ctodx/archive/2010/01/27/devexpress-newsletter-20-message-from-the-cto.aspx?CommentPosted=true#commentmessage" title="Your Comments and Test Data will come back to bite you..." /><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/6092425437795580021/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=6092425437795580021" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/6092425437795580021?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/6092425437795580021?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/LXvaGGLDNkU/your-comments-and-test-data-will-come.html" title="Your Comments and Test Data will come back to bite you..." /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2010/01/your-comments-and-test-data-will-come.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EDQ3w7fSp7ImA9WxBXFkQ.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-7215713908601328929</id><published>2010-01-28T10:39:00.004-05:00</published><updated>2010-01-28T12:27:52.205-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-28T12:27:52.205-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Crystal Report" /><category scheme="http://www.blogger.com/atom/ns#" term="VB.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="TableAdapter" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio 2008" /><category scheme="http://www.blogger.com/atom/ns#" term="SalesLogix" /><category scheme="http://www.blogger.com/atom/ns#" term="Login failed for user" /><category scheme="http://www.blogger.com/atom/ns#" term="CRRedist2008" /><category scheme="http://www.blogger.com/atom/ns#" term="Sage" /><category scheme="http://www.blogger.com/atom/ns#" term="Persist Security Info" /><category scheme="http://www.blogger.com/atom/ns#" term="Fill" /><title>The SQL ConnectionString Fiasco</title><content type="html">I've been freaked out for two hours.  Last night, after I left the office, my client called and gave me a 9AM deadline for a piece of software.&lt;br /&gt;&lt;br /&gt;In a couple hours at the office last night, I ironed-out the last few tweaks for running a VB .NET 2008 Extension for Sage SalesLogix with a Crystal Reports form.  (Here's a tip: For Visual Studio 2008's Crystal Reports, you now have to install the CRRedist2008_{your processor}.msi to each terminal that will open a Crystal Viewer.)  I spent an hour installing the add-ons and released it with each terminal successfully tested.&lt;br /&gt;&lt;br /&gt;This morning the client calls to say that it's not working on his login.  I jump on his workstation (as him) and it's not working.  So WTF?! is going on?  Dragging myself back through the code--high-level stuff first--I finally find that it's erroring on the TableAdapters' FILL routine.  And &lt;em&gt;why&lt;/em&gt; is this?!  &lt;strong&gt;Login failed for user: {domain}\{user}&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;So, I've got it nailed down as a ConnectionString problem.  My connectionstring looks like &lt;strong&gt;Data Source={server};Initial Catalog={database};Integrated Security=True;User ID={sa-type user};Password={wouldn't you like to know};&lt;/strong&gt; which worked just fine all through testing.  I went back to a previous project to compare apples to (slightly different) apples.  Low-and-behold, there was a &lt;em&gt;static&lt;/em&gt; difference: Data Source={server};Initial Catalog={database};&lt;strong&gt;Persist Security Info&lt;/strong&gt;=True;User ID={sa-type user};Password={wouldn't you like to know}; and that made the difference!&lt;br /&gt;&lt;br /&gt;Lesson learned: I got so caught-up in the coolness of the project and the scope of the challenges that I let my &lt;em&gt;visual&lt;/em&gt; brain fool me into glancing over the obvious difference.  I couldn't see the tree for the forest!  :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-7215713908601328929?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4tTJwsWG0KOOHWIC3LJhtRmoTgU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4tTJwsWG0KOOHWIC3LJhtRmoTgU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4tTJwsWG0KOOHWIC3LJhtRmoTgU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4tTJwsWG0KOOHWIC3LJhtRmoTgU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/1RNHWpLQ9Po" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/7215713908601328929/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=7215713908601328929" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/7215713908601328929?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/7215713908601328929?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/1RNHWpLQ9Po/sql-connectionstring-fiasco.html" title="The SQL ConnectionString Fiasco" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2010/01/sql-connectionstring-fiasco.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMDRXk6cSp7ImA9WxBREkw.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-3088283777213471055</id><published>2009-12-30T17:00:00.001-05:00</published><updated>2009-12-30T17:01:14.719-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-30T17:01:14.719-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="2000" /><category scheme="http://www.blogger.com/atom/ns#" term="BAK" /><category scheme="http://www.blogger.com/atom/ns#" term="Restore" /><category scheme="http://www.blogger.com/atom/ns#" term="Database" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><title>Restoring a SQL Server 2000 Database from a BAK file</title><content type="html">This is a fantastic, brief walkthrough to restoring a SQL Server 2000 database file.  I had visited numerous other blog entries, but this one was just what I was looking for! &lt;a href="http://cephas.net/blog/2003/05/14/restoring-a-bak-file-to-a-sql-server-database/" target="_blank"&gt;Restoring a .bak file to a SQL Server database by Aaron Johnson&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'm also PDF'ing that page in case the source ever gets deleted!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-3088283777213471055?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HcvbJmFrRY0p6PDTyfW3viaf9Gw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HcvbJmFrRY0p6PDTyfW3viaf9Gw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HcvbJmFrRY0p6PDTyfW3viaf9Gw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HcvbJmFrRY0p6PDTyfW3viaf9Gw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/XUZ9PQT3g6M" height="1" width="1"/&gt;</content><link rel="related" href="http://cephas.net/blog/2003/05/14/restoring-a-bak-file-to-a-sql-server-database/" title="Restoring a SQL Server 2000 Database from a BAK file" /><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/3088283777213471055/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=3088283777213471055" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/3088283777213471055?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/3088283777213471055?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/XUZ9PQT3g6M/restoring-sql-server-2000-database-from.html" title="Restoring a SQL Server 2000 Database from a BAK file" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2009/12/restoring-sql-server-2000-database-from.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAGQns7eSp7ImA9WxNaFkk.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-7953816430339974373</id><published>2009-12-01T00:21:00.004-05:00</published><updated>2009-12-01T00:52:03.501-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-01T00:52:03.501-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="HTTP" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Voice" /><category scheme="http://www.blogger.com/atom/ns#" term="POST" /><title>Google Voice - Creating a Quick Call by HTTP</title><content type="html">Big creds to two bloggers that helped me figure this out through their brave posts: &lt;ul&gt;&lt;li&gt;Steven's Space On The Web &lt;a href="http://www.stephenjc.com/2009/05/google-voice-call-widget-post-commands.html"&gt;Blog&lt;/a&gt;&lt;/li&gt;&lt;li&gt;jigwashere &lt;a href="http://forum.brighthand.com/showthread.php?t=271689"&gt;Blog&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;If you have a &lt;a href="http://voice.google.com/"&gt;Google Voice&lt;/a&gt; account, you can quickly plug this code into a script to call a dynamic number from one of your registered handsets.&lt;br /&gt;&lt;br /&gt;&amp;lt;form action="https://www.google.com/voice/m/sendcall" method="post"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;label&amp;gt;_rnr_se&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;input type="text" name="_rnr_se" id="_rnr_se" value="&lt;em&gt;&amp;lt;Google Voice ID&amp;gt;&lt;/em&gt;"&amp;gt; &lt;font color="999999"&gt;&lt;em&gt;&amp;lt!--I'll plug in some more information about getting this--&amp;gt;&lt;/em&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/label&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;label&amp;gt;Number to call&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;input type="text" name="number" id="number" value="&lt;em&gt;&amp;lt;10-Digit Number To Call&amp;gt;&lt;/em&gt;"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/label&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;label&amp;gt;From phone&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;input type="text" name="phone" id="phone" value="+1&lt;em&gt;&amp;lt;10-Digit Telephone Number of Your Handset&amp;gt;&lt;/em&gt;"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/label&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;label&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;input type="submit" name="call" id="call" value="Call"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/label&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-7953816430339974373?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NTgXNl4-LxumGtcmm1shw9ExF6M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NTgXNl4-LxumGtcmm1shw9ExF6M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NTgXNl4-LxumGtcmm1shw9ExF6M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NTgXNl4-LxumGtcmm1shw9ExF6M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/AXKDAqPuy48" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/7953816430339974373/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=7953816430339974373" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/7953816430339974373?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/7953816430339974373?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/AXKDAqPuy48/google-voice-creating-quick-call-by.html" title="Google Voice - Creating a Quick Call by HTTP" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2009/12/google-voice-creating-quick-call-by.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ABQn0zeCp7ImA9WxNQEEk.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-3971800046602070153</id><published>2009-09-15T14:31:00.006-04:00</published><updated>2009-09-15T17:22:33.380-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-15T17:22:33.380-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Garbage Collection" /><category scheme="http://www.blogger.com/atom/ns#" term="Finalize" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio" /><category scheme="http://www.blogger.com/atom/ns#" term="Finalization Queue" /><category scheme="http://www.blogger.com/atom/ns#" term=".Net" /><category scheme="http://www.blogger.com/atom/ns#" term="fReachable Queue" /><title>A Revealing Look at .Net Garbage Collection</title><content type="html">Another title to this post could be&lt;br /&gt;"Why Your Program Runs Slower Even Though You Help Manage Garbage"&lt;br /&gt;&lt;br /&gt;I highly recommend every .Net programmer watch this presentation! Personally, I'm walking away from it &lt;em&gt;much&lt;/em&gt; more aware of when and how to help with Garbage Collection.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.red-gate.com/products/ants_memory_profiler/DOTNET_Memory_Management/Index.html"&gt;http://www.red-gate.com/products/ants_memory_profiler/DOTNET_Memory_Management/Index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I do wish the presenter had spent more time on Large Object Heaps and on the Finalization and fReachable Queues. It seems to me that Microsoft made the work of Destructors (a standard principle of Object Oriented Programming) far more cumbersome by making Finalization a multitiple Garbage Collection Iteration process. Maybe some more explanation of the purpose and function of the Finalization and fReachable Queues would explain their purpose.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-3971800046602070153?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gWMWzk-Snqi6HuvLfFUSQAG-wDQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gWMWzk-Snqi6HuvLfFUSQAG-wDQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gWMWzk-Snqi6HuvLfFUSQAG-wDQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gWMWzk-Snqi6HuvLfFUSQAG-wDQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/qIR6RfEDlWs" height="1" width="1"/&gt;</content><link rel="related" href="http://www.red-gate.com/products/ants_memory_profiler/DOTNET_Memory_Management/Index.html" title="A Revealing Look at .Net Garbage Collection" /><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/3971800046602070153/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=3971800046602070153" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/3971800046602070153?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/3971800046602070153?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/qIR6RfEDlWs/revealing-look-at-net-garbage.html" title="A Revealing Look at .Net Garbage Collection" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2009/09/revealing-look-at-net-garbage.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQNQHc-eip7ImA9WxJUEUk.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-6864921589733662526</id><published>2009-07-09T10:06:00.000-04:00</published><updated>2009-07-09T10:06:31.952-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-09T10:06:31.952-04:00</app:edited><title>Official Google Blog: Introducing the Google Chrome OS</title><content type="html">&lt;a href="http://googleblog.blogspot.com/2009/07/introducing-google-chrome-os.html"&gt;Official Google Blog: Introducing the Google Chrome OS&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I love the upbeat nature of this release!  They're identifying what people want--if not putting words in peoples' mouths--and telling you why this is going to be great.  It doesn't answer questions because it doesn't make you want to ask questions!  You just want to go "woopee!" and assume that Google knows exactly how to do everything it promises!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-6864921589733662526?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zdmRUyEaYGwFaiG-DRbFv_gY9h8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zdmRUyEaYGwFaiG-DRbFv_gY9h8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zdmRUyEaYGwFaiG-DRbFv_gY9h8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zdmRUyEaYGwFaiG-DRbFv_gY9h8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/UI9scnscbDY" height="1" width="1"/&gt;</content><link rel="related" href="http://googleblog.blogspot.com/2009/07/introducing-google-chrome-os.html" title="Official Google Blog: Introducing the Google Chrome OS" /><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/6864921589733662526/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=6864921589733662526" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/6864921589733662526?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/6864921589733662526?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/UI9scnscbDY/official-google-blog-introducing-google.html" title="Official Google Blog: Introducing the Google Chrome OS" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2009/07/official-google-blog-introducing-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UFRHw7fCp7ImA9WxVaEUw.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-2580818502368727991</id><published>2009-04-07T09:33:00.001-04:00</published><updated>2009-04-07T09:33:35.204-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-07T09:33:35.204-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Adobe" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex" /><title>Free Adobe Flex Builder 3 for Unemployed Developers</title><content type="html">The development community is crying out for support and the sponsors are starting to respond!&lt;br /&gt;&lt;br /&gt;Adobe is releasing a PERSONAL USE ONLY software bundle with license for Flex Builder 3!  The goal is (ostensibly) to enable &lt;em&gt;recently&lt;/em&gt; unemployed developers to learn the Flex platform and add it to their skill set for future employment.  Read &lt;a href="http://www.forta.com/"&gt;Ben Forta&lt;/a&gt;'s blog entry about it &lt;a href="http://www.forta.com/blog/index.cfm/2009/4/3/Free-Flex-Builder-3-For-Unemployed-Developers"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here's my question, though: what about those of us who haven't yet been laid off?  I'd love to add Flex to my skill set &lt;em&gt;now&lt;/em&gt; while I'm still at a company, making myself more valuable.  How about a personal version for us so that we can push our companies to purchase a corporate license for Flex?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-2580818502368727991?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kY9HZd9tuxEzaAaIAW6B1-POn7w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kY9HZd9tuxEzaAaIAW6B1-POn7w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kY9HZd9tuxEzaAaIAW6B1-POn7w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kY9HZd9tuxEzaAaIAW6B1-POn7w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/m_ygYk7J3Lc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/2580818502368727991/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=2580818502368727991" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/2580818502368727991?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/2580818502368727991?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/m_ygYk7J3Lc/free-adobe-flex-builder-3-for.html" title="Free Adobe Flex Builder 3 for Unemployed Developers" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2009/04/free-adobe-flex-builder-3-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EMQng4eCp7ImA9WxVbFE4.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-7203301042420504590</id><published>2009-03-30T13:48:00.003-04:00</published><updated>2009-03-30T13:54:43.630-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-30T13:54:43.630-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Create Commons" /><category scheme="http://www.blogger.com/atom/ns#" term="M" /><category scheme="http://www.blogger.com/atom/ns#" term="License" /><category scheme="http://www.blogger.com/atom/ns#" term="Oslo" /><title>Choose a License</title><content type="html">&lt;em&gt;"&lt;a href="http://creativecommons.org/license/"&gt;Choose a License&lt;/a&gt;: License Your Work&lt;br /&gt;With a Creative Commons license, you keep your copyright but allow people to copy and distribute your work provided they give you credit — and only on the conditions you specify here."&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Okay, folks. I've been very bad and I'm very sorry. I made a lofty promise early this year to start posting again and I've done squat.&lt;br /&gt;&lt;br /&gt;As usual, it takes something new and exciting for me to really get involved again, and I want to show you this website in case you are as unfamiliar with it as I was: &lt;a href="http://creativecommons.org/license/"&gt;Creative Commons .ORG&lt;/a&gt;. In just a few simple steps you can license your work and use it to encourage others to give you credit for your source.&lt;br /&gt;&lt;br /&gt;In keeping with giving credit, I was introduced to the site by &lt;a href="http://drowningintechnicaldebt.com/blogs/davidstrommer/default.aspx"&gt;the blog of David Strommer&lt;/a&gt;, a software developer/architect in the Jacksonville, FL area. It was my priviledge to attend a presentation of his preliminary reasearch on "Oslo," Microsoft's new M Language solution. I hope to start including some of my own M successes with you here soon!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-7203301042420504590?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Kq70w6f3yySeRd1Yq0OWxRLRwwQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Kq70w6f3yySeRd1Yq0OWxRLRwwQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Kq70w6f3yySeRd1Yq0OWxRLRwwQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Kq70w6f3yySeRd1Yq0OWxRLRwwQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/HsIYBiLzZM4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/7203301042420504590/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=7203301042420504590" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/7203301042420504590?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/7203301042420504590?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/HsIYBiLzZM4/choose-license.html" title="Choose a License" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2009/03/choose-license.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08MQnc9eCp7ImA9WxVbFE4.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-4382689193153734674</id><published>2009-01-27T18:45:00.003-05:00</published><updated>2009-03-30T13:58:03.960-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-30T13:58:03.960-04:00</app:edited><title>Kixtart Scripting</title><content type="html">I like the poetry that I get to make the new year's first blog about a technology that is new to me!&lt;br /&gt;&lt;br /&gt;My friend &lt;a href="http://scottsexternalbrain.blogspot.com/"&gt;Scott&lt;/a&gt; recently asked me to send him a copy of the &lt;a href="http://www.blogger.com/www.kixtart.org" target="_blank"&gt;KiXtart&lt;/a&gt; scripts he had created with a client we have in common.  In reviewing the scripts, I realized how useful, simple and practical a technology this really is.&lt;br /&gt;&lt;br /&gt;The concept of &lt;a href="http://www.blogger.com/www.kixtart.org" target="_blank"&gt;KiXtart&lt;/a&gt; is that you can launch it from a network location at log-in and effect changes much more simply than trying to do Organizational Unit changes.  In this case, I will show (based on his script) how to determine what script to run and assign drive letters and/or printers based upon Windows domain group memberships.&lt;br /&gt;&lt;br /&gt;*It's important to note that the comment notation of &lt;a href="http://www.blogger.com/www.kixtart.org" target="_blank"&gt;KiXtart&lt;/a&gt; is a semicolon (;) and I will code with comments accordingly.&lt;br /&gt;&lt;br /&gt;*Here's a &lt;a href="http://www.eggheadcafe.com/software/aspnet/33283442/win2003-server-script-err.aspx" target="_blank"&gt;blog entry&lt;/a&gt; from someone more familiar with the topic.  This blog answered a few of my questions while I was writing this.&lt;br /&gt;&lt;br /&gt;First, we'll determine what part of the network this computer is on.  To this end, Scott had used a fairly simple and straight-forward naming strategy for workstation computers, laptops and public kiosks.&lt;br /&gt;&lt;br /&gt;;--------------------&lt;br /&gt;;BRANCHING.KIX&lt;br /&gt;;A script run at log-in to determine settings based upon the terminal's name&lt;br /&gt;&lt;br /&gt;;First, let's get rid of other drive mappings that were automatically created at login by the domain.&lt;br /&gt;;This will NOT get rid of the drives the user has mapped by hand.&lt;br /&gt;USE "*" /DELETE&lt;br /&gt;&lt;br /&gt;;Now, we have users at OFFICE1 and OFFICE2.  This could just as easily be departmental, such as SALES, IT and CORPORATE.  For expediency, we won't differ based upon terminal type.&lt;br /&gt;;The terminal names contain their location: OFFICE1's laptop 1 is OFFICE1_L_001.&lt;br /&gt;;The scripting allows for common structures like IF/ENDIF and SELECT/ENDSELECT.&lt;br /&gt;;The scripting provides INCLUDE for &lt;em&gt;executing&lt;/em&gt; additional scripts.&lt;br /&gt;;The scripting allows for functions that are installed on the server, such as INSTR ("in string").&lt;br /&gt;SELECT&lt;br /&gt;        CASE INSTR(@HOSTNAME, "OFFICE1")&lt;br /&gt;                INCLUDE "\\myServer\LogInScripts\OFFICE1.KIX"&lt;br /&gt;        CASE INSTR(@HOSTNAME, "OFFICE2")&lt;br /&gt;                INCLUDE "\\myServer\LogInScripts\OFFICE2.KIX"&lt;br /&gt;END SELECT&lt;br /&gt;QUIT&lt;br /&gt;;--------------------&lt;br /&gt;&lt;br /&gt;That's it!  That's all there is to a branching &lt;a href="http://www.blogger.com/www.kixtart.org" target="_blank"&gt;KiXtart&lt;/a&gt; script.&lt;br /&gt;&lt;br /&gt;Now, let's say that OFFICE1 needs drive maps specified and OFFICE2 (a smaller, remote office) only needs the printer specified.  Of course, you can mix-and-match these as you see fit, but let's keep it simple!&lt;br /&gt;&lt;br /&gt;;--------------------&lt;br /&gt;;OFFICE1.KIX&lt;br /&gt;;The scripting library includes functions to look at the groups this terminal has been granted access to during log-in, such as INGROUP ("in group").&lt;br /&gt;;Standard DOS/NT commands are respected and used, such as USE.&lt;br /&gt;IF INGROUP ("{Group Name}")&lt;br /&gt;        USE {Drive Letter}: "{Share path}"&lt;br /&gt;ENDIF&lt;br /&gt;IF INGROUP ("SALES")&lt;br /&gt;        USE S: "\\myServer\SALES\"&lt;br /&gt;ENDIF&lt;br /&gt;;--------------------&lt;br /&gt;&lt;br /&gt;;--------------------&lt;br /&gt;;OFFICE2.KIX&lt;br /&gt;;The scripting library also provides for the terminals 'Printers and Faxes' preferences with SETDEFAULTPRINTER.&lt;br /&gt;SETDEFAULTPRINTER ("{Printer Name}")&lt;br /&gt;SETDEFAULTPRINTER ("\\myServer\Printer 1")&lt;br /&gt;;--------------------&lt;br /&gt;&lt;br /&gt;How easy is that?!&lt;br /&gt;&lt;br /&gt;So, you can see how by defining your scripts in pretty general ways you can accomplish a lot!  OFFICE1_K_001 (OFFICE1's Kiosk #1, which happens to belong to the SALES group) would follow a path of BRANCHING.KIX (INSTR on "OFFICE1" = True) -&gt; OFFICE1.KIX.  That would give it (example) S: pointing to \\myServer\SALES\ as a drive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-4382689193153734674?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/THVCpRLjUmQwer_zp9lJ4FV6akc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/THVCpRLjUmQwer_zp9lJ4FV6akc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/THVCpRLjUmQwer_zp9lJ4FV6akc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/THVCpRLjUmQwer_zp9lJ4FV6akc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/BH9QCgDGL_s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/4382689193153734674/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=4382689193153734674" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/4382689193153734674?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/4382689193153734674?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/BH9QCgDGL_s/kixtart-scripting.html" title="Kixtart Scripting" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2009/01/kixtart-scripting.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8ERno8eyp7ImA9WxRQFUU.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-5396856565790792883</id><published>2008-10-09T13:57:00.003-04:00</published><updated>2008-10-09T15:33:27.473-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-09T15:33:27.473-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Crystal Report" /><category scheme="http://www.blogger.com/atom/ns#" term="Analytics" /><category scheme="http://www.blogger.com/atom/ns#" term="New Topics" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><title>Analytics in action</title><content type="html">Hi folks!&lt;br /&gt;&lt;br /&gt;On the 6th of this month, I visited my AdSense report.  (I am a real live nephew of my Uncle Sam, of course...and he takes all the profits!)  The advertisement on-screen was for &lt;a href="http://www.google.com/analytics"&gt;Google Analytics&lt;/a&gt; reports.  Well, I've heard of collecting analytics and Google services are usually free, so let's see!&lt;br /&gt;&lt;br /&gt;With just one script insertion into the blog's template, I can now see how many of you visit my site each day, how long you stay, what blog topics you're interested in, and what countries you're visiting me from!&lt;br /&gt;&lt;br /&gt;Seeing these results has really boosted my enthusiasm that this blog is useful.  So far, I've really only heard from four people that have questions or comments, so I was completely overwhelmed to see how many visitors I'm really getting!&lt;br /&gt;&lt;br /&gt;So, let me say that I promise to rededicate myself to my blogging and bringing you quality material that I hope you will benefit from.  It should be no surprise that over 1/3 of the visits to my site are folks looking for help with SQL and Crystal Reports, especially formatting data and tracking changes.  I will endeavor to increase the range of topics in this area; however, I will still be posting my best Visual Basic coding practices, as well, and try to show you some of my best blends of the two.&lt;br /&gt;&lt;br /&gt;Look for new topics in the coming months: C#, ASP.NET and AJAX -- and no, not because I'm a Visual Studio addict...I'm not...I can quit whenever I want!  (And then starve to death with no income!)  I'm also going to continue posting bits of interesting (to me!) information and technical/professional book recommendations.&lt;br /&gt;&lt;br /&gt;Most important of all, since I know you're out there now, please drop me a line and let me know what you're interested in.  Maybe I've done it and not talked about it; maybe it's something I really should know and can share my learning experience with you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-5396856565790792883?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/i72K7r3k_UFMDnDr8tSfNHAkNq0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i72K7r3k_UFMDnDr8tSfNHAkNq0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/i72K7r3k_UFMDnDr8tSfNHAkNq0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i72K7r3k_UFMDnDr8tSfNHAkNq0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/fvphdDVgnKk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/5396856565790792883/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=5396856565790792883" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/5396856565790792883?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/5396856565790792883?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/fvphdDVgnKk/analytics-in-action.html" title="Analytics in action" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2008/10/analytics-in-action.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8NRH84fCp7ImA9WxRQFUU.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-628490854326285960</id><published>2008-10-06T14:09:00.003-04:00</published><updated>2008-10-09T15:34:55.134-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-09T15:34:55.134-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="CodeProject" /><category scheme="http://www.blogger.com/atom/ns#" term="ReBoot" /><title>The Return of Reboot</title><content type="html">I posted my first conversation-starter on CodeProject today about the return of one of my favorite shows, &lt;a href="http://www.reboot.com/"&gt;&lt;em&gt;ReBoot&lt;/em&gt;&lt;/a&gt;!  &lt;a href="http://www.codeproject.com/script/Forums/View.aspx?fid=1159&amp;msg=2753441"&gt;Check it out!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-628490854326285960?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pdupfv9wUskVdqapCiQnwE-LyKI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pdupfv9wUskVdqapCiQnwE-LyKI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pdupfv9wUskVdqapCiQnwE-LyKI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pdupfv9wUskVdqapCiQnwE-LyKI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/zHq2Ybw-3Y4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/628490854326285960/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=628490854326285960" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/628490854326285960?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/628490854326285960?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/zHq2Ybw-3Y4/return-of-reboot.html" title="The Return of Reboot" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2008/10/return-of-reboot.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cMQ3Yzeip7ImA9WxRbF0g.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-3245841805785463970</id><published>2008-08-29T12:34:00.007-04:00</published><updated>2008-12-08T11:51:22.882-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-08T11:51:22.882-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Event" /><category scheme="http://www.blogger.com/atom/ns#" term="Trigger" /><category scheme="http://www.blogger.com/atom/ns#" term="WithEvents" /><category scheme="http://www.blogger.com/atom/ns#" term="EventHandler" /><category scheme="http://www.blogger.com/atom/ns#" term="Handles" /><title>Detecting User-Events as opposed to Automated Events</title><content type="html">Proper credit where credit is due:  &lt;a href="http://www.slxdeveloper.com/forum.aspx?forumid=2000&amp;postid=18326" target="_TafTech"&gt;SalesLogix Developer Forum&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is a ghost from my past: how do you detect when the user has triggered an event or when the event was triggered automatically or programmatically?  I didn't spend much time on this and found a different way around it than the one given in that linked discussion, but I love the simplicity!&lt;br /&gt;&lt;br /&gt;'This class is called by the main class, presumably to perform some business logic, and will trigger that an event is needed.&lt;br /&gt;Class myCalledClass&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Event to be triggered&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Event ProcessingRequired(ByVal sender As System.Object, ByVal e As System.EventArgs)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'We'll assume that the User has to request this.  (I &lt;em&gt;almost&lt;/em&gt; always pre-set a boolean to False&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Private blnIsAutomaticallyTriggered As Boolean = False&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Public Property IsUserTriggered() As Boolean&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return Not blnIsAutomaticallyTriggered   'Indicates the opposite of automatic, which is user&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set(ByVal value As Boolean)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;blnIsAutomaticallyTriggered = Not value  'Sets the opposite of automatic, which is user&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Set&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Property&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Class method that will fire the event&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Public Sub DoAnEvent()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RaiseEvent ProcessingRequired(Me, New System.EventArgs)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Sub&lt;br /&gt;&lt;br /&gt;End Class&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Class myClass&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Object that has events and performs routines we need&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WithEvents myCC As New myCalledClass&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Also imagine there's a button on the myClass Form called btnPush that starts the user-triggered event&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'The user clicks the button on the form...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sub btnPush_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPush.Click&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim blnUserTriggeredStatus As Boolean = myCC.IsUserTriggered  'Get the status of the object's property as it was when we entered the routine&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myCC.IsUserTriggered = True  'We indicate that it was started by the user&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myCC.DoAnEvent()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myCC.IsUserTriggered = blnUserTriggeredStatus  'Return the status of the object's property to what it was when we entered the routine&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Sub&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Calls to the other class's method (which will trigger an event) as an automated interaction rather than user-triggered&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sub CallDoAnEvent()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim blnUserTriggeredStatus As Boolean = myCC.IsUserTriggered  'Get the status of the object's property as it was when we entered the routine&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myCC.IsUserTriggered = False 'Always best to cover your bases&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myCC.DoAnEvent()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myCC.IsUserTriggered = blnUserTriggeredStatus  'Return the status of the object's property to what it was when we entered the routine&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Sub&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Logic to be performed when the other class has triggered its event.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Remember, this is happening DURING the call to myCC.DoAnEvent() above...we've set the myCC.IsUserTriggered to a temporary value.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'When this ends, the execution will step back through the stack to the myCC.DoAnEvent() and then continue from that point.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sub CCProcessing(ByVal sender As System.Object, ByVal e as System.EventArgs) Handles myCC.ProcessingRequired&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If myCC.IsUserTriggered = True Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MsgBox("Triggered by the user")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MsgBox("Triggered within the program")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End If&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Sub&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'When this class begins, we'll trigger one automatically.  Then the user can trigger the event with the button once the form is displayed.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sub New()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Me.CallDoAnEvent()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Sub&lt;br /&gt;&lt;br /&gt;End Class&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-3245841805785463970?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SLKk5Gp5L3HTtQCFfR3CmgXKnKM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SLKk5Gp5L3HTtQCFfR3CmgXKnKM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SLKk5Gp5L3HTtQCFfR3CmgXKnKM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SLKk5Gp5L3HTtQCFfR3CmgXKnKM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/PSFBYrsWqDM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/3245841805785463970/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=3245841805785463970" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/3245841805785463970?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/3245841805785463970?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/PSFBYrsWqDM/detecting-user-events-as-opposed-to.html" title="Detecting User-Events as opposed to Automated Events" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2008/08/detecting-user-events-as-opposed-to.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IBR3Y_eip7ImA9WxdaEUU.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-6046109288333635512</id><published>2008-08-19T16:35:00.007-04:00</published><updated>2008-08-19T17:32:36.842-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-19T17:32:36.842-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Property" /><category scheme="http://www.blogger.com/atom/ns#" term="About" /><category scheme="http://www.blogger.com/atom/ns#" term="Interface" /><category scheme="http://www.blogger.com/atom/ns#" term="Version" /><title>Interfaces and About</title><content type="html">It's been so long since I posted code, it's convenient that this is a twofer.  I'm going to give you a brief introduction to Interfaces (by means of an example) and show you how to get (read only) some of your executable's file properties.&lt;br /&gt;&lt;br /&gt;First, let's identify the Interface we want.  In my example, I'm showing you how to get core pieces of information from the Assembly of our project: Title, Description, Version, etc.  Declaring the Interface is, naturally, the easiest part.  (Sticking to it can make you a bit anxious, though, as the IDE will show errors until you've finished implementing EVERY method or property.)&lt;br /&gt;&lt;br /&gt;(Because we're talking about Assembly info, we want to make sure these are specified as ReadOnly.)&lt;br /&gt;&lt;br /&gt;Interface IAssemblyInfo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ReadOnly Property Title() As String&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ReadOnly Property Description() As String&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ReadOnly Property Company() As String&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ReadOnly Property Product() As String&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ReadOnly Property Copyright() As String&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ReadOnly Property Trademark() As String&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ReadOnly Property FileVersion() As String&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ReadOnly Property Version() As System.Version   'Yes, it's actually a System class!&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ReadOnly Property ExecutableDate(Optional ByVal strPath As String = "") As Date   'We're going to be able to determine a file's Creation Time or the Executable's Creation Time dependent upon the parameter&lt;br /&gt;End Interface&lt;br /&gt;&lt;br /&gt;Easy, right?!  Yeah...well, that's the easy part.  Now let's put them to use!&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Class MyAssemblyInfo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Implements IAssemblyInfo    'Implements Interface&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Private aiAssemblyInfo As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Public ReadOnly Property Company() As String Implements IAssemblyInfo.Company&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim rc As String = String.Empty&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim strCompany As System.Reflection.AssemblyCompanyAttribute   'How archaic, right?  Most of these have their own special, typed object!&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strCompany = CType(aiAssemblyInfo.GetCustomAttribute(GetType(System.Reflection.AssemblyCompanyAttribute), False)(0), System.Reflection.AssemblyCompanyAttribute)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rc = strCompany.Company.ToString.Trim&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Catch ex As Exception&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return rc&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Property&lt;br /&gt;&lt;br /&gt;'It should be no surprise that the next few follow the exact same pattern, so I shall not go into details with each.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Public ReadOnly Property Copyright() As String Implements IAssemblyInfo.Copyright&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim rc As String = String.Empty&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim strCopyright As System.Reflection.AssemblyCopyrightAttribute&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strCopyright = CType(aiAssemblyInfo.GetCustomAttribute(GetType(System.Reflection.AssemblyCopyrightAttribute), False)(0), System.Reflection.AssemblyCopyrightAttribute)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rc = strCopyright.Copyright.ToString.Trim&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Catch ex As Exception&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return rc&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Property&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Public ReadOnly Property Description() As String Implements IAssemblyInfo.Description&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim rc As String = String.Empty&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim strDescription As System.Reflection.AssemblyDescriptionAttribute&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strDescription = CType(aiAssemblyInfo.GetCustomAttribute(GetType(System.Reflection.AssemblyDescriptionAttribute), False)(0), System.Reflection.AssemblyDescriptionAttribute)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rc = strDescription.Description.ToString.Trim&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Catch ex As Exception&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return rc&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Property&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Public ReadOnly Property Product() As String Implements IAssemblyInfo.Product&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim rc As String = String.Empty&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim strProduct As System.Reflection.AssemblyProductAttribute&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strProduct = CType(aiAssemblyInfo.GetCustomAttribute(GetType(System.Reflection.AssemblyProductAttribute), False)(0), System.Reflection.AssemblyProductAttribute)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rc = strProduct.Product.ToString.Trim&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Catch ex As Exception&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return rc&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Property&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Public ReadOnly Property Title() As String Implements IAssemblyInfo.Title&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim rc As String = String.Empty&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim strTitle As System.Reflection.AssemblyTitleAttribute&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strTitle = CType(aiAssemblyInfo.GetCustomAttribute(GetType(System.Reflection.AssemblyTitleAttribute), False)(0), System.Reflection.AssemblyTitleAttribute)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rc = strTitle.Title.ToString.Trim&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Catch ex As Exception&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return rc&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Property&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Public ReadOnly Property Trademark() As String Implements IAssemblyInfo.Trademark&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim rc As String = String.Empty&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim strTrademark As System.Reflection.AssemblyTrademarkAttribute&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strTrademark = CType(aiAssemblyInfo.GetCustomAttribute(GetType(System.Reflection.AssemblyTrademarkAttribute), False)(0), System.Reflection.AssemblyTrademarkAttribute)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rc = strTrademark.Trademark.ToString.Trim&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Catch ex As Exception&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return rc&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Property&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Public ReadOnly Property FileVersion() As String Implements IAssemblyInfo.FileVersion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim rc As String = String.Empty&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim strFileVersion As System.Reflection.AssemblyFileVersionAttribute&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strFileVersion = CType(aiAssemblyInfo.GetCustomAttribute(GetType(System.Reflection.AssemblyFileVersionAttribute), False)(0), System.Reflection.AssemblyFileVersionAttribute)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rc = strFileVersion.FileVersion.ToString.Trim&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Catch ex As Exception&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return rc&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Property&lt;br /&gt;&lt;br /&gt;'Version is significantly different.  Basically, we get the "AssemblyName" object and extract the Version from that.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Public ReadOnly Property Version() As System.Version Implements IAssemblyInfo.Version&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim rc As System.Version = Nothing&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim anAssemblyName As System.Reflection.AssemblyName = aiAssemblyInfo.GetName&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rc = anAssemblyName.Version&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Catch ex As Exception&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return rc&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Property&lt;br /&gt;&lt;br /&gt;'The next one use the IO system to determine the Creation Time.  Use your imagination on expanding this one!&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Public ReadOnly Property ExecutableDate(Optional ByVal strPath As String = "") As Date Implements IAssemblyInfo.ExecutableDate&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim rc As Date = Nothing&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If strPath = "" Then   'If parameter wasn't specified,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rc = IO.File.GetCreationTime(Application.ExecutablePath)   'Then get the Executable's info&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Else                   'If parameter (file path) WAS specified,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rc = IO.File.GetCreationTime(strPath)                      'Then get the path's info&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End If&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Catch ex As Exception&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return rc&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End Property&lt;br /&gt;&lt;br /&gt;End Class&lt;br /&gt;&lt;br /&gt;This is alot of information.  I welcome questions and comments about it and can hopefully refine it if it's too confusing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-6046109288333635512?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nP7P0_-o-uituIMNbgMNNQdvonE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nP7P0_-o-uituIMNbgMNNQdvonE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nP7P0_-o-uituIMNbgMNNQdvonE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nP7P0_-o-uituIMNbgMNNQdvonE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/Xq2c61hsZ1c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/6046109288333635512/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=6046109288333635512" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/6046109288333635512?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/6046109288333635512?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/Xq2c61hsZ1c/interfaces-and-about.html" title="Interfaces and About" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2008/08/interfaces-and-about.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cHSHsyfSp7ImA9WxdaEEQ.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-7819849745642750445</id><published>2008-08-18T16:44:00.003-04:00</published><updated>2008-08-18T17:30:39.595-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-18T17:30:39.595-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Jason Cohen" /><category scheme="http://www.blogger.com/atom/ns#" term="Eric Brown" /><category scheme="http://www.blogger.com/atom/ns#" term="Code Review" /><category scheme="http://www.blogger.com/atom/ns#" term="Best Kept Secrets of Peer Code Review" /><title>Get This Book!</title><content type="html">This isn't a spam message, I swear it!  This is a whole-hearted recommendation of Jason Cohen's (et. al.) &lt;u&gt;Best Kept Secrets of Peer Code Review: Modern Approach. Practical Advice.&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;I received this book at my office today.  I've had the opportunity to read the first few chapters and--while a bit light-weight--this is an awesome argument for improving our best practices of coding.  This is at the heart and soul of this blog...&lt;em&gt;What is the best, most efficient way to do what I need to get done?&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;One of my favorite sections so far is in &lt;em&gt;Chapter 2: Resistance to Code Review (Written by Eric Brown)&lt;/em&gt;:&lt;br /&gt;&lt;block&gt;"True programmers have a sense of streaming creativity as they write code to solve problems or create innovations.  This stream has a continuity that ebbs as you have to pause to answer the phone or talk with the colleague who just walked into your office, and flows after you have solved a particularly difficult obstacle or feel the surge of caffeine from the coffee you just finished.  But call a department meeting or schedule a code review and the flow stops outright."&lt;/block&gt;&lt;br /&gt;&lt;br /&gt;Truer words... eh?&lt;br /&gt;&lt;br /&gt;So, like I said in the frigging title of this blog:  &lt;a href="http://smartbear.com/codecollab-code-review-book.php"&gt;Get This Book!&lt;/a&gt;  It's free and won't hurt you.  And while you're waiting for it to arrive, check out their whitepaper on "Best Practices for Peer Code Review."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-7819849745642750445?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/63MTsAOMDZDgq4a5G_n3GMWSzqA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/63MTsAOMDZDgq4a5G_n3GMWSzqA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/63MTsAOMDZDgq4a5G_n3GMWSzqA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/63MTsAOMDZDgq4a5G_n3GMWSzqA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/63miPgXAfoY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/7819849745642750445/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=7819849745642750445" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/7819849745642750445?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/7819849745642750445?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/63miPgXAfoY/get-this-book.html" title="Get This Book!" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2008/08/get-this-book.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AERXk-fSp7ImA9WxdaEEU.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-211544593941829389</id><published>2008-08-18T13:30:00.003-04:00</published><updated>2008-08-18T13:48:24.755-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-18T13:48:24.755-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Insert" /><category scheme="http://www.blogger.com/atom/ns#" term="Attachments" /><category scheme="http://www.blogger.com/atom/ns#" term="SalesLogix" /><category scheme="http://www.blogger.com/atom/ns#" term="Sage" /><title>SalesLogix Attachments</title><content type="html">I feel good today!  I released someone's pain and burden.&lt;br /&gt;&lt;br /&gt;Read the &lt;a href="http://www.slxdeveloper.com/forum.aspx?forumid=3002&amp;postid=18155#18155"&gt;grizzly details here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-211544593941829389?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6qNizDO9vXdSisvf5L3x_vgozHo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6qNizDO9vXdSisvf5L3x_vgozHo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6qNizDO9vXdSisvf5L3x_vgozHo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6qNizDO9vXdSisvf5L3x_vgozHo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/NRV5wOpfA4k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/211544593941829389/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=211544593941829389" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/211544593941829389?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/211544593941829389?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/NRV5wOpfA4k/saleslogix-attachments.html" title="SalesLogix Attachments" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2008/08/saleslogix-attachments.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AMR3w6fyp7ImA9WxdaEEU.&quot;"><id>tag:blogger.com,1999:blog-6418827604778313797.post-4908402508805490923</id><published>2008-08-06T12:34:00.004-04:00</published><updated>2008-08-18T13:49:46.217-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-18T13:49:46.217-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Natural Log" /><category scheme="http://www.blogger.com/atom/ns#" term="ln" /><category scheme="http://www.blogger.com/atom/ns#" term="Natural Logarithm" /><title>Natural Logarithms</title><content type="html">It's an interesting situation that the Google Search Result for "vb.net natural logarithm" does not have a straight-forward formula for determining the Natural Log of a number.&lt;br /&gt;&lt;br /&gt;I spent a few minutes with a statistician and worked this out:&lt;br /&gt;&lt;br /&gt;Public Function NaturalLog(ByVal dblVariable As Double) As Double&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return 2.303 * Math.Log10(dblVariable)&lt;br /&gt;End Function&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6418827604778313797-4908402508805490923?l=taf-tech.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/o-G75U394nomoY_skjeBdyBgNZA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o-G75U394nomoY_skjeBdyBgNZA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/o-G75U394nomoY_skjeBdyBgNZA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o-G75U394nomoY_skjeBdyBgNZA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TafsTechTreasuresSolutions/~4/plCLAovno30" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://taf-tech.blogspot.com/feeds/4908402508805490923/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6418827604778313797&amp;postID=4908402508805490923" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/4908402508805490923?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6418827604778313797/posts/default/4908402508805490923?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/TafsTechTreasuresSolutions/~3/plCLAovno30/natural-logarithms.html" title="Natural Logarithms" /><author><name>Taf Greenstreet</name><uri>http://www.blogger.com/profile/11133148345925591230</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://taf-tech.blogspot.com/2008/08/natural-logarithms.html</feedburner:origLink></entry></feed>

