A couple of month ago I wrote that
I switched to Pretzel to drive my site.
What I really like about Pretzel (except that it's written in .NET) is that it is
so easy to extend. You can
write plugins either as a .NET assembly, or—even simpler—throw in an
.csx file, because Pretzel supports ScriptCs.
One of the first extensions I wrote was a site map
plugin. By default Pretzel already creates a site map, but only for static pages.
Unfortunately, this doesn't include paginated pages like the home page. Those pages
are generated dynamically at runtime of Pretzel, and the default
take those dynamic pages into account.
Therefore I wrote this plugin which creates the
sitemap.xml including all generated
pages, even the paginated ones. It uses the same technique as
for each post and page it adds an
url entry to the sitemap. Additionally it checks
the page's front-matter if
paginate is specified, and adds relevant URLs to the sitemap
The plugin is hosted on Github including
some basic tests, but in fact you only have to copy
_plugin folder of your Pretzel site.
Update 2016/12/29: I've complained about the
On prefix in the comment section
of the documentation (and Jonas Gauffin too). In fact the prefix was a mistake and
is fixed by now.
Things are changing in the .NET world. A couple of days ago Microsoft released
.NET Core 1.0,
the new cross-platform, open source, and modular .NET platform.
Unfortunately, not only the managed framework's changing, but naming guidelines
Lets start with the old .NET framework. Microsoft says in the
Naming Guideline for Events:
✓ DO name events with a verb or a verb phrase.
DroppedDown, and so on.
✓ DO give events names with a concept of before and after, using the present
and past tenses.
For example, a close event that is raised before a window is closed would be
Closing, and one that is raised after the window is closed would be
The (slightly outdated) Event Naming Guidelines for .NET Framework 1.1
even says more explicitly:
- Do not use a prefix or suffix on the event declaration on the type. For
Close instead of
That's what we've been taught for the last 15 years: Events are named without
Let's repeat: Events are named without a prefix.
Entry .NET Core!
Robin Müller, maintainer of the telegram.bot
library, changed the names of all event from an unprefixed name to prefixed with
in a recent commit.
I complained that this renaming would contradict the guidelines recommendations by Microsoft
and what we've learnt the last 15 years.
However, Robin pointed me to the new guidelines
There are a number of conventions that you should follow when declaring an event.
Typically, the event delegate type has a void return. Prefix event declarations
with 'On'. The remainder of the name is a verb.
WTF? Do we have to forget the old habits and rename all events when moving from good ol'
.NET Framework to .NET Core?
The new guidelines include a comment section at the bottom where I asked for the rational
behind the changed guideline a few days ago, but I still got no answer. I'd really like to
Sidenote: Most of us are used to name the handler for an event
On<name of the event>, e.g.
foo.SomethingHappened += OnSomethingHappened;
What should we call those event handlers now?
Some time ago I told that I converted my blog
from CommunityServer to Jekyll on Github Pages. However, I was not satisfied with
that solution. Running a static site has one drawback: redirects for moved pages.
When you change the structure of a web site, you don't want old links to reference now
invalid URLs. That's would be called link rot.
Instead, you want that users following a link to an old location are redirected to the
new page automatically.
Actually, there are plugins for Jekyll for redirection, the most popular is
jekyll-redirect-from. However, what
it does is creating an HTML page at the old location with a
HTTP-REFRESH meta tag
pointing to the new URL.
I don't like this solution because the status code of the HTTP response is 200,
indicating that the old URL is still valid. I guess that Google or other search engines
pay attention to the
HTTP-REFRESH meta tag, but nevertheless it's a bad idea for SEO
Instead, a correct implementation would return the status code 302, indicating that the
page moved permanently. Unfortunately that's not possible generally for static web sites.
That was the main reason I ditched Github Pages. I didn't want to go back to self-hosting
on a virtual server, so I decided to move my site to Azure. Additionally I took the
chance and replaced the blog engine too.
Not being a Ruby guy, I searched for a similar blog system but written in .NET. There are
a few, but the most appearing to me was the Pretzel.
Pretzel is an open source blog system, behaving more or less the same as Jekyll.
Additionally it supports several extension points, which I as a developer really like.
I'll write about running Pretzel on Azure and different Pretzel extensions I wrote in
some future posts.
TL;DR: I wanted to have more control over my website, therefore I moved from Github
Pages to Azure, and from Jekyll to Pretzel.
A few minutes ago I published the new version 1.3 of 7Zip4PowerShell.
Isaac Springer asked for password support when creating or extracting archives, so I
added the optional parameter
-Password to both
You can get the new version at NuGet as well as
A few days ago the Preview suffix was removed from PowerShell
Gallery. This gallery is a central repository for PowerShell content
such as modules and scripts. You can read the public
in the Windows PowerShell Blog. You can find instruction how to take
advantage of the gallery on its
homepage, and more details on the Get Started page.
Until now I published
PowerShell commands to compress and expand files with 7-Zip, as a plain
assembly. However, several users asked for a "real" PowerShell module. I took
the public release of the PowerShell gallery as an opportunity to
accommondate that demand. The 7Zip4PowerShell module is now available
and installing it is as simple as invoking
Install-Module -Name 7Zip4Powershell
I'm very happy that the folks at Microsoft created that gallery, because it makes the discovery of interesting modules so much easier.