Monday, August 24, 2009

CKEditor 3.0 released

Fresh from the FCKeditor website:

CKEditor 3.0 is here! After almost two years of hard development, we are proud to announce the first stable release of our next generation editor. You can now enjoy the best editor out there, added by even better (amazing!) performance, full accessibility, new interface, a brand new and rich API and more.

Other than a new name, CKEditor also brings us a new logo and a new site. For full details, check out http://ckeditor.com.

Wednesday, March 18, 2009

ReSharper 4.5 Beta

Resharper 4.5 Beta has just been released!

My favorite new feature is the new Solution wide analysis of unused code, this allows you to assume the code you are writing is NOT for a shared library, and thus can be marked as unused if it's never used within the current solution.

  • Unused non-private declarations
  • Unused return values of non-private methods
  • Unaccessed non-private fields
  • Unused parameters in non-private members
  • Abstract or virtual events that are never invoked
  • Unassigned fields
  • Members and types that can be made internal instead of public

My second favorite new feature is definitely the MSTest project support, like they supported NUnit and other test frameworks before.

ReSharper:: The Most Intelligent Add-In To Visual Studio 2008 - C# 3.0, LINQ, VB.NET, ASP.NET, XML, XAML, build scripts. Best-of-breed tools for code analysis, code cleanup, code generation, and unit testing, plus multiple refactorings and code templates.

Wednesday, March 04, 2009

two-finger-scroll - Google Code

Recently I've bought a MacBook Pro. Great piece of hardware, and OS X is really nice for organizing photo's and creating presentations.

The real work obviously still needs to be done on a PC, however I couldn't live without the two-finger-scrolling anymore, so I tracked down this great little tool on Google Code:

two-finger-scroll

Tuesday, July 01, 2008

Wake On LAN in C#

Wake On LAN in C#

Thursday, June 12, 2008

Run SysInternals tools directly

live.sysinternals.com - /

SysInternals has opened a share to their folder with utilities, meaning you can now run the SysInternals tools directly from explorer or the Run window by typing in:

\\live.sysinternals.com\tools\[toolname]

You can also browse the tools by opening the folder share:

\\live.sysinternals.com\tools

Monday, June 09, 2008

Download details: Parallel Extensions to .NET Framework 3.5 June 2008 CTP

Download details: Parallel Extensions to .NET Framework 3.5 June 2008 CTP

Parallel Extensions for .NET 3.5 June 2008 CTP is out! I still have to figure out what to do with it though...

Thursday, June 05, 2008

Google Contacts API | Google Groups

Apparently while I wasn't watching for a while, Google launched their Contacts API last March. It's about time anyway. Can't wait to find a spare weekend to start experimenting.

ReSharper 4.0 RC and LLBLGen 2.6 RC

Two of my favorite products released important release candidates of their new products on the same day!

For both products the most significant addition is full LINQ support.

developer happiness is on it's way :)

Friday, May 30, 2008

ASP.NET development server very slow on Vista with Firefox - ASP.NET Forums

ASP.NET development server very slow on Vista with Firefox - ASP.NET Forums

In case your Visual Studio 2008 is really slow on Vista (Windows 2008 in my case) opn Firefox, helped me out: to Disable autotuning, run this from the command prompt:

  • netsh interface tcp set global autotuninglevel=disabled

Additionally, disabling IpV6 in Firefox could help:

  • Goto the about:config address in firefox
  • filter by "network.dns.disableIPv6" and double-click to set to true

Sunday, April 27, 2008

Windows Server 2008 Standard + RAID driver problems

When trying to install Windows Server 2008 Standard on a desktop system with a RAID-1 configuration, we couldn't load the appropriate drivers.

A message appears: "to continue installation, use the load driver option to install 32-bit and signed 64-bit drivers. installing an unsigned 64-bit device driver is not supported and might result in an unusable windows installation".

The only option is to press OK, and the installation will not list any drivers at all. There's no other option than to cancel the installation.

We've tried 3 different motherboards, trying to use the latest RAID drivers, all yielding the same results:

Anyone else experiencing problems with RAID drivers on Windows Server 2008/Vista?

Related:

Grading Vista 64-Bit plus RAID 1 No More: RAID 1 No More

update 23-5-2008: Additional non-working drivers include:

  • 3Ware 9650SE
  • SuperMicro

Issues like this remind me how lucky I am to only have to deal with deal with SOFTWARE problems normally

Labels:

Wednesday, April 23, 2008

ASP.NET MVC Source Refresh Preview - ScottGu's Blog

A new ASP.NET MVC Source Refresh Preview is available:

ASP.NET MVC Source Refresh Preview - ScottGu's Blog:

Labels:

Monday, March 31, 2008

Waste Management sues SAP over software failure | Technology | Reuters

Waste Management sues SAP over software failure

Nice to see a SAP customer finally having his "4 o' clock cup-a-soup" moment. (Dat zouden meer mensen moeten doen)

Tuesday, March 18, 2008

Microsoft: Future of personal health (video) - istartedsomething

As I'm starting an assignment at Crossing Channels regarding a health care related project, I was particulary interested in the following Microsoft video: Microsoft: Future of personal health (video) - istartedsomething shown at a MIX08 session.

Google Calendar Sync: Getting Started

I'm back!

After quite some silent time, (the web logs at my previous employer are internal) I'm starting as a free lance software engineer, so this is a good time to start web logging again.

To start with, I've migrated all my outlook mail to Gmail, and started using Google Calendar.

However to sync my calendar with my new SamsungI600, I do require outlook for synchronization purposes.

What an excellent timing of Google to release Google Calendar Sync!

Labels:

Wednesday, August 16, 2006

Diff/Merge/Patch Library for C#/.NET

Diff/Merge/Patch Library for C#/.NET Nice, a PERL differencing engine ported to .NET.

Found on this URL: A Generic - Reusable Diff Algorithm in C#

Labels:

Friday, May 12, 2006

An alternative to TLS for application contexts / ASP.NET contexts (Thread Local Storage)

ASPAlliance - Create your own HttpContext class: "System.Runtime.Remoting.Messaging.CallContext"

Labels:

Wednesday, March 22, 2006

Macromedia - ActiveX issues ("click to activate and use this control")

Recently I was getting strange behaviour with ActiveX (mostly Flash Files) in Internet Explorer, where the Active content had to be clicked to be activated first (when hovering over the control, the message "click to activate and use this control" appears).

How annoying, especially since Flash sites are usually design-oriented sites, and a big dotted gray border doesn't really add to my idea of being 'stylish'.

The resolution is to remove the recent Windows Update (or better, not to install it at all):

Adobe - Macromedia Flash Player: "Update for Windows XP (KB912945)"

Labels:

Thursday, September 08, 2005

Asymptomatic : How to Disable that Blasted "Restart Now" Message from Windows Update

As commented on the blog entry above, the 'restart now' message returning every 15 minutes after running the windows update can be useful in some (very few) situations, for example grandma's never restarting their PC's...

Hey wait no grandma's always shut down their PC immediately after they're done playing solitaire... ehm ... no I'll get a reason later.

However, the Windows Update application doesn't seem to understand that if you don't click 'restart later' immediately, there might be a REASON for it, like running 3 virtual machines, and having to wait 1 hour before a workstation is back to the state it was before restarting.

Or for example a heavy load Windows 2003 Advanced server, Webserver or whatever server where a restart has to be planned very carefully to prevent the management from getting pissed, because yes, even there the lovely messagebox pops up.

I must add that the validaty of the "grandma" argument doesn't really count in a server environment, and if everything is all right, neither does the "help out people who don't know what they're doing" argument.

There are 2 checkboxes missing in this messagebox: don't show this annoying box this session again and don't show this annoying box ever again

I know it's not much, but here's an alternative to the first one:

  • place this command in a batch file named 'GoAwayWindowsUpdate.bat':
  • net stop wuauserv
    
    

beautiful...

Labels:

Annoyances.org - Possibly another way (Windows 2000 Discussion Forum)

I always disable all sounds on Windows. There's nothing more annoying than hearing the (way too long) windows startup sound on the wrong moments.

However, disabling all system sounds results in getting a system speaker 'beep' (at maximum volume) everytime you change the main volume control.

Better, but still bad, especially when using earphones and having iTunes at a low level volume.

Well, here's the solution:

- run regedit.exe 

change these key values:

[HKEY_CURRENT_USER\Control Panel\Sound] "Beep"="yes" "ExtendedSounds"="yes" 

into

[HKEY_CURRENT_USER\Control Panel\Sound] "Beep"="no" "ExtendedSounds"="no".

Ahh enjoy the silence...

Labels:

Wednesday, April 27, 2005

C# From a Java Developer's Perspective

I stumbled upon a pretty extensive comparison between Java and C#. Probably a little pro-MSFT because it"s written by Dare Obasanjo, but still, they"re getting closer to the illusion of an unbiased comparison:

C# From a Java Developer's Perspective

Labels:

Sunday, April 24, 2005

FlexWiki - Make double click editing a user setting

The first time I encountered a WikiWiki site, I immediately mailed the webmaster that there was something seriously wrong with their security. Yes, my only excuse is not reading TFM, and that it's a while ago.

FlexWiki is a .NET variant to Wiki, and I've been really annoyed with the fact that if you double click on a page, it starts editing.

Like a proper contributor of Open Source projects, I contributed the code that allows a user to save his preferences to a cookie, and disables the double click functionality, also because mr. Candera encouraged me to code it myself: SourceForge.net: Modify: 1186821 - Make double click editing a user setting, so I did!

Open source the microsoft way

They couldn't accept my contribution because I don't work at Microsoft, and I have to sign an Assignment Agreement before I can contribute anything. You've got to be kidding me. What's the point of creating an open source product in the first place, if only one company is allowed to work on it?

I've left this comment (before they're childish enough to remove it);-)

How can you build an open source community like that?

Do microsoft guys have to take the fun out of everything?

Can't it just be some kind of checkbox?

I've requested the assignment agreement, how long is that
going to take?

Appearently, this is allowed by the license (CPL, or Common Public License) they're using.

Also, I was suprised to see that there are actual Developer Guidelines, as the source code doesn't comply at all, it contains so many unused code blocks and procedures, that I couldn't even find where to add a link in the menu on the left.

Update May 8: I've received, signed and sent the assignment agreement back to MS.
Even if it's just for the fun of sending something to

One Microsoft Way
Redmond, WA 98052

Friday, April 15, 2005

Where's the # in C#?

I'm one of the lucky ones to go from Delphi to C#.

Lucky, because the two languages share their intellectual father, Anders Hejlsberg, who copied many existing Delphi and C++ language concepts to C#

This means that Delphi programmers have a big advantage to Visual Basic programmers because they're already familiar with inheritance, polymorphism. Even to C++ coders who lack interfaces, events and delegates, and a even proper IDE (except for the very underrated Borland C++ Builder maybe).

I know that c++ got it's name from the incremental operator (c++ as a next iteration of C), but where did C# get it's pound suffix from?

Still I'm disappointed to miss some features that are available in Delphi, but not implemented in C#, like:

Delegate by Interface

In delphi it's possible to delegate the complete implementation of an Interface to a property. This way you don't have to redeclare each interface member inside the class, but it is possible to pass it to functions that need a IMyInterface Implemenation:

IMyInterface = interface (IInterface)
  function Foo() : Boolean;
  procedure Bar();
end;
TMyInterfaceImpl = class ( IMyInterface )
  function Foo : Boolean;
  procedure Bar() ;
end;
TMyType = class ( TObject, IMyInterface )
 private 
    FMyImplementation : IMyInterface;
  protected 
    function GetImplementation() : IMyInterface;
  public property MyImplementation : IMyInterface 
    read GetImplementation 
    implements IMyInterface;
end;
   
function TMyType.GetImplementation() 
begin
  if not assigned (FMyImplementation then 
    FMyImplementation := TMyInterfaceImpl.Create();
  result := FMyImplementation;
end;

Currently in C# you have to redeclare each member and delegate it to the implementation if you want separate your interface implementation from the class :

public interface IMyInterface {
  bool Foo();
 void Bar();
}

public class MyInterfaceImpl : IMyInterface {
  bool IMyInterface.Foo(){ ... }
  void IMyInterface.Bar(){ ... }
}

public class MyType : IMyInterface {
 IMyInterface myImplementation;
 IMyInterface MyImplementation{
   get 
   {
     if (myImplementation==null)
       myImplementation = new MyInterfaceImpl();
     return myImplementation;
   }
 }

// All members have to be redeclared even though 
// the implementation is delegated to the 
// MyImplementation property

  bool IMyInterface.Foo(){ 
    return MyImplementation.Foo();
  }
  
  void IMyInterface.Bar(){ 
    MyImplementation.Bar();
  }
}

Strictly Typed Types

In Delphi it's possible to declare a variable, that contains a reference to the class of a type, and can be used as a type. I know that sounds a little complex (don't even know if it's correct) but an example should clarify:

TMyType = class ( TObject, IMyInterface )
 private 
    FMyImplementation : IMyInterface;
  protected 
    function GetImplementation() : IMyInterface;
  public property MyImplementation : IMyInterface 
    read GetImplementation 
    implements IMyInterface;
end;

TMyTypeClass = class of TMyType;

function CreateInstance(AType : TMyTypeClass):TMyType
begin
  result := AType.Create();
end;

procedure Main()
 var MyType : TMyType;
begin
  MyType := CreateInstance(TMyType);  
end;

Now it's only possible to pass a type that inherits from TMyType.

Why doesn't c# have anything like this? C# only knows the Type type, and if you would want a method to only accept a certain type, you need to do it like this:

public MyType CreateInstance(Type type){

  if( !type.IsSubclassOf( typeof(MyType) ) )
    throw new ArgumentException("Type parameter is of incorrect type");

  return Activator.CreateInstance(type);
} 

public static void Main(){
  MyType instance = CreateInstance(typeof(MyType));
}

Type Suffices and Generics in C# 2.0:

With generics in C# 2.0 it's possible achieve something like strictly typed types, using the where keyword in generics, wich will force the collection to only accept members that implement ICloneable:

public class CloneableCollection<T> : Collection<T>, ICloneable where T : ICloneable
{
  
  public CloneableCollection<T> Clone() {
    CloneableCollection<T> collection = new CloneableCollection<T>();
    
    foreach (T o in this)
      collection.Add( (T) o.Clone() );
    
    return collection;
  } 

  object ICloneable.Clone() {
    return this.Clone();
  }
}

In C# 2.0, types can contain certain suffices to express additional compiler functionality:

<Type> - expresses a generic type, for example Collection<MyType> for a strictly typed collection.

? - expresses a value type that can contain a null value, for example

int myValue = null;

is impossible, but when declaring it as Nullable:

int? myValue = null;

it is possible. The question mark is actually a shorthand for the generic type Nullable<T>, so Nullable<int> and int? are in fact the same.

Too bad they didn't implement a NotNullable type for non-value types, using the ! (exclamation mark):

// doesn't compile
MyType! myType = null;

This is however, it is implemented in the Cω Language (pronounced COmega), a C# variant with support for type-safe support for table and document manipulation (in other words: strictly typed SQL and strictly typed XML)

COmega also supports for the * (stream) operator. This might confuse C++ developers, however it has nothing to do with a pointer. The stream operator can be seen as a array, but of unspecified length, or a dynamic strictly typed (lazy) collection. If a type contains this suffix, it both implements the C# IENumerable (edit: was C# INumerable) and the IEnumerator interface, and the values are dynamically returned as the collection is iterated:

// generate s, s+1, ..., e
static int* FromTo(int s, int e) {
for (int i = s; i <= e; i++) yield return i;
}
public static void Main() {
int* OneToTen = FromTo(1,10);
// prints 1, ..., 10
foreach(int j in OneToTen){
Console.WriteLine(j);
};
}

In other words, the for-loop in FromTo, continues only if the next value is requested by the iterator. In this case the foreach loop through the entire collection, so for every value between 1 and 10 the for loop is executed. This creates great possibilities for ASynchronous communication like reading a large recordset from a database, because the next record is only fetched when it's requested, somewhat like the DataReader class, but in a strictly typed way.

And the point is...

Here I finally come to my point. Both the where and typeof keywords are essentially performing the same function, where I think the typeof isn't event necessary now, because there's no reason why this syntax shouldn't work, because MyType is already a type, why is the extra typeof() call necessary?

public MyType CreateInstance(Type type){
  return (MyType) Activator.CreateInstance(type);
} 

public static void Main(){
  MyType instance = CreateInstance(MyType);
 // instead of
  // MyType instance = CreateInstance(typeof(MyType));
}

My proposal for C# 3.0 would be to replace them both with the Type# syntax, finally giving the # (pound) a function in C#, wich performs the same functionality as the Delphi "TMyTypeClass = class of TMyType" syntax.

Additionally, you would be able to use this as a typeof specifier in a method, and this could be our previous example rewritten, without having to specify:

public MyType CreateInstance(MyType# type){
  return (MyType) Activator.CreateInstance(type);
} 

public static void Main(){
  MyType instance = CreateInstance(MyType);
}

This could even give the previous ICloneableCollection<T> a easier to read look, and conforms more to the C# syntax:

//public class CloneableCollection<T> : Collection<T>, ICloneable where T : ICloneable
public class CloneableCollection<ICloneable# T> : Collection<T>, ICloneable
{
  
  public CloneableCollection<T> Clone() {
    CloneableCollection<T> collection = new CloneableCollection<T>();
    
    foreach (T o in this)
      collection.Add( (T) o.Clone() );
    
    return collection;
  } 

  object ICloneable.Clone() {
    return this.Clone();
  }
}

And, last but not least, it would eliminate 2 extra keywords, wich must be important to Microsoft as well, because they're very proud of the low amount of keywords in C#.

I'd like to hear your comments on this.

Monday, February 21, 2005

Proposion N2N Review

For my current employer Vitronics Soltec, I had to build a coupling between Lotus Notes and SQL Server.

Proposion N2N is an excellent library to achieve this. Basically, it's a (partial) implementation of an ADO.NET DataProvider for Lotus Notes. It has many advantages (and way less bugs) over the Notes ODBC Connector, as it can even query for attachments, retrieve rich textfields and retrieve field values not included in a view. You can even dynamically execute Lotus Notes Formula's from the SQL query

The SQL isn't close to any SQL standard, but the resemblance is good enough. However, it is very well documented, and examples for almost every possible usage is provided, so learning is very easy, though knowledge of both SQL and Lotus Notes will help a lot

The current version (version 2.11) still contains several bugs, of wich the most annoying is that the IDbDataAdapter methods aren't implemented correctly, wich you can call the methods directly (NsfDataAdapter.Fill(myDataset), however you can't call them through the interface (IDbDataAdapter.Fill(myDataSet)) as it raises a NotSupportedException.

.NET Application Blocks

The Proposion variant of some of the Microsoft Application Blocks are freely provided: the Exception Management Application Block, and the Data Access Application Block.

Proposion N2N Application Blocks

I needed to use the Data Access Application Block, however the FillDataSet caused an endless recursion, so I had to modify the examples. The improved Visual Studio project is available here:

Proposion N2N Data Access Application Block

I've had good results with Proposion N2N, however there are some issues that would prevent me from deploying it with clients:

Potential Adminstration problems

The Proposion N2N Library comes with a strict Activation, and once installed, it isn't possible to install it again. To move the license to another computer, you would have to mail to Proposion to transfer the license. So far I've had very good responses, but I don't want to know what I'd have to do when their website would go down, or the small company would decide to start doing something else.

High priced

The Proposion N2N is quite expensive to deploy, for my development I needed to install a development it on my laptop, and later on another machine to maintain the synchronization between the databases, I'd have to buy another license, or transfer the license from my laptop to another machine, wich would mean I can't develop anymore using the library, and incorporating the problems mentioned before. With a support contract included ($495/y), a developer license ($795) and a processor license ($1395), it would mean I have to pay about $2600 for a ADO.NET driver that can only be used on 1 machine.

conclusion

To us it's well worth the money, because it save's a lot of Domino API programming, but the Activation policy and maintenance contract will definately have me waiting as long as possible before buying a license for the server.

Labels: ,

Saturday, February 05, 2005

XSD2DB: Generate a SQL Server database from a XML schema (XSD)

XSD2DB

I've become a developer with XSD2DB, a command line tool written in C#, that will read a Microsoft ADO.NET compatible DataSet Schema File (XSD) and generate a database from it.

To make it a little more accessible, I've created the descriptive HTML website for it, and planning on creating new releases.

Now all we need is people that want to use it and give us some comments on it...

Thursday, February 03, 2005

Sql Server (MSSQL) msde MSDE 2000 Installation Fails

After installing Visual Studio 2005 my SQL Server 2000 Developer Edition stopped working, giving an error from Enterprise Manager: Unable to connect to server. Reason: SSL security error. ConnectionOpen (SECDoClientHandShake())... Microsoft has this technote about this: Thinking it over, all of these references apply to me:

302409 FIX: Unable to Connect to SQL Server 2000 When Certificate Authority Name Is the Same As the Host Name of the Windows 2000 Computer

275307 BUG: Installation of SQL Server 2000 Desktop Engine Fails on Computers That Already Have SQL Server 7.0 Tools Installed

299351 BUG: MSDE Installation Fails on Systems That Have SQL Server 2000 Service Pack 1 or 2 Installed Too late for me, because I already uninstalled SQL Server 2005 and 2000 beta and everything related. Uninstall SQL Server 2000 didn't work, because somehow the application doesn't show up in the add/remove programs. I can't install MSDE anymore because it gives these errors: "Setup failed to configure the server. Refer to the server error logs and setup error logs for more information." After some searching some people suggested the cause might existing datafiles, but after removing all datafiles, it still doesn't work. Installing with another instancename doesn't help. either These are the MSDE Setup parameters:

  • SAPWD="[password]" default password for sa user
  • /l*v [logfile]log the complete installation
  • SECURITYMODE=SQL install with mixed mode authentication
  • DISABLENETWORKPROTOCOLS=0 enable access from other computers
  • DATADIR ="[data folder]" specify a dir other than default
  • INSTANCENAME="instancename"
  • BLANKSAPWD=1 Install with blank SA Password. SAPWD overrides this.
  • ALLOWXDBCHAINING=1 Enables cross-database ownership chaining.
  • UPGRADEPWD="" Use if your upgrading to SP3
  • /i
  • /settings You can specify all MSDE parameters using an ini file in this format: [options] DATADIR ="Data_Folder" INSTANCENAME="Instance_Name"

Examining the logs I came to this problem:

Starting custom action ConfigServerExecuting "C:\Program Files\Microsoft SQL Server\80\Tools\Binn\cnfgsvr.exe -V 1 -M 1 -U sa -I "MSSQLSERVER" -Q "SQL_Latin1_General_CP1_CI_AS""MSI (c) (70:54)

[13:55:09:921]: Font created. Charset: Req=0, Ret=0, Font: Req=MS Shell Dlg, Ret=MS Shell Dlg Setup failed to configure the server. Refer to the server error logs and setup error logs for more information.MSI (s) (D8!24)

[13:55:42:031]: Product: Microsoft SQL Server Desktop Engine -- Setup failed to configure the server. Refer to the server error logs and setup error logs for more information. Action ended 13:55:42: InstallFinalize. Return value 3.

here's someone with the same problem: http://www.masterado.net/home/ng/forum.sqlserver.msde/post13125079.aspx

Here's the microsoft technote on the subject http://support.microsoft.com/default.aspx?scid=kb;en-us;816499&Product=sql2k

Nothing is working, so now I'll try this: HOW TO: Manually Remove a Microsoft SQL Server 2000 Desktop Engine (MSDE 2000) Instance

The last post here by the way says that if you disable the SECURITYMODE=SQL, it might work as well. http://community.installshield.com/archive/index.php?t-124746.html

No, it doesn't.

Installing SQL Server 2000 Developer Edition gives me the same problems, they're all related to the (SECDoClientHandShake())... error.

I'm trying to remove the certificate authority installed with selfssl.exe, see another post: Setting up SSL in Windows 2003 & XP (within 10 minutes)

Now I'm trying to remove it using certutil, as described here. certutil.exe is available for Windows XP in the Windows Server 2003 Administration Tools Pack

using this command certutil.exe -delkey "SELFSSL"

I was able to delete the conflicting certificate authority keys, and tried reinstall (after restarting for the zillionth time ofcourse)

Great! it works!

Apply SQL Server Service Pack 3, reinstall the SelfSSL Certificate, and everything should be all right...

conclusion

Solution in a nutshell: http://www.sqlmonster.com/Uwe/Forum.aspx/sql-server-connect/1906/SSL-Security-Error-in-WinXP-SP2

Wich links to PRB: SQL Server 2000 Installation or Local Connections Fail with "SSL Security error :ConnectionOpen (SECDoClientHandshake())" Error Message

Labels:

Friday, January 21, 2005

Getting Subversion & Remote Debugging (SVN) Running with ASP.NET

Goals of this post:

To get a testing server (Microsoft Windows Server 2003 Web Edition) running configured with:
  1. SQL Server 2000
  2. ASP.NET 1.1 ( with remote debugging enabled)
  3. SSL for security
  4. Subversion 1.12 for Version Control

1. SQL Server 2000

Well, let's get you out of this illusion, because it's NOT going to happen. Maybe you're just like me and just looked real closely over and over again at the comparison chart of Windows 2003 editions and thought that this time you install software that is NOT the full-blown bloated ultra-large-universal-enterprise-architect-edition version that you usually need because there's this tiny-little feature that you absolutely need, even if you're not a universal-10000-employees (idiot-collegues)-that-you-need-to-collaborate-with-sized-enterprise, there was absolutely nothing that you would ever need that this edition lacks.

You should have known better. In the case of Windows Server 2003 Web Edition, you probably never watched the Overview of Windows Server 2003, Web Edition that will tell you exactly what you need to know (header "limitations") : Do not use Windows Server 2003 Web Edition.

Well, that's too late for that now, so you'll have to settle for Microsoft SQL Server: MSDE 2000 Release A

I think that Microsoft thought that whoever runs a website would probably never need a database. "For what? C'mon there's frontpage right? Everybody can work with that!". Let's put that on this list above the "640K ought to be enough for anybody"-quote.

One of the other great features of Windows Server 2003 Web Edition is that you can't set up a domain controller either! But we'll get to that fun in the next part.

2. ASP.NET 1.1 ( with remote debugging enabled)

Well, the first part (outside the parentheses) is easy! You just have to run this command (no it doesn't work out of the box, with me at least):

C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322>aspnet_regiis.exe -i

The second part (debugging), I never got running, probably due to some error in the deep dark caves of COM+, 'Access Denied'. Just read and enjoy the fairytale '1001 problems that can cause the same error message while debugging ASP.NET' and try them all out, but it's NOT going to happen pal. I've been Googling for 2 days to solve this problem, but ultimately I think it's because I'm not in the same domain as the server. Actually, there is no domain, and our beloved Windows Server 2003 Web Edition does not enable us to set one up.

If you want to save time, just keep the debugging restricted to your laptop.

Some tips and best practices you can try if you don't get it running:

  • Install Visual Studio 2003 on this server, and run it with remote desktop (no I'm not kidding, this is actually a Microsoft solution for remote debugging over the Internet or across domains). Alternatively you can just install the .NET FrameWork SDK
  • Disable all firewalls and other useless security restrictions.
  • Enable the guest account, and just put every user, including the 'everyone' and 'guest' in the 'Administrators' and 'Debugger Users' group. No one is ever going to find out your server is that unsecure. And then again, who cares, if something goes wrong, just blaim those "damn-smart-(they-must-have-put-a-lot-of-work-in-that)-hackers"
  • Enable frontpage extensions for all webs, uninstall the IIS Lockdown tool, and never run any updates because it might hurt your precious configuration.
  • Make sure that in your production environment every setting is the same as above, to make sure you're website keeps running.

3. Subversion 1.12 for Version Control

Download and install. This is easy. Figure it out for yourself. It's well documented.

If you're running it on a server, you don't want to be logged in all the time, so use SVN Service Wrapper for Windows.

The only problem is with Visual Studio .NET 2003, because every website that you try to open with Visual Studio will give the error "Unable to retrieve folder information from the server with my ASP.NET web project", because it doesn't like folders that start with a dot(".") like ".svn" that is used default by TortoiseSVN.

By the way, I didn't have this problem when I was still working remotely on my testing server! Interesting right...?

Lucky you, they created a special version for you! search for "TortoiseSVN for Win2k/XP ("_svn" version) " in here, and read here for more info.

If you've already checked out your repository and now stuck with ".svn" folders, just use my little Delphi tool SVNRenamer, wich will rename all .svn folders to _svn.

Conclusion

In this article we've learned some very useful worst practices and don'ts:

  • Don't read all the related information of software before installing or buying it, EVEN if it will take you days. It's not worth it, believe me.
  • Installing ANY other version of (especially Microsoft-) software than the most bloated, fat and expensive version available (mostly denoted by a very misleading 'Enterprise' classifier, because even a 1-man team will need this one)
  • Trying to get Sql Server running on a W2K Web Edition machine
  • Debugging ASP.NET on a Remote Server
  • Don't think Microsoft Visual Studio introduced the .svn folder bug on purpose. There's no way they want to discourage unix-like paths in Windows. Try to create an empty .htaccess file in explorer, it works great!

Setting up SSL in Windows 2003 & XP (within 10 minutes)

I thought setting up SSL and configuring the right parts of my website would be a pain, so I never gave it a try, until stumbling into this little piece of art by Matt Solars:

Switching Between HTTP and HTTPS Automatically: Version 2

Combing this with the The IIS 6.0 Resource Kit Tool SelfSSL, my complete website is safe, secure (well, considering I'm my own certificate authority not really secure, but the production environment is going to be another story) within 10 minutes from the initial idea of setting up SSL.

Woohoo!

Monday, January 03, 2005

The Best DHTML Popup Calendar

For everyone who didn't know this yet, this is the url for the best DHTML calendar in webpages... http://www.dynarch.com/projects/calendar/ customize with styles, cross-browser, fast and easy & intuitive to use...

Friday, December 24, 2004

Converting Simplified Chinese (GB2312) to Unicode (UTF-8)

Todat I needed to convert a Word document that was encoded in Simplified Chinese (codepage GB2312) to Unicode (UTF-8) to be able to combine it with other characters in an XML Document.

First I tried using iconv (http://www.gnu.org/software/libiconv/) but turned out to be too hard to work with.

So now I created my own little application that performs this task utilizing the .NET FrameWork 1.1, and worked out pretty well. You can download the result (including C# source code) from here:

http://www.netindustry.nl/unicodeeditor

Labels:

Sunday, December 12, 2004

HOW TO: Use the SHGetFileInfo Function to Get the Icons That Are Associated with Files in Visual C# .NET

Good example if you want to build explorer-like interfaces: HOW TO: Use the SHGetFileInfo Function to Get the Icons That Are Associated with Files in Visual C# .NET Good example if you want to extend explorer: Windows Shell Extensions in .NET

Labels: