FreeMobile: Priorisations des serveur DegroupTest en itinérance Orange

qos-degroupttestfreemobile Cela faisait un petit moment que je constate des débits complètement pourris sous FreeMobile en itinérance Orange.
Très souvent les gens disent qu'ils n'ont pas de problèmes en montrant leur fameux Test DégroupTest.

Même si je l'ai déjà prouver dans des articles précédents avec des transferts de fichiers, je cherchais quelquechose de visuel
permettant de mettre en evidence la QOS que Free (ou Orange) sur le test DegroupTest.
Et par conséquent qu'il ne faut pas s'y fier.

Logo Freemobile    degrouptest logo

Banc de test:

Depuis un moment je cherchais quelque chose de visuel pour tester les débits entre FreeMobile, et un de mes serveurs.
Et je suis tombé sur la perle: SpeedTest Mini: http://www.speedtest.net/mini.php

Speedtest vous permet dêtre Host en vous fournissant une WebApp installable sur vos serveur.
Il suffit de coller les fichiers sur un de vos espaces Web et le tour est jouer.

J'ai donc monté le SpeedTest sur une de mes VM disponible à l'adresse : http://speed.info16.fr



Cela permet d'avoir un test visuel mais enfin sur NOS serveurs avec une bande passante assurée

Pour mes tests j'ai utiliser un Mobile Samsung Galaxy S2 sous Cyanogen Mod9 (ICS) en partage de connexion Wifi.


Test de débit sur mon serveur http://speed.info16.fr à partir d'une connexion fibre 30Mbits/s


Pour prouver que mon serveur suit au niveau du debit, j'ai lancé le test à partir d'un PC sur mon speed.info16.fr
Ce test à été réalisé à partir d'une connexion entreprise 30Mbits/s symétrique.

ST info16 fibre

Je ne vous raconte pas d'histoire. Le serveur peut facilement encaisser.


Test de débit FreeMobile sur Antenne Free

J'ai la chance d'avoir à coté de chez moi une antenne Free.
Qui est apparue d'ailleurs miraculeusement après un de mes articles sur FreeMobile... (coincidence ou pas on ne le saura jamais)


Test de débit Avec FreeMobile en 3G+ Réseau Free Antenne Free (HSPA+).

APPLICATION DEGROUPTEST






Quasiment le même résultat entre Le test DegroupTest et le test sur mon serveur.
Pas de bridage


Test de débit FreeMobile sur Antenne Orange (itinérance)


Test de débit Avec FreeMobile en 3G+ Réseau Free Antenne Orange (HSPA+).

APPLICATION DEGROUPTEST



SPEED INFO16


On constate cette fois dans ce cas une priorisation sur le serveur de DegroupTest...
Et encore je ne me plaints pas.. 1Mbits/s en réèl c'est honorable...
J'ai déjà vu bien pire...

Par exemple le test 2 est encore plus édifiant:
TEST 2

APPLICATION DEGROUPTEST



SPEED INFO16



On constate en moyenne une baisse de débit entre 70 et 100%
Quelquefois on a même un test DégroupTest très honorable mais une impossibilité de naviguer sur le Web..

J'ai même vu mon site Web indisponible, alors que le Test DT était très bon...

Lorsqu'on est pas en itinérance il semble qu'il n'existe pas ou pratiquement pas de limitation de débit.


Par contre,
on constate bien une priorisation de bande passante sur les serveurs de DegroupTest à partir d'un réseau Free
et d'une Antenne Orange.

Vous pouvez vous amusez à tester, je vais laisser en ligne mon banc de test

Alors connectez vous sur mon serveur et amusez vous, je serai curieux d'avoir les résultats.

http://speed.info16.fr  (flash nécessaire)

Scrumblr : Tableau collaboratif en ligne

srumblr
  scrumblr logo

Scrumblr vous offre la possibilité de créer un tableau blanc collaboratif sous forme de Post-it de toutes les couleurs.
L'application en ligne sur vos serveur offre un environnement graphique simple d'utilisation sans enregistrement préalable.

Plateforme Materielle :



Comme d'habitude, j'ai monté mon prototype sur ma plateforme de virtualisation:

Dedibox Pro HP
Plateforme logicielle hyperviseur:
  • Dom0 Ubuntu 12.04 X86_64 Xen 4.1
Plateforme Virtuelle:

  • DomU Xen Ubuntu 12.04 X86_64 Paravirtualisé
  • 2 vcpus 
  • 512 Mo de Ram
  • HDD 16GB


Installation:

Scrumblr demande quelques prérequis:
redis v2.2.2
node.js >= 0.4.7

En effet scrumblr se base sur redis : Redis (de l'anglais REmote DIctionary Server qui peut-être traduit par « serveur de dictionnaire distant » et jeu de mot avec Redistribute1) est un système de gestion de base de données clef-valeur scalable, très hautes performances, écrit avec le langage de programmation C ANSI et distribué sous licence BSD. Il fait partie de la mouvance NoSQL et vise à fournir les performances les plus élevées possibles.

  • Installation des prérequis
root@antony-linux:/home/antony# apt-get install git-core build-essential

  • Installation de node.js
On télécharge la dernière version de node.js et on la compile
Attention, ethercalc n'est pour l'instant pas compatible avec node.js v9
On utilise la version packagée dans ubuntu 12.04 : nodejs_0.6.12
    root@antony-linux:/home/antony# apt-get install nodejs npm

    root@ubuntu:/# node --version
    v0.6.12
    root@ubuntu:/# npm --version
    1.1.4

  • Installation de redis
On télécharge la version 2.6.4 sur http://redis.io/download

root@ubuntu:/opt#cd /opt
root@ubuntu:/opt# wget http://redis.googlecode.com/files/redis-2.6.4.tar.gz
root@ubuntu:/opt# tar xvfz redis-2.6.4.tar.gz
mv redis-2.6.4 redis
root@ubuntu:/opt# cd /opt/redis/

root@ubuntu:/opt/redis# make

root@ubuntu:/opt/redis# cd src/
root@ubuntu:/opt/redis/src# ./redis-server
[18712] 12 Nov 16:21:00.849 # Warning: no config file specified, using the default config. In order to specify a config file use ./redis-server /path/to/redis.conf
[18712] 12 Nov 16:21:00.850 * Max number of open files set to 10032
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 2.6.4 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in stand alone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 18712
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'

[18712] 12 Nov 16:21:00.851 # Server started, Redis version 2.6.4
[18712] 12 Nov 16:21:00.851 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
[18712] 12 Nov 16:21:00.851 * The server is now ready to accept connections on port 6379

Bon ok redis tourne
Cf Wikipedia: Une des principales caractéristiques de Redis est de conserver l'intégralité des données en RAM. Cela permet d'obtenir d'excellentes performances en évitant les accès disques, particulièrement coûteux.

Lorsque la taille des données est trop importante pour tenir en mémoire, Redis peut également utiliser de la mémoire virtuelle.

Afin d'assurer la conservation des données en cas d'incident — la mémoire vive étant volatile — Redis offre la possibilité de « capturer » l'état de la base dans un fichier. Cette technique ne permettant pas de garantir la conservation des manipulations effectuées entre deux captures, il est également possible de conserver une trace de toutes ces manipulations. En cas d'incident, la base peut être restaurée en les ré-appliquant dans l'ordre.

On va donc modifier la conf pour le rendre persistent:
On modifie le redis.conf
daemonize yes
pidfile /var/run/redis.pid
logfile /var/log/redis.log

port 6379
bind 127.0.0.1
timeout 300

loglevel notice

## Default configuration options
databases 16

save 900 1
save 300 10
save 60 10000

rdbcompression yes
dbfilename dump.rdb

dir /opt/redis/

glueoutputbuf yes


##Persistence
appendonly yes
appendfsync everysec


root@antony-linux:/home/antony# /opt/redis/redis-cli bgrewriteaof

Redis de base ne démarre pas automatiquement... c'est un peu balot.
Il faut créer un  script d'init.
On crée d'abord un user "redis"
root@ubuntu:/etc/init.d# adduser --system --no-create-home --disabled-login --disabled-password --group redis

root@ubuntu:/etc/init.d# chown -R redis /opt/redis

Mon script d'init:

#!/bin/sh

### BEGIN INIT INFO
# Provides: ethercalc
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts ethercalc
# Description: starts ethercalc lite using start-stop-daemon
### END INIT INFO

PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/node/bin"
LOGFILE="/var/log/redis.log"
CONFFILE="/opt/redis/redis.conf"
EPLITE_DIR="/opt/redis/src/redis-server"
USER="redis"
GROUP="redis"
DESC="redis"
NAME="redis"

set -e

. /lib/lsb/init-functions

start() {
echo "Starting $DESC... "

start-stop-daemon --start --chuid "$USER:$GROUP" --background --make-pidfile --pidfile /var/run/$NAME.pid --exec $EPLITE_DIR -- $CONFFILE || true
echo "done"
}

#We need this function to ensure the whole process tree will be killed
killtree() {
local _pid=$1
local _sig=${2-TERM}
for _child in $(ps -o pid --no-headers --ppid ${_pid}); do
killtree ${_child} ${_sig}
done
kill -${_sig} ${_pid}
}

stop() {
echo "Stopping $DESC... "
while test -d /proc/$(cat /var/run/$NAME.pid); do
killtree $(cat /var/run/$NAME.pid) 15
sleep 0.5
done
rm /var/run/$NAME.pid
echo "done"
}

status() {
status_of_proc -p /var/run/$NAME.pid "" "$NAME" && exit 0 || exit $?
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
echo "Usage: $NAME {start|stop|restart|status}" >&2
exit 1
;;
esac

exit 0

root@ubuntu:/etc/init.d# update-rc.d redis defaults
Adding system startup for /etc/init.d/redis ...
/etc/rc0.d/K20redis -> ../init.d/redis
/etc/rc1.d/K20redis -> ../init.d/redis
/etc/rc6.d/K20redis -> ../init.d/redis
/etc/rc2.d/S20redis -> ../init.d/redis
/etc/rc3.d/S20redis -> ../init.d/redis
/etc/rc4.d/S20redis -> ../init.d/redis
/etc/rc5.d/S20redis -> ../init.d/redis



root@ubuntu:/etc/init.d# /etc/init.d/redis start

root@ubuntu:/etc/init.d# ps aux | grep redis
redis 19666 0.3 0.3 34900 1724 ? Ssl 17:05 0:00 /opt/redis/src/redis-server /opt/redis/redis.conf


Une bonne chose de faite.
Redis se lance
 
  • Installation de Scrumblr
On utilse git pour récupérer la dernière version.
root@ubuntu:~# cd /opt/
git clone https://github.com/aliasaria/scrumblr.git

Avant toute chose modifier le package.json ("express": ">2.4.x",)
{
"name": "scrumblr",
"description": "Web-based simulation of a physical agile sprint board that supports real-time collaboration.",
"version": "0.1.0",
"repository": {
"url": "http://github.com/aliasaria/scrumblr"
},
"author": "Ali Asaria",
"main": "server.js",
"directories": {
"lib": "lib/"
},
"engines": {
"node": "0.4.7"
},
"dependencies": {
"async": "0.1.x",
"connect": "1.7.x",
"redis-client": "0.3.x",
"redis": "0.6.x",
"sanitizer": "0.0.x",
"socket.io": "0.8.x",
"simplesets": "1.1.x",
"connect-redis":"1.0.x",
"express": ">2.4.x",
"jade": "0.14.x"
}
}




root@ubuntu:~# cd /opt/scrumblr

root@ubuntu:/opt/scrumblr# npm install
npm http GET https://registry.npmjs.org/redis-client
npm http GET https://registry.npmjs.org/sanitizer
npm http GET https://registry.npmjs.org/express/2.4.5
npm http GET https://registry.npmjs.org/jade
npm http GET https://registry.npmjs.org/simplesets
npm http GET https://registry.npmjs.org/connect
npm http GET https://registry.npmjs.org/connect-redis
npm http GET https://registry.npmjs.org/redis
npm http GET https://registry.npmjs.org/socket.io
npm http GET https://registry.npmjs.org/async
npm http 304 https://registry.npmjs.org/redis-client
npm WARN redis-client@0.3.5 package.json: bugs['web'] should probably be bugs['url']
npm http 304 https://registry.npmjs.org/sanitizer
npm http 304 https://registry.npmjs.org/simplesets
npm http 304 https://registry.npmjs.org/connect
npm http GET https://registry.npmjs.org/connect/-/connect-1.7.3.tgz
npm http 304 https://registry.npmjs.org/connect-redis
npm http GET https://registry.npmjs.org/connect-redis/-/connect-redis-1.0.7.tgz
npm http 304 https://registry.npmjs.org/redis
npm http 200 https://registry.npmjs.org/express/2.4.5
npm http GET https://registry.npmjs.org/redis/-/redis-0.6.7.tgz
npm http GET https://registry.npmjs.org/express/-/express-2.4.5.tgz
npm http 304 https://registry.npmjs.org/socket.io
npm http GET https://registry.npmjs.org/socket.io/-/socket.io-0.8.7.tgz
npm http 304 https://registry.npmjs.org/async
npm http 200 https://registry.npmjs.org/connect/-/connect-1.7.3.tgz
npm http GET https://registry.npmjs.org/async/-/async-0.1.22.tgz
npm http 200 https://registry.npmjs.org/connect-redis/-/connect-redis-1.0.7.tgz
npm http 200 https://registry.npmjs.org/redis/-/redis-0.6.7.tgz
npm http 200 https://registry.npmjs.org/express/-/express-2.4.5.tgz
npm http 200 https://registry.npmjs.org/socket.io/-/socket.io-0.8.7.tgz
npm http 200 https://registry.npmjs.org/jade
npm http 200 https://registry.npmjs.org/async/-/async-0.1.22.tgz
npm http GET https://registry.npmjs.org/jade/-/jade-0.14.2.tgz
npm http 200 https://registry.npmjs.org/jade/-/jade-0.14.2.tgz

npm ERR! Unsupported
npm ERR! Not compatible with your version of node/npm: express@2.4.5
npm ERR! Required: {"node":">= 0.4.1 < 0.5.0"}
npm ERR! Actual: {"npm":"1.1.4","node":"0.6.12"}
npm ERR!
npm ERR! System Linux 3.2.0-32-generic
npm ERR! command "node" "/usr/bin/npm" "install"
npm ERR! cwd /opt/scrumblr
npm ERR! node -v v0.6.12
npm ERR! npm -v 1.1.4
npm ERR! code ENOTSUP
npm ERR! message Unsupported
npm ERR! errno {}
npm http GET https://registry.npmjs.org/socket.io-client/0.8.7
npm http GET https://registry.npmjs.org/policyfile/0.0.4
npm http GET https://registry.npmjs.org/qs
npm http GET https://registry.npmjs.org/mime
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /opt/scrumblr/npm-debug.log
npm not ok
root@ubuntu:/opt/scrumblr# vi package.json ^C
root@ubuntu:/opt/scrumblr# vi README.markdown
root@ubuntu:/opt/scrumblr# vi package.json
root@ubuntu:/opt/scrumblr# npm install
npm http GET https://registry.npmjs.org/express
npm http GET https://registry.npmjs.org/jade
npm http 304 https://registry.npmjs.org/express
npm http 304 https://registry.npmjs.org/jade
npm http GET https://registry.npmjs.org/express/-/express-3.0.2.tgz
npm http 200 https://registry.npmjs.org/express/-/express-3.0.2.tgz
npm http GET https://registry.npmjs.org/range-parser/0.0.4
npm http GET https://registry.npmjs.org/mkdirp/0.3.3
npm http GET https://registry.npmjs.org/cookie/0.0.4
npm http GET https://registry.npmjs.org/crc/0.2.0
npm http GET https://registry.npmjs.org/fresh/0.1.0
npm http GET https://registry.npmjs.org/methods/0.0.1
npm http GET https://registry.npmjs.org/cookie-signature/0.0.1
npm http GET https://registry.npmjs.org/send/0.1.0
npm http GET https://registry.npmjs.org/debug
npm http GET https://registry.npmjs.org/connect/2.6.2
npm http GET https://registry.npmjs.org/commander/0.6.1
npm http 200 https://registry.npmjs.org/cookie/0.0.4
npm http 200 https://registry.npmjs.org/mkdirp/0.3.3
npm http GET https://registry.npmjs.org/cookie/-/cookie-0.0.4.tgz
npm http GET https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.3.tgz
npm http 200 https://registry.npmjs.org/crc/0.2.0
npm http 200 https://registry.npmjs.org/range-parser/0.0.4
npm http GET https://registry.npmjs.org/crc/-/crc-0.2.0.tgz
npm http GET https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz
npm http 200 https://registry.npmjs.org/fresh/0.1.0
npm http GET https://registry.npmjs.org/fresh/-/fresh-0.1.0.tgz
npm http 200 https://registry.npmjs.org/methods/0.0.1
npm http GET https://registry.npmjs.org/methods/-/methods-0.0.1.tgz
npm http 200 https://registry.npmjs.org/cookie-signature/0.0.1
npm http GET https://registry.npmjs.org/cookie-signature/-/cookie-signature-0.0.1.tgz
npm http 200 https://registry.npmjs.org/cookie/-/cookie-0.0.4.tgz
npm http 200 https://registry.npmjs.org/send/0.1.0
npm http 200 https://registry.npmjs.org/debug
npm http GET https://registry.npmjs.org/send/-/send-0.1.0.tgz
npm http GET https://registry.npmjs.org/debug/-/debug-0.7.0.tgz
npm http 200 https://registry.npmjs.org/connect/2.6.2
npm http GET https://registry.npmjs.org/connect/-/connect-2.6.2.tgz
npm http 200 https://registry.npmjs.org/commander/0.6.1
npm http GET https://registry.npmjs.org/commander/-/commander-0.6.1.tgz
npm http 200 https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.3.tgz
npm http 200 https://registry.npmjs.org/crc/-/crc-0.2.0.tgz
npm http 200 https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz
npm http 200 https://registry.npmjs.org/fresh/-/fresh-0.1.0.tgz
npm http 200 https://registry.npmjs.org/methods/-/methods-0.0.1.tgz
npm http 200 https://registry.npmjs.org/cookie-signature/-/cookie-signature-0.0.1.tgz
npm http 200 https://registry.npmjs.org/send/-/send-0.1.0.tgz
npm http 200 https://registry.npmjs.org/debug/-/debug-0.7.0.tgz
npm http 200 https://registry.npmjs.org/connect/-/connect-2.6.2.tgz
npm http 200 https://registry.npmjs.org/commander/-/commander-0.6.1.tgz
npm http GET https://registry.npmjs.org/mime/1.2.6
npm http GET https://registry.npmjs.org/qs/0.5.1
npm http GET https://registry.npmjs.org/formidable/1.0.11
npm http GET https://registry.npmjs.org/bytes/0.1.0
npm http GET https://registry.npmjs.org/pause/0.0.1
npm http 200 https://registry.npmjs.org/pause/0.0.1
npm http GET https://registry.npmjs.org/pause/-/pause-0.0.1.tgz
npm http 200 https://registry.npmjs.org/mime/1.2.6
npm http GET https://registry.npmjs.org/mime/-/mime-1.2.6.tgz
npm http 200 https://registry.npmjs.org/qs/0.5.1
npm http GET https://registry.npmjs.org/qs/-/qs-0.5.1.tgz
npm http 200 https://registry.npmjs.org/formidable/1.0.11
npm http GET https://registry.npmjs.org/formidable/-/formidable-1.0.11.tgz
npm http 200 https://registry.npmjs.org/bytes/0.1.0
npm http GET https://registry.npmjs.org/bytes/-/bytes-0.1.0.tgz
npm http 200 https://registry.npmjs.org/pause/-/pause-0.0.1.tgz
npm http 200 https://registry.npmjs.org/mime/-/mime-1.2.6.tgz
npm http 200 https://registry.npmjs.org/qs/-/qs-0.5.1.tgz
npm http 200 https://registry.npmjs.org/formidable/-/formidable-1.0.11.tgz
npm http 200 https://registry.npmjs.org/bytes/-/bytes-0.1.0.tgz
jade@0.14.2 ./node_modules/jade
express@3.0.2 ./node_modules/express
├── methods@0.0.1
├── fresh@0.1.0
├── cookie-signature@0.0.1
├── range-parser@0.0.4
├── cookie@0.0.4
├── crc@0.2.0
├── commander@0.6.1
├── debug@0.7.0
├── mkdirp@0.3.3
├── send@0.1.0 (mime@1.2.6)
└── connect@2.6.2


On va tenter de lancer Scrumblr

root@ubuntu:/opt/scrumblr# node server.js 80
The "sys" module is now called "util". It should have a similar interface.
Warning: express.createServer() is deprecated, express
applications no longer inherit from http.Server,
please use:

var express = require("express");
var app = express();

info - socket.io started

node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
TypeError: Cannot read property 'url' of undefined
at Function.handle (/opt/scrumblr/node_modules/express/node_modules/connect/lib/proto.js:104:18)
at Server.app (/opt/scrumblr/node_modules/express/node_modules/connect/lib/connect.js:66:31)
at Server.serverListening (/opt/scrumblr/node_modules/socket.io/node_modules/policyfile/lib/server.js:136:16)
at Server.g (events.js:156:14)
at Server.emit (events.js:64:17)
at Array.1 (net.js:753:10)
at EventEmitter._tickCallback (node.js:192:41)


Arghhh error !!!!!!
Bon j'ai passer un bon moment à me gratter la tête et j'ai réussi à trouver la solution.
Je vous l'offre sur un plateau.
Il semblerait que la version de express installé avec ubuntu 12.04 pose des problème.
On va installer express 2.5.9

root@ubuntu:/opt/scrumblr# npm uninstall express
root@ubuntu:/opt/scrumblr# npm install express@2.5.9

On tente de lancer Srumblr

root@ubuntu:/opt/scrumblr# node server.js 80
The "sys" module is now called "util". It should have a similar interface.
info - socket.io started
Youpi ca se lance.


Maintenant on va aussi faire un script pour lancer Scrumblr en tant que daemon au boot du serveur.

On va utiliser le script /opt/scrumblr/forever.sh
Pour cela il faut install le module forever avec npm


root@ubuntu:/opt/scrumblr# npm install forever -g

root@ubuntu:/opt/scrumblr# vi /etc/init.d/scrumblr

#!/bin/sh

### BEGIN INIT INFO
# Provides: Scrumblr
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts Scrumblr
# Description: starts Scrumblr lite using start-stop-daemon
### END INIT INFO

PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/node/bin"
LOGFILE="/var/log/scrumblr.log"
EPLITE_BIN="/opt/scrumblr/forever.sh"
USER="scrumblr"
GROUP="scrumblr"
DESC="scrumblr"
NAME="scrumblr"
PORT="80"

set -e

. /lib/lsb/init-functions

start() {
echo "Starting $DESC... "
$EPLITE_BIN
echo "done"
}


stop() {
echo "Stopping $DESC... "
PIDS=$(pgrep node)
for i in $PIDS;
do
kill -9 $i
done
echo "done"
}

status() {
PIDS=$(pgrep node)
if [ -z "$PID" ]
then
echo "$NAME is running"
else
echo "$NAME is not running"
fi
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart


On le rend executable.
root@ubuntults:/var/log# chmod +x /etc/init.d/scrumblr

On active le script au démmarage:

 root@ubuntu:/opt/scrumblr# update-rc.d scrumblr defaults
Adding system startup for /etc/init.d/scrumblr ...
/etc/rc0.d/K20scrumblr -> ../init.d/scrumblr
/etc/rc1.d/K20scrumblr -> ../init.d/scrumblr
/etc/rc6.d/K20scrumblr -> ../init.d/scrumblr
/etc/rc2.d/S20scrumblr -> ../init.d/scrumblr
/etc/rc3.d/S20scrumblr -> ../init.d/scrumblr
/etc/rc4.d/S20scrumblr -> ../init.d/scrumblr
/etc/rc5.d/S20scrumblr -> ../init.d/scrumblr


root@ubuntults:/var/log# /etc/init.d/scrumblr start

Notre scrumblr est bien lancé

root@ubuntu:/opt/scrumblr# ps aux | grep node
root 3541 0.0 2.6 721084 13412 ? Ssl 12:30 0:00 node /usr/local/bin/forever start -o out.log -e err.log server.js 80
root 3542 0.2 3.7 782720 18608 ? Sl 12:30 0:00 node /opt/scrumblr/server.js 80

L'interface:
Notre node écoute sur le port 80

on arrive donc sur notre board à partir de : http://votre_serveur

scrumblr 1
Ho que c'est joli par contre c'est en Anglais.
Moi j'aime mieux le français.

Il suffit de modifier le fichier: /opt/scrumblr/views/home.jade

Et hop :)

Scrumblr 2

La belle interface, ou vous pouvez créer des notes, des sections, et même coller des gommettes :)

scrumblr3

FreeMobile: Les tests sont ils vraiment fiables ?

Test de débit : pipés ?

Un petit billet flash éclair pour montrer le peu de pertinence que peut nous apporter un test de débit sur les gros acteurs tels que dégroupTest and Co...


Logo Freemobile

Materiel:

  • Mobile Samsung Galaxy S2 sous Cyanogen Mod9 (ICS) en partage de connexion Wifi.

Test de débit avec l'application dégoup Test Sur Android


Test de débit DegroupTest Avec FreeMobile en 3G+ Réseau Orange (HSDPA).

Degroup TEST

Là on aurait envie de se dire, Génial !!!!
J'ai un super débit ca va flyer :)
Mais dans les fait quand on surf, c'est tout lent et tout pourri...

Je faits donc un test de transfert de fichier entre un serveur Web sur un de mes serveur Dédiés

Transfert de fichier HTTP à partir d'un serveur Web Dedibox.

J'ai utilisé mon serveur dédibox, afin d'heberger des fichiers web.

webfile




test debit freemobile reel web

La résultat est sans Appel ....
Un magnifique transfert de fichier à 21,4Kbits/s !!!

Alors que selon dégroupTest on est censé monter à 6393Kbits/s ...

Pour conclure, j'ai bien l'impression que FreeMobiles ( mais a ne doit pas être le seul), optimise leur réseau pour ce genre de tests...

Autrement dit les tests sont pipés... mais ça on le savait déjà :)

Comparaison de quelques Explorateurs de fichiers sous Android

File-Managers-Android
Une fois n'est pas coutume, j'ai décidé dans ce billet de comparer rapidement 4 explorateurs de fichiers disponibles sous Android.
J'en ai essayé pas mal, mais j'ai galéré pour trouver celui qui me va bien.
Si ce billet peut aider certain à choisir leur File Manager sous Android j'en serais heureux.

En regardant sur le Google Play, et en triant par popularité, 4 sortent du lot:

 logo esfm vs     Logo Astro-fm    vs  Logo OIfm   vs  Logo OIfm    


Fonctionnalités


logo esfm Logo Astro-fm Logo OIfm Logo OIfm
Prix
Gratuit
Gratuit Gratuit Gratuit
Popularité
214500
323540
21380
40270

Je vais tester 2 choses:
  1. Les fonctionnalités
  2. Les débit réseaux (cifs)
Je m'attache beaucoup au débit réseau en CIFS, car il m'arrive très souvent de faire des copies de fichiers entre mon NAS et mes terminaux mobiles


Plateforme de test :
Un terminal Mobile


  • Samsung Galaxy S2
  • Cyanogen MOD9
  • Android ICS

Mon NAS (assemblé à la main)

  • CPU Intel Pentium G620 ( dual Core Sandy Bridge 2.6Ghz)
  • Carte Mère : MSI H61I-E35 (Révision B3)
  • RAM: Crucial Ballistix Sport DDR3 2 x 4 Go PC12800
  • Alim: Be Quiet SFX Power - 300W
  • Boitier: Fractal Design Core 1000
  • HDD 2.5'' 80Go WD 5400tpm ( OS)
  • HDD: 3.5'' 2 x 1 To Western Dgital RE2 SATA2 ( déjà en ma possession) DATA
Connectivité:

  • Le NAS est rélié en Gigabit sur mon réseau Local ( débit soutenu 800Mbits/s)
  • Le mobile est relié en Wifi 802.11g (borne linksys WAP 54G)
  • Débit Max constaté en WIFI 25Mbit/s


ES File  Explorer logo esfm

ES File Explorer est un des plus populaire

  • L'interface
interface ES


Interface ES

Interface ES

Remarques & Fonctionnalités:
  • Interface Sobre et simpliste mais rapide
  • Multiselections
  • Recherches
  • Gestion des applications (désinstallation)
  • Intégration de partages LAN CIFS / FTP / BlueTooth...
  • Integration de Dropbox, UbuntuOne, Skydrive ... Mais pas Google Drive !!!
Débits Transfert CIFS

Débit ES

Débit transfert CIFS 16Mbits/s


Astro  File Manager Logo Astro-fm 
Astro est de loin le plus populaire des gestionnaire de fichier sur Android.
Je comprend aisément ce choix, car son interface est de loin la plus aboutie.

  • L'interface
Astro interface
                                                                    










Comme je le disais plus haut l'interface est sans commune mesure avec ses concurents.

Les fonctionnalités sont nombreuses:

  • Interface Sobre et intuitive
  • Multiselections
  • Recherches
  • Gestion des applications (désinstallation)
  • Recherche des partage réseaux en automatique
  • Intégration de partages LAN CIFS / FTP / SFTP
  • Integration de Dropbox, GoogleDrive, (Pas de Skydrive)

Malgré une interface superbe et intuitive j'ai trouvé quelques points négatifs

  • Interface belle mais poussive, pas très rapide
  • Pas de notification de transfert en arriere plan !!!
  • Impossible d'ouvrir une Vidéo en réseau CIFS !!! il la télécharge avant ...


Débits Transfert CIFS



Débit transfert CIFS 11 Mbits/s



Comme je le disais plus haut la fonctionnalité ouvrir avec est bien présente sur
un fichier en LAN CIFS, mais une fois cliqué sur Vidéo, Astro télécharge la vidéo...
Donc inutilisable pour lire des vidéos en direct.
Il existe une version payante à 3€99


OI File Manager Logo OIfm 

OI File manager est moins populaire que les autres, mais reste dans le top 4

  • L'interface
OI Interface



Rien de transcandant dans l'interface de OI

Remarques & Fonctionnalités
  • Interface sobre et efficace
  • Recherche
  • Paramètres peu nombreux
  • Pas de multiselection
  • Pas d'interface partage réseaux !!!!
OI est simple mais ne comporte pas assez de fonctionnalités à mon gout.



File Manager (Rhythm Software)Logo OIfm

FM est l'interface que j'utilisais depuis longtemps sur Android.
Je la trouvais simple, efficace et rapide.

  • L'interface
File Manager Rhythm interface



Remarques & fonctionnalités:

  • Interface Sobre et intuitive
  • Multiselections
  • Recherches
  • Intégration de partages LAN CIFS
  • Integration de Dropbox, GoogleDrive, Skydrive, Box...



Débits Transfert CIFS


File_manager_RS_débit
Débit transfert CIFS 6Mbits/s
Impossible de monter au dessus des 6Mbits/s !!!


Conclusion

Maxi 5 étoiles


logo esfm Logo Astro-fm Logo OIfm Logo OIfm
Interface
****
*****
***
***
Fonctionnalités
****
*****
*
***
Intégration Cloud
****
****

*****
Débit CIFS
*****
****

**
Total /20
17
18
4
13

Pour conclure on vois que mis à part OI, les autres solutions sont très bonnes.
OI n'est pas mauvais, mais au niveau des 3 autres...

Astro
A voir les notes on aurait tendance à conseiller Astro qui à une interface superbe, énormément de fonctionnalités, une bonne intégration au cloud ( même si on aurait aimé skydrive, hubic, ubuntuone en plus)
En effet pour quelqun qui ne veut pas regarder de vidéos en réseau Astro est à mon avis le meilleur choix.
Mais pour moi le problème rédibitoire d'Astro, c'est qu'il à été incapable de lancer une vidéo directement !!!
quand on fait "ouvrir avec" il télécharge la vidéo en arrière plan... donc autrement dit vous n'êtes pas prêt de lire votre média...
Surtout si c'est de la HD à plusieurs GigaOctets...

FM Rhythm Soft
J'utilisais depuis très longtemps File Manager de Rhythm, il était rapide, bien intégré à Android, de bonne fonctionnalité Cloud et réseau.
Mais les tests de débits réseau sont catastrophiques !!!
Impossible de dépasser le 6Mbit/s en transfert et en lecture..
C'est long, très long !!!
Ceci en résulte de gros probleme pour lire les vidéos en direct, puisque le débit n'est pas suffisant pour emplir assez vite le buffer du player vidéo..
Donc cela donne des sacades et des freeze intempestifs de la vidéo.

ES
Pour mon utilisation, ES File Explorer est le plus utile.
Même si son interface ne vaut pas Astro, et qu'il à moins de fonctionnalités, il reste rapide et intuitif.
Et surtout c'est le grand gagnant du réseau.
J'ai vu monter les transfert CIFS en pointe a 20Mbits/s, la lecture en direct d'un flux vidéo ne pose pas de problème.


Les liens pour les installer à partir du Google Play


Installation d'une solution de collaboration Ethercalc: Feuille de calcul collaborative

ethercalc
Je cherchais depuis un moment, un outil collaboratif.
Je cherche toujours des alternatives aux Géants du Web tels que Google ou Microsoft.
Mais force est de constater qu'il n'existe aujourd'hui pas de réèls concurents à ses solutions...

Le traitement de texte collaboratif que j'utilise est Etherpad, mais en ce qui concerne les feuille de calcul collaborative, c'est une autre paire de manche...

Ethercalc est un système de feuille collaborative open source, ce type d'outil  est tellement rare, qu'il mérite un petit billet.

Ethercalc Logo

EtherCalc est un tableur collaboratif en temps réel. Il permet par défaut à un maximum de seize personnes de partager un texte en cours d'élaboration. Les contributions de chacun apparaissent immédiatement sur l'écran de tous les participants et sont signalées par des couleurs différentes. Une fenêtre de messagerie instantanée est également disponible.

Le système ne requiert aucune installation, ni aucune inscription, il suffit d'avoir une connexion internet et un navigateur web. EtherCalc est écrit en JavaScript.

L'application a été lancée le 19 novembre 2008 par David Greenspan, Aaron Iba et J.D. Zamfirescu (ces deux derniers travaillaient auparavant pour Google).

Le 4 décembre 2009, Google rachète AppJet, la société qui possède le logiciel et il est annoncé que cette application collaborative sera proposée sous licence Open Source1.

Le 17 décembre 2009, Google libère les sources d'EtherCalc sous licence Apache v2.

source: Wikipedia.

EtherCalc



Plateforme Materielle :



Comme d'habitude, j'ai monté mon prototype sur ma plateforme de virtualisation:

Dedibox Pro HP
Plateforme logicielle hyperviseur:
  • Dom0 Ubuntu 12.04 X86_64 Xen 4.1
Plateforme Virtuelle:

  • DomU Xen Ubuntu 12.04 X86_64 Paravirtualisé
  • 2 vcpus 
  • 512 Mo de Ram
  • HDD 16GB


Installation:

Pour commencer j'ai mis à jour totalement mon DomU ubuntu 12.04; mon template avait quelques maj de retard :)

  • Mise à niveau du DomU
root@ubuntults:/# apt-get update; apt-get upgrade
root@ubuntults:/# apt-get install linux-headers-server linux-image-server linux-server
root@ubuntults:/# reboot

  • Installation des prérequis
root@antony-linux:/home/antony# apt-get install gzip git-core curl python perl build-essential

  • Installation de node.js
On télécharge la dernière version de node.js et on la compile
Attention, ethercalc n'est pour l'instant pas compatible avec node.js v9
On utilise la version packagée dans ubuntu 12.04 : nodejs_0.6.12
    root@antony-linux:/home/antony# apt-get install nodejs npm

  • Installation de Ethercalc 
On utilse git pour récupérer la dernière version.
root@ubuntu:~# cd /opt/
root@ubuntu:/opt# git clone https://github.com/audreyt/ethercalc.git
Cloning into 'ethercalc'...
remote: Counting objects: 2049, done.
remote: Compressing objects: 100% (1263/1263), done.
remote: Total 2049 (delta 755), reused 1905 (delta 626)
Receiving objects: 100% (2049/2049), 3.03 MiB | 1.73 MiB/s, done.
Resolving deltas: 100% (755/755), done.

On installe ethercalc:

root@ubuntults:/opt/ethercalc# root@ubuntu:/opt/ethercalc# npm i -g ethercalc
npm http GET https://registry.npmjs.org/ethercalc
npm http 200 https://registry.npmjs.org/ethercalc
npm http GET https://registry.npmjs.org/ethercalc/-/ethercalc-0.20121026.162049.tgz
npm http 200 https://registry.npmjs.org/ethercalc/-/ethercalc-0.20121026.162049.tgz
npm http GET https://registry.npmjs.org/redis
npm http GET https://registry.npmjs.org/uuid-pure
npm http GET https://registry.npmjs.org/optimist
npm http GET https://registry.npmjs.org/zappajs
npm http GET https://registry.npmjs.org/hiredis
npm http 200 https://registry.npmjs.org/uuid-pure
npm http GET https://registry.npmjs.org/uuid-pure/-/uuid-pure-1.0.10.tgz
npm http 200 https://registry.npmjs.org/optimist
npm http GET https://registry.npmjs.org/optimist/-/optimist-0.3.5.tgz
npm http 200 https://registry.npmjs.org/uuid-pure/-/uuid-pure-1.0.10.tgz
npm http 200 https://registry.npmjs.org/zappajs
npm http GET https://registry.npmjs.org/zappajs/-/zappajs-0.4.12.tgz
npm http 200 https://registry.npmjs.org/optimist/-/optimist-0.3.5.tgz
npm http 200 https://registry.npmjs.org/hiredis
npm http GET https://registry.npmjs.org/hiredis/-/hiredis-0.1.14.tgz
npm http 200 https://registry.npmjs.org/zappajs/-/zappajs-0.4.12.tgz
npm http 200 https://registry.npmjs.org/hiredis/-/hiredis-0.1.14.tgz
npm http 200 https://registry.npmjs.org/redis
npm http GET https://registry.npmjs.org/redis/-/redis-0.8.1.tgz
npm http 200 https://registry.npmjs.org/redis/-/redis-0.8.1.tgz
npm http GET https://registry.npmjs.org/wordwrap
npm http GET https://registry.npmjs.org/coffeecup/0.3.17
npm http GET https://registry.npmjs.org/coffee-css/0.0.5
npm http GET https://registry.npmjs.org/node-uuid/1.4.0
npm http GET https://registry.npmjs.org/uglify-js/1.3.4
npm http GET https://registry.npmjs.org/express/3.0.0
npm http GET https://registry.npmjs.org/socket.io/0.9.10

> hiredis@0.1.14 preinstall /usr/local/lib/node_modules/ethercalc/node_modules/hiredis
> make || gmake

cd deps/hiredis && make static
make[1]: Entering directory `/usr/local/lib/node_modules/ethercalc/node_modules/hiredis/deps/hiredis'
cc -std=c99 -pedantic -c -O3 -fPIC -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb net.c
npm http 200 https://registry.npmjs.org/wordwrap
npm http GET https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz
npm http 200 https://registry.npmjs.org/coffeecup/0.3.17
npm http GET https://registry.npmjs.org/coffeecup/-/coffeecup-0.3.17.tgz
cc -std=c99 -pedantic -c -O3 -fPIC -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb hiredis.c
npm http 200 https://registry.npmjs.org/coffee-css/0.0.5
npm http GET https://registry.npmjs.org/coffee-css/-/coffee-css-0.0.5.tgz
npm http 200 https://registry.npmjs.org/uglify-js/1.3.4
npm http GET https://registry.npmjs.org/uglify-js/-/uglify-js-1.3.4.tgz
npm http 200 https://registry.npmjs.org/socket.io/0.9.10
npm http 200 https://registry.npmjs.org/express/3.0.0
npm http GET https://registry.npmjs.org/socket.io/-/socket.io-0.9.10.tgz
npm http GET https://registry.npmjs.org/express/-/express-3.0.0.tgz
npm http 200 https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz
npm http 200 https://registry.npmjs.org/node-uuid/1.4.0
npm http GET https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.0.tgz
npm http 200 https://registry.npmjs.org/coffeecup/-/coffeecup-0.3.17.tgz
cc -std=c99 -pedantic -c -O3 -fPIC -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb sds.c
npm http 200 https://registry.npmjs.org/uglify-js/-/uglify-js-1.3.4.tgz
npm http 200 https://registry.npmjs.org/socket.io/-/socket.io-0.9.10.tgz
npm http 200 https://registry.npmjs.org/express/-/express-3.0.0.tgz
cc -std=c99 -pedantic -c -O3 -fPIC -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb async.c
npm http 200 https://registry.npmjs.org/coffee-css/-/coffee-css-0.0.5.tgz
ar rcs libhiredis.a net.o hiredis.o sds.o async.o
npm http 200 https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.0.tgz
make[1]: Leaving directory `/usr/local/lib/node_modules/ethercalc/node_modules/hiredis/deps/hiredis'
node-waf configure build
Setting srcdir to : /usr/local/lib/node_modules/ethercalc/node_modules/hiredis
Setting blddir to : /usr/local/lib/node_modules/ethercalc/node_modules/hiredis/build
Checking for program g++ or c++ : /usr/bin/g++
Checking for program cpp : /usr/bin/cpp
Checking for program ar : /usr/bin/ar
Checking for program ranlib : /usr/bin/ranlib
Checking for g++ : ok
Checking for node path : not found
Checking for node prefix : ok /usr
'configure' finished successfully (0.075s)
Waf: Entering directory `/usr/local/lib/node_modules/ethercalc/node_modules/hiredis/build'
[1/3] cxx: hiredis.cc -> build/Release/hiredis_1.o
[2/3] cxx: reader.cc -> build/Release/reader_1.o
[3/3] cxx_link: build/Release/hiredis_1.o build/Release/reader_1.o -> build/Release/hiredis.node
Waf: Leaving directory `/usr/local/lib/node_modules/ethercalc/node_modules/hiredis/build'
'build' finished successfully (1.526s)
npm http GET https://registry.npmjs.org/underscore
npm http GET https://registry.npmjs.org/coffee-script
npm http GET https://registry.npmjs.org/commander/0.6.1
npm http GET https://registry.npmjs.org/range-parser/0.0.4
npm http GET https://registry.npmjs.org/mkdirp/0.3.3
npm http GET https://registry.npmjs.org/cookie/0.0.4
npm http GET https://registry.npmjs.org/crc/0.2.0
npm http GET https://registry.npmjs.org/fresh/0.1.0
npm http GET https://registry.npmjs.org/methods/0.0.1
npm http GET https://registry.npmjs.org/send/0.1.0
npm http GET https://registry.npmjs.org/debug
npm http GET https://registry.npmjs.org/connect/2.6.0
npm http GET https://registry.npmjs.org/policyfile/0.0.4
npm http GET https://registry.npmjs.org/redis/0.7.2
npm http GET https://registry.npmjs.org/socket.io-client/0.9.10
npm http GET https://registry.npmjs.org/coffee-script
npm http GET https://registry.npmjs.org/optparse/1.0.3
npm http GET https://registry.npmjs.org/uglify-js/1.2.6
npm http GET https://registry.npmjs.org/stylus/0.27.2
npm http 200 https://registry.npmjs.org/mkdirp/0.3.3
npm http GET https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.3.tgz
npm http 200 https://registry.npmjs.org/range-parser/0.0.4
npm http GET https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz
npm http 200 https://registry.npmjs.org/coffee-script
npm http GET https://registry.npmjs.org/coffee-script/-/coffee-script-1.4.0.tgz
npm http 200 https://registry.npmjs.org/commander/0.6.1
npm http GET https://registry.npmjs.org/commander/-/commander-0.6.1.tgz
npm http 200 https://registry.npmjs.org/cookie/0.0.4
npm http GET https://registry.npmjs.org/cookie/-/cookie-0.0.4.tgz
npm http 200 https://registry.npmjs.org/crc/0.2.0
npm http GET https://registry.npmjs.org/crc/-/crc-0.2.0.tgz
npm http 200 https://registry.npmjs.org/fresh/0.1.0
npm http GET https://registry.npmjs.org/fresh/-/fresh-0.1.0.tgz
npm http 200 https://registry.npmjs.org/methods/0.0.1
npm http GET https://registry.npmjs.org/methods/-/methods-0.0.1.tgz
npm http 200 https://registry.npmjs.org/send/0.1.0
npm http GET https://registry.npmjs.org/send/-/send-0.1.0.tgz
npm http 200 https://registry.npmjs.org/policyfile/0.0.4
npm http GET https://registry.npmjs.org/policyfile/-/policyfile-0.0.4.tgz
npm http 200 https://registry.npmjs.org/connect/2.6.0
npm http GET https://registry.npmjs.org/connect/-/connect-2.6.0.tgz
npm http 200 https://registry.npmjs.org/debug
npm http GET https://registry.npmjs.org/debug/-/debug-0.7.0.tgz
npm http 200 https://registry.npmjs.org/underscore
npm http GET https://registry.npmjs.org/underscore/-/underscore-1.4.2.tgz
npm http 200 https://registry.npmjs.org/optparse/1.0.3
npm http GET https://registry.npmjs.org/optparse/-/optparse-1.0.3.tgz
npm http 200 https://registry.npmjs.org/redis/0.7.2
npm http GET https://registry.npmjs.org/redis/-/redis-0.7.2.tgz
npm http 200 https://registry.npmjs.org/socket.io-client/0.9.10
npm http GET https://registry.npmjs.org/socket.io-client/-/socket.io-client-0.9.10.tgz
npm http 200 https://registry.npmjs.org/uglify-js/1.2.6
npm http GET https://registry.npmjs.org/uglify-js/-/uglify-js-1.2.6.tgz
npm http 200 https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.3.tgz
npm http 200 https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz
npm http 200 https://registry.npmjs.org/coffee-script/-/coffee-script-1.4.0.tgz
npm http 200 https://registry.npmjs.org/stylus/0.27.2
npm http GET https://registry.npmjs.org/stylus/-/stylus-0.27.2.tgz
npm http 200 https://registry.npmjs.org/coffee-script
npm http GET https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz
npm http 200 https://registry.npmjs.org/commander/-/commander-0.6.1.tgz
npm http 200 https://registry.npmjs.org/cookie/-/cookie-0.0.4.tgz
npm http 200 https://registry.npmjs.org/crc/-/crc-0.2.0.tgz
npm http 200 https://registry.npmjs.org/fresh/-/fresh-0.1.0.tgz
npm http 200 https://registry.npmjs.org/methods/-/methods-0.0.1.tgz
npm http 200 https://registry.npmjs.org/policyfile/-/policyfile-0.0.4.tgz
npm http 200 https://registry.npmjs.org/send/-/send-0.1.0.tgz
npm http 200 https://registry.npmjs.org/connect/-/connect-2.6.0.tgz
npm http 200 https://registry.npmjs.org/debug/-/debug-0.7.0.tgz
npm http 200 https://registry.npmjs.org/underscore/-/underscore-1.4.2.tgz
npm http 200 https://registry.npmjs.org/optparse/-/optparse-1.0.3.tgz
npm http 200 https://registry.npmjs.org/redis/-/redis-0.7.2.tgz
npm http 200 https://registry.npmjs.org/socket.io-client/-/socket.io-client-0.9.10.tgz
npm http 200 https://registry.npmjs.org/uglify-js/-/uglify-js-1.2.6.tgz
npm http 200 https://registry.npmjs.org/stylus/-/stylus-0.27.2.tgz
npm http 200 https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz
npm http GET https://registry.npmjs.org/mime/1.2.6
npm http GET https://registry.npmjs.org/qs/0.5.1
npm http GET https://registry.npmjs.org/formidable/1.0.11
npm http GET https://registry.npmjs.org/bytes/0.1.0
npm http GET https://registry.npmjs.org/send/0.0.4
npm http GET https://registry.npmjs.org/pause/0.0.1
npm http 200 https://registry.npmjs.org/qs/0.5.1
npm http GET https://registry.npmjs.org/qs/-/qs-0.5.1.tgz
npm http 200 https://registry.npmjs.org/formidable/1.0.11
npm http GET https://registry.npmjs.org/formidable/-/formidable-1.0.11.tgz
npm http 200 https://registry.npmjs.org/mime/1.2.6
npm http GET https://registry.npmjs.org/mime/-/mime-1.2.6.tgz
npm http 200 https://registry.npmjs.org/pause/0.0.1
npm http GET https://registry.npmjs.org/pause/-/pause-0.0.1.tgz
npm http 200 https://registry.npmjs.org/bytes/0.1.0
npm http GET https://registry.npmjs.org/bytes/-/bytes-0.1.0.tgz
npm http 200 https://registry.npmjs.org/send/0.0.4
npm http GET https://registry.npmjs.org/send/-/send-0.0.4.tgz
npm http 200 https://registry.npmjs.org/qs/-/qs-0.5.1.tgz
npm http 200 https://registry.npmjs.org/formidable/-/formidable-1.0.11.tgz
npm http 200 https://registry.npmjs.org/mime/-/mime-1.2.6.tgz
npm http 200 https://registry.npmjs.org/pause/-/pause-0.0.1.tgz
npm http 200 https://registry.npmjs.org/bytes/-/bytes-0.1.0.tgz
npm http 200 https://registry.npmjs.org/send/-/send-0.0.4.tgz
npm http GET https://registry.npmjs.org/mime/1.2.6
npm http 304 https://registry.npmjs.org/mime/1.2.6
npm http GET https://registry.npmjs.org/debug
npm http GET https://registry.npmjs.org/cssom
npm http GET https://registry.npmjs.org/mkdirp
npm http 200 https://registry.npmjs.org/mkdirp
npm http GET https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.4.tgz
npm http 200 https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.4.tgz
npm http 304 https://registry.npmjs.org/debug
npm http 200 https://registry.npmjs.org/cssom
npm http GET https://registry.npmjs.org/cssom/-/cssom-0.2.5.tgz
npm http 200 https://registry.npmjs.org/cssom/-/cssom-0.2.5.tgz
npm http GET https://registry.npmjs.org/uglify-js/1.2.5
npm http GET https://registry.npmjs.org/ws
npm http GET https://registry.npmjs.org/xmlhttprequest/1.4.2
npm http GET https://registry.npmjs.org/active-x-obfuscator/0.0.1
npm http 200 https://registry.npmjs.org/uglify-js/1.2.5
npm http GET https://registry.npmjs.org/uglify-js/-/uglify-js-1.2.5.tgz
npm http 200 https://registry.npmjs.org/xmlhttprequest/1.4.2
npm http GET https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.4.2.tgz
npm http 200 https://registry.npmjs.org/active-x-obfuscator/0.0.1
npm http GET https://registry.npmjs.org/active-x-obfuscator/-/active-x-obfuscator-0.0.1.tgz
npm http 200 https://registry.npmjs.org/ws
npm http GET https://registry.npmjs.org/ws/-/ws-0.4.22.tgz
npm http 200 https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.4.2.tgz
npm http 200 https://registry.npmjs.org/uglify-js/-/uglify-js-1.2.5.tgz
npm http 200 https://registry.npmjs.org/active-x-obfuscator/-/active-x-obfuscator-0.0.1.tgz
npm http 200 https://registry.npmjs.org/ws/-/ws-0.4.22.tgz
npm http GET https://registry.npmjs.org/zeparser/0.0.5
npm http GET https://registry.npmjs.org/commander
npm http GET https://registry.npmjs.org/tinycolor
npm http GET https://registry.npmjs.org/options
npm http 200 https://registry.npmjs.org/zeparser/0.0.5
npm http GET https://registry.npmjs.org/zeparser/-/zeparser-0.0.5.tgz
npm http 200 https://registry.npmjs.org/tinycolor
npm http GET https://registry.npmjs.org/tinycolor/-/tinycolor-0.0.1.tgz
npm http 200 https://registry.npmjs.org/options
npm http GET https://registry.npmjs.org/options/-/options-0.0.3.tgz
npm http 200 https://registry.npmjs.org/zeparser/-/zeparser-0.0.5.tgz
npm http 200 https://registry.npmjs.org/tinycolor/-/tinycolor-0.0.1.tgz
npm http 200 https://registry.npmjs.org/options/-/options-0.0.3.tgz
npm http 200 https://registry.npmjs.org/commander

> ws@0.4.22 install /usr/local/lib/node_modules/ethercalc/node_modules/zappajs/node_modules/socket.io/node_modules/socket.io-client/node_modules/ws
> node install.js

[ws v0.4.22] Attempting to compile blazing fast native extensions.
[ws v0.4.22] Native code compile failed (but the module will still work):
[ws v0.4.22] The native extensions are faster, but not required.
[ws v0.4.22] On Windows, native extensions require Visual Studio and Python.
[ws v0.4.22] On Unix, native extensions require Python, make and a C++ compiler.
[ws v0.4.22] Start npm with --ws:verbose to show compilation output (if any).
/usr/local/bin/ethercalc -> /usr/local/lib/node_modules/ethercalc/bin/ethercalc
ethercalc@0.20121026.162049 /usr/local/lib/node_modules/ethercalc
├── uuid-pure@1.0.10
├── redis@0.8.1
├── optimist@0.3.5 (wordwrap@0.0.2)
├── hiredis@0.1.14
└── zappajs@0.4.12



C'est bien joli, mais déjà on le lance en root ce qui n'est pas jojo et on est obligé de lancer le script à la main...
C'est pas très optimisé...

On crée un user Ethercalc et on donne les droits adéquats.
root@ubuntults:~# useradd ethercalc

root@ubuntults:~# chown -R ethercalc /opt/ethercalc


On crée maintenant un script d'init afin de pouvoir lancer Ethercalc en tant que daemon
Ce script nous permet de lancer ethercalc en tant que ethercalc et aussi de pouvoir la lancer au demmarage.

#!/bin/sh

### BEGIN INIT INFO
# Provides: ethercalc
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts ethercalc
# Description: starts ethercalc lite using start-stop-daemon
### END INIT INFO

PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/node/bin"
LOGFILE="/var/log/ethercalc.log"
EPLITE_DIR="/usr/local/bin/"
EPLITE_BIN="ethercalc"
USER="ethercalc"
GROUP="ethercalc"
DESC="Ethercalc"
NAME="ethercalc"

set -e

. /lib/lsb/init-functions

start() {
echo "Starting $DESC... "

start-stop-daemon --start --chuid "$USER:$GROUP" --background --make-pidfile --pidfile /var/run/$NAME.pid --exec $EPLITE_DIR/$EPLITE_BIN -- $LOGFILE || true
echo "done"
}

#We need this function to ensure the whole process tree will be killed
killtree() {
local _pid=$1
local _sig=${2-TERM}
for _child in $(ps -o pid --no-headers --ppid ${_pid}); do
killtree ${_child} ${_sig}
done
kill -${_sig} ${_pid}
}

stop() {
echo "Stopping $DESC... "
while test -d /proc/$(cat /var/run/$NAME.pid); do
killtree $(cat /var/run/$NAME.pid) 15
sleep 0.5
done
rm /var/run/$NAME.pid
echo "done"
}

status() {
status_of_proc -p /var/run/$NAME.pid "" "ethercalc" && exit 0 || exit $?
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
echo "Usage: $NAME {start|stop|restart|status}" >&2
exit 1
;;
esac

exit 0


On le rend executable.
root@ubuntults:/var/log# chmod +x /etc/init.d/ethercalc

On active le script au démmarage:

 root@ubuntu:/opt/ethercalc# update-rc.d ethercalc defaults
Adding system startup for /etc/init.d/ethercalc ...
/etc/rc0.d/K20ethercalc -> ../init.d/ethercalc
/etc/rc1.d/K20ethercalc -> ../init.d/ethercalc
/etc/rc6.d/K20ethercalc -> ../init.d/ethercalc
/etc/rc2.d/S20ethercalc -> ../init.d/ethercalc
/etc/rc3.d/S20ethercalc -> ../init.d/ethercalc
/etc/rc4.d/S20ethercalc -> ../init.d/ethercalc
/etc/rc5.d/S20ethercalc -> ../init.d/ethercalc


root@ubuntults:/var/log# /etc/init.d/ethercalc start

Notre ethercalc est bien lancé

root@ubuntu:/opt/ethercalc# ps aux | grep ethercalc
1001 12154 1.7 7.1 724976 35712 ? Sl 22:09 0:00 node /usr/local/bin//ethercalc /var/log/ethercalc.log
root 12190 0.0 0.1 8104 924 pts/0 S+ 22:10 0:00 grep --color=auto ethercalc


L'interface:

ethercalc interface web



ethercalc interface web
  • La fonction Graphs

Ethercalc interface web



Ethercalc est un outil simple installer, léger,  et agréable à utiliser.
Bien sur il est bien loin des fonctionnalités de Google Docs ou autres, mais il a le mérite d'exister.
Pour un usage ponctuel il est très souvent suffisant.
Surtout le plus important c'est qu'il est installé sur vos serveurs.

Ethercalc est un moteur, après il faut faire toute l'intégration CMS autour.

Quelques projets existent déjà:



page 1 sur 4 suivante »