dracoblue.net

What means T_PAAMAYIM_NEKUDOTAYIM?

This is an PHP-Tokenizer error, which just wants to tell you that there are two colons. ;)

In php by DracoBlue @ 10 Mar 2010 | 17 Words

Chain + Group Callbacks for NodeJS

If one develops with Node.JS and wants to use the full event-loop power, you got to use callbacks for everything.

That said, it looks ugly to do that:

posix.rename("/tmp/hello", "/tmp/world").addCallback(function () {
  posix.stat("/etc/passwd").addCallback(function (stats) {
    sys.puts("stats: " + JSON.stringify(stats));
  });
});

The

api advices to use:

posix.rename("/tmp/hello", "/tmp/world").wait();
var stats = posix.stat("/etc/passwd").wait();
sys.puts("stats: " + JSON.stringify(stats));

but this is a problem, too. Why? Because you can't do that too often (just ~10 times) at the same time.

That's why I created two little helper methods:

chain and group.

Continue reading ...

In javascript, node.js, open source by DracoBlue @ 17 Feb 2010 | 503 Words

Linear least squares in Javascript

Today I ran into the problem, that I had a graph full of data points, which obviously did not form a straight line.

There is a method called

Linear least squares to calculate the straight line with least difference to the original data points.

Since I needed the method in javascript, here is what I came up with in the end.

function findLineByLeastSquares(values_x, values_y) {
    var sum_x = 0;
    var sum_y = 0;
    var sum_xy = 0;
    var sum_xx = 0;
    var count = 0;

    /*
     * We'll use those variables for faster read/write access.
     */
    var x = 0;
    var y = 0;
    var values_length = values_x.length;

    if (values_length != values_y.length) {
        throw new Error('The parameters values_x and values_y need to have same size!');
    }

    /*
     * Nothing to do.
     */
    if (values_length === 0) {
        return [ [], [] ];
    }

    /*
     * Calculate the sum for each of the parts necessary.
     */
    for (var v = 0; v < values_length; v++) {
        x = values_x[v];
        y = values_y[v];
        sum_x += x;
        sum_y += y;
        sum_xx += x*x;
        sum_xy += x*y;
        count++;
    }

    /*
     * Calculate m and b for the formular:
     * y = x * m + b
     */
    var m = (count*sum_xy - sum_x*sum_y) / (count*sum_xx - sum_x*sum_x);
    var b = (sum_y/count) - (m*sum_x)/count;

    /*
     * We will make the x and y result line now
     */
    var result_values_x = [];
    var result_values_y = [];

    for (var v = 0; v < values_length; v++) {
        x = values_x[v];
        y = x * m + b;
        result_values_x.push(x);
        result_values_y.push(y);
    }

    return [result_values_x, result_values_y];
}

In algorithm, javascript by DracoBlue @ 13 Feb 2010 | 274 Words

Projects Section cleaned up

On my

projects section I added some new projects.

The projects at "Active Projects" are active in development and even lots of new features will be added.

The new projects section "Maintained Projects" instead is meant to be used for projects, which have no active feature development, but are still maintained in case of version upgrade of the parent project or if a bug is filled.

The projects at "Previous Projects" are projects, which are not developed actively and currently not maintained. They may be revived someday :).

In by DracoBlue @ 31 Jan 2010 | 93 Words

How to use postgres with nodeJS

With NodeJS (built on V8) it's pretty simple to access libraries written in C/C++.

Since NodeJS is 100% non-blocking I/O you'll need to tell your libraries to do the same. Even though libmysql is not yet capable of doing that, you may use postgres for this.

Ryan's node_postgres is a binary binding.

Compiling is easy as usual:

$ node-waf configure build
This may not work if a bug in node-waf is still present. So you get the error: Version mismatch: waf 1.5.9 <> wafadmin 1.5.10. To fix that edit /usr/local/bin/node-waf and change 1.5.9 to 1.5.10.

If you receive the error: The program pk_config could not be found, you'll need to install postgres dev libraries package first. On debian/ubuntu you do that the following way:

$ sudo apt-get install libpq-dev

It may fail to build then with the message: "Build failed", "cxx binding.cc -> binding_1.o". I am currently running into the same issue and will post an update as soon as I got this fixed.

There is also an pure Javascript implementation of the Postgres API available at

postgres-js.

In javascript, node.js by DracoBlue @ 23 Dec 2009 | 195 Words

Page 20 - Page 21 - Page 22