Blog posts tagged "articles"

I've recently started using Entrecard. Entrecard is a service that helps you to advertise your blog in an easy, fun way. And let me tell you, when I say easy, I mean easy.

To advertise your blog, all you have to do is find another blog who also uses Entrecard, click on their "widget", thus "dropping your card". Then, both you and the person upon whose widget you just dropped your card get an Entrecard Credit (ec). These ecs can be spent upon buying advertising on other sites, buying real things from the shop and much more.

And really, it's fast. I signed up for Entrecard, put the widget upon my site, and five hours later five people had already dropped their cards.

There's a good tutorial about using Entrecard productively on CK Marketing called How to use Entrecard to Grow your Blog, and let me tell you, it's really useful. Go read it. Nao.

One more thing before this post is over. If you want a whole ton of drops, you can sign up for U Drop / I Follow. It's an interesting service where you get a drop everyday and a link on a webpage that recieves tons of hits everyday. I you want tons of EntreCards, joining this would be a good idea.

Okay, okay, one last thing. If you decide to sign up with Entrecard, you can post your site's address here, if you like, and I'll drop you a card. 8D

Hatkirby on September 3rd, 2008 at 12:30:07pm
πŸ‘ 3 πŸ‘Ž

I used to have these RSS feeds up on my Bookmarks Toolbar. Every five minutes or so, I'd scan through them, checking to see if there were any new updates. Most of the time, there weren't.

This became very tiring. I spent quite a lot of time everyday just checking my RSS feeds. Wasn't there an easier way to do this?

And then I found Google Reader. It's amazing. You can subscribe to feeds, categorize them, view short summaries, the works. I've sorted my feeds into "A-List", "Friend's Blogs" (which ironically includes Four Island), "Comments" (comment feeds), "Linux" and "Other".

Now, you may be asking, how does this increase productivity? What am I getting out of Google Reader? It may seem like I'm only getting a little more productivity because now all of my feeds are in one place. But, no, there's more.

Soon enough, I found the Google Reader Watcher Firefox plugin. It sits in your status bar, checking Google Reader every five minutes (this is adjustable). If it finds any new feeds, it announces this fact and puts a number in your status bar (the number of new feed items). When you hover over this number, it shows you the feeds the new items come from. All you have to do is click on the number and you get swished off to Google Reader.

So there you are. No more constant checking of RSS feeds. Now, you're instantly (or, at least, within 5 minutes) notified of any new items in your feed list. And, I've noticed my productivity go much higher because of all the time I've gained by not checking RSS feeds every five minutes. Now, the plugin does that for me.

Hatkirby on June 25th, 2008 at 10:30:03pm
πŸ‘ 5 πŸ‘Ž

I dreamed up a new Four Island project a couple of days ago called InstaDisc. It's amazing, I think. I'm going insane over it, I need to do it.

Basically, it's a way to find out about things on the internet like new posts on a blog, new comments on a blog, new posts on a fourm, in a quick and easy manner.

For more information, please visit its project site. Please especially visit the description of the conception of the idea, and most importantly, the Specification.

Please feel free to comment here about InstaDisc. In fact, I encourage you to. Please, do. I'm really excited about InstaDisc and I want to know what other people think about it. For instance, if you have any ideas on how I could improve the specification, please comment. If you want any features in InstaDisc, comment and add a ticket. Please give me feedback as I'm, as stated previously, very excited about this project.

And please, dear goodness, don't let me procrastinate.

Hatkirby on June 23rd, 2008 at 10:30:04pm
πŸ‘ 3 πŸ‘Ž

I'm posting this because I often find myself sitting at my computer thinking either, "There's nothing to do, I think I'll just write a blog post." or "There are a whole ton of things I should be doing now but I just can't be bothered. I think I'll do a blog post." and end up sitting, staring at my Admin Panel for minutes on end, trying to think up a good idea for a blog post.

If this happens to you too, why not try out this out?<!--more-->

  1. First things first. Open up that Admin Panel, get to your Blog-Post-Writing-Station. If you don't even bother going to your panel, you won't have the motivation to write a post.
  2. Don't try to write the post's title first. I've made that mistake many a time, and it's much easier writing a title after there's some content for you to title.
  3. Think, what is my blog about? Why do people want to read my blog? What can I offer them that no one else can? People come to your blog because they want something. What is it? Laughter? Debates? Tutorials? Build on that.
  4. Does your blog have a theme? Or is it just random nonsense? If your blog is random nonsense it's a little harder to find something to post about, but don't worry. The blogger always prevails.
  5. What interests you? You're blog is your vent, talk about what you like on it. (However, remember that blogs and the internet in general is not really a place to talk about inappropriate things such as creation of children)
  6. Go read your favorite blogs and see what makes them so good. Any content of theirs that you can build upon? (And Pingback them for? 8D)
  7. If all else fails, a 101 posting ideas list never fails to amaze. Try it out, you may be surprised of what you haven't thought of yet.
  8. From the same place as the 101 posting ideas, we have the Visitor Grid, another great way to come up with ideas for your blog

I hope that I've just fulfilled the reason I posted this in the first place: To write a good post.

Hatkirby on June 19th, 2008 at 10:30:03pm
πŸ‘ 0 πŸ‘Ž

This is an age-old PHP argument: Is using $_REQUEST dangerous?

For those not in the know, $REQUEST is a combination of $COOKIE, $POST and $GET. If you try to access $REQUEST['para'], it will first attempt to retrieve $COOKIE['para'], then $POST['para'] and finally $GET['para']. This has led many people to believe that $_REQUEST is very dangerous to use because cookies can be easily edited by the client. However, this is not so.

Cookies can be easily edited by the client, true. But so can query strings ($GET) and the Request Body ($POST). $_REQUEST requires the same amount of XSS-proofing as the others do.

The only problem I see with $REQUEST is that using it doesn't specify whether you are using $COOKIE, $GET or $POST. It would be too ambiguous for me and that's why I leave it be.

Hatkirby on June 18th, 2008 at 10:30:07pm
πŸ‘ 2 πŸ‘Ž

Recently, I read an article on ProBlogger about the difference(s) between Twitter and Plurk.

I started using Twitter about a year ago, and stopped a few months ago, because it was boring me. However, when I read that above article, I had to have a try at Plurk.

Plurk is already a whole lot more fun than Twitter. As the article on ProBlogger shows, Plurk runs more like a fourm. You Plurk something, and people can Plurk replies to it which show when you click on the original Plurk. You can also see people you've friended's Plurks on your timeline.

With Twitter, the only way for people to reply to tweets are for them to send you a private tweet that A: Doesn't have any connection to the original tweet, and B: Only you can see it.

Because of this, I've decided I like Plurk. I've been using it recently, and as I've said above, it's fun. Have a look at it. Why not even sign up and give me a plurk? Come on, it'll be fun. Please?

Hatkirby on June 17th, 2008 at 10:30:04pm
πŸ‘ 5 πŸ‘Ž

....because it drove me insane when I was writing the new Four Island. There didn't appear to be any information on it anywhere. Or at least, any complete information.

Finally, however, I found the Pingback Specification, which, at the bottom of the page, includes a nice little step-through of Pingback at work.

To summarize, there are two parts of the Pingback process. The server and the client. The client sends Pingbacks and the server receives them.

When writing a blog post, the client should scan it for external links and, if any are found, attempt to read the pages they link to. If they contain a <LINK REL="pingback" HREF="...."> tag, then that means that the page in question supports pingback. So, if one is found, the client uses XML-RPC to connect to the server URL specified in the HREF attribute of the tag mentioned above. Then, it calls the method pingback.ping with two parameters, the first being the URL of the local post, the second being the URL of the post being linked to. From there, it's the server's job.

When the server receives the Pingback, it checks to see the both URLs actually exist and that the linking blog post actually links to the second URL. If it does, the server adds a comment to the blog post in question saying that it's been linked to and providing a link to the linking blog post.

Ok, that probably sounded complicated. It is, a little. So, that's why we're going to do this step by step, starting with the client. Let's examine the specification process again:

  1. First, the client scans the post being submitted for external links.

We can accomplish this with a simple screen scraper which is a script that combs through an HTML page and picks up useful information. We'll be using a simple one to pick up all of the links, and then to sift out the ones that aren't external: (Note that I am assuming that the contents of the post are located in $postText)

preg_match_all('|<a\s[^>]*href="([^"]+)"|i',
        $postText,
        $matches);

foreach ($matches[1] as $link)
{
  if ($all_links[$link])
  {
    continue;
  }

  $all_links[$link] = true;

  if (preg_match('/^https{0,1}:/i', $link))
  {
    // We've got an external link!
  }
}
  1. Then, the client attempts to download any links it finds.

This is easy as well. For this I'll be using cURL. Note that this code goes in place of the comment // We've got an external link!.

$c = curl_init();
curl_setopt($c, CURLOPT_URL, $link);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_HEADER, false);
$page_data = curl_exec($c);
curl_close($c);
  1. If they contain a <LINK REL="pingback" HREF="...."> tag, then that means that the page in question supports pingback.

Checking for the tag is again, easy. We do it with a simple regular expression:

if (preg_match('/<LINK REL="pingback" HREF="([^"]+)">/i',
        $page_data,
        $server))
{
  // It has the <LINK> tag!
}
  1. Finally, the client sends an XML-RPC request to the server located in the tag.

For this, we need XML-RPC for PHP. It's a very easy to use XML-RPC library. Somewhere in your page, you need to include it's client libraries (in lib/xmlrpc.inc). When that's done, we have our client-side Pingback code:

$client = new xmlrpc_client($server[1]);
$msg = new xmlrpcmsg("pingback.ping", array(
        new xmlrpcval(PERMALINK, 'string'),
        new xmlrpcval($link, 'string')));
$client->send($msg);

Make sure to replace PERMALINK with some method of generating the URL of the current post.

That's the client-side part of Pingback, the sending side. Now for the server side.

Before we begin, we have to remember that the client finds the server by looking for a tag in the blog post's page header. You should include this now into your global header file:

<LINK REL="pingback" HREF="http://yourdomain.com/xmlrpc.php">

Now it's time to make that xmlrpc.php.

  1. The server has to be able to receive XML-RPC requests. Because of this, it needs to include XML-RPC for PHP's server-side library (lib/xmlrpcs.inc) as well as the client-side. Then, it needs to define the pingback.ping method.
$s = new xmlrpc_server(array(
        "pingback.ping" => array("function" => "ping")));

function ping($xmlrpcmsg)
{

}
  1. The server then needs to verify that both URLs actually exist.

How to implement this part is up to you as I'm not writing your entire blog, but the code to extract the URLs passed as arguments to the pingback.ping method is as follows:

$from = $xmlrpcmsg->getParam(0)->scalarVal();
$to = $xmlrpcmsg->getParam(1)->scalarVal();
  1. Finally, the server posts a comment to the blog post in question notifying people that someone has sent it a pingback.

Once again, this is mostly up to you as I don't know the specifics of your blog. However, when the comment has been successfully added, the XML-RPC server needs to return with a response to the client:

return new xmlrpcresp(new xmlrpcval(
        "YAY! Your Pingback has been registered!", "string"));

YAY! You're Pingback implementation is nearly done! There's only a little bit left now. With the server, it has to response with an appropriate error if there's some problem such as the source URL not existing. Here's a list of them:

  • From doesn't actually link to To:
return new xmlrpcresp(0, 17,
        "Source uri does have link to target uri");
  • To URL doesn't exist:
return new xmlrpcresp(0, 32,
        "Target uri does not exist");
  • To URL doesn't support pingback:
return new xmlrpcresp(0, 33,
        "Target uri cannot be used as target");

I really hope someone finds this tutorial useful because when I wanted to implement Pingback support on my blog, as I said before, it was very difficult to find any good information about it.

EDIT: Wow. One of the most popular posts on the site and it was posted, of all days, June 17th. Very strange.

Hatkirby on June 16th, 2008 at 10:30:02pm
πŸ‘ 5 πŸ‘Ž

You may know this already, but I just want to post a quick tip on how to create a custom sidebar in Firefox. The novelty of it is that you use any old webpage and it stays there regardless of the tab you are on.

As an example, I will be showing you how to add the Four Island Yaplet channel to your sidebar, but if you have your own webpage assembled, you can skip this paragraph. First, open Yaplet. The URL is http://go.yaplet.com/?url=http://www.fourisland.com. In the top right hand corner, there is an image of two windows, one on the other. Click that to open Yaplet in a pop-up window.

Now, bookmark the page. This can be done by Ctrl-D, or, if you are using 3b5, the star in the top-right hand corner. Go to bookmark properties and edit the bookmark you just made. There will be a checkbox saying "Open this in the sidebar". Click that.

Yay, you're done! Now, whenever you open that bookmark, it will open as a sidebar. This is very useful, especially with Yaplet, because it means you don't have to be on Four Island to use it's Yaplet channel as it spreads through all tabs.

Hatkirby on May 25th, 2008 at 10:30:03pm
πŸ‘ 9 πŸ‘Ž

Recently, I came upon a web servive entitled reCAPTCHA. reCAPTCHA is a CAPTCHA system. For those who don't know what CAPTCHA is (shame), CAPTCHA is a method of preventing bot spam on your website. A picture is generated with one or two distorted words on it. A user doing whatever it is you want to protect must type in the words (s)he sees to be allowed to submit his/her comment/whatever.

Many CAPTCHAs annoy people. It seems that all they do is obstruct and prolong the time taken to do something. But reCAPTCHA is different.

reCAPTCHA doesn't just help stop comment span on your website. It helps digitize books. reCAPTCHA sees CAPTCHAs as a way of harnessing human power into doing something useful that cannot be done by a bot. This way, you are not only verifying that you are not a bot when you fill out a CAPTCHA, you are also contributing to a cause.

The people at reCAPTCHA have scanned many books and attempted to convert the scanned pictures into words with OCR software. OCR software cannot always get all of the words, so the words that the OCR doesn't understand are send to be used in a reCAPTCHA. reCAPTCHA then generates a picture with one word that is known and another word that isn't known. The reCAPTCHA assumes that if one of the words are correct, the other one should be as well.

reCAPTCHA can be used everywhere. They've exported their API to many platforms and written plugins for many web applications. For some of these and some better explained information, please visit the reCAPTCHA website at http://recaptcha.org.

I would also just like to mention that the website has a page with a demo reCAPTCHA that you can use to digitize books without verifying anything. It's at http://recaptcha.net/learnmore.html and it's really addicting.

Hatkirby on May 22nd, 2008 at 10:30:04pm
πŸ‘ 8 πŸ‘Ž

You should know that I use Ubuntu Linux. Recently, however, I upgraded from 7.10 (Gutsy) to 8.04 (Hardy), which, among other things, replaced Firefox 2 with Firefox 3b5. Of course, I though this to be a good thing because the newest version of any piece of software is normally the best. But I'm not so sure now.

My time with 3b5 started out OK, but this state didn't last long. Soon, Firefox was committing suicide at random times such as in the middle of typing up a very long Fourm post, or simply pressing more than 3 keys on the keyboard at a time. Naturally, these abrupt terminations were very annoying, especially as sometimes, Firefox refused to re-open and I had to restart the computer to get it to start again.

Another problem I had was the gradual slowdown of Firefox. Nearly everyday I had to restart my computer (and I'm talking about a hard shutdown, just finger on the button, nothing to do with the OS) to get Firefox working at a reasonable speed again. These problems started getting very annoying, so I decided I wouldn't take it any more and installed Firefox 2.

Firefox 2 has been working fine for me. With the exception of Firebug, which for some reason won't install, so if I need Firebug I need to use Firefox 3b5's buggy version of Firebug. That can get a little annoying, but for now, it seems as if everything's back to normal. I hope.

So remember, peoples, just because something's newer doesn't mean it's better. Especially if it has the word "Beta" in it.

For the record, I'd just like to say that if I had the choice, I'd do away with Firefox and use Internet Explorer.

Hatkirby on May 17th, 2008 at 10:30:17pm
πŸ‘ 1 πŸ‘Ž