Twitterified taking off: is private beta a mistake?

Somehow, seemingly out of nowhere, Twitterers have started to notice Twitterified. I guess a few positive reviews help.

But would Twitterified have received these positive reviews, had it not moved to open beta? I think not. The service was in closed beta for a couple months, which allowed me to kill a few gremlins I found in the system, but even so it did not attract enough adventurous users for its own good. So, I followed the “old” web 2.0 advice: release the product (early), even if you feel that it is not ready. Of course, I need to keep an eye on all feedback and fix problems as soon as they are reported. I do not think that an open beta can work any other way. Fortunately, due to the tool’s nature, feedback can be found in a very obvious place :)

I consider myself lucky because I already have some experience with scaling applications — thanks to clicdev.com and past experience as a web host — and as a very clueless user interface “victim” I do spend a lot of time thinking about all the ways that an application could confuse me. But even so, that’s no reason to dwell in closed beta country. When I look around, it seems that no matter how talented and how successful web entrepreneurs have been, products launched as closed beta have always had a hard time making it as a mainstream product.

Not that I am thinking of Twitterified’s minuscule critical success as anything mainstream, or that I would dare compare its audience to Pownce! But, interestingly, when I look at Pownce and who its backers are, it doesn’t seem to have achieved the success it seemed poised to. Of course, I am not singling out Pownce. It just happens to be one of the projects I found really interesting.
In conclusion, I do not think that I will every launch anything in closed beta again. It’s just not worth it!

If you enjoyed this post, make sure you subscribe to my RSS feed!


2 More Reasons To Hate Recruiters

RecruiterI read Nick Halstead’s “10 Reasons Why I hate Recruitment Agents” with interest.

I would like to add two more reasons, that I have personally experienced:

1. Asking me to come meet them
This is my favourite one. Nick wrote about agents asking to come meet him. I can see why they try to push for a meeting, this makes competitive sense.
But how about that recruiter who asked me to visit their office so that I could talk to their candidates? What makes them think that, on top of having to deal with their unsolicited phone calls, I would like to maximize the waste of time by driving to their damn office to let them bludgeon me with bogus resumes and run unprepared interviews with deer-in-the-headlights candidates? This beggars reason.

2. They also lie to the job applicants
In case you had any doubt about this, it happens. I’ve been there myself. I went to an interview with a big banking organization; I had only agreed to this interview after several weeks of them chasing me (I was already happily employed) and was supposed to be interviewed for a job as a team lead. It took me a solid 10 minutes of awkward q&a with the company recruiter to realize that they had basically decided to see if they could instead sell me as a junior programmer. Again, I have no idea whatsoever what it is that they were trying to achieve.
So, that’s my experience. Deplorably, it is a situation that has also happened to me when interviewing people, only to realize that they had basically been lied to regarding the position offered.

These two reasons, put together, lead me to think that rather than standard scum, these people are fiercely deluded.

If you enjoyed this post, make sure you subscribe to my RSS feed!


Ext Licensing: Oh, what a mess.

Lego Soap OperaWhen things start smelling “funny” in the open-source community, they tend to go to the dogs with the haste of a drunk marching band.

Today’s drama is brought to you by your friendly ExtJS community. For those of you not familiar with ExtJS, it is a professionally made Javascript library that allows web application developers to create very elaborate desktop-like applications. Jack Slocum originally started this project as a YUI extension. That extension being open-source. He’s then regularly improved it by adding support for different building stones such as JQuery and finally a full-ExtJS solution, reaching ExtJS 2.0. For those of you who have managed not to fall asleep while reading my ramblings, you already know that I’ve used ExtJS myself, for instance when I created the ExtPHP wrapper.

Where this gets complicated is that Jack decided to license the assets under a different license, allowing him to retain all rights. I would like to make very clear that it’s his work and he can do whatever he wants with it. I am just narrating, here. He also added a clause that supposedly completely voids the LGPL license if someone attempted to use his work to create a derivative framework.

After a lot of moaning in the community – to the drum of “that’s a GNU license, man, the whole idea is that you cannot add restrictions!”, he decided to change the LGPL license to a pure GPL one, while retaining a pure commercial license on the side. I’ll bet he thought, at that point, “At least now things are clear.”

Well, that was only the beginning of a real sh*tstorm that threatens to cause a lot of damage to everyone involved, culminating -fleetingly, to be sure- with Sanjiv Jivan’s scathing blog post. Sanjiv, if I am correct, wrote a Ext “compiler” for the GWT library, called GWT-Ext – note that there is another project, apparently endorsed by Jack, that connects ExtJS and GWT. Sanjiv decided that he would fork the last LGPL release of ExtJS and start a new project. You may remember that Jack tried to prevent this by adding a provision in his license agreement.

The crux of Sanjiv’s beef with Jack Slocum is this: Jack created a great product, led people to believe that it was truly open-source when it wasn’t, and doesn’t understand open-source licenses. Jack is greedy. Now, the crux of Jack’s beef with Sanjiv is this: Sanjiv created a nice tool based on hits product, doesn’t understand open-source licenses and, oh, is greedy.

So, our protagonists are not talking to each other. This love story was consumed a long time ago. And potential “corporate” customers, like me, are revisiting the possibility of building their product on top of pure JQuery extensions and living happily ever after.
Now, in a move that would shame any seasoned soap opera writer, a new character enters left stage. And her name is OpenEXT. Contrary to what Dion Almar wrote, it is not a fork: the idea is to create patches that can be dropped on top of ExtJS. Now, I am curious: was Dion right when he posted his own piece on the topic? After all, things seem to change at a meteoric pace around here.

Anyway, stay tuned for even more implausible developments!

If you enjoyed this post, make sure you subscribe to my RSS feed!


SEO: How I killed a highly successful message board with just ONE mistake (and how you can avoid it)

RedirectDo you have any idea how much disregarding basic SEO (Search Engine Optimization) rules can cost you? I have the answer and it’s “a lot“. And take my word for it: I am not an SEO consultant and have nothing to sell, here.

Up until last year, one of my sites was wildly popular: militate.com. Note that after achieving success through word of mouth, it plateaued and never exceeded 300 simultaneous users. It even started a slow descent that would end up in its much smaller audience today.

What was the horrible mistake that lead to that, then?

Simple.

Rule #1 of SEO: when you’re getting good Google juice through heavy pages indexing, do not, under any circumstance, turn your site into a dead links farm.

And that’s exactly what I did: at first people could access the site under a directory labeled /forums; after its first overhaul it became /site; later on I changed the domain name. And finally I changed /site to simply /

This, alone, is no crime. But I never told Google where to find the pages that were being relocated.

As a result, a web site that had steadily grown to more than 600,000 topics suddenly stalled and withered. OK, there are more factors: the site team was losing interest in its main topic, among many. But even when this happens, you can keep a niche site likes this one through sheer popularity. You really have to be a hairless monkey to mess that up.

So, how do you avoid such an unfortunate situation?

In my case, here is what I should have done. This relies entirely on issuing a status ‘301′, which search engines understand to mean “This is my new home. Follow me!”

Solution #1: use mod_rewrite Redirect
This is the usual answer and it works fairly well. Let’s see how we do it for our move from forums/ to site/

1. Create a file called .htaccess at the root of your old directory ( “forums” ) and put the following inside:
RewriteEngine on
RewriteBase /
RewriteRule /forums/(.*) /site/$1 [R=301,L]

Oh, wait: it is now as simple as

RedirectMatch 301 /forums/(.*) /site/$1

2. That’s it. Make sure that .htaccess has the correct access rights.

Well, that was easy.

Now, let’s say that you are looking for a more advanced solution; for instance you change your CMS/Forum Software and what used to be /forums/index.php?act=topic&page=105&p=1 now becomes /site/index.php?act=topic&n=1&p=1 because your old software’s topics started at number 105 but now that you imported them in your new software, they were renumbered and start at 1.

Here is a simple solution, that will also work if you do not have mod_rewrite (sorry, only a php example for now; I may write a Ruby example as well if requested):

1. Create a file called notarealpage.php; again at the root of your old directory:

[?
$directory = preg_replace('#^/forums/#', '', $_SERVER['REDIRECT_URL']); // Remove original directory
$querystr = $_SERVER['REDIRECT_QUERY_STRING'];
if(empty($querystr))
        $qm = '';
else
{
        $qm = '?';
        // Renumber
        $querystr = preg_replace_callback(
                '#&id=([0-9]+)#',
                create_function(
                        '$matches',
                        'return "&n=" . ($matches[1]-104);'),
                $querystr);
}
$newurl = '/site/' . $directory . $qm . $querystr;
print $newurl;
?]

2. In your .htaccess file, simply put:

ErrorDocument 404 /forums/notarealpage.php

Voila! Simple as that.

A note: again, I recommend that you look at the ‘Plain Code’ since the highlighter plug-in translates all html entities. I have to take this plug-in apart someday…

If you enjoyed this post, make sure you subscribe to my RSS feed!


Data Recovery Software