Wow, Gmail does catch a LOT of spam. I already thought so, I hardly ever get spam, even though my email is all over the place.
A PHP function for SEO-happy titles
This is a simple PHP function (two functions actually) that I wrote that generates SEO-happy URL fragments. This way, you can have /something/its-a-title/ instead of /something/19828/ in your URL's. You'll have to call the function to generate a URL path and store that in the database with your object every time you add an object. It uses dashes instead of underscores because historically they've been better for SEO, although that seems to be changing. Feel free to use this function any way you want. I'm sure it could be improved btw, my PHP skills are of the "it works but it ain't necessarily pretty" variety.
The function lets you add in a tablename and field that it will use to make sure that the url string it generates is unique.
It uses a "clean()" function in the beginning that just cleans up the text, you can remove that or replace it with your own function.
The second function especially is kinda cheapo, but it works and I'm too lazy to improve it.
/**
* Recursive function that generates a unique "this-is-the-title123" string for use in URL.
* Checks optionally against $table and $field and the array $forbidden to make sure it's unique.
* Usage: the resulting string should be saved in the db with the object.
*/
function seo_titleinurl_generate($title, $forbidden = FALSE, $table = FALSE, $field = FALSE)
{
## 1. parse $title
$title = clean($title, "oneline"); // remove tags and such 0)
{
// already taken. So recursively adjust $title and try again.
$title = append_increasing_number($title);
$title = seo_titleinurl_generate($title, $forbidden, $table, $field);
}
}
## 3. check against $forbidden array
if ($forbidden)
{
while (list ($key, $val) = each($forbidden))
{
// $val is the forbidden string
if ($title == $val)
{
$title = append_increasing_number($title);
$title = seo_titleinurl_generate($title, $forbidden, $table, $field);
}
}
}
return $title;
}
/**
* Function that appends an increasing number to a string, for example "peter" becomes "peter1" and "peter129" becomes "peter130".
* (To improve, this function could be made recursive to deal with numbers over 99999.)
*/
function append_increasing_number($title)
{
##. 1. Find number at end of string.
$last1 = substr($title, strlen($title)-1, 1);
$last2 = substr($title, strlen($title)-2, 2);
$last3 = substr($title, strlen($title)-3, 3);
$last4 = substr($title, strlen($title)-4, 4);
$last5 = substr($title, strlen($title)-5, 5); // up to 5 numbers (ie. 99999)
if (is_numeric($last5))
{
$last5++; // +1
$title = substr($title, 0, strlen($title)-5) . $last5;
} elseif (is_numeric($last4))
{
$last4++; // +1
$title = substr($title, 0, strlen($title)-4) . $last4;
} elseif (is_numeric($last3))
{
$last3++; // +1
$title = substr($title, 0, strlen($title)-3) . $last3;
} elseif (is_numeric($last2))
{
$last2++; // +1
$title = substr($title, 0, strlen($title)-2) . $last2;
} elseif (is_numeric($last1))
{
$last1++; // +1
$title = substr($title, 0, strlen($title)-1) . $last1;
} else
{
$title = $title . "1"; // append '1'
}
return $title;
}
Speed matters
Speed matters much more than many people still think. I always felt the raw speed of Google was one of the reasons for its success. "Google increased the number of search results to thirty. Traffic and revenue from Google searchers in the experimental group dropped by 20%. [...] we had a similar experience at Amazon.com. In A/B tests, we tried delaying the page in increments of 100 milliseconds and found that even very small delays would result in substantial and costly drops in revenue." I remember a quote by Mark Fletcher about Bloglines: every time they increased the speed, pageviews went way up (people would look at more pages if they're faster).
OK I'm trying this with Amelia.
[youtube http://www.youtube.com/watch?v=7gSZfW4gVhI&rel=1]
Today's IA tip for beginners.
Sites that put "community" in a separate tab most likely think of community as an add-on to their business, not as core to their business.
wtf?: "Diezelfde disclaimer moet dan ook nog getoond worden in een popup als mensen de site verlaten. ( wtf moment twee)"
I have a serious question. Do bloggers get *paid* to put those annoying SNAP preview thingies on their blogs? Or is it just some kind of collective insanity? I ask that because I see them mainly on high traffic blogs.
Dabah Boyd on understanding social networks: "One of the things that I figured out really quickly is that having a
profile did me absolutely no good. I needed to have friends who would
interact with me so that I would get what it was like to experience the
technology as a mediating force. Thus, I have dragged my friends
kicking and screaming into using these tools just so that I could get
it."
Brazilian IA Summit
The first Brazilian IA summit was last weekend - 2 days of lectures and talks. With about 160 participants, IA seems to be doing great in Brazil.
You don't want to mess with Jonathan Schwartz: After being threatened to be sued: "We have one of the largest patent arsenals on the internet, numbering more than 14,000 issued and pending globally. [...] We're going to use our defensive portfolio to respond to Network Appliance, filing a comprehensive reciprocal suit."
I think some people at NA are going to be doing some serious soul searching today.
How to make a little shrine for your home
We made a little shrine on the wall of our house a few weeks ago. It's really nice, it gives the house a great feeling, especially when a candle is burning on it. Here's a picture (it's next to the door):
I got my inspiration for this little shrine in Asia. There are shrines everywhere, and I always thought they were fascinating. And throughout the years, I've picked up lots of little "religious" thingies from various travels that are perfect to put in a shrine.
In Thailand, for example, they sell these little thingies in markets that represent gods and wise men that you can put in your home, for luck and financial success and so on. Here's a picture:
You see shrines everywhere in Asia: in homes, on the streets, on cars, everywhere. Here's a picture of one in India:
Here's a tiny shrine, just a little picture at the foot of a tree:
Back to the shrine we made at home. I took a wooden thing to put flowers in (from Ikea), turned it on its side and attached it to the wall.The stand of the shrine was finished. Easy! I like it if the stand is a little rough, this flower stand had been used for a while, so it was a little dirty. That's good.
Then we went through all the religious thingies that we collected throughout the year, and put them on the shrine. See if you can spot:
- The black madonna from a Hispanic religious shop in New York.
- The lotus flower with the tiny Ganesh in it from India.
- The big Indian god.
- The Thai wise men photographs.
- The golden buddha (ok not really gold).
- A picture of Judas, again from New York.
- The african ancestor statue related to circumcision, from Congo.
The Indian pack of candles is thrown in just because it has a beautiful patina :) Here's the picture:
OK, that's the first part of this shrine ready.
One of the big differences between Asia and Europe in the way they experience religion seems to be this: in Europe, they ask "what do you believe in?". In Asia, that sentence has little meaning. Instead, they ask: "What do you practice?" It's all about what you DO, not what you BELIEVE. Believing is easy (and lazy), doing is better. In many places in Asia, every house, shop and business has a little shrine, and there are usually some flowers or a candle there.
So DOING something means offerings. We had a nice dried flowerthingie from Thailand, so we added that. Some candles. And to top it off, regularly, we burn a little candle in this shrine.
So there you go. Add a shrine to your house. It's easy :)
1 pro of living in Belgium: good cheap schools. "Now, you may think he's merely a
curmudgeon, a tired old teacher who stopped caring long ago. Not true.
Teaching is his life. He says he loves his students, loves education
and learning and watching young minds awaken. Problem is, he is seeing
much less of it. It's a bit like the melting of the polar ice caps.
Sure, there's been alarmist data about it for years, but until you see
it for yourself, the deep visceral dread doesn't really hit home."
So this is why I still respect Techcrunch: when they make a mistake (linking to themselves instead of the sites they discuss, in order to generate pageviews), they admit it and change their ways. Respect!
Indeed: "Play with the interactive doodads in the advertisement a bit and you
can create a not unfunny amalgam of chicken, bull and duck, or donkey,
dolphin and rhinoceros, etc. It’s a cute idea, but really, it betrays a
probably unintentional appropriateness. It’s just perfect that Lotus
Notes, an application whose awkward integration of multiple feature
sets I’ve only ever heard spoken about with violent disgust, promotes
itself as freakish software. As if frightening, cross-species
aberrations of nature are what we’ve all been looking for in an email
and calendaring solution."
Enterprise software is the worst.
A real video.
A "real" video by Jakob (the guy who started Vimeo which together with blip.tv is where the really cool video kids hang out).
It's Hard To Be Brutally Honest from Jakob Lodwick on Vimeo.
I just published the first free report at 290s consulting about information architecture and user experience for the Latin America locale.
Under Florida law, a 16 and 17 year old who have sex are ok (legally), but if they make pictures of it (and don't show anybody) they are prosecuted for child pornography.
Raymond's tumbler: "Join us and panelists from the most disruptive phenomenons changing the way we live. Let's face it . . . if you're not using Twitter, LinkedIn, craigslist, Facebook, digg, Flickr, Laughing Squid, ValleyWag, Google Earth, Bebo, BoingBoing, Skype, WordPress, eBay, Wikipedia, Second Life, 43 Things, Buzznet, Dodgeball, StumbleUpon or, (gasp) YouTube . . . then you just might step off the earth."
Or, alternatively: "... then you just might not be white, male and middle class." Youtube and eBay excepted.
- It kind of works.
- It sucks your soul dry, which in turn limits its effectiveness.
DBSlayer lets you access your database via http and returns JSON. That's supposed to help with scaling. What I don't understand is this: won't accessing your db over http make things slow? Since you have to go over the internets? Compared with hitting your db machine that sits next to you in a rack?
Google widget: click to throw food to the fish.
Yesterday: "Louis Vitale, 75, a Franciscan priest, and Steve Kelly, 58, a Jesuit
priest, were each sentenced today to five months in federal prison for
attempting to deliver a letter opposing the teaching of torture at Fort
Huachuca in Arizona. Both priests were taken directly into jail from
the courtroom after sentencing."
Hey it's the 50th birthday of "satisficing".
I've started a consulting company to more explicitly focus on the stuff I've been doing for the past few years: help startups (or startup-like projects) develop consumer products, and help companies organize global websites ("global information architecture"). The company is called 290s consulting. Go check out the new company blog to find out why, category geeks might like it (and the .com was available, for one).
If you need help tuning or improving your mySQL databases or queries, percona seems a good choice. I haven't worked with them but I like their site and their blogs. 200$/hour for an efficient mySQL performance audit isn't bad. I'll report back if I ever use them.
Social networks and the wireframe as a boundary object.
"The objects that mediate the ties between people" is a powerful concept. On LinkedIn, the "recommendation" is an object that truly connects people, creates lock-in and ads long-term value (more than the network itself, the "friend" connection, for example).
From that post: "Think about the object as the reason why people affiliate with each
specific other and not just anyone. For instance, if the object is a
job, it will connect me to one set of people whereas a date will link
me to a radically different group. This is common sense but
unfortunately it's not included in the image of the network diagram
that most people imagine when they hear the term 'social network.'"
Exactly. Social networks with objects that connect people are stronger, longer lasting and provide more value.
Social science has more to say about these objects: they can connect different domains of expertise. When they do that, they're called boundary objects: objects that are used by different communities, and each community attaches different meaning to the object.
The wireframe (an IA deliverable) is a boundary object, and this power to connect different groups (desingers, coders, business people) through a shared object that has different meanings for each group is (I think) one of the reasons why the practice of information architecture has been such a success.
How exactly boundary objects and social networks that connect people through objects fit together I'm not sure. We'll figure it out :)
Now that's writing with balls: just tell the truth: "We've stopped issuing new Ethnio accounts until November while we make the product amazing instead of promising but buggy."
More on Dewey Decimal and its biases.
Reddit says: "The reason we didn't display more than 100 comments in the past and
still don't display more than 100 now is because of bandwidth and
rendering time (both ours and yours)."
I think that's a mistake. First: bandwidth of a zipped list of a few 100 comments is VERY small: a few K only. Smaller than 1 image often. Second, displaying a long page with comments is fast: here's an example (380+ comments). I am thinking about the same issue (you have to cap it somewhere, no point in displaying 1000 comments on 1 page?), but as long as there are no threads that hit 1000 comments, I think I won't bother. I don't think the reddit solution of only showing "good" comments is right. It breaks the conversation flow.
Lately I've been obsessed with the power of lists and leaderboards. I think smart lists are very, very powerful and this is something that can make or break a website. There's almost a book in there, but I'll keep that one for a rainy day :) Here's a good description by Lucas of the (ex) webJay algorythm, including a discussion on feedback loops (what's popular stays popular because it's on the most popular list).
The "Star Wars" project is alive and well: "The glossary of acronyms provided by the Pentagon to students of
missile defense is a list of abbreviations, like SBX or MIRACL (Mid
Infrared Advanced Chemical Laser). The glossary is typed on letter-size
paper with single-spaced entries and common type size. It is 327 pages
long."
Wrong strategy LinkedIn!
LinkedIn's "platform" will reportedly have to "approve" all apps that get on it, in order to make sure it stays nice and business-y.
Wrong strategy. Having to be approved will keep away developers. I understand the need to keep things clean and business-y, but there are much better ways to do that. Putting in constraints *before* the app even gets in is stupid: it's shooting your own platform in its foot. They should look at the ecosystem as a social system: bad stuff will get in. Instead of heavy guarding at the gates, they should smartly police inside, plus have clever encouragement for the types of apps they want in their system (featured app lists, make sure leaderboards for apps are weighed the right way, etc...). Please LinkedIn, we need Facebook competitors. Don't shoot yourself in the foot taking the "easy" solution to the app-moderation problem.
(Enough mixed methaphors for you?)
I wish Google analytics would do 1 more thing: let me log "events": short text messages with dates, so I can say: "added this feature on this date", or "moved to different host" or "was featured in the NYT", and so on. And then let me display these events against the stats, to easily see where they may have affected traffic. Easy to implement, not too hard to adjust the UI, come on guys! Pulease.
wullfmorgenthaler makes me laugh daily: (and has an RSS feed):
Unfuddle (via Simon) seems like a perfect fit for startups. Project management, bug tracking and source control, and it's got a free version too.
Is there any way that, using jQuery and the Taconite plugin, you can return HTML that's not valid XML? I tried using cdata, but it doesn't seem to work.
The amazing power of sequel on rails.
Achieve your childhood dreams
Great presentation on achieving your childhood dreams. Mine were:- Write a book. Check.
- My face on a stamp. Check.
- Man of the year in Time magazine. Check.
- Nobel prize for peace. (This one might be a bit harder).
- Get interviewed in Humo. (Not there yet, but one day.)
jquery question
I have a very strange jQuery problem: stuff works fine on my local install, but doesn't work on the live install. For example, sign up at poorbuthappy.com, then go to http://poorbuthappy.com/test/ and click the "add friend" button. It should be ajaxy, but it's not (well, kinda, you'll see. The button just greys out, and it should change to a "remove friend" button). The PHP script is reached, but the jQuery "success" function isn't fired. And I have other local Jquery bits that work locally but not live, while others do. It's weird.. any ideas?
When Mozy starts backing up (2 gigs of automatic backup for free!), at some point it says "reticulating splines". What does that mean?
Scancafe sounds pretty good for the photographers among us: you send them your old slides and negatives, and they send back a DVD with scanned images, high quality. For 25$ you can get about 100 slides scanned.
Digg's dead.
When you actually look at the stuff on Digg's homepage (today), it's boooring. Dead, filled with "7 ways to X" and similar SEO spam. Digg's out, as far as I can tell. The Yahoo homepage has a few similar problems, btw. (Specifically, check the URL's. The spammyness jumps out.)
Strč prst skrz krk is a Czech sentence. Sounds like something from a Superman comic (who was that little guy that spoke like that?)
I moved my book website from iabook.com to petervandijck.com/iabook/ to avoid problems with domain name squatters.
My sites on Mediatemple suddenly got REAL slow a few days ago. Luckily they fixed the problem with more hardware, memory and some smart tricks, and the good side of this is that now those sites are really fast. Let's hope they keep it that way.
It has become more and more clear to me that the biggest problem enterprises face in their IT selection is the software vendors, who try to sell monolithic "solution" that almost never delivers as promised. There is an inherent conflict of interest. Regardless of the advantages of a closely controlled environment, it's almost bound to go wrong, because there is so much incentive to make it go wrong. So what's the solution? Loosely coupled services that work well and are adopted bottom up can take care of a large part of an enterprise's software needs. For the bits that do need to be closely controlled, I guess we'll need the SAP's of this world for this for a while longer.
(Damn these cryptic posts with no examples! Oh well, no time.)
Google is pointing search traffic to their own properties, and now Yahoo's following suit.
I wonder why nobody has written about Google poisoning their search results with video links that without fail point back to Youtube, a video company that they own. And now Yahoo is doing the same: adding "useful" results to search, that point back to their own properties. Have the search engines decided that objectivity is no longer required? I always thought getting into the content game (buying Youtube) was a mistake for Google. Don't get me wrong though, I think the evolving "mixed" search results are brilliant, I just think that the search engine that makes an effort to send traffic to properties they don't own will have a much better chance of winning.
(I also think Yahoo needs to totally redo the yahoo.com homepage. It drives a lot of traffic I'm sure, but it's really quite bad. I'll keep that analysis for another post.)
Blip.tv's learning section is great. Really well done, I hadn't seen it before. Makes me want to do some videoblogging again :)