dracoblue.net

Hot reload for node.js servers on code change

If you are working with node.JS, you may experience the need to restart the node server as soon as a file has changed.

There are plenty approaches for this field. One is, to parse for all require statements in the code and watch those files then.

I took a different approach, which could be described by this linux command:

$ find . | grep "\.js$"

It searches for all .js files in the folder and restarts the server, as soon as one of those changed. Very easy, but yet powerful.

To use it, just copy:

run_dev_server.js into your server directory.

This script expects your server script to be called run_server.js. If you want to change it, just change the line.

Instead of running your server with

$ node run_server.js

you now start it with:

$ node run_dev_server.js

That's it!

This feature is of course part of the

spludo framework's 1.0-dev version. In spludo, you can use

$ bash run_dev_server.bash

instead of

 $ node run_server.js

to achieve a hot reload on each .js change.

Update 2010/08/27: Wilkerlucio created a version for hot reloading coffee-scripts.

In JavaScript, node.JS, open source by DracoBlue @ 2010-07-04 | 186 Words

Connecting to a VirtualBox Guest Machine

Today I was setting up some test machines running a minimal debian installation.

Since it's not that handy to work always in the virtualbox window, I tried to connect to them by using ssh.

In the debian machine I typed:

$ su
$ apt-get install openssh-server

And tried to connect to the machine. It did not work.

I found plenty instructions how to fix ports and stuff with host-only-networks, but figured out, this is not what I was searching for!

The reason was, that virtualbox's default network mode is NAT.

I changed it to "network bridge". After that a restart of the machine did the trick, my router gave a proper IP to the guest debian.

In VirtualBox, open source by DracoBlue @ 2010-07-02 | 116 Words

Hello World Benchmarks for Nodejs Web Frameworks

Since I am releasing

spludo pretty soon, I wanted to check out how performance is against other web frameworks for node.js.

To keep it fair (and little expressive) I just took the hello world application from each framework and benchmarked those with apache benchmark.

Concurrency Level: 256

ab -n 10000 -c 256 http://spludo.com:8080/

Results:

josi: 4626.37 [#/sec]
expressjs: 3998.17 [#/sec]
(fab): 6588.95 [#/sec]
picard: 4648.41 [#/sec]
[strong]spludo 6780.38 [#/sec][/strong]

Concurrency Level: 1

ab -n 10000 -c 1 http://spludo.com:8080/

Results:

josi: 3012.32 [#/sec]
expressjs: 2744.79 [#/sec]
(fab): 4271.43 [#/sec]
picard: 4755.03 [#/sec]
[strong]spludo: 3866.12 [#/sec][/strong]

The source code for all sample applications may be found at the

public gist post.

The Test PC was a i7-920 Quadcore with HT and 8GB DDR3 RAM and a single node.js instance running.

In JavaScript, Spludo, node.JS by DracoBlue @ 2010-06-14 | 129 Words

Why <!-- beats <![CDATA[ for inline javascript

I guess everyone knows, that using:

<script type="text/javascript">
  myMagicFunction("This & That");
</script>

is pretty bad practice. The issue is, that the & should be escaped and read as & instead.

If you are reading this code with an Ajax-Request and it contains for instance unescaped & character, it will fail to load the xml properly and also fail executing the embedded javascript.

The workaround I see pretty often is the following (even suggested by w3schools:

<script type="text/javascript">
<![CDATA[
  myMagicFunction("This & That");
]]>
</script>

a better way is of course:

<script type="text/javascript">
// <![CDATA[
  myMagicFunction("This & That");
// ]]>
</script>

because it does not break any backwards compatibility to browsers, who do not get the cdata tag when in non xml mode.

This solution has one big problem: This claims the inner content to be included at this point and be escaped automatically. And this valid html will be made visible to search engines.

Since I don't want anyone to count this comments as content for my website I am using the following solution for ages:

<script type="text/javascript">
// <!--
  myMagicFunction("This & That");
// -->
</script>

It works like a charm. If you are still using any of the previous solutions, please consider this solution as a replacement.

In HTML, JavaScript by DracoBlue @ 2010-05-30 | 256 Words

DJson 1.6.2 released

Today I have an important little bugfix release for djson available.

The issue was, that reading a value after an invalid set, breaks the reading. Thus, if you did a djInt on a value, which does not exist, any later dj call does not work. Thanks to

Raphinity for reporting the issue.

Zamaroht reported a strange issue, when setting a value between two append-operations. This was due to a problem with the caching algorithm and has been resolved! Thanks Zamaroht for the report!

Another problem occurred, when you tried to write a string containing " (quotation marks). Those are escaped now properly, too.

These issue are of course fixed with the latest version djson 1.6.2 download.

In DJson, open source, pawn by DracoBlue @ 2010-05-08 | 117 Words

Page 18 - Page 19 - Page 20