Drawing App with Nodejs, Socket.io and Expressjs

This is my first nodejs app created with express.js 4 and socket.io 1.
Download it on GitHub

A demo is to: drawing.francescopantisano.it

The app permit to draw on a map in real time with other people in a specified “room”, so only who know the name of the room can access.

DrawingAppFirstScreen

You can choose to show/hide the write on the map of the other member, with a “layer system” applied on the canvas.
The canvas is managed with the library jcanvas is very useful.

The room are managed with socket.io, the client connected to are managed by a caching system (node-cache) and a linq library node-linq.

If someone enter on the room after that someone have drawn, the system recover all the written and update the last client connected.

All the drawing action where saved on a buffer to server.

DrawingAppSecondScreen

 

Basic version on github => Download it

Nodemcu Light Control using Nodejs SSDP

LightControl con Nodejs SSDP

questo pacchetto ha una parte di script Arduino da poter lanciare su tutte le vostre NodeMcu e una parte applicativa realizzata con nodejs che gestisce le periferiche ed interagisce con loro utilizzando il protocollo SSDP che trovo veramente interessante per l’aspetto iot, evita di utilizzare/conoscere gli ip delle schede, ogni device connessione in rete espone una propria scheda identificativa, tramite le quale potete riconoscerlo e quindi interagirci:

SSDP.setSchemaURL("description.xml"); 
SSDP.setHTTPPort(80); 
SSDP.setName("NodemcuLightOne"); 
SSDP.setSerialNumber("0001"); 
SSDP.setURL("index.html"); 
SSDP.setModelName("nodemcu"); 
SSDP.setModelNumber("0001"); 
SSDP.setDeviceType("upnp:nodemculight"); 
SSDP.begin();

Il client nodejs è in ascolto sulla porta 3000.
Il device nodemcu viene interrogato sulla porta 80.

##NodeMCU
per configurarlo bisogna prima scaricare i driver https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers e poi, per comodita’, abbiamo utilizzato l’ide di Arduino, debitamente onfigurato così come indicato nelle numerose guide on line. Per installare il mio script su nodemcu ho utilizzato Arduino IDE, se avete bisogno di maggiori informazioni contattatemi pure.

##Node.js
va installato su una macchina e messo in ascolto sulla porta 3000, così come indicato nel pacchetto. 

##INSTALLAZIONE per avviare il server bisogna procedere nel seguente modo:

  1. Scaricare e installare la versione idonea di node ed npm: https://nodejs.org/it/download/
  2. installare il framework express tramite il gestore dei pacchetti: npm intall express

è possibile anche configurare tutto tramite npm install, a patto che il file package.json sia aggiornato nelle dipendenze necessarie. a questo punto si potrà avviare il server:

node app.js

Da notare che su sistemi Debian Node viene avviato con nodejs app.js, in quanto node è un altro applicativo presente sui repository.

 

Come configurare NodeJs SSDP

SSDP la cui definizione è Simple Service Discovery Protocol, viene utilizzato per la ricerca dei device connessi nella rete locale, ho utilizzato la libreria node-ssdp-js semplice da installare e da utilizzare. Bisogna definire una firma nei nostri device da poter successivamente “cercare”.

#JAVASCRIPT NODEJS

var Client = require('node-ssdp-js').Client, client = new Client();

client.on('response', function (response) {
    console.log('Response ssdp device:', response);
    var ipNodeMcuLight = response.referrer.address;
    console.log('IP:', ipNodeMcuLight);
});

client.browse('upnp:nodemculight');

#ARDUINO SCRIPT

SSDP.setDeviceType("upnp:nodemculight");

Progetto “LightControl” di Francesco Pantisano realizzato utilizzando come progetto di base “Plant” di Diomede Mazzone con la collaborazione di Fabio Z Tessitore (@FabioZTessitore) che ringrazio per la pazienza avuta a rispondere alle mie domande.

Tag: NodeJS, ExpressJS, HTML 5, client/server, Simple Service Discovery Protocol (SSDP)

Licenza: GPL 3.0 o successive

Nodejs 5.5 installed on Plesk 12 with Centos 6

This morning i change my vps on OVH taken other of series VPS Cloud 2016.
I’have installed plesk 12.5 the latest version, but when i try to install nodejs 5.5 on centos it say:

WARNING: C++ compiler too old, need g++ 4.8 or clang++ 3.4 (CXX=g++)

when i try to ./configure it.

I have searched how to install the newer compiler tools on centos

sudo curl http://linuxsoft.cern.ch/cern/scl/slc6-scl.repo > /etc/yum.repos.d/slc6-scl.repo
sudo rpm –import http://ftp.mirrorservice.org/sites/ftp.scientificlinux.org/linux/scientific/51/i386/RPM-GPG-KEYs/RPM-GPG-KEY-cern
sudo yum install -y devtoolset-3

And if you want to utilize it without set environment variables:

scl enable devtoolset-3 bash

And then you can continue with the install of nodejs with the operation of:

wget http://nodejs.org/dist/node-latest.tar.gz
tar zxvf node-latest.tar.gz
cd node-v5.5.0/   //it may change version.
./configure
make
sudo make install

LINQ on Nodejs With node-linq

In this days that i have some free time on my “drawing realtime app” project, i have added a managment of the object with the linq.

In c# i use even the linq, but in javascript this is the first time that i use it with success.
Because i have tested https://linqjs.codeplex.com/ some some some times ago but with big object is obviously slow, is even “client side”.

But now with nodejs i can use the linq “server side”, i have seen some library but in my opinion the best is node-linq created by the wearefractal.
Is fast, the docs are good (but they can insert more).

For example i have used it for extract all the action taken in a “drawing room”, for the date i have used timestamp:

var arrRoom = new LINQ(registerRoomAction).Where(function(roomAction) { return (roomAction.room == socket.room && roomAction.date > singleClient.lastupdate && roomAction.date < now); }).OrderBy(function(roomAction) {return roomAction.date;}).Select(function(roomAction) {return roomAction.data;}).ToArray();

 

So if you want to exract only an item you can use Single():

var singleClient = new LINQ(clients).Where(function(client) { return (client.username == username); }).Select(function(client) {return client;}).Single();

 

It is very fast and simple, if you use linq on c#, you are no problem to use it.

For some question you can contact me, i respond to you.