2009-09-25

Rocky Mountain Bank - Our Mistake = No Gmail For You

This is just beyond ridiculous and insulting.

Wyoming-based Rocky Mountain Bank made a big error, sending a list of highly personal information (including names, social security numbers, and loan information) to the wrong Gmail account. A rather big whoops, but there it is.

When they discovered their mistake, they sent another message to that account to ask the owner not to view the previous message. Probably not the most correct course of action — could they trust the person to be honest, even if they said they deleted it without reading it? It would've been wiser to consider the information already compromised, and to take steps to protect the compromised accounts and their owners' identities (e.g., one of my lenders paid for credit monitoring for me for a time when they had a security breach).

When they didn't get a reply from the Gmail account owner, they asked Google for the owner's personal information (presumably so they find another way to contact them). Google did the right thing and refused to turn over personal information about one of their customers without a court order.

The bank then filed for that court order to not only disclose the Gmail account holder's information, but to have that user's Gmail account shut downand the court granted it.

This is disgusting on a number of levels.

First of all, it would be as if, if they mailed the wrong document to your house, they got the court to order the USPS to come and destroy your mailbox.

Secondly, it's not unlikely the user in question never saw the email. I get emails allegedly from banks all the time that I never do business with — they're phishing scams looking for me to enter my password. I delete them without a second thought. If I got a random email from some "Rocky Mountain Bank", I'd delete that, too. Assuming these emails even made it past Gmail's spam filters, it's not outside of possibility the account owner deleted them himself.

Third, to deactivate the user's entire email account because of their screw-up goes way beyond their bounds. I use my Gmail for a lot, including business-related correspondence (not to mention it's my credentials other services, including this blog). What right does some third party have to shut off my business activities because they sent me something by mistake and that I probably never even looked at?

They made a mistake. Fine. It happens. Heck, I remember when I used to get emails detailing AOL's plans to expand dialup service in South America (it was entertaining, but not particularly useful — the emails I mean, although the same could be said about AOL). But suing to shut down an innocent person's email for their mistake is, at best, bullying and heavy-handed, and, at worst, a violation of Constitutional rights. Shame on you, Rocky Mountain Bank. If I ever have the opportunity to do business with you, it will only to be to tell you "No way."

I hope this Gmail account is owned by someone who does use it and has a brain, because I really want to see a counter-suit filed on this.

2009-09-16

Our home away from home

My wife is back at Children's Hospital, this time with the baby (and toddler in tow; I'll be picking him up later). Although he was fine when we brought him home, he had been spitting up more and more, to the point where he was forcefully spewing not long after every feeding. We had planned on waiting to take our little "fountain of youth" to the doctor at his regularly-scheduled appointment tomorrow, but it had gotten bad enough that we decided to go ahead and make a call today.

My wife can't remember the exact name of the condition, but after a quick google, it looks like pyloric stenosis. They have him hooked up to an IV already, and they are scheduling him for surgery sometime tomorrow. According to the doctors, this is a very safe (and non-emergency) surgery. If he gets a morning appointment, he could even come home as early as tomorrow night.

Although I'd rather not have to go back to the hospital, at least it should be a pretty short and uneventful stay; and after this, my wife may not have to bring several changes of clothes (for the baby and for herself) everywhere she goes.

2009-09-15

Can only see black and white

There's been a lot of hubbub made about Representative Joe Wilson's outburst the other day. The short version is, during a speech Obama was giving to the House about healthcare, the Republican representative from South Carolina shouted out "You lie!"

This has, of course, brought all kinds of reactions from all sides. The most moderate have been that it was simply disrespectful and uncalled for, and that it violated a rule about Congressional behavior meant to keep things civil.

Some (on the Right) excuse his behavior, saying he was just voicing what a lot of people were thinking, and wishing more people would speak out.

Some (on the Left) call his outburst completely disruptive, calling out the "sour faces" and "rolling eyes" of other Republicans in attendance for not agreeing 100% with the president (either forgetting, forgiving, or applauding the same lack of respect Congressional Dems gave our previous president, — a very famous eye-rolling from one Hillary Rodham Clinton "from" New York comes to mind).

But then there are those who have to add fuel to the fire. Apparently, they see a more sinister reason for Representative Wilson's outburst. It's not because he disagrees with the legislation, or that he is frustrated with the process. No, the only possible reason he would shout that to President Barack Hussein Obama is because of the color of the man's skin. Period.

Hope n' Change blog

I am completely baffled as to where the racism is in the words "You lie." Liberals are more than happy to add words to his outburst to make it racist. (Hey, that looks like fun; can I try? What Obama meant to say before he was interrupted was, "And you honkeys are going to pay for it and like it!" Wow, that was easy.)

Democratic Representative David Scott asks (according to The Washington Post), "Would he have done that if the president were white?" In my daily commute, I pass cars that still haven't removed their "BUSH LIES" bumper stickers. Are they racist? That same Washington Post article mentions concerns about the depictions of Obama as Hitler. Was it racist to see "BusHitler" in online forums for eight years?

I guess it wasn't altogether unexpected. I've seen warnings for a long time that any dissent against the president could be labeled as racism.

Seems to me, though, that the so-called "elephant in the room" isn't the unsaid racism that people are inserting into other people's speech and actions, but the fact that people actually disagree with what the president and his Democratic congress are trying to push through, and are frustrated and want to be heard.

But I suppose talking about that is much more difficult than just saying "racist" and dismissing dissent.

2009-09-14

How I brought down Duke campus ethernet

This is a fun story I like to recall from time to time. This story is absolutely true.

Between my sophomore and junior years at Duke, they wired the entire campus for ethernet. (That's right, before then, it was all dial-up, baby. 14.4 blazing kilobits per second.) Every dorm room on campus was installed with its own personal 10Mbps CAT-5 jack, along with an individual coaxial cable outlet (now they could sell cable to each student directly, instead of just to the common rooms from which students would splice and run their own coax to their dorms for free — not that I would know anything about that, of course…). Duke was entering the digital age.

In a marvel of civil engineering, they managed to install this new jack in the most inaccessible location of every dorm room. So amazing was their work, that in my junior year room, which couldn't have been more than 20' wide, it required more than fifty feet of cable to go from the jack, around the edge of the room, to the desk on the opposite wall. The exact length of cable isn't that important, so long as it's noted that the maximum length of cable sold at the campus computer store was, in fact, 50'.

Now, in the mid-1990s, you didn't have a wide selection of networking equipment available at every local computer store. "Home networking" didn't even exist — it still took some work to get Windows 3.1 to even talk on a network. Today, you'd probably just go to Best Buy or even Wal-Mart and pick up a CAT-5 coupler for 50¢ and join two shorter cables. Back then, though, that wasn't feasible.

So, I bought a copy of Computer Shopper and found a deal on network cable, buying 100' at something a student could afford. When it arrived, however, I found I made a slight miscalculation — I bought bulk cable that did not, in fact, include any ends. I therefore bought the shortest, cheapest network cable available at the campus computer store (who could possibly have use for a three foot cable anyway?) and snipped off the ends with about a half foot of wire. I then proceeded to strip each of the eight individual wires from either end of my 100' cable (cut down to whatever length I actually needed for my room, probably something closer to 60'), twist them with the wires from my purchased cable ends, and wrap each connection with electrical tape. A quick test with a hallmate's multimeter confirmed that I wired each connection correctly, such that each contact passed straight through from one end to the other with no crosstalk to other lines. Everything seemed good.

I plugged in my cable and attempted to configure my network card. Unfortunately, every attempt I made seemed to get me nowhere. After about an hour of fiddling with settings, I decided to give up and head downstairs for a break.

On my way down, I heard a friend cussing up a blue streak, so I popped my head in to see what was going on.

"I'm trying to get my project done, but the @$%!?! network is down!"

"Really? How long has it been out?" I asked.

"About an hour now."

That's… quite a coincidence, I thought. Just to satisfy my own curiosity, I headed upstairs, where I left my network cable plugged in.

I pulled the cable out of the wall, and I heard from downstairs, "AAHHHH! FINALLY!"

I thought about this for a moment, then I plugged my network cable back in.

Came the cry from downstairs, "OH, F$*#! NOT AGAIN!"

I pulled the cable out.

"Geez, THANK you."

I pondered this for a few moments, debating the philosophical ramifications of great power and great responsibility. I then spent the next few minutes doing my best Homer Simpson impersonation, plugging and unplugging the cable as I chanted, "Net go up, net go down. Net go up, net go down." I then left the cable unplugged before my friend burst a blood vessel.

A short time later that evening, I began to wonder how widespread this effect was. I decided to call a friend of mine who happened to work at the campus computing help desk. The conversation went something like this:

Me: Hey, have you guys been having any problems with the network tonight?

Her (sounding very suspicious): Why?

Me: Because I think I can bring the network down.

Her: That was you?!

I told her about my cable and how my plugging it in seemed to be tied to my dormmate's inability to use the network. She exhorted me not to plug the cable in again, and said she'd call me back.

Later, I got a call from someone in the networking department.

"Not that I believe this is possible, but could you plug your network cable in for me?" he said.

"Sure." *click*

"Huh. And could you unplug it for me?"

"Yep." *click*

"You know, if I couldn't hear the click of the cable going in and out, I wouldn't believe it."

He then asked me about the cable, why I made it, etc. I told him that I just needed a longer cable to get around my room. He also asked me not to plug in the cable again and promised to be in touch.

I didn't plug the cable in again. I didn't want to bring down the network, honestly. I wanted to be able to use the network. The facts were, this cable didn't let me use the network, and it only prevented anyone else from using it. My goal was not satisfied. I had no problem not plugging it in again.

The next day, a couple people from the networking department came by and offered to trade me a pre-made retail 100' network cable for my homebrew cable of death. I was happy to do so.

I got a call within a day or two. Apparently, they tested my cable, and as far as they could tell, it was fine — it was wired correctly, nothing funny was going on with it. Near as they could figure, there must've been just enough resistance in my ghetto twist-and-tape connections to put just enough extra stress on their network to push it over a breaking point.

This theory proved to be true a couple months later, when I was called again from the networking department and asked if I had made another cable. It wasn't me this time; enough people had connected to the network that the tipping point had been hit again. Unfortunately for them, this time it wasn't a single extra-resistive cable, but the mass of normal cables that did it.

But I have to wonder if that cable isn't lying around in the Duke network lab somewhere, perhaps with a sign that says "evil network cable of death, do not use", as some kind of reminder about the importance of network infrastructure. Or if it's not so labeled, and if it might actually get used again.

2009-09-09

A nullable DataGridView CalendarColumn

A while back, I managed to fix a couple bugs with the sample DataGridView CalendarColumn control that made it much more usable. Today, I came across one more issue. It's pretty well known that the DateTimePicker, despite having support for a checkbox that lets you turn a date on or off, does not directly support "null" as a valid value. There are a bunch of ways to get around this, but what I came across was a need to support this inside of a DataGridView.

I started with the task of making the CalendarColumn configurable in such a way as to be able to turn the checkbox on or off at will (well, at least, at the moment of construction). That part's easy; I added a new constructor to CalendarColumn to take an "isNullable" flag:

public CalendarColumn() : base(new CalendarCell()) { }
public CalendarColumn(bool isNullable) : base(new CalendarCell(bool isNullable)) { }

Then, I added a class-level variable to my CalendarCell class, and initialized it in the constructor:

public class CalendarCell {
    private bool isNullable = false;

    public CalendarCell() : base() { 
        this.Style.Format = "d"; 
    }

    public CalendarCell(bool isNullable) : this() {
        this.isNullable = isNullable;
    }
[...]

The next modification comes in InitializeEditingControl. Immediately after getting the reference to CalendarEditingControl ctl is set:

    ctl.ShowCheckBox = this.isNullable;
    if (this.Value != null && this.Value != DBNull.Value) {
        if (this.Value is DateTime) {
            ctl.Value = (DateTime)this.Value;
        } else {
            DateTime dtVal;
            if (DateTime.TryParse(Convert.ToString(this.Value), out dtVal)) ctl.Value = dtVal;
        }
        if (this.isNullable) ctl.Checked = true;
    } else if (this.isNullable) {
        ctl.Checked = false;
    }

(Note that I added a little checking around the value setting area, because I'm paranoid like that.)

Next, DefaultNewRowValue:

public override object DefaultNewRowValue { get { if (this.isNullable) return null; else return DateTime.Now; } }

Here's what I found out you don't change. The ValueType property always returns typeof(DateTime). If you change this to typeof(DateTime?), what ends up happening is, if you bind to a DataTable, it attempts to insert an actual null into the table. Because (for reasons I have yet to believe necessary) null and DBNull are two completely separate and incompatible things, this fails. Apparently, by leaving the value type as non-nullable, a null value will get translated appropriately in the binding.

We're not quite done yet. In the CalendarEditingControl class, the EditingControlFormattedValue property needs to be updated:

public object EditingControlFormattedValue {
    get {
        if (this.ShowCheckBox && !this.Checked) {
            return String.Empty;
        } else {
            if (this.Format == DateTimePickerFormat.Custom) {
                return this.Value.ToString();
            } else {
                return this.Value.ToShortDateString();
            }
        }
    }
    set {
        string newValue = value as string;
        if (!String.IsNullOrEmpty(newValue)) {
            this.Value = DateTime.Parse(newValue);
        } else if (this.ShowCheckBox) {
            this.Checked = false;
        }
    }
}

And presto, a checkable, nullable DateTimePicker column that works in a DataGridView bound to a DataTable.

2009-09-06

Bandwidth for August

Totals are 55.07GB in, 6.50GB out, total 61.57GB.

This month, numbers went way up, thanks to biting the bullet and activating my Netflix subscription and streaming movies to my Xbox 360. On the 1st, we watched about four hours of video (one feature-length movie, a shorter cartoon movie, and a kid's video), and on the 2nd, we watched close to eight hours (four movies and two TV episodes), all standard-definition. I don't recall all of what we watched on the 8th, but it resulted in even more bandwidth used.

Just taking the numbers for the highest usage day, it does show an interesting point. If I were to stream eight hours plus of standard-def video every day (resulting in 6.25GB of use, including random web surfing and other internet activity that day) for the entire month (31 days max), that still leaves me with 56GB before I hit the 250GB cap. Up to this point, my highest usage month was under 38GB, and the average was 26.85GB.