Thursday, November 17, 2005

Netcraft Reports on Cogent Fiber Cuts

Two separate cuts. [here]


Not again.

FiOS Install: The Bricklin Experience

Dan Bricklin writes up a great description of what I am getting next week: Verizon FiOS. [here]

So, now you know. It's the PPPoE that's going to kill my static connection to the Internet.

Any of you folks who volunteered to host GrabPERF, now would be a great time to step forward.

Call Out To Matt Mullenweg


This morning, I checked my e-mail, and had a note from Matt...

...via PayPal.


Matt, you are one of the true gentlemen out there. Thank you for dropping by and restoring my faith in the community.


Now, about the lack of template control in ;)

Technorati: ,

IceRocket: ,

Wednesday, November 16, 2005

New Home!

The folks at WordPress.Com scraped up one of their tin tickets for me, and I will be migrating appropriate content over to the new site:

See you there!



GrabPERF: Technorati gets a thumbs up as the lights go dim here

Scoble posted that Technorati just released a major update. [here]

Sifry and Kennedy have pulled one more rabbit out of the hat, just before GrabPERF goes off the air. Congrats guys.


Technorati: ,

IceRocket: ,

b2evolution Hosting Recommendations

Anyone have good recommendations for a b2evolution hosting service that will allow me to import my existing database?

Technorati: ,

IceRocket: ,


In order to reduce personal costs for both connectivity and electricity, this Web server and all associated applications will no longer be available as of 14:00 EST (19:00 GMT) November 22, 2005.

I am deeply saddened to have to take this step, but the cost of operating them is becoming a burden to my family.

Thank you all for your support over the years.

I hope to have this blog back up at another location sometime in early December.

GrabPERF and The Newest Industry: LAST CALL

UPDATE: We have a new home:
Stop by and check us out.

UPDATE: The shutdown date has been set.

NOVEMBER 22, 2005

Ok folks, this is it.

Last Call.

We have reached a point where the cost of the cable modem that connects my servers to the Internet has to be slashed.

Without the semi-static IP that I have had for the last 18 months, all of my Web services and applications will have to be terminated.

What does this mean to you?

GrabPERF will be shutting down. will be shutting down. will be shutting down.

And this blog will be shutting down.

I hate to do this, because it has been a great ride, but until we can get back on our feet financially, it's a step that has to be taken.

I will be keeping this site up until November 30, 2005 November 22, 2005. After that, I will be shutting down all access.

This is not a plea for donations. This is a bare cold fact.

Heat the house or host my Web servers.

It's a pretty easy call.

GrabPERF: Blogwise Improves!

Blogwise had a slight server issue earlier this month. Sven, the great guy who runs the service, posted a very open statement of what happened.

I'm very sorry if you tried to access Blogwise over the last four days and got either no service, or an appallingly poor connection. It looks like there was a multiple server failure which, considering I only have a few, was quite damaging.

Events were made worse by my being out of the country at the time (ironically, my first break since Blogwise was started over three years ago). Although I had somebody monitoring the servers, and I knew fairly early that something was up, my lack of access to a computer and awkward time zones made fixing things extremely difficult.

The site should now be running again. If you had assumed Blogwise had closed suddenly, it hasn't. I'm still here and as committed as ever - we just had the most unfortunate event at the worst possible time. This event has highlighted all sorts of vulnerabilities in the service, and has acted as a grim reminder of the need for redundancy and proper support.

It's going to be tough to build a more reliable infrastructure, and to continue developing Blogwise. I don't have the luxury of investors, nor a great deal of revenue from advertising, but the need to resolve this has been made painfully obvious and time and money will be found.

Finally, a thankyou to you all for your continued support, your patience and your understanding. With the site back up, I'm going to enjoy my last three days in Chicago and look forward to getting back into the flow of things this weekend.

- Sven, 12 Nov 2005

On the upside, performance has improved dramatically!

Blogwise performance

Great work Sven...and I feel your pain.

Technorati: , ,

IceRocket: , ,

Tuesday, November 15, 2005

Tom Bihn Bags: The Slacker Manager is Evil

The Slacker Manager just introduced me to Tom Bihn bags. [here]

For any of your louts who forgot my birthday, or if you like GrabPERF and want to show your appreciation: I want what SM got.


Google Analytics — Professional Bloggers Slamming the Service

Looks like Jeremy Wright and Darren Rowse have their own beefs with Google Blahnalytics (Term Courtesy of Jeremy Wright).

Gee Google, these two guys are opinion-shapers. I think maybe you should come out and say that there are issues.

Or say something.


Or are your Overlords at the NSA still pawing over the data and won't let you release it?

Technorati: , , ,

IcreRocket: , , ,

Google Analytics — Help Center Lies!

Help Center: Supporting Google Analytics.

How long does it take to see report data after adding the tracking code?

After you first install the tracking code, it may take several hours for report data to appear in your account. Google Analytics generally updates your reports every hour, but data can take up to 6 hours to appear in your account.


It's now over 24 hours, and no data.

For a company that prides itself on its massive data infrastructure and processing capabilities, the influx of millions of users trying a new service should not be an issue...right?

Maybe they need to follow up with some of their colleagues at the NSA and borrow one their supercomputers. The data is eventually going to end up there anyway.

Technorati: , ,

IcreRocket: , ,

Monday, November 14, 2005

Google Analytics — Apparently, I have no visitors

So, you think that Google Analytics is hot and cool?

So, have you had any visitors yet?

I haven't.

But hey, what about those silly Web server logs that say that I have had many, many visitors?

We are the Google; your data cannot be tracked; therefore, it is irrelevant.

So far, I am not impressed.

And I am not alone. [here]

Technorati: , ,

IcreRocket: , ,

More Photos from the weekend

Just uploaded a bunch more pics to Flickr from this weekend.

Needed a break from writing a report and got these up.


Technorati: ,

IceRocket: ,

Google Analytics — HUMILIATION!

Google, if you are going to launch a Web service, better make sure it's up and available for your customers so that they can evangelize it.

It may be good...when I can get to it.

You all forgot…again!

Wish me a happy birthday, you forgetful louts! ;)

It's 37 this year.

And while you're at it, wish Charles Windsor a happy 57th.

Saturday, November 12, 2005

Weekend at Sweetgrass Winery

The Farmhouse At Sweetgrass Winery

I have posted some pictures of our trip to Sweetgrass Winery on Flickr. I will add more as I process them.

Keith and Constance are great hosts, and we are really looking forward to watching their progress on the winery/distillery up here. Plus, Maine is a gorgeous place.

Technorati: ,

IceRocket: ,

Friday, November 11, 2005

All of your requests will be stored in /dev/null for archive purposes

MySQL 5.0 has a Blackhole Storage Engine. [here]

Cool. And if you make me grumpy, all of your performance data will be stored there! :)

Via: Jeremy Zawodny

Thursday, November 10, 2005

“The legend lives on…”

If you are Canadian, you know what follows after those words.

My friend Kennedy writes to inform me that today is the thirtieth anniversary of the sinking of the S. S. Edmund Fitzgerald. [here]

30 years. Wow.

Out of Touch This Weekend

Ok, if there is an issue with GrabPERF or any of the other services on this server this weekend, it is unlikely that I will be able to fix it.

We are going to see friends in Maine, and we aren't even sure if our mobile phones will work.

I will try and check mail once a day, but don't expect long essays or grand thoughts this weekend.


I want one.


I hate Windows.

Linux Desktops make me nuts.

And Dell...don't take me there.

Ubuntu: Now Uninstalled

Ubuntu, oh how I wish I understood you!

My understanding of why people prefer Windows and OSX is cemented. Evolution keeps crashing, and the wireless card, which worked perfectly at the office, can't see my WRT54G.

Sorry Linux, until you can make it JUST FREAKING WORK, you are sent back to /dev/null.

I don't have time to play; I have work to do.

Coming to you from Ubuntu

Ok, this is the first post from the new Ubuntu-powered work laptop. I partitioned the drive and installed the OS and the only hiccups have been with Evolution, which I think I have beaten into the ground.

Even the ndiswrapper hack worked perfectly for my wireless card. Nice! This has come a long way since the last time I had an installed linux as my desktop.

I like the Gnome interface (I know that will get me flamed), but it is good to be back on the old standby. I am still in dual-boot land, as there is at least one app that I absolutely cannot use from Linux.

Now, if this wasn't a work laptop, I would be really happy...but no one has volunteered a GrabPERF development laptop for me to use, so Dell Hell it is.

I will continue to post my experiences as I use this more.

Wednesday, November 9, 2005

GrabPERF: Update to the Line Graph

Last night I made some code modifications to the Line Graph ("Basic Chart") function in GrabPERF. Previously, the performance graph had been built using data gathered from the rollup table, hourly_site, except for the current hour, which was built from the raw data table, data.

Now, both the Availability and Performance graphs are built from the raw data table.

Also, I began using the Math/Stats PEAR package to calculate the statistical data from the results.

However, the most significant change is that the graph now displays Geometric Mean and 85th Percentile values for each hour. This will give a better sense of the "average" performance, as well as the degree to which there are outliers in the data.

Feedback is appreciated.

Sudden Changes In Global Internet Performance Statistics

Ok, this is a weird set of data, gathered by our friends over at the Internet Traffic Report

Traffic Volume -- 30 Days
Packet Loss -- 30 Days

Any of you black-shirted, BGP-lovin', AS-hoarding packet geeks out there want to comment on what happened on or about Oct 27-29, 2005? I am sure the rest of us would LOVE to know.

Technorati: , , ,

IceRocket: , , ,

Why do I have to dial '1' for long distance?

The question is a simple one: why do I have to dial "1" for long distance from my home phone?

This likely doesn't apply to VoIP users, but I still use POTS at home.

I understand that it is an artifact of the way that the long distance system was originally built. However, my home line is the only phone I use that requires me to dial "1" first.

On both my mobile (T-Mobile) and office phones (MCI VoIP), I dial 10 digits and I am done.

So, why can't the local phone systems figure this one out?

Technorati: , , , ,

IceRocket: , , , ,

Tuesday, November 8, 2005

GrabPERF: Second Agent Upgrade Complete

The second measurement agent is now up and running on Ubuntu!

And the happy news is that it is reporting CONNECTION ERRORS!

Well, ok, not so good news for those of you who are getting them. On the other hand, a gap in the measurement data should indicate a serious problem now.

GrabPERF: Updating Second Agent

In order to avoid doing some work today, I will be upgrading the second GrabPERF Agent from Mandrake 9 (10?) to Ubuntu Breezy 5.10.

Hopefully this will improve the stability of this machine and allow connection error signals from the kernel to be captured correctly by cURL.

Geographic IP database using PERL, PHP and MySQL -- UPDATE: September 16 2008

Updated September 16 2008 to reflect the numerous changes that have resulted since the original article was posted in 2005 - smp

Targeting Web site content to the specific visitors who view the site is a very important marketing advantage. Being able to track incoming visitors by the country that they originate from is an additional item that can assist companies in ensuring that visitors are presented with relevant content. This may seem like a daunting task, but it can be achieved with a high degree of accuracy using publicly accessible data, and Open Source software.

IP to Country Mapping

The idea for IP to Country mapping is one that has started to appear more frequently on the Internet in recent months. All GeoIP systems do warn users that they are not 100% accurate. The accuracy of GeoIP mapping can be affected by things such as large corporate or ISP networks where traffic is routed out a small number of public access points, regardless of the traffic's point of origin.

Making IP Addresses Searchable

The first issue that needs to be addressed is how to determine if an IP Address is in one of the ranges that is defined as originating from a distinct country. The simplest way to range-match IP Addresses is to abandon the dotted-quad notation we are all familiar with, and convert the IP Address to an IP Number.

All IP Addresses can be converted into decimal numbers that fall into a known range between 0 and (2^32)-1 (4294967295). In reality, the range is even smaller than that, as public IP Addresses fall between (IP Number: 0) and (IP Number: 3758096383).

A quick search of the Web showed me that there is a way to create functions to convert IP Addresses to their numerical (IP Number) equivalent and reverse the process.
sub ip2long {
return sprintf("%u",unpack("l*", pack("l*", unpack("N*", inet_aton(shift)))));

sub long2ip {
return inet_ntoa(pack("N*", shift));


if ($start_ip =~ /\d+\.\d+\.\d+\.\d+/) {
## my $ip_address = shift($start_ip);
$long_start = ip2long($start_ip);
## print "$ip_address converts to $ip_number\n";

If you are using PHP in your applications, this conversion process is made even easier by native function calls.
Convert IP Address to IP Number
$ip_number = sprintf("%u",ip2long($ip_address));

IP Address Location Data

Now that we have settled on a format for the IP data to be used in the database, we now have to find IP data that allows us to map IP Addresses to countries. This is easier than it sounds, as this data is centrally held by the 5 regional IP Registries -- ARIN, RIPE, APNIC, LACNIC, and AFRINIC. After poking around in the depths of their Web sites, I found that they actually provide text formatted versions of the allocated and assigned IP ranges that they are responsible for. All of the registries use the same format, which makes parsing the these files a simple process.

As of March, 2005, the distribution of IPV4 networks in the database by registry is:
| registry | num_networks |
| arin | 36073 |
| ripencc | 14813 |
| apnic | 10474 |
| lacnic | 1460 |
| afrinic | 443 |

5 rows in set (0.52 sec)

I chose to use the PERL module WWW::CURL to retrieve the files. You could re-write the application to use LWP or some other method on systems where cURL is not supported, as it is a simple file download over FTP. I update the data once a day, which may at first appear excessive. However, I have seen upwards of 40-50 new rows added to the database in a single day.

Some may ask why I chose to write the downloaded files to a file rather than immediately inserting them into the database. Using this two-step process gives me the ability to manually rollback to an older database if there is a problem retrieving one of the registry files. I have set an arbitrary limit of 75,000 lines for the entire aggregated file; if the file is less than that, the remainder of the process is aborted.

The data retrieved from the registries is in the following format.

Registry Raw Data Format

The fields are all "|" (pipe-character) separated, and are described below.
REGISTRY: apnic,arin,ripencc,lacnic,iana
COUNTRY_CODE: One of 240 unique 2-character country codes or "*"
ADDRESS_TYPE: asn,ipv4,ipv6
ADDRESS: Either the starting IP Address or AS Number or "*"
NUMBER: Number of IPs in range or "1" if ADDRESS_TYPE is "asn"
DATE: Date IP range or AS Number was added to database or "*"
RANGE_TYPE: "allocated" -> borrowed; "assigned" -> owned

Storing the Data in MySQL

To store the data, I created a two-table MySQL database named "ip_registry", using the script below.
Database creation statement for 'ip_registry'
CREATE DATABASE ip_registry;

Table structure for table 'country_code'
CREATE TABLE ip_registry.country_code (
code char(2) default NULL,
country varchar(50) default NULL,
UNIQUE KEY code (code)

Table structure for table 'ip_map'
CREATE TABLE ip_registry.ip_map (
code char(2) default NULL,
registry char(10) default NULL,
ip_from double default NULL,
ip_to double default NULL,
UNIQUE KEY registry (registry,ip_from,ip_to)

As of March 2005 September 2008, the "ip_map" data table for my system runs to 63,263 88,000+ rows. This value will change daily, and may decrease suddenly at times. The registries make an effort to aggregate as many IP networks as possible into the largest possible contiguous block, and this aggregation process will reduce the number of individual entries by 2,000 - 3,000 rows in a single day.

The recognized standard for country codes is ISO 3166. In this standard, each nation is assigned a unique, two-character code. The ONLY exception I found to this rule is that, for historical reasons, the IP registries have entries for the United Kingdom listed with two country codes (GB and UK). I could have corrected this in the Perl script by standardizing on a single country code, but I preferred the solution of adding another row to the "country_code" table.

From the raw Registry data, I determined that only four of the fields useful for the project that I was working on: REGISTRY, COUNTRY_CODE, ADDRESS, and NUMBER. I then wrote PERL code to read the raw IP Registry data from the data file I created previously, convert the starting IP address to a number, use this starting IP Number that to generate the end IP Number, and then insert the rows into a database.

PERL: IP Number conversion and database insert

if ($line_count >= 115000) {

## Establish Database Connection

print "\n\nOpening database connection";

my $dbh = DBI->connect("DBI:mysql:host=[host];database=logger","[username]","[password]",{PrintError=>0});

## Remove existing values
my $sth = $dbh->do("TRUNCATE TABLE ip_map");
print " --> Data from ip_map table dropped";

$sth = $dbh->prepare("INSERT into ip_map values (?,?,?,?,?,?)");

$count = 0;

print " --> Completed\n";

## Insert Data Into Database

print "Inserting data into the database";

open (PROCESS, "<$file");
while ($line =
) {
chomp ($line);
if (($line =~ m/\|ipv4\|/) and ($line !~ m/\|\*\|/)) {

($registrar,$country_code,$item_type,$start_ip,$num_ip,$entry_date,$registry_type) = split(/\|/, $line);

$long_start = 0;

if ($start_ip =~ /\d+\.\d+\.\d+\.\d+/) {
## my $ip_address = shift($start_ip);
$long_start = ip2long($start_ip);
## print "$ip_address converts to $ip_number\n";
$long_end = $long_start + ($num_ip-1);
$count += $sth->execute($country_code,$registrar,$long_start,$long_end,$num_ip,$start_ip);



The "TRUNCATE" statement in the script has the affect of dropping the table and re-creating it using the column names and types defined in the initial create statement. It is easier to rebuild the data table each time new data is inserted to ensure that duplicates and overlaps do not enter into the database.

Why is the value of "$long_end" defined by "$long_start + ($num_ip-1)"? The IP address ranges delivered by the registries count the starting value as one of the items in the set -- i.e. counting using ordinal numbers.

If cardinal numbering is used to calculate the address range, incorrect IP addresses will be generated.
IP Number Calculations
WRONG! 216853760 = 216853504 + 256 -> END_IP =
RIGHT! 216853759 = 216853504 + (256-1) -> END_IP =

I have also added a sanity-check that stops the insertion process if the number of lines in the data file is less than 75,0000 115,000. This would prevents the creation of a truncated database if one of the registries does not update their data files or the script is unable to retrieve the data files. The value of 75,000 115,000 appears high, but the data files that the data is extracted from also contain autonomous system and IPV6 data, as well as the IPV4 data that is inserted into the database. Currently, the data file runs to over 90,000 130,000 lines, so the 75,000 115,000 line barrier seems very reasonable to prevent inserting a broken dataset.

Querying the Database

Now that the database is constructed, we can start to run queries against it.
mysql> select ip.code,ip.registry, ip.ip_from, ip.ip_to,
-> from ip_map ip, country_code co
-> where (ip.code = 'IS') and (ip.code = co.code);

| code | registry | ip_from | ip_to | country |
| IS | ripencc | 1049722880 | 1049731071 | ICELAND |
| IS | ripencc | 1359937536 | 1359970303 | ICELAND |
| IS | ripencc | 1383088128 | 1383096319 | ICELAND |
| IS | ripencc | 1385447424 | 1385455615 | ICELAND |
| IS | ripencc | 1390215168 | 1390280703 | ICELAND |
| IS | ripencc | 1403846656 | 1403863039 | ICELAND |
| IS | ripencc | 1433681920 | 1433690111 | ICELAND |
| IS | ripencc | 1439023104 | 1439039487 | ICELAND |
| IS | ripencc | 1440481280 | 1440514047 | ICELAND |
| IS | ripencc | 2644312064 | 2644377599 | ICELAND |
| IS | ripencc | 3238264832 | 3238330367 | ICELAND |
| IS | ripencc | 3245150208 | 3245154303 | ICELAND |
| IS | ripencc | 3261718528 | 3261726719 | ICELAND |
| IS | ripencc | 3264217088 | 3264282623 | ICELAND |
| IS | ripencc | 3556884480 | 3556892671 | ICELAND |
| IS | ripencc | 3558785024 | 3558793215 | ICELAND |
| IS | ripencc | 3565084672 | 3565092863 | ICELAND |
| IS | ripencc | 3584524288 | 3584532479 | ICELAND |
| IS | ripencc | 3585114112 | 3585122303 | ICELAND |
| IS | ripencc | 3585433600 | 3585441791 | ICELAND |
| IS | ripencc | 3586023424 | 3586031615 | ICELAND |
| IS | ripencc | 3587538944 | 3587547135 | ICELAND |
| IS | ripencc | 3587981312 | 3587997695 | ICELAND |
| IS | ripencc | 3641278464 | 3641282559 | ICELAND |
| IS | ripencc | 3642535936 | 3642540031 | ICELAND |
| IS | ripencc | 3650592768 | 3650596863 | ICELAND |
| IS | ripencc | 3650596864 | 3650600959 | ICELAND |
| IS | ripencc | 3651915776 | 3651919871 | ICELAND |

28 rows in set (0.09 sec)

So the database structure is sound. It is important to build the file using all four five registries; even though Iceland is now covered by RIPE, older IP allocations and assignments were been handled by both RIPE and ARIN.

Having the registry information helps build in the flexibility to add a WHOIS functionality using this database, something that I have done on for my own IP Tracking and logging tool. This allows for further drilldowns on the data, beyond the scope of this article.

The main item that will be of interest to most Web site administrators is that they can now build dynamic pages using a data source which tracks their visitors' announced IP address to the country of origin with a high degree of accuracy. This is particulary useful if you are attempting to distribute users to geographically diverse mirror sites. You can also do fun things, such as displaying the flag of the country that the visitor is coming from.

A generic copy of the registry retrieval and database insertion script can be yours just by contacting me.

Monday, November 7, 2005

Kathy Sierra: Balance in Life

Kathy Sierra once again reminds us that only the truly intelligent employers realize that the Work/Life balance is more important than ANYTHING else. [here]

And her reason for this: clients who abuse startups and small companies who then abuse their employees to work miracles.

The takeaway:

And as the tech employment market starts to tick up ever so slightly, it's becoming less and less of an "employer's market" again. I don't care about the Aeron chair, but I do care about having a life beyond work. If you can't make your business model work without promising your clients a miracle (which we're expected to pull off), change your business model! And when you DO ask us to go our ass off again, a little worshipping goes a long way ; )

TypePad: Recovery is a painful and rewarding thing

Mena Trott posted a note on her blog that details all of the performance enhancements and upgrades they have been through recently. [here]

And it has improved.

TypePad performance

I know it's easier to malign an organization than to give it credit where it is due; and I am giving the SixApart team a huge amount of credit for bringing this back from the edge.

Sunday, November 6, 2005

GrabPERF: Second Agent Down…AGAIN

I lost the second measurement agent at 2005-11-05 15:34:35 yesterday. And as it's remote and threw some kind of fatal error, I have no way to re-start it until tomorrow.


Volunteers to host another measurement location?

FEMA: Yes, we are really stupid

FEMA sends a bill for $3.7 billion to the state of Louisiana

Hmm...I would refuse to pay on the grounds that no usable services were provided by FEMA. In fact, I think that Louisiana should send FEMA a bill.


Thursday, November 3, 2005

GrabPERF: A little enhancement

One thing that I have been frustrated with in cURL is the lack of OS level network error reporting.

Guess what? I should read the docs. It's been in the code for a few revisions now.

The problem: It appears to behave erratically. I have it working successfully on one measurement machine (local network agent), but when I blindly rolled it out to the remote Gomez Agent, all the measurements melted down and started throwing this mysterious Error Code 43.

The difference is that the local machine is running linux 2.4.20-31.9 (most likely Redhat 9) and the Gomez Agent is running 2.4.22-26mdk (Mandrake 9? 10?).

I tried to test the code on one of my linux 2.6 (Fedora Core 3) servers running cURL 7.12.3, which should have this code in place, but it returns nothing when the connection fails due to a reset or timeout.

I now understand the need for network homgeneity. ARRRGH!

I just don't get why the cURL RPMs for Fedora on the cURL site throw module dependency errors; and I am not getting involved in an RPM upgrade "falling dominoes" party at 01:00 EST.

I hope the Connection Timeout errors help some of you folks out who where just getting gaps when weird network errors were occurring.

Technorati: Tag Search Update — WOW!

A while back, I posted a note that the Tag search app at Technorati was behaving in a manner that did not match the performance of the rest of their products. [here]

The Technorati team followed up with me today and asked if I had seen any improvement.


Ummm...yeah. Just a little.

UPDATE: And Technorati just told me that they started using HTTP Compression.


Technorati: ,

IceRocket: ,

Wednesday, November 2, 2005

Going to DC

I will be in DC/Baltimore on Thursday and Friday on business. No time for a meetup, but if anything weird happens with GrabPERF or the server, I will get to it as soon as I can.

Tuesday, November 1, 2005

BlogPulse: WOW!

From a Web performance


From 5 seconds to 1.5 seconds.

Technorati: ,

IceRocket: ,

Gomery blames Chr

This is shocking!

I am appalled! I don't believe that Jean Chretien could have committed such an act! The man had an unblemished....

errr, nearly spotless...

ok, a little tarnish here and there...

...ummm, where did put my handcuffs again?

Canada’s Shame: Water, Water Everywhere, Except for the First Peoples

Keeping tabs on the news from home, it appears that our nation has condemned many communities of the First Peoples to communities with water not fit for any living thing. [here and here]

Canada is consistently rated one of the best countries in the world to live in. But how can this tragedy be allowed to continue? How can a developed nation, holding huge reserves of the world's water supply, poison it's own First Peoples with the basis of life?

Canada likes to see itself as morally superior to the United States. But allowing the systemic racism embedded in the culture of leadership to doom a generation of the most valuable (and undervalued) people in our country to disease and poverty is a shame that needs to be exposed.

The cover needs to be taken off this pot; and like Katrina, the boiling mess underneath will show the true face of the nation.

Technorati: , , ,

IceRocket: , , ,