Archive for May, 2008

Web 2.0 Pronunciation

When I was a young, brash lad, full of myself and having more than my fair share of natural sibling competitiveness, I used to poke fun of my older brother when he mispronounced words that he had read, but had never heard spoken. After he read THGTTG he pulled out some doozies; I with I could remember exactly what they were.

With Web 2.0 names approaching Gaelic, Welsh or Old Norse in terms of oddball spellings, I now find myself struggling to figure out how to pronounce some of these names. Two in particular that are getting the best of me are Qik and Hahlo. Is it “Kick” and “Halo” or “Quick” and “Hah-low”?

I have a little company called Xidey that throws lots of people off. I’ve heard pronounced every which way. “Ziti” (like the noodle), “Zitty” (like pimples!), “Excitey” (close, but not quite)…I’m happy with my new startup product’s name, “Crowdify”, which is probably not a candidate for mispronunciation.

What Web 2.0 names throw you off?

You’ll Never See a Tweet Like This

Another reason I like Twitter better (way better) than FriendFeed: fewer monkeys throwing poop on each other, under the guise of “conversation”.

What’s that old simile comparing “Arguing on the internet” with “Special Olympics”? Hmmm….

Twhirl “Limit Exceeded” Message

Have you see the error on the bottom of your Twhirl Twitter client that says something like “limit exceeded, paused 5 min”?

Twhirl limit exceeded message

If so, here’s the culprit:

The API limit is still being kept at 30 requests per hour to help us stabilize the service for everyone. Some folks will get “rate limit exceeded” error if you use API clients that request data from us at a higher rate. Please reconfigure them appropriately for the time being.

Change this setting down to 30 in Twhirl by clicking on the wrench icon at the top (Configuration), then the Network tab, then the Request Usage dropdown.

Why Robert Scoble REALLY Loves FriendFeed

Today’s meta-meme is about Twitter employee Alex Payne supposedly laying all of Twitter’s problems at the feet of so-called “super-users”, aka Robert Scoble. Read the post and tell me if you don’t think Scobleizer overreacted.

The deeper issue is this whole FriendFeed vs. Twitter meme, with several prominent blogger/tweeter types recently proclaimining in favor of FriendFeed. It’s sort of like a superdelegate coming out in favor of one of the Barack or Hillary – it’s big news and gets echoed repeatedly.

Scoble is firmly on the side of FriendFeed, and it’s not just about Twitter’s scalability problems. Here’s the real reason why: On Twitter, he’s just one of many people you may follow. On FriendFeed he’s a big fish: he gets to start and own “conversations”, with people piping in to contribute to memes that HE started. He posts a one-liner with a link and gets dozens of people following up on his entry.

Twitter is democratic; FriendFeed is oligarchic. Twitter is loose and unpredictable; FriendFeed reads a lot like the blog posts at the bottom of Scobleizer.com. If I wanted to hear a bunch of people agreeing with Scoble I’d just go read his damned blog.

So if you want a bunch of me-too bloviating, by all means go follow Scoble on FriendFeed.

Twitter is a different animal – lifestreaming in the truest sense of the word. I enjoy the glimpses of things happening that go by; I like being able to jump in and out of the tweetstream; and I enjoy the brevity that Twitter forces on me (and the people I follow).

I also enjoy the fact that I don’t need to go back and read all the tweets I “missed” while I was offline. Mathew Ingram, whose name in Latin must mean the aggregation of the terms “echo”, “meme”, and “ex post facto”, doesn’t like this – he wants to go back in time and “catch up”. Man, if you think Twitter is about catching up, you don’t get Twitter at all.

In this battle, make sure that you vote properly: are you in favor of being a super-user groupie (FriendFeed), or a first-order participant (Twitter)? Choose wisely.

(If you love Twitter and liked this post, follow me at http://twitter.com/anthonyrstevens)

Comparing SQL Queries That Solve My Thorny SQL Set Operation Problem

For comparison’s sake, the following is a runnable T-SQL script that contains both the solutions provided by helpful friends to my previous “Thorny SQL Set Operation” problem.

set nocount on
go

drop table person
drop table category
drop table personcategory
drop table groupcategory

go

/* create the person table */
create table person (personid int, name varchar(50))
/* create the category table */
create table category (categoryid int, name varchar(50))
/* create the personcategory table */
create table personcategory(personid int, categoryid int)
/* create the group table */
create table groupcategory (groupid int, categoryid int)

go

/* insert the person data */
insert person values (1, “Hillary Clinton”)
insert person values (2, “Segolene Royal”)
insert person values (3, “Barack Obama”)

/* insert the category data */
insert category values (1, “Man”)
insert category values (2, “Woman”)
insert category values (3, “Politician”)
insert category values (4, “American”)
insert category values (5, “French”)

/* insert the personcategory data */
insert personcategory values (1, 2)
insert personcategory values (1, 3)
insert personcategory values (1, 4)
insert personcategory values (2, 2)
insert personcategory values (2, 3)
insert personcategory values (2, 5)
insert personcategory values (3, 1)
insert personcategory values (3, 3)
insert personcategory values (3, 4)

/* insert the group data */

/* GROUP 1: American Politicians */
insert groupcategory values (1, 3)
insert groupcategory values (1, 4)

/* GROUP 2: Female French Politicians */
insert groupcategory values (2, 2)
insert groupcategory values (2, 3)
insert groupcategory values (2, 5)

/* local vars */
declare @american_pols int
select @american_pols = 1
declare @female_french_pols int
select @female_french_pols = 2

/* QUERY METHOD 1: “Hans Method” */

select distinct p.*
from Person p
join PersonCategory c on (p.personid = c.personid)
where c.personid in (
select c.personid from PersonCategory c
where c.categoryid in (
select g.categoryid from GroupCategory g
where g.groupid = @female_french_pols
)
group by c.personid
having count(*) = (
select count(*) from GroupCategory g
where g.groupid = @female_french_pols
)
)
and c.categoryid in (
select gc.categoryid from GroupCategory gc
where gc.groupid = @female_french_pols
)

/* QUERY METHOD 2: “Tom Music / Brian Dorsey Method” */

select p.personid, p.name, count(*) from person p
join personcategory pc on pc.personid = p.personid
join category c on c.categoryid = pc.categoryid
where c.categoryid in (select gc.categoryid from groupcategory gc where groupid = @female_french_pols)
group by p.personid, p.name
having count(*) = (select count(gc.categoryid) from groupcategory gc where groupid = @female_french_pols)
order by p.personid

Bitmasking Solution For Thorny SQL Set Operation

My previous post outlined a tricky little SQL query problem dealing with set intersection. In addition to the solution found by Hans, I thought for completeness I would post a little scalar function that does a bitmask comparison to achieve the same result – with the notable, and possibly untenable solution that it limits the number of categories in your database to 64 (the number of bits in a BIGINT).


create function IsMember
(
@personid int,
@groupid int
)
returns int
as
begin
declare @ret bigint
declare @personsum bigint
select @personsum = (select sum(power(2, pc.categoryid - 1))
from personcategory pc
where pc.personid = @personid)
declare @groupsum bigint
select @groupsum = (select sum(power(2, gc.categoryid - 1))
from groupcategory gc
where gc.groupid = @groupid)
if ((@personsum & @groupsum) = @personsum)
select @ret = 1
else
select @ret = 0
return @ret
end

Thorny SQL Set Operation

UPDATE 2: I posted a full script that contains both working solutions in a related post.

UPDATE: Hans developed a query that works. See the comments. It works even if my group is (Female + French), but my Person is (Female + French + Politician) – e.g., extra categories not part of the group are ignored.

Thanks for all the help!

********************************

I’ve been working for a bit on a (possibly) hard SQL query and thought I would write out my problem here, in the hopes that (a) I’ll solve it, and (b) I’ll make the solution available to others via the magic of Teh Google.

Here’s the problem: I have a concept of “category”. Example categories: Man, Woman, Movie Star, Politician, American, French.

I have a concept of “person”. Persons can belong to one or more categories.

I have a concept of “group”. A Group is merely a listing of one or more categories. For example, “Male Movie Stars” is a Group (Man + Movie Star). “Female French Politicians” is a group (Woman + Politician + French).

What I want to do in my query is this: Given a Group, find all Persons who belong to that Group.

pseudo-code query:

select * from Person p
join PersonCategory pc on (p.personid = pc.personid)
join GroupCategory gc ON (pc.categoryid = gc.categoryid)
where gc.groupid = @groupid

However, normal JOIN syntax using the IN operator does an “OR”-type operation, when what I really want is an “AND”-type operation. Using the “Female French Politicians” example from above, this query will return French OR Woman OR Politician. Not what I want.

Thinking…

Programmers: Go Read Proper Fixation

If you’re any sort of a propeller-head, you owe yourself a visit to Proper Fixation, by Yossi Kreinin. I have found a programmer blog with this caliber of writing (and humor, and common sense) in a while.

Excerpt: here’s Yossi, writing about dependencies and redundancy:

But you already got it – I don’t want your code, because I’m an antisocial asshole that has no team spirit whatsoever. I’m going to parse arguments using 5 lines of C code. Worse, I’ll make a function out of those five lines, prefix its name with the module name, and replicate it in all my modules. Yep, I’m the copy-paste programmer and you’re the enlightened developer of the next generation command line parsing platform. Have it your way, and I’ll have it my way.

Good stuff. Take a gander.

Silos, Networks, and Value

I’ve been hearing Robert Scoble yak for months, nay, years, about the “walled garden” metaphor in social networking. This is where a vendor, say, Facebook, locks in users by restricting their ability to move their social graph to other, possibly competing services.

It appears that the trend is slowly moving in the direction of portability, which is a win for average Janes and Joes, not to mention the Scobles and Calacanises of the world who have about 1.0*10^12 friends apiece and who are singularly responsible for recent Twitter downtime, among other horrible crimes.
There’s a larger issue, which is almost the reverse of the walled garden issue, and that is, how valuable are silo networks in the first place? The item that got me thinking was a post by Ken Ross on the Seattle Tech Startups list about his new venture called ExpertCEO:

We’re writing to invite CEO’s, COO’s and Presidents to join ExpertCEO, a private on-line community where senior executives can confidentially exchange ideas with peers, locate trusted resources, ask questions of experts across a range of disciplines, and quickly solve real-world business problems. The site combines social networking technology with concepts proven by CEO membership organizations like Vistage and YPO

I was immediately brought back to 1992, when I was the store manager for a Mailboxes, Etc. franchise, and a guy who had a mailbox there invited me to join a similar organization. His gig was to go around to different cities, set up an irresistable buzz among the wanna-be CEOs, collect his membership dues, then hand over the managerial reins to some clueless schlub and go on to the next town.

The thing was, I was 20 years old at the time and had no executive experience of any sort. I was a struggling student who happened, by dint of responsible behavior, to land this slightly less crappy job than most of the other students. But when he invited me to join his super-CEO group, I was thinking something along the lines of “I wouldn’t want to join any organization that would want to have me as a member.” I went to one introductory meeting and it was a roomful of mostly clueless, mostly preening young guys who had big ambition but not much in the way of real mentoring, or anyone they could ask to see “is this thing really worth my time?”

I’ve been fortunate since to have a couple older mentors who have taught me a lot – often through osmosis – and so now, when I see the ExpertCEO pitch, I immediately reject it. But let’s assume for the moment that this guy, Ken Ross, is a decent guy who really thinks that this idea has legs. He might be thinking along the lines of the job-hunting site for “people making over 100K a year”, TheLadders.com

Does it have legs? Do “communities of interest” have a place?

I get a lot of value out of my self-selected network(s): Twitter, LinkedIn, Facebook, etc. I also get a lot of value out of special-interest groups I belong to (formally or informally), such as the Seattle Tech Startups group itself. What’s worth paying for, and what’s not? Is Twitter worth paying for? Is Biznik? Is ExpertCEO?

Recently on STS there was a long series of discussions about whether it was useful for startup founders to subscribe (pay for) membership in the various Angel and VC funding organizations, like NWEN, Alliance of Angels, Keiretsu, etc. There were strong sentiments on both sides of that argument.

What do you think?

URL Canonicalization

I’m setting up my Google Analytics account for the upcoming soft-launch of Crowdify and was forced to think about the topic of URL canonicalization.  For the uninitiated, this is the single version of your homepage URL that you want to use every place you have to give out your domain name.

Recent posts in the blogosphere have caught my eye on this subject: see Search Engine Journal for example.  A recent post to the Seattle Tech Startups list made by Vanessa Fox also mentioned the issue of keeping your URLs consistent.

So – do I use http://www.crowdify.com or just crowdify.com?  A couple high-profile SEO people have made the argument that you should use the WWW- prefixed version, because most people are attuned to using WWW for websites.  I don’t buy it.  The non-www-version is shorter, easier to say, and affords the flexibility to have other tertiary domains that are obviously different, such as blog.crowdify.com or what have you.

The Wikipedia article is (unsurprisingly) very detailed about the process of canonicalizing URLs.  They recommend removing the www, among a host of other changes.

What canonicalization version do you prefer, and why?


TwitterCounter for @anthonyrstevens
Add to Technorati Favorites

RSS Feed

View Anthony Stevens's profile on LinkedIn