Staging module, webfarms and security

I was thinking about the staging- module. Which is actually 90% of the time a perfect solution for ‘Sitecore-webfarms’. But actually everybody tought it is. Because it isn’t.
What’s the case? When you use the staging module to seperate 2 environments(LAN + DMZ) from each other. You actually also have to publish the Extranet-database!

Ofcourse you can make that one just read only. But that means you actually have to place a database on your production database-server everytime you update the Extranet-security. Guess that’s not what you want.
It could be possible that you use the staging module another way:
– Use Firebird as database for Extranet
– Set an upload folder in the staging-module-node to the place of the Firebird database
Actually, this is an ugly work-around. But I guess it does work. Only there are no system operators avilable which actually like this kind of fixes, and there right this time…

Guess I’ve to figure a better way out!

First experiences in .Net 2.0 with Sitecore 5.2

Last Friday I finally installed VS.Net 2005 Final version. Together with some of my collegues I’ve played a time with the new features like: partial classes, generics, nullable types, etc :).
On satuday I’ve been playing mostly with the generics, as they are, in my opinion, the biggest change and advantage of C# 2.0. I wrote a XML-generator which is able to deliver the XML-Feed from the guys of YourZine the right XML to subscribe, update, etc. Actually it ewasn’t so hard. I became ready within 2 hours.
Yesterday I started working on my first 5.2 site. Or at leats, find the best mdoe to work with Sitecore in .Net 2.0. After one hour of struggling with the builtin webserver, I’ve decided to use the good friendly IIS again. Does anyone has suggestion how I can run any site as root on the builtin webserver? Without hacking the solution file ;).
About that, am I actualyl wrong or is it normal that I’m not able to find the project-file?
Right now I got an idea: why don’t create a project on /layouts/ and then set the output directory to ‘../bin/’ ;). As you see I definitelly look for suggestions :).
Come back to you soon.

The way from 5.0.6 to 5.1.1 – Part II

Four weeks of silence…

Yes I’m nearly ready with the upgrade. I received the upgraded and patched databases from our dear friends in the Ukraine.
I’ve nearly finished rewriting Sitecore code for the upgrade. As a matter of fact, it just was recompiling against the new DLLs and fix one problem:
– IDomain -> Domain (noticed in the Release Notes of 5.1 on SDN)

Actually we’ve upgraded to v5.1.1.8. Today I’m going to 5.1.19 before we go live. Sitecore sent me an email last friday that another one is coming within the net couple of days but when the fixes made in that versions won’t affect our installation, we actually will go live on that version.
One of the main disadvantages of 5.1.18 is actually lots of changes in the client. Now our customers have to get familiar with it again :(. We even have to do some hacks in the client so everything loks like they want to(I will post more about that today).

I’m actually ready to go to work now. Or at least to our customer, as I sit there intern…

Creating and manipulating packages

As developer you are lazy like hell. As a matter of fact, my main goal every day is to keep my mouseclick below the 1000 ;). Two advantages: my collegues are actually the same and my boss knows that he shouldn’t try to make us click more on daily base :P. Rather then clicking you prefer writing code!
So this occurs: you have to transfer some stuff from one installation to another. And the items are looking quite the same (seems neccesary: you have to filter the items) then you can easily write your own packager.
Look down here:
//Use this namespace:
using Sitecore.IO.Packager;

//Look out here you are actually creatin the place of the package in the constructor:
//You can read the destination from the web.config, have fun :P
Package myPackage = new Package("//data//packages//");

//We are going to add the items
//This looks like it happends async but actually I haven't found out yet
myPackage.Items.Add( (Sitecore.Data.Items.Item) yourItem, (bool) includeChilden);

//We are going to add the files
//This looks like it happends async but actually I haven't found out yet

//Close the package so all handles are actually closed:

Is this actually so hard? I guess not. Ofcourse you have to walk trough the items and files but that won’t be so hard to :). Happy packaging!

Running trough items, the don’t forgets

As engineer I guess everybody likes to debug some stuff. Including me. What I actually dislike are the ‘already expected’ bugs.
Today I found three big bugs in some code of myself and some of my collegues. So it’s time to write down muy first SC5 development rules.
My today’s rules are about: walking trough items in the Sitecore tree.

    When need items for a list, overview, archive, news, etc, create a template for there self. After you can always check if the item has at least the right template(item.Template.Name/item.Template.ID).
    Everytime you resolve an item using (for example: Sitecore.Context.Database.GetItem(“/sitecore/content/home/”)) check if the received item-objects aren’t null. Nullpointers are so easily created. But always hard to find in more complex code.
    Never forget that Sitecore paths start with a ‘/’.
    Never add full Item-objects to DataTable, DataSets, etc. When you are going to bind then to a repeater for example, it will cause lots of preformence. Validate the data in your code by filling only the properties you need. It much easier and your code becomes more clear. With some good validation you should also be able to protect yourself against nullpointers. And when the API changes for some reason, your IDE will notify you while compiling.
    Last but not least, don’t forget the rules of recursion. Recursion is very powerfull but can also let your application crash by out-of-memory-exceptions, etc. You definitelly need to know what you’re doing!

Hope this wise lesson 😉 will protect others from making mistakes during Sitecore development. Ofcourse it isn’t all just Sitecore stuff. Some is also general programming :).

Bye for now,
– Alex

Extranet security only applies when you restart IIS…

I was surfing accross SDN today and there I found at the known issues part for Sitecore 5.1.1 the following note:

Extranet security changes require IIS Restart
Access right assignments you make for the Extranet Users and Roles won’t take effect until IIS is restarted. This issue can be fixed by installing the Extranet Security Issue patch.

Now I finally understand why my all my script didn’t work in the first place but worked after I placed it between the using(new SecurityDisabler())-bracket.
When these problems occur at your installation. Login at SDN and download the patch

Upgrading or stay and wait?

One of the things that keep me busy these days are the things Runi Thomson wrote as a comment of this post.
He is reacting on the question of Alexey Rusakov about if SiteCore will be released in both .Net versions or just in one after the release of 5.2.
This is the reaction of Runi:

We certainly hope not. Sitecore version 5.1.1.x will be the last ASP.NET 1.1 version of Sitecore, unless a serious error emerges. We are currently working on version 5.3 which is an all ASP.NET 2.0 version.

I wouldn’t be Alex when I won’t have question about this decision. The questions are mostly technically, but also as partner LECTRIC got the idea that SiteCore would be released in both versions for a while at least till the end of 2006.
Ofcourse I know that ASP.Net 2.0 has got lots of advantages against version 1.1., I even don’t expect hard times developing for my collegues and me(as a matter of fact, I already studied a lot on the new features and am not so damn impressed by the new features, but all off that is another discussion). The main points of discussion are for me actually:
– Hosting of 2.0 definitelly requires Windows 2003. As most servers are still running on Windows 2000 it means that we can’t upgrade those sites easily.
– Developing for 2.0 requires SP2 on XP, some of our customers, which are developing intern, are not able to roll out SP2 for some reason or are not able to do it before Q4 2006. This means that we can not offer them new versions?
– SiteCore reports to the world that they won’t release a new 5.1.x version unless it will be unstable on lots of points. So I guess that SiteCore signs the version as the most stable release? When that’s actually the case, the decision for new projects is quite easy! We will stay on till one of our customers actually does require the new features.
– Practically, what can we expect from new versions? Will the core be fully rewritten so it will be native and not upgrade code? What does this mean for the API? Most developers are finally familiar with the 5.1 API.

I’m a little critical but this is also because I expected SiteCore would give us developers more time to get familiar with 2.0. As our sales department will actually sell the new versions before I can even move my mouth, I expect the first offers are already on their way to the customers. 😉 New technics… pfff 😛
Going to sleep now, tomorrow again a SiteCore day.. Going to release another tool of me, the SiteCore security tool, which makes you able to set the security on SQL Server(2000) without haveint to change the script manually(prefixes, role names and logins are configures just ones) guess my last tool in 1.1 :P.

Forgot something! Have to e-mail our sysop that he’s going to search for the stable Visual Studio 2005 CD for me 🙂

Login failed for user ‘sa’

Notthing is more frustrating then an installation where occur errors.
I got the following error:
Login Failed for User ‘sa’, Not Associated with a trusted SQL Server Connection.

Guess what, I’m working on a developer notebok of our customer and mixed authentation mode wasn’t allowed.
The solution is quite easy to find using Google:

The way from 5.0.6 to 5.1.1 – Part I

Today I’m starting with upgrading from v5.0.6.1 tot v5.1.18.
Because of some database corruption we agreed that SiteCore will upgrade the databases(Thank you Alexander Shyba!). For me just the code left :P.

I need to upgrade in total 3 projects:
1. The layouts
2. Some custom workflow actions based on roles
3. A custom client control

At the moment I can’t really imagine yet if there will be very huge problems. Building the stuff will not be the problem, but then I’ve to run trough all the code, looking for preformence issues, bad code, etc.
Now building one big solution so I can easily and fast debug all the stuff.
Will keep you informed about my experiences.