May 8, 2007
@ 03:45 AM

One of the neat features of dasBlog is that the statistics pages filter out search terms so that I get to see all the search terms that lead into my blog. Some are quite naughty, some are very funny (especially the dozen-or-so daily search terms for "alien" that land here), some have a surprising search rank, and some are like this: forgot password windows server 2003. I'm really sorry for that fellow ...

Categories: Blog | dasBlog

Omar is announcing (like Scott) the new newtelligence dasBlog "Community Edition" 1.7. It's so fresh that I am not even running it myself, yet.

What's important is that this is not an XCOPY upgrade and that you must follow the instructions in the dasBlog Upgrader download if you want to upgrade from 1.6 or earlier. Scott and Omar had to change the structure of the content store XML files to improve performance and add new features.

Here is the SourceForge home for the new version, make sure you get the download for the Upgrader if you want to upgrade and -- as always -- make a backup of your old version in case stuff doesn't work.

Categories: Blog | dasBlog

December 11, 2004
@ 10:26 AM

I haven't really looked around what other people's ideas (or implementations) are on referrer spam, but I think these idiots who want to use our blogs as a way to boost their Google rank are setting themselves up for trouble, because we are not really stupid. For the time being, I am simply letting it all run to collect evidence. There are wonderful things we can do with all these spam URLs. Distributed denial of service attacks come to mind ;-)  Or just redirect them to themselves.

Seriously, I am thinking of having word filtering and a manual negative list in the blog engine and to expose that list as a separate RSS as well as to allow import of such RSS lists into my blog engine. My exported list might also reference all my trusted negative lists that I import, so that this forms a mesh where folks can report those idiots and the engines will pick it up and throw out the crap. 

Categories: Blog | dasBlog

Security expert Dominick Baier made me aware of a security vulnerability in dasBlog at the beginning of last week. Dominick will post a concrete advisory later this week for reasons of completeness, but we want to give everyone a chance to patch their systems, because exploits are embarrassingly simple to write.

The problem affects all versions of dasBlog and allows a specially crafted cross-site scripting attack that would potentially and under certain circumstances allow an attacker to gain temporary access to the blog user’s credentials. The problem does not allow an attacker to gain any further control over the server or compromise system-level security.

The suggested workaround is to install the patch that can be found here (direct link). The patch archive contains four subdirectories (named 1.3, 1.4, 1.5, and 1.6) with replacement binaries for the newtelligence.DasBlog.Runtime.dll assembly for the respective version.

1.      Back up your existing assembly from your blog’s /bin subdirectory,

2.      Replace it with the new assembly for your version from the respective directory of the patch archive

3.      Open and save “web.config” with notepad to restart the site

4.      You are again safe.

The changes are minimal and should not have any adverse effects, but if you experience any odd behavior after applying the patch, please let me know.

Spread the word!

[The GotDotNet workspace source trees for 1.3-1.6 contain the modified sources for the respective versions. The “CurrentWork” tree is not yet patched.]

Categories: dasBlog

June 10, 2004
@ 08:19 PM

I start to believe Mono is real. Check this out. The folks from the mono team apparently ported dasBlog to Mono's ASP.NET incarnation. My friend Martin Spedding gave me the "heads up". Thanks.

Categories: dasBlog

May 26, 2004
@ 07:21 AM

Omar has already posted the announced fix for version 1.6 and has updated all the downloadable files. Go here to get the updated versions. If you run 1.6, get the hotfix, otherwise just get one of the full archives. We should now be stable again. Thanks to Omar and Erv Walter for providing the fix and the repacking so quickly (while I am busy in San Diego at TechEd).
Categories: dasBlog

We'll have a fixpack for dasBlog 1.6 within the next two days that will roll back a few internal changes that had been made to improve performance, but unfortunately caused significant instability. The code is already checked into our tree and we're going to have the fix packaged up for download very soon. If you don't have 1.6 installed yet, wait until we have the fix. Within a week we are going to replace the 1.6 verson available from the Gotdotnet workspace with a version that incorporates the fix.

Categories: dasBlog

May 20, 2004
@ 01:39 PM

Now that we're getting close to the dasBlog engine's 1st birthday, I'd like to know how people use it. I am seeing quite a few blogs out there who run the software, but it's just as interesting to know how the engine is used in corporate Intranets and whether you use it as a tool to help coordinate projects, share knowledge about certain topics or .... how would I know?

If you use dasBlog, it'd be great if you could share with me how you use it, how you like it, and what you don't like. If you've warped the engine into something totally different or if you have some really cool design but it lives hidden inside the corporate firewall, I would appreciate getting a screenshot (blur out the secrets). None of the information will be published unless you allow me to do that.

I am also interested to know whether and how you've used snippets from the blog code for your own projects and/or products. Knowing what pieces are valuable to you would allow me to isolate them and put them into some isolated "goodies" library down the road.

Categories: newtelligence | dasBlog

Scott Hanselman ran into a critical bug in dasBlog 1.6 that has to do with the new caching logic that the folks in the GDN workspace came up with (I didn't do it, I didn't do it!). We've both sent email to those who know about this issue and will see who will look at it and when. Apparently Scott posted something using an external tool and a couple of things were happening in parallel around that same time and that got the caching mechanism confused. If you get unexplicable errors and all you get is the "error page" , go ahead and delete the files entryCache.xml, categoryCache.xml, and blogdata.xml; then open and save (touch) web.config. that should get the blog back on its feet.

If you are on version 1.5 or earlier, stick to it while this is being checked. If you are on 1.6, have some tea or a lightly alcoholic beverage and don't panic.

Categories: dasBlog

Omar Shahine, who took the role of the "Program Manager" for dasBlog 1.6 added a new macro feature (I am actually not really sure who added it; someone correct me if I am wrong; at least Omar OK'd the feature) that totally rocks and put us on par with MovableType in terms of easy access to older entries:


The macro creates a list of links for all months that have blog entries and if you look at my site (not at the RSS feed), you'll see it on the left-hand side of the page just under the "What's News" section. Thanks! Now I can find my old stuff again. ;-)

if you haven't see it already; Omar's comments about the 1.6 drop and links to release notes and binaries/source are on his blog.

Categories: Blog | dasBlog

December 13, 2003
@ 07:32 AM

There's a free weblog hosting site under the domain I'd like to inform you (my readers) that neither me nor newtelligence AG are associated with that site and that we are not providing that service. The operator of the site does certainly nothing to make that clear. We're currently investigating the situation.

Categories: newtelligence | dasBlog

December 6, 2003
@ 03:33 PM

The Releases section over at the GotDotNet workspace has three variants of v1.5:

"Source ZIP" with the code, "Web Files" with the runtime files (to update existing installs and do manual installs) and "Web Setup" which is an MSI to install the web site. Because the feature list keep growing, but we haven't done a language update for the various local languages, yet, updates to the string tables are welcome in the workspace source control system. And before you update: make a backup.

I am running v1.5 here without any problems. Let us know in the GotDotNet workspace message boards if you find any. I likely won't be able to answer any support questions this or next week.

Please note that you must not have the Whidbey Alpha version of ASP.NET mapped to the web into which you install this version; it can be present on the box, but not on the web for dasBlog. Otherwise you will get all sorts of assertions and error messages that aren't my fault ;)


Categories: dasBlog

December 5, 2003
@ 06:35 PM

I had too little time today to make the necessary corrections on the few install issues that I found due to the workspace fellows not adding the files where they need to be (It's tricky so not necessarily their fault). The problem is not fixing, the problem is testing: Install the source MSI, build, find problem. Go back to original version, fix, full build, install source MSI ... you get the picture. 

Categories: dasBlog

I think I am done with v1.5 of dasBlog. However, experience tells me that I'll usually find a tiny problem just after I've packaged it all up and posted it, so I'll keep the source tree checked out and the files sitting here for another 24 hours until I am sure that it works well here.

Omar and Harry have done a fantastic job cleaning up some of my mess and they've added some cool new things.

We've got a simple search facility now, comments can be deleted, the administrator UI got a bit better organized, a bunch of annoying little bugs were fixed, the stylish "dasBlog" theme does work now and is the default, you can finally change your password through the UI, a corrupt login-cookie won't crash the site anymore, comments now show up in the correct time zone, the SMTP server settings for notifications can now be tested, we have a plugin for NewsGator, etc.


Categories: dasBlog

November 30, 2003
@ 06:14 PM

I'll put together the v1.5 build version of dasBlog next week. The v1.4 "PDC build" proved to be "true to the spirit of PDC bits" and turned out to have a couple of problems with the new "dasBlog" theme and some other inconveniences that v1.5 will fix. The true heroes of v1.5 are Omar and the many other frequent contributors to the workspace; I just didn't have enough time to add features recently.

As I blogged last week, I am very busily involved in a exciting (mind that I use the word not as carelessly as some marketing types) infrastructure project on service-oriented architectures, automnomous computing an agile machines. I wrote some 50 pages of very dense technical specification and a lot of "proof of concept" code in the past two weeks and we're in the process of handing this off to the development team. I am having a great time and a lot of fun, but because the schedule is insanely tight for a variety of reasons (I am not complaining, I signed it knowingly), I've been on 16 hour days for most of the past two weeks.  In some ways, this is also an Indigo project, because I am loosely aligning some of my core architecture with a few fundamentals from the Indigo connector architecture published at PDC to that we can take full advantage of Indigo once it's ready. The Indigo idea of keeping the Message body in an XmlReader is an ingenious idea for what I am doing here. In essence, if you only need to look at the headers inside an intermediary in a one-way messaging infrastructure like the one I am building right now, you may never even need to look anything from the body until you push the resulting message out again. So why suck it into a DOM? Just map the input stream to the output stream and hand the body through as you get it. That way and under certain circumstances, my bits may already be forwarding a message to the next hop when it hasn't even fully arrived yet.

One of the "innovative approaches" (for me, at least) is that within this infrastructure, which has a freely composable, nestable pipeline of "aspects", I am using my lightweight transaction manager to coordinate the failure management of such independently developed components. The difficulty of that and the absence of an "atomic" property of a composite pipeline activity are two things that bugged me most about aspects. There's a lot more potential in this approach, for instance enforcement of composition rules. It works great in theory and in the prototype code and I am curious how that turns out once it hits a real life use-case. We're getting there soon. (My first loud thinking about something like this is was at the very bottom of this rant here.) I'll keep you posted.

In unrelated news: Because I know that I'll be doing a lot of Longhorn work and demos in the upcoming months (my Jan/Feb/Mar schedule looks like I am going to visit every EMEA software developer personally), I've meanwhile figured that my loyal and reliable digital comrade (a Dell Inspiron 8100) will be retired. Its successor will have a green chassis.

Categories: dasBlog | Indigo | Web Services

My 4 continents in 4 months drinking buddy Stephen Forte thinks I am insane (that from him!) for keeping all blog stuff in XML files instead of SQL and I just had a quick chat with Jason Whittington about multi-user capabilities for dasBlog.

So... here's a couple of points on what I am thinking about "storage futures" for dasBlog.

XML files are goodness for small sites. There are a lot of folks I met who don't have SQL Server acess for their sites or don't want to deal with the additional complexity. I reckon that it's still a minor administrative burden to set up the permissions, but that's much less than administering your SQL store. Still, SQL is of course superior of sites that have more traffic, because it excels in dealing with concurrency, data consistency and all the database goodness. Come Yukon, there's a great way to mix the extensibility of XML and the power of SQL in a very rich way (to use a Microsoft marketing phrase). And of course, for folks like Stephen, SQL administration is something they do in their sleep. For SQL 2000, I am thinking about submitting Infoset to the data service, breaking out the elements needed for relations and indexes and store everything else as a BLOB. dasBlog only looks at the entry id, the date and the categories when looking for entries so that seems sufficient.

WinFS seems a great way to store the files and add search. I will have to look into that, but it's too far out to even do a prototype.

Multi-User capability is what I discussed with Jason. He suggested that the "author" is just another field. I disagree. The multi-user version of dasBlog (there will be one) will be organized in a very different way. I will actually keep the content absolutely separate on a per-user basis. Site config will be split into user preferences and site preferences. There will be master themes and user-supplied themes. However, there won't be a merged store. Reason: If I am blogging at a shared site and I want to move to a site that I host myself, I want to be able to take the content and make the move myself. Xcopy. If your weblog is on a site with a common store, you will have to extract and remove your content first and that may hard to do and may break stuff in the end, because there may be dependencies in the store that you don't know about. What I am going to do with the multiuser model is that there will be one runtime and app, but content, templates and content will be stored in subdirectories. If you want to move away from a shared site, you grab your stuff drop it into a single-user blog and it just works.

On the inside, the multi-user version will keep one data service instance (and cache) for each user and the portal page will by fed by a data service that aggregates all user data services and creates combined results. Logging will be separate for each user, but the logging information will be fanned out to the common site-wide logging service as well.

Categories: dasBlog

Did I say “a bit rushed”? This patch fixes a problem with the click-through functionality that occurs with complex hyperlinks. If a hyperlink in content has a list of parameters separated by the ampersand (&) character, all except the first parameter are lost. The files in this patch correct this. Drop them into the /bin directory of your v1.4.3297.0 install.



Categories: dasBlog

The source code archives (SourceSetup/SourceZip) are missing four files in the Assemblies subdir that the gentlemen who added the respective features didn't care to put into the source setup project. You can get the files either from one of the other distribution archives, from the GDN workspace (source control) or the fixed source code archives from the dasBlog download location. GotDotNet doesn't let me upload the corrected release version right now, so I deleted the source release copy over there for the moment.

Categories: dasBlog

October 24, 2003
@ 06:48 PM

newtelligence dasBlog v1.4: After you have read the release/upgrade notes, get it from here.

I have done a bit less testing than I usually would, because I wanted to get this version out in time for PDC – just because I want to have some of the new features (especially cross-posting) for myself for PDC. I have bravely deployed this new build on my own blog (here) and it didn’t break me, so it should work for you as well. Make a backup of your site before you install, ok?

Cross-posting is certainly the coolest feature if you happen to have two or more blogs (the number of folks who have that is growing daily). Before I add a formal explanation to the docs (which isn’t going to happen tonight) here’s a quick primer:

If you have cross-posting enabled on the configuration page, you will have two more entries in the administrator bar. “Crosspost Referrers” and “Crosspost Sites”. Crosspost sites is an editable list where you can enter the other blogs you want to post to and where you want to keep entries synchronized. The picture shows my setup for Hostname and Port should be trivial to understand. The “Endpoint” is the Blogger API or MetaWeblog API endpoint of your blog engine (leading forward slash required). It’s tested that dasBlog interops with itself ;), with .Text and There’s not much of a reason why it shouldn’t interop with more engines. The API type is either “Blogger” (for or “MetaWeblog” (for mostly everything else, including dasBlog and .Text). Click the “Test” button to verify the setting before you save them.

Once you’ve set up one more more sites, you’ll get the following little extra box at the bottom of the “Edit Entry” page:

Just check the sites you want to cross-post to. If the site supports the MetaWeblog API, you can also enter categories there. Multiple categories are separated by semicolons. Once you post, the cross-posts are queued up and will be posted within a couple of seconds. One catch: You should no re-edit the entry before the synchronization is done; typically within 15 seconds after your post has been stored. If the entries haven’t been synchronized, yet, the checkboxes will remain unchecked.

If you subsequently edit the entry, the changes will be replicated into the foreign Weblogs (not vice versa). If you delete the entry, the foreign entries will also be removed. In essence, you only have one blog to maintain, but multiple publishing points.

The feature isn’t yet integrated with Mail-To-Weblog. What you need to do there is to post your entry via mail, edit the entry later via the web interface and change nothing except checking the appropriate boxes and setting the categories. Support for cross-posting via Email will be in v1.5.

The “Crosspost Referrers” page shows the referrers that you are getting on the foreign site. Note: Your main blog is going to get some of the traffic of the foreign blogs because of the referrers feature. The referrer stats are baked into the cross-post feature and can’t be switched off singly at this time. For each unique hit the foreign site gets on one of your entries, there’s a potentially a request for a 43 byte image plus a bit of protocol overhead; let’s make that 100-150 bytes. Keep that in mind before you enable cross-posting to a high traffic site, otherwise this feature may end up “slashdotting” your own server. (Similar considerations are true for “Aggregator bugging” – see the release notes)

PS: Thanks to all the heroes in the GDN Workspace who helped a lot with this release.

Categories: dasBlog

Doug, you are absolutely going to get newtelligence's PDC T-Shirt, but in all reality you should give me a T-Shirt for allowing you a super smooth transition and perfect upgrade path from your outdated blogging tool to this here. Tell Don that he's going to get one, too, if he makes the switch.

"newtelligence PDC T-Shirt!" you ask? There will be two types. The one Doug is asking for is very on-topic for PDC and it's subtly outrageous. You will have to wait until PDC and catch me (or someone who's got one) to see it.

Of the other one I'll have just three made for myself and it's not really subtle in it's message, but rather conveys it quite clearly:

Categories: dasBlog | PDC 03

October 21, 2003
@ 08:41 PM

Thanks everyone. I got about 20 MMS and SMS messages to figure out how to support these types of emails for dasBlog. I actually found a few minor bugs in the Mail-To-Weblog support and while the messages of course don't come out as pretty as from a regular email client, it does at least work now.

What's key -- and that's something that I can't figure out a consistent workaround for -- is that the SMS/MMS gateway must be capable of setting a subject line for emails so that dasBlog can do it's passphrase check. For Germany, this page has a bunch of info on how that works in the major networks (in German).

Categories: dasBlog

Yesterday and today I have added another new feature to dasBlog called "Crossposting". This feature, which will be available in the v1.4 build that I still plan to publish before the Microsoft PDC next week, is simplifying having multiple blogs on several sites by allowing a entries to be posted to a master weblog running dasBlog and having the engine crosspost across multiple weblogs using the Blogger API or the (more powerful) MetaWeblog API. If the entry is updates locally, the crossposts are updated and if the entry is deleted, the crossposts get wiped, too.

My concrete problem was that I wanted to contribute to, but didn't want to maintain a separate blog. Now I can post a local post here, check a checkbox and it'll appear in both places. To still get the referrals, I am "bugging" the crossposted articles with a transparent GIF that phones home into the referrer stats of the main blog.

I'll post a "how to" along with the release, which I hope will happen by Friday. Until then, you can check that it works by looking at the three synchronized weblogs.

Categories: Blog | newtelligence | dasBlog

One thing that’s still on my list of things to add to the Mail-To-Weblog support of dasBlog is support for SMS and MMS blogging. Because SMS and MMS e-mails routed through the mobile phone carrier’s E-Mail gateways often seem have varying whacky formatting added to them either by the phone itself or by the carrier (like weird subject lines), I need to have a set of samples to figure out how to support this best.

If you have E-Mail via SMS/MMS enabled for your phone and are willing to make a small donation to the dasBlog project by sending one E-Mail to me, you could help me getting this feature right. The E-Mail should have the subject “DasBlog:SMS” or “DasBlog:MMS” (if your phone permits that) and the text body should contain the mobile carrier name, phone manufacturer name and model number. Of course, MMS is where the real fun is and what I want to support fully.

Once we’ve got support for inbound SMS/MMS blogging, I intend to support WAP and cHTML support as well as a special set of templates and entry points for small form factor browsers like PocketPC in the following version.

E-Mails should go to

Categories: dasBlog

I wasn’t sure how good these two new features would work, but the stats are so great that I already don’t want to miss them. Gives you a really good impression what people are (still) interested in and what files they grab from you site. Now I finally know what stuff (code, PPTs) I need to keep current and what I topics should come back to and revisit.

For the curious I’ve included two screenshots of what today’s stats of these two features look like as of 10 minutes ago.

Categories: dasBlog

October 18, 2003
@ 08:05 PM

I've bumped up the version number for dasBlog to 1.4. I've got a couple of enhancements myself in a private build here and the folks over in the workspace at GotDotNet have added quite a few cool things as well. I want to check in my new stuff before end of next week, so that we'll have an "official build" ready just before PDC.

The two features I added today are evil spy-features "ClickThrough" and "AggBug".

ClickThrough is an automatic mechanism that will (if configured) replace all hyperlinks in your web-page content with references to a redirector service, which logs clicks. So you'll learn which links people actually click. I added this mostly because I am curious about my downloads.

AggBug (long version: "RSS Aggregator Web Bugs") injects a reference 1x1 transparent GIF into the HTML that's emitted by the RSS generator for each entry. The GIF is served by the engine itself and tracks those requests. I am doing that, because I really want to know how many readers I have. Currently I only see the readers who are coming to the web-site, but I suspect that the vast majority are using aggregators.

Update: I should probably add that I am not logging IP addresses in these two features just as I am not doing that with referrers.

Categories: dasBlog

October 6, 2003
@ 02:42 PM

Ummm.... did I document that? If you use dasBlog, you can have an individual template for each category. Just create a subdirectory with the same name as the category (and subdirectory of the subdirectory for a nested category) and place the modified template files there. I just did that for the dasBlog">dasBlog category (subcategory of newtelligence) and placed the new files into the newtelligence/dasBlog subdir below the main template directory. Requires version 1.2 or later.

Categories: dasBlog

October 6, 2003
@ 01:46 PM

The Electric Doc’s blog is a fantastic example for someone leveraging the localization support I put into dasBlog to the maximum extent. Except for the headline and the occasional English term in the posts I don’t understand a single thing over there, but that’s the whole point of full localization, right?

If the browser’s primary language is set to Japanese, even the navigation headlines, the comment links, the dates and everything else shows up in Japanese.

World enabled. Goodness. I am really happy to see that ;)


Categories: dasBlog

October 2, 2003
@ 06:56 AM

I read on some blogs that people are confused about the trackback support in dasBlog. Trust me, I am confused myself. I have implemented version 1.1 of trackback, using HTTP POST instead of version 1.0's HTTP GET and neglected supporting the 1.0 variant. That may be part of the problem. Still, I freely admit that trackback is probably one of the worst tested features of the whole code base in general. Getting that to work properly is on my list. Pingback works.

Categories: dasBlog

October 1, 2003
@ 09:52 PM

It seems that Dare Obasanjo is getting ready to switch off the lights over in the BlogX workspace on GotDotNet or at least is about to drop the existing BlogX code base for good and replace it with the current build of dasBlog. In this comment here on this blog Dare is also hinting at moving all of the Microsoft blogger blogs on GotDotNet from BlogX to dasBlog.

I swear! A hostile takeover of BlogX wasn't part of the plan! It just happened! 

What's still an open discussion point is whether we'll have a logical second of synchronization between the two projects and from there, the newly dasblogged BlogX will move on its own while dasBlog will remain the cozy little project that it is or whether Dare will bring all of his 338 friends over to the dasBlog workspace.

Indepent of how that's going, both projects or the merged project will be under stricter project management than before. For instance, BlogX suffered massively from files being checked out for weeks or months. If that'd happen in the dasBlog workspace, it'd have a member less.

Categories: dasBlog

I am currently writing an article for a magazine about dasBlog and I am also covering a bit of the history of RSS and similar formats. While looking up some links on Google, I stumbled over a blog entry by Don Box that I hadn’t read or which at least didn’t stick.

Don had an outrageously retro idea back in May of which I understood the complete coolness only today. The reason why that didn’t click earlier for me until today was likely that Don simply didn’t use the right picture to go with that blog posting. So, Don, as a special service from a friend I’ll do that for you here:

Subscribe to Don Box’ Active Channel
Add Active Channel

Even if there’s a chance that someone (from the Windows shell team, maybe?) is going to hate me for it, I firmly plan to add Active Channel and even Active Desktop support to the next revision of dasBlog; every copy of Windows with IE4.0 or later has built in support for the exact stuff that Weblogs are. Let’s just use that.

(Update: I just noticed that I must have been living under a rock in May)

Categories: dasBlog | Weblogs

September 25, 2003
@ 07:20 AM

I just uploaded a new build of dasBlog (1.3.3266) to the GotDotNet workspace and the dasBlog site. Although it carries a new minor version number, the changes aren't dramatic and the new build mostly consolidates some cosmetic changes, add-ons (languages) and fixes that were done by the folks in the GotDotNet workspace and myself.

Categories: dasBlog

I am investigating a problem that occurs very rarely in dasBlog and causes rendering of pages to fail consistently until restarted by, for instance, touching web.config. I've seen this happen only on the newtelligence website and only once.

Apparently, the resource manager that's used to pull in the localized strings for various elements and is stored in application state is lost at some point and causes the data binding of the controls to throw a NullReferenceException. What I assume is that the Global.Application_Start() event isn't fired in all cases when the worker process recycles.

I am looking into it, but before I have a good answer for the why and a fix, the best workaround is to touch (load and save) web.config in order to restart the app.

Update: While I still don't know why the original problem happened, I have a permanent workaround for 1.3, which is due very very soon (I am already posting using the 1.3 build that consolidates a couple of fixes, language additions and minor enhancements)

Categories: dasBlog

The new newtelligence homepage now runs on top of it. In fact, there are a couple of features like the nested categories and the whole localization story that only made it into the blog engine, because we wanted to use dasBlog for that purpose as well.

Categories: dasBlog

Ok, I couldn't resist getting the Arabic support (mostly) right. Malek helped me and by what he tells me, we've succeeded mostly. There are a few things left to do around wildly wrapping symbol characters, but that'll be worked out eventually.

So, this little patch updates dasBlog with French, Russian and Arabic, including full right-to-left reading support, which the engine injects appropriately into the <body> tag (dir="RTL") based on a hint in the Arabic resource table.

Categories: dasBlog

August 18, 2003
@ 10:28 PM

On the download site I posted add-on packs for French language support and the first steps toward Arabic language support, which are the string tables. My friend Malek Kemmou from Morocco wants to help me figuring out how we can make right-to-left reading work "magically" and without having to rework all the templates. He also did those two translations. Thanks!

Update: I added a first attempt at generic RTL support to my private build and installed it here. If the primary language is set to any of the Arabic language variants, the page will flip into RTL reading. There are some issues around formatting to be worked out, though.

Categories: dasBlog

August 18, 2003
@ 08:36 PM

The workspace is maxed out at the current 20 users. I already submitted the form to ask for more users (the largest decimal number it takes is 99 so I went for that) and I really hope that there's someone at the other end of that form. GDN team, are you listening?

Update: Fixed.

Categories: dasBlog

I just posted newtelligence dasBlog version 1.2.3230.0 to the GotDotNet workspace and to the download section on the dasBlog site.

With this drop, I now have a feature set that makes me happy for my own blog and which some of you out there hopefully find useful for your own blogs. It’s been 5 weeks that were a lot of fun and I learned a lot about other user’s requirements through the feedback that I’ve gotten in the three weeks that the code has been public now.

And with this drop, I will therefore also stop the feature rush and likely not post more than fixes or updates to the language files and templates. Don’t expect significant new features from me in the upcoming weeks. What that means is clearly that I expect that something happens in the GotDotNet workspace from people other than me. There’s been a lot of complaining in the BlogX workspace about BlogX being stalled in terms of features and that the code-base has been locked and checked out the whole time. So, there you go: dasBlog is not checked out and open for all workspace members to change. I am going to be on the road for 3 1/2 weeks starting Wednesday, so don’t expect me to organize anything in the workspace or watch it. It’s yours. I’ll delegate accepting new members and begging to Microsoft for more workspace resources to someone around here, but that’s about it.

That also means that my private copy I am carrying around on my notebook is now forked off from the main code base and is going to be my own private little playground for new things to try.

Even if you are not at all interested in running the software as-is, you may want to go and grab the code base, because I am sure there’s a lot of useful little things in there if you are developing ASP.NET apps. It turned out to be so much new code and so many new little utilities and tricks that I could hardly keep track of the “new new” things, let alone document them. There’s a lot of fodder for articles, tips and tricks columns or for highlighting aspects here on the blog.

One thing you’ll find digging into the code-base is that almost always when there’s something that doesn’t need to be done synchronously, I don’t do it synchronously. Every referral gets queued up in an in memory queue and is written to the referrer-log on a secondary thread. All mail notifications, pingbacks, trackbacks and the pining of and are also done on secondary threads.

You’ll also find that the little drop-shadows on the configuration page for the content-filter are neither rendered by IE, not will you be able to find the displayed images anywhere in your site’s directories. Instead, the drop shadows are all dynamically rendered. The magic is done by the “ShadowBox” control that’s in the newtelligence.Web.UI.WebControls assembly. You can configure the shadow depth, the background color onto which the shadow is to be rendered, etc.

The DHTML editor is also a reusable component from that assembly. It loads its toolbar from an embedded resource using the same technique: The ControlImageHandler class is an IHttpHandler which is capable of redirecting requests for images back to the controls that rendered the image links. So, in essence, you get something similar to Windows Forms’ OnPaint() support for WebControls.

There’s a complete (and working) implementation of a class WindowsTimeZone, derived from System.TimeZone and a matching WindowsTimeZoneCollection that grabs all the time zone information known to Windows and exposes that in a .NET Framework compatible way, including daylight savings time and all that.

The UrlMapper is a generic component that lets you use regular expressions to filter incoming URLs and map them to internal URLs, which comes very handy if you change a site’s structure around, MailToWeblog contains a five-liner showing how to create thumbnails from images, …

…. many things to explain in more detail and so little time. Stay tuned. ;)

Categories: dasBlog

The language list is growing; Tom Mertens and Bart Vermeersch both sent me Dutch string tables for inclusion in dasBlog 1.2. One is going to be the default for Dutch and Dutch (Netherlands) and the other is going to be the default for Dutch (Belgium).

Bedankt! Site updated.

Categories: dasBlog

Consider Norwegian-Bokmal (NO and nb-NO) done. Christian did it. Already installed here; best seen in the comment view if you’ve got Norwegian as the most preferred language.

Categories: dasBlog

August 16, 2003
@ 07:07 PM

Note: For visitors of your site, this entry is only displayed for users with the preselected language English/English (en)

System.ArgumentException: Culture name en;q=1.0 is not supported.
Parameter name: name
at System.Globalization.CultureInfo..ctor(String name, Boolean useUserOverride)
at System.Globalization.CultureInfo.CreateSpecificCulture(String name)
at newtelligence.DasBlog.Web.Core.SharedBasePage.SetupPage(Object o, EventArgs e)
at System.EventHandler.Invoke(Object sender, EventArgs e)
at System.Web.UI.Control.OnInit(EventArgs e)
at newtelligence.DasBlog.Web.HomePage.OnInit(EventArgs e)
at System.Web.UI.Control.InitRecursive(Control namingContainer)
at System.Web.UI.Page.ProcessRequestMain()
while processing ht tp:// tp://

To whoever caused this event log entry to show up 10 minutes ago .... thanks, should be fixed now ;)

Categories: dasBlog

So.... dasBlog 1.2 nears completion and this will then also conclude the “feature rush“ for a while, because the allocated time for this “summer project” (5 weeks) is up and I have to shift gears. The last step for 1.2 is localization. Based on the user’s top preference in the Accept-Language header, dasBlog 1.2 presents all “hard coded” strings for publicly visible elements like the “Comment” link and the entire administrator interface in the preferred language, if the respective resources are available.

There’s now also an additional macro “localString” that you can use to define a multilingual expression in your templates: <%localString(“This is the English default|DE:Das ist die deutsche Alternative|IT:Questo e in italiano”)%>. This will resolve into German or Italian if that’s on the user’s language preferences list (Accept-Language header, again) and fall back to the default expression before the first delimiter if there’s no proper mapping. And, yes, you could also differentiate between “en-GB”, “en-US” and “en-CA”.

On the posting side, all posts are posted with the “invariant culture” (empty identifier) by default and will therefore show up on the blog independent of the user’s language preference. However, you can also select a language/culture pair when posting (for instance either “de” for German in general or “de-AT” for Austria, specifically) and then the post will only show up for users who have this language/culture listed in their browser’s language preferences. In the RSS feeds, the <item> tag will then carry the proper xml:lang designation (which propagates down to all its children as per XML 1.0).

By now, I have two complete language sets for the localized resources for English (en-US) and German (de-DE), but that’s as far as my “active” language skills take me. So if any of you folks out there (especially dasBlog users – hint, hint) have some 20 minutes of time and want to help me with localization into languages other than those two, grab the three files below (it’s just XML), translate the stuff between the <value> tags (except the topmost four) and send them, with the filenames reflecting the culture (such as Web.StringTables.ES.resx for Spanish), back to me at 

Of course, I will have to figure out how trust the correctness if I am getting translations into languages that aren’t from Latin or Germanic descent (most of those I can usually figure out), but that’s something to determine if and when it happens. For now, this is also a great experiment to see whether this little call for help yields any results. You’ll definitely get a permanent link and mention prominently on the dasBlog website and I can also put your blog into the blogroll that is included the setup archives, how’s that for a “payment”?

Download: Web.StringTables.resx
Download: WebControls.StringTables.resx
Download: WebCore.StringTables.resx

Categories: dasBlog

August 16, 2003
@ 05:12 PM

Since the backend stores all times in UTC, the engine can also adjust for daylight savings time when rendering. Check out the April 1st page and compare the timezone info below the entries with the following March 30th.

(BTW, I've done the whole time handling stuff mostly because I've seen that being only on GMT is a bit painful if you are a Fast Chicken in NZ. Nic, you get your timezone back.)

Categories: dasBlog

August 16, 2003
@ 03:55 PM

Don't be surprised to see this Weblog showing you Russian day and month names if your browser's preferred language is set to Russian or talks to you in Spanish or Italian. Also, don't be surprised if even more things (like the "Comments" link or all the field names on the Comment page) show up in German, if your preferred language is German. That's a feature. 

Categories: dasBlog

August 16, 2003
@ 03:40 PM

This is a split entry consisting of two posts. Everyone can see this post, but you will not see (2/2) on the website, if your browser's "Languages" setting doesn't have German as an acceptable language.

Categories: dasBlog

In 1.1 (hidden) and in 1.2 (no longer hidden) of dasBlog, you can enable a feature for Mail-To-Weblog that will automatically turn attached pictures (not embedded pictures) into thumbnails in the post and you can also control the maximum height for the thumbnails. The relevant settings in site.config for 1.1 are


In 1.2 the config settings are the same, but I added them to the config page. Here's an example of how it comes out:

Das Blog-splash.jpg

Categories: dasBlog

My buddy Stephen now also runs dasBlog in "all features enabled" mode. Both of us are now using our Radio subscriptions, while they last, just to upstream our RSS feeds to the Userland cloud from dasBlog. His Radio feed is in sync with the new feed and so is mine.

John Bristowe is also a Radio convert and comments that exuberantly with "Free at last, free at last, thank God Almighty, I'm free at last.".

I guess we can sum this up with:

Dear Userland, for more than year you didn't even bother to try fixing all the substantial problems Radio has around random upstreaming failures, random crashes, losing content, whacky caching effects, broken comments, lack of extensibility with mainstream tools and a lot more things. Radio is stuck at version 8.0.8 in a time when a new blogging tool gets published every other day. This is our answer.

I've written a bunch of features in dasBlog specifically to give myself a clean upgrade path from Radio to my stuff (and some of them I still have to document cleanly). Whenever anyone hits a permalink at my old Radio site, they get redirected to the correct entry here, I can update my rss.xml at the Userland cloud and I can use any available Radio design templates pretty much unchanged. What's funny, for instance, is that my engine pretty much never fails with a timeout when upstreaming the rss.xml to the Userland cloud. These are the real reasons for why dasBlog does what it does. I just got totally fed up with Radio.

John Bristowe wrote me a "Thank you" email saying "I believe a "switch" campaign (a la Apple) is in order. Goodbye, Radio. Hello, DasBlog! :-)". 

There's certainly not going to be a campaign, but I'll happily share my config details with anyone who's asking. Sorry, Userland.

Categories: dasBlog

August 9, 2003
@ 05:00 PM

Today was another day of brutal heat. Nearly impossible to go outside during the afternoon. So I had a very lazy start into the day and then watched football (real football!) and observed the players getting grilled ;)

My team, Borussia Mönchengladbach ended up with a 1:1 tie against Werder Bremen, scoring in the 81st minute to equalize a Bremen penalty goal earlier in that half. Two games, 4 points and rank 5 in the league with ranks 1-4 having the same point score. Not bad at all for this year's start. I rarely ever have time to go to the stadium, but I have been a huge fan ever since I could kick a ball. It's my home city club, so we're talking love here, not just sympathy.

Anyways ... between breakfast and football I played around with CSS and created a new template for my own blog, trying to stop myself from jumping into the code-base and making adjustments. Then I dropped the 5 files onto the server some 15 minutes ago and .. voilá ... works. The theme uses IE filters for the shadows, but otherwise it looks the same in Opera. Haven't checked out other browsers, but, in all reality and honesty, and looking at our server logs .... 'nuff said.

Categories: Blog | dasBlog | Other Stuff

August 8, 2003
@ 12:50 PM

I just had a horrible idea for how to test the mail-to-weblog feature. Don't follow this link.

Categories: dasBlog

August 8, 2003
@ 09:22 AM

Version 1.1 of dasBlog is up for download. Preferred download source is the GotDotNet workspace for the project, the other is on our server here.  

With this drop, we’re also releasing the lock on the source and leave the files checked-in in the workspace. If you want to add stuff, you are invited to do so, but make sure you read the set of simple rules I posted there on how to deal with the source control system.

Categories: dasBlog

August 8, 2003
@ 06:52 AM

Jörg ist current checking out dotText. He very much likes the admin interface and says it's very cute. And not only that. I had a glimpse and I have to agree. I think it's fantastic that Scott and us are releasing such big chunks of public code for the same purpose at the same time, but there is no "vs.". I think .Text is cool.

The most striking between the two engines is that .Text sits on SQL and ours uses plain text files. What I found through the email feedback I've gotten is that a lot of people who want to use dasBlog have their stuff sitting at some ISP and either don't have a SQL Server to talk to or the setup is too much of a hassle. So for them, the plain text storage makes more sense. I was about to rip it out and replace the file storage with a SQL backend as well, but now I am quite happy that I didn't.

(Although i have to admit that the transaction-loving architect in me still opposes the whole idea of using plain text files for read/write in a concurrent environment)

The second difference is that I started the whole thing only a bit more than 3 weeks ago from a copy of BlogX.

Categories: dasBlog

August 7, 2003
@ 08:19 PM

No, I haven’t built the stuff 3219 times. It’s “3” for 2003 and “219” is today’s day of the year. Here’s the compiled one-liner that sits in my system32 directory and tells me …



Categories: CLR | dasBlog

I can’t myself to write the release notes at this hour (and the folks already running V1.0 would be unhappy without them), but dasBlog 1.1.3219.0 is sitting here all wrapped and packed and ready to go. So expect the zip files to show up at some time Friday at GotDotNet and around here. To start, here’s a bit of new documentation for the themes, templates and macros.

The documentation hero for the macros (and especially for digging up all the CSS classes) is Jörg Freiberger.

Jörg also spend numerous hours figuring out how to trick the ASP.NET calendar control into things it just doesn’t want to do in terms of formatting. No matter what you do, it just keeps injecting style attributes for things it seems are right although nobody ever asked for them. So the calendar control got us annoyed enough that we told it to shut up about formatting by creating a derived control and overriding the Render method like this:

        protected override void Render(HtmlTextWriter writer)
            StringWriter sw = new StringWriter();
            HtmlTextWriter hw = new HtmlTextWriter( sw );

           // Render the calendar by calling the base class' method.

           // strip all the calendar formatting.
            writer.Write(Regex.Replace( sw.ToString(),"\\s*style=\"(.*?)\"",""));


Categories: dasBlog

If you look at the bottom of the webpage of this posting (at least at the time of this posting), you'll see that this is now running on build 1.1.3218. The CSS styles of the templates here haven't been updated fully, so the calendar on the right is a bit ugly and I have disabled all other themes for the moment.

If you compare this (rss.xml at my old Radio weblog) and this (the RSS feed here), you'll notice that they're synchronized now. (Welcome back to my blog to all those folks still subscribed to the Radio feed)

This here :-D was typed as colon-dash-caps-D and is converted to an image link when rendered to the website using a simple content filter. All of you reading this through an aggregator will say "really?!", because all you'll see is colon-dash-caps-D. I don't want all that traffic for the images coming this way.  ;)

Categories: dasBlog

August 5, 2003
@ 04:05 PM

Jörg and myself are getting real close to release the new drop of our "summer project", dasBlog, within the next two to three days. It's going to carry a 1.1 version number already, because we've made another set of massive changes, including restructuring the code base and splitting it up into many more files and projects, which should make collaborative work on this much easier (...possible). 

Areas that were worked on specifically:

  • All controls we render inside the macros will get a CSS class assigned to them and we are removing most of the fixed formatting inside the code, so that the appearance of every little thing shall be customizeable. This will have an impact on existing templates and may break some of the Radio templates, but the required changes should be rather minimal.
  • All time expressions are now consistently stored in UTC 
  • Mail-To-Weblog can now deal with RFC2822 dates
  • Nested OPML outlines can be rendered and edited
  • "Content filters" is not a new, but now visible feature that allows to run an arbitrary number of search/replace filters (regex or plain) against content before it is rendered. So, if you want to turn semicolon-dash-closing-parenthesis into a smiley when your page is rendered, you can add a filter that will do so. 
  • dasBlog can post its own RSS feed to any remote storage system supporting the XmlStorageSystem API, including the Radio Userland store.
  • Lots of additional configuration options to switch services on and off.
  • Several bug fixes.

Once we're done with that, Stephen Forte has promised to add some additional caching magic to the stuff.

Categories: dasBlog

My Radio subscription runs for another 11 months and I have some 40MB of webspace there, so why not use it. Also, it seems that it's going to take forever for people to switch their subscriptions from the old RSS feed to the new one. So, I wrote an XML-RPC client for Userland's Radio cloud this weekend and a little command line utility for upstreaming stuff outside of Radio. Of course, the real reason for the client piece is to be able to have my blog engine automatically push changes in the RSS feed up to my old blog location for as long as the Radio subscription runs, so that even the lazy folks get the right stuff. It'll be a switchable option in the next public dasBlog build.

Categories: dasBlog | XSS

July 31, 2003
@ 08:10 AM

There’s a bit too much advertising in the dasBlog themes. I didn’t remove some of the links that were meant to be only on our themes here at the newtelligence site. The download below is a drop-in replacement for the themes than are in the current build (1.0.3210.0)


Categories: dasBlog

July 30, 2003
@ 06:26 AM

After Stephen Forte, who heroically tries to get dasBlog to run on the 1.0 Framework, came back to me with “it’s very slow”, I spent a little time profiling and investigating and it turns out that showing the comment count for every entry is a big problem because of the internal file structure of the underlying BlogX store (it puts comments into an extra file). For the next build, there is going to be a config switch to turn rendering the comment counters on and they will be off by default. We’re talking about a 200%-300% perf gain for the respective execution path on my machine here, so this is a significant improvement. What I also switched off for good (unless anybody complains, in which case it may become switchable) is the ability to include ASP.NET controls straight into the templates, because there is a macro that allows you to pull in web user controls and this should do the job well enough, because the template by themselves allow no additional control over the controls you could inject.

Categories: dasBlog

July 29, 2003
@ 09:03 PM

Christian Nordbakk switched.

Categories: dasBlog

July 29, 2003
@ 04:40 PM

It apparently took Tom Mertens about 5.43 seconds (ok, but not much longer) to get his dasBlog installation working. My site logged his Weblog comment at 18:17 and now at 18:40 he did already switch.

Categories: dasBlog

So, (t)here it is. And even a day early. I uploaded newtelligence dasBlog 1.0.3210.0

There’s a GotDotNet workspace where you can get the installers (one for a Website and one for the source) or get all source code using the GDN source control “applet” or the VS.NET plug-in.

The files are also available at in the Download section, but GotDotNet is a better choice for bandwidth (for you and for us). If you want to build the source code, you need Visual Studio .NET 2003.

Make sure you read the instructions of the web-install and read the docs that are already there and specifically the docs on the installation steps.

BlogX users should have it very easy to upgrade. Use the web-installer to create a new site on your local machine and drop your existing siteConfig and content directories into the new installation. The siteConfig only needs one new entry in that case: You need to add a <BinariesDir>content/binary/</BinariesDir> tag. The installer should create the necessary subdirectory already. Once the site runs (the setup steps are exactly identical, otherwise and therefore it should) and you’re happy with the templates and all, you can copy the whole stuff over to your existing site and you’re set.

Radio Users will have to fiddle around a bit and poke around in the web.config (see the UrlMapper config section) and look at a previous post to help their hyperlinks to follow them to a new site. Between then and now I made an update that will not only redirect the hyperlinks but also the referrers and I’ll post something about that on the site these days. It shouldn’t be too hard to figure it out looking at the UrlMapper config if you are Regex savvy.

However, starting with the content and setting up a replacement for Radio is very easy if you told Radio to make “XML backups” of you data. The command line tool (DasBlogRadioImport.exe) that is included with the source setup and about the only set of files that made it over alive from BlogX, allows you take all the content with you:

dasblogradioimport /from:"c:\program files\radio userland\backups\weblogArchive\posts" /to:c:\temp\radionew

The target directory, which must exist before you run this, will contain a complete content directory that you can simply drop into your new site.

I am not sure about switching from other tools, but since you have a MovebleType/Blogger/MetaWeblog API endpoint sitting at /yoursite/blogger.aspx, some tool may be able to make sense out of that for import/export. I have successfully tested w.bloggar, Zempt and blogBuddy with dasBlog. However, nothing beats Outlook for blogging.


Categories: Blog | dasBlog