Johan Driessen

An Excellent Analytics Tool

Ever wished that you could extract the data from Google Analytics and process it in some powerful application like say, Microsoft Excel? Well, now you can!

Excellent Analytics is a simple Excel plug-in that let’s you import data from you analytics account straight into your spreadsheet. It has been developed as thesis work here at Dropit by our former intern Fredrik Johansson (great job!), and is available as open source at excellentanalytics.com, or if you want the source code at http://code.google.com/p/excellent-analytics/.

It is also being released as a part of our Labs project at http://labs.dropit.se.

Check it out!

Updated: Article on IDG

Windows 7 XP Mode is really nice

This post was originally published on *http://labs.dropit.se/blogs.*

As an early adopter of everything new (meaning if it isn’t beta it is not worth installing), I recently installed Windows 7 RC on my laptop, and yesterday I also installed Windows XP Mode, or XPM. XPM is basically an extension of Virtual PC, and a new Virtual PC beta version, that allows you to run XP applications outside of the virtual machine, just like normal applications.

image.axd

This is really useful e.g. for testing things in IE6, or older versions of Firefox. The only working way of running IE6 on Vista or Win7 is in a virtual machine, but switching between the virtual machine and your normal environment is a hassle. But now I can just start “Internet Explorer (Virtual Windows XP)” from start menu in Windows 7, and get an XP/IE6 window right beside my other apps.

The only thing that bugs me is that the taskbar icon shows a virtual pc icon instead of the IE6 icon.

icon_screenshot

Security flaw in EPiServer plugins?

This post was originally published on *http://labs.dropit.se/blogs.*

A colleague of mine - let’s call him Erik Nilsson, since that is his name - recently came across a potential security problem when creating your own edit och admin plugin to EPiServer. Unfortunately, he’s too shy to write a post about it, so I’ll relay the information. If you create a plugin like this:

1
2
3
4
5
6
7
8
9
10
[EPiServer.PlugIn.GuiPlugIn(
Area = EPiServer.PlugIn.PlugInArea.AdminMenu,
DisplayName = "Plugin name.",
Description = "Plugin desc.",
Url = "~/plugin/myplugin.aspx",
RequiredAccess = EPiServer.Security.AccessLevel.Administer )]
public partial class MyPlugin : EPiServer.UI.SystemPageBase
{
//...
}

You might think that this plugin in only accessable to users with administration right. This however, is only the case if you access it through the admin mode. If you access the page directly, i.e. by using the url http://somesite.com/plugin/myplugin.aspx, you can access it without even having to login. Seems EPiServer only checks the RequiredAccess in the admin or edit mode.

So what you need to to in order to secure your plugin is to set required access for the “plugin” location in web.config:

1
2
3
4
5
6
7
8
<location path="plugin">
<system.web>
<authorization>
<allow roles="WebAdmins, Administrators" />
<deny users="*" />
</authorization>
</system.web>
</location>

Bug or working as intended? I don’t know, but it’s important to keep in mind either way.

By the way, I’m trying out a new syntax hightlighter. Like it? It’s this one. The old one is still available as well, but it seems to be more happening with this one.

Simple Exception logging with ELMAH

This post was originally published on *http://labs.dropit.se/blogs.*

Logging errors on a web site can be a pain. Sure, when you use EPiServer, you get the log4net error logging framework, but how much fun is it to read the log files it produces? First, every 404 is going to clog the log file making the important errors hard to find and second, the format of the log is not really reader friendly – you need to access the server and open it in a text editor. This usually means that you (or I, or we) ignore the error log until something bad happens.

At the same time, there is much to be gained by keeping track of your exceptions continually, and fixing them before they cause problems. And it turns out there is an excellent tool for this, called Elmah.

Elmah is an error logging tool that is completely pluggable, meaning you can add it without re-compiling och re-deploying, just by dropping a dll in the /bin directory and adding a few lines to the web.config file. After doing this, you get a nice web interface for you exceptions, that look like this:
image.axd

What you see here is just the list of errors. If you click the details link on one of the errors, you get lots of more information. First of all, you get info about the error itself, the stack trace and so on. Basically the stuff you see on the usual yellow .NET error page. But you also get all the server variables, such as the user agent, the charset, the language, the hostname, the file that was accessed and so on. This makes it much easier to track down the actual problem, and this is of course something you don’t get when you just use log4net and log to a file. Elmah logs to memory by default, meaning that the log disappear when you restart the application. But it can also log to a database or and XML-file if you need persistance. Regardless of the format, the UI is the same.

It took me about 2 minutes getting this up and running, following this nice tutorial. And since this seemed really sweet, I immediately wanted to install it on a real server (no, Apollo is not a real server, it’s just my computer at home). Said and done, I quickly discovered two things:

  1. On a Windows 2008 Server, you don’t put you httpmodules and httphandlers under the system.web element, but under the system.webserver element. What’s more, httphandlers need a name attribute.
  2. If you log exceptions on a public web site instead of you own toy site, 99% of them will be HttpExceptions, namely 404 errors (actually, I knew that already, I mentioned it in the first paragraph).

The first problem was easily fixed. The second one was more interesting, as this was one of the reasons that I wanted to use Elmah in the first place. Well, luckily for me, it turns out that Elmah also comes with a pretty competent filtering framework. So by using this little snippet, I filtered out all 404 errors:

1
2
3
4
5
6
7
8
9
<!-- register the filter module in httpModules or modules, depending on the IIS version -->
<add type="Elmah.ErrorFilterModule, Elmah" name="ErrorFilter" />

<!-- config the filter in the elmah config section -->
<errorfilter>
<test>
<equal type="Int32" value="404" binding="HttpStatusCode" />
</test>
</errorfilter>

So now the exception logging is running happily both on my toy site and on the production web site, whose identity I will not disclose here. Unfortunately, since I got it up and running about an hour ago, not a single exception has occurred! Somebody better do something we didn’t think of soon! :-)

Meanwhile, I will add the built in RSS-feed to my RSS-reader. I did mention that it comes with a built-in RSS feed, did I not?)

ASP.NET MVC + SubSonic + T4 = Sweet!

This post was originally published on *http://labs.dropit.se/blogs.*

I’ve been fiddling around with ASP.NET MVC and SubSonic 3 for a while (as I mentioned in a previous post), and also been learning some cool stuff about T4 Templating. Now Rob Conery has created a very cool Visual Studio template bringing all this together (be sure to watch the video). And it even includes single sign on capabilities with e.g. Google and OpenID! And yeah, lots of ajax with jQuery.

I tried using this yesterday, and apart from his template being a little bit broken it really works! I created a data driven MVC web application with my own custom database in like 30 minutes. And without any magic, unmaintainable code that you can’t fiddle with. It’s just plain MVC, with SubSonic domain objects.

So I started over with the Dropit Labs site (which is actually only a static html page right now), using this. And after 2 more hours work I’m now only a little styling away from replacing the static version with a new state-of-the-art ASP.NET MVC version that will look almost exactly the same! I’m hoping to find the time to use my crazy css skills this weekend, and being able to release it next week.

The newest EMVP: Fredrik Karlsson

This post was originally published on *http://labs.dropit.se/blogs.*

On Wednesday, one of our oldest employees (as in has been working here for a long time, not really being that old) was appointed an EPiServer Most Valued Professional, or EMVP. A big congratulations to Fredrik Karlsson!

I managed to get a little chat with him about how he feels about this and how he feels about EPiServer.

Johan: So, Fredrik, congratulations on becoming an EMVP.

Fredrik: Thank you.

Tell us a little bit about yourself, how long have you been working with EPiServer?

Well, I’m 30 years old, lives in Stockholm and slowly getting a little bit fatter for each year.

I’ve been working with web development since 1997 and with EPiServer since 1998. In 2000 I started working at Dropit and here I am today.

I see, and what is your current role at Dropit?

For the last year I have been involved in the development of Extension X3… err EPiServer Composer, but since EPiServer bought it I have been working in something called Expert Services here at Dropit. You might say I’m something as a developer handyman, doing everything from error search to specialized customer integrations…

What do you think is the greatest difference in working with EPiServer today compared to when you started?

When I started with EPiServer CMS 2 is was a VBScript/asp based website with frames. You can’t really compare the products. But I can say that EPiServer CMS 3 was nice because you had the ability to change almost anything. Then in EPiServer CMS 4 I think it was a small step backwards because it was a much more system. But now in EPiServer CMS 5 I think it’s a giant leap forward. Especially with a lot more generic MS controls rather then the homebrewed ones from EPiServer. Because lets face it, EPiServer is not that good in building web controls.

What does it mean to be an EMVP?

Apart from the small perks you get from EPiServer I think the biggest difference is that you are somewhat responsible for the reputation of EPiServer. If an EMVP writes something insulting, it will reflect on EPiServer and not just the person. Especially now with EPiServer gaining a larger international market. But to be honest, the thing I look forward the most is probably the clothes.

What do you anticipate most in the next release of EPiServer?

MVC. Please, please, please EPiServer!

Why do you think EPiServer is still relevant today after so many years?

They have been rather successful in implementing new techniques and so on. But I believe the key factor is that it is very good for novice advanced beginners. Its really easy to get started witch give them an ever expanding user base. Especially with the demo templates and likewise.

What to you think is EPiServer’s greatest challenge in order to keep being relevant in the future?

To be true to its core business and not try and do something they are not that good at. But first and foremost to listen to the EPiServer user/developer community, Today this is EPiServer weakest part by far. Sure, they say they listen to us, but it’s lacking so much in information and the possibility to give to the community.

Thank you, Fredrik, for taking the time to answer my stupid questions.

No problem. Can I say hello to my colleagues??

No.

Why doesn't EPiServer.DataFactory implement IPageStore anymore??

This post was originally published on *http://labs.dropit.se/blogs.*

We recently upgraded our project to EPiServer 5 R2, and that made some strange things happen. I had a class that uses the EPiServer.DataFactory to manipulate pages, and in order to make it testable, I had the following constructors:

1
2
3
4
5
6
7
8
9
10
private IPageStore _pageStore

public NovaImporter() : this( EPiServer.DataFactory.Instance )
{
}

public NovaImporter( IPageStore pageStore )
{
_pageStore = pageStore;
}

This worked just fine before we upgraded. But now it turns out, in R2 DataFactory doesn’t implement IPageStore anymore. In fact, the only interface it implements is IPageSource, which is pretty worthless in this context. Of course, DataFactory still have the same methods, so it could *implement IPageStore, it just… doesn’t. And to make things worse, DataFactory is *sealed**, so you can’t really mock it at all, and it only implements PageStoreBase (which only contains event handlers), and the aforementioned IPageSource. So basically, EPiServer just made it impossible to write unit test for anything using the DataFactory. Thanks.

Why, oh why did EP decide to change this? Anyone know?

LINQ in .NET 2.0

This post was originally published on *http://labs.dropit.se/blogs.*

Good news for everyone currently supporting older projects (.NET 2.0): You can use LINQ and Lambda-expressions in .NET 2.0! At least if you’re using Visual Studio 2008 (which there is no reason not to do, is there?). The trick is that VS really use the same compiler for 2.0 and 3.5, and since LINQ is only a language feature, it is able to translate it to the same IL-code anyway.

This blogpost on elegantcode.com explains how you do it.

If you’re still working in a .NET 1.1-project (god forbid), you’re out of luck.

Unionen.se praised on IDG

This post was originally published on *http://labs.dropit.se/blogs.*

When you’re working in this line of business, developing web sites, that is, you’re not that used to praise. Once a web site has been launched, most of what you hear is bugs and new feature requests. But once in a while we get the praise we deserve! :-)

Today the Swedish magazine internetworld published a review of the public web sites for 6 of Sweden’s largest unions. The site I have been working on, unionen.se, got 9/10, and a splendid review, the title of which reads “Good looking and smart in a modern suit“.

I worked on unionen.se pretty most of 2007 as a Scrum master and systems architect. It was one of our first real Scrum projects here on Dropit, and I dare say one of the most successful ones so far. One the most important reasons for that was that we had a great Product owner (Karin), but also that we were a very good and dedicated team (you know who you are!). Dropit was responsible for the whole delivery, so we worked both with the conceptual and graphical design as well as with the technical implementation. The site is based on EPiServer 4.62 and our internal framework Foundation.

We had the privilege of having the whole team sitting together with the customer, which wasn’t the standard way to do it for us back then. Since then we are advocating this more and more, since the collaboration with the customer really improved. It was also a technically challenging project, as we were heavily dependent on the SOA infrastructure being developed simultaneously, and we even had to work on New Year’s Day to make the launch. But it really paid off, and it’s extra fun for this to get recognized on idg.se!

So once again, thanks to all the people that worked so hard to create unionen.se!

Simple source control with Subversion and Dropbox

*This post was originally published on http://labs.dropit.se/blogs. *

I noticed that the activity on this blog has been a bit low lately, probably due to the fact that everyone has been away for the holidays. Instead of nagging on everyone to start writing again, I though I should lead by example and write an entry myself first. :-)

This is on the same theme as my previous entry, Keeping things in sync, where I went on about how happy I am with Dropbox and Evernote to have access to all my important files and notes on all computers. Since then, I have discovered another great way of using Dropbox.

I usually work on a few projects outside of work, and although I do want source control on these (mainly for the versioning), I can’t put these in our TFS. So I did what every responsible developer does; set up a VisualSVN Server on my computer and use that one for the verison control (I use AnkhSVN for the VS integration by the way, works almost flawlessly for me). But now it happens that I have another computer at home, one that is faster (dual core E8400) and has a bigger screen (24”), and when I’m at home I like to use that one for programming instead of the laptop I use at work (Thinkpad X301, lots of name dropping here). One way is to turn on my laptop and connect to the server there. But that seems like a lot of work. You know, turning on the computer, finding out what IP the DHCP has assigned to it today and so on. And what if I left my computer at work?

Enter Dropbox. Again. I simply created a new folder in my dropbox folder, called SVN-repositories. Then I installed VisualSVN Server on both computers, and set it up to use the SVN-repositories folder to store the repositories. Done!

So now I have a local SVN server on both computers, that automagically keep in sync. If I do some work on one computer, the next time I start the other one Dropbox will inform me that it has updated a few obscure SVN-files, and that’s it. Wunderbaum!

A word of warning though. I have no idea what would happen if you were to change data in both repositories at the same time. Probably something bad. Wouldn’t try it.