Tutoriel Google Native Client

Par FlUxIuS 2008-12-11 { Catégorie : Google }

Le Web dans votre machine

Depuis quelques temps, nous avons pu prendre connaissance des différentes technologies de Google (GWT, App Engine, Google Apps ...) avec la conférence de l'association GET : "Innovation Web" parrainée par le Groupe SFEIR et l'intervention de nombreux professionnels (SFEIR, ATOS Origin, Revevol et Google).

Cette fois-ci, se pose une problèmatique de taille : La diminution de la latence sur le Web en effectuant les calculs avec son propre processeur.

Dans ce tutoriel, nous allons voir ce qu'est Google Native Client et comment développer des applications NC.

 

Qu'est-ce que Google Native Client ? 

Microsoft sort Silverlight, Adobe son fameux Adobe Air alors Google attaque avec Native Cient.

Le but de Native Client est surtout de diminuer les calculs effectués par les serveurs pour les amener du côté client. En gros, ce principe donnera l'illusion que tout les traitements se sont fait sur le serveur.

Pour ce faire, un script compilé sera injecté dans la machine de l'utilisateur et exécuté dans le navigateur. Ainsi nous pouvons attribuer tous les calculs dans les machines des utilisateurs et le serveur ne s'occupe plus que du transfert de données.

Native Code n'est pas encore un produit finit mais permet déjà aux développeurs de ruser pour économiser en calcul et en transfert niveau serveur.

 

Installation de Native Client

Pour procéder à l'installation, rendez-vous sur la page de téléchargement de Native Client http://code.google.com/p/nativeclient/downloads/list et choisissez la version qui vous correspond (Windows, Linux, Mac OS X).

 Ensuite, décompressez le tout (après le long téléchargement) et allez dans le dossier "nacl/googleclient/native_client". Alors vous taperez la commande suivante en allant dans le dossier "nacl/googleclient/native_client" pour procéder à l'installation  :

- Sous Windows :

cd C:\racine\repertoire\nacl\googleclient\native_client
.\scons.bat --mode=opt-win,nacl

 

- Sous linux et Mac :

cd /racine/repertoire/nacl/googleclient/native_client
./scons --mode=opt-mac,nacl

 

Sachant que les objets seront exécutés par le navigateur, nous allons procéder aussi à l'installation du pluggin pour FireFox par exemple :

- Linux et Mac :

./scons --prebuilt firefox_install
...
Okay to continue? [y/n] y
...

 

- Windows :

.\scons.bat --prebuilt firefox_install
...
Okay to continue? [y/n] y
...

 

Phase de Test

Google nous fournit quelques éléments de test, c'est pour cela que nous allons les utiliser avant de faire notre première application. Assurez-vous avons que le Runtime python est bien installé, sinon téléchargez-le à cette adresse : http://www.python.org/download/.

Rendez-vous vers le dossier nacl/googleclient/native_client/tests/earth et nous allons tester cette application via l'exécutable python (en ligne de commande) :

python run.py


 

"Woooaaaa ça tourne !!!!"

 

Pour faire un simple test avec l'embeded en HTML, exécutez le fichier "earth.html" qui se trouve dans le répertoire nacl/googleclient/native_client/scons-out/nacl/staging.

Dans "earth.html" on voit que l'objet est appelé dans la page et a le même effet.

 

Créer son propre objet

Pour aller plus loin, je vous propose de créer votre propre objet . On va faire quelque chose de simple : Afficher une chaîne de caractères.

Pour commencer, mettez le dossier "/nacl/googleclient/native_client/tools_bin/<mac linux ou windows>/sdk/nacl-sdk/bin/" en variable d'environnement dans PATH pour pouvoir compiler notre code.

- Windows (solution manuelle) :

setx path "%PATH%;C:/racine/nacl/googleclient/native_client/tools_bin/<mac linux ou windows>/sdk/nacl-sdk/bin/"

 

- Pour linux et Mac :

PATH=$PATH:/racine/nacl/googleclient/native_client/tools_bin/<mac linux ou windows>/sdk/nacl-sdk/bin/
export PATH

 

Ecriture de notre application

Bon maintenant que nous avons allégé notre chemin pour le compilateur, nous allons pouvoir taper notre premier code dans "nacl/googleclient/native_client/scons-out/nacl/staging/".

Voilà un exemple de notre premier programme inspiré de ceux de NClient : gday.c

#include <stdio.h>
 
void gday() {
  printf("G'Day Mate!\n");
}
 
int main(int argc, char* argv[]) {
  gday();
  return 0;
}

Si l'on compile ce code normalement, on s'attendrait à avoir un résultat : "G'Day Mate!" en console. Le but sera de reproduire ce même effet, mais à la charge de Native Client.

 

Compilation

Nous allons maintenant créer notre fichier de compilation Make (Pour nous faciliter les inclusions de librairies !) : Makefile

# Copyleft 2008, Sebastien DUDEK.
 
# if nacl target, copy nexe to life.nexe for life.html to launch
ifeq (nacl,$(filter nacl,$(MAKECMDGOALS)))
POST_BUILD = cp $(EXE_NAME) gday.nexe
endif
 
CCFLAGS:=-Wall -Werror
NAME:=gday
FILES:=gday.c
include ../../../common/Makefile.mk
 

Maintenant nous allons procéder à la compilation ! Assurez-vous que le fichier Makefile et gday.c soient dans le même répertoire et que la recherche de  "../../../common/Makefile.mk" fonctionne bien. Tapez la commande suivante en étant dans le répertoire :

make release nacl OPT=-O0

Pour windows devez utiliser win32-make ou autre seulon le compilateur.

 

Exécution

Pour tester si tout marche, nous allons nous faire un petit exécutable en python, qui nous renverra à la console avec un "G'Day Mate!" en résultat.

run.py :

 

import os
import sys
sys.path.append("../../../common")
import nacl_util
 
NEXE = "gday.nexe"
DEFAULT_ARGS = ["-m8"]
 
if __name__ == '__main__':
  nacl_util.LaunchSelLdr(nacl_util.GetExe(NEXE),
                         nacl_util.GetArgs(DEFAULT_ARGS))

 

Pour finir, on exécute :

python run.py

 

Aller plus loin

Je vous invite a regarder les sources des exemples et aussi le site http://nativeclient.googlecode.com où vous pourrez être en contact avec le Group de développeurs de Native Client, sachant que cet article a surtout servi à présenter le concepte de manière plus précise. Vous remarquerez que la source de l'application crée est écrit en C, mais vous pourrez néaumoins programmer en C++ que l'on dispose de différents compilateurs.

 

Source :

 

Powered by SlashOn blog - © Sebastien D. (FlUxIuS)

Debian powered Server Creative Commons License W3c Validation
Cette création est mise à disposition sous un contrat Creative Commons