This post has been imported from the old blog and has not yet been converted to the new syntax yet.
The Gatekeeper Test 2004 is over! EricM is the winner with 4680 points!

It was a nice contest, too bad I wasn't on time each day to catch the bonus points, but I did learn some new things :)

In the end, I'm quite happy! I finished on position 102 with 3950 points.

Can't wait for the next Gatekeeper, hope to do it even better in 2005 ;)
 
This post has been imported from the old blog and has not yet been converted to the new syntax yet.
I don't like Abit anymore. There you go, I said it. Why? My motherboard killed a RAM module. (My motherboard is an Abit IT7-MAX2)

A bug in the BIOS, or a hardware problem, I got lost in the possible causes. In the end it did kill my memory.

The motherboard set the memory bus at 178Mhz, while it supports PC2100 memory, but PC2100 memory can't handle that speed, PC2700 even has problems with it.

I had 2x 512MB PC2700, and then, one died. So far for the auto-detect options of the motherboard.

Cold boot was impossible, I had this issue once before and then they advised me to replace my PSU, that worked last time, although it must have been coincidence because it was a memory issue.

The motherboard displays an A7 and AF error on it's led when it stops booting, and this is of course undocumented by Abit, only forums help. There I learned it was a hardware issue, along with all the details.

Solution? Go into the bios and remove the auto detect options and set everything manually.

H/W Strap should be set to Low 1:1, PCI to Fixed 33Mhz, and your multiplier and FSB to whatever is needed for your CPU.

One problem though, if I can't boot, I can't change anything in my BIOS. :(


So, off to the store it was, bought myself 2 x 512MB PC3200 and everything is working again. The old memory module is dead.

So far the worst part, motherboards killing memory. Now more of the undocumented stuff.

I had one module of 512MB still here, so I thought, 1.5GB of ram, nice!

I insert 3 x 512MB, and what does the BIOS see? 1GB...

I switched modules around, inserted them one by one to make sure none were damaged, but my motherboard refused to see all three of them.

The website states it supports up to 2GB of ram, and it has 3 memory banks.

But now for the undocumented part: the motherboard only supports 4 sides, so you can have 2 dual-sided memory, or 1 dual-sided and 2 single-sided. But you can't have 3 dual-sided modules. But guess what, almost all ram is dual-sided. Solution? You have to buy 2 x 1GB, which is expensive.

It seems Abit likes to sell, but when it comes to helping they believe their products are flawless, while they are not.

My advise: Don't but an Abit motherboard, I sure won't but them anymore. Take an Asus or something.

Here is a 11-page thread about this problem, that show the true nature of Abit.
 
This post has been imported from the old blog and has not yet been converted to the new syntax yet.
Today I received a question on how to make a usercontrol visible from another usercontrol. You could also see this as: "How could a usercontrol control everything from another usercontrol?"

Normally you wouldn't do this kind of stuff (at least not in my opinion). Usercontrols are to ASP.NET what modules were for VB6, and just like another class, they should function without knowing what's outside their borders, like small functional containers.

Let's take a look at this. First I created a normal page, Default.aspx, and I also made two usercontrols, Control1.ascx and Control2.ascx.

Control2.ascx only has a label, and Default.aspx contains the two usercontrols (named UControl1 and UControl2). Control1.ascx has a button on it, called cmdMakeVis.

First I tried making UControl2 as a public property in Default.aspx, and accessing it from UControl2 through there, unfortunately that gave me an object reference not set error.

My second attempt turned out fine though:

I took the Default.aspx page out of the Context.Handler and searched for UControl2 on it. If I would find it, I could control it. Good thing it worked ;)

Here's the code the button contains:

[csharp]
private void cmdMakeVis_Click(object sender, System.EventArgs e) {
TestSite.DefaultPage Default = (DefaultPage)Context.Handler;
TestSite.Control2 UserControl2 = (Control2)Default.FindControl("UControl2");
if (UserControl2 != null) {
UserControl2.Visible = true;
}
} /* cmdMakeVis_Click *
[/csharp]

I also uploaded this small test project as an illustration.
 
This post has been imported from the old blog and has not yet been converted to the new syntax yet.
A tool I used a lot on my .exe's when creating VB6 applications is UPX (which stands for the Ultimate Packer for eXecutables).

This is a very valuable .exe that you can just drag-drop your .exe's on and it'll compact them (and make it a bit harder for newbies to decompile your program).

Of course there are Unpackers for the people who really want to decompile your application, but you can at least enjoy the compression that UPX does. I used it on my last project file and it went from 208KB to 77KB.

I used the upx 1.24 windows console version.
 
This post has been imported from the old blog and has not yet been converted to the new syntax yet.
A long time ago I talked about how great NDoc is.

Quick reminder:
NDoc generates class library documentation from .NET assemblies and the XML documentation files generated by the C# compiler (or with an add-on tool for VB.NET).

I love the tool, I use it for all my documentation in .NET projects.

A few days ago, I had to make a Visual Basic 6 project. And one of the requirements was a documentation. Knowing about NDoc, I went looking for something similar for VB6. There are a lot off tools out there, commercial and free.

But VBDOX is the best in my opinion. It generates the same MSDN style documentation, as HTML with the possibility to compile it into a Windows Help file.

It can use an XML style of commenting, and quickly parses it and generates the documentation.

This resulted in a very nice documentation for my project.