- Licence Fondamentale d'Informatique
mercredi 21 août 2013

Connecte une application C# à SQLSERVER en mode connecté


Créer une application C# et le relier a SQLSERVER en mode connecte de ADO.NET pas simple que ça tous d’abord je tiens de vous explique le mode connecté.


Ce mode permet à un client de se connecter à un serveur de base de données et tant que le client ne fermera pas la connexion, la connexion reste ouverte entre le client t le serveur 

Tout d’abord on crée un nouveau projet C# après on crée une nouvelle base de donne et les table nécessaire a partir du visual studio ou en peut travailler sur une base de donnés existe.

Exemple de création d’une application en mode connecté

Etape 1 création d’une base de donnée a partir de dotnet

Aller vers le menu affichage -> explorateur de serveur une nouvel fenêtre vient de s’ouvrir a gauche 

Clic avec le bouton droit sur connexion de donnée un menu s’affiche contient :

Ajouter une connexion si on veut travaillez sur une base de donnée existe déjà 
Créer une nouvelle base de donne SQLSERVER pour une nouvelle base donnée

Click sur créer une nouvelle base de donne SQLSERVER tapez le nom du serveur et le nom de la base donnée exemple tstado puis ok

Click sur le + de connexion de donnée une nouvelle connexion vient de s’ajouter sous le nom : 
nom du post\\ nom du serveur.nom de la base donnée

Click sur + bouton droit sur table et créer une nouvelle table sous le nom CLIENTS
Contient 4 champs :

IDCLIENT (clé primaire) int
NOM varchar(50)
PRENOM varchar(50)
AGE int



Etape 2 créations d’une application Windows 

Aller vers le menu fichier->nouveau->projet ->visual C#->application Windows
Dans la form désigne ajouter un bouton pour on puisse tester notre application 
Click sur le bouton propriété click sur l’icône d’événement puis double click sur l’événement click


Dans le code de la form ajouter a l’entête :

// pour permettre a l’application clients de se connecter au serveur


using System.Data.SqlClient ; 



Dans la procédure d’événement click tapez le code suivant :

On doit déclarer une variable de type sqlconnection pour établir une connexion avec notre base donne :


SqlConnection cnx;
cnx = new SqlConnection("Data Source=.\\\\sqlexpress;Initial Catalog=tstado;Integrated Security=True;Pooling=False");

//le constructeur de la classe sqlconnection prend comme parametre la chaine de connection

/*
pour recuperer cette chaine suivez les etapes suivants ;
boton droit sur le nom de notre connexion dans l’explorateur de serveur 
proproietes puis puis copier la chaine de connection dans le menu propriete
*/

cnx.Open(); // permettre d’ouvrir la connexion


/*pour pouvoir executer une requete sqlon doit declarer un objet de la class sqlcommand */
SqlCommand cmd; 
cmd = new SqlCommand(); //le constructeur ne contient aucun paramètre

cmd.CommandText = "select * from CLIENTS";// on passe la requte sql

/*on definit le type de la commande commandtype.text pour une requete sql */
cmd.CommandType = CommandType .Text ;



cmd.Connection = cnx; // on affecte la command a une connexion


SqlDataReader r; // permet de lire des enregistrements de données



/* on execute la commande en lecture seul et on 
affecte le resultat vers l'objet r */
r = cmd.ExecuteReader();



/*parcourir l’objet r on lecture la boucle s’arrete a la fin du parcour des enregistrements*/

while (r.Read())
{
/* on affect les different colonne de la table a des variable 
en utilisant le casting car r["nom du champ"] retour un objet de class OBJECT*/


int id = (int)r["IDCLIENT"]; 
string nom = (string)r["NOM"];
int age = (int)r["AGE"];

/*afficher les variable qui contient un enregistrement dans un messagebox*/
MessageBox.Show(nom + " " + id.ToString() + " " + age.ToString());
}

//puis on ferme la connexion 

cnx.Close();


la connexion reste ouvert de puis le code cnx.Open(); jusqu'à le code
cnx.Close();

voici le code complet:

CODE:
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Data.SqlClient;
namespace APLCONECTE1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
SqlConnection cnx;
cnx = new SqlConnection("Data Source=.\\\\sqlexpress;Initial Catalog=tstado;Integrated Security=True;Pooling=False");
cnx.Open();
SqlCommand cmd;
cmd = new SqlCommand();
cmd.CommandText = "select * from CLIENTS";
cmd.CommandType = CommandType .Text ;
cmd.Connection = cnx;



SqlDataReader r;
r = cmd.ExecuteReader();

while (r.Read())
{
int id = (int)r["IDCLIENT"];
string nom = (string)r["NOM"];
int age = (int)r["AGE"];

MessageBox.Show(nom + " " + id.ToString() + " " + age.ToString());
}
cnx.Close();
}

samedi 17 août 2013

Man of Steel Symbole dans Illustrator et Photoshop

La semaine dernière, le nouveau trailer de Man of Steel a été libéré et il est tout simplement incroyable. Je me souviens de regarder les films Superman quand j'étais enfant et de voir le reboot du film me ramène à beaucoup de bons souvenirs.Les visuels de ce nouveau film sont aussi vraiment quelque chose, beaucoup plus sombre et plus réaliste que les précédents. Le logo Superman suit cette même esthétique et depuis la première fois visualisation de la remorque je savais qu'il doit faire l'objet d'un tutoriel.

Donc, dans ce tutoriel, nous allons vous montrer comment créer la Superman, Man of Steel logo utilisant Illustrator et Photoshop. Nous allons également utiliser certaines photos pour les textures et l'affiche originale pour référence. L'ensemble du processus prendra de 3-5 heures selon votre rythme. En fin de compte, il sera vraiment amusant de créer et vaut bien le temps passé.

Etape 1

Commençons le symbole dans Illustrator. Avec l' outil Plume (P) commencer à créer le bouclier. Maker vous que vous avez le rouge pour la course avec un bon poids et l'utilisation de coins arrondis.
Man of Steel Symbole dans Illustrator et Photoshop

Etape 2

Maintenant, toujours à l'aide de l'outil Plume, commencez à créer le S. Vous pouvez utiliser le logo réel de référence.
Man of Steel Symbole dans Illustrator et Photoshop

Etape 3

Si vous remarquez, l'homme du logo de l'acier a quelques détails dans le centre, nous allons donc essayer de reproduire ce que l'aide de l'outil Plume. La course ici n'est pas vraiment nécessaire parce que nous allons éditer dans Photoshop plus tard.
Man of Steel Symbole dans Illustrator et Photoshop

Etape 4

Allez à Effet> 3D> Extrue & Bevel options . Pour l' utilisation Angle: -4 º, 0 º, 0 º à 120 º pour la perspective . Changer la profondeur de 35pt.
Man of Steel Symbole dans Illustrator et Photoshop

Etape 5

Retirez les bouchons de la 3D et puis changez la couleur au gris. Aller à Objet> Décomposer . Ensuite, allez àFenêtre> Pathfinder . Sélectionnez Unite pour le mode de forme de sorte que vous avez un objet.
Man of Steel Symbole dans Illustrator et Photoshop

Etape 6

Passons maintenant à Photoshop. Créez un nouveau document. J'utilise 2880x1800 pixels . Pour l'arrière-plan utiliser un dégradé de blanc au centre et noir sur les bords.
Man of Steel Symbole dans Illustrator et Photoshop

Etape 7

Copiez les objets à partir d'Illustrator et les coller dans Photoshop. Il est important de s'assurer que chaque objet a sa propre couche, alors vous aurez un pour l'extrusion 3D, un pour le symbole rouge et 2 couches pour les détails jaunes.
Man of Steel Symbole dans Illustrator et Photoshop

Étape 8

Choisissez un des détails jaunes et aller à Calque> Styles de calque . Sélectionnez Biseau et estampage et utiliser les valeurs ci-dessous.
Man of Steel Symbole dans Illustrator et Photoshop

Etape 9

Sélectionnez Lueur interne et utiliser les valeurs dans l'image ci-dessous.
Man of Steel Symbole dans Illustrator et Photoshop

Etape 10

Dernier point, mais pas moins, sélectionnez Ombre portée . Encore une fois utiliser l'image ci-dessous pour référence.
Man of Steel Symbole dans Illustrator et Photoshop

Etape 11

Vous aurez un effet comme l'image ci-dessous. L'idée des styles de calque était d'ajouter un coup de blanc avec une ombre subtile.
Man of Steel Symbole dans Illustrator et Photoshop

Etape 12

Groupe chaque couche dans un dossier, puis pour chaque dossier ce faire: Allez à Calque> Layer Mask> Reveal All. Avec l' outil Pinceau (B) et une brosse très douce en utilisant le noir, peinture dans les zones indiquées ci-dessous pour masquer certaines parties des détails.
Man of Steel Symbole dans Illustrator et Photoshop

Etape 13

Avec l' outil Pinceau (B) , et en utilisant une brosse dure, peindre un petit détail foncé au centre. Si vous regardez l'original, ils ont une sorte de la même détail. Créons maintenant et régler plus tard dans le tutoriel.
Man of Steel Symbole dans Illustrator et Photoshop

Etape 14

Ajouter une couche au-dessus du symbole rouge, celui qui a le S et le bouclier. Groupe cette nouvelle couche dans un dossier. Avec l' outil Pinceau (B) et une brosse très douce, peindre des zones sombres avecnoir à 20%.
Man of Steel Symbole dans Illustrator et Photoshop

Etape 15

Sélectionnez le calque des symboles rouges et aller à Calque> Style de calque . Commencez par sélectionner Biseau et estampage et utiliser les valeurs ci-dessous.
Man of Steel Symbole dans Illustrator et Photoshop

Etape 16

Sélectionnez Contour et utiliser les valeurs par défaut.
Man of Steel Symbole dans Illustrator et Photoshop

Etape 17

Sélectionnez Ombre interne . L'idée de l'ombre interne est d'augmenter la force des faits saillants.
Man of Steel Symbole dans Illustrator et Photoshop

Etape 18

Maintenant, nous allons ajouter un dégradé radial sur le dessus avec Multipliez pour créer un effet de lumière plus dramatique.
Man of Steel Symbole dans Illustrator et Photoshop

Etape 19

Vous pouvez ajouter plus de couches pour rendre les zones sombres un peu plus fort, mais à la fin de ces étapes, vous aurez probablement quelque chose de similaire à l'image ci-dessous.
Man of Steel Symbole dans Illustrator et Photoshop

Etape 20

Commençons d'ajouter quelques textures. Sélectionnez le calque 3D et aller à Calque> Style de calque> Incrustation couleur . Utilisez jaune pour la couleur. Placez votre texture de métal sur le dessus de cette couche, celle que nous utilisons est une gracieuseté de Shutterstock et il est intitulé Fond en acier de plaque. Salut res texture par R-studio . Après cela, en maintenant les touches Commande (Mac) / Contrôle (PC) , cliquez sur le pouce de la couche de l'objet 3D, qui va créer un rectangle de sélection de la zone 3D.Sélectionnez le calque de texture et le groupe dans un dossier, puis avec le dossier sélectionné aller àCalque> Layer Mask> Reveal Selection . Vous pourrez masquer la couche et faire juste le domaine de la 3D visible. Changez le mode de fusion du dossier se multiplier.
Man of Steel Symbole dans Illustrator et Photoshop

Étape 21

Ajoutez une autre couche et le groupe dans un dossier, répétez le processus de masquage pour s'assurer que tout ce que vous faites sera uniquement visible sur la surface 3D. Changez le mode de fusion du dossier de couleur Dodge , puis avec la couche sélectionner, peindre quelques faits saillants de l' outil Pinceau (B)avec une brosse très douce et blanc à la couleur. Note: la peinture de démarrage avec 30% d'opacité pour ne pas faire trop lumineux.
Man of Steel Symbole dans Illustrator et Photoshop

Etape 22

Répétez la même opération, mais cette fois ça va être de créer les ombres. Utilisez Densité linéaire pour lemode de fusion pour le dossier toutefois. Également utiliser le Lasso Tool (L) pour créer la belle transition dans les côtés 3D (1-4)
Man of Steel Symbole dans Illustrator et Photoshop

Etape 23

Sélectionnez le calque 3D et la couche rouge symbole et les dupliquer. Après que fusionner ces 2 couches en une seule et remplir ce nouveau calque avec du noir. Déplacer la couche vers le bas pour créer un peu d'ombre et aller au Filtre> Atténuation> Flou gaussien . Utilisez 10 pixels pour le rayon , également modifier le mode de fusion pour Multiplier à 80%.
Man of Steel Symbole dans Illustrator et Photoshop

Etape 24

Nous allons importer une nouvelle texture. Cette fois, nous utilisons une autre image de Shutterstock , il est intitulé métal fond par Phiseksit. Utiliser Soft Light pour le mode de fusion.
Man of Steel Symbole dans Illustrator et Photoshop

Étape 25

Dupliquer le calque de texture et de déplacer la position de la couche de sorte qu'il est au-dessus de toutes les autres couches. Maker un rectangle de sélection du symbole seul et aller à Calque> Layer Mask> Reveal Selection. La seule partie visible de la texture sera celui sur le symbole. Changez le mode de fusion à incrustation.
Man of Steel Symbole dans Illustrator et Photoshop

Étape 26

Ajoutons une autre texture. Celui-ci cette fois est de Google Images et vous pouvez le trouver icihttp://www.texturex.com/albums/Metal-Textures/TextureX% 20steel% 20texture ... . Placez-le au-dessus de toutes les autres textures et utiliser Soft Light pour le mode de fusion à 70%.
Man of Steel Symbole dans Illustrator et Photoshop

Étape 27

Maintenant, nous allons ajouter la texture finale, celle-ci sera en dessous de la dernière 2, mais toujours au-dessus de toutes les autres couches. Vous pouvez le télécharger àhttp://fc00.deviantart.net/fs50/f/2009/262/3/f/Scratched_Steel_Texture_b ... . Utilisez Lumière douce pour le mode de fusion ainsi.
Man of Steel Symbole dans Illustrator et Photoshop

Conclusion

Ajoutez une autre couche au-dessus de toutes les couches et le groupe dans un dossier. Changez le mode de fusion du dossier à Linear Dodge à 80% d'opacité . Sélectionnez le calque dans ce dossier, puis avec l'outil Pinceau (B) et une brosse très douce, peindre un spot de lumière avec du blanc au sommet du symbole. Après que votre conception est assez bien fait. Vous pouvez bien sûr améliorer les détails et les textures, mais le processus ne changera pas, alors maintenant c'est à vous de faire les choses comme vous le voulez.
Man of Steel Symbole dans Illustrator et Photoshop

Télécharger le fichier Photoshop

samedi 27 juillet 2013

windows 8.1

481281

On 26th June Microsoft officially released new version of Windows 8, Windows 8.1 contains new bunch of latest features. You can update or download it from Microsoft official website.
If you’re Windows 8 user you can simply go to this link and click on Get the update button.

Windows 8.1 preview is a test version, It is still developing by Microsoft developers. Windows 8.1 preview contains new apps, slideshow on start screen and improved bing search. here below we have listed some cool new features of Windows 8.1

Windows 8.1 features

-Start Button is available in Windows 8.1
-Improved search
-New apps available
-New size of Start menu tiles
-Set your desired wallpaper on start screen
-Internet Explorer 11 preview

System Requirements for Windows 8.1 preview

Processor : 1 GHz or higher
RAM : 1 Gb or higher
Graphics card : Microsoft DirectX 9 with WDDM driver.
free space on hard disk : 16 Gb for 32 bit, 20 Gb for 64 bit computer.
 Serial Key/ Product Key : NTTX3-RV7VB-T7X7F-WQYYY-9Y92F
dimanche 21 juillet 2013

How to create executable (.exe) File in Microsoft Visual Studio 2010


Hello friends, hope you all are healthy and having fun. Today I am posting a simple tutorial of how to convert your newly created software in exe file. Actually I got a request from one of our members to post this tutorial, he was having some problems in it, so i thought to share it.

In Microsoft Visual Basic 2010 - COM Port Tutorial I have talked about how to create a software in Microsoft Visual Basic 2010, today I am gonna tell you guys how to create the exe file of that software so that we can use it easily.
Note :
  • If you guys need tutorial on any topic then use this Contact Form, I will post it as soon as i can.

Introduction

  • Suppose you have created your software on Microsoft Visual Studio 2010 and now you want to use that software on any other computer.
  • So to do this, there's no need to copy whole code and create project in the second computer.
  • Instead just make executable (.exe) file of that software and install it on other computer.
  • This is mostly used for commercial purposes.
 Now follow these simple steps carefully.

Steps To Follow

  • Complete your software and test it to confirm that its ready to use.
  • Now click on the Project and at the bottom Properties, CNC Gcode is actually the name of my software as shown in image below :

  •   After clicking on properties a new tab will open as shown in image below :
  •  These are actually the properties of our software, like you can change the icon and can also do many other things.
  • Right now we are not changing anything but if you want you can play with its properties.
  • Now click on the Publish button at the bottom and the below screen will appear.
  • Now click on the Publish Now button and it will create the .exe file of your software.
  • You can change the location of the file where it is gonna store in the properties.
mardi 16 juillet 2013

Tutorial: créez des applications avec HTML5 sur Windows Phone grâce à PhoneGap

Tout d’abord, nous allons naturellement commencer par voir l’intérêt d’utiliser PhoneGap pour HTML5. Ensuite, nous verrons comment créer son tout 1er projet et récupérer les valeurs de l’accéléromètre en JavaScript. Pour finir, nous allons voir un exemple complet où j’ai repris le code de mon jeu HTML5 Platformer pour le faire fonctionner presque tel quel avec l’accéléromètre d’un Windows Phone.
  1. Introduction
  2. PhoneGap : un framework qui comble les manques
  3. Création de son 1er projet PhoneGap sur Windows Phone
  4. Récupération des valeurs de l’accéléromètre
  5. Exemple complet avec le jeu HTML5 Platformer
    1. Forcer le mode paysage
    2. Adapter le code pour gérer plusieurs résolutions
    3. Chargement des niveaux via l’appel au système de fichiers plutôt que XHR
    4. Modification du gameplay pour gérer l’accéléromètre
    5. Le résultat en images avec quelques FPS sur les téléphones
    6. Solution complète à télécharger
  6. Conclusion

Introduction

imageLa mise à jour Mango sur Windows Phone a apporté le support d’HTML5 via l’arrivée du navigateur IE9. Tout comme sur la version bureau, la version mobile d’IE9 met en place l’accélération matérielle via l’utilisation du GPU embarqué sur votre Windows Phone. Ainsi, couplé à JavaScript, IE9 permet d’envisager la réalisation d’expériences utilisateurs intéressantes autre fois uniquement réservées aux applications dites “natives”.
L’avantage d’utiliser HTML5 comme plateforme de développement est qu’elle permet une facilité “relative” dans la réutilisation d’une partie du code sur d’autres plateformes comme Android ou iOS. HTML5 suscite donc énormément d’intérêt de l’écosystème ces derniers temps pour les plateformes mobiles. Parfois malheureusement à tord mais j’y reviendrais surement dans un autre billet.
Cependant, bien que les spécifications HTML5/CSS3/SVG et JavaScript aient nettement évoluées ces derniers mois, il existe desmanques majeurs pour la réalisation d’applications mobiles. En effet, un téléphone ou une tablette dispose de capacités spécifiques à leur mobilité : GPS, accéléromètre, caméra, SMS, accès aux contacts, etc.
Pour accéder à ces spécificités matérielles depuis son code JavaScript, le W3C travaille depuis un moment sur ce que nous appelons les “Device APIs” ou DAP. Malheureusement, on peut considérer qu’il n’existe à l’heure actuelle aucune implémentation de ces spécifications sur le marché comme le confirme ce document : Standards for Web Applications on Mobile: November 2011 current state and roadmap . Mozilla a commencé un travail intéressant sur une forme de fork de ces spécifications nommées Web APIs pour soutenir son projet Boot To Gecko. C’est donc une bonne nouvelle dans la mesure où une forme d’implémentation commence à voir le jour et un dialogue avec le W3C semble s’installer. Les choses commencent doucement à bouger mais il faudra probablement plusieurs années avant de voir une spécification du W3C implémentée et répandue sur toutes les plateformes.
Alors comment faire en attendant ? HTML5 peut-il vraiment adresser ce scénario ?

PhoneGap : un framework qui comble les manques

En attendant l’arrivée de réelles spécifications standardisées, nous n’avons donc pas le choix : il faut créer un pont entre le code JavaScript et le code natif de la plateforme visée pour accéder au matériel. L’idée est donc la suivante : on prend le langage natif de chacune des plateformes (Silverlight, Objective-C et Java) et on en créé un framework qui expose des interfaces pour le développeur JavaScript.
C’est exactement ce que fait PhoneGap. Prenons le cas de Windows Phone qui nous intéresse dans cet article. Un projet PhoneGap expose tout simplement une application Silverlight hébergeant le contrôle WebBrowser (et donc IE9) ainsi qu’une DLL écrite en C# s’occupant d’accéder à l’accéléromètre, au GPS, aux contacts, à la caméra, etc. Ainsi, comme on va le voir un peu plus tard, en tant que développeur JavaScript, vous allez donc utiliser indirectement une DLL nomméeWP7GapClassLib.dll (le coeur de PhoneGap) à travers le code exposé dans le fichier phonegap-1.3.0.js. La DLL contient le code C# qui fait appel au runtime Silverlight présent sur le téléphone. Ce dernier peut accéder à l’accéléromètre et au reste du téléphone. La librairie JavaScript contenu dans le .js va faire office d’interface entre les 2 mondes. L’avantage de faire appel à cette librairie est que le code JavaScript que vous allez écrire pour accéder à la caméra du Windows Phone par exemple marchera tel quel sur PhoneGap pour Android ou iOS. PhoneGap offre donc une certaine forme de portabilité.
Sachez d’ailleurs qu’à ce sujet, le support de PhoneGap pour Windows Phone est désormais aussi complet que sur Android ou iOS depuis la récente version 1.3 :
Pour finir, PhoneGap vous fournit également un autre service intéressant. Il vous permet d’inclure vos fichiers JS, CSS, HTML, PNG & co au sein de son projet pour packager l’ensemble comme une véritable application native. En résumé, vous pouvez donc tout à fait utiliser PhoneGap pour packager une application HTML5 que vous déploierez sur le Store. C’est le cas par exemple de l’application SujiQ qui a été conçue ainsi.

Création de son 1er projet PhoneGap sur Windows Phone

Pré-requis

Voici les étapes à suivre avant toute chose :
  1. Téléchargez le SDK Windows Phone si ce n’est déjà fait ici : Télécharger le SDK Windows Phone
  2. Téléchargez la dernière version (1.3 aujourd’hui) de PhoneGap sur leur site : http://phonegap.com/
  3. Décompressez l’archive téléchargée depuis le site de PhoneGap
  4. Copiez les fichiers PhoneGapStarter.zip et PhoneGapCustom.zip dans \Documents\Visual Studio 2010\Templates\ProjectTemplates

Nouveau projet

Une fois toutes ces étapes suivies correctement, nous allons pouvoir créer notre 1er projet PhoneGap. Pour cela, démarrez Visual Studio 2010, rendez-vous dans la partie “Visual C#”, filtrez sur le mot clé “Gap” et vous devriez voir un nouveau type de projet nommé PhoneGapStarter :
image
Nommez le projet “MonPremierProjetPhoneGap”. Une fois créé, vous allez retrouver les fichiers dont je vous parlais avant dans l’explorateur de solution :
image
Vous n’avez donc plus qu’à insérer votre application HTML5 dans le répertoire “www”.
Au passage, j’ai plusieurs conseils à vous fournir au sujet de ce projet par défaut :
ne touchez jamais au fichier phonegap-1.3.0.js si vous souhaitez garder un code portable sur les autres versions de Phone Gap
- tous les fichiers que vous rajouterez dans le répertoire “www” devront être marqué en tant que “Content” dans leurs propriétés 
- à la place du binaire WP7GapClassLib.dll,vous pouvez référencer le projet C# WP7GapClassLib.csproj contenu dans le répertoire “Windows Phone\framework” de l’archive PhoneGap téléchargée. Cela vous permettra de débugger ou parcourir le code de la librairie PhoneGap si besoin.
Allez, commençons par effectuer une action normalement impossible par défaut sous IE9 Mango : récupérer les valeurs de l’accéléromètre en JavaScript.

Récupération des valeurs de l’accéléromètre

Nous allons voir comment, de manière très simple, récupérer les valeurs renvoyées par l’accéléromètre (de l’émulateur ou du vrai périphérique).
Rendez-vous dans “index.html” et changer le contenu du body par défaut par celui-ci :
<body>
    <h1>Démo accéléromètre</h1>
    <div id="valueX"></div>
    <div id="valueY"></div>
    <div id="valueZ"></div>
</body>
On va simplement utiliser 3 <div> qui afficheront les valeurs courantes X, Y et Z de l’accéléromètre.
Ensuite, changer le dernier bloc de <script> par celui-ci :
<script type="text/javascript">
    document.addEventListener("deviceready", onDeviceReady, false);

    // variable to output the current x, y & z values of the accelerometer
    var valueX;
    var valueY;
    var valueZ;

    // when PhoneGap tells us everything is ready, start watching the accelerometer
    function onDeviceReady() {
        valueX = document.getElementById("valueX");
        valueY = document.getElementById("valueY");
        valueZ = document.getElementById("valueZ");
        startWatch();
    }

    // start monitoring the state of the accelerometer
    function startWatch() {
        var options = { frequency: 500 };
        navigator.accelerometer.watchAcceleration(onSuccess, onError, options);
    }

    // if the z-axis has moved outside of our sensitivity threshold, move the aarvark's head in the appropriate direction
    function onSuccess(acceleration) {
        valueX.innerHTML = "X: " + acceleration.x;
        valueY.innerHTML = "Y: " + acceleration.y;
        valueZ.innerHTML = "Z: " + acceleration.z;
    }

    function onError() {
        alert('onError!');
    }
</script>
Le code est assez simple à lire je pense. Avant toute chose, vous devez attendre que l’évènement “deviceready” soit levé par PhoneGap pour être de vous retrouver dans un état stable. On commence donc par s’abonner à cet évènement et nous serons rappelé sur la fonction OnDeviceReady().Dans celle-ci, on récupère les 3 instances de <div> qui nous intéresse et on demande ensuite à être notifié des changements de l’accéléromètre toutes les 500ms dans la fonction startWatch(). Si de nouvelles valeurs sont générées, la fonction onSuccess() sera appelée avec les valeurs x, y et z fournies dans l’object acceleration. Vous trouverez toute la documentation sur le site de PhoneGap : PhoneGap Documentation - API Reference - Accelerometer
C’est tout ce qu’il faut faire du côté code JavaScript. Mais pour que cela fonctionne, il faut indiquer dans les propriétés du projet que l’on a besoin d’accéder aux capteurs (sensors) de l’appareil. La liste des capacités nécessaires au bon fonctionnement de notre application se trouve dans le fichier WMAppManifest.xml présent dans le répertoire “Properties”. Par défaut, depuis la version 1.3 de PhoneGap, la liste est limitée au strict nécessaire :
<Capabilities>
  <Capability Name="ID_CAP_IDENTITY_DEVICE" />
  <Capability Name="ID_CAP_IDENTITY_USER" />
  <Capability Name="ID_CAP_LOCATION" />
  <Capability Name="ID_CAP_NETWORKING" />
  <Capability Name="ID_CAP_WEBBROWSERCOMPONENT" />
</Capabilities>
A vous ensuite d’ajouter ce dont vous avez besoin dans votre application PhoneGap. Dans notre cas, ajoutez cette ligne :
<Capability Name="ID_CAP_SENSORS" />
Pour pouvoir autoriser l’accès à l’accéléromètre. Vous retrouverez la liste de toutes ces autorisations ici : Application Manifest File for Windows Phone
Bon, on est logiquement prêt à tester tout cela dans l’émulateur dans un 1er temps. Appuyez sur la touche magique “F5” et observons le résultat :
image
En faisant tourner le téléphone virtuel dans l’émulateur, vous devriez bien voir les valeurs de l’accéléromètre bouger. Félicitations !
Vous pouvez récupérer le code complet de cette solution ici : http://david.blob.core.windows.net/html5/MonPremierProjetPhoneGap.zip

Petit problème sur les téléphones configurés en français

Si vous testez le même code sur votre téléphone et que vous avez une locale en français, vous aurez l’impression que l’application ne fonctionne pas. En débuggant un peu le code, je me suis aperçu que l’exception suivante était levée dans phonegap-1.3.0.js :
"Error in success callback: Accelerometer = Syntax error"
Et en dumpant les valeurs, je me suis aperçu que l’erreur venait d’une tentative de dé-sérialisation JSON de la chaine suivante :
"{\"x\":0,00472,\"y\":-0,19879,\"z\":-0,98115}" au lieu d’avoir celle-ci en EN-US : "{\"x\":0.00472,\"y\":-0.19879,\"z\":-0.98115}"
Et oui, notre fameuse virgule de séparation a toujours l’air d’embêter nos chers amis américains…
2 solutions pour résoudre ce problème :
1 – Passer votre téléphone en EN-US (oui, je sais, c’est tout pourri comme solution)
2 – Corriger la source du problème dans le code C#. Pour cela, remplacez le code suivant présent dans Accelometer.cs de la librairie WP7GalClassLib :
/// <summary>
/// Formats current coordinates into JSON format
/// </summary>
/// <returns>Coordinates in JSON format</returns>
private string GetCurrentAccelerationFormatted()
{
    string resultCoordinates = String.Format("\"x\":{0},\"y\":{1},\"z\":{2}",
                    accelerometer.CurrentValue.Acceleration.X.ToString("0.00000"),
                    accelerometer.CurrentValue.Acceleration.Y.ToString("0.00000"),
                    accelerometer.CurrentValue.Acceleration.Z.ToString("0.00000"));
    resultCoordinates = "{" + resultCoordinates + "}";
    return resultCoordinates;
}
Par :
private string GetCurrentAccelerationFormatted()
{
    string resultCoordinates = String.Format("\"x\":{0},\"y\":{1},\"z\":{2}",
             accelerometer.CurrentValue.Acceleration.X.ToString("0.00000", CultureInfo.InvariantCulture),
             accelerometer.CurrentValue.Acceleration.Y.ToString("0.00000", CultureInfo.InvariantCulture),
             accelerometer.CurrentValue.Acceleration.Z.ToString("0.00000", CultureInfo.InvariantCulture));
    resultCoordinates = "{" + resultCoordinates + "}";
    return resultCoordinates;
}
Et désormais, l’exemple fonctionnera avec toutes les locales. J’ai ouvert un bug à ce sujet ici: https://issues.apache.org/jira/browse/CB-141 en proposant la solution ci-dessus qui sera intégrée dans la prochaine version (2.0.0).
Au passage, pour débugger un projet PhoneGap, vous pouvez très bien utiliser jsConsole et toutes les astuces décrites dans mon article précédent :Testez et débuggez vos sites HTML5 sous Windows Phone 7 avec l’émulateur gratuit

Exemple complet avec le jeu HTML5 Platformer

Pour conclure, essayons de mixer tout cela avec un jeu complet que j’avais réalisé dans l’article précédent : HTML5 Platformer: portage complet du jeu XNA vers <canvas> grâce à EaselJS
Voici les étapes que j’ai suivies pour faire fonctionner l’ensemble. La toute première étape consiste simplement à copier/coller les fichiers .js, .png, .css & co dans le répertoire “www” et de bien les marquer comme “Content”. Ensuite, voici les grandes étapes à suivre.

Forcer le mode paysage

Tout d’abord, j’ai forcé l’orientation en mode portrait et retiré la barre d’informations qui prend de la place sur le côté (System Tray) en me rendant de le fichier MainPage.xaml et en changeant ces propriétés :
SupportedOrientations="Landscape" Orientation="Landscape" shell:SystemTray.IsVisible="False"

Adapter le code pour gérer plusieurs résolutions

Le but étant d’être portable sur le plus grand nombre de périphériques possibles, il faut envisager de dessiner à des résolutions très différentes.
Pour cela, j’ai légèrement modifié le code initial du Platformer que vous pouvez retrouver dans l’autre article. Le jeu est ainsi désormais capable de s’adapter à n’importe quelle résolution en appliquant un ratio sur la manière de dessiner nos images et nos sprites. Tout est calculé pour partir de la résolution d’origine du Windows Phone (800x480) pour ensuite redessiner en fonction de ce ratio d’origine quelque soit la résolution. Vous pouvez le tester dans le navigateur ici : HTML5 Platformer ReScale et vous amusez à redimensionner la fenêtre de votre navigateur. Pour finir, si vous êtes sur une résolution 16/9 sur votre moniteur, appuyez sur la touche F11 pour jouer en plein écran ! L’expérience devient vraiment sympa comme le montre cette copie d’écran :
image
On laisse alors le soin au navigateur d’appliquer éventuellement de l’anti-aliasing lors de cette opération de mise à l’échelle. Vous noterez également, selon certains navigateurs, des performances très différentes en fonction de la taille de la fenêtre et donc de la résolution demandée. IE9/IE10 semble, sur ma machine, relativement indifférent au mode plein écran ou aux petites résolutions en affichant un framerate stable de 60 fps.

Chargement des niveaux via l’appel au système de fichiers plutôt que XHR

Dans le code d’origine, les fichiers .TXT associés à chacun des niveaux étaient stockés sur le serveur et récupérés via des appels XmlHttpRequest. C’est un peu dommage d’effectuer un appel XHR local. Donc j’ai remplacé le code initial de la fonction PlatformerGame.prototype.LoadNextLevel par :
// Loading the next level contained into /level/{x}.txt
PlatformerGame.prototype.LoadNextLevel = function () {
    this.levelIndex = (this.levelIndex + 1) % numberOfLevels;

    // Searching where we are currently hosted
    var nextFileName = "app/www/assets/levels/" + this.levelIndex + ".txt";
    try {
        var instance = this;
        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);

        function gotFS(fileSystem) {
            fileSystem.root.getFile(nextFileName, null, gotFileEntry, fail);
        }

        function gotFileEntry(fileEntry) {
            fileEntry.file(gotFile, fail);
        }

        function gotFile(file) {
            readAsText(file);
        }

        function readAsText(file) {
            var reader = new FileReader();
            reader.onloadend = function (evt) {
                instance.LoadThisTextLevel(evt.target.result.replace(/[\n\r\t]/g, ''));
            };
            reader.readAsText(file);
        }

        function fail(evt) {
            console.log(evt.target.error.code);
        }
    }
    catch (e) {
        console.log("Error loading level: " + e.message);
        this.LoadThisTextLevel(hardcodedErrorTextLevel);
    }
};
J’ai bêtement repris le code de la documentation de PhoneGap : FileReader . Vous avez donc pleinement accès au système de fichiers du Windows Phone via JavaScript.
Petit tip : pour vous aider à débugger ce qui est présent ou non dans l’Isolated Storage du téléphone, je vous conseille vivement cet outil qui m’a sauvé la vie : IsoStoreSpy écrit par Samuel Blanchard. Une vraie merveille !

Modification du gameplay pour gérer l’accéléromètre

Bon il ne reste plus qu’à mixer les différentes parties de cet article pour arriver au résultat escompté. Pour cela, j’ai ajouté le code suivant dans le constructeur de l’objet Player dans le fichier Player.js :
var options = { frequency: 500 };
var that = this;

navigator.accelerometer.watchAcceleration(
    function (accelerometer) { that.moveDirectionAccel(accelerometer); },
    function () { console.log("Error with accelerometer"); }, 
    options);
Ensuite, voici la fonction qui sera rappelée suite aux variations de l’accéléromètre :
Player.prototype.moveDirectionAccel = function(acceleration) {
    var accelValue = -acceleration.y;

    // Move the player with accelerometer
    if (Math.abs(accelValue) > 0.15) {
        // set our movement speed
        this.direction = Math.clamp(accelValue * this.AccelerometerScale, -1, 1);
    }
    else {
        this.direction = 0;
    }
};

Le résultat en images avec quelques FPS sur les téléphones

Tout d’abord, voici le résultat dans l’émulateur :
image
Sur un vrai périphérique, l’expérience varie d’un téléphone à l’autre. Prenons l’exemple du tout 1er niveau. Sur le LG E900, le framerate tourne autour de 22 fps, sur le HTC Radar, nous sommes autour de 31 fps et sur le Nokia Lumia 800 autour de 42 fps.
DSCF4677
Il en résulte un gameplay souvent décevant dans la plupart des cas. En effet, l’utilisation d’un canvas plein écran n’est pour l’instant pas une bonne idée sur ce genre de mobile même si le Nokia semble être le plus à même de gérer ce scénario. J’en avais déjà parlé lors de ma session ParisWeb 2011 sur le développement “cross-device”. Une approche de découpage de la scène de jeux utilisant de plus petits canvas animés ensuite via leurs propriétés CSS serait plus adaptée. C’est ce qui est fait sur la version HTML5 d’Angry Birds par exemple. Certains frameworks de jeux commencent d’ailleurs à envisager de le gérer pour vous. L’idée serait donc de coder 1 fois le jeu avec des APIs de haut niveau et le framework s’occuperait de choisir soit un canvas plein écran, soit un découpage en plusieurs petits canvas. Vous l’aurez compris : l’expérience de jeux HTML5 sur mobile n’en est qu’à ses débuts mais l’avenir s’annonce très intéressant. A suivre donc !

Solution complète à télécharger

Vous trouverez le code source complet du jeu HTML5 Platformer pour PhoneGap ici : HTML5GapPlatformer.zip

Ressources complémentaires

Conclusion

PhoneGap ouvre des perspectives intéressantes pour vous aider à écrire des applications pour le téléphone en reprenant vos compétences existantes en JavaScript, HTML et CSS. Il ne pourra pas forcément couvrir tous les scénarios actuellement adressées par un développement natif (Silverlight ou XNA) mais c’est une voie à envisager si vous souhaitez capitaliser sur les compétences de l’une de vos équipes. Il faudra par contre bien faire attention à vérifier que le type de projet retenu se prête bien aux limitations actuelles d’HTML5.
Il existe aussi la possibilité de mixer les 2 environnements en créant des expériences hybrides : le tronc commun écrit en “HTML5” et le reste par des équipes maitrisant la plateforme native. C’est ainsi que certains plug-ins ont été créés pour pousser un peu loin l’intégration dans l’expérience Metro :Plug-ins PhoneGap pour Windows Phone . Vous y trouverez par exemple la possibilité de mettre à jour les “Tiles” depuis votre code JavaScript.
Pour finir, PhoneGap et l’usage d’HTML5 permet également une portabilité plus simple vers d’autres plateformes… dans une certaines mesure. Cependant, ce sujet précis étant un vaste et passionnant débat remplis de mauvaises idées reçues, j’y reviendrais peut-être dans un autre billet si j’en ai le temps d’ici les TechDays ! Sourire 

David
 
-