<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Dan Suceava</title><link>http://community.axosoft.com/blogs/dans/default.aspx</link><description>Everything &amp; Nothing</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61120.2)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/DanSuceava" /><feedburner:info uri="dansuceava" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><item><title>OnTime 2007 SDK sample Web application using Yahoo! UI</title><link>http://community.axosoft.com/blogs/dans/archive/2007/04/24/ontime-2007-sdk-sample-web-application-using-yui.aspx</link><pubDate>Wed, 25 Apr 2007 00:02:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:11364</guid><dc:creator>Dan Suceava</dc:creator><slash:comments>0</slash:comments><comments>http://community.axosoft.com/blogs/dans/comments/11364.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/dans/commentrss.aspx?PostID=11364</wfw:commentRss><description>&lt;P&gt;With all the &lt;A class="" href="http://community.axosoft.com/blogs/davidh/archive/2007/04/24/adobe-flex-and-flex-charts-ontime-2007-sdk-sample.aspx" target=_blank&gt;other&lt;/A&gt; &lt;A class="" href="http://community.axosoft.com/blogs/davidh/archive/2007/04/23/design-your-project-in-project-manage-it-in-ontime.aspx" target=_blank&gt;SDK&lt;/A&gt; &lt;A class="" href="http://community.axosoft.com/blogs/davidh/archive/2007/04/19/ontime-2007-outlook-2007-tasks-and-your-pda.aspx" target=_blank&gt;samples&lt;/A&gt; posted by &lt;A class="" href="http://community.axosoft.com/blogs/davidh/default.aspx" target=_blank&gt;David&lt;/A&gt; you are probably getting overwhelmed, but we're giving you one more.&amp;nbsp; I had wanted to take a look at the &lt;A class="" href="http://developer.yahoo.com/yui/" target=_blank&gt;Yahoo! UI library&lt;/A&gt; for a while, and since we had wanted to have both a Windows and a Web sample this was a good opportunity to write the Web sample using YUI.&lt;/P&gt;
&lt;P&gt;In terms of layout and functionality, the sample is exactly like the Windows sample, and it highlights the same SDK features.&amp;nbsp; Here are some screenshots of the sample in action:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://community.axosoft.com/photos/dans/images/11367/original.aspx" target=_blank&gt;&lt;IMG src="http://community.axosoft.com/photos/dans/images/11367/635x480.aspx" border=0&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Here's the main window showing the list of customers instead of projects, with the defects reported by the selected customer, and the related items tab showing items related to the selected defect:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://community.axosoft.com/photos/dans/images/11368/original.aspx" target=_blank&gt;&lt;IMG src="http://community.axosoft.com/photos/dans/images/11368/635x480.aspx" border=0&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Here's the Add defect window, showing only a few of the fields available for a defect:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://community.axosoft.com/photos/dans/images/11369/original.aspx" target=_blank&gt;&lt;IMG src="http://community.axosoft.com/photos/dans/images/11369/635x480.aspx" border=0&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;And here's the Add worklog window where we can log work entries for a selected defect:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://community.axosoft.com/photos/dans/images/11370/original.aspx" target=_blank&gt;&lt;IMG src="http://community.axosoft.com/photos/dans/images/11370/635x480.aspx" border=0&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The sample's user interface is all done using the Yahoo! UI library, and it uses the following components:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Calendar&lt;/LI&gt;
&lt;LI&gt;Connection Manager&lt;/LI&gt;
&lt;LI&gt;Container (Dialog)&lt;/LI&gt;
&lt;LI&gt;DataTable&lt;/LI&gt;
&lt;LI&gt;Menu&lt;/LI&gt;
&lt;LI&gt;TabView&lt;/LI&gt;
&lt;LI&gt;TreeView&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The Yahoo! UI library is available for free download and it includes quite a few components, of which only a few were used in this sample.&amp;nbsp; The scripts for the components can be linked either locally or directly from their servers.&amp;nbsp; The sample links directly to Yahoo for the scripts, but includes the CSS and images with the application (some of the CSS files were modified slightly).&lt;/P&gt;
&lt;P&gt;Overall, the YUI components are pretty nice: lightweight, fast, easy to use.&amp;nbsp; The DataTable (grid) was the only one that took some work, mainly with setting up its styles to look good and work properly in the top-right section&amp;nbsp;(if you look at the code you will notice that the scrolling comes from the div and not from the grid).&lt;/P&gt;
&lt;P&gt;You can download this sample from &lt;A class="" href="http://community.axosoft.com/files/folders/sdk_samples/entry11374.aspx"&gt;here&lt;/A&gt;.&amp;nbsp; This sample will be included with the OnTime SDK samples download in the future.&lt;/P&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=11364" width="1" height="1"&gt;</description><category domain="http://community.axosoft.com/blogs/dans/archive/tags/SDK/default.aspx">SDK</category><category domain="http://community.axosoft.com/blogs/dans/archive/tags/OnTime/default.aspx">OnTime</category><category domain="http://community.axosoft.com/blogs/dans/archive/tags/sample/default.aspx">sample</category><category domain="http://community.axosoft.com/blogs/dans/archive/tags/YUI/default.aspx">YUI</category></item><item><title>New OnTime 2007 SDK sample application</title><link>http://community.axosoft.com/blogs/dans/archive/2007/03/29/new-ontime-2007-sdk-sample-application.aspx</link><pubDate>Thu, 29 Mar 2007 14:31:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:10954</guid><dc:creator>Dan Suceava</dc:creator><slash:comments>0</slash:comments><comments>http://community.axosoft.com/blogs/dans/comments/10954.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/dans/commentrss.aspx?PostID=10954</wfw:commentRss><description>&lt;P&gt;With the release of OnTime 7.0.2 we have also released a new sample application for the OnTime SDK.&amp;nbsp; It is a Windows application (sorry, no Web app yet) which highlights a lot more of the SDK than the previous OnTime 2006 samples did.&amp;nbsp; The sample only works with defects, but all other item types have the same methods.&lt;/P&gt;
&lt;P&gt;So, here it is, the main window (look familiar?):&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://community.axosoft.com/photos/dans/images/10947/original.aspx" border=0&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here's main window showing users list instead of projects, with the list of defects assigned to the selected user, and the worklogs tab showing worklogs for the selected defect:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://community.axosoft.com/photos/dans/images/10948/original.aspx" border=0&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here's main window showing the list of customers instead of projects, with the defects reported by the selected customer, and the related items tab showing items related to the selected defect:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://community.axosoft.com/photos/dans/images/10949/original.aspx" border=0&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here's the Add defect window, showing only a few of the fields available for a defect:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://community.axosoft.com/photos/dans/images/10950/original.aspx" border=0&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The Add Attachment window where we can attach files to a defect (the sample stores the file in the database):&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://community.axosoft.com/photos/dans/images/10951/original.aspx" border=0&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here's the Add worklog window where we can log work entries for a selected defect:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://community.axosoft.com/photos/dans/images/10952/original.aspx" border=0&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And finally the Add item relationship window where we can relate two items (in the sample you have to type in the ID of the defect you want to relate to):&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://community.axosoft.com/photos/dans/images/10953/original.aspx" border=0&gt;&lt;/P&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=10954" width="1" height="1"&gt;</description><category domain="http://community.axosoft.com/blogs/dans/archive/tags/SDK/default.aspx">SDK</category><category domain="http://community.axosoft.com/blogs/dans/archive/tags/OnTime/default.aspx">OnTime</category></item><item><title>Creating announcements for your OnTime users</title><link>http://community.axosoft.com/blogs/dans/archive/2007/03/28/creating-announcements-for-your-ontime-users.aspx</link><pubDate>Wed, 28 Mar 2007 15:09:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:10927</guid><dc:creator>Dan Suceava</dc:creator><slash:comments>0</slash:comments><comments>http://community.axosoft.com/blogs/dans/comments/10927.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/dans/commentrss.aspx?PostID=10927</wfw:commentRss><description>&lt;P&gt;OnTime 2007 Web has a little known feature that allows you to have announcements displayed to OnTime users when they log into OnTime.&amp;nbsp; Currently this feature is only available in the Web version of OnTime, but will be implemented into the Windows version as well in the near future.&lt;/P&gt;
&lt;P&gt;With OnTime 2006 we had no easy way of letting our hosted customers know when we were planning maintenance and upgrades, other than sending an email out to each customer's main contact we had on file.&amp;nbsp; With OnTime 2007 we introduced trial and single-user hosted accounts, which means the number of hosted accounts has increased tenfold, or more.&amp;nbsp; We knew we needed a way of easily letting our hosted users know of any maintenance plans, so we built this 'announcements' feature into OnTime.&amp;nbsp; Although we built it to help us with our hosted customers, we figured it could be a useful feature for our installed customers as well, so we made sure it's easily configurable.&amp;nbsp; Note that, because we make use of this feature in the hosted environment, it is not available to hosted customers to set up their own announcements.&lt;/P&gt;
&lt;P&gt;The way this feature works is fairly simple.&amp;nbsp; You give OnTime the URL to check for announcements, and every time a user logs in, OnTime looks at that URL for any announcements and displays them to the user.&amp;nbsp; OnTime expects to get an XML from that URL in a specific format as follows:&lt;/P&gt;
&lt;DIV style="FONT-SIZE:12px;WIDTH:500px;COLOR:#ffff00;BACKGROUND-COLOR:#000000;"&gt;&amp;lt;OnTimeAnnouncements count="1"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Announcement&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Date&amp;gt;11/8/2006&amp;lt;/Date&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Message&amp;gt;This is the announcement&amp;lt;/Message&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Announcement&amp;gt;&lt;BR&gt;&amp;lt;/OnTimeAnnouncements&amp;gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;So lets look at a couple of ways of doing this.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;First, I'll just write a simple XML file and point OnTime to it.&amp;nbsp; I've created a file called 'announcements.xml' and placed it in a virtual directory on my machine.&amp;nbsp; The file contains the following XML:&lt;/P&gt;
&lt;DIV style="FONT-SIZE:12px;WIDTH:500px;COLOR:#ffff00;BACKGROUND-COLOR:#000000;"&gt;&amp;lt;OnTimeAnnouncements count="2"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Announcement&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Date&amp;gt;2007-03-02T00:00:00&amp;lt;/Date&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Message&amp;gt;&lt;BR&gt;&amp;amp;lt;h1&amp;amp;gt;Friendly Reminder&amp;amp;lt;/h1&amp;amp;gt;&amp;amp;lt;br/&amp;amp;gt;The deadline for our new super-duper &amp;amp;lt;b&amp;amp;gt;product&amp;amp;lt;/b&amp;amp;gt; is approaching.&amp;nbsp; Let's get it done.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Message&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Announcement&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Announcement&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Date&amp;gt;2007-03-06T00:00:00&amp;lt;/Date&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Message&amp;gt;&lt;BR&gt;&amp;amp;lt;h1&amp;amp;gt;Free Lunch&amp;amp;lt;/h1&amp;amp;gt;&amp;amp;lt;br/&amp;amp;gt;Our new super-duper &amp;amp;lt;u&amp;amp;gt;product&amp;amp;lt;/u&amp;amp;gt; is on time, so there will be free lunch this day.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Message&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Announcement&amp;gt;&lt;BR&gt;&amp;lt;/OnTimeAnnouncements&amp;gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;Then I go in OnTime under Tools -&amp;gt; System Options and enter the URL in the 'Announcements URL' field.&amp;nbsp; My URL is 'http://localhost/ontimeannouncements/announcements.xml'.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://community.axosoft.com/photos/dans/images/10928/original.aspx" border=0&gt;&lt;/P&gt;
&lt;P&gt;Note again that if you are a hosted customer, you will not see this option.&lt;/P&gt;
&lt;P&gt;So now once I save these settings, log out of OnTime, then log back in, I will see the announcements (newest one first).&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://community.axosoft.com/photos/dans/images/10929/original.aspx" border=0&gt;&lt;/P&gt;
&lt;P&gt;Another way of doing this is to write an ASP.NET page that will generate the XML.&amp;nbsp; This is how we use it for our hosted accounts, since we store the announcements in the database.&amp;nbsp; For this sample I create a new ASP.NET Web Application, and in the Default.aspx code behind I have the following code:&lt;/P&gt;
&lt;DIV style="FONT-SIZE:12px;WIDTH:700px;COLOR:#ffff00;BACKGROUND-COLOR:#000000;"&gt;&lt;FONT color=#00ffff size=2&gt;using&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; System;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;using&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; System.Data;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;using&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; System.Configuration;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;using&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; System.Collections.Generic;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;using&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; System.IO;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;using&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; System.Web;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;using&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; System.Web.Security;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;using&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; System.Web.UI;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;using&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; System.Web.UI.WebControls;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;using&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; System.Web.UI.WebControls.WebParts;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;using&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; System.Web.UI.HtmlControls;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;using&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; System.Xml;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&lt;BR&gt;namespace&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; OnTimeAnnouncements&lt;BR&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;partial&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;class&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;_Default&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; : System.Web.UI.&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;Page&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// query string keys&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;const&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;string&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; QS_USERID = "userid";&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;const&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;string&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; QS_DATABASE = "database";&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;const&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;string&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; QS_KEY = "key";&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// xml format:&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// &amp;lt;OnTimeAnnouncements count="1"&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Announcement&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Date&amp;gt;11/8/2006&amp;lt;/Date&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Message&amp;gt;This is the announcement&amp;lt;/Message&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Announcement&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// &amp;lt;/OnTimeAnnouncements&amp;gt;&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// xml tags&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;const&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;string&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; XML_NODE_ROOT = "OnTimeAnnouncements";&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;const&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;string&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; XML_ATTR_COUNT = "count";&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;const&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;string&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; XML_NODE_ANNOUNCEMENT = "Announcement";&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;const&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;string&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; XML_NODE_DATE = "Date";&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;const&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;string&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; XML_NODE_MESSAGE = "Message";&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;protected&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;void&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; Page_Load(&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;object&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; sender, &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;EventArgs&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; e)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// create sample announcements&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;Announcement&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&amp;gt; announcements = &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;new&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;List&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;Announcement&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&amp;gt;();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;announcements.Add(&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;new&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;Announcement&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;new&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;DateTime&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;(2007, 3, 1), "&amp;lt;h1&amp;gt;Friendly Reminder&amp;lt;/h1&amp;gt;&amp;lt;br/&amp;gt;The deadline for our new super-duper &amp;lt;b&amp;gt;product&amp;lt;/b&amp;gt; is approaching. Let's get it done."));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;announcements.Add(&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;new&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;Announcement&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;new&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;DateTime&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;(2007, 3, 5), "&amp;lt;h1&amp;gt;Free Lunch&amp;lt;/h1&amp;gt;&amp;lt;br/&amp;gt;Our new super-duper &amp;lt;u&amp;gt;product&amp;lt;/u&amp;gt; is on time, so there will be free lunch this day."));&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// get announcements&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Response.ClearContent();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Response.ClearHeaders();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Response.ContentType = "text/xml";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Response.BinaryWrite(GetAnnouncementsXml(announcements));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;byte&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;[] GetAnnouncementsXml(&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;List&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;Announcement&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&amp;gt; announcements)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// get announcements and create XML&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;using&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;MemoryStream&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; ms = &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;new&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;MemoryStream&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;())&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlTextWriter&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; xmlWriter = &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;new&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;XmlTextWriter&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;(ms, System.Text.&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;Encoding&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;.Default);&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; (xmlWriter != &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;null&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// start&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlWriter.WriteStartDocument();&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// root node&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlWriter.WriteStartElement(XML_NODE_ROOT);&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; (announcements.Count &amp;gt; 0)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// count&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlWriter.WriteAttributeString(XML_ATTR_COUNT, announcements.Count.ToString());&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// do announements&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;Announcement&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; announcement &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;in&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; announcements)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// announcement&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlWriter.WriteStartElement(XML_NODE_ANNOUNCEMENT);&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// date&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlWriter.WriteStartElement(XML_NODE_DATE);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlWriter.WriteValue(announcement.AnnouncementDate);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlWriter.WriteEndElement();&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// message&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlWriter.WriteStartElement(XML_NODE_MESSAGE);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlWriter.WriteValue(announcement.Message);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlWriter.WriteEndElement();&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlWriter.WriteEndElement();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// no data&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlWriter.WriteAttributeString(XML_ATTR_COUNT, "0");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// end root&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlWriter.WriteEndElement();&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ffff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// done&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlWriter.Flush();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlWriter.Close();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; ms.ToArray();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;class&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;Announcement&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;DateTime&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; AnnouncementDate;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;string&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; Message;&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; Announcement(&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;DateTime&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; dt, &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;string&lt;/FONT&gt;&lt;FONT color=#00ff00 size=2&gt; msg)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AnnouncementDate = dt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Message = msg;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;} &lt;/DIV&gt;
&lt;P&gt;&lt;/FONT&gt;Now I go into&amp;nbsp;OnTime and change my 'Announcements URL' field to 'http://localhost/ontimeannouncements/default.aspx'.&amp;nbsp; &amp;nbsp;Once I log out and log back in I get the new announcements:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://community.axosoft.com/photos/dans/images/10930/original.aspx" border=0&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;One thing to note is that OnTime will always display announcements if they exist in the XML.&amp;nbsp; If you want the announcements to only be shown during some date range, you will need to handle that in the ASP.NET page.&amp;nbsp; OnTime also passes in 3 parameters through the query string to the URL: the ID of the user logging in, the name of the database, and the OnTime Activation key (note the constants declared in the sample code above).&amp;nbsp; You can use these parameters if you want to only show users an announcement one time instead of every time they log in, you just need to keep track of how many times they've view it.&lt;/P&gt;
&lt;P&gt;As you may have noticed, the announcement message can be HTML, so you can format the messages in any way you want.&lt;/P&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=10927" width="1" height="1"&gt;</description></item><item><title>Localizing OnTime</title><link>http://community.axosoft.com/blogs/dans/archive/2006/04/03/localizing-ontime.aspx</link><pubDate>Mon, 03 Apr 2006 13:27:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:2266</guid><dc:creator>Dan Suceava</dc:creator><slash:comments>4</slash:comments><comments>http://community.axosoft.com/blogs/dans/comments/2266.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/dans/commentrss.aspx?PostID=2266</wfw:commentRss><description>&lt;P&gt;Internally, the code in &lt;A href="http://www.axosoft.com/Products/OnTime.aspx?cn=otm_overview"&gt;OnTime&lt;/A&gt; has been set up for localization since version 5 (OnTime 2005), as far as string resources go.&amp;nbsp; Until just recently, however, we have not attempted to translate it into any other language (due to various different reasons).&amp;nbsp; We are very excited about an opportunity to enter the Japanese market, and have started working on localizing &lt;A href="http://www.axosoft.com/Products/OnTime.aspx?cn=otm_overview"&gt;OnTime&lt;/A&gt; for Japanese users.&amp;nbsp; This will also get &lt;A href="http://www.axosoft.com/Products/OnTime.aspx?cn=otm_overview"&gt;OnTime&lt;/A&gt; completely ready for localization in other languages as well.&lt;/P&gt;
&lt;P&gt;We had placed all our strings into resource files, however we created a different resource file for each assembly.&amp;nbsp; We did have an external resources assembly which was used for some of the common strings, but most string were inside the individual assembly resource files.&amp;nbsp; We already knew it would be better to have all resources in one file, because it makes it more manageable and avoids duplication of data, and helps make the translation process easier.&amp;nbsp; So we merged all our resource files into the one external file, and of course we ended up with quite a few duplicate resources.&lt;/P&gt;
&lt;P&gt;What&amp;#8217;s a developer to do when faced with the task of finding duplicate data in a 13k line XML file?&amp;nbsp; Write code, of course.&amp;nbsp; And not just any code, but a VS.NET add-in that can check for duplicate resource names in a resource file.&amp;nbsp; The add-in simply looks through the currently open .resx file and prints out the names of all the duplicate resources.&amp;nbsp; The process of figuring out if the resources are duplicates or just happen to have the same name still needs to be performed manually.&amp;nbsp; The reason I mention this add-in is because we are making it, and the code, available for &lt;A href="http://www.axosoft.com/downloads/ResxHelper.zip"&gt;download&lt;/A&gt; to anyone who may need it (at the very least it can make for a good sample VS integration package).&lt;/P&gt;
&lt;P&gt;But wait &amp;#8230; there&amp;#8217;s more!&lt;/P&gt;
&lt;P&gt;While we&amp;#8217;re waiting for the Japanese version of our resource file, we know we have to adjust our UI (forms, controls, etc.) to fit the translated strings.&amp;nbsp; We are going to try making adjustments that can hopefully address all (or most) languages, and not have to adjust on a per language basis.&amp;nbsp; So we needed a quick way of testing &lt;A href="http://www.axosoft.com/Products/OnTime.aspx?cn=otm_overview"&gt;OnTime&lt;/A&gt; with different languages to see how it looks and what needs changing.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Well, thanks to Google I&amp;#8217;ve been able to write some code to translate our resource file.&amp;nbsp; The handy VS.NET add-in that I wrote for checking duplicates just got a new feature (and is therefore on version 2.0 ?) that reads the currently open .resx file and translates each string to Spanish, German, French, or Italian.&amp;nbsp; Google supports translation to Japanese, Chinese, and Korean as well, which can be easily supported by the add-in (as a matter of fact it just needs the menu items and function calls with the appropriate language string).&amp;nbsp; The code simply takes each string and posts it to Google&amp;#8217;s translation page - &lt;A href="http://www.google.com/translate_t"&gt;http://www.google.com/translate_t&lt;/A&gt; , then parses the response for the translated string (why does Google not offer an API for translations? &amp;#8211; or did I miss it?).&lt;/P&gt;
&lt;P&gt;All this code is included in the &lt;A href="http://www.axosoft.com/downloads/ResxHelper.zip"&gt;download&lt;/A&gt;, and is hopefully useful to someone out there.&amp;nbsp; Now keep in mind that this code was written for a quick solution to a problem, and not for performance or much usability in mind.&amp;nbsp; It also does not translate properly every string in the resource file, it&amp;#8217;s definitely not intended to replace a proper translating service, but it&amp;#8217;s extremely useful for testing purposes.&amp;nbsp; It can help give you a good idea of how your application looks in a different language.&amp;nbsp; It does the work, which is to translate a resource file to another language for testing-only purposes, though not necessarily in the best way possible.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Quick information about the code:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;written in C# 
&lt;LI&gt;requires .NET 1.1 
&lt;LI&gt;if you want to compile the code you most likely need the VSIP 7.1 SDK (see &lt;A href="http://msdn.microsoft.com/vstudio/extend/"&gt;http://msdn.microsoft.com/vstudio/extend/&lt;/A&gt; ) 
&lt;LI&gt;if you just want to register the package and try/use it (I&amp;#8217;ve included the VSIPRegPkg.exe file that comes with the VSIP SDK): 
&lt;UL&gt;
&lt;LI&gt;&amp;nbsp;from the debug folder run: 
&lt;UL&gt;
&lt;LI&gt;vsipregpkg resexhelper.dll&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;from the VS.NET Common7\IDE folder run: 
&lt;UL&gt;
&lt;LI&gt;devenv /setup&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;I&amp;#8217;m sure you can very easily compile it using .NET 2.0 and run it in VS.2005 
&lt;LI&gt;and most importantly, this&amp;nbsp;code/application is provided as is,&amp;nbsp;Axosoft does not support or promote it&amp;nbsp;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;With that said, you can download the zip file &lt;A href="http://www.axosoft.com/downloads/ResxHelper.zip"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Lastly, I just want to point to a couple of really good links on localization and globalization of .NET applications:&lt;BR&gt;&lt;A href="http://www.agiledeveloper.com/articles/LocalizingDOTNet.pdf"&gt;http://www.agiledeveloper.com/articles/LocalizingDOTNet.pdf&lt;/A&gt;&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbconinternationalapplicationsinvisualbasic.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbconinternationalapplicationsinvisualbasic.asp&lt;/A&gt;&lt;BR&gt;&lt;/P&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=2266" width="1" height="1"&gt;</description></item><item><title>OnTime 2005 for Visual Studio .NET 2005</title><link>http://community.axosoft.com/blogs/dans/archive/2005/08/29/ontime-2005-for-visual-studio-net-2005.aspx</link><pubDate>Mon, 29 Aug 2005 17:12:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:1925</guid><dc:creator>Dan Suceava</dc:creator><slash:comments>1</slash:comments><comments>http://community.axosoft.com/blogs/dans/comments/1925.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/dans/commentrss.aspx?PostID=1925</wfw:commentRss><description>&lt;P&gt;If you are developing in Visual Studio .NET 2005 Beta 2, you will be glad to know that you can now run the latest version of &lt;A href="http://www.axosoft.com/products/ontime.aspx?product=vs"&gt;OnTime 2005 for VS.NET&lt;/A&gt;.&amp;nbsp; Here it is in action:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://localhost/photos/dans/images/3337/488x375.aspx"&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=1925" width="1" height="1"&gt;</description></item><item><title>Nested GroupBox controls bug</title><link>http://community.axosoft.com/blogs/dans/archive/2005/06/30/nested-groupbox-controls-bug.aspx</link><pubDate>Thu, 30 Jun 2005 14:50:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:1824</guid><dc:creator>Dan Suceava</dc:creator><slash:comments>1</slash:comments><comments>http://community.axosoft.com/blogs/dans/comments/1824.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/dans/commentrss.aspx?PostID=1824</wfw:commentRss><description>&lt;P&gt;Another bug that crept up in SP1 of the .Net 1.1 Framework is the nested group box caption problem.&amp;nbsp; The bug is that captions of nested group boxes are rendered in bold and in the space of the caption as if it wasn't bold, thus cutting off the text.&amp;nbsp; You've probably seen it in some application, if not here's a shot of the issue:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://localhost/photos/dans/images/3338/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;Microsoft does not currently have a fix for this problem, but there is a fairly simple solution to it.&amp;nbsp; You can place a panel inside the main group box and place the nested group box inside the panel and dock it.&amp;nbsp; This will make the problem go away.&amp;nbsp; But I don't particularly like this solution, it involves messing around with too many controls on the UI.&amp;nbsp; I was looking for a solution that involves sub-classing the group box control so I could just replace the type name in code.&lt;/P&gt;
&lt;P&gt;Googling around I did not find much along these lines.&amp;nbsp; One post I'd found had some simple code that did not seem to work.&amp;nbsp; So I decided to do it myself.&amp;nbsp; The idea is simple, just overwrite the caption using the right font.&amp;nbsp; This basically involves clearing the background and redrawing the caption.&amp;nbsp; Simple enough, just use &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdrawinggraphicsclassfillrectangletopic.asp"&gt;FillRectangle&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdrawinggraphicsclassfillrectangletopic.asp"&gt;DrawString&lt;/A&gt;&amp;nbsp;and it's all done.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;public class AxoGroupBox : GroupBox&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;private const int WM_PAINT = 0x000F;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;protected override void WndProc(ref Message m)&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;base.WndProc(ref m);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (m.Msg == WM_PAINT)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// get graphics device&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;using (Graphics g = Graphics.FromHwnd(this.Handle))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (g != null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SizeF sz = g.MeasureString(this.Text, this.Font);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Rectangle bounds = new Rectangle(10, 0, (int)sz.Width, (int)sz.Height);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g.FillRectangle(new SolidBrush(this.BackColor), bounds);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), bounds.Left, bounds.Top);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Not so fast!&amp;nbsp; This works fine and dandy unless your application uses visual styles, which is the case with &lt;A href="http://www.axosoft.com/products/ontime.aspx?product=win"&gt;OnTime&lt;/A&gt;.&amp;nbsp; This means we have to deal with the themes because group box captions are drawn in different colors.&amp;nbsp; It turns out to be a little easier than it sounds.&lt;/P&gt;
&lt;P&gt;There's a set of API&amp;nbsp;functions in the uxtheme.dll that allow us to deal with XP themes.&amp;nbsp; But first, we use the &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformsosfeatureclasstopic.asp"&gt;OSFeature&lt;/A&gt; class to find out if themes are supported on the current OS.&amp;nbsp; Next we make sure the application is themed (i.e. the user&amp;nbsp;could be&amp;nbsp;not using themes).&amp;nbsp;Then we start doing whatever we need to do for the theme.&amp;nbsp; In my case I only care about getting the color of the group box caption and I'll use my previous code to re-draw it.&amp;nbsp; If you want to get more involved, you should probably use the &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/userex/functions/drawthemetext.asp"&gt;DrawThemeText&lt;/A&gt; function and all the other Draw functions to have the system do it for you. I decided not to go that far, just needed a simple solution which works in my case.&lt;/P&gt;
&lt;P&gt;So here's my sub-classed group box control:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;using System;&lt;BR&gt;using System.Drawing;&lt;BR&gt;using System.Runtime.InteropServices;&lt;BR&gt;using System.Windows.Forms;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;namespace Axosoft.WinControls&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;public class AxoGroupBox : GroupBox&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;private const int WM_PAINT&amp;nbsp;&amp;nbsp;&amp;nbsp;= 0x000F;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;// part id&lt;BR&gt;&amp;nbsp;&amp;nbsp;private const int BP_GROUPBOX = 4;&lt;BR&gt;&amp;nbsp;&amp;nbsp;// state id&lt;BR&gt;&amp;nbsp;&amp;nbsp;private const int PBS_NORMAL = 1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;// property id&lt;BR&gt;&amp;nbsp;&amp;nbsp;private const int TMT_TEXTCOLOR = 3803;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;[DllImport("uxtheme.dll", ExactSpelling=true, CharSet=CharSet.Unicode)]&lt;BR&gt;&amp;nbsp;&amp;nbsp;public static extern IntPtr OpenThemeData(IntPtr hWnd, String classList);&lt;BR&gt;&amp;nbsp;&amp;nbsp;[DllImport("uxtheme.dll", ExactSpelling=true)]&lt;BR&gt;&amp;nbsp;&amp;nbsp;public extern static Int32 CloseThemeData(IntPtr hTheme);&lt;BR&gt;&amp;nbsp;&amp;nbsp;[DllImport("uxtheme.dll", ExactSpelling=true)]&lt;BR&gt;&amp;nbsp;&amp;nbsp;public extern static int IsAppThemed();&lt;BR&gt;&amp;nbsp;&amp;nbsp;[DllImport("uxtheme.dll", ExactSpelling=true)]&lt;BR&gt;&amp;nbsp;&amp;nbsp;public extern static Int32 GetThemeColor(IntPtr hTheme, int iPartId, int iStateId, int iPropId, out UInt32 pColor);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;protected override void WndProc(ref Message m)&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;base.WndProc(ref m);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (m.Msg == WM_PAINT)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// get graphics device&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;using (Graphics g = Graphics.FromHwnd(this.Handle))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (g != null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Color groupText = this.ForeColor;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// check to see if OS supports themes&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformsfeaturesupportclassispresenttopic.asp"&gt;OSFeature.Feature.IsPresent&lt;/A&gt;(&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformsosfeatureclassthemestopic.asp"&gt;OSFeature.Themes&lt;/A&gt;))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// check to see if the app is using themes&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/userex/functions/isappthemed.asp"&gt;IsAppThemed&lt;/A&gt;() == 1)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// open theme data&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IntPtr td = &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/userex/functions/openthemedata.asp"&gt;OpenThemeData&lt;/A&gt;(this.Handle, "Button");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (td != IntPtr.Zero)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// get text color&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UInt32 clr = 0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/userex/functions/getthemecolor.asp"&gt;GetThemeColor&lt;/A&gt;(td, BP_GROUPBOX, PBS_NORMAL, TMT_TEXTCOLOR, out clr) == 0)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// color is backwards (BGR) =&amp;gt; adjust value&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int iclr = (int)clr;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;groupText = Color.FromArgb(iclr &amp;amp; 0xff, (iclr &amp;amp; 0xff00) &amp;gt;&amp;gt; 8, (iclr &amp;amp; 0xff0000) &amp;gt;&amp;gt; 16);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// close theme data&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/userex/functions/closethemedata.asp"&gt;CloseThemeData&lt;/A&gt;(td);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;catch {}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SizeF sz = g.MeasureString(this.Text, this.Font);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Rectangle bounds = new Rectangle(10, 0, (int)sz.Width, (int)sz.Height);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g.FillRectangle(new SolidBrush(this.BackColor), bounds);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g.DrawString(this.Text, this.Font, new SolidBrush(groupText), bounds.Left, bounds.Top);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;So here it is in action:&lt;/P&gt;&lt;IMG src="http://localhost/photos/dans/images/3339/original.aspx"&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=1824" width="1" height="1"&gt;</description></item><item><title>OnTime with SQL 2005 Beta 2</title><link>http://community.axosoft.com/blogs/dans/archive/2005/05/12/ontime-with-sql-2005-beta-2.aspx</link><pubDate>Thu, 12 May 2005 23:58:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:744</guid><dc:creator>Dan Suceava</dc:creator><slash:comments>1</slash:comments><comments>http://community.axosoft.com/blogs/dans/comments/744.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/dans/commentrss.aspx?PostID=744</wfw:commentRss><description>It's not officially supported yet&amp;nbsp;because we have not fully tested it, but we did successfully run OnTime 2005 with a SQL 2005 Beta 2 database.&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=744" width="1" height="1"&gt;</description></item><item><title>Update on the DataTable.Select Bug</title><link>http://community.axosoft.com/blogs/dans/archive/2005/05/12/update-on-the-datatable-select-bug.aspx</link><pubDate>Thu, 12 May 2005 23:48:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:742</guid><dc:creator>Dan Suceava</dc:creator><slash:comments>0</slash:comments><comments>http://community.axosoft.com/blogs/dans/comments/742.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/dans/commentrss.aspx?PostID=742</wfw:commentRss><description>&lt;P&gt;Well, it appears that Microsoft's hotfix (&lt;A href="http://support.microsoft.com/default.aspx?scid=kb;en-us;891742"&gt;891742&lt;/A&gt;)&amp;nbsp;did not fix the bug entirely.&amp;nbsp; It seems to have fixed it when calling DataTable.Select with only the select filter parameter, but when using both a select filter and a sort paramter it still does not work.&amp;nbsp; In some cases the filtering doesn't work, in others the sorting doesn't work.&lt;/P&gt;
&lt;P&gt;Consider the code from my &lt;A href="http://blogs.axosoft.com/dans/archive/2005/05/02/665.aspx"&gt;previous post&lt;/A&gt;, but with a couple more rows of data:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataSet ds = new DataSet();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataTable dt = new DataTable();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt.Columns.Add("ID", typeof(int));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt.Columns.Add("Name", typeof(string));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt.Columns.Add("Exists", typeof(bool));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ds.Tables.Add(dt);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataRow dr = dt.NewRow();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr[0] = 1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr[1] = "Name 1";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr[2] = true;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt.Rows.Add(dr);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr = dt.NewRow();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr[0] = 2;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr[1] = "Name 2";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr[2] = false;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt.Rows.Add(dr);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr = dt.NewRow();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr[0] = 3;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr[1] = "Name 3";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr[2] = true;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt.Rows.Add(dr);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr = dt.NewRow();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr[0] = 4;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr[1] = "Name 4";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr[2] = false;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt.Rows.Add(dr);&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;The following call sorts properly, but does not filter (should return no rows but it returns 2):&lt;BR&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataRow[] drs = ds.Tables[0].Select("((ID in (1,2,3,4))) AND ((Exists = 1)) AND (Exists = 0)", "ID DESC");&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;And this call filters ok, but does not sort properly:&lt;BR&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataRow[] drs = ds.Tables[0].Select("(ID in (1,2,3,4)) AND (Exists = 1)", "Name DESC");&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Although same call but sorting by ID works fine:&lt;BR&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataRow[] drs = ds.Tables[0].Select("(ID in (1,2,3,4)) AND (Exists = 1)", "ID DESC");&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Hopefully Microsoft has already fixed this, I'm waiting on a response from them.&lt;/P&gt;
&lt;P&gt;There is another workaround we are contemplating, and that is using DataView.RowFilter and DataView.Sort.&amp;nbsp; Filtering and sorting through the view seems to work just fine.&lt;/P&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=742" width="1" height="1"&gt;</description></item><item><title>DataTable.Select Bug</title><link>http://community.axosoft.com/blogs/dans/archive/2005/05/02/datatable-select-bug.aspx</link><pubDate>Mon, 02 May 2005 15:36:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:665</guid><dc:creator>Dan Suceava</dc:creator><slash:comments>9</slash:comments><comments>http://community.axosoft.com/blogs/dans/comments/665.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/dans/commentrss.aspx?PostID=665</wfw:commentRss><description>&lt;P&gt;It seems that we've stumbled upon a bug in the DataTable.Select method.&amp;nbsp; I've been able to reproduce it but it only seems to occur when the select filter is formatted in a specific way.&amp;nbsp; Here is the code to reproduce it:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataSet ds = new DataSet();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataTable dt = new DataTable();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt.Columns.Add("ID", typeof(int));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt.Columns.Add("Name", typeof(string));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt.Columns.Add("Exists", typeof(bool));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ds.Tables.Add(dt);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataRow dr = dt.NewRow();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr[0] = 1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr[1] = "Name 1";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr[2] = true;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt.Rows.Add(dr);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr = dt.NewRow();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr[0] = 2;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr[1] = "Name 2";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr[2] = false;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt.Rows.Add(dr);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataRow[] drs = ds.Tables[0].Select("((ID in (1,2))) AND ((Exists = 1)) AND (Exists = 0)", "ID");&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Even though this should return no rows, it actually returns one. The problem seems to be that the second condition (Exists = 1) is ignored, and only the first and third conditions get evaluated.&amp;nbsp; The only way this occurs is when both the first and second conditions are surrounded by more than one set of parenthesis.&lt;/P&gt;
&lt;P&gt;Obviously the workaround is to get rid of the unnecessary parenthesis, however it does seem to be a bug that could cause nasty problems.&lt;/P&gt;
&lt;P&gt;It looks like it has been fixed by Microsoft, and they have a hotfix that will fix this problem (I have verified it).&amp;nbsp; The only problem is that you cannot just download this hotfix, you have to call them up and have them e-mail it.&amp;nbsp; This is the knowledge base article: &lt;A href="http://support.microsoft.com/default.aspx?scid=kb;en-us;891742"&gt;http://support.microsoft.com/default.aspx?scid=kb;en-us;891742&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=665" width="1" height="1"&gt;</description></item><item><title>Enabling VS.Net Web Setup Projects to install to a non-default web site</title><link>http://community.axosoft.com/blogs/dans/archive/2005/04/06/enabling-vs-net-web-setup-projects-to-install-to-a-non-default-web-site.aspx</link><pubDate>Wed, 06 Apr 2005 23:30:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:502</guid><dc:creator>Dan Suceava</dc:creator><slash:comments>0</slash:comments><comments>http://community.axosoft.com/blogs/dans/comments/502.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/dans/commentrss.aspx?PostID=502</wfw:commentRss><description>&lt;P&gt;By default Web Setup Projects created in VS.Net do not have an option of selecting a web site, only a virtual directory and a port.&amp;nbsp; So a web application can only be installed in the default web site, or a web site that uses a different port.&amp;nbsp; It cannot install to non-default web sites that use host headers.&amp;nbsp; According to Microsoft, and depending on which&amp;nbsp;news groups&amp;nbsp;you read, this was either done by design, or it was an 'oversight' on their part.&lt;/P&gt;
&lt;P&gt;However, they did eventually release a fix for this in the form of a replacement DLL and a script that modifies the .msi file.&amp;nbsp; Not the best solution, but a solution nontheless.&amp;nbsp; Here's the link to the knowledge base article:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://support.microsoft.com/default.aspx?scid=kb;en-us;821335"&gt;http://support.microsoft.com/default.aspx?scid=kb;en-us;821335&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=502" width="1" height="1"&gt;</description></item><item><title>Rubberbanding in .NET</title><link>http://community.axosoft.com/blogs/dans/archive/2005/04/04/rubberbanding-in-net.aspx</link><pubDate>Mon, 04 Apr 2005 14:39:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:482</guid><dc:creator>Dan Suceava</dc:creator><slash:comments>3</slash:comments><comments>http://community.axosoft.com/blogs/dans/comments/482.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/dans/commentrss.aspx?PostID=482</wfw:commentRss><description>&lt;P&gt;'Rubberbanding' refers to the effect that occurs when you draw a shape (line, rectangle, ellipse, etc.) on the screen and the shape resizes/moves as you move the mouse.&amp;nbsp; As the name implies, it acts like a rubber band following and stretching as you move the mouse.&amp;nbsp; This is common in any graphics utility where you draw a shape or select any part of an image (selection tool).&lt;/P&gt;
&lt;P&gt;The theory behind implementing rubberbanding is fairly simple, you just draw the shape on top of the image and then erase it as the mouse moves.&amp;nbsp; So you first draw the shape in the starting position, and as the mouse moves you erase the shape at the old position and draw it at the new position.&amp;nbsp; Simple enough ... but ... when you erase the shape how do you restore the image that you drew on top of?&amp;nbsp; Well, this is where XOR comes into play.&amp;nbsp; When you draw the shape, you XOR it on top of the image, and when you want to erase it, you just XOR it again which will delete it (remember the good ol' XOR? ... T x T = F, T x F = T, F x T = T, F x F = F).&lt;/P&gt;
&lt;P&gt;Using MFC this was fairly simple, you would just call the CDC class' &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cdc.3a3a.setrop2.asp"&gt;SetROP2&lt;/A&gt; method with R2_XORPEN as the parameter value.&amp;nbsp; This would enable XORing on the pixels so we could easily implement rubberbanding.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;.NET does not support XOR for drawing.&amp;nbsp; However, it turns out that implementing a rubberbanding line or rectangle is easier (almost),&amp;nbsp;because it is implemented for us in a class in the System.Windows.Forms namespace called &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformscontrolpaintclasstopic.asp"&gt;ControlPaint&lt;/A&gt;.&amp;nbsp; This class has two methods for drawing 'reversible' lines and frames (rectangles)&amp;nbsp;called ... &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformscontrolpaintclassdrawreversiblelinetopic.asp"&gt;DrawReversibleLine&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformscontrolpaintclassdrawreversibleframetopic.asp"&gt;DrawReversibleFrame&lt;/A&gt;.&amp;nbsp; What these methods do is allow you to, on the first call, draw the line or frame, and on the second call erase the line or frame.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Simple enough ... but ... there is a small problem.&amp;nbsp; These calls work with screen coordinates and are not restricted to just your form (or any one form).&amp;nbsp; When you draw with these methods you'll notice that it just draws them on the screen across forms.&amp;nbsp; Fortunately that can be fixed by clipping the cursor with a call to &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformscursorclasscliptopic.asp"&gt;Cursor.Clip&lt;/A&gt; to make sure the mouse movement is restricted to your form (or any region) only.&amp;nbsp; The other drawback of these calls is that, since the line or frame is not drawn onto your image/form, when the form is refreshed the rubberband gets erased.&amp;nbsp; So if you draw the rubberband, you minimize the form and then restore it, the rubberband is gone.&lt;/P&gt;
&lt;P&gt;For simple rubberbanding needs, these two methods do the work (with a little bit of care on your part).&lt;/P&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=482" width="1" height="1"&gt;</description></item><item><title>Tips &amp; Tricks of the OnTime Guru - Changing the SMTP assembly</title><link>http://community.axosoft.com/blogs/dans/archive/2005/03/29/tips-tricks-of-the-ontime-guru-changing-the-smtp-assembly.aspx</link><pubDate>Tue, 29 Mar 2005 13:57:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:440</guid><dc:creator>Dan Suceava</dc:creator><slash:comments>1</slash:comments><comments>http://community.axosoft.com/blogs/dans/comments/440.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/dans/commentrss.aspx?PostID=440</wfw:commentRss><description>&lt;P&gt;By default, OnTime uses a built-in SMTP client to send out e-mail notifications.&amp;nbsp; The advantage of this is that it does not rely on any 3rd party SMTP library and it's very light-weight, but the disatvantage is that it's not as configurable as some SMTP servers may require it to be.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The .Net framework also has built-in support for sending e-mails through the System.Web.Mail namespace, but it relies on the CDOSYS component.&amp;nbsp; Some systems may not necessarily have CDO installed by default which makes using it less desirable.&lt;/P&gt;
&lt;P&gt;OnTime 2005 uses pluggable assemblies for the SMTP code so that it does not rely on a particular implementation to send out e-mail notifications.&amp;nbsp; OnTime ships with both the built-in support for SMTP, as well as a CDO implementation, and by default it uses the built-in SMTP code so that it does not have to rely&amp;nbsp;on CDO being installed.&amp;nbsp; Each implementation is contained in its own assembly, and these assemblies are installed in the \Plugins\Mail subfolder of the main installation folder.&amp;nbsp; Which assembly OnTime uses is controlled through a value of a column in one of the tables in the database.&amp;nbsp; That is the 'SmtpAssembly' field in the 'NotificationSettings' table.&lt;/P&gt;
&lt;P&gt;So, if you are having problems with e-mail notifications with the default implementation, you may try switching to the CDO implementation (assuming you have CDO installed) by going into the 'NotificationSettings' table in the OnTime database and modifying the 'SmtpAssembly' field to the appropriate assembly name: 'Axosoft.Common.CDO.dll'.&amp;nbsp; The default value in this field should be 'Axosoft.Common.Smtp.dll'.&amp;nbsp; You will have to restart OnTime for the change to take place.&lt;/P&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=440" width="1" height="1"&gt;</description></item><item><title>Sending big files</title><link>http://community.axosoft.com/blogs/dans/archive/2005/03/16/sending-big-files.aspx</link><pubDate>Wed, 16 Mar 2005 17:28:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:350</guid><dc:creator>Dan Suceava</dc:creator><slash:comments>2</slash:comments><comments>http://community.axosoft.com/blogs/dans/comments/350.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/dans/commentrss.aspx?PostID=350</wfw:commentRss><description>&lt;P&gt;Email servers usually have a limit of between 5MB - 10MB for attachments (even Gmail's limit is 10MB).&amp;nbsp; So what do you do if you need to send 100MB+ files?&amp;nbsp; For free?&lt;/P&gt;
&lt;P&gt;Use &lt;A href="http://www.yousendit.com"&gt;http://www.yousendit.com&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Very simple and straightforward web site.&amp;nbsp; Just enter the e-mail address and select the file.&amp;nbsp; Up to 1G files.&amp;nbsp; Free.&lt;/P&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=350" width="1" height="1"&gt;</description></item><item><title>Writing White Papers</title><link>http://community.axosoft.com/blogs/dans/archive/2005/03/16/writing-white-papers.aspx</link><pubDate>Wed, 16 Mar 2005 14:19:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:349</guid><dc:creator>Dan Suceava</dc:creator><slash:comments>2</slash:comments><comments>http://community.axosoft.com/blogs/dans/comments/349.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/dans/commentrss.aspx?PostID=349</wfw:commentRss><description>&lt;P&gt;I found myself needing to write some white papers to describe and explain some things for prospective customers of OnTime.&amp;nbsp; Coming from a technical background hardly qualifies me as a writer, but I have written papers, documentation,&amp;nbsp;and manuals&amp;nbsp;in the past, so how hard can a white paper be?&lt;/P&gt;
&lt;P&gt;I've found a pretty good site (in my opinion) that describes how to write a good white paper: &lt;A href="http://www.stelzner.com/copy-HowTo-whitepapers.php"&gt;http://www.stelzner.com/copy-HowTo-whitepapers.php&lt;/A&gt;&amp;nbsp; It's actually a white paper on writing white papers, the website of a consulting firm whose business is to write white papers.&amp;nbsp; They give you a sampling of their white paper, but you can request the whole document and they'll send it to you for free.&amp;nbsp; And they have a link to some nice samples that they have done.&amp;nbsp; Now, if you read the whole thing, they describe how to write a white paper, but according to them, only a 'white paper specialist' can write good white papers.&amp;nbsp; May be true.&lt;/P&gt;
&lt;P&gt;Anyways, what I found is that at its core, a white paper is fairly simple conceptually.&amp;nbsp; A simple white paper is made up of three sections:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Describe the problem you want to address&lt;/LI&gt;
&lt;LI&gt;Describe the solution to the problem&lt;/LI&gt;
&lt;LI&gt;Describe how your product is (or helps with) that solution&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Simple enough.&amp;nbsp; From here just start writing out the details of each section.&amp;nbsp; That's the hard part, and there's no formula for that.&amp;nbsp; Once you've done the writing, just format it and lay it out nicely, add some nice diagrams or pictures and you're done.&lt;/P&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=349" width="1" height="1"&gt;</description></item><item><title>Preventive Patching vs Reactive Patching</title><link>http://community.axosoft.com/blogs/dans/archive/2004/03/03/preventive-patching-vs-reactive-patching.aspx</link><pubDate>Thu, 04 Mar 2004 00:11:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:167</guid><dc:creator>Dan Suceava</dc:creator><slash:comments>1</slash:comments><comments>http://community.axosoft.com/blogs/dans/comments/167.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/dans/commentrss.aspx?PostID=167</wfw:commentRss><description>&lt;P&gt;When it comes to applying patches for software, you can either stay up to date with&amp;nbsp;them and apply the patches as they become available - preventive, or you can just ignore the patches and if you happen to run into any problems apply patches that you think might fix the problem - reactive.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;When it comes to Windows (or OS in general) and Virus scanning software, I think most people are preventive, and I would sure hope most companies are as well.&amp;nbsp; You need to keep up with all the security patches, and with all the viruses popping up every day you certainly want to update your virus software.&amp;nbsp; Bottom line, I think when it comes to security most people will keep up with updates/patches.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;Now, what I think may be a problem, and I'm not sure if this is true, just what I've seen, is that most other software patches are reactively installed.&amp;nbsp; Why is that?&amp;nbsp; Well, because most people probably are the opinion that 'if it ain't broke don't fix it'.&amp;nbsp; I certainly am that way with most software.&amp;nbsp; I never install the latest video drivers unless I have problems.&amp;nbsp; I never patch any software if I don't have to.&amp;nbsp; And this may be even more true for companies running production environments.&amp;nbsp; They certainly don't want to install patches that &lt;EM&gt;may&lt;/EM&gt; break code/software running on that system.&amp;nbsp; If the system is working, and everything is working why waste time/money and potentially break things on that system.&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;While this seems to be true, I'm not sure I like it.&amp;nbsp; If you later run into any problems, I guarantee you waste more time/money on trying to figure out what the problem is and&amp;nbsp;what patches you need to install.&amp;nbsp; And then you need to keep track of what patches you have and you haven't installed in case you need to replicate the system.&amp;nbsp; And most likely at some point in time you will have to install patches, at which point you will have to fix code if it breaks.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;If you are preventively installing patches, if something breaks you can just roll back the patch.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;Most patches I&amp;#8217;ve seen can be uninstalled.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;You can, at this point, take the time, at your leisure, to fix whatever issues you have and re-install the patch once everything&amp;#8217;s working.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&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;If you are reactively installing patches, it means you are fixing something that&amp;#8217;s already broken.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;At this point, if you introduce new problems, you&amp;#8217;re in trouble either way.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;Uninstall the patch and you still have your original issue, or take the time right then and there to fix the new issues.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;If you are having new problems, what do you do, do you try to find which patch fixes that particular issue and only install that patch, or do you just install all of them to make sure you&amp;#8217;re up to date? &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;If you&amp;#8217;re only installing patches that fix certain issues, you&amp;#8217;ll have to keep track of what patch was installed for what issue in case you need to replicate/rebuild the system.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;If you decide to install all patches you could potentially aggregate multiple issues that each patch could be causing (rather than dealing with each patch individually as it gets released and installed).&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;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;I think I&amp;#8217;m leaning more towards the preventive way.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;Reactive, while seems good at the time, it can be messy when it hits you all at once.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;It can be real bad when you deal with software that has lots of patches (*caugh* Crystal *caugh*).&amp;nbsp; And what's &lt;/o:p&gt;&lt;/o:p&gt;even worse is when you have multiple environments and you don&amp;#8217;t keep track of what patches were installed where.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;Sometimes some issues appear in one environment and not another, and you may forget to apply patches to environments that don&amp;#8217;t necessarily need them.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;You preventively install up-to-date patches and you wouldn&amp;#8217;t have this problem, me thinks!&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;o:p&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;/o:p&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=167" width="1" height="1"&gt;</description></item><item><title>So you wanna bypass the firewall ...</title><link>http://community.axosoft.com/blogs/dans/archive/2004/02/24/so-you-wanna-bypass-the-firewall.aspx</link><pubDate>Tue, 24 Feb 2004 17:46:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:159</guid><dc:creator>Dan Suceava</dc:creator><slash:comments>2</slash:comments><comments>http://community.axosoft.com/blogs/dans/comments/159.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/dans/commentrss.aspx?PostID=159</wfw:commentRss><description>&lt;P&gt;Ya gotta love Google.&lt;/P&gt;
&lt;P&gt;You ever buy a Powerball ticket and you sit at work wondering if you're the newest millionaire and you could be in the Bahamas on the beach instead of being at work?&amp;nbsp; So you exitedly bring up IE and type in &lt;A href="http://www.powerball.com"&gt;www.powerball.com&lt;/A&gt; and ... you get the nice page that informs you that the web page is blocked.&amp;nbsp; Boy that sucks!&amp;nbsp; Especially considering that you're a&amp;nbsp;millionaire and you don't even know it.&lt;/P&gt;
&lt;P&gt;Well, worry no more!&amp;nbsp; Apparently, at least here where I work, the software they're using for blocking sites (at least I assume it's software) will allow you to view Google Cached sites.&amp;nbsp; Just search for 'powerball winning numbers' and view the cached version. There ya go, now you can leave for the Bahamas on the next flight.&lt;/P&gt;
&lt;P&gt;Yah, might not be news for most, but it certainly was news to me ... and if you knew, you never told me.&amp;nbsp; Thanks fer nut'n!&amp;nbsp; And, no, I did not, and will not, try porn sites.&amp;nbsp; That can wait till I get home.&lt;/P&gt;
&lt;P&gt;Question is, how old is the cache? (too lazy to look at Google's info) ...&lt;/P&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=159" width="1" height="1"&gt;</description></item><item><title>The Beginning ...</title><link>http://community.axosoft.com/blogs/dans/archive/2004/02/20/the-beginning.aspx</link><pubDate>Fri, 20 Feb 2004 19:52:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:155</guid><dc:creator>Dan Suceava</dc:creator><slash:comments>1</slash:comments><comments>http://community.axosoft.com/blogs/dans/comments/155.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/dans/commentrss.aspx?PostID=155</wfw:commentRss><description>&lt;P&gt;OK, so I said I'd never blog.&amp;nbsp; I guess I lied.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I still believe that bloggers are bogging down my internet connection (now you know where the term b[L]og came from)&amp;nbsp; and are no-good doers ... but oh well, now I'm just one of them.&amp;nbsp; I'll just have to see if I got anything to say.&lt;/P&gt;
&lt;P&gt;And all this thanks to my friend &lt;A href="http://blogs.axosoft.com/hamids/"&gt;Hamid &lt;/A&gt;who pretty much forced me into this by setting this blog up for me to use.&amp;nbsp; What an evil thing to do, just because I needed one little, tiny page hosted.&amp;nbsp; And thanks to my friend &lt;A href="http://blogs.geekdojo.net/justin/"&gt;Justin&lt;/A&gt; who didn't help and has been lagging my games down with his blogs for quite a while.&lt;/P&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=155" width="1" height="1"&gt;</description></item></channel></rss>

