Archive

Archive for February, 2005

Phil’s Internet Product Fanatic List

February 28th, 2005

In one of his quarterly weblog updates, Phil Fibiger reveals his fantastic list of message boards and mailing lists full of product fanatics.

Know people who can talk hours and hours about a single product line? These forums are where they gather. If you’re looking for a good, solid EDC (Every-Day-Carry), be it a blade, a flashlight, or mixing spoon, stop by the forums that Phil lists for some good old-fashioned personal advice.

It’s usually really difficult to find the single “real” forum for a particular product line, especially because there are so many pretenders to the throne. That’s why it’s good to know someone like Phil to prune the hedges of internet spammery and just deliver the best.

Uncategorized

The “Disco Doc”

February 27th, 2005

It’s definitely not cool to say, but man, I dig disco music.

I was checking my search term logs, and found that people actually make it to my site by searching for “disco dancing.” This is no doubt due to the disco instructional video that I linked to a while back.

I was feeling curious, so I searched for the same terms on google, and what I found about the “Disco Doc” is pretty unbelievable. Check this out – an Asian-American dentist, Dr. Rodney Chang, converts his dental office into a disco studio in 1979, gets invited to national TV shows, and in 2002, at age 56, is still dancing! You really have to check this out.

Da Waiting Room – his personal homepage (midi disco background music)

Beyond Disco Dancing or 100 or 150 dance strategies of Disco Doc

Not only that, in the mid-1980′s, he became Pygoya, the Cyberartist! The link takes you to his VRML Web Virtual Art Museum. No joke. It has background music and flaming logos, so if you’re a web designer, take it with a grain of salt.

This is just so amazing, I recommend you check it out for yourself. And if you think i’m just poking fun at him for his web design, i’m not. This is one prolific and accomplished guy of our era, and i’ve never heard of him. Imagine being a dentist, disco star, and accomplished artist in one lifetime. No matter what your websites look like, that’s a heck of a lot.

Hats off, Disco Doc. I salute you.

Uncategorized

Naming Conventions That Delight the Programmer and Confuse the Users

February 26th, 2005

Warning: This can conceivably be viewed as a rant. However, I fall into the same traps as those I outline here, and I’m simply trying to organize my thoughts into a pattern rule that I can use when writing and maintaining my own code.

This post may have implications beyond programming. If you’re making forms for others to use, even if they’re not electronic, you’re defining an organized perspective on something. Organized perspectives are tricky, because they’re usually desperately needed in order to get ad-hoc notes, data, and relationships into some sort of structure so that useful information can be extracted.

Why should anyone care? Because when you start to interact with other people, forms, databases, or even excel spreadsheets, every concept and word you used in defining your data must be mapped to concepts and words in the other person’s vocabulary. Additionally, many words that programmers typically use are delightfully ambiguous. Programmers sometimes call this “flexibility.” Is this a misnomer? You can be the judge.

Here are some “flexible” concepts that are programmer favorites. Type. Reference. Category. Number. Name. Date. Item. Object. Context. It truly doesn’t seem too bad at first glance, right? After all, we used these words all through our CS degrees, and they’re sprinkled through all the writing and documentation that programmers do and read. Well, imagine coming across a data store (database, excel spreadsheet, whatever) with a table called ReferenceTypeNumber. Or CategoryTypeNumber. Or ObjectReferenceCategoryTypeID. Does that seem like an unlikely scenario? Trust me, it’s not.

And then there are the completely made-up words and concepts that programmers and data people made up, because they started confusing themselves. For example, let’s look at the concept of a “namespace.” A namespace is really a way of saying that you’re about to use all sorts of “flexible” names, and you expect that the names are so useful and good that someone else is bound to use them as well. You don’t want to confuse your “Type” with someone else’s “Type”, so you make a “namespace” and stick it at the front of all your words. My namespace might be “Gordon”. That would make my “Type” “Gordon”.”Type”. Your type might be “Jimbo”.”Type”, and we all live happily ever after.

Until you have to explain the concept of namespaces to someone else. Because when programmers finally “get” a concept, it means that we’ve managed to wrap their “flexible” concepts in their own brain around this new concept, and in order for us to tell you what it means, we use all sorts of “flexible” terms. And god help you, too, if you encounter XML namespaces and paste in the URI to your browser, find nothing, and become completely mystified.

“Oh, the User Type? It’s just the category of User. No, it doesn’t have anything to do with your LDAP User Type, or Active Directory User Type, it’s just your Website User Type.”

Dur.

So what, am I just complaining? Nope. I think it’s possible for programmers to think in tangible, real-world terms at the very least, when they interface with the outside world. Of course, it’s not practical to expect that Java / OOP languages change their base class from Object, because we need that “flexible” concept to even implement OOP. Luckily, non-programmers never need to be exposed to those concepts if we (the programmers) are careful.

The basic idea is this:

Name Carefully!

This is most useful for API’s, interfaces, documentation, communication, presentations, etc. If you get more comfortable and used to naming carefully, you can extend it further. Personally, I like to go as far down as I can possibly go, naming tables and fields in my databases carefully. I’ve had enough nightmares of discovery going through undocumented databases for two lifetimes. I try to extend a small favor to posterity by carefully naming and documenting my databases.

Now that i’ve explained the motive and the concept, here are some concrete processes you can follow to carefully name your own programming (or other) projects.

  • When designing automation or databases around a flat-file or paper database, or even a “social” database of ad-hoc discussions, take detailed notes about the words people use in conversation about the concepts. If you can, create a glossary. The glossary of terms is a good place to start your naming conventions.
  • Often, you’ll find that real-world humans use “context” as their “namespaces” in everday conversation. What does that mean? For example, if your context is a discussion about the company website, you can take “Account” to mean the credentials you log into a website with. In other instances, if you’re talking about customers, “Account” might mean an actual monetary account held with your company. In the examples, the context was different, so the same word held multiple meanings. We, as programmers, get confused too, so sometimes it’s useful to ask questions like, “Do you mean the Website Account, or the Monetary Account?” to enumerate the namespaces that you infer from the conversational context. Make sure to make notes of these contexts, because you might end up using them as namespaces, table names, or prefixes in your interfaces and forms.
  • Make sure to review the glossary with the future users, and continue to refine it to minimize confusion or ambiguity. You know you’ve got the right terms when you can ask detailed questions clarifying your understanding, and you get detailed corrections or an affirmative response. Note: Many programmers are so used to getting blank stares when asking detailed questions, that they may be shocked at the improvement in feedback when properly using careful names. :)
  • Try to use physical or tangible constructs that really fit well with underlying concepts. Instead of “Type,” some tangible constructs might be “Department,” “Clearance Level,” “Audience,” etc.
  • If you’re not familiar with Database Normalization techniques, they can be invaluable in designing databases for maximum usefulness and extensibility. Creating a carefully-named system goes hand-in-hand with ensuring database normalization, because it helps you avoid overloading a table with uncorrelated records.
  • It can be frustrating work! Make sure to take a break once in a while and talk like a normal person again. It’s good to be detail oriented, but it does get tiring after a while.

Many thanks to all those people who have inspired this way of thinking – John Coanda in particular (the most detail oriented guy I ever met, who showed by example how to carefully construct detailed questions about confusing topics).

Uncategorized

The “Vote For Lunch” Market Roundup

February 19th, 2005

When I created eatlunch.at, I had little knowledge of existing “vote for lunch” applications that had already been made. In fact, the question “Where shall we have lunch?” is the universal third stage of civilization, and many have attempted to create a solution to that problem. Many have been brought to my attention, although I clearly think mine is the best. :) Here are a couple for your perusal:

Dave Regan’s lunch.cgi – it’s written as a perl cgi, so we can basically dismiss it entirely. ;) It looks like it does single-party management, with categorization, list of eateries by last access (a point of argument on eatlunch.at), and automated emails. This one actually does a final email that’s supposed to be authoritative at 11:00 am (more on that later) – Found as the #1 result for ‘vote for lunch’ on google.

Dave Renteria’s Wheel ‘O’ Yum – disclosed to me on the makingstuff list, the wheel o’ yum is an actual desktop application that basically picks a random place to go to eat. Apparently the original version decides where you go to lunch, and that’s final; but, due to embarrassing situations, Wheel ‘O’ Yum Supreme now emails you a decision. Hmm… DrLunch.com – a similar web application written in JSP, that gives out helpful stack traces when you try to register. No idea what is inside, but it certainly sounds interesting. It actually makes a choice itself as well. Apparently, Photo Matt found this on a AdWord for this google search: “What are we having for lunch?” Nice. I tried the query, but no longer see the AdWord. Too bad.

In one of the more freaky google AdWord displays for “eat lunch”, BeMyBuddy.co.uk somehow promises to “Find people online to have lunch
with, throughout the UK.” I don’t know about you, but that sounds kind of odd, especially when combined with the pastel kiddy color scheme.

So, it seems like there are several differentiating factors in play here.

  1. Whether the application chooses a place for you, or allows you to vote
  2. Whether there is a “final result” that must be obliged.
  3. Sends email
  4. Desktop or web application
  5. Downloadable Program or a service
  6. Maintained, or, ‘et by the hogs’

Let’s look at the lunchtime voting matrix.

  eatlunch.at lunch.cgi Wheel ‘o’ Yum Wheel ‘o’ Yum Supreme Dr Lunch BeMyBuddy
App Chooses / You Vote Vote Vote Pick Pick Calculate Too Scary
Final Result? No Yes Yes No Yes Too Scary
Sends Email? When first vote cast Reminder & Final No Final ??? Too Scary
Desktop / Web Web App Web App Desktop Desktop Web App Too Scary
Download / Service Service Program Program Program Service Too Scary
Maintained / et by the hogs Maintained (by me!) et (?) et Maintained et Too Scary to et

One of the most controversial factors in play is the “final decision” factor. For me, this was a design decision. I designed eatlunch this way because the final decision of where to go to eat is still a social one. The primary problem that we face as lunchtime adventurers is extracting daily preferences from each person. There are often those that profess “anywhere is okay,” but renege by rejecting suggestion after suggestion.

Making a final decision within an application not only leads to failure of the application, but also a sense that the application is useless anyway. A good lunchtime voting application should give you important data about your decision, and provide a way for you to express your preferences without committing a great deal of time or effort, and without blocking the way to last-minute lunch audibles.

With that said, there are plenty of improvements on the way for eatlunch.at that will make it easier for others to use and understand. Among those are: vast improvements for the spot directory, “opt-out” from the day feature, rss feed for your party, better explanation of the site, improved ‘hints’, better tag management features, spot detail pages (!), and more! But it’s still pretty fun to use as-is.

Well kids, that’s it for today’s market roundup. Remember, if you have a hard time deciding where to eat lunch at, try eatlunch.at.

Food, Tech, eatlunch.at

Some fixer-uppers on eatlunch.at

February 7th, 2005

Today, my good fellow coworkers pointed out that I kinda stepped over the line that made eatlunch.at more feature-ful, but not as simple and quick as before.

All along, my primary goal has been to get in the way of users as little as possible, while maintaining usefulness.

So I fixed the problems today and changed the spot directory to behave more like the normal party page. If you click on a spot, you vote for the spot. If you vote for a spot, it’s saved for you automatically. You only have to add tags if you really want to!

The hint system is fixed now, and voting for lunch should be just as simple and fast as before. The inline hints should help new users, and are easy to turn off when you get the hang of the site.

As a personal aside, I believe more in Usefulness than Usability, but it’s good to have both. I’ve found myself using a ton of tough-to-use but useful applications, because what they do are so cool, and once I figure out how to use them, i always end up going back to them again and again. Case in point: all of *nix, and most open source software.

It’s pretty interesting that there’s a ton of talk about usability, when there are plenty of usable but useless interfaces out there. First things first, right? So, anytime stuff on eatlunch.at isn’t particularly useful, please let me know and i’ll definitely accept your feedback.

Food, Tech, eatlunch.at

eatlunch.at

February 6th, 2005

It is with great humility that I submit for your review:

eatlunch.at – a lunchtime voting application.

It started as a silly idea spawned over lunch discussions with my coworkers, and has slowly and pleasantly changed the way we decide where to go to lunch. I wish I always had something like this – it not only saves a lot of time, but makes the decision making process a lot more fun than walking halfway out the building without having a clear choice in mind.

I’m also using it as an experiment with new programming trends, such as folksonomies and emergent pathways. It’s interesting learning to code this kind of thing, and i’ve also built a general-purpose freetagging PHP class that I will no doubt open source when I get some time.

Have fun, and check out the About Page for more information.

P.S. I hope you don’t find any bugs, and please don’t slashdot it, or my coworkers will never figure out where to go to lunch.

Food, Tech, eatlunch.at