The outcome of my “propose a tutorial” experiment (plus a few replies to readers’ questions)

Three months ago, I introduced a section in the sidebar of this blog called “propose a tutorial”, which was asking people to (obviously) propose a tutorial, or ask me for any kind of help.

In the (almost) four years that this blog exists, I received many emails asking me for help on several -mostly programming-related- topics. Every one of them received a reply, since (it may sound a little cheesy but bear with me) I really enjoy helping people. As a programmer and an internet user, I have received (and I still do) so much direct and indirect help from people which had nothing to gain from me, so it makes perfect sense for me to do the same when I am able to.

Anyway, back to the topic, apart from providing an easier way for everyone to ask me a question, I thought that the section was going to be a good way to receive ideas for future tutorials as well. This is how it looked until earlier today:

propose a tutorial screenshot

The results

So, here’s what happened. In these three months I received the following:

  • A huge amount of spam. Initially, I left the form without a captcha field and in just a couple of weeks, there were literally hundreds of spam submissions. Thankfully, the very simple captcha solution which I implemented completely solved the problem so far.
  • Several questions, mostly related to help with programming issues, as well as a few feedback comments.
  • No tutorial proposals at all.

It is clear that from the point of view of receiving direct ideas for new tutorials, it absolutely failed. But, on the other hand, the rate of questions I received per month from the form compared to questions I received via email has increased over 50%. And if you think about it, these questions can still potentially provide ideas for tutorials.

So, I didn’t consider the experiment a failure, and I decided to keep the section dropping the “propose a tutorial” part and instead focusing on the help part.

By the way, thanks to anyone who has already used it. I have already replied to everyone who included their email, but there were a few questions without one, which I will reply at the end of this blog post.

To avoid doing this again in the future, I also added a required email field, so I can reply directly to questions, and only post an article if there is something that justifies a complete tutorial.

Update (4th January, 2016): While I was redesigning the sidebar, I decided to remove the widget, since most of the emails I was receiving lately were questions related to tutorials published on the blog. Although I responded to each one of them via email, it would be better if those questions were asked publicly using a comment in each post, since this way they would have the potential to benefit others in the future. To provide some context in this article, here’s how the widget looked like:

need help widget screenshot

Answers to readers’ questions

1) “Hi, how to create a simple typing text in php or in js? Please guide me.”
2) “How to create a blinking cursor using jsp?”

JavaServer Pages (JSP) is a server side language, and works in a similar way to PHP, etc. You still need JavaScript to build what you’re after, and this tutorial will help you both.

3) “I want the image to fade in as well as fade out by clicking on the arrow on the side of the images.”

The question refers to this tutorial.

A quick way to do it using the tutorial’s code is to use jQuery’s fadeIn and faceOut functions, instead of just altering the CSS display property of the elements (try it). You’re going to have to alter the moveLeft and moveRight functions, instruct the currently active element to fade out, and add the rest of the code as a callback to the fadeOut function:

function moveLeft() {
    var activeChild = $('ul#slideshow li.active');

    if(!activeChild.hasClass('first')) {
        $('a.left-arrow').remove();
        $('a.right-arrow').remove();

        activeChild.fadeOut('fast', function() {
            activeChild.prev().fadeIn('fast');
            activeChild.removeClass('active');
            activeChild.prev().addClass('active');
            activeChild.prev().prepend('<');
            activeChild.prev().prepend('>');
            addHoverAndClickEffect();
        });
    }
}
			
function moveRight() {
    var activeChild = $('ul#slideshow li.active');

    if(!activeChild.hasClass('last')) {
        $('a.left-arrow').remove();
        $('a.right-arrow').remove();

        activeChild.fadeOut('fast', function() {
            activeChild.next().fadeIn('fast');
            activeChild.removeClass('active');
            activeChild.next().addClass('active');
            activeChild.next().prepend('<');
            activeChild.next().prepend('>');
            addHoverAndClickEffect();
        });
    }
}

Photo by .ellz.