Rand() isn’t Random

If you use Microsoft SQL 2000, you’ve probably at one point had to pull random results. The built in rand() function simply doesn’t work. It gives you a random value the first time, and every time after it is the same it seems.

I found a new way to do this today after 20 pages of searching, so hopefully this will help someone else.

ORDER BY newid()

yup, it’s that simple.

field1 = 1

To be noted, this will put a full table scan in place before it selects the top 2, so keep performance in mind.


New Toy for the Office

Christmas is coming, and so is the end of the year. I need to spend some money on my business so i don’t get taxed to hell like I did last year. So, I upgraded my office computer.

I’m currently working on a 2yr old HP dv8000 amd turion laptop. it’s had its hay day. The video card on it keeps over heating. I guess it wasn’t meant to be on for nearly 2 years straight. The only time it was off was when i moved, and when we lost power for longer than the battery would last (i don’t even think there was more than one time that happened)

I hit up new egg for a new tower. Back to the tower. Why? Well, I never used my laptop as a laptop at all in the first place. And it’s still good, so i can take it with me on business trips or whatever…. just can’t do anything that requires a lot of video memory like watching movies without it crashing. So, new desktop it is.

Parts coming include vista ultimate, Q6600 quad core processor, 2gb ram, 8600gt video card, dfi T2R (or is it TR2.. i forget) board and a bunch of other random goodies.

With it, I ordered a monitor. I’m still waiting on my parts to build the tower, but the monitor showed up today. Go big, or go home! The Samsung 30″ now sits on my desk. It’s unbelievably huge.

My measly 17″ widescreen laptop on my desk, with my MAudio BX5 powered studio monitors.

laptop - before

With the new 30″ behind it, waiting patiently…

samsung 30 inch monitor

Can’t wait to try this bad boy out!!

Server Administration

Getting the Big “Oops” from a Server

I had some minor problems with xCache recently that ended up causing segfaults in my apache install. I had left my SSH putty session open last night and didn’t check my laptop before I trecked into the office this morning (yes, some of us bloggers still have 9-5’s). When I got to work, I noticed my server was down. I had to hard reboot it through the IPMI switch at my data center. I removed xCache from my php.ini and things have been solid since.

I came home from work and looked at my putty session and got a good laugh. “Oops” it tells me. haha. I had a good chuckle about it.


Message from syslogd@sv03 at Wed Nov 14 04:56:13 2007 …
sv03 kernel: Oops: 0002 [#1]

Message from syslogd@sv03 at Wed Nov 14 04:56:13 2007 …
sv03 kernel: SMP

Message from syslogd@sv03 at Wed Nov 14 04:56:13 2007 …
sv03 kernel: CPU: 1

Message from syslogd@sv03 at Wed Nov 14 04:56:13 2007 …
sv03 kernel: EIP is at kernel_thread_helper+0x7/0x10

Message from syslogd@sv03 at Wed Nov 14 04:56:13 2007 …
sv03 kernel: eax: 00000000 ebx: c0434cd9 ecx: ffffffff edx: ffffffff

Message from syslogd@sv03 at Wed Nov 14 04:56:13 2007 …
sv03 kernel: esi: 00000000 edi: 00000000 ebp: 00000000 esp: e8121fe8

Message from syslogd@sv03 at Wed Nov 14 04:56:13 2007 …
sv03 kernel: ds: 007b es: 007b ss: 0068

Message from syslogd@sv03 at Wed Nov 14 04:56:13 2007 …
sv03 kernel: Process pdflush (pid: 8071, ti=e8121000 task=f67d3000 task.ti=e8121 000)

Message from syslogd@sv03 at Wed Nov 14 04:56:13 2007 …
sv03 kernel: Stack: c2858f60 00000000 00000000 00000000 00000000 00000000

Message from syslogd@sv03 at Wed Nov 14 04:56:14 2007 …
sv03 kernel: Call Trace:

Server Administration

xCache is More Trouble than it’s Worth

Two servers and a just about every option variation later, I’ve officially given up on xCache.

The first round of problems involved caching config files and forms that needed to be updated all the time. I made exclude rules for those, and eventually it just got too long and became way too tedious to restart apache every time i changed a config file.

Second round of problems involved Apache segfaults. Happened to me twice in 12 hours and cost me a good amount of money as it happened at 5am the second time, and I didn’t log in to check my server until noon (because I was sleeping). 7 hours of downtime across multiple sites that my server hosts, and I’m out some cash because of it, and missed out on some traffic due to a digg’ed post that is currently about to break from upcoming into popular.

I’ve disabled xcache for now, and things seem to be stable again.

Running it, it saved me about .2 average load, and memory usage was about the same at 25% most the time.

I can’t say the site ran faster with it on either.

Maybe i’ll try it again in a later version, but in my opinion, version 1.2.1 is not all it’s cracked up to be.

Server Administration

Restart Windows via Remote Desktop

Ever try to restart a machine via remote desktop? I just ran into it for the first time tonight. I generally deal with linux servers and don’t ever RDP into them. Tonight, I needed to reboot a windows server. No “shutdown” exists on the Start menu. Even on the task manager, there’s no shutdown option.

It’s an easy bypass though.

Instead of CTRL+ALT+DEL like usual, use


From here, you will be able to shut down or graceful reboot the system.


Intro to CURL with PHP

CURL is a command-line style function to send data via a URL. WikiPedia has a more detailed article on what it is and does.

Preface – your php installation on your server must be CURL-enabled. You can download the CURL package for free. This article assumes your server is ready to go.

While CURL is not an alternative to AJAX, it can be used in similar situations where you need to send data out somewhere without the user having to go there. In it’s most basic operation, you have some data to send out to a script.

We need a a simple function to handle our data, a page to process said data, and a source page where the function is called from.

The call page is simple. Something as simple as:

where $var1 -3 are predefined, or even hard-coded strings will suffice for basic testing. This php block sets us up to print the output of our function:

function sendCURL($var1, $var2, $var3, $referrer="") {
$mycurl = curl_init(""); $fields = array(
"var1" => $var1,
"var2" => $var2,
"var3" => $var3
); $curlagent = array(
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"
); curl_setopt($mycurl, CURLOPT_POST, 1);
curl_setopt($mycurl, CURLOPT_HEADER, 0);
curl_setopt($mycurl, CURLOPT_NOBODY, 0);
curl_setopt($mycurl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
curl_setopt($mycurl, CURLOPT_REFERER, $referer);
curl_setopt($mycurl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($mycurl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($mycurl, CURLOPT_HTTPHEADER, $curlagent);
curl_setopt($mycurl, CURLOPT_POSTFIELDS, $fields);

$response = curl_exec($mycurl);
curl_close ($mycurl); return $response;

This function is your basic CURL request. Setting the variables into an array to pass, and setting headers and Options within CURL on how to process it. The only real change you will need to make to this function are your variables in the array and your URL that you wish to send it to.

The curl_processor_page.php is no different than any other php page that can handle incoming $_REQUEST parameters. Those var’s need to be set up in the function that the page is looking for, perhaps a username, password, and a realname.

What that script does is entirely up to you. I won’t post an example, because I don’t want anyone to think that you can only do one method with this function set.

You could have the response be ANYTHING that gets returned from the processor page. A remote login, a simple welcome screen, or even creating accounts (how do you think those auto MySpace friend adder bots work?!)

A useful tool when playing with CURL is the LiveHTTP Headers plugin for FireFox. This plugin let’s you see what’s getting sent via HTTP AS it happens. It’s a real-time watchdog and is very useful for debugging CURL requests to see where it’s bombing.

Happy CURLing 🙂

Forum Administration

Invision Power vs. vBulletin re-visited

It’s been a year and a half since I first left my impressions on the two systems. My original post received a lot of negative responses from both communities. I was called an IPB fanboy at, and I was called a vB lover at IPB’s customer forums. I guess you can’t win :shrug:

Things change.

Over the past year, I have migrated all of my forums over to vBulletin. I’m out of the loop on what’s new at IPB, but a quick browse of their forums tells me nothing new or exciting has happened or been released since I stopped running their software. A couple bug fixes and minor .x release changes. vB has since released their 3.6 series, their project tools, and their blog system. Still pretty much the same system, vB has been pretty minor in terms of new things to the main forum package.

Free softwares are kicking ass. PHPBB3 came out a few months ago in completely table-less CSS driven variety. SMF is also becoming more popular for small sites.

I’m still not happy.

I want features and code quality from a merge of 3 or 4 softwares. None offer me everything I want, but all have a part of what I want.
I want vB’s plugins and products with IPB’s support team and phpbb’s template engine. Is it too much to ask? 😀

There’s been a couple threads at over the past week or so about customers complaining about the lack of communication and upcoming releases. A big gripe has been the template engine and the antiquated table mash up. The response from staff has been minimal at best, and the ones that have replied have simply stated “it’s something we’re considering” in not so many words.


It drives me nuts.

Back on topic, if vB doesn’t do something soon, I might make the move to phpBB. It sounds completely backwards to do so. Most people go from open source to enterprise…. not vice versa.

My rankings are starting to drop some in the SE’s due to my bloated C2C ratio from the forsaken nested tables, and useless inline presentation layer. My average page is roughly 120 KB, before images. 20KB would be easy to accomplish with a better template engine.

Perhaps in a future post, I will compare vB with phpBB3.

I still can’t believe I’m thinking about this…


Google AdSense to Release new Feature – Manage Ads

Google is releasing a new program shortly that lets you manage your ad units all from within the AdSense portal. It will be rolled out in phases, most likely starting with their top producers and trickling down like most of their new features.

What does this mean for publishers? It let’s you paste one ad code on your page never for you to touch it again. via their portal, you’ll be able to change the colors, borders, etc without changing the code block on your site.

For more information, read Google’s help topic

Server Administration

How to View Apache error logs

If you’re new to running your own server, sometimes just finding things is the hardest thing to do. I spent a good 15 min trying to find mine, so here’s some info to help you.

Your system may vary. All my postings are from CentOS 5, running php 5.2.x, mysql 5.0.2x, and apache 2.2.x

You may need root-level access to see some of these as well.

I use pico. Some people like VI, some like VIM, some like NANO. I use pico. It’s just a text viewer.

View apache error_log

pico /usr/local/apache/logs/error_log

Send the text file to your website to make it viewable

cp /usr/local/apache/logs/error_log /home/SITEPATH/public_html

You can then view it in Firefox will open it up with out a download prompt.

Server Administration

Avoid the Mail Blackhole

I started running out of space on my /home volume recently, so i started looking around for random files and old crap i could delete to buy myself some more time before hardware upgrades.

The log files were an obvious first stop. I still had a ton of space i needed to find where it was being used. My file system showed only a couple gigs and my database was only a couple more, yet I was approaching on 20GB of used space. Where was the rest of it?

Turns out, it was all spam and bounces from registration emails, etc from my forums.

cPanel sets up the default catch-all to go to the ie, if you named your site mysite01, cPanel defaults itself to forward all un- pop3’ed addresses to this account.

IMAP is the only way to get into it (easily), so i opened up Horde and nearly spit my beverage on my monitor. One account had 145,000 odd emails in there, and 4 others had over 50,000 emails in there. My not so popular domains still had a couple thousand in them from just years of collecting viagra and stock quote spams.

I easily recovered 10% of my /home volume just by deleting spam and bounce emails.

The easy way to fix this is to go into WHM’s Tweak Settings at the top, and change the default on New Accounts to :fail: instead of :blackhole:. Unfortunately, this is NOT retro-active, so you will need to go into each of your accounts sub-cpanels and change the catch-all in there from :blackhole: (or “forward to” if you have the new cPanel template) and set it to :fail: (if you have the new template, select the radio button that says “discard with error at SMTP…”).

Lesson Learned. the Blackhole is a bad thing, and the default forwarder is even worse.

10% is a lot of space, especially when you consider most emails are in the 2-3Kb range.

So, if you’re running out of space, and you’re a novice dedicated server admin like myself, check your mail settings. You might be surprised too.