<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>A Developer's Expedition</title>
        <link>http://geekswithblogs.net/kenl/Default.aspx</link>
        <description>www.kenl.net</description>
        <language>en-US</language>
        <copyright>Ken Lovely, MCSE, MCDBA</copyright>
        <managingEditor>ken.lovely@kenl.net</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <image>
            <title>A Developer's Expedition</title>
            <url>http://geekswithblogs.net/images/RSS2Image.gif</url>
            <link>http://geekswithblogs.net/kenl/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Philly Code camp 2008.2 success!!!</title>
            <link>http://geekswithblogs.net/kenl/archive/2008/05/18/philly-code-camp-2008.2-success.aspx</link>
            <description>&lt;div style="MARGIN: 0in 0in 10pt"&gt;The Philly Dot Net user group pulled off another successful code camp. This time around over 350 people showed up to get their free training on a variety of subjects. I would like to thank everyone involved and all participants for making this such a success! I would also like to thank everyone that attended my session on Developing the Blueprint for Enterprise Architecture. You guys had some good questions!!! I hope you liked the exercises and I hope you gained more insight to the process of designing data architectures.&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;a href="http://www.kenl.net/Developing_the_Blueprint_for_Enterprise_Data_Architecture.pdf"&gt;&lt;font color="#0000ff"&gt;http://www.kenl.net/Developing_the_Blueprint_for_Enterprise_Data_Architecture.pdf&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122231"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122231" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/kenl/aggbug/122231.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ken Lovely, MCSE, MCDBA</dc:creator>
            <guid>http://geekswithblogs.net/kenl/archive/2008/05/18/philly-code-camp-2008.2-success.aspx</guid>
            <pubDate>Sun, 18 May 2008 16:53:05 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/kenl/comments/122231.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/kenl/archive/2008/05/18/philly-code-camp-2008.2-success.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/kenl/comments/commentRss/122231.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/kenl/services/trackbacks/122231.aspx</trackback:ping>
        </item>
        <item>
            <title>Code Camp 2008</title>
            <link>http://geekswithblogs.net/kenl/archive/2008/05/09/code-camp-2008.aspx</link>
            <description>&lt;p&gt;Our www.Phillydotnet.org second installment of the 2008 Code Camp series will be held at the DeVry University campus in Fort Washington, PA on Saturday, May 17 from 8:30-5:00. &lt;!--&lt;B&gt;Please register&lt;/B&gt; on our 
&lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=677"&gt;web site&lt;/a&gt;.--&gt;Detailed directions are on the DeVry &lt;font face="Arial" size="2"&gt;&lt;a temp_href="http://www.devry.edu/locations/campuses/loc_ftwashingtoncampus.jsp" href="http://www.devry.edu/locations/campuses/loc_ftwashingtoncampus.jsp"&gt;web site&lt;/a&gt;&lt;/font&gt;. &lt;!--Sorry, but we are all &lt;span style="color:red"&gt;&lt;strong&gt;sold out&lt;/strong&gt;&lt;/span&gt;. 
There will be another Code Camp in May.--&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Lots of code, just say no to slides! &lt;/li&gt;
    &lt;li&gt;8+ hours &lt;/li&gt;
    &lt;li&gt;40+ sessions (8:30, 10:00, 12:30, 2:00, 3:30) &lt;/li&gt;
    &lt;li&gt;8 tracks + lunchtime entertainment &lt;/li&gt;
    &lt;li&gt;500 seats with tables (laptops welcome) &lt;/li&gt;
    &lt;li&gt;Free breakfast, lunch, and afternoon snack (expanded menu!) &lt;/li&gt;
    &lt;li&gt;Raffles and prizes at 5:00 &lt;/li&gt;
    &lt;li&gt;Easy parking &lt;/li&gt;
    &lt;li&gt;Limited wireless &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span id="dnn_ctr1930_HtmlModule_HtmlHolder"&gt;All of this is made possible by our Gold partners (&lt;strong&gt;HostMySite, MicroEndeavors, Perficient, RDA Corporation, RJB Technical Consulting&lt;/strong&gt;), Silver partners (&lt;strong&gt;Neudesic, Telerik, Ted Pattison Group, Culminis&lt;/strong&gt;) and our Platinum site sponsors (&lt;strong&gt;DeVry University, Microsoft&lt;/strong&gt;).&lt;br /&gt;
&lt;br /&gt;
Here is the tentative agenda, room assignments and times are subject to change:&lt;/span&gt; &lt;/p&gt;
&lt;div&gt;&lt;strong&gt;8:00&lt;/strong&gt; Registration, continental breakfast &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;a target="_blank" href="http://alt.net/"&gt;Alt.NET&lt;/a&gt; - 141&lt;/strong&gt; &lt;br /&gt;
8:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=707"&gt;Brian Donahue&lt;/a&gt; - Behavior Driven Development&lt;br /&gt;
10:00 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=709"&gt;Steve Eichert&lt;/a&gt; - IronRuby&lt;br /&gt;
12:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=716"&gt;David Laribee&lt;/a&gt; - Strategic Domain-Driven Design&lt;br /&gt;
2:00 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=722"&gt;Sebastian Meine&lt;/a&gt; - TDD w/SQL&lt;br /&gt;
3:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=724"&gt;Erik Peterson&lt;/a&gt; - Model-View-Presenter w/WebForms&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Architecture - 104&lt;/strong&gt; &lt;br /&gt;
8:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=734"&gt;Max Zilberman&lt;/a&gt; - Using Enterprise Library 3.1 and What is Coming in Ent Lib 4.0&lt;br /&gt;
10:00 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=718"&gt;Ken Lovely&lt;/a&gt; - Developing the Blueprint for Enterprise Data Architecture&lt;br /&gt;
12:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=710"&gt;Sam Gentile&lt;/a&gt; - Advanced WCF: Asynchronous Messaging and Event-Driven Architectures&lt;br /&gt;
2:00 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=726"&gt;Mitch Ruebush&lt;/a&gt; - Architect's Toolkit: What an Architect Needs to Know and Do&lt;br /&gt;
3:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=697"&gt;Steven Andrews&lt;/a&gt; - Automation with MSBuild 3.5 and Team Build 2008&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Business Intelligence - 109&lt;/strong&gt; &lt;br /&gt;
8:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=725"&gt;Jim Pletscher&lt;/a&gt; - Getting Immediate Value from PerformancePoint Server 2007&lt;br /&gt;
10:00 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=727"&gt;Mark Scott&lt;/a&gt; - What's new in Analysis Services for SQL Server 2008&lt;br /&gt;
12:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=730"&gt;Joe Toscano&lt;/a&gt; - Using the PerformancePoint Server 2007 Planning Components to Build Budget/Forecasting&lt;br /&gt;
2:00 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=717"&gt;Andy Leonard&lt;/a&gt; - Change Data Capture, Incremental ETL, and SSIS 2008&lt;br /&gt;
3:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=720"&gt;Steve Mann&lt;/a&gt; - PerformancePoint Monitoring - A Behind the Scenes Look&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;MIX - 111&lt;/strong&gt; &lt;br /&gt;
8:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=704"&gt;Jess Chadwick&lt;/a&gt; - The &lt;a target="_blank" href="http://asp.net/"&gt;ASP.NET&lt;/a&gt; MVC Framework&lt;br /&gt;
10:00 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=706"&gt;Dani Diaz&lt;/a&gt; - Building Rich Internet Applications Using Microsoft Silverlight&lt;br /&gt;
12:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=728"&gt;Todd Snyder&lt;/a&gt; - UI Frameworks &amp;amp; Patterns: Applying Patterns to Build Applications&lt;br /&gt;
2:00 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=733"&gt;Bill Wolff&lt;/a&gt; - Silverlight Design for Developers&lt;br /&gt;
3:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=735"&gt;Milan Negovan&lt;/a&gt; - Usability&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Framework - 105&lt;/strong&gt; &lt;br /&gt;
8:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=699"&gt;John Baird&lt;/a&gt; - Winforms to WPF: Making the Switch&lt;br /&gt;
10:00 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=711"&gt;Kevin Goff&lt;/a&gt; - Crash Course on Windows Communication Foundation&lt;br /&gt;
12:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=696"&gt;Edwin Ames&lt;/a&gt; - Dot Net Basics &lt;br /&gt;
2:00 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=731"&gt;Chuck Urwiler&lt;/a&gt; - Using LINQ to SQL&lt;br /&gt;
3:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=698"&gt;Rachel Appel&lt;/a&gt; - Using &lt;a target="_blank" href="http://asp.net/"&gt;ASP.NET&lt;/a&gt; Dynamic Data in Web Applications&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;SharePoint - 113&lt;/strong&gt; &lt;br /&gt;
8:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=721"&gt;David Mann&lt;/a&gt; - Making SP Development Quick and Painless using Tools&lt;br /&gt;
10:00 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=713"&gt;Jim Kane&lt;/a&gt; - Putting SharePoint to Work - Enabling Communities of Users&lt;br /&gt;
12:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=700"&gt;Gary Blatt&lt;/a&gt; - Integrating Legacy Apps with SharePoint&lt;br /&gt;
2:00 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=729"&gt;Tony Testa&lt;/a&gt; - The SharePoint front-end is for wimps, real men use the SharePoint API's&lt;br /&gt;
3:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=701"&gt;Gary Blatt&lt;/a&gt; - Using Features to Modify the SharePoint Environment &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;SQL Database - 108&lt;/strong&gt; &lt;br /&gt;
8:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=708"&gt;Sharon Dooley&lt;/a&gt; - New SQL 2008 DBA Toys&lt;br /&gt;
10:00 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=719"&gt;Josh Lynn&lt;/a&gt; - T-SQL Development Techniques for Performance&lt;br /&gt;
12:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=732"&gt;Mike Welsh&lt;/a&gt; - Cursors vs. Set Logic: Alternatives to Cursors&lt;br /&gt;
2:00 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=712"&gt;Dan Hartshorn&lt;/a&gt; - What DBAs need to know about BI&lt;br /&gt;
3:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=702"&gt;Greg Brozovich&lt;/a&gt; - SQL Server Physical Database Design Strategies for Performance&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Toolbox - 106&lt;/strong&gt; &lt;br /&gt;
8:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=723"&gt;Al Nyveldt&lt;/a&gt; - Learning the &lt;a target="_blank" href="http://asp.net/"&gt;ASP.NET&lt;/a&gt; provider model with &lt;a target="_blank" href="http://blogengine.net/"&gt;BlogEngine.NET&lt;/a&gt;&lt;br /&gt;
10:00 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=703"&gt;Jonathan Newell&lt;/a&gt; - Source Code Analysis (SCA)&lt;br /&gt;
12:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=715"&gt;Travis Laborde&lt;/a&gt; - SRP/DI/IOC: Don't Leave Sub Main Without Them!&lt;br /&gt;
2:00 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=705"&gt;Don Demsak&lt;/a&gt; - Introduction to the Web Service Software Factory: Modeling Edition&lt;br /&gt;
3:30 &lt;a href="http://www.phillydotnet.org/Default.aspx?tabid=714"&gt;Rob Keiser&lt;/a&gt; - &lt;a target="_blank" href="http://ado.net/"&gt;ADO.NET&lt;/a&gt; Data Services &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;11:30&lt;/strong&gt; Social networking in the break room, Primo hoagies, drinks and snacks &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;5:00&lt;/strong&gt; evals, lots of raffle prizes&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122033"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122033" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/kenl/aggbug/122033.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ken Lovely, MCSE, MCDBA</dc:creator>
            <guid>http://geekswithblogs.net/kenl/archive/2008/05/09/code-camp-2008.aspx</guid>
            <pubDate>Sat, 10 May 2008 00:33:36 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/kenl/comments/122033.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/kenl/archive/2008/05/09/code-camp-2008.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/kenl/comments/commentRss/122033.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/kenl/services/trackbacks/122033.aspx</trackback:ping>
        </item>
        <item>
            <title>SQL 2005 Schema change auditing </title>
            <link>http://geekswithblogs.net/kenl/archive/2008/05/01/sql-2005-schema-change-auditing.aspx</link>
            <description>&lt;p&gt;&lt;font face="Arial"&gt;You have to love the xml type in SQL Server 2005.  Here's a simple way I found to make use of it: You can audit all the object/schema changes to the database with a simple database-level trigger.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;First, create a very simple table (inside a schema I name 'Audit'): &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;CREATE TABLE [Audit].[Objects](&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;[EventID] [int] IDENTITY(1,1) NOT NULL,&lt;br /&gt;
[EventData] [xml] NULL,&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;PRIMARY KEY CLUSTERED &lt;br /&gt;
(&lt;br /&gt;
   [EventID] ASC&lt;br /&gt;
) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]&lt;br /&gt;
) ON [PRIMARY]&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Then, the trigger:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;CREATE TRIGGER [Trig_AuditObjects]&lt;br /&gt;
ON DATABASE&lt;br /&gt;
FOR DDL_DATABASE_LEVEL_EVENTS &lt;br /&gt;
AS&lt;br /&gt;
INSERT INTO Audit.Objects(EventData)&lt;br /&gt;
SELECT EVENTDATA()&lt;br /&gt;
GO&lt;br /&gt;
ENABLE TRIGGER [Trig_AuditObjects] ON DATABASE&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;That's it.. now get a nice neat little xml entry in my table every time a DDL database level event happens;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&amp;lt;EVENT_INSTANCE&amp;gt;&lt;br /&gt;
    &amp;lt;EventType&amp;gt;ALTER_TABLE&amp;lt;/EventType&amp;gt;&lt;br /&gt;
    &amp;lt;PostTime&amp;gt;2008-05-01T18:06:01.722&amp;lt;/PostTime&amp;gt;&lt;br /&gt;
    &amp;lt;SPID&amp;gt;55&amp;lt;/SPID&amp;gt;&lt;br /&gt;
    &amp;lt;ServerName&amp;gt;TestServ&amp;lt;/ServerName&amp;gt;&lt;br /&gt;
    &amp;lt;LoginName&amp;gt;domain\username&amp;lt;/LoginName&amp;gt;&lt;br /&gt;
    &amp;lt;UserName&amp;gt;dbo&amp;lt;/UserName&amp;gt;&lt;br /&gt;
    &amp;lt;DatabaseName&amp;gt;Test2&amp;lt;/DatabaseName&amp;gt;&lt;br /&gt;
    &amp;lt;SchemaName&amp;gt;dbo&amp;lt;/SchemaName&amp;gt;&lt;br /&gt;
    &amp;lt;ObjectName&amp;gt;Table1&amp;lt;/ObjectName&amp;gt;&lt;br /&gt;
    &amp;lt;ObjectType&amp;gt;TABLE&amp;lt;/ObjectType&amp;gt;&lt;br /&gt;
    &amp;lt;TSQLCommand&amp;gt;&lt;br /&gt;
        &amp;lt;SetOptions ANSI_NULLS="ON" ANSI_NULL_DEFAULT="ON" ANSI_PADDING="ON"      QUOTED_IDENTIFIER="ON" ENCRYPTED="FALSE" /&amp;gt;&lt;br /&gt;
        &amp;lt;CommandText&amp;gt;ALTER TABLE dbo.Table1&lt;br /&gt;
    DROP COLUMN testremove&lt;br /&gt;
       &amp;lt;/CommandText&amp;gt;&lt;br /&gt;
  &amp;lt;/TSQLCommand&amp;gt;&lt;br /&gt;
&amp;lt;/EVENT_INSTANCE&amp;gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;The EVENTDATA() function is provided by SQL Server inside a DDL trigger and provides all the data you see above as an xml document.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Having this during development is like a poor man's source control for schema changes.  It could come in very handy for forensic purposes when diagnosing post-rollout issues or accidental schema changes.  &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;I wish I could take credit for developing this cool little find. I found it surfing some time ago. I copied and never got around to testing it. I was pretty happy when I did. Thanks to the unknown coder of this one!&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121840"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121840" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/kenl/aggbug/121840.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ken Lovely, MCSE, MCDBA</dc:creator>
            <guid>http://geekswithblogs.net/kenl/archive/2008/05/01/sql-2005-schema-change-auditing.aspx</guid>
            <pubDate>Fri, 02 May 2008 01:33:52 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/kenl/comments/121840.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/kenl/archive/2008/05/01/sql-2005-schema-change-auditing.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/kenl/comments/commentRss/121840.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/kenl/services/trackbacks/121840.aspx</trackback:ping>
        </item>
        <item>
            <title>What is Service?</title>
            <link>http://geekswithblogs.net/kenl/archive/2008/04/04/what-is-service.aspx</link>
            <description>&lt;font size="2"&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;font size="3"&gt;The definition of service is ‘an act of helpful activity’. We Information System workers are in the service industry. We supply a service; we design, we develop, we program and we maintain computer and networking systems. Since the very core of our duties is supplying a service why is it so many people in our industry seemingly know nothing about supplying good customer service? Why is it instead of helping our users/clients so many IT people act like they are being bothered?&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;font size="3"&gt;If you brought your car in for repair and the service manager said, yeah just leave the keys, I will get to your car when I’m good and ready. Or if you went out to dinner and the server said, yeah you food on the counter, but I have to go take my break first – would you take it? Would you just sit there and allow someone to treat you like this? No you would not!!! &lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;font size="3"&gt;What makes us think users should be any different than we are? Users are consumers of our goods and services. Users are our customers and our clients. Without them we would not have a job. &lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;font size="3"&gt;Dale Carnegie said: There is only one way... to get anybody to do anything. And that is by making the other person want to do it. If we take this simple idea and use it next time we are thinking “this guy’s an idiot” as we are explaining to him how to click on the icon, both that user and ourselves will have a better experience. &lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;font size="3"&gt;There is only one road to success – the positive road. All of us should check our negativity at the door and start treating our users, our customers and everyone we work with; with outstanding positive attitude. &lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;font size="3"&gt;Let’s together put the service back in customer service!&lt;/font&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;/font&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121041"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121041" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/kenl/aggbug/121041.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ken Lovely, MCSE, MCDBA</dc:creator>
            <guid>http://geekswithblogs.net/kenl/archive/2008/04/04/what-is-service.aspx</guid>
            <pubDate>Fri, 04 Apr 2008 16:13:15 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/kenl/comments/121041.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/kenl/archive/2008/04/04/what-is-service.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/kenl/comments/commentRss/121041.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/kenl/services/trackbacks/121041.aspx</trackback:ping>
        </item>
        <item>
            <title>Software Development Life Cycle</title>
            <link>http://geekswithblogs.net/kenl/archive/2008/03/27/software-development-life-cycle.aspx</link>
            <description>&lt;div style="MARGIN: 0in 0in 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;SDLC – something everyone one of us System Architects/Developers talk about or at least should be talking about.  From my reading and discussion with others there are a lot of different idealisms. For sure everyone seems to agree the starting point is conceptualization. But in actuality where does the concept come from? 95% of the things I develop are business needs. Thus for me the idea is derived from a need. Generally someone comes to me and says we need a system that can do this. Then through a series of meetings generally the requirements, costs, benefit analysis and detailed specifications are defined. Somewhere in here is proof of concept, then development, testing, training and finally maintenance. &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;The true Software Development Life Cycle follows a designed track with predefined objectives, steps and results. Software developers like to think they are in control of SDLC but in reality they are rarely best suited for the job. A project manager is better suited for managing the SDLC. &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;As I said most everyone I talked with agreed that Concept is the first step. The next step is generally proof of concept for some and requirements/business-analysis for others. We all work for business. The money from business is what makes the world go around. Therefore from a business standpoint requirements, costs and benefit analysis is the next step. But from a development standpoint proof of concept comes next. What comes next for you?&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;Before the architect can design and before the developer can develop, detailed specifications are needed. Many people think this should come before the cost analysis. How can any projections be made without knowing the specs?&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;Now the preliminaries are out of the way it is time for the development team to take over. As we all know this part of the process is now becoming a giant process in itself. There are so many ways to design, develop, test and deliver that one could go crazy!&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;My point with SDLC is YOU – the developer/architect. You know that you can deliver the product, you know the technologies that are needed and you know how much time it is going to take you to get it production ready. There for YOU need to play a larger role in the first few steps of the development life cycle. OR do you? &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;A good team would have someone that knows how to get all the information you need to know, all the things you would ask and suggest and be able to interact with the client in a better method than you would. &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;My SDLC suggestion:&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;Client:&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;                Business need / idea&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;Technical Marketing Team:&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;                Meet with client; define needs, specs, cost/business analysis&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;Architect/Development Team:&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;                Provide proof of concept&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;                Design/program/test&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;Technical Marketing Team:&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;                Continue to meet with client&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;                Training&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;System Administrators&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;                Maintenance&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;It is all about cost of ownership. The development team is probably the highest paid in the group of teams. It makes since to keep them doing what they do best. Technical marketers are best dealing with clients issues. They are people persons. Although most of us Architects and developers are capable of dealing with client issues, we are better suited designing and developing the product.&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120791"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120791" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/kenl/aggbug/120791.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ken Lovely, MCSE, MCDBA</dc:creator>
            <guid>http://geekswithblogs.net/kenl/archive/2008/03/27/software-development-life-cycle.aspx</guid>
            <pubDate>Thu, 27 Mar 2008 12:24:21 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/kenl/comments/120791.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/kenl/archive/2008/03/27/software-development-life-cycle.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/kenl/comments/commentRss/120791.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/kenl/services/trackbacks/120791.aspx</trackback:ping>
        </item>
        <item>
            <title>Another GREAT Philly.net UG meet!!!</title>
            <link>http://geekswithblogs.net/kenl/archive/2008/03/20/another-great-philly.net-ug-meet.aspx</link>
            <description>&lt;div style="MARGIN: 0in 0in 10pt"&gt;The meeting started out with our own Marc Ziss telling us everything he learned at the MIX conference. He had video’s, examples and a lot of stories. The one thing that really stood out in my mind was what Microsoft and NBC are doing for the 2008 Olympics. You just wait! Never before has any company taken on such an undertaking! MS is going to supply 22,000 hours of streaming video via Silverlight. Viewers will be able to watch live streams, taped events, be able to pause during an event and come back, be able to jump around through different events and best of all it is FREE! This is the event that will change our lives. We developers better start learning SilverLight because once the CEO’s see what is available, they WILL demand it!&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;Our main speaker of the night was supplied by INETA. Ambrose Little gave a great discussion on User Experience; aka UX. Ambrose works for Infragistics. He talked about the development team, the process and how the end user feels about your software. One of the questions he asked was about how many people program things that work but the heck with how well the users like it. Surprisingly a couple of people said, as long as it works the user’s have to deal with it. &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;The idea behind UX is why would the end user work with your software if it is awkward or difficult to work with what makes you think the users are going to keep using it. In today’s business world there are thousands of us all working with the same toolset, getting the same ideas and programming basically the same functionality. So you need to stand out in the crowd! One way of doing that is develop with the user experience in mind. &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;One of the users asked where you should start; should we start with data design or should we start with the UI. Obviously there is no clear answer. Most of us do both, we make the data match our UI and we make the UI match our data. &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;The UX idealism is;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt 0.5in"&gt;User centered design&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt 0.5in"&gt;Ux friendly methodology&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt 0.5in"&gt;Personas&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt 0.5in"&gt;Usability testing&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt 0.5in"&gt;Patterns&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 0.5in"&gt;Refactoring&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;Add free Pizza, the ability to talk with other top developers and of course talk with my buddies from the Mothership (Microsoft) and this was just another great meeting at Philly.net (&lt;a href="http://www.phillydotnet.org"&gt;www.phillydotnet.org&lt;/a&gt;).&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;Don't forget our next Code Camp is May 17, 2008 - 450+ geeks, 50+ sessions and lots knowledge sharing&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120678"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120678" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/kenl/aggbug/120678.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ken Lovely, MCSE, MCDBA</dc:creator>
            <guid>http://geekswithblogs.net/kenl/archive/2008/03/20/another-great-philly.net-ug-meet.aspx</guid>
            <pubDate>Fri, 21 Mar 2008 01:40:43 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/kenl/comments/120678.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/kenl/archive/2008/03/20/another-great-philly.net-ug-meet.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/kenl/comments/commentRss/120678.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/kenl/services/trackbacks/120678.aspx</trackback:ping>
        </item>
        <item>
            <title>I've gone Green</title>
            <link>http://geekswithblogs.net/kenl/archive/2008/03/16/ive-gone-green.aspx</link>
            <description>&lt;p&gt;I have been a proud SUV and 4x4 driver for the past 20 years or so. Most recently I have had 2 Durango's and a 4x4 pickup. Now that gas is $3.30 a gallon and the news says it is only going to go up. I decided I need to change my ways. But like an old country boy, I still have one Durango - A man has to have a truck for hauling stuff...&lt;/p&gt;
&lt;p&gt;My new mode of transportation is a 2008 Toyota Prius. In the couple of days I have had it I have been averaging 53 miles to the gallon; a BIG difference from my Durango with it's13 miles to the gallon. I encourage all of you to take a look at your vehicle and seriously think about how much it is costing you and our environment!.&lt;/p&gt;
&lt;p&gt;Here are some numbers;&lt;/p&gt;
&lt;p&gt;Current Gas price - $3.30 a gallon  times 15,000 average miles a year at 13 miles per gallon - $3808 a year in just gas!&lt;/p&gt;
&lt;p&gt;This summer gas price is predicted to be $4.25 a gallon; which is $4904 a year. &lt;/p&gt;
&lt;p&gt;And the big one!&lt;/p&gt;
&lt;p&gt;In 1979 the polar ice caps were 20% larger than they are now. &lt;font face="Arial"&gt;Scientists estimate that mean global temperatures have increased by 0.5 to 1.0 °F (0.3 to 0.6 °C) in the last 100 years. Basically this tells us that man has had the biggest impact on the Earth. 1900 was the start of the industrial revolution. We need to make this turn of the century become the global revolution; where everyone does their part to ensure our Earth has a future worth living!&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Develop Green!&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120583"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120583" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/kenl/aggbug/120583.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ken Lovely, MCSE, MCDBA</dc:creator>
            <guid>http://geekswithblogs.net/kenl/archive/2008/03/16/ive-gone-green.aspx</guid>
            <pubDate>Mon, 17 Mar 2008 00:48:46 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/kenl/comments/120583.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/kenl/archive/2008/03/16/ive-gone-green.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/kenl/comments/commentRss/120583.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/kenl/services/trackbacks/120583.aspx</trackback:ping>
        </item>
        <item>
            <title>Images, Zip, FTP</title>
            <link>http://geekswithblogs.net/kenl/archive/2008/02/25/images-zip-ftp.aspx</link>
            <description>&lt;div style="MARGIN: 0in 0in 10pt"&gt;I’ve been working on a project that was supposed to be a pretty quick windows service that simply extracted some images and matched up those images in an index file. We (the company I work for) are doing this for a client of ours to aide them in their billing process. &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;We have an application that scans checks and payment stubs. It’s my job to create something that can extract the images from the scanned documents and supply a all the payment information associated with that check/stub. The company that we are doing this for made changes to the specifications every meeting we had. We started back in November, Now I am ready to deliver the final product. Oh yeah, we had a change today - &lt;span&gt;J&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;There are many interesting things with this application. The first thing I had figure out was how to parse through a comma delimited file to get the image name, and the accounting/payment info. My text reader was fairly simply; I just read one line at a time, putting each comma-ed item in an array.&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[][] Dissasemble(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; input, &lt;span style="COLOR: blue"&gt;char&lt;/span&gt;[] seperator)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            &lt;span style="COLOR: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&amp;gt; rows = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&amp;gt;(input.Split(&lt;span style="COLOR: #a31515"&gt;'\n'&lt;/span&gt;));&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            &lt;span style="COLOR: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&amp;gt;&amp;gt; xmlItems = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&amp;gt;&amp;gt;(rows.Count);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            &lt;span style="COLOR: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[]&amp;gt; result = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[]&amp;gt;(rows.Count);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            &lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; str &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; rows)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (!&lt;span style="COLOR: #2b91af"&gt;String&lt;/span&gt;.IsNullOrEmpty(str))&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    xmlItems.Add(&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&amp;gt;(str.Split(seperator)));&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            &lt;span style="COLOR: green"&gt;// figure out how many items we should expect on each line&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; count = xmlItems[0].Count;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            &lt;span style="COLOR: blue"&gt;for&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; i = 0; i &amp;lt; rows.Count; i++)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (count != xmlItems[i].Count)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: blue"&gt;throw&lt;/span&gt; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ArgumentException&lt;/span&gt;(&lt;span style="COLOR: #a31515"&gt;"input is not correctly formatted -- all rows should have the same number of items"&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                result.Add(xmlItems[i].ToArray());&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; result.ToArray();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;One of the items in the string array is the name of the image. Working with images was much easier than I anticipated. Some of the images needed to return the front side of the check, some needed to send both the front and the back. Luckily the application that scans and stores the images, has a web interface to extract the image.&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;First I have to create the uri line;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; LINE-HEIGHT: 115%"&gt;string&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%"&gt; webreq = &lt;span style="COLOR: #a31515"&gt;"http://"&lt;/span&gt; + Properties.&lt;span style="COLOR: #2b91af"&gt;Settings&lt;/span&gt;.Default.ImageServerIPAddress + &lt;span style="COLOR: #a31515"&gt;"/imgreq/imgreqis.dll?IC&amp;amp;Date="&lt;/span&gt; + &lt;span style="COLOR: #2b91af"&gt;MainClass&lt;/span&gt;.fixdate(ItemDate, &lt;span style="COLOR: #a31515"&gt;"reg"&lt;/span&gt;) + &lt;span style="COLOR: #a31515"&gt;"&amp;amp;Item="&lt;/span&gt; + ItemID + &lt;span style="COLOR: #a31515"&gt;"side="&lt;/span&gt; + Side;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;Once I have the line built, I read and write to the html file stream. The interesting thing I found out is the image application returns a png. But the client wants a tiff. Converting a png to a tiff as simple!&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;WriteBytesToFile(Properties.&lt;span style="COLOR: #2b91af"&gt;Settings&lt;/span&gt;.Default.Images + &lt;span style="COLOR: #a31515"&gt;@"\"&lt;/span&gt; + ItemID + &lt;span style="COLOR: #a31515"&gt;".png"&lt;/span&gt;, GetBytesFromUrl(webreq));&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    img = &lt;span style="COLOR: #2b91af"&gt;Image&lt;/span&gt;.FromFile(Properties.&lt;span style="COLOR: #2b91af"&gt;Settings&lt;/span&gt;.Default.Images + &lt;span style="COLOR: #a31515"&gt;@"\"&lt;/span&gt; + ItemID + &lt;span style="COLOR: #a31515"&gt;".png"&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; fullname = Properties.&lt;span style="COLOR: #2b91af"&gt;Settings&lt;/span&gt;.Default.Images + &lt;span style="COLOR: #a31515"&gt;@"\tempimages"&lt;/span&gt; + &lt;span style="COLOR: #a31515"&gt;@"\IMG"&lt;/span&gt; + ItemID + Side + &lt;span style="COLOR: #a31515"&gt;".tif"&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    img.Save(fullname, &lt;span style="COLOR: #2b91af"&gt;ImageFormat&lt;/span&gt;.Tiff);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%"&gt;                    img.Dispose();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;The WriteBytesToFile method:&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #2b91af"&gt;FileStream&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt; fs = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;FileStream&lt;/span&gt;(fileName, &lt;span style="COLOR: #2b91af"&gt;FileMode&lt;/span&gt;.Create);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            &lt;span style="COLOR: #2b91af"&gt;BinaryWriter&lt;/span&gt; w = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;BinaryWriter&lt;/span&gt;(fs);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            &lt;span style="COLOR: blue"&gt;try&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                w.Write(content);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            &lt;span style="COLOR: blue"&gt;finally&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                fs.Close();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                w.Close();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%"&gt;            }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;The next thing the client wanted was all the images in a zip file. Unless you use one of the paid or free zip classes, C# and zip is difficult but not impossible. To create an empty zip file;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue"&gt;byte&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;[] emptyzip = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: blue"&gt;byte&lt;/span&gt;[] { 80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                &lt;span style="COLOR: #2b91af"&gt;FileStream&lt;/span&gt; fs1 = &lt;span style="COLOR: #2b91af"&gt;File&lt;/span&gt;.Create(Properties.&lt;span style="COLOR: #2b91af"&gt;Settings&lt;/span&gt;.Default.FileSaveLocation + &lt;span style="COLOR: #a31515"&gt;@"\"&lt;/span&gt; + zipname());&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                fs1.Write(emptyzip, 0, emptyzip.Length);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                fs1.Flush();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                fs1.Close();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%"&gt;                fs1 = &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;To copy the images to the zip file I had to use shell commands;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Shell32.&lt;span style="COLOR: #2b91af"&gt;ShellClass&lt;/span&gt; sc = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; Shell32.&lt;span style="COLOR: #2b91af"&gt;ShellClass&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                Shell32.&lt;span style="COLOR: #2b91af"&gt;Folder&lt;/span&gt; SrcFlder = sc.NameSpace(Properties.&lt;span style="COLOR: #2b91af"&gt;Settings&lt;/span&gt;.Default.Images + &lt;span style="COLOR: #a31515"&gt;@"\tempimages"&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                Shell32.&lt;span style="COLOR: #2b91af"&gt;FolderItems&lt;/span&gt; fi = SrcFlder.Items(); &lt;span style="COLOR: green"&gt;//..Item(OriginalFileName);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                Shell32.&lt;span style="COLOR: #2b91af"&gt;Folder&lt;/span&gt; DestFlder = sc.NameSpace(Properties.&lt;span style="COLOR: #2b91af"&gt;Settings&lt;/span&gt;.Default.FileSaveLocation + &lt;span style="COLOR: #a31515"&gt;@"\"&lt;/span&gt; + &lt;span style="COLOR: #2b91af"&gt;ZipClass&lt;/span&gt;.zipname());&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                DestFlder.CopyHere(fi, 1024);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%"&gt;                &lt;span style="COLOR: #2b91af"&gt;Thread&lt;/span&gt;.Sleep(SrcFlder.Items().Count * 1000);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;Of course there are other parts, for example I had to supply separate text files in particular formats for the client – boring stuff. Up until today, I was under the impression I could simply copy the files to a folder for the client extract through their FTP connection. Today I found out our FTP server cannot be reached through a file share. Thus I had to learn a thing or two about programming a FTP client. &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;FTP is .net sockets, user names, passwords and all the regular IO commands. But everything is done via a stream. This was a pretty big class. I had to both write to the stream and read from the stream. Some of the highlights are;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;Sending commands&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue"&gt;if&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt; (Responses)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                        log.WriteLine(&lt;span style="COLOR: #a31515"&gt;"---&amp;gt; "&lt;/span&gt; + command);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                  &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                  &lt;span style="COLOR: green"&gt;// send it&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                  writer.Write(command + &lt;span style="COLOR: #a31515"&gt;"\r\n"&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                  writer.Flush();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                  &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                  &lt;span style="COLOR: green"&gt;// and read the result&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%"&gt;                  &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; Reply();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%"&gt;Uploading files:&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue"&gt;if&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt; (TransferType == &lt;span style="COLOR: #2b91af"&gt;FTPTransferType&lt;/span&gt;.ASCII)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                  {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                        &lt;span style="COLOR: #2b91af"&gt;Stream&lt;/span&gt; srcStream = &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                        &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;FileStream&lt;/span&gt;(localPath, &lt;span style="COLOR: #2b91af"&gt;FileMode&lt;/span&gt;.Open, &lt;span style="COLOR: #2b91af"&gt;FileAccess&lt;/span&gt;.Read);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                  &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                  }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                  &lt;span style="COLOR: blue"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                  {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                        &lt;span style="COLOR: #2b91af"&gt;Stream&lt;/span&gt; srcStream = &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                        &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;FileStream&lt;/span&gt;(localPath, &lt;span style="COLOR: #2b91af"&gt;FileMode&lt;/span&gt;.Open, &lt;span style="COLOR: #2b91af"&gt;FileAccess&lt;/span&gt;.Read);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                  PutBinary(srcStream, remoteFile, append);             &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%"&gt;                  Validate();&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;Tomorrow, I’m hoping to have some real data to test with. If all goes well, I can release this week!&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119964"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119964" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/kenl/aggbug/119964.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ken Lovely, MCSE, MCDBA</dc:creator>
            <guid>http://geekswithblogs.net/kenl/archive/2008/02/25/images-zip-ftp.aspx</guid>
            <pubDate>Tue, 26 Feb 2008 01:29:51 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/kenl/comments/119964.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/kenl/archive/2008/02/25/images-zip-ftp.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/kenl/comments/commentRss/119964.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/kenl/services/trackbacks/119964.aspx</trackback:ping>
        </item>
        <item>
            <title>Philly.Net February Meeting</title>
            <link>http://geekswithblogs.net/kenl/archive/2008/02/21/philly.net-february-meeting.aspx</link>
            <description>&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;Another great meeting!!! Tonight I walked in with Bill; I got to help push the mounds of food and drinks in. As usual the meeting was held at the Microsoft Malvern campus. The meeting started with Dani Diaz our local MS rep. His course was named VS c# Tips and Tricks for the MS Visual Studio 2008 IDE. &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;Dani started out with showing us around VS 2008, key commands, explaining the versioning and how it works, etc. Some of the key commands that he showed were pretty cool, ones I never saw before. Then he went into some of the code changes, things like how we no longer need to add local variables to properties and not having to type new for objects where you are adding the properties when instantiate the values. Name Object initializers (also collection initializers).  He obviously talked about LINQ, and how to write code using it. &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;Tonight Devon Consulting sponsored the event. They supplied all the food – lots of food – 90 people or so!!! One of the leaders of Devon spoke about how they get jobs… And they gave away a GPS unit.&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;Our main speaker of the night was David Solivan, another MS evangelist. His subject was the magic of Application Life Cycle. He started off speaking about how many projects fail and how many succeed. How we manage requirement changes and quality. The problem is it takes more than developers to produce a solution. The new focus is People, process, tools. (The Team System).  &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;We had a discussion on Team Foundation Server and the advances MS made compared to Source Safe. Dave showed how much better the team editions are over the ole individual versions. He showed how much more useful the Team Editions are. Showed the entire life cycle of a development project and how each person’s role is just as important as the others. Microsoft is shifting from selling to just developers. They realize there is an entire team of people that are required to properly get a development project completed. &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;The night as most of the meetings was a 10! Meaning GREAT!&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;If you are not in a user group you are missing out!&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;Ken Lovely, &lt;font size="1"&gt;MCSE, MCDBA&lt;/font&gt;&lt;br /&gt;
&lt;a href="http://www.kenl.net"&gt;www.kenl.net&lt;/a&gt; &lt;br /&gt;
&lt;a href="http://www.hybridhostingsystem.com"&gt;www.hybridhostingsystem.com&lt;/a&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119872"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119872" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/kenl/aggbug/119872.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ken Lovely, MCSE, MCDBA</dc:creator>
            <guid>http://geekswithblogs.net/kenl/archive/2008/02/21/philly.net-february-meeting.aspx</guid>
            <pubDate>Thu, 21 Feb 2008 21:39:02 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/kenl/comments/119872.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/kenl/archive/2008/02/21/philly.net-february-meeting.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/kenl/comments/commentRss/119872.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/kenl/services/trackbacks/119872.aspx</trackback:ping>
        </item>
        <item>
            <title>New Technologies...</title>
            <link>http://geekswithblogs.net/kenl/archive/2008/01/29/new-technologies.aspx</link>
            <description>&lt;div style="MARGIN: 0in 0in 10pt"&gt;I came across a couple of cool things that I want to share with everyone.&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;First one is Microsoft Enterprise Search. The second one is True Hybrid Hosting.&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;Microsoft is offering Microsoft Search Server Express for Free!!! Both the RC and the RTM will be free of charge. Pretty cool! &lt;a href="http://www.microsoft.com/enterprisesearch/serverproducts/searchserverexpress/try-1.aspx"&gt;http://www.microsoft.com/enterprisesearch/serverproducts/searchserverexpress/try-1.aspx&lt;/a&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;True Hybrid Hosting is unbelievable!! Within a single domain you can have .Net, classic ASP, PHP, JAVA, Javascript, MySQL, MS SQL 2005, CGI, PERL, Python and the list goes on ALL working in harmony as one big happy family. This impressive balancing act of Windows and Linux hosting is truly going to revolutionize the web. ALT.Net no problem with this platform! You have to check this out for yourself at &lt;a href="http://www.dotnetplushosting.com/"&gt;http://www.dotnetplushosting.com&lt;/a&gt;. &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 10pt"&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119066"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119066" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/kenl/aggbug/119066.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ken Lovely, MCSE, MCDBA</dc:creator>
            <guid>http://geekswithblogs.net/kenl/archive/2008/01/29/new-technologies.aspx</guid>
            <pubDate>Tue, 29 Jan 2008 22:06:43 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/kenl/comments/119066.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/kenl/archive/2008/01/29/new-technologies.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/kenl/comments/commentRss/119066.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/kenl/services/trackbacks/119066.aspx</trackback:ping>
        </item>
    </channel>
</rss>