Ideas: Animal Background for Zoos & Aquariums

Tony the River OtterA recent post at Seth Godin’s blog reminded me of an idea we had discussed a few weeks ago. Zoos and aquariums often have signs that give some basic information on the species of the animals they house, but almost never any information the actual animals themselves. You will only see it done now for major attractions like pandas, and I wouldn’t expect it for every prarie dog or lobster, but I think it could be done much more often.

In this day of easy and on-demand printing, it seems like it would not be a big effort to put up a little placard for each one. The names, birthdates, and birthplace of the animals, with a picture and perhaps some notes on the lineage or personality of the animals would make the whole experience much more engaging, and I might even say that it would boost donations or visitor involvement. This information exists, and you can get it if you opt to bother the staff, but they are always very busy and do most of their work before and after visitor hours.

This could even be taken to a new level if the information is online, editable by volunteers in a wiki-esque format and available as news feeds or email alerts when something happens involving your favorite/sponsored critters.

Ideas: 2 Flickr Features

I often, as most people do, think up things that products/services that I use “should” do. Sometimes I even send these ideas in, if the company has made it easy to do so. I think from now on I will still send them in, but will also post them here, because ideas beget ideas and maybe someone will see mine and come up with an even better one.

So, as any reasonably regular reader can tell, I’m a fan of Flickr. I don’t really use the social features much, I find them a bit unweildy, but I do like it’s organization tools, overall UI, storage of full-size images, unlimited upload quota, and many other features. I don’t derive any direct value from the general public having access to my photos, but maybe the public does, or will someday, get some value. There are two features that I’d like to see added:

1. Virtual Cropping – I lack the time, patience, and/or skill to go through every photo and adjust levels and crop it properly before I upload. Flickr resizes photos to fit the various templates. I’d like to be able to draw a box (like they do with notes) that will be what people see, with the sole exception of the “original” size. This way I can keep the original intact but crop things on the fly as I’m organizing online.

2. Cross-User Sets – I recently went on a couple of trips and took alot of photos. A friend of mine, also a Flickr user, also took alot of photos. Some of his photos are ones I didn’t take, or better than ones I took. When I send someone a link to my collection/set of the trip, I’d like to include some of his photos inline, rather than telling people to look in multiple places. Technically this could be accomplished with groups, but these are typically one-off things and more geared towards collaboration than curation. Basically “Add to set” should be enabled for anyone’s (public) photos, especially those by contacts/friends.

Gift Cards

Firstly, happy thanksgiving everyone.

Tomorrow is the biggest shopping day of the year, and all I ask is that you consider not giving gift cards. Over $8 billion per year in gift cards are given, and not used. If cards offered some kind of built-in discount ($45 for a $50 card) then they might be excusable, but they are essentially a crippled form of cash. Think about it, would you give someone stamps?

To me, gift cards say the following to your recipient:

“I’d like to give you money but I’m afraid you’ll spend it on drugs”

“I don’t know you well enough to even attempt to pick something out, but I’m absolutely sure what store you’d like to go to”

“I’m too lazy to go through the store and actually find something for you”

“I forgot about getting you a gift, so just be glad I had to stop for gas”

“You have bad taste and shop a crappy stores, so I’m forcing you to shop at a good one”

If you’re happy saying those things (sometimes I am), then gift cards are perfect. Otherwise, take a moment to try and think of something original, or just go with good old-fashioned cash.

The Apple … Store?

What do I do with this pretty green paper?The Natick Mall was a big mall, and now it’s a really big mall (and called the Natick Collection). One of the new stores is an Apple Store. I’ve been in Apple stores before, but not since they added the “Genius Bar” which is where the checkout lines used to be. When I went to pick up my new keyboard, I found it easily enough, the store is small and has an open layout. The first part of my mision complete, I looked around for where I’m supposed to pay for my item.

I wandered to the middle of the store, and saw another man looking around with an iPod box in his hand. It was obvious we were both trying, and failing, to do the same thing, which was to give someone money. I then walked to the back of the store, where there was a line of people, and waited in line. When my turn came I presented the product I wished to purchase, as well as my credit card. The “Genius” told me that the “Bar” was only for help and not for sales. “Who will take my money?,” I asked. “Anyone else,” said the Genius. Everyone else that had a nametag and a black shirt, Genius or not, was busy.

I was very tempted to place the keyboard in the middle of the floor and leave, go home, and order it online. However, I did really want it, so I waited for someone to finish explaining that all the software the person assumed was on the $2000 laptop they were about to buy (Word, Excel, and Photoshop) was extra, but “don’t worry, all the cool stuff is free,” quoth the Genius. After a few more minutes hovering behind the tentative victim, who reconsidered and left the store, I was able to get the black-shirted employee’s attention and he sold me my device from a handheld contraption.

Much like bad engineering is often identified by excessive cleverness, bad design, whether it’s a website or the layout of your store, is often identified by being excessively reductive. If you have a store, and want people to buy stuff, don’t feel offended that you need to stoop to having a sign that says “Pay Here”.

Usernames

Usernames for most websites are based on UNIX conventions/standards. They are lowercase, usually begin with letters, and have no whitespace. Many sites offer a “display name” which is more flexible.

While discussing requirements for a new project, my first inclination was to do something similar, simply because “that’s how it’s done”, but someone suggested this method might be antiquated. After giving it a few days of thought, I tend to agree. “Old” user domains like AOL, Windows, and Slashdot have logins that have allowed spaces for years, yet most of even the latest, shiniest Web 2.0 sites go back to the 1970s for their guidelines.

We’ve even taken it a little further and not only can users use spaces, underscores, and dashes, these characters are ignored for purposes of uniqueness, because I’m guessing people’s brains will tend to stem these characters when it comes to memorizing them. So “Eric Savage” and “ericsavage” and “Eric_Savage” and even something like “Eri__c-SAVA g-_E” would all be the same.

When appearing in a URL or other machine-readable context, these characters are all changed to underscore and consecutive duplicates are eliminated, so the previous username would be “eric_savage”. Also, leading and trailing non-alphanumerics are stripped, otherwise we’d likely find users all naming themselves __alphadog so they appear first alphabetically. We could expand the list of which extra characters are allowed, but we’ll start off easy.

Questions:

    Can anyone think of good reasons for why you should stick to UNIX-style usernames?
  • Should users on a community site be able to change usernames? [I’m currently in the “no” camp]
  • If changeable, should the change history be public?
  • Most people like short usernames, some people prefer long ones. What do you think should be the limit? [I’m currently thinking 20]
  • Is a short limit too ethnocentric?

Wish List: Session Moratorium

DetourA feature that the major open-source/free servlet containers (Tomcat, Jetty, Resin) lack, AFAIK, is the ability to tell the container to stop issuing new sessions, and more importantly, make this flag known to the HTTP server connector. One or more of Websphere, Weblogic, and ATG Dynamo (I forget which) has this ability, and it’s extremely useful for higher-volume websites.

How it works: Server Bank A is running, Server Bank B is dormant. When you have a new release, you push it to B. Once B is up and running (this can take a while with some advanced applications), you tell A to stop issuing new sessions, and the load balancers send all new traffic to B. Once traffic has bled off of A entirely, A becomes dormant, and is ready for the next release.

Why it’s valuable: You can do a release without interrupting any sessions. This was particularly valuable on the project we used it on, because there was plenty of time to pre-compile pages, and the transactions were relatively high-value ones, so it was worth the price of the commercial license to ensure that none were lost or interrupted.

Considering all of the containers are relatively close performance-wise, and feature-wise, I think this would be a “killer feature” for any OSS container that had it.

Database Naming Conventions

Time for another naming convention. This time it’s something people care more about than Java packages, we’re talking about databases. Here are the rules, and the reasons behind them.

Use lowercase for everything

We’ve got 4 choices here:

  • Mixed case

    • Some servers are case sensitive, some are not. MySQL for example, is case-insensitive for column names, case-insensitive on Windows for table names, but case-sensitive on Linux for table names.
    • Error prone
  • No convention

    • Same reasons as mixed case
  • Upper case

    • SQL is easier to scan when the reserved words are uppercase. This is valuable when scanning log files looking for things like WHERE statements and JOINs.
    • MySQL will always dump table names on Windows in lowercase.
  • Lowercase

    • Works everywhere. Some servers, like Oracle, will appear to convert everything to uppercase, but it’s just case-insensitive and you can use lowercase.

Only use letters and underscores and numbers (sparingly)

  • Most servers support other characters, but there are no other characters which all the major servers support.
  • Numbers should be used as little as possible. Frequent use is typically a symptom of poor normalization.

    • address1, address2 is OK
  • Whitespace isn’t allowed on most servers, and when it is you have to quote or bracket everything, which gets messy.

Table and column should be short, but not abbreviated.

  • You’ve seen the same thing abbreviated every way possible, like cust_add, cus_addr, cs_ad, cust_addrs, why not just customer_address? We’re not writing code on 80 character terminals any more, and most people aren’t even writing SQL, so let’s keep it clear, OK?
  • 30 characters is considered the safe limit for portability, but give some serious thought before you go past 20.

Table names should be singular.

Yes, singular! Oh yes, I went there. I used to use plural names, because it’s more semantically accurate. After all if each record is a person, then a group of them would be people, right? Right, but who cares. SELECT * FROM person isn’t any less clear than people, especially if you’ve got a solid convention. You don’t use plurals when you’re declaring class names for a vector of generics do you? Also:

  • English plurals are crazy, and avoiding them is good.

    • user -> users
    • reply -> replies
    • address -> addresses
    • data -> data (unless its geographic, then it’s datum -> data)
  • Singular names means that your primary key can always be tablename_id, which reduces errors and time.

Double Underscores for Associative Tables.

You’ve got your person table, and your address table, and there’s a many-to-many between them. This table should be called address__person. Why? Well what if you have a legacy_customer table that also ties to address. Now you’ve got address__legacy_customer. A new developer can easily pick up this convention and will be able to break down the names accordingly. Remember, no matter what the Perl/Lisp/Ruby/etc guys say, clarity of code is judged by how someone reads it, not how they write it.

Component Names of Associative Tables in Alphabetical Order.

This rule is somewhat arbitrary, but still beneficial. There’s no good way to determine which goes first. Table size, “importance”, age, who knows what else, and those assessments may change over time. Or, you might find that your manager assigned the same task to two people, and now you’ve got an address__person and a person__address table co-existing peacefully, when you only need one. Everyone putting them in the same order makes reading and writing queries easier.

That’s all I’ve got for now, but I encourage you to offer your own, or even refute some of the ones above (with some reasoning, of course).

52 Word Review: Eagle versus Shark

Eagle vs. Shark I went to see Eagle vs. Shark because I think Jemaine Clement is one of those inherently funny people. If you agree, you will probably like it. Otherwise it’s an “offbeat” Napoleon-Dynamite-style romantic comedy from New Zealand. What it lacks in hobbits it makes up for in Awesome clothes and nunchucks.

52 Word Review: Transformers

More than meets the eye!Transformers was the coolest, silliest movie I’ve seen in a long time. There’s obviously some nostalgia at work here, but it’s a solid, loud, typically-Michael Bay action movie. If you played with the toys as a kid like I did, rest assured, Optimus Prime is still as cool as you remember.