Main | March 2009 »

February 2009 Archives

February 2, 2009

Hello World

Welcome to my new blog.

Inbetween will be going away soon. All the pages there will be gone. It's time to say good by to that mess, and dedicate some time to doing actual blogging on the things I'm doing. And a fresh start is always good.

So, what am I going to blog? Photography, links, programming, technology, and laziness. And probably some spelling problems.

New Style

Negativespace.net has a new style and layout. I like the way it looks, but I welcome feedback on it.

On the right hand side, you will see a list of all the blogs on the site, and the four most recent entries for each of them. Those are clickable: blog names go to the blog on the main page, and entry titles go to the actual entries.

Working with the negativespace.net styles isn't easy or fun. The HTML is very dense, and not very meaningful to a human. But it looks good so far.

February 3, 2009

Getting Started with Ruby

Something the books seem to have missed in the Installing Ruby on Rails chapters is that installing rails as a gem on the command line gem install rails doesn't install sqlite3-ruby.

It took me about two hours to figure that one out today, which sucked. And the error messages weren't helpful at all.

Otherwise this ruby stuff seems to be pretty slick. I quite like it, in theory. In reality, I haven't done enough to say.

February 4, 2009

Just answer the question

I'll admit it. I use Stack Overflow from time to time.

It has a few good points: I like the wiki/blog/q+a combination. The answers are usually pretty good, although sometimes it's idiots leading idiots to their destruction.

My complaint with SO is some of the users. Ask a simple, "will this work" question, and you get a bunch of answers suggesting other methods, and not really addressing the question at hand. Thanks, but I want to know if my very simple method will work.

February 6, 2009

King John

I'm reading King John for a friend, and loving it.

Plays aren't something I would normally read. You should hear them spoken by actors who care and understand what they're doing. The change of voices is important, and I can't quite hear it in my head. Yet.

Some choice quotes:

"With swifter spleen than powder can enforce."
(TLN 762)

The best war cry:

Cry havoc Kings! Back to the stainèd field
You equal potents, fiery kindled spirits;
Then let confusion of one part confirm
The other's peace. Till then, blows, blood, and death.
(TLNs 671-675)

Constance, speaking at Queen Eleanor, her mother-in-law:

Thy sins are visited in this poor child;
The canon of the law is laid on him,
Being but the second generation
Removed from thy sin-conceiving womb.
(TLN 481-485)

The imagery also really gets me at times:

Or shall we give the signal to our rage
And stalk in blood to our possession?
(TLN 571-572)

I think I could probably read the play quicker if I had a firm grasp on some of the historical details. King John was Richard the Lionheart's younger brother. He signed the Magna Carta. He's Prince John in Robin Hood, while Richard is off on the third Crusade. Beyond that, I'm pretty much at a loss. The whole point of me reading it is to note which bits of the play need annotation and explanation. It's a slow, but fun, read.

Reading the play has given me some insight into displaying the text. I don't usually read the text of the plays, just look at them to make sure they are consistent. It would be interesting to put each speech on a different colour background, or perhaps put a small icon before the speaker name. Easy to do with XML and HTML/CSS so I'll give that a try after I've had my read through.

February 14, 2009

This is why I quit my job

Paul Osman | Thoughts on Software and Various Miscellany

Derick Rethans has a post about PHP's "shut-up" operator (@) and why it should be avoided. He outlines a fairly common debugging scenario and gives some "under-the-hood" explanations on why that particular operator sucks. I couldn't agree more (that it should be avoided) and I want to go further and talk about something that has always bugged me about that operator. In my opinion, it's a hackish, band-aid fix to a much larger, much more worrisome problem: horrendous API design.

I spent the previous two and a half years as a PHP developer. The systems folk didn't even upgrade to PHP 5 until sometime last year (and didn't actually tell us until two months later). PHP is the sloppiest language I've ever been forced to use. Having a "shut-up" operator is simply the icing on the cake: it means "ignore any errors that this function call produces, and continue running normally afterwards. No matter what. Doesn't matter if the server died during your function call, I'll keep going."

Stupid.

February 15, 2009

Won't be staying there much longer

Facebook's New Terms Of Service: "We Can Do Anything We Want With Your Content. Forever."

Facebook's terms of service (TOS) used to say that when you closed an account on their network, any rights they claimed to the original content you uploaded would expire. Not anymore.

Now, anything you upload to Facebook can be used by Facebook in any way they deem fit, forever, no matter what you do later. Want to close your account? Good for you, but Facebook still has the right to do whatever it wants with your old content. They can even sublicense it if they want.

Well, then. I think I'll be leaving the world's second most popular social networking website in a little while. These license terms are reprehensible, disgusting, and insulting. In a nutshell, once you upload something to Facebook, the folks there own a copy of it, and have license to do with it as they please.

What else does it mean? If they like your profile photo, they can put it in advertising, they can sell copies of it, they can photoshop you into someone else's photo and put your name on it. They can sell all of the "25 things about me" notes to some marketers to data mine. They can give your mailing address to anyone, for any price, and you get nothing.

But it gets worse. The licensing terms apply outside of Facebook: you grant a license to facebook for any content that you "enable a user to Post, including by offering a Share Link on your website." If you have one of those "Share on Facebook" links on your content on your website, then the new Facebook terms apply to your content on your website, even if that content isn't ever actually shared on Facebook.

But it gets even worse: the terms still apply, even after you leave facebook. They get to keep the content forever. You have no guarantee that the content will ever actually be deleted from their servers, and they will always have a right to use it. But it's already too late to delete anything, because the new Terms of Service already apply. Once you login to facebook, the new terms automatically apply and they don't even have to tell you that the terms have changed.

I should build my own Facebook equivalent, with sane licensing terms.

Birthday Presents


Flickr upload



20090215-143317-0500, originally uploaded by ubermichael.


My friends gave me a gift card for my birthday. I bought an 8X neutral density filter with it, so I could take long exposure photos during the day. 8X isn't quite as dark as I expected, but I still like the effect.

February 18, 2009

Referential Integrity - Not just for children

I'm inheriting a crazy Ruby-on-Rails web application in my new job. It's the kind of system that has grown organically over time, with little bits being added or changed over the years to meet the demands at the time. And it's almost entirely undocumented.

Today's crisis was special: the list of scholarships was throwing server errors. Processing scholarships stopped. After an hour of poking and prodding at the site, we figured it out: someone deleted a user, without deleting the user's scholarship information. The controller grabbed the list of scholarships, and it picked out the user info for each scholarship, including one null value. And then it tried to print the first name of the null value and barfed.

The problem isn't that someone deleted a user without deleting the scholarship. The real cause of the problem was that someone was able to do it. The system should have checked for a scholarship for the user and put up an error message before deleting the user, or deleted the scholarship along with the user. Even that isn't the deeper error: the database allowed a scholarship to exist without a corresponding user.

Any database system out there has referential integrity. You tell the database that a record in table FOO refers to a record in table BAR. You cannot delete a FOO without deleting it's BARs first. This is basic relational database stuff. And it was totally ignored in this system I'm about to work on.

And there's no version control, or testing.

February 21, 2009

RSS Hits the Big Time (Aaron Swartz's Raw Thought)


As chaunceyt pointed out, the new stimulus bill’s implementation instructions require that each government agency report the money it gives out in RSS:

For each of the near term reporting requirements (major communications, formula block grant allocations, weekly reports) agencies are required to provide a feed (preferred: Atom 1.0, acceptable: RSS) of the information so that content can be delivered via subscription.

Pretty amazing to see a government so tech-savvy.

Now that's just damn cool.There was plenty of talk of open government and accountability during the election last year, but now Obama's actually doing it. This is exactly the sort of technological change that is required in the USA to give a clean, lean government.

And they seem to actually get technology. Preferring Atom 1.0 feeds over RSS feeds is a brilliant decision, but they really should have specified which version of RSS to use. There are seven (or nine, depending) differing and incompatible versions of RSS.

About February 2009

This page contains all entries posted to msj in February 2009. They are listed from oldest to newest.

March 2009 is the next archive.

Many more can be found on the main index page or by looking through the archives.

Flickr Photos

www.flickr.com
Powered by
Movable Type 3.33