Study Shows More Women Blogging Than Men
This is interesting. Both my wife and I blog, so I am left wondering, additionally, “among people who blog, do women or men post more often?”
In our house, the prize goes to Jessica hands down, who has posted 893 times since 8/2005. I have “only” posted here 238 times since 4/2005.
SCPlugin
Programmers: use Subversion? Ever tried TortoiseSVN on Windows (had you the misfortune to be developing there), and dug it?
Meet SCPlugin, a Subversion integrator for the Mac OS X Finder. I’ve put the brakes on evaluating new software lately, but this I’ve got to try. Even if I do see myself doing my commits on the command line well past retirement from coding for pay.
Holy Neglected Blog
Jesus, Batman, who maintains this thing? Weak August effort.
Deep Thoughts With Deep Blue
Here is a wonderful article on the differences (or lack thereof) in human and computer reasoning. The topic is chess, but the implication, especially as phrased so eloquently at the end of the piece, is huge. I’ll reword it here with apologies to Arthur C. Clarke (whose “3rd Law” this is based on):
A sufficiently complex machine is indistinguishable from spirit.
Anti-Virus Products Compared
Something for security geeks: battle of the anti-virus products.
New Patch
Do skip on over to my lovely wife’s newly redesigned blog known worldwide as The Zucchini Patch. Now we’re both on WordPress and happier for it.
Perl Survey
I just took the Perl Survey. You should, too, if you use Perl.
Subnet Ranges in MySQL
SQL geeks only…
So, you have an IP address.
You also have a MySQL table of subnets, defined by columns called “ip_range_start” and “ip_range_end”.
You want to find which subnet the IP address falls within.
Perl gives you an easy way to split (using the appropriately named builtin “split”) the IP adrress into its 4 octets:
my @octets = split(/./, $ip);
my $octet3 = $octets[2];
my $octet4 = $octets[3];
(As UNH is on the 132.177* IP block, I only care about octets 3 and 4).
That’s all fine and dandy, but how the heck do you deal with those octets in SQL? No “split” to use. This is what I ended up with:
SELECT arpwatch, snmp FROM machine_tracker.subnet_snapshots WHERE ( ( /* match the 3rd octet of the ip to the ip range */ SUBSTRING_INDEX(SUBSTRING_INDEX(machines.ip, '.', -2), '.', 1) +0 BETWEEN SUBSTRING_INDEX(SUBSTRING_INDEX(ip_range_start, '.', -2), '.', 1) +0 AND SUBSTRING_INDEX(SUBSTRING_INDEX(ip_range_end, '.', -2), '.', 1) +0 ) AND ( IF ( /* if this ip range is all on the 3rd octet, this is easy */ SUBSTRING_INDEX(SUBSTRING_INDEX(ip_range_start, '.', -2), '.', 1) +0 = SUBSTRING_INDEX(SUBSTRING_INDEX(ip_range_end, '.', -2), '.', 1) +0 , /* easy 4th octet match */ SUBSTRING_INDEX(SUBSTRING_INDEX(machines.ip, '.', -2), '.', -1) +0 BETWEEN SUBSTRING_INDEX(SUBSTRING_INDEX(ip_range_start, '.', -2), '.', -1) +0 AND SUBSTRING_INDEX(SUBSTRING_INDEX(ip_range_end, '.', -2), '.', -1) +0 , /* if this subnet spans 3rd octet values, mpt so easy */ IF ( /* if we are at start or end of range, handling is tricky */ SUBSTRING_INDEX(SUBSTRING_INDEX(machines.ip, '.', -2), '.', 1) +0 = SUBSTRING_INDEX(SUBSTRING_INDEX(ip_range_start, '.', -2), '.', 1) +0 OR SUBSTRING_INDEX(SUBSTRING_INDEX(machines.ip, '.', -2), '.', 1) +0 = SUBSTRING_INDEX(SUBSTRING_INDEX(ip_range_end, '.', -2), '.', 1) +0 , /* are we at the start of the range? */ IF ( SUBSTRING_INDEX(SUBSTRING_INDEX(machines.ip, '.', -2), '.', 1) +0 = SUBSTRING_INDEX(SUBSTRING_INDEX(ip_range_start, '.', -2), '.', 1) +0 , /* the ip is at the start of the range */ SUBSTRING_INDEX(SUBSTRING_INDEX(machines.ip, '.', -2), '.', -1) +0 BETWEEN SUBSTRING_INDEX(SUBSTRING_INDEX(ip_range_start, '.', -2), '.', -1) +0 AND 255 , /* the ip is at the end of the range */ SUBSTRING_INDEX(SUBSTRING_INDEX(machines.ip, '.', -2), '.', -1) +0 BETWEEN 0 AND SUBSTRING_INDEX(SUBSTRING_INDEX(ip_range_end, '.', -2), '.', -1) +0 ) /* end IF */ , /* no problem, this is in the middle of the range */ SUBSTRING_INDEX(SUBSTRING_INDEX(machines.ip, '.', -2), '.', -1) +0 BETWEEN 0 AND 255 ) /* end IF */ ) /* end IF */ ) /* end AND */ ) /* end WHERE */
Not tested yet, but I think it works.
Any SQL gurus out there with a better or more efficient way to do this?
Replacing The Library
I work, and once graduated from, the University of New Hampshire, where the Dimond Library played a rather important role in my life. While a student, I had a work study job in the library for awhile, as an assistant to a couple of research librarians (one, then the other). It was there that I was first introduced to making simple web pages, and the use of a digital scanner to put images on the web. Man, that web thing was cool, and I even got to have my own space at pubpages.unh.edu.
This was in 1996. Even then it seemed clear where all this digital stuff was going. The musty old books I still had to truck from one building to another never smelled mustier as I imagined what this web thing was going to do to libraries. Now, more than a decade later, there is pretty clear evidence that the traditional library is slowly being replaced by the internet.
Now that I work at Computing and Information Services (hmmm… even the latter half of our department name is moving in on the library’s territory), I can see more evidence of this shift. One of our initiatives this year is the establishment of the “Dimond Academic Commons” complete with an IT Support Center. The motto for the “DAC” was voted on and turned out to be “Integrating Learning and Technology”. Of course, the word technology is defined as “the application of scientific knowledge for practical purposes”, so this motto could just as easily be “Integrating Learning and Doing” or even “Learn To Do Something, Jack”… but I didn’t get to vote. Probably a good thing.
So little by little, silicon will replace wood pulp over at Dimond Library and every other library in the world. Sure, there will be books for years to come, but those interested in preserving a legacy in writing these days will do so in the digital domain. Books can burn, rot, and can’t be copied very easily. They are “bound” (I kill me) to be obsolete sooner or later.
Still, I plan to keep the “Book Learnin’” section here in the Garden of Blog alive and well, even if, in my later years, the word “book” becomes an arcane symbol for the act of reading.
Just Trying Out The New Phonecam (to Flickr, to blog)

0714070826.jpg
Originally uploaded by Marcus Del Greco.
Gotta Love The Onion
This one gives me flashbacks. So accurate, so funny.
Psychostick, The Bloodhound Gang and Humorcore
Houston has introduced me to Psychostick, The Bloodhound Gang, and humorcore, a genre of music hitherto unknown to me but apparently coined by Psychostick (readers: correct me if wrong, this is 1 minute of Google research talking). The Urinal Mints, The Assholes, Insane Clown Posse and others turn up on a search for “humorcore” as well. I’d add The Bloodhound Gang, which I also heard first here in Houston.
Humorcore has, to me, a sharp ironic edge (exemplified in Psychostick’s “Beer!!!” and The Bloodhound Gang’s “New Vagina”) that I hope is not lost upon its 12 year old listeners, but likely is, and totally. Still, who cares. Mistakes are still for each of us to make, only later to appreciate the ironic art that depicts the same imbecilic behaviours.
I love discovering new music in new places. Larry Wall commented today how, growing up in the grid of Los Angeles, all of his childhood memories are paired with the cardinal direction he was facing at the moment, north, south, east or west. This reminded me of my geotagged musical memories.
Update: an alternative to “humorcore” is “tardcore”, which appears in the title of a Bloodhound Gang song. I believe this rather better captures the spirit of the genre.
Branden: from what I can tell, Psychostick is just harder edge speed metallic, although their “Orgasm = Love” is actually a ballad, which can only be described as having a haunting beauty. Check it out!!










