Archive

Archive for July, 2010

How to: Make Thread-Safe Calls to Windows Forms Controls without delegates

If you try to update the UI of a windows form app with a thread spun off by the main thread you get an exception, Microsoft’s suggested solution is as follows;
private void SetText(string text)

{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.textBox1.Text = text;
}
}

Which omits the code for the SetTextCallback delegate, which over time, can clutter up your application.

Instead, I would suggest using an Action<T> as follows:

var d = new Action<string>(SetText);




Categories: Uncategorized

DNS round robbin with failover

If you have two A records for the same subdomain in DNS, then the DNS server will alternate which ones it returns, in a round-robbin fashion.

I’ve noticed that NS records in DNS also work on a round robbin feature, NS records also alternate.

This implies that you could create a distributed load balancer with failover using only DNS

Server A ip (Multihomed; 1.1.1.1 and 1.1.100.1)
NS NS1.SERVER.COM
NS NS2.SERVER.COM
A NS1 1.1.1.1
A NS2 1.1.100.1
A www 1.1.1.1

Server B ip (Multihomed; 2.2.2.2 and 2.2.200.2)
NS NS1.SERVER.COM
NS NS2.SERVER.COM
A NS2 2.2.2.2
A NS1 2.2.200.2
A www 2.2.2.2

SERVER.COM delegated with nameservers NS1.SERVER.COM and NS2.SERVER.COM

Now, the A records are not load balanced but the NS records are.

So theoretically, a DNS client, connecting randomly to NS1 or NS2 will be given either 1.1.1.1 or 2.2.2.2 as an IP address, depending
on what nameserver it contacted.

If the DNS on NS1 goes down, then the client will automatically contact NS2. and be given server 2’s IP address. The logic being, that if the DNS
server is down, the webserver probobly is too.

In this case, the A records are not load balanced but the NS records are.

I assume this would not get past ZoneCheck for delegation of some top level domains like .fr, .de  or .no, but it might work for a .com

Categories: Uncategorized

How to break hash codes with Google

Hash codes are one way algorithims, and are supposted to be unbreakable, unless of course, you have access to Google, then
it’s simple…

Just search for

Site:reverse.me.uk + hashcode

I managed to retrieve a lost password that was Hashed in a MySQL database..

mysql> select * from admins;
+——–+———-+———————————-+
| userid | username | password                         |
+——–+———-+———————————-+
|      4 | admin    | 1752017eea2e45fbXXXXXXXXXX |
|      5 | nktest   | 1752017eea2e45f1fXXXXXXXXXX |
+——–+———-+———————————-+

– And, yes, I’ve put X’s in there, just in case…

the site, reverse.me.uk has about 5 million hash codes, covering most of the shorter passwords, so beware!

Categories: Uncategorized

An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode.

An ASP.NET setting has been detected that does not apply in
Integrated managed pipeline mode.

I was using a component called FreeTextBox, which adds the following line into Web.Config

<httpHandlers>
            <add verb="GET" path="FtbWebResource.axd" type="FreeTextBoxControls.AssemblyResourceHandler, FreeTextBox"/>
</httpHandlers>

This however, is not compatible with IIS7,

Quick fix is to take the app pool out of Integrated mode. So, go to your website on IIS 7, Press "Advanced Settings", and it will say the name of the Application Pool. Then go to application pools, click on the offenting pool, and select "Advanced Settings", then under "Managed Pipeline mode" change it
from Integrated to Classic. No restart of IIS is required.

Categories: Uncategorized

Casting a float to a double

Casting a float to a double looses precision in C#, causing bugs like this:

                float x = (float)12.34;
                double y = x;

What value is y?
12.34000015258789

If you really have to use floats, then this is an easy fix

double y = (double)(decimal)x;

Categories: Uncategorized