“Ye, people, hear my story”

An English post, for English people. My blogging frequency goes up another notch and I’m quicly approaching the 3 blogs a year border!

But enough about my blogging rituals. As some of you guys, my frequent visitors, might know, the National Novel Writing Month. The idea is fairly simple: write a 50000 words novel in less than one month. An easy challenge indeed; how hard can it be to write a fifty thousands word story?

Since last year, I only heard about it when it was half over, I decided to give it a try. Since I had completely forgotten about the weird contest, I heard the deadline started yesterday… yesterday. In other words, I’m starting on this in the purest form possible: without a storyline in my mind nor a letter on paper.

The only way to keep myself motivated to do this is to proclaim my victory here now. This way, if I succeed, nothing happens. But when I fail, I will fail you guys, my worthy visitors.

But do not dispair, I will finish this novel before the 30th of this month. I’ve blogged, therefor I will succeed. Bring it on, Novel! I can take you!

Gmail: Langezame verbinding

Annonieme bronnen melden dat Google een dezer dagen zijn eigen ADSL lijn zal uitbrengen. Het zou hier gaan over een erg goedkope verbinding om ook de minder bedeelden ter samenleving op het internet te krijgen. Google heeft zelfs al een naam voor zijn ADSL assortiment: de Langezame (reg. trademark) verbinding. Google heeft zijn bekende mail dienst GMail in ieder geval al uitgerust met sluikreclame (klik voor meer detail):

Thijs’ guide to UTF8

The Thijs way!
This might not be the best way, but it does work like a charm!

First of all: make sure your document is written in UTF8. This will make sure that all forms you submit (yes, even in xmlHttpRequest calls) will be encoded in UTF8.

Second: make sure that your database connection is using UTF8 aswell! Using UTF8 as charset in your fields and tables is one thing, you have to make sure that your connection is using UTF8 aswell! You can change the default charset in your mysql configuration files, but the easiest way to make sure you are using UTF8 is actually telling your connection to use UTF8.
mysql_connect (DB_SERVER, DB_USER, DB_PASS);
mysql_select_db (DB_DATABASE);
mysql_query ("SET NAMES utf8");

This way you will lose those ugly non-utf8 characters in your database.

Now let’s take a look at the xmlHttpRequest. This is fairly simple: what do you want to do? Submit a form ofcourse. What do we have to take in mind? & and = are special characters, so we can’t use those in the form. A simple escape in javascript should take care of that.

The html:
<textarea id="myfield">Some data</textarea>
<button onclick="submitForm();">Submit</button>

The javascript (function submitForm()):
// Only escape the form field
var myfield = encodeURIComponent(document.getElementById('myfield').value);
var req= getXmlHttpRequest (); // Use your own function here..
req.open ('post', 'index.php', true);
req.setRequestHeader("Method", "POST index.php HTTP/1.1");
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.send ('myfield='+myfield);

How to receive it in PHP:
// Just remove the special url chars
$myfield = rawurldecode ($_POST['myfield']);

And that’s it really. Since your document is in UTF8 and your form fields are encoded in UTF8, the only thing you have to keep in mind is the “split symbols”. No need to encode or decode anything.

Generating a tree from MySQL

A few days ago I was working on a navigation tree. The basic idea is simple: every navigation item is part of another navigation item or the root item.

Seems like a simple parent-child relation, so I made a MySQL table to store everything in. Every record has a parent_id and, ofcourse, an unique id. I wanted to load the data in a multi dimensional associated array in PHP, so that I could easily include them in my HTML templates (using recursive functions).

The general aproach for these kinds of data is recursive functions, but this leads to a huge amount of overhead and a lot of useless loops. That’s why I decided to take another approach, using references.

The basic idea is simple: for every parent you create, you write a reference to this parents’ children array in a seperate array.

Take in mind that, in order to use this approach, you need to sort your data on the depth level! That means you will have to store the level of a child (= count the parent, grandparent, …) in your table. Order your data ascending on depth level, and you should be alright. If you dont do this, the script will try to add records to unexisting parents.

You can find my example script here.