<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" 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/"><channel><title>Omar Shahine's WebLog : dasBlog</title><link>http://blogs.msdn.com/omars/archive/tags/dasBlog/default.aspx</link><description>Tags: dasBlog</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>dasBlog Security Advisories</title><link>http://blogs.msdn.com/omars/archive/2005/03/06/386242.aspx</link><pubDate>Mon, 07 Mar 2005 05:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:386242</guid><dc:creator>omars</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/omars/comments/386242.aspx</comments><wfw:commentRss>http://blogs.msdn.com/omars/commentrss.aspx?PostID=386242</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://www.leastprivilege.com"&gt;Dominick Baier&lt;/A&gt; has posted two security bullitens for dasBlog:&lt;/P&gt;
&lt;P&gt;&lt;A class=TitleLinkStyle href="http://www.leastprivilege.com/PermaLink.aspx?guid=332810dc-9662-464c-8cc3-7a1751bfe376"&gt;Security Advisory: Log File Path Predictability in dasBlog Community Edition&lt;/A&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;This issue may or may not affect you. On my host, this does not occur as they lock down /logs from anon users.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;A class=TitleLinkStyle href="http://www.leastprivilege.com/PermaLink.aspx?guid=5833d37f-7f87-40c0-bd4d-9a329970179e"&gt;Security Advisory : New XSS Vulnerability in dasBlog Community Edition&lt;/A&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;This issue was fixed in the &lt;A href="http://sourceforge.net/project/showfiles.php?group_id=127624&amp;amp;package_id=139759&amp;amp;release_id=306915"&gt;latest version&lt;/A&gt; of dasBlog.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;Special thanks to Dominick for his work in this area.&lt;/P&gt;&lt;img width="0" height="0" src="http://www.shahine.com/omar/cptrk.ashx?id=a884eb80-5934-49ca-81d7-0a79bb5dd818"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=386242" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/omars/archive/tags/dasBlog/default.aspx">dasBlog</category></item><item><title>dasBlog 1.7.5016.2 released</title><link>http://blogs.msdn.com/omars/archive/2005/02/22/377796.aspx</link><pubDate>Tue, 22 Feb 2005 12:08:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:377796</guid><dc:creator>omars</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/omars/comments/377796.aspx</comments><wfw:commentRss>http://blogs.msdn.com/omars/commentrss.aspx?PostID=377796</wfw:commentRss><description>&lt;P&gt;We've released dasBlog 1.7.5016.2. This is a release to address almost every bug that was reported since releasing 1.7.5016.1. There is an important &lt;A href="http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1119057&amp;amp;group_id=127624&amp;amp;atid=709018"&gt;Cross Site Security Vulnerability&lt;/A&gt; fix in this release and it's recommended that everyone upgrade.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://wiki.shahine.com/default.aspx/DasBlog.ReleaseNotesOnePointSeven"&gt;Release Notes&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://wiki.shahine.com/default.aspx/DasBlog.VersionOnePointSeven"&gt;Version History&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://sourceforge.net/project/showfiles.php?group_id=127624&amp;amp;package_id=139759&amp;amp;release_id=306915"&gt;Download&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;If you are running 1.7 already, the upgrade is a good old xcopy. It's important to note that there is a potential breaking change. If your homeTemplate.blogtemplate file contains the macro &amp;lt;%titleList%&amp;gt; you need to rename it to &amp;lt;%titleList()%&amp;gt;.&lt;/P&gt;
&lt;P&gt;Enjoy! Thanks to all the folks that helped make this release happen (including everyone that tool the time to report bugs/problems).&lt;/P&gt;&lt;img width="0" height="0" src="http://www.shahine.com/omar/cptrk.ashx?id=f8402959-0d60-4809-bea1-35ec486248c9"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=377796" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/omars/archive/tags/dasBlog/default.aspx">dasBlog</category></item><item><title>dasBlog 1.7 questions and answers</title><link>http://blogs.msdn.com/omars/archive/2005/01/22/358554.aspx</link><pubDate>Sat, 22 Jan 2005 12:08:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:358554</guid><dc:creator>omars</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/omars/comments/358554.aspx</comments><wfw:commentRss>http://blogs.msdn.com/omars/commentrss.aspx?PostID=358554</wfw:commentRss><description>&lt;P&gt;First of all, the community reaction to dasBlog Community Edition 1.7 has been great! I’m delighted that people have been able to move with little trouble. However, a number of folks have asked some questions and I’d like to answer some of those.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Question&lt;/STRONG&gt;:&amp;nbsp;What happened to the &lt;STRONG&gt;Attachment&lt;/STRONG&gt; feature, and what is this new &lt;STRONG&gt;Enclosure&lt;/STRONG&gt; feature?&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Answer&lt;/STRONG&gt;: in previous versions of dasBlog there was a way to Attach files etc to a post. However, all this did was move the file from your desktop to your /binary folder and adds a link to the &lt;STRONG&gt;content&lt;/STRONG&gt; of an entry. I never thought this was very useful. Furthermore, dasBlog never utilised the &lt;STRONG&gt;enclosure&lt;/STRONG&gt; feature of RSS. I decided it was high time we actually make this feature useful, and support RSS enclosure. However, RSS enclosure only allows for a &lt;A href="http://blogs.law.harvard.edu/tech/rss"&gt;single enclosure per RSS item&lt;/A&gt;. My goal was to also allow the old functionality, and support a true &lt;EM&gt;n &lt;/EM&gt;number of attachments but only expose a single one as the RSS enclosure, but I never finished this work. Expect it in the next version.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Question&lt;/STRONG&gt;: What happened to the image upload feature?&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Answer&lt;/STRONG&gt;: Since FreeTextBox has a nice image upload feature via the Gallery I assumed this was good enough for folks and I removed the duplicate functionality in upload image. Well, a number of folks have expressed that they miss the old feature. Expect this to come back in the .2 version of 1.7, and in 1.8 expect a better image upload feature that allows you to store all the images/attachments per Entry in a guid based folder in the /binary folder. I’ve wanted this for a while as I have tons of stuff in my /binary folder that’s orphaned.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Question&lt;/STRONG&gt;: The directions for uploading are a bit confusing, can you clear this up?&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Answer&lt;/STRONG&gt;: I reworked them a bit as I got plenty of feedback that it was confusing. I’ve placed them in the &lt;A href="http://wiki.shahine.com/default.aspx/DasBlog.ReleaseNotesOnePointSeven"&gt;Release Notes&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Question&lt;/STRONG&gt;: How do these new anti-spam feature work, and how do I turn them on?&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Answer&lt;/STRONG&gt;: dasBlog 1.7 has 4 major anti-spam features. They are all disabled by default, and you need to enable them in your Configuration. When enabled there is an additional option to send an HTTP 404 Status Code to blocked referrers, dropping the connection and not wasting any server resources on the referral.&lt;/P&gt;
&lt;P&gt;1. CAPTCHA for Comments&lt;/P&gt;
&lt;P&gt;This feature will force users to prove that they are human via a proof. The proof is that you mist enter a 6 character series of digits and numbers in the CommentView page before the Comment will be accepted. The aim of this is to prevent automation of comment entry.&lt;/P&gt;
&lt;P&gt;2. MovableType Blacklist Support&lt;/P&gt;
&lt;P&gt;dasBlog includes support for the &lt;A href="http://www.jayallen.org/comment_spam/"&gt;MovableType Blacklist&lt;/A&gt; by Jay Allen. This will prevent referrals and comments from any domain that is listed in the &lt;A href="http://www.jayallen.org/comment_spam/blacklist.txt"&gt;blacklist.txt&lt;/A&gt; file. When enabled, dasBlog will attempt to download this file in the Application Start method, or when enabled from the Configuration page. At most the file is downloaded once per day, and will also be downloaded whenever your ISP sets your ASP.NET worker process to recycle.&lt;/P&gt;
&lt;P&gt;3. Content based Blacklist&lt;/P&gt;
&lt;P&gt;dasBlog will also filter out any domain from referrals or comments based on keywords that you can enter in the Configuration Page. You should place the entire domain, or any subset of that domain separated by a semi-colon. For example, “foo;bar;foo.com;bar.com”.&lt;/P&gt;
&lt;P&gt;4. IP Blacklist&lt;/P&gt;
&lt;P&gt;The IP Blacklist must be enabled from the Web.config section (httpModules)&amp;nbsp;since it operates as an HttpModule. The list of the IP addresses to block is located in the blockedips.config file in your SiteConfig folder.&lt;/P&gt;
&lt;P align=left&gt;&lt;STRONG&gt;Question&lt;/STRONG&gt;: Will you add support for &lt;A href="http://www.sixapart.com/pronet/2005/01/introduction_to.html"&gt;rel=nofollow&lt;/A&gt;?&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Answer&lt;/STRONG&gt;: Yes, this is checked in and will be in .2. It will only be used for Referrals, not for Trackbacks or Pingbacks. If it becomes a problem for Trackbacks and Pingbacks I will add support for this as well. dasBlog does not render html tags from comments so there is nothing to do there.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Question&lt;/STRONG&gt;: I’ve found a bug or have a feature request, where do I send them?&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Answer&lt;/STRONG&gt;: Please enter them into SourceForge&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://sourceforge.net/tracker/?group_id=127624&amp;amp;atid=709018"&gt;Bugs&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://sourceforge.net/tracker/?atid=709021&amp;amp;group_id=127624&amp;amp;func=browse"&gt;Feature Suggestions&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Question&lt;/STRONG&gt;: When will bug x be fixed?&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Answer&lt;/STRONG&gt;: In about a month we will fix the highest priority bugs in a Service Release. This will be the .2 version of 1.7.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Question&lt;/STRONG&gt;: I have some code I would like to contribute, but I don’t want or know how to join the project.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Answer&lt;/STRONG&gt;: Just zip the code and send it to me. You can get the code from &lt;A href="http://sourceforge.net/cvs/?group_id=127624"&gt;CVS Anonymously&lt;/A&gt;.&lt;/P&gt;&lt;img width="0" height="0" src="http://www.shahine.com/omar/cptrk.ashx?id=fc26ffb4-7e62-4c23-bc49-babd97b77f1b"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=358554" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/omars/archive/tags/dasBlog/default.aspx">dasBlog</category></item><item><title>dasBlog 1.7 released</title><link>http://blogs.msdn.com/omars/archive/2005/01/19/355764.aspx</link><pubDate>Wed, 19 Jan 2005 12:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:355764</guid><dc:creator>omars</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/omars/comments/355764.aspx</comments><wfw:commentRss>http://blogs.msdn.com/omars/commentrss.aspx?PostID=355764</wfw:commentRss><description>&lt;p&gt;Well, I'm a bit late to the party... but as Scott &lt;a href="http://www.hanselman.com/blog/PermaLink,guid,6d174017-ac18-43fb-a747-bd46e0be3e91.aspx"&gt;announced&lt;/a&gt;, dasBlog 1.7 is finished. There are numerous and substantial improvements in this version. Some of them were done months ago, and the most substantial came in the last 2 months as Scott and I feverishly whipped dasBlog into a fast asp.net app. We hope we've also given folks the tools to help combat referral and comment spam.&lt;/p&gt; &lt;p&gt;Anyhoo, here is the 411:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;dasBlog is no longer hosted on GotDotNet, and has&amp;nbsp;&lt;a href="http://sourceforge.net/projects/dasblogce"&gt;new home&lt;/a&gt; at SourceForge.net. Using CVS as source control actually makes it a joy to check in code to dasBlog. &lt;li&gt;&lt;a href="http://wiki.shahine.com/default.aspx/DasBlog.VersionOnePointSeven"&gt;New Features&lt;/a&gt; &lt;li&gt;&lt;a href="http://wiki.shahine.com/default.aspx/DasBlog.ReleaseNotesOnePointSeven"&gt;Release Notes&lt;/a&gt; &lt;li&gt;YOU MUST UPGRADE your content folder. This is *not* and XCOPY deployment. There were two major bugs fixed in the dasBlog runtime that require that the dasBlog files be rebuilt. Unfortunately there was no avoiding this. Read the instructions in the DasBlogUpgrader download. &lt;li&gt;For most other details see the &lt;a href="http://wiki.shahine.com/default.aspx/DasBlog.HomePage"&gt;wiki&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Anyway, I learned a lot about asp.net, programming and dasBlog working on this release. It was really fun and I look forward to working on 1.8 :-).&lt;/p&gt; &lt;p&gt;Some of my favorite 1.7 features&lt;/p&gt; &lt;ul&gt; &lt;li&gt;All the search bot referrals to your site are "pretty printed" in your logs &lt;li&gt;CAPTCHA for entering comments &lt;li&gt;MovableType Blacklist and Content based Blacklist for visitors to the site &lt;li&gt;&lt;%ReferralListFiltered()%&gt;Macro that will shrink the number of referrals displayed in the Permalink and expose the rest using javascript and css. &lt;li&gt;Performance &lt;li&gt;Lots of smart Caching &lt;li&gt;Trackbacks/Pingbacks work reliably.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;update:&lt;/font&gt;&lt;/strong&gt; if you happen to use dasBlog to do any CrossPosting (post to another blog from dasBlog) DO NOT CrossPost in 1.7. I just found a bug that causes dupes. If you want a fix and can't wait for .2 (which will of course fix these types of things) leave a comment and I will send you an updated patch (one dll).&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=355764" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/omars/archive/tags/dasBlog/default.aspx">dasBlog</category></item><item><title>Referral Spam and Movable Type Blacklist</title><link>http://blogs.msdn.com/omars/archive/2005/01/10/349793.aspx</link><pubDate>Mon, 10 Jan 2005 17:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:349793</guid><dc:creator>omars</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/omars/comments/349793.aspx</comments><wfw:commentRss>http://blogs.msdn.com/omars/commentrss.aspx?PostID=349793</wfw:commentRss><description>&lt;P&gt;Well, just in time for a wave of referral spam that is hitting my blog (mostly from &lt;A href="http://www.ownsthis.com/"&gt;http://www.ownsthis.com&lt;/A&gt;) I spent part of today writing a class that can consume the &lt;A href="http://www.jayallen.org/comment_spam/"&gt;Movable Type Blacklist&lt;/A&gt;. The class will allow you to download this file from the server periodically (no more than once a day). I have written it such that anyone can integrate this into their .Net blogging package, or any other .Net program. I just checked this into the dasBlog 1.7 tree. The nice thing about this is that the Blacklist is maintained in real time, and you won't have to rely just on content filtering (the stuff that &lt;A href="http://www.hanselman.com/blog/"&gt;Scott&lt;/A&gt; did) but you'll get a pretty long and decent blacklist of bad sites. So far, in the past few hours I've gotten 100% of the referral spam and no false positives...&lt;/P&gt;
&lt;P&gt;We are a few days away from releasing the final version of dasBlog 1.7. A &lt;A href="http://www.jeffsandquist.com/PermaLink,guid,acc1ffe6-9f38-465c-89cf-2b3e184e4c88.aspx"&gt;very&lt;/A&gt; &lt;A href="http://blog.seanalexander.com/PermaLink,guid,13727c0a-e1be-415b-8d25-dc2d5874b206.aspx"&gt;small&lt;/A&gt; number of folks have been running the bits over the weekend and as a result we've fixed a few bugs. A couple more days and we'll post the bits to SourceForge.&lt;/P&gt;
&lt;P&gt;When that happens I'll post the MovableTypeBlacklist class. I've also considered writing an HttpModule to send these guys 404s, but didn't really think that was appropriate. The list is basically loaded into a long string, delimited by "|" and passed into a Regex to match a url. Interestingly enough, when I tried to Compile the Regex, my little console app balooned to 150 MB and it never quite finished running. Using a static Regex with the long static string I was able to execute matches in 0 - 10 milliseconds.&lt;/P&gt;
&lt;P&gt;Here is a dump of the class:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;6p.org.uk : True&lt;BR&gt;Executed in : 20 milliseconds&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;microsoft.com : False&lt;BR&gt;Executed in : 0 milliseconds&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;shahine.com : False&lt;BR&gt;Executed in : 0 milliseconds&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;flatbedshipping.com : True&lt;BR&gt;Executed in : 0 milliseconds&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;apply-to-green-card.org : True&lt;BR&gt;Executed in : 0 milliseconds&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;ownsthis.com : True&lt;BR&gt;Executed in : 10 milliseconds&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img width="0" height="0" src="http://www.shahine.com/omar/cptrk.ashx?id=f1f15d4e-e3aa-46b3-96ee-5b4db4fffe5b"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=349793" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/omars/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/omars/archive/tags/dasBlog/default.aspx">dasBlog</category></item><item><title>RSS xhtml:body</title><link>http://blogs.msdn.com/omars/archive/2005/01/08/349081.aspx</link><pubDate>Sat, 08 Jan 2005 16:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:349081</guid><dc:creator>omars</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/omars/comments/349081.aspx</comments><wfw:commentRss>http://blogs.msdn.com/omars/commentrss.aspx?PostID=349081</wfw:commentRss><description>&lt;P&gt;A while ago there was some hubub about support for &lt;A href="http://weblog.infoworld.com/udell/2003/04/14.html"&gt;xhtml:body&lt;/A&gt; in the RSS &lt;STRONG&gt;item&lt;/STRONG&gt; tag. Since all RSS aggregators must support the &lt;STRONG&gt;description&lt;/STRONG&gt; tag, which contains all the escaped html content of the post, having another tag in the RSS feed that duplicates all this content into a tag that only some RSS readers understand seems silly. My RSS feed is 162k today, and if I stop including the body tag it goes down to 82k. Given that I'm doing about 400 MB in bandwidth transfer at my hosting provider and a large chunk of that is RSS, I'm thinking if folks want the body tag from dasBlog they can use the Atom feed.&lt;/P&gt;&lt;img width="0" height="0" src="http://www.shahine.com/omar/cptrk.ashx?id=b63f711c-53cb-4b52-9eac-c366e2903315"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=349081" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/omars/archive/tags/dasBlog/default.aspx">dasBlog</category></item><item><title>Dying Thread on Trackbacks, Referrals and Pingbacks</title><link>http://blogs.msdn.com/omars/archive/2005/01/06/347410.aspx</link><pubDate>Thu, 06 Jan 2005 12:11:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:347410</guid><dc:creator>omars</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/omars/comments/347410.aspx</comments><wfw:commentRss>http://blogs.msdn.com/omars/commentrss.aspx?PostID=347410</wfw:commentRss><description>&lt;P&gt;Part 2 of &lt;A href="http://www.shahine.com/omar/PermaLink,guid,1c62220c-7787-4728-a06c-093925f7787b.aspx"&gt;2&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Bug 2: TrackingHandler Thread Dies&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Another problem that &lt;A href="http://www.hanselman.com/blog/"&gt;Scott Hanselman&lt;/A&gt; informed me of was that he would frequently stop receiving Trackbacks, Pingbacks and Referrals on his posts. Furthermore, it was intermittent. This was troubling since losing a Trackback means it's lost forever. Well we went hunting in the code, and thanks to some UnitTest of a theory I had found the answer.&lt;/P&gt;
&lt;P&gt;Basically the situation is this. Scott gets a lot of traffic. More than I do. There is a thread in dasBlog that sits around waiting for Trackbacks and the like. You use it by calling trackingQueue.Enqueue(tracking) and then trackingQueueEvent.Set(). So basically dasBlog can sit there and queue a bunch of trackings, and when it's ready the thread runs to execute them. The code looks like this:&lt;FONT size=2&gt;&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;private&lt;/SPAN&gt; &lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;void&lt;/SPAN&gt; TrackingHandler( )&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;while&lt;/SPAN&gt; ( &lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;true&lt;/SPAN&gt; )&lt;BR&gt;&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;Tracking tracking;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trackingQueueEvent.WaitOne();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;while&lt;/SPAN&gt; ( &lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;true&lt;/SPAN&gt; )&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;lock&lt;/SPAN&gt;( trackingQueue.SyncRoot )&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tracking &lt;SPAN style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/SPAN&gt; trackingQueue.Dequeue() &lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;as&lt;/SPAN&gt; Tracking;&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;&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;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;if&lt;/SPAN&gt; ( tracking !&lt;SPAN style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;null&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;try&lt;/SPAN&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;{&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;InternalAddTracking( tracking );&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;}&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;&lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;catch&lt;/SPAN&gt; (Exception e)&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;{&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;ErrorTrace.Trace(TraceLevel.Error,e);&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;}&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;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;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;if&lt;/SPAN&gt; ( trackingQueue.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;{&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;&lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;break&lt;/SPAN&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;&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;}&lt;BR&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;FONT face=Verdana&gt;The objects below are created like so:&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;trackingQueue &lt;SPAN style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/SPAN&gt; Queue();&lt;BR&gt;trackingQueueEvent &lt;SPAN style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/SPAN&gt; AutoResetEvent(&lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;false&lt;/SPAN&gt;);&lt;BR&gt;trackingHandlerThread &lt;SPAN style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/SPAN&gt; Thread(&lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/SPAN&gt; ThreadStart(&lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;this&lt;/SPAN&gt;.TrackingHandler));&lt;BR&gt;trackingHandlerThread.IsBackground &lt;SPAN style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;true&lt;/SPAN&gt;;&lt;BR&gt;trackingHandlerThread.Start();&lt;/SPAN&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;/FONT&gt;So, can you figure out what is wrong? Well I created a unit test that called this 100 times. What I quickly found out was that even though the code was calling break when the trackingQueue.Count was equal to zero the trackingQueueEvent.WaitOne() call wasn't blocking the while loop from continuing. This caused trackingQueue.Dequeue() to throw an unhanded exception (which should have been in a try catch anyway). &lt;/P&gt;
&lt;P&gt;Not knowing a whole lot about this kind of threading I looked at a couple of docs and found the answer. Before calling break I added trackingQueueEvent.Reset(). Problem fixed (I hope). &lt;/P&gt;&lt;img width="0" height="0" src="http://www.shahine.com/omar/cptrk.ashx?id=9bc569dd-c6af-49a8-8e5c-4976e55c4562"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=347410" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/omars/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/omars/archive/tags/dasBlog/default.aspx">dasBlog</category></item><item><title>DateTime.ToString("yyyy-MM-dd")</title><link>http://blogs.msdn.com/omars/archive/2005/01/06/347399.aspx</link><pubDate>Thu, 06 Jan 2005 11:29:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:347399</guid><dc:creator>omars</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/omars/comments/347399.aspx</comments><wfw:commentRss>http://blogs.msdn.com/omars/commentrss.aspx?PostID=347399</wfw:commentRss><description>&lt;P&gt;Recently I found the answer to two very hard questions about bugs in dasBlog. They were kinda tricky to figure out, but also really interesting (bug 2 will be in a follow up post)&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Bug 1: DateTime.ToString()&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;One of the classes in dasBlog that stores information like Comments, Trackbacks and Pingbacks determines it's filename like so:&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;public&lt;/SPAN&gt; &lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;string&lt;/SPAN&gt; FileName&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;get&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&lt;/SPAN&gt; DateUtc.ToString(&lt;SPAN style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"yyyy-MM-dd"&lt;/SPAN&gt;) &lt;SPAN style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;+&lt;/SPAN&gt; &lt;SPAN style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;".dayextra.xml"&lt;/SPAN&gt;;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Well a few weeks ago Scott Hanselman emailed me with some files with names like &lt;STRONG&gt;1425-05-05.dayextra&lt;/STRONG&gt;. Can you figure out why this is?&lt;/P&gt;
&lt;P&gt;Well as I found out, DateTime always assumes Gregorian Calendar, so DateTime.ToString() will output a filename with a Culture.Invariant filename. Well what happened to Scott is that he got comment spammed by some one who's Windows Region was set to a Culture that uses the &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemglobalizationhijricalendarclassgetdayofweektopic.asp"&gt;Hijri Calendar&lt;/A&gt;. So, 1425-05-05 is the equivalent of 2004-06-22. &lt;/P&gt;
&lt;P&gt;The reason this happened was because this person happened to be the &lt;STRONG&gt;first&lt;/STRONG&gt; person to leave a comment, and thus the file was created using the CultureInfo from their machine!&lt;/P&gt;
&lt;P&gt;The fix was to do the following:&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;public&lt;/SPAN&gt; &lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;string&lt;/SPAN&gt; FileName&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;get&lt;BR&gt;&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;SPAN style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;// Use Invariant Culture, not host culture (or user override),&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;for date formats.&lt;/SPAN&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IFormatProvider mmddFormat &lt;SPAN style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/SPAN&gt; CultureInfo(String.Empty, &lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;false&lt;/SPAN&gt;);&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;// Ignore local DateFormatInfo (could say CCYY-DD-MM),&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;always use CCYY-MM-DD.&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&lt;/SPAN&gt; DateUtc.ToString(&lt;SPAN style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"yyyy-MM-dd"&lt;/SPAN&gt;, mmddFormat) &lt;SPAN style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;+&lt;/SPAN&gt; &lt;SPAN style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;".dayfeedback.xml"&lt;/SPAN&gt;;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;DateTime stuff is very tricky and dasBlog has 4 different kinds of DateTime so it can get confusing.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;DateTime for Server (timezone the server is in) &lt;/LI&gt;
&lt;LI&gt;DateTime for Author (timezone the author is creating the post) &lt;/LI&gt;
&lt;LI&gt;UTC, which is how all data is saved &lt;/LI&gt;
&lt;LI&gt;Browser DateTime (where the reader is reading the post) &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;In all these cases dasBlog must know how to convert back and forth between all these formats and preserving the window of time that equals a single Day (24 hours of time, in the server, author, or UTC timezone). &lt;/P&gt;&lt;img width="0" height="0" src="http://www.shahine.com/omar/cptrk.ashx?id=1c62220c-7787-4728-a06c-093925f7787b"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=347399" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/omars/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/omars/archive/tags/dasBlog/default.aspx">dasBlog</category></item><item><title>Enclosure support in dasBlog</title><link>http://blogs.msdn.com/omars/archive/2005/01/03/345603.aspx</link><pubDate>Mon, 03 Jan 2005 13:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:345603</guid><dc:creator>omars</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/omars/comments/345603.aspx</comments><wfw:commentRss>http://blogs.msdn.com/omars/commentrss.aspx?PostID=345603</wfw:commentRss><description>&lt;P&gt;Well, thanks to some encouragement from &lt;A href="http://www.jeffsandquist.com/"&gt;Jeff Sandquist&lt;/A&gt;, I just recently added Enclosure support to dasBlog. It was a bit tricky because RSS 2.0 only allows for a &lt;A href="http://blogs.law.harvard.edu/tech/rss#ltenclosuregtSubelementOfLtitemgt"&gt;single enclosure per item&lt;/A&gt;. I didn't want to get burned by the spec changing at some point, so dasBlog actually support&lt;EM&gt; &lt;/EM&gt;any number of attachments, but only &lt;A href="http://archive.scripting.com/2004/12/21#multipleenclosuresOnRssItems"&gt;one enclosure&lt;/A&gt;. Right now there is no UI for adding anything except for one. Eventually I'll add things like Photos, or whatever.&lt;/P&gt;
&lt;P&gt;The nice thing about this is that when you add an attachment they are automatically added in your content/binaries/[entryId]/&lt;ENTRYID&gt; folder. So now, when you delete an entry, the folder goes away as well and you don't have any straglers lying around.&lt;/P&gt;
&lt;P&gt;If this worked, you should be able to download registry keys that will prevent &lt;A href="http://www.shahine.com/omar/PermaLink,guid,b6d6cdba-4b86-439a-a373-8a1cb8a58bca.aspx"&gt;office documents from opening in IE&lt;/A&gt;. Click the enclosure icon below (if you are reading this in an RSS reader it may not display the enclosure link).&lt;/P&gt;
&lt;P&gt;Just one of &lt;A href="http://www.hanselman.com/blog/PermaLink.aspx?guid=14d4eb35-a418-49a5-8236-1c5c8fa61b74"&gt;many&lt;/A&gt; things coming to a dasBlog near you. Seriosly, &lt;A href="http://www.hanselman.com/blog/"&gt;Scott&lt;/A&gt; just finished setting up our SourceFourge site, and once we give a beta out to a few folks to make sure nuthin is broken, we'll have a public beta release. The Runtime has changed a lot, so we want to be carefull. However, I think &lt;A href="http://www.hanselman.com/blog/"&gt;Scott&lt;/A&gt;&amp;nbsp;fixed a ton of threading bugs in the process (dasBlog wasn't very threadsafe, and this caused lots of wierd stuff).&lt;/P&gt;&lt;img width="0" height="0" src="http://www.shahine.com/omar/cptrk.ashx?id=8bbe0693-c499-4109-94ee-f21587cbff98"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=345603" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/omars/archive/tags/dasBlog/default.aspx">dasBlog</category></item><item><title>dasBlog 1.7 progress</title><link>http://blogs.msdn.com/omars/archive/2004/12/24/331584.aspx</link><pubDate>Fri, 24 Dec 2004 11:38:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:331584</guid><dc:creator>omars</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/omars/comments/331584.aspx</comments><wfw:commentRss>http://blogs.msdn.com/omars/commentrss.aspx?PostID=331584</wfw:commentRss><description>&lt;P&gt;Well I plan on spending the next few days getting together a beta of &lt;A href="version 1.7"&gt;dasBlog 1.7&lt;/A&gt;. I've been slowly doing some work on dasBlog the past few months (emphasis on slowly). To be honest I was pretty close to closing up shop on dasBlog and eventually writing something new from scratch, mostly because I felt there was to much to fix and a bunch of things were broken that I didn't feel like dealing with. However, thanks to some inspiration from &lt;A href="http://www.hanselman.com/blog"&gt;Scott Hansselman&lt;/A&gt; and &lt;A href="http://staff.newtelligence.net/clemensv/"&gt;Clemens&lt;/A&gt;, I'm much more excited about continuing to work on the code. In the coming weeks I will get around to moving dasBlog from &lt;A href="http://workspaces.gotdotnet.com/dasblog"&gt;GotDotNet&lt;/A&gt; to &lt;A href="http://www.sourceforge.net"&gt;SourceForge&lt;/A&gt; or some other place. GDN is just way to frustrating to use, and I'm the only person left contributing because of the hassles and issues with using Source Control over there. Dare &lt;A href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=d1f52141-95a5-438f-85dc-46ecd429ee53"&gt;did the same thing with RSS Bandit&lt;/A&gt; and a year later he seems happier for it.&lt;/P&gt;
&lt;P&gt;Having said that, &lt;A href="http://wiki.shahine.com/default.aspx/DasBlog.VersionOnePointSeven"&gt;version 1.7&lt;/A&gt; has some &lt;A href="http://www.hanselman.com/blog/PermaLink.aspx?guid=d2a4cb18-c924-48a8-a81c-9916b5bcea9b"&gt;unbelievable performance improvements&lt;/A&gt;. Scott Hansselman did some amazing work under the hood and increased Runtime and RSS performance a great deal. Furthermore he added a &lt;A href="http://www.hanselman.com/blog/PermaLink.aspx?guid=8c8cbf02-b25f-4170-9e68-110afdaa46f1"&gt;Referral Spam Blacklist&lt;/A&gt;, a &lt;A href="http://www.hanselman.com/blog/ct.ashx?id=8c8cbf02-b25f-4170-9e68-110afdaa46f1&amp;amp;url=http%3a%2f%2fwww.hanselman.com%2fblog%2fPermaLink.aspx%3fguid%3d99b2e3e9-5597-4883-a015-d77c3246a2a8"&gt;CAPTCHA solution for comments&lt;/A&gt;, and an &lt;A href="http://www.hanselman.com/blog/ct.ashx?id=d2a4cb18-c924-48a8-a81c-9916b5bcea9b&amp;amp;url=http%3a%2f%2fwww.hanselman.com%2fblog%2fPermaLink.aspx%3fguid%3de686925a-a189-4958-a0ab-13612ad9c42c"&gt;IP address Blocker&lt;/A&gt;. I just installed the bits on my site and it's amazing how much faster things are. My ISP should be much happier.&lt;/P&gt;
&lt;P&gt;There is another important change in 1.7. Due to a very unfortunate bug that has existed since 1.3 or so, the dayentry.xml and dayextra.xml files were created based on UTC for dayentry and local server time for dayextra. This meant that when dasBlog went to go write a referral or trackback to the dayextra file for a lot of folks that file was the wrong file. In my case since my server is in GMT -5, any attempted writes to this file between midnight GMT and 5 am were lost. I came up with a fairly clever way of fixing it, but this does mean that for users who first install 1.7 there is a one time hit where dasBlog goes and loads all the old files, creates new ones with UTC file names, and then backs up all the old ones. This can take a while if you have a lot of entries and dayextra files.&lt;/P&gt;
&lt;P&gt;Anyway, I plan on finishing up some final things and posting a beta to GDN before the new year. If you want something sooner to play with leave me a comment and I'll send you mail when it's ready.&lt;/P&gt;&lt;img width="0" height="0" src="http://www.shahine.com/omar/cptrk.ashx?id=c20d14f7-330b-43fb-b63d-1049f591933d"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=331584" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/omars/archive/tags/dasBlog/default.aspx">dasBlog</category></item><item><title>dasBlog feature: Search Result Referrers</title><link>http://blogs.msdn.com/omars/archive/2004/10/31/250239.aspx</link><pubDate>Mon, 01 Nov 2004 03:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:250239</guid><dc:creator>omars</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/omars/comments/250239.aspx</comments><wfw:commentRss>http://blogs.msdn.com/omars/commentrss.aspx?PostID=250239</wfw:commentRss><description>&lt;p&gt;I have to admit, one of the more fascinating aspects of having a blog are the ways that people find it. I'm constantly amazed at how people get here. Having a good amount of&amp;nbsp;&lt;a href="http://c2.com/cgi/wiki?GoogleJuice"&gt;Google Juice&lt;/a&gt;&amp;nbsp;helps put some of my posts pretty high in google's results.&lt;/p&gt; &lt;p&gt;Well because dasBlog just places all referrals together, it's really hard to get a good picture of what search queries people are entering. Since I started doing a little dasBlog development again, I added this new statistics table. This will be in version 1.7.&lt;/p&gt; &lt;p align="center"&gt;&lt;img height="188" src="http://www.shahine.com/omar/content/binary/dasBlogSearch.jpg" width="591" border="0" /&gt;&lt;/p&gt;&lt;img height="0" src="http://www.shahine.com/omar/cptrk.ashx?id=eef787f4-e0e9-4142-b8e9-2a533509779f" width="0" /&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=250239" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/omars/archive/tags/dasBlog/default.aspx">dasBlog</category></item><item><title>dasBlog support for Newsgator Ratings</title><link>http://blogs.msdn.com/omars/archive/2004/10/31/250226.aspx</link><pubDate>Mon, 01 Nov 2004 02:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:250226</guid><dc:creator>omars</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/omars/comments/250226.aspx</comments><wfw:commentRss>http://blogs.msdn.com/omars/commentrss.aspx?PostID=250226</wfw:commentRss><description>&lt;P&gt;I uploaded a patch for dasBlog 1.6 that allows you to utilize the &lt;A href="http://www.rassoc.com/gregr/weblog/archive.aspx?post=741"&gt;NewsGator ratings system&lt;/A&gt;. This patch adds support for a new &lt;A href="http://wiki.shahine.com/default.aspx/DasBlog.PermalinkUrl"&gt;PermalinkUrl&lt;/A&gt; Macro. You can use this macro by adding:&lt;/P&gt;
&lt;P&gt;&amp;lt;%permalinkUrl%&amp;gt; to any of your templates. To add the rating system as I've done on my blog simply edit your itemTemplate to include the following text:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;Rate this post: &amp;lt;script src="http://www.newsgator.com/ngs/ratings.aspx?rurl=&amp;lt;%permalinkUrl%&amp;gt;"&amp;gt;&amp;lt;/script&amp;gt; (data provided from &amp;lt;a href="http://www.newsgator.com"&amp;gt;NewsGator Online&amp;lt;/a&amp;gt;)&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;You can download this patch &lt;A href="http://www.gotdotnet.com/workspaces/releases/viewuploads.aspx?id=77a29128-4746-4473-b676-e4f1517a1907"&gt;here&lt;/A&gt;. Download DasBlog.Web.Core 1.6.4121.2.&lt;/P&gt;&lt;img width="0" height="0" src="http://www.shahine.com/omar/cptrk.ashx?id=2c6e2bac-f4db-452f-a843-8c0ec8ba1a5a"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=250226" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/omars/archive/tags/dasBlog/default.aspx">dasBlog</category></item><item><title>dasBlog Security Update</title><link>http://blogs.msdn.com/omars/archive/2004/09/05/225905.aspx</link><pubDate>Mon, 06 Sep 2004 03:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:225905</guid><dc:creator>omars</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/omars/comments/225905.aspx</comments><wfw:commentRss>http://blogs.msdn.com/omars/commentrss.aspx?PostID=225905</wfw:commentRss><description>&lt;P&gt;If you are running dasBlog, make sure you install the security fix available for all released versions of dasBlog.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.dasblog.net/documentation/PermaLink.aspx?guid=92ad6eb7-ee40-4c89-9f1e-a07c83859e63"&gt;http://www.dasblog.net/documentation/PermaLink.aspx?guid=92ad6eb7-ee40-4c89-9f1e-a07c83859e63&lt;/A&gt;&lt;/P&gt;&lt;img width="0" height="0" src="http://www.shahine.com/omar/cptrk.ashx?id=62d2f2a6-d637-4a73-8522-a2a9703f8863"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=225905" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/omars/archive/tags/dasBlog/default.aspx">dasBlog</category></item><item><title>dasBlog 1.6.1 hotfix</title><link>http://blogs.msdn.com/omars/archive/2004/05/26/142042.aspx</link><pubDate>Wed, 26 May 2004 14:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:142042</guid><dc:creator>omars</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/omars/comments/142042.aspx</comments><wfw:commentRss>http://blogs.msdn.com/omars/commentrss.aspx?PostID=142042</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://staff.newtelligence.net/clemensv/ct.ashx?id=73a64ce7-26df-4ce4-a8c7-2a1c940ffafa&amp;amp;url=http%3a%2f%2fwww.hanselman.com%2fblog%2fPermaLink.aspx%3fguid%3d4c940f09-b6e4-4289-a36c-2be705f66589"&gt;Scott Hanselman&lt;/A&gt; and &lt;A href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=73a64ce7-26df-4ce4-a8c7-2a1c940ffafa"&gt;Clemens&lt;/A&gt; ran into a nasty dasBlog &lt;A href="http://staff.newtelligence.net/clemensv/ct.ashx?id=73a64ce7-26df-4ce4-a8c7-2a1c940ffafa&amp;amp;url=http%3a%2f%2fwww.hanselman.com%2fblog%2fPermaLink.aspx%3fguid%3d4c940f09-b6e4-4289-a36c-2be705f66589"&gt;1.6 bug&lt;/A&gt;. Basically it was possible for your entry cache to get corrupted (not your entries). Thanks to &lt;A href="http://ewal.net/"&gt;Erv Walter&lt;/A&gt; for quickly investigating and fixing the problem.&lt;/P&gt;
&lt;P&gt;I have uploaded a hotfix for folks that are running 1.6. It's a single DLL that you drop into your /bin folder. I have also upgraded all the MSI installers and .zip downloads on the workspace. You can download all the releases &lt;A href="http://www.gotdotnet.com/Community/Workspaces/viewUploads.aspx?id=77a29128-4746-4473-b676-e4f1517a1907"&gt;here&lt;/A&gt;.&lt;/P&gt;&lt;img width="0" height="0" src="http://www.shahine.com/omar/cptrk.ashx?id=8a23d126-f6ae-4e26-9603-83faafcfafc6"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=142042" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/omars/archive/tags/dasBlog/default.aspx">dasBlog</category></item></channel></rss>