I’ve been using Rimu Hosting for about 6 months now to host various applications (SVN/Helpspot and others) and am very very impressed so far. True they are not the cheapest out there and don’t offer ‘unlimited’ bandwidth (which is the classic marketing lie anyway) but they do give a solid, reliable service. You get what you pay for.
The real ace up their sleeve though is quite revolutionary - they actually employ people that know what they are doing. I mean really know what they are doing.
I’ve contacted them twice with questions (both non-urgent and my own setup problems as I am not a linux guy) and it was sorted out with one email in minutes, literally. Better yet the reply were helpful; detailed, contained helpful links and talked me through what they had done to troubleshoot, find and correct the problem - I really learnt something. To reiterate, these were not problems with the service they provide, they were down to my lack of Linux/Apache knowledge - they would have been well within their rights to say that it was outside the scope of their support or charge me extra.
The fact that I was astound by this level of support says nearly as much about some of the poor hosting companies out there as it does about Rimu.
Full disclaimer - if you click on this link I get a $15 referral discount, but if you click on this one I don’t.
ILMerge is an invaluable tool from Michael Barnett at Microsoft Research that can merge multiple assemblies together into a single assembly.
ILMerge can output .NET 2.0 or .NET 1.1 assemblies by using the /targetplatform:v1.1 switch.
At the time of writing v2.8.0626 (26th June 08) has a little problem when targeting .NET 1.1 and running on 64bit Vista.
In the log files you see this when running on x86
Set platform to 'v1.1', using directory
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\..\v1.1.4322' for mscorlib.dll
But on x64
Set platform to 'v1.1', using directory
'C:\Windows\Microsoft.NET\Framework64\v2.0.50727\..\v1.1.4322'
for mscorlib.dll
But there is no such dir - .NET 1.1 is only 32bit (though obviously it runs on x64 systems) and the correct dir is
C:\Windows\Microsoft.NET\Framework\v1.1.4322
As a result you will see the following in the log file.
AssemblyResolver: Assembly 'System.Web' is referencing assembly 'System'.
AssemblyResolver: Attempting referencing assembly's directory.
AssemblyResolver: Did not find assembly in referencing assembly's directory.
AssemblyResolver: Attempting input directory.
AssemblyResolver: Did not find assembly in input directory.
AssemblyResolver: Attempting user-supplied directories.
AssemblyResolver: Did not find assembly in user-supplied directories.
....
Could not resolve type reference: [mscorlib]System.Enum.
Could not resolve type reference: [mscorlib]System.ValueType.
Could not resolve type reference: [mscorlib]System.Object.
Could not resolve type reference: [mscorlib]System.IDisposable.
....
(Missed out a few hundred lines referencing all other mscorlib etc namespaces)
ILMerge: Done.
And although it reports done and does not return an error code you will get assembly loading errors.
Workaround
Add a symlink (a sort of low level shortcut) directing ILMerge to the correct directory.
MKLINK /D C:\Windows\Microsoft.NET\Framework64\v1.1.4322
C:\Windows\Microsoft.NET\Framework\v1.1.4322
Tags: Development, ILMerge
This seems to come up time and time again and can leave people hairless. I haven’t found a good, simple walkthrough - so I thought I would put together a quick post.
Disclaimer : This post is written from the perspective of a developer setting up a dev/test system. For production purposes you need to thoroughly understand the security implications of all the setting listed below. But you knew that already.
Back in the good ol days you never had any trouble getting apps connecting to SQL Sever. Username “sa” and a blank password and you were good to go
Things are a bit more difficult now…
This particular example walks through installing Windows SharePoint Services on one server (a virtual server, but it makes no difference) connecting to a SQL Server 2008 Express database Instance on another server.
Both servers are using the same domain. This kb 932376 should help if you are running SharePoint and a Database on servers in different domains or no domain at all.
Firstly, install SQL Server on its own instance (lets assume the machine is called SQL2008EXP and the instance is called SharePoint). There’s a whole big process here that involves what is possibly the worlds most complex installer that inexplicably leaves you manually hunting for all the pre-requisites (Windows Installer 4.5, NET 3.5 SP1, Powershell - but that’s all out of the scope of this post). Seriously Microsofties, you have outdone yourselves with this installer!
Grumbling aside - setup a Domain Account (A) that the SharePoint services will use. As usual for service account make it ‘password never expires’ and uncheck ‘user must change password on first login’.
Start Microsoft SQL Server Management Studio and go to Security > Logins, right click and select New Login. Enter your DOMAIN\UserName (A) that you created above. Select Server Roles and check dbcreator and securityadmin.

Install WSSv3 (SP1 or above) - select Advanced and then “Web Front End” as we want to use SQL Server not MSDE.
The SharePoint Products and Technologies Configuration Wizard should start automatically
Select “No, I want to create a new server farm”
Fill in the account details that you setup earlier (A)
Get the follwoing error
Failed to connect to the database server or the database name does not exist. Ensure the database server exists, is a Sql server, and that you have the appropriate permissions to access the database server.Now its time to waste 2 hours of your life pinging servers, checking names, passwords, permissions and event logs. Or feel free to skip this step and carry on below :-
SQL 2008 installs in a state that will stop you connecting from a remote server.
This is not done out of badness, but for security.
Start SQL Server Configuration Manager
Expand the SQL Server Network Configuration node and find the Protocols for your Instance
Right click on TCP/IP and click Enabled - do the same with Named Pipes
Right click on TCP/IP and click Properties. Select the IP Address tab and make a note (B) of the TCP Dynamic Port
Restart the SQL server service
When you connect to a SQL Server instance via TCP/IP the connection attempt will query the SQL Server Browser service (on port 1434) and find out which port a specific instance is set to listen on. However by default the SQL Server Browser service is disabled. You can now either start it or use the Port number (B) you found earlier to connect directly.
Confusingly the syntax is different to what you may expect - no semi-colons here, use a comma
ServerName\InstanceName,PORT
(If you are using a default instance then the connection will happen on port 1433 by default and you won’t have to enter the port number or worry about the SQL Browser service)
If you have a firewall running you will also have to open up this port number for incoming TCP connections. See Windows Firewall or the Firewall guide for SQL Server 2005
Further reading SQL Server 2005 Remove Connectivity Issue Troubleshooting (most steps applicable to 2008)
Tags: Development, SharePoint, SQL
For many applications (especially server based applications) its essential to provide some sort of logging for support and troubleshooting.
While logging to Windows Event logs is a good idea if you need to get an administrators attention its not really suitable for detailed logging, and if you have a problem you need to have already been collecting details … lots of them.
There has to be as many different logging schemes as there are programmers. A quick search gives you Microsoft’s Logging Application Block, Apache Log4Net, NLog and Google App Engine Logging - and that’s just for starters. You may even think it would be trivial to roll your own? (You would be wrong of course, developers always underestimate things like this).
But all of these options are lacking in one vital part - what do you do with your logs when you have them? Most require you to fire up your text editor and start jumping around a 10MB text file! Give me a break, my sanity is hanging by a thread as it is
I use Gurock Software’s SmartInspect in some of my software (Email reminders and alerts for SharePoint).
The logging library is very good - fast, feature rich, lots of transport options, easy to use and extremely well documented. But where it stands head and shoulders above everything else is the log viewer.
It’s blindingly fast, easy to use, clear and has all manner of time saving features - easy navigation, graphs, filters, colours and much more. Yes the software is a few hundred dollars but will more than pay for itself in time savings the very first time you use it in anger.
Take a look - no connection other than a satisfied customer.
P.S. If you are in the software business and want to know how your product can compete with FOSS alternatives then I think Gurock make an excellent case study.
Tags: Development, Logging, Tools
Jason over at Expat Software has written about how much friction is involved in signing up for StackOverflow because of their choice to use OpenID.
Compared to the zero friction process required to sign up to use his Twiddla service (just click new meeting) StackOverflow comes in at a frustrating 14 steps or so.
And he’s right of course, you want as close as zero friction to use your site as possible and despite being a certified ‘good idea’ OpenID is too just too complex a procedure for the average Joe to bother with.
However, in the case of StackOverlow the determining factor for its success or failure is going to be its ability to keep the signal to noise ratio high and one way of doing this might just be to make the barrier to entry a little higher that it could be and help encourage the unwashed masses to bugger off back to YouTube to spew drivel.
I don’t know if this was a deliberate decision or not - indeed in the StackOverflow podcasts you get an indication of the disagreements between Joel, Jeff and other team members about the use of OpenID - but they do recognise that some barrier to entry could be a good thing for their site.
Me - I’ve got high hopes for the StupidFilter project - OMG, LoL !!!!!







