<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/"><channel><title>Kevin A. Boucher</title><link>http://janetandkevin.com/Blog/</link><description>The Art of .Net</description><managingEditor>Kevin</managingEditor><dc:language>en-US</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>Kevin</dc:creator><title>Back to Mainframes into the Cloud</title><link>http://janetandkevin.com/Blog/archive/2008/05/10/449.aspx</link><pubDate>Sat, 10 May 2008 12:47:00 GMT</pubDate><guid>http://janetandkevin.com/Blog/archive/2008/05/10/449.aspx</guid><wfw:comment>http://janetandkevin.com/Blog/comments/449.aspx</wfw:comment><comments>http://janetandkevin.com/Blog/archive/2008/05/10/449.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://janetandkevin.com/Blog/comments/commentRss/449.aspx</wfw:commentRss><trackback:ping>http://janetandkevin.com/Blog/services/trackbacks/449.aspx</trackback:ping><description>&lt;P&gt;So, we are going back to mainframes (sorta).&amp;nbsp; First it was big computers in big rooms.&amp;nbsp; Then everyone had to have their own computer.&amp;nbsp; We figured out how to connect them, but the model still wasn't quite right.&amp;nbsp; We've had thick clients and thin clients and problems with each.&amp;nbsp; We've had shrink wrap software and online software.&amp;nbsp; We've heard of Software as a Service (SaaS), but&amp;nbsp;it&amp;nbsp;always seemed like a dream wrought with performance and scalability problems.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The new world is Cloud Computing where the Services are hosted in scalable data warehouses.&amp;nbsp; The clients follow the client hybrid approach using a technology such as Silverlight or sophisticated Ajax to consume the services and present a rich user experience.&amp;nbsp; On the server side IT data center issues go away, scalability is built in, and shared resources make it greener.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Software + Services&lt;BR&gt;&lt;/STRONG&gt;&lt;A href="http://msdn.microsoft.com/en-us/architecture/aa699384.aspx"&gt;http://msdn.microsoft.com/en-us/architecture/aa699384.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;SaaS Architecture&lt;BR&gt;&lt;/STRONG&gt;&lt;A href="http://www.microsoft.com/feeds/msdn/en-us/architecture/media/SaaS/splusarcperspectives.asx"&gt;http://www.microsoft.com/feeds/msdn/en-us/architecture/media/SaaS/splusarcperspectives.asx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Live Mesh (bringing it together)&lt;BR&gt;&lt;/STRONG&gt;&lt;A href="http://blogs.msdn.com/livemesh/"&gt;http://blogs.msdn.com/livemesh/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Microsoft Software Online&lt;BR&gt;&lt;/STRONG&gt;&lt;A href="http://www.microsoft.com/presspass/press/2008/mar08/03-02AllSizeBusinessesPR.mspx"&gt;http://www.microsoft.com/presspass/press/2008/mar08/03-02AllSizeBusinessesPR.mspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Bill talks of the Cloud (top priority)&lt;BR&gt;&lt;/STRONG&gt;&lt;A href="http://www.microsoft.com/winme/0802/32460/Sharepoint_BillG_JaniceKapner.asx"&gt;http://www.microsoft.com/winme/0802/32460/Sharepoint_BillG_JaniceKapner.asx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Coca-Cola Online&lt;BR&gt;&lt;/STRONG&gt;&lt;A href="http://online.wsj.com/article/SB120451096788306801.html?mod=rss_whats_news_technology&amp;amp;apl=y&amp;amp;r=375403"&gt;http://online.wsj.com/article/SB120451096788306801.html?mod=rss_whats_news_technology&amp;amp;apl=y&amp;amp;r=375403&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Others&lt;BR&gt;&amp;nbsp; Amazon EC2:&amp;nbsp; &lt;/STRONG&gt;&lt;A href="http://www.amazon.com/gp/browse.html?node=201590011"&gt;http://www.amazon.com/gp/browse.html?node=201590011&lt;/A&gt;&lt;BR&gt;&lt;STRONG&gt;&amp;nbsp; Google:&amp;nbsp; &lt;/STRONG&gt;&lt;A href="https://www.google.com/accounts/ServiceLogin?service=ah&amp;amp;continue=http://appengine.google.com/_ah/login%3Fcontinue%3Dhttp://appengine.google.com/&amp;amp;ltmpl=ae&amp;amp;sig=2441550b0617bb4eb9e7f8c3eb9e63b1"&gt;https://www.google.com/accounts/ServiceLogin?service=ah&amp;amp;continue=http://appengine.google.com/_ah/login%3Fcontinue%3Dhttp://appengine.google.com/&amp;lt;mpl=ae&amp;amp;sig=2441550b0617bb4eb9e7f8c3eb9e63b1&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src ="http://janetandkevin.com/Blog/aggbug/449.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Kevin</dc:creator><title>Evolving Web Forms</title><link>http://janetandkevin.com/Blog/archive/2007/11/30/446.aspx</link><pubDate>Fri, 30 Nov 2007 15:51:00 GMT</pubDate><guid>http://janetandkevin.com/Blog/archive/2007/11/30/446.aspx</guid><wfw:comment>http://janetandkevin.com/Blog/comments/446.aspx</wfw:comment><comments>http://janetandkevin.com/Blog/archive/2007/11/30/446.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://janetandkevin.com/Blog/comments/commentRss/446.aspx</wfw:commentRss><trackback:ping>http://janetandkevin.com/Blog/services/trackbacks/446.aspx</trackback:ping><description>&lt;P&gt;I found the&amp;nbsp;recent article &amp;#8220;&lt;A href="http://west-wind.com/weblog/posts/198731.aspx"&gt;What's Ailing ASP.NET WEB Forms&lt;/A&gt;&amp;#8221;&amp;nbsp;by Rick Strahl to be very interesting.&amp;nbsp; I still agree that the ASP.NET server side has a strong advantage over alternate technologies, but the client needs to be richer.&amp;nbsp;&amp;nbsp;Web Forms are too simple and people are not ready to fully except&amp;nbsp;&lt;A href="http://silverlight.net/"&gt;Silverlight&lt;/A&gt; (and the control set is not there yet).&amp;nbsp; &lt;SPAN style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;Integrating &lt;/SPAN&gt;a client side framework like &lt;A href="http://extjs.com/"&gt;ExtJS&lt;/A&gt; seems like the best approach... for now.&lt;/P&gt;&lt;img src ="http://janetandkevin.com/Blog/aggbug/446.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Kevin</dc:creator><title>Client side logging for your Ajax app. with Google Gears</title><link>http://janetandkevin.com/Blog/archive/2007/07/06/443.aspx</link><pubDate>Fri, 06 Jul 2007 12:09:00 GMT</pubDate><guid>http://janetandkevin.com/Blog/archive/2007/07/06/443.aspx</guid><wfw:comment>http://janetandkevin.com/Blog/comments/443.aspx</wfw:comment><comments>http://janetandkevin.com/Blog/archive/2007/07/06/443.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://janetandkevin.com/Blog/comments/commentRss/443.aspx</wfw:commentRss><trackback:ping>http://janetandkevin.com/Blog/services/trackbacks/443.aspx</trackback:ping><description>&lt;P&gt;In today's Web 2.0 world developers are creating very rich clients with plenty of JavaScript code and little to no logging.&amp;nbsp; With the tools available today there is no reason not to log on the client side.&lt;/P&gt;
&lt;P&gt;Logging is an important tool in any developers toolbox.&amp;nbsp; If done right logging gives the developer detailed context for application failures.&amp;nbsp; Logging should not be confused with testing or debugging although in certain instances it can help with the later.&lt;/P&gt;
&lt;P&gt;The following is a quick example of how logging on the client side can easily be acheived using &lt;A href="http://gears.google.com/"&gt;Google Gears&lt;/A&gt;.&amp;nbsp; There is potential to expand this small demo into a more sophisticated logging mechanismn with reporting features and server-side transfer of logs if desired.&lt;/P&gt;
&lt;P&gt;The basic code and idea behind client side logging is very simple.&amp;nbsp; Let's look at a little sample logger that uses Google Gears:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;A href="http://www.janetandkevin.com/blog/projects/Glogger/glogger.html"&gt;Sample Client Side Logger using Google Gears&lt;/A&gt;&lt;BR&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;To get client side logging running on your site all you need to do is include the following JavaScript files in your head section as follows:&lt;/P&gt;&lt;PRE class=csharpcode&gt;  &amp;lt;script type=&lt;SPAN class=str&gt;"text/javascript"&lt;/SPAN&gt;  src=&lt;SPAN class=str&gt;"gears_init.js"&lt;/SPAN&gt;&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script type=&lt;SPAN class=str&gt;"text/javascript"&lt;/SPAN&gt;  src=&lt;SPAN class=str&gt;"glogger.js"&lt;/SPAN&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/PRE&gt;
&lt;P&gt;Then you are set to add client side logging in your scripts like this:&lt;/P&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;PRE class=csharpcode&gt;  &lt;SPAN class=rem&gt;// Log to Google Gears client side database&lt;/SPAN&gt;
  log(&lt;SPAN class=str&gt;"INFO"&lt;/SPAN&gt;, &lt;SPAN class=str&gt;"Hello World"&lt;/SPAN&gt;);&lt;/PRE&gt;
&lt;P&gt;The client side database creation is done in the initialization function of the included glogger.js script.&amp;nbsp; You can see here how it checks for existence of Google Gears and the database before it tries to&amp;nbsp;create it.&lt;/P&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;PRE class=csharpcode&gt;  &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (!window.google || !google.gears) {
    &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt;;
  }
  &lt;SPAN class=kwrd&gt;try&lt;/SPAN&gt; {
    db = google.gears.factory.create(&lt;SPAN class=str&gt;'beta.database'&lt;/SPAN&gt;, &lt;SPAN class=str&gt;'1.0'&lt;/SPAN&gt;);
  } &lt;SPAN class=kwrd&gt;catch&lt;/SPAN&gt; (ex) {
    setError(&lt;SPAN class=str&gt;'Could not create database: '&lt;/SPAN&gt; + ex.message);
  }
  &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (db) {
    db.open(&lt;SPAN class=str&gt;'database-glogger'&lt;/SPAN&gt;);
    db.execute(&lt;SPAN class=str&gt;'create table if not exists glogger'&lt;/SPAN&gt; +
               &lt;SPAN class=str&gt;' (level varchar(50), msg varchar(1024), timestamp int)'&lt;/SPAN&gt;);
  }&lt;/PRE&gt;
&lt;P&gt;Inserting, selecting, and deleting from the log table is just as easy.&amp;nbsp; There are examples of each of these in glogger.js.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The Code:&lt;BR&gt;&lt;/STRONG&gt;&lt;A href="http://www.janetandkevin.com/blog/projects/Glogger/glogger.html"&gt;glogger.html&lt;/A&gt; - Web page that logs to client&lt;BR&gt;&lt;A href="http://www.janetandkevin.com/blog/projects/Glogger/glogger.js"&gt;glogger.js&lt;/A&gt; - Logging implementation&lt;BR&gt;&lt;A href="http://www.janetandkevin.com/blog/projects/Glogger/gears_init.js"&gt;gears_init.js&lt;/A&gt; - Main Google Gears code&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;STRONG&gt;Helper Utilities:&lt;/STRONG&gt;&lt;BR&gt;&lt;A href="http://sqlitebrowser.sourceforge.net/"&gt;sqlitebrowser.sourceforge.net&lt;/A&gt; - SQLiteDatabase Browser&lt;BR&gt;&lt;A href="http://www.janetandkevin.com/blog/projects/Glogger/dbquery.html"&gt;dbquery.html &lt;/A&gt;- Web interface to SQLite query analyzer&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Happy Client Side Logging!&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;Let me know if you make any extensions to this code...&lt;/P&gt;&lt;img src ="http://janetandkevin.com/Blog/aggbug/443.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Kevin</dc:creator><title>Firefox Bookmarks</title><link>http://janetandkevin.com/Blog/archive/2007/02/16/428.aspx</link><pubDate>Fri, 16 Feb 2007 20:02:00 GMT</pubDate><guid>http://janetandkevin.com/Blog/archive/2007/02/16/428.aspx</guid><wfw:comment>http://janetandkevin.com/Blog/comments/428.aspx</wfw:comment><comments>http://janetandkevin.com/Blog/archive/2007/02/16/428.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://janetandkevin.com/Blog/comments/commentRss/428.aspx</wfw:commentRss><trackback:ping>http://janetandkevin.com/Blog/services/trackbacks/428.aspx</trackback:ping><description>If you're like me you have a ton of bookmarks.  Some you go back to frequently and some you only use every so often.  The problem is keeping them in sync on all your computers or remembering how to Google the page back.  The answer is simple and easy to get used to.  The answer is &lt;a href="http://www.foxmarks.com/"&gt;Foxmarks&lt;/a&gt;.  If you don't use this extension go grab it.  Try actually organizing your bookmarks and use ctrl-b to bring them up, and quickly search through them.&lt;br/&gt;&lt;br/&gt;

While I'm talking about Firefox extensions, if you are a web developer you have to try out &lt;a href="https://addons.mozilla.org/firefox/1843/"&gt;Firebug&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;

For a more complete list of useful extensions, check out this &lt;a href="http://scottwater.com/blog/"&gt;list&lt;/a&gt;.&lt;img src ="http://janetandkevin.com/Blog/aggbug/428.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Kevin</dc:creator><title>WPF/E?</title><link>http://janetandkevin.com/Blog/archive/2006/07/26/425.aspx</link><pubDate>Wed, 26 Jul 2006 10:34:00 GMT</pubDate><guid>http://janetandkevin.com/Blog/archive/2006/07/26/425.aspx</guid><wfw:comment>http://janetandkevin.com/Blog/comments/425.aspx</wfw:comment><comments>http://janetandkevin.com/Blog/archive/2006/07/26/425.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://janetandkevin.com/Blog/comments/commentRss/425.aspx</wfw:commentRss><trackback:ping>http://janetandkevin.com/Blog/services/trackbacks/425.aspx</trackback:ping><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;WPF/E?&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;(Where WPF = Windows Presentation Foundation and E stands for "Everywhere")&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;What is this?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It&amp;#8217;s the supposed Flash killer.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;A plugin/extension for all browsers on all platforms that knows how to render XAML and has a mini CLR running on the client.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A href="http://channel9.msdn.com/showpost.aspx?postid=193367"&gt;http://channel9.msdn.com/showpost.aspx?postid=193367&lt;/A&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/P&gt;&lt;o:p&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Some day maybe the client will not matter&amp;#8230;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/o:p&gt;&lt;img src ="http://janetandkevin.com/Blog/aggbug/425.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Kevin</dc:creator><title>Quail - Query and Tail Support for Large Logfiles.</title><link>http://janetandkevin.com/Blog/archive/2006/01/27/226.aspx</link><pubDate>Fri, 27 Jan 2006 13:25:00 GMT</pubDate><guid>http://janetandkevin.com/Blog/archive/2006/01/27/226.aspx</guid><wfw:comment>http://janetandkevin.com/Blog/comments/226.aspx</wfw:comment><comments>http://janetandkevin.com/Blog/archive/2006/01/27/226.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://janetandkevin.com/Blog/comments/commentRss/226.aspx</wfw:commentRss><trackback:ping>http://janetandkevin.com/Blog/services/trackbacks/226.aspx</trackback:ping><description>&lt;P&gt;&lt;STRONG&gt;&lt;A href="http://janetandkevin.com/blog/articles/224.aspx"&gt;Quail&lt;/A&gt;&lt;/STRONG&gt; is a real-time log viewing program that I wrote to&amp;nbsp;support large files with color highlighting and search functionality.&amp;nbsp; Quail also provides a front end to LogParser enabling SQL query support for your logs.&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;Update (2/25/2006): Fixed bugs around display issues, key handling, and file reload on log rollover.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;Update (5/22/2006): Enhanced highlight feature and added load from non-working directory.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;Update (10/1/2006): Launch external commands, and window positioning added.&lt;/FONT&gt;&lt;/P&gt;&lt;img src ="http://janetandkevin.com/Blog/aggbug/226.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Kevin</dc:creator><title>The Simple Way to  Read Config Options for Your App</title><link>http://janetandkevin.com/Blog/archive/2006/01/27/225.aspx</link><pubDate>Fri, 27 Jan 2006 11:25:00 GMT</pubDate><guid>http://janetandkevin.com/Blog/archive/2006/01/27/225.aspx</guid><wfw:comment>http://janetandkevin.com/Blog/comments/225.aspx</wfw:comment><comments>http://janetandkevin.com/Blog/archive/2006/01/27/225.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://janetandkevin.com/Blog/comments/commentRss/225.aspx</wfw:commentRss><trackback:ping>http://janetandkevin.com/Blog/services/trackbacks/225.aspx</trackback:ping><description>&lt;P&gt;Usually you want to control settings in your application via MetaData instead of hard coding values that may change.&amp;nbsp; With C# serialization this is so easy that you will gladly place settings in a config file.&amp;nbsp; Take the following example that I have recently been working on:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;XML Config File:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN class=html&gt;xml&lt;/SPAN&gt; &lt;SPAN class=attr&gt;version&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="1.0"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;encoding&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="utf-8"&lt;/SPAN&gt;?&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
&lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Options&lt;/SPAN&gt; &lt;SPAN class=attr&gt;xmlns:xsd&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="http://www.w3.org/2001/XMLSchema"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;xmlns:xsi&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="http://www.w3.org/2001/XMLSchema-instance"&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Option&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;DefaultLogLocation&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;c:\temp\mtlog.txt&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;DefaultLogLocation&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;AutoLoadLog&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;false&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;AutoLoadLog&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;TailTimeout&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;1000&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;TailTimeout&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;MaxBytesToLoad&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;100000000&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;MaxBytesToLoad&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;BackgroundColor&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;WhiteSmoke&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;BackgroundColor&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;FilterColor&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Teal&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;FilterColor&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;DefaultColor&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Black&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;DefaultColor&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;Option&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightItem&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;ContainsString&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;[DEBUG&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;ContainsString&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightColor&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Black&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightColor&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightItem&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightItem&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;ContainsString&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;[INFO&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;ContainsString&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightColor&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Navy&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightColor&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightItem&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightItem&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;ContainsString&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;[WARNING&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;ContainsString&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightColor&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Orange&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightColor&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightItem&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightItem&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;ContainsString&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;[ERROR&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;ContainsString&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightColor&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;DarkRed&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightColor&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightItem&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightItem&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;ContainsString&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;[FATAL&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;ContainsString&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightColor&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Red&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightColor&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightItem&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightItem&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;ContainsString&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;***&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;ContainsString&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightColor&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;DarkRed&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightColor&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;HighlightItem&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;Options&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;C# Class to Read and Save:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System;
&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.Collections;
&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.IO;
&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.Xml;
&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.Xml.Serialization;
&lt;SPAN class=kwrd&gt;namespace&lt;/SPAN&gt; Quail
{
  &lt;SPAN class=rem&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=rem&gt;/// Options class which will be serialized.&lt;/SPAN&gt;
  &lt;SPAN class=rem&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;
  [XmlRoot(&lt;SPAN class=str&gt;"Options"&lt;/SPAN&gt;)]
  &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; MyOptions
  {
    [XmlElement(&lt;SPAN class=str&gt;"Option"&lt;/SPAN&gt;)]
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; Option option;
    &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; ArrayList mHighlightItems;
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; MyOptions() 
    {
      option = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Option();
      mHighlightItems = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; ArrayList();
    }
    [XmlElement(&lt;SPAN class=str&gt;"HighlightItem"&lt;/SPAN&gt;)]
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; HighlightItem[] HighlightItems 
    {
      get 
      {
        HighlightItem[] items = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; HighlightItem[ mHighlightItems.Count ];
        mHighlightItems.CopyTo( items );
        &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; items;
      }
      set 
      {
        &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;( &lt;SPAN class=kwrd&gt;value&lt;/SPAN&gt; == &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt; ) &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt;;
        HighlightItem[] items = (HighlightItem[])&lt;SPAN class=kwrd&gt;value&lt;/SPAN&gt;;
        mHighlightItems.Clear();
        &lt;SPAN class=kwrd&gt;foreach&lt;/SPAN&gt;( HighlightItem item &lt;SPAN class=kwrd&gt;in&lt;/SPAN&gt; items )
          mHighlightItems.Add( item );
      }
    }
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; AddItem(HighlightItem item) 
    {
      &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; mHighlightItems.Add( item );
    }
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;bool&lt;/SPAN&gt; Save()
    {
      &lt;SPAN class=rem&gt;// Serialization&lt;/SPAN&gt;
      XmlSerializer s = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; XmlSerializer( &lt;SPAN class=kwrd&gt;typeof&lt;/SPAN&gt;( MyOptions ) );
      TextWriter w = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; StreamWriter( &lt;SPAN class=str&gt;@"options.xml"&lt;/SPAN&gt; );
      s.Serialize( w, &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt; );
      w.Close();
      &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;true&lt;/SPAN&gt;;
    }
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; MyOptions Load()
    {
      &lt;SPAN class=rem&gt;// Deserialization&lt;/SPAN&gt;
      XmlSerializer s = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; XmlSerializer( &lt;SPAN class=kwrd&gt;typeof&lt;/SPAN&gt;( MyOptions ) );
      MyOptions opt;
      TextReader r = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; StreamReader( &lt;SPAN class=str&gt;@"options.xml"&lt;/SPAN&gt; );
      opt = (MyOptions)s.Deserialize( r );
      r.Close();
      &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; opt;
    }
  }
  &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; HighlightItem 
  {
    [XmlElement(&lt;SPAN class=str&gt;"ContainsString"&lt;/SPAN&gt;)] 
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; ContainsString;
    [XmlElement(&lt;SPAN class=str&gt;"HighlightColor"&lt;/SPAN&gt;)]
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; HiglightColor;
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; HighlightItem() 
    {
    }
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; HighlightItem(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; containsString, &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; color) 
    {
      ContainsString = containsString;
      HiglightColor = color;
    }
  }
  &lt;SPAN class=rem&gt;// Option&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; Option 
  {
    [XmlElement(&lt;SPAN class=str&gt;"DefaultLogLocation"&lt;/SPAN&gt;)] 
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; DefaultLogLocation = &lt;SPAN class=str&gt;@"c:\temp\mtlog.txt"&lt;/SPAN&gt;;
    [XmlElement(&lt;SPAN class=str&gt;"AutoLoadLog"&lt;/SPAN&gt;)] 
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;bool&lt;/SPAN&gt; AutoLoadLog = &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;;
    [XmlElement(&lt;SPAN class=str&gt;"TailTimeout"&lt;/SPAN&gt;)] 
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; TailTimeout = 1000;
    [XmlElement(&lt;SPAN class=str&gt;"MaxBytesToLoad"&lt;/SPAN&gt;)] 
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;long&lt;/SPAN&gt; MaxBytesToLoad = 100000000;
    [XmlElement(&lt;SPAN class=str&gt;"BackgroundColor"&lt;/SPAN&gt;)] 
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; BackgroundColor = &lt;SPAN class=str&gt;"WhiteSmoke"&lt;/SPAN&gt;;
    [XmlElement(&lt;SPAN class=str&gt;"FilterColor"&lt;/SPAN&gt;)] 
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; FilterColor = &lt;SPAN class=str&gt;"Teal"&lt;/SPAN&gt;;
    [XmlElement(&lt;SPAN class=str&gt;"DefaultColor"&lt;/SPAN&gt;)] 
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; DefaultColor = &lt;SPAN class=str&gt;"Black"&lt;/SPAN&gt;;
  
    [XmlElement(&lt;SPAN class=str&gt;"BorderColor"&lt;/SPAN&gt;)] 
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; BorderColor = &lt;SPAN class=str&gt;"WhiteSmoke"&lt;/SPAN&gt;;
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; Option() 
    {
    }
  }
}
&lt;/PRE&gt;
&lt;P&gt;&lt;/P&gt;&lt;img src ="http://janetandkevin.com/Blog/aggbug/225.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Kevin</dc:creator><title>LINQ (Language Integrated Query)</title><link>http://janetandkevin.com/Blog/archive/2005/09/25/222.aspx</link><pubDate>Sun, 25 Sep 2005 10:24:00 GMT</pubDate><guid>http://janetandkevin.com/Blog/archive/2005/09/25/222.aspx</guid><wfw:comment>http://janetandkevin.com/Blog/comments/222.aspx</wfw:comment><comments>http://janetandkevin.com/Blog/archive/2005/09/25/222.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://janetandkevin.com/Blog/comments/commentRss/222.aspx</wfw:commentRss><trackback:ping>http://janetandkevin.com/Blog/services/trackbacks/222.aspx</trackback:ping><description>&lt;P&gt;Data lives in many different places and the middle layer&amp;nbsp;is always struggling to get it together for the clients.&amp;nbsp; LINQ will allow developers to treat data in a standard way whether it is in memory or not.&amp;nbsp; Query set operations become first class citizens in the programming language allowing you to query against objects (that support&amp;nbsp;&lt;!--StartFragment --&gt; IEnumerable&lt;T&gt;&lt;/T&gt;), relational databases, or XML.&amp;nbsp; LINQ allows you to join in memory data with data in the&amp;nbsp;database.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;!--StartFragment --&gt;See: &lt;A href="http://msdn.microsoft.com/netframework/future/linq/" name=Intro&gt;&lt;FONT size=2&gt;The LINQ Project&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src ="http://janetandkevin.com/Blog/aggbug/222.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Kevin</dc:creator><title>Why AJAX?</title><link>http://janetandkevin.com/Blog/archive/2005/07/06/220.aspx</link><pubDate>Wed, 06 Jul 2005 20:20:00 GMT</pubDate><guid>http://janetandkevin.com/Blog/archive/2005/07/06/220.aspx</guid><wfw:comment>http://janetandkevin.com/Blog/comments/220.aspx</wfw:comment><comments>http://janetandkevin.com/Blog/archive/2005/07/06/220.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://janetandkevin.com/Blog/comments/commentRss/220.aspx</wfw:commentRss><trackback:ping>http://janetandkevin.com/Blog/services/trackbacks/220.aspx</trackback:ping><description>&lt;P&gt;&lt;A href="http://en.wikipedia.org/wiki/AJAX"&gt;AJAX&lt;/A&gt;&amp;nbsp;or&amp;nbsp;&lt;B&gt;Asynchronous JavaScript and XML&lt;/B&gt; is by no means a new technology.&amp;nbsp; I have been using this technique to prevent page refreshes and create dynamic pages for 5 years now.&amp;nbsp; However, it seems that tossing a new acronym at technology makes people believe it will save the world.&amp;nbsp; No wait that is XML.&amp;nbsp; Alas, I'm not sure Microsoft has the right idea with the &lt;A href="http://weblogs.asp.net/scottgu/archive/2005/06/28/416185.aspx"&gt;Atlas project&lt;/A&gt;&amp;nbsp;(and they are a bit late).&amp;nbsp; To me it&amp;nbsp;seems the user is still stuck in an environment that was not created for a rich end user experience.&amp;nbsp; I have written an article (&lt;A href="http://www.janetandkevin.com/blog/projects/managedclientsidecontrols/hybrid%20client%20model.htm"&gt;Putting Performance into Your ASP.NET Application with Managed Client Side Controls&lt;/A&gt;) that proposes a work around to this problem for now.&amp;nbsp; In the end, I do think &lt;A href="http://msdn.microsoft.com/longhorn/default.aspx?pull=/library/en-us/dnlong/html/hgtomayavalonctp.asp#hgtomayavalonctp_topic1"&gt;Avalon's Express Applications&lt;/A&gt; may be the real answer (as long as we don't leave Firefox behind).&amp;nbsp; I'm not&amp;nbsp;crazy about another markup language like&amp;nbsp;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnintlong/html/longhornch03.asp"&gt;XAML&lt;/A&gt;, but often creating a&amp;nbsp;specific language can be the best way to solve a discrete problem.&lt;/P&gt;
&lt;P&gt;There is obviously&amp;nbsp;still a place for AJAX in simple web applications that require an interactive dynamic element to improve usability.&lt;/P&gt;&lt;img src ="http://janetandkevin.com/Blog/aggbug/220.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Kevin</dc:creator><title>The Pragmatic Programmer: From Journeyman to Master</title><link>http://janetandkevin.com/Blog/archive/2005/05/19/196.aspx</link><pubDate>Thu, 19 May 2005 15:37:00 GMT</pubDate><guid>http://janetandkevin.com/Blog/archive/2005/05/19/196.aspx</guid><wfw:comment>http://janetandkevin.com/Blog/comments/196.aspx</wfw:comment><comments>http://janetandkevin.com/Blog/archive/2005/05/19/196.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://janetandkevin.com/Blog/comments/commentRss/196.aspx</wfw:commentRss><trackback:ping>http://janetandkevin.com/Blog/services/trackbacks/196.aspx</trackback:ping><description>&lt;P&gt;&lt;FONT face=Tahoma size=2&gt;I believe every level of developer will benefit from reading&amp;nbsp;&amp;#8220;The&amp;nbsp;Pragmatic Programmer&amp;#8221; by Andrew Hunt and&amp;nbsp;David Thomas.&amp;nbsp; This book looks at the complete software life cycle and gives insightful tips at each stage.&amp;nbsp; By the end you will take pride in every line of code you write.&amp;nbsp; It is also full of useful design techniques such as tracer bullets.&amp;nbsp; A must read for every developer.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;img src ="http://janetandkevin.com/Blog/aggbug/196.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>