Programmez119
Programmez119
Programmez119
PROgrammez !
www.programmez.com
mensuel n119 - mai 2009
Le magazine du dveloppement
Eclipse 4.0 !
Silverlight 3.0 :
Microsoft rvolutionne son web
CODER
pourle
istockphoto.com/Pgiam
FUN
Programmer pour le plaisir avec Wii Remote, Android, DeepZoom, Smallbasic, Skype, Yahoo !
Cloud Computing
Vos applications sur le web !
Les diffrentes architectures du cloud Google App Engine la sauce Java Windows Azure, les services Amazon
M 04319 - 119 - F: 5,95 E
Tmoignages
Windows
PowerShell 2.0 : toutes les nouveauts
Mthode
Matriser le Design Pattern Etat
3:HIKONB=^UZ^Z]:?k@b@b@j@k;
Printed in France - Imprim en France - BELGIQUE 6,45 - SUISSE 12 FS - LUXEMBOURG 6,45 - DOM Surf 6,90 - Canada 8,95 $ CAN - TOM 940 XPF - MAROC 50 DH
PRO grammez !
Le magazine du dveloppement
sommaire\\
\\ actus
Lactualit en bref ..............................................................................8 Agenda ..............................................................................................8
\\ projet
Windev : lentreprise avant tout ..........................................................11
22
\\ vnements
Solutions Linux : nuage, matriel et succs............................................12 Intel Software Conference ..................................................................13 Microsoft Mix 2009............................................................................14
\\ outils
Dans les coulisses du projet Eclipse e4 ................................................16 Silverlight 3.0 : un cran au-dessus !......................................................22 27
\\ gros plan
Cloud Computing :
Vos applications sur le web !
Cloud Computing : plates-formes et fonctionnement................................27 Dveloppez en Java vos applications Google App Engine ..........................30 Manipuler les files de messages de Windows Azure Storage depuis Java ..33 Comprendre loffre et larchitecture Amazon Web Services......................37
FUN
41
Wiimote, XNA et C# ..........................................................................41 DeepZoom : un zoom infini pour le web ! ..............................................44 Dvelopper un dictaphone pour Android ................................................48 Un gadget Skype pour SideShow ..........................................................53 Raliser votre widget avec Yahoo ! Blueprint ..........................................58 Smallbasic : le langage de 7 77 ans ..................................................61
62
\\ carrire
Faire carrire ltranger....................................................................62
\\ technologie
Vous ne reconnatrez plus votre C++ ....................................................64
\\ code
Ajax et framework PHP ......................................................................66 Installer et utiliser Lamp / Wamp ........................................................68 Comprendre le Design Pattern Etat ......................................................70 Dcouvrir PowerShell 2 ......................................................................74
\\ temps libre
En direct des labos ! ..........................................................................79 Crer un jeu vido de A Z avec XNA (suite et fin) ................................80 Les livres du mois ..............................................................................82
NOUVEAU
Livres blancs : langages, outils...
TLCHARGEMENT QUOTIDIEN
ECLIPSE e4 Tous les outils et leurs mises jour Actualit Forum Tutoriels, etc.
2009-2010, Intel Corporation. Tous droits rservs. Intel, le logo Intel, sont des marques dIntel Corporation, dposes ou enregistres aux tats-Unis et dans dautres pays.
PRO grammez !
Le magazine du dveloppement
dito\\
Un ciel nuageux
Serions-nous retombs dans le cycle infernal de la bulle internet d'il y a 9 ans ? On dit souvent que l'Histoire ne se rpte jamais ou au contraire quelle n'est qu'un ternel recommencement... Avec notre fameux " nuage " informatique, qui n'est finalement qu'une autre utilisation des applications sur Internet, on redcouvre le Web fourre-tout et la profusion d'annonces autour du " cloud " pour rester tendance. Les esprits chagrins, ou les mauvais esprits, c'est selon l'humeur, diront " mais c'est simplement l'informatique la demande, et les applications en mode ASP d'il y a 10 ans ! ". Ce nest , ni totalement faux ni totalement vrai . Le " cloud " les remet au got du jour, et en y ajoutant une dimension indite ! Je paie lapplication et les ressources machines que j'utilise. Et surtout, je suis capable d'adapter en quelques secondes mon serveur " dans le nuage " au nombre d'utilisateurs connects mon application " nuage " ! Imaginez que vous ayiez un site web marchand qui connaisse priodiquement des pics d'activits; au lieu de payer des dizaines de serveurs sous-utiliss durant des mois, vous vous contentez de louer pour x heures les serveurs et les ressources ncessaires. Si pour l'utilisateur et l'administrateur, les avantages sont certains, cela reprsente pour l'diteur, une remise en cause et un changement profond de son modle conomique. Il doit passer de la vente de licences la location, mais il lui faudra plusieurs annes avant d'obtenir le mme chiffre d'affaires ! Par ailleurs sur la scurit, l'introprabilit entre les services, de nombreuses questions se posent car aujourd'hui de srieuses lacunes existent. Et les pannes successives sur Google, Windows Azure, Salesforces jettent le trouble sur la qualit de service et la disponibilit des services et des plates-formes. Les fournisseurs de nuage sont obligs de s'engager sur un taux de disponibilit. Mais que faire quand on agrge plusieurs services et qu'un prestataire tiers tombe, entranant le reste des services, qui, pourtant, est disponible ? Casse-tte en perspective sur les responsabilits. La solution ? Avoir deux ou trois prestataires de remplacement pour chaque service SaaS ! Et pour notre ami le dveloppeur, qu'est-ce que le Cloud change ? Il est peu concern pour le moment, car les technologies, les API, les plates-formes voluent rapidement et la mise en production s'avre dlicate sur des environnements non stables susceptibles de rendre obsolte un dveloppement. Cependant, ds aujourd'hui, le dveloppeur doit comprendre les enjeux, la philosophie du Cloud. Car si fondamentalement, le code ne change pas beaucoup d'un code classique sur sa machine, il doit tout de mme tre conscient des limites de certaines fonctions, acqurir de nouveaux rflexes de scurit, de modles de donnes, grer les modes connect-dconnect. Il lui faut composer avec les interfaces et une puissance machine sans rapport avec sa machine locale, repenser l'architecture, la structure de son application, de son code. Et surtout, il devra choisir la plate-forme Cloud computing et se limiter celle-ci, car chaque fournisseur diteur veut tirer la couverture soi... Aspirine non incluse. Franois Tonic
Rdaction : redaction@programmez.com Directeur de la Rdaction : Jean Kaminsky Rdacteur en Chef : Franois Tonic - ftonic@programmez.com Ont collabor : F. Mazu, C. Remy, C. Soutou. Experts : G. Renard, B. Cab, G. Andr, G. Plouin, V. Bostoen, R. Kwon, L. Bar, C. Lomba, S. Mornas, D. Guignard, J. Chable, F. Queudret, C. Villeneuve, P. Guermonprez, J-Y. Terrien, F. Dupuis, R. Sabin Mompelat, F. Pedro, D. Cohen. Crdits photo : istockphoto.com/Pgiam Publicit : Rgie publicitaire, K-Now sarl Pour la publicit uniquement : Tl. : 01 41 77 16 03 - diff@programmez.com Editeur : Go-02 sarl, 6 rue Bezout 75014 Paris - diff@programmez.com Dpt lgal : parution - Commission paritaire : 0712K78366 ISSN : 1627-0908 Imprimeur : ETC - 76198 Yvetot Directeur de la publication : J-C Vaudecrane
Abonnement : Programmez 22, rue Ren Boulanger, 75472 Paris Cedex 10 - Tl. : 01 55 56 70 55 mail : abonnements.programmez@groupe-gli.com Fax : 01 40 03 97 79 - du lundi au jeudi de 9h30 12h30 et de 13h30 17h00, le vendredi de 9h00 12h00 et de 14h00 16h30. Tarifs abonnement (magazine seul) : 1 an - 11 numros France mtropolitaine : 49 - Etudiant : 39 - CEE et Suisse : 55,82 - Algrie, Maroc, Tunisie : 59,89 - Canada : 68,36 - Tom : 83,65 Dom : 66,82 - Autres pays : nous consulter. PDF : 30 (Monde Entier) souscription exclusivement sur www.programmez.com
LINFO PERMANENTE
WWW.PROGRAMMEZ.COM
PROCHAIN NUMRO
N120 juin 2009, parution 31 mai
Web 2.0
Silverlight 3.0 : tout ce qui va changer pour le dveloppeur et votre site web !
Multi-plate-forme
Compiler pour plusieurs systmes, les langages utiliser, les outils dployer
actu \\ en bref
Le SDK Android passe en version 1.5, ou presque. Pour le moment disponible en pr-version, ce SDK apporte de nombreuses nouveauts : amlioration des lments dinterface, rotation des applications, performances en hausse pour le GPS, Gmail, la camra. Le moteur webkit est lui aussi mis jour. Surtout, on dispose de nouvelles API (media Framework, fonctions vocales). Attention : le SDK prcdent ne fonctionne pas avec le nouveau plug-in. Site : http://developer.android.com/sdk/preview/ Vous rvez dutiliser CheckStyle avec vos codes C# ? Cest dsormais possible avec StyleCop. Son objectif : analyser le code C# et sortir un rapport des violations. Il permet de faciliter la correction des principales failles. Excellente initiative. Site : http://www.codeplex.com/StyleFix Netbeans travaille toujours sur la future version 6.7 devant sortir en juin prochain. Les grandes nouveauts sont lintgration de Maven et de Kenai, (sorte de forge pour y dposer des projets open source). Java 7 avance toujours. Une des nouveauts sera lintgration du Coin Project. Ce projet doit faciliter ce que lon appelle en anglais " Small language changes ". Cela doit par exemple permettre des appels aux constructeurs plus concis avec des paramtres, avoir des call avec des mthodes aux noms " exotiques ", notamment en utilisant des langages non Java. Coverity lance Coverity Build Analysis. Cette technologie innovante de Coverity veut donner aux entreprises les moyens de lutter efficacement contre le gaspillage de temps et dargent occasionn par les systmes de compilation sousperformants, lors des phases de dveloppement. QT Creator, le nouvel IDE graphique de Qt Software, est disponible depuis quelques semaines. Il propose un diteur avanc pour son code C++, des outils de gestion de projets et de build et possde bien entendu un puissant constructeur graphique dinterface. A tester durgence ! Site : http://www.qtsoftware.com/products/developer-tools
Langage
ukihiro "Matz" Matsumoto, crateur de Ruby, tait de passage Paris lors du salon Solutions Linux. Nous avons eu le plaisir de le rencontrer quelques minutes. " Jai dmarr le projet il y a 16 ans, en 1993. Ctait mon projet, mon langage, en Open Source. En 1995, avec la premire version, la communaut commena sagrandir avec les gens sy intressant en Europe, aux Etats Unis. " raconte Matz. Mais durant les premires annes comme il lvoque, la communaut fut surprise et essentiellement centre au Japon et les premires mailinglists internationales se dvelopprent dans un 2e temps en Anglais. " A partir de l, la popularit commena crotre " poursuit notre crateur. " Jai design le langage selon mes rflexions, mes convictions. Ruby est fait pour tre facilement utilisable. Cest je pense la raison de son succs. Mais il est (aussi) trs riche. Et redonne envie de programmer. Cest important je trouve ",
F.T.
commente Yukihiro. Quant limplmentation de Ruby sur les machines virtuelles comme Java ou .Net, le crateur rappelle quil sagit de son bb et quil y a deux lments considrer : le design et limplmentation. Mme si cela est une bonne chose, " dans le futur, il sera plus rapide. Et ce sera mon Ruby (qui sera implment) " rajoute Matz. Car un des problmes actuels est que limplmentation nest pas celle du langage " standard " mais dune version modifie et souvent incomplte. " Je communique avec les projets JRuby et IronRuby mais
je ne travaille pas avec eux. Je fixe, par exemple, les bugs ", poursuit Yukihiro. Aujourdhui, si Yukihiro reste le penseur de Ruby, plus de 50 comitters de la communaut travaillent faire voluer et dvelopper Ruby. Sur les outils, la situation est bonne. " Ruby est utilis par de nombreux dveloppeurs que ce soit sur Eclipse ou NetBeans qui lintgre par dfaut. Il faut avoir de meilleurs tests, de meilleurs profiling, etc. " commente Yukihiro. A noter la disponibilit de Ruby 1.9.1 qui fixe plusieurs bugs.
agenda \\
MAI Les 12 et 13 mai 2009, CNIT Paris La Dfense : - Virtual forum (13 mai), pour tout savoir virtualiser www.virtualforum.fr - Solutions intranet travail collaboratif (12 et 13 mai), www.salon-intranet.com - Solutions IT On Demand (12 mai) tous les logiciels et services applicatifs en ligne la demande. - Management de projet www.groupesolutions.fr Les 16 et 17 mai, Paris La Villette, Ubuntu Party. Loccasion de tester la distribution, de rencontrer la communaut, de mieux connatre Ubuntu. Des confrences et ateliers se succderont les deux jours. Entre gratuite. www.ubuntu-party.org Le tour dcouverte Flex 3 et Air travers la France. Ateliers gratuits de dcouverte des outils Adobe http://www.baao.com/Formations/LE_TOUR_DE_F LEX_ET_AIR_.html
Le 26 Mai, Toulouse, premire dition de l"Open Source Software Industry Forum " (OSSIF), pour crer une rencontre annuelle entre les professionnels du logiciel libre et les grands comptes industriels locaux. http://www.ossi-forum.com/ Les 25 et 26 Mai 2009, Paris 12e, Chalet de la Porte Jaune. Edition 2009 de la confrence XP Day France, pour tout savoir sur les mthodes agiles. (www.xpday.fr).
ETRANGER JUIN Cambridge (Grande-Bretagne), du 16 au 18 juin Confrence Code Generation 2009 Lvnement phare europen sur les approches de gnration de code. Plus de 30 sessions pratiques prsentes par des experts de l'industrie http://www.codegeneration.net/cg2009/
actu \\ en bref
Intel renforce sa prsence dans le projet du compilateur GCC. Plusieurs collaborateurs du fondeur vont participer aux dveloppements, lamlioration des fonctions de GCC, binutils, gdb et glibc. Une bonne nouvelle ! HP a surpris son monde en dvoilant un outil gratuit pour surveiller et scanner les applications Flash : SWFScan. Issu du laboratoire scurit, cet outil dcompile les applications et extrait le code ActionScript afin de vrifier les failles potentielles (60 failles contrles). Site : http://www.hp.com/go/swfscan SQL Server 2008 est mis jour en service pack 1. Deux nouveauts retenir : lintgration du pack dans linstalleur du SGBD, la version 2 du Report Builder destine la BI et au reporting. Pas de nouvelle fonction intgre. Le SP2 pour MS Office 2007 devrait tre disponible quand vous lirez ces lignes. En attendant la sortie de Java 7, le projet Jigsaw a t lanc dans le cadre de la JDK pour le rendre plus modulaire, plus souple. La premire tape concernera Java 7 qui devrait arriver dbut 2010. Lobjectif est de crer un systme de modules bas niveau, ddi spcifiquement la JDK et accessible aux dveloppeurs et Sun le supportera totalement. Il se veut complmentaire aux JSR 277, 294 et mme OSGi. Pour en savoir plus : http://blogs.sun.com/mr/entry/jigsaw Vous devez rdiger une documentation, un rapport technique ? Calenco peut vous aider. Il permet un usage collaboratif, une gnration multi format. Calenco se prsente sous forme dune application web, et un stockage au format XML des donnes.
Composant
Outil
Web
10
Alter Way, intgrateur Open Source de rfrence, couvre les besoins de lensemble du systme dinformation avec ses quatre offres
CONSULTING
Conseil en architecture Choix doutils Industrialisation Best practices Audits
SOLUTIONS
SOLUTIONS APPLICATIVES Applications Web, ECM, E-commerce, Intgration de donnes, Business intelligence, Dveloppements spcifiques SOLUTIONS DINFRASTRUCTURE Supervision, Serveur de messagerie, Serveurs dinfrastructure, Bases de donnes, Management IP, Filtrage et partage des connexions Internet, Scurit
FORMATION
Un catalogue de plus de 60 formations Des programmes de certifications : PHP, MySQL, PostgreSQL, Java 1200 personnes formes par an Prs dune centaine dintervenants sur tous les sujets dont quinze internes certifis Des partenariats forts : SUN, MySql, Talend, Ingres
Louverture
Mais comme le rappelle V. Saramito, Windev ne se limite pas cela, loutil est prsent dans lindustrie, notamment pour la ralisation des interfaces hommesmachines. Il offre galement des fonctions bas niveau, pratiques pour se connecter et piloter des matriels embarqus, rcuprer des donnes de capteurs, etc. Et lajout de Java et dun plug-in Eclipse apporte de nouvelles dimensions loutil. Quelle est la force de Windev ? " Nous avons un planning 5 ans. Nous nous adaptons aux demandes, au march " prcise V. Saramito. PC Soft sait ragir en intgrant rapidement des technologies qui simposent ou trs demandes par les utilisateurs. La ractivit est un lment important. Le web 2 est trs prsent, la version 14 renforce cela, avec Google, Java, Ajax, Salesforce ou encore les fonctions de mashup.
HOSTING
Hbergement haute disponibilit 24/7 Exploitation et infogrance Solutions SaaS Solutions de stockage Solutions de-commerce Des solutions techniques performantes et stables
TECHNOLOGIES
PHP / Python / Java / ECM JasperSoft / Talend / Bases de donnes Open-Xchange
www.alterway.fr
OPEN SOURCE
Le libre, autrement
vnements \\ linux
lusieurs tendances taient perceptibles durant le salon : une prsence discrte des logiciels par rapport aux annes prcdentes, le retour en force du matriel (en particulier les serveurs), des intgrateurs et SSII open source toujours aussi prsents, et enfin, la monte en puissance dUbuntu et du cloud computing. Le cloud a t une des vedettes de cette dition 2009, notamment dans les keynotes et les confrences. Ubuntu avait un discours trs prcis sur le sujet avec la prsentation de la future version 8.10 de la mouture serveur de la distribution. Ubuntu profitait de labsence de Red Hat pour se montrer. Pari russi. Lambition dUbuntu ? Proposer une alternative Windows Server, Libre et Open Source que les fournisseurs de Cloud pourraient utiliser. Lobjectif de lditeur nest pas de proposer sa propre plate-forme La prsence dUbuntu via Amazon Web Services illustre cela. Outre labsence de Red Hat, on notait la discrtion
D.R.
dIBM mais par contre un certain dynamisme de Sun avec MySQL et les serveurs
cloud, dans les applications, les serveurs. Bien plus fin que la console EC2, Elastic Grid pourrait tre repris dans le prochain Ubuntu Server orient cloud.
Et les dveloppeurs ?
Si les logiciels furent discrets (hormis les classiques openOffice, la messagerie qui se pose en alternative Exchange), le dveloppeur ntait pas non plus la fte. Peu de choses spcifiques dans les alles. Novell dvoilait le trs attendu SuSe Studio, un outil en ligne pour configurer et gnrer une distribution SuSe ! La partie dveloppeur la plus intressante tait sans aucun doute dans les communauts et en particulier autour de Ruby, PHP Quelques diteurs taient . tout de mme prsents comme Xool Technologies. Xool est une SSII franaise spcialise dans les logiciels industriels et en particulier sur les outils de tests. Le salon fut aussi loccasion de croiser Tristan Nitot de Mozilla Europe et de parler du futur de Mozilla et tout particulirement de Firefox 3.5 et mme 4.0, ou encore de rencontrer pour quelques heures peine le crateur de Ruby ou le nouveau patron de Zend F.T.
12
confrence \\ intel
Intel est connu pour ses processeurs mais un peu moins pour ses logiciels destins aux dveloppeurs C++ et Fortran permettant de profiler, doptimiser son code. Comme chaque anne, le fondeur organise une confrence logicielle en Europe. Cette anne, elle sest droule Salzbourg en Autriche, centre exclusivement sur le code parallle.
lus dune centaine de personnes furent rassembles au cur de la vieille ville de Salzbourg : des revendeurs Intel, des partenaires, des journalistes et des dveloppeurs. Les sessions ont prsent Parallel Studio, la bote outils pour le code parallle dIntel qui sera disponible en juin prochain. Et le dfi est la hauteur de lenjeu : selon une statistique fournie par Microsoft, peine 3 % des dveloppeurs ont mis en uvre ces 6 derniers mois des instructions parallles dans leur code ! Intel a rappel le challenge : avec la gnralisation des processeurs multiples curs (mme si la majorit des ordinateurs utiliss sont en monocoeur), comment tirer parti de cette puissance ? La seule solution est dadapter son code, de loptimiser pour quil fonctionne paralllement sur plusieurs curs. Or ce travail reste dlicat et complexe. Cest pour cela que dans toutes les sessions techniques, le message de lintgration et de la simplicit a t martel.
montrer comment ce plugin pour lIDE de Microsoft aide le dveloppeur, facilite la paralllisation du code, le debug, le profiling. Cependant Intel demeure raliste : Parallel Studio nest pas une solution miracle. Au dveloppeur de faire, aussi, son travail de codeur : il faut utiliser les bons outils, savoir comment on paralllise son code et encore plus les zones de code parallliser (car on ne paralllise pas tout son code). Et il faut savoir mettre en place un cycle de dveloppement parallle : on " designe " le code, on code, on dbogue, on vrifie et on " tune ". Car noubliez pas un lment vital : un mauvais code paralllis sexcutera lentement. Un code optimis aux bons endroits sera particulirement efficace.
Aider le dveloppeur
" Go Parallel " voil pour le slogan. La question est de savoir comment y aller. Intel a rappel quil existe deux gammes : la gamme actuelle avec le compilateur, le Thread Building Blocks, etc. et Parallel Studio. Ce dernier vise uniquement les dveloppeurs C++ sous Windows alors que les autres outils sont disponibles sur diffrents langages et pour diffrents systmes. Lintgration avec Visual Studio a t largement mise en avant par les diffrentes sessions. Objectif :
mation parallle avance ". Ct permet de faire de la programmation parallle de donnes, un axe doptimisation particulirement important pour Intel. Une bta publique sera disponible vers la fin de lanne. Il sagit dobtenir un haut niveau dabstraction, capable de monte en charge tout en offrant des performances leves. Le tout sans recompiler son code, et les outils maison (et de partenaires ?) supporteront cette technologie. Au final, une des rflexions de James mais aussi de Microsoft durant la journe fut : " faut-il un langage parallle, de nouveaux outils, de nouvelles librairies ? ". Sur le langage spcifique au monde parallle, James Reinders trouve lide intressante mais pose tout de suite la question sur le code actuel, sa migration. Ce serait un vritable Big Bang affirme-t-il. La question est loin dtre tranche mme si le but dIntel est daider le dveloppeur concevoir parallle. Mais alors pourquoi Parallel Studio nest-il pas disponible sur dautres systmes et IDE que Windows et Visual Studio ? L encore, James a t clair : Intel nest pas oppos une arrive sur Linux, mais quels IDE supporter ? Pourquoi pas Eclipse ? Un constat revenait souvent dans la bouche des participants : vanglisation, pdagogie, formation. Le dveloppement parallle exige une rigueur, une matrise du code mais aussi des librairies, des fonctions, et ce, mme si les diteurs simplifient lapproche. Franois Tonic
13
vnements \\ web
ette dition 2009 prenait une tournure par ticulire avec la crise conomique actuelle. Premier constat : nous nous attendions une audience moindre par rapport lan dernier, que nenni : trs forte participation ! Beaucoup semblaient chercher un souffle dinnovation et de rupture avec la crise actuelle ! La mentalit positive et constructive, typiquement amricaine, tait bien au rendez-vous ! fonctions de diagnostic CSS et surtout le SuperPreview. Il permet de tester directement son application web, son site, le rendu, le comportement, sur diffrents navigateurs via le module SuperPreview. Occasion aussi de rappeler lexistence dASP.Net MVC. Il sagit dun nouvel lment coll ASP .net avec une approche purement MVC. Ct ASP .Net, la v4 a t prsente. Elle comprendra : les web forms, une approche MVC, Ajax, JQuery, un cache distribu. Autre bonne nouvelle, Visual Studio 2010 for Web Development se complte avec une orientation code renforce, le support amlior de JavaScript, Ajax et JQuery ou encore des fonctions de publication et dploiement. Notons aussi les annonces suivantes : Web Server Extensions, Windows Web App Gallery (la boutique dapplication Microsoft) et enfin, et peut tre le plus important : Web Platform Installer. Microsoft vous permettra au travers de cet outil de rcuprer directement depuis votre propre plate-forme des applications web quelles soient en ASP .NET ou en PHP par exemple, et de les publier (dployer) directement sur votre serveur (app + db), voire sur un serveur on the cloud. Des annonces, encore des annonces avec la mise disposition de Commerce Server 2009.
Windows Azure
Ct cloud computing, Microsoft a prcis de nombreux lments par rapport Azure. Ainsi nous savons dsormais que la plate-forme sera commercialise ds 2009 avec une pr-version au plus tard en octobre prochain. Sur la technologie, on disposera dsormais dun support PHP via fastCGI et surtout dun niveau de scurit plus flexible via le .Net full trust. Sur les services, on notera lapparition des bases de donnes relationnelles sur le SQL Data Services et encore plus de standards web sur le .Net Services. Scott termina enfin sur la partie BizSpark et expliqua nouveau les fondements de ce programme Microsoft ! BizSpark tant lextension lchelle mondiale du trs clbre programme, dorigine Franaise, daccompagnement des start-up par Microsoft. Enfin noublions pas une annonce importante autour dAzure : la golocalisation. Les dveloppeurs pourront spcifier la localisation des applications et des donnes afin damliorer la latence rseau. A condition daccder un Datacenter plus proche pour
14
vnements \\ web
son application Nous devrions en apprendre davantage lautomne, avec la prochaine PDC ! ResourceBrowser. Revenons un peu en arrire, en octobre 2008 durant la PDC 2008. Lors de cet vnement, Microsoft effectuait le lancement de la plate-forme Azure Services et plus particulirement sur la brique Live Services du Live Framework CTP comprenant un outil de navigation (une forme de Reflector pour le Cloud //Live Services) : le Live Framework Resource Model Browser. Ayant dcid de pousser nos investigations dans le domaine du S+S Azure Services Platform ds mon retour de Los Angeles, nous avons trs vite dcouvert les limites de cet outil (bien que trs intressant la base, mais prsentant certaines difficults lors de la navigation au sein des donnes stockes dans Live Mesh principalement dans sa convivialit lusage). Suite cela, nous avons dcid de dvelopper, avec Sebastien Warin, un outil visuel permettant de naviguer au sein du Resource Model du LiveFx. Nous avons abouti rapidement sur une premire version baptise Mesh Object Browser (MOB) pour enfin voluer vers le Live Framework Explorer (LFE). LFE incorpore les fonctionnalits initiales du ressource browser et prsente galement dautres fonctionnalits bien intressantes que nous avons embarques lors de son dveloppement en plus du ct interface et incorporation VS2008, voici une rapide liste des premires fonctionnalits de celui-ci : Intgration Visual Studio 2008 SP1 sous forme daddin Navigation au sein de votre ressource modle Live Services - Contacts - Profiles (informations) - Mesh - Devices - News - MeshObject Cration, mise jour, suppression de vos MeshObjects Upload et Download de vos fichiers hbergs sur le cloud (Mesh) Sauvegarde de vos settings en tant que MeshObject (particulirement intressant pour les speakers ;p) Nhsitez pas nous faire quelques retours directement sur la plate-forme CodePlex, nous permettant ainsi damliorer, voire de corriger quelques bugs qui pourraient persister au sein du Live Framework Explorer.
Silverlight 3
Nous ne nous tendrons pas ici sur Silverlight 3 prsent dans un article de ce numro. Internet Explorer 8 : disponible ! La seconde keynote fut trs oriente navigateur et tout particulirement IE 8 ! Dean Hachamovitch, IE General Manager, sest occup de prsenter aux centaines de designers et dveloppeurs la version 8 du navigateur maison ! Les axes de cette version sont : les donnes, le design. Le design de IE 8 se veut bas et orient donnes ! Et surtout Microsoft mise sur les dveloppeurs pour exploiter les nouveauts du navigateur comme le webslice. Nous y reviendrons dans un prochain numro. Parmi les nombreuses fonctions, on notera principalement : - gestion des crashs dans les onglets : IE ne tombe pas quand sur un onglet, une erreur se produit, seul longlet en cause sera tu. - Performance globale en hausse, notamment sur le javascript - Meilleure protection contre les fraudes et contenus illicites. - Disponible en 25 langues.
15
outils \\ java
ge " Write Once, Run Everywhere " si cher Sun nest malheureusement pas toujours applicable dans le monde Eclipse. En effet, qui na jamais rv dcrire un code de prsentation parfaitement portable, et dainsi coder des IHM rendues nativement quelle que soit la cible (desktop, Web, PDA, ) ? Grce des technologies comme RAP (Rich Ajax Platform) ou eRCP (embedded Rich Client Platform), ce rve est en partie accessible, mais il reste pour linstant trs difficile de saffranchir des limites lies aux diffrences fondamentales entre les diffrentes plates-formes : avez-vous dj essay, par exemple, la programmation multithread dans une application Web crite en Javascript ?! [Fig.1]. Cest pour pallier ces limitations grandissantes que diffrents groupes de travail ont t lancs, supports par des grands comptes (IBM, encore bien prsent, mais aussi Adobe, Windriver, Freescale, ) et galement un grand nombre de dveloppeurs indpendants.
16
La Rvolution du Paralllisme
Intel Parallel Studio est un jeu doutils paralllisme pour
les dveloppeurs Visual Studio C/C++. Crez des applications parallles pour Windows optimises et innovantes et concourrez dans lindustrie du multicore grce Intel Composer, Intel Parallel Inspector et Intel Parallel Amplifier.
Intel Parallel Studio: 619 HT Intel Parallel Composer: 309 HT Intel Parallel Inspector: 309 HT Intel Parallel Amplier: 309 HT
www.sosdevelopers.com/parallel-studio.htm
outils \\ java
mework) [Fig.2]. Sans dtailler par le menu tous les bnfices apports par lutilisation dEMF, indiquons simplement quil simplifie grandement lcriture de code habituellement ennuyeux crire et/ou source possible derreurs : persistance, coute des vnements de modification du modle, etc. En outre, lutilisation dEMF permettra, si ncessaire, lenrichissement du modle de workbench " officiel " sans avoir faire des " rustines " comme cest malheureusement le cas pour Eclipse 3.x }); shell.pack(); shell.open(); } } Cette nouvelle fonctionnalit est dautant plus intressante que le support du debug est dores et dj disponible. En dautres termes : vous placez des points darrts dans votre code Java, et votre programme entre en debug quand votre animation Flash arrive sur le bout de code en question ! Une autre piste douverture dEclipse au monde du Web, mme si elle est pour linstant ltat embryonnaire, est lintgration qui a t faite du projet Mozilla Bespin avec Eclipse. Bespin est un framework pour ldition de code (coloration syntaxique, autocompltion, ) depuis un navigateur Web. Un prototype disponible dans e4 0.9 M2 couple le serveur Bespin de Mozilla avec le moteur JDT dEclipse, permettant ainsi dditer du code Java dans un navigateur, tout en sollicitant JDT ct serveur pour la compilation, la remonte derreurs, etc. Lintrt dutiliser son IDE distance peu paratre un peu loufoque, mais il est pourtant intressant de se dire quun norme serveur (ou mieux, le " cloud ") pourrait utiliser sa puissance de calcul pour lancer les tests unitaires de tout le projet chaque changement de code, ou produise des mtriques habituellement non utilises, car coteuses calculer Pour vous faire votre propre opinion sur lutilit de Bespin, la procdure dcrite sur le wiki dEclipse (http://wiki.eclipse.org/E4/Bespin) vous permettra de configurer et lancer votre propre serveur. [Fig.3]
18
outils \\ java
bouton " OK " sobstine ne pas saligner correctement est particulirement nervant ! Afin damliorer la lisibilit, la portabilit, et la rutilisabilit des interfaces graphiques, diffrents groupes de dveloppeurs, inspirs par XAML (Microsoft), XUL (Mozilla) ou MXML (Adobe Flex), ont rflchi des approches permettant de venir (d)crire celles-ci de manire dclarative. Par exemple, grce XWT et sa syntaxe inspire du XAML de Microsoft, on peut dcrire ce genre dIHM : } <Shell xmlns="http://www.eclipse.org/xwt/presentation" xmlns:x="http://www.eclipse.org/xwt" xmlns:j="clr-namespace:com.programmez.xwt" x:Class="com.programmez.xwt.HelloWorld" text="My shell"> <Shell.layout> <GridLayout /> </Shell.layout> <Label text="Cliquez ci-dessous!" foreground="SWT.COLOR_RED" /> <Button text="Hello, world!" SelectionEvent="btnClicked" /> </Shell> Et obtenir le rsultat suivant : [Fig.4] Le code permettant de dynamiquement interprter un code source XWT est particulirement simple : public class Application { public static void main(String[] args) {
Fig.4
Installer et utiliser e4
e build le plus rcent de4 (0.9 M2) ncessite une version intermdiaire dEclipse 3.5 (le futur Galileo, sortant fin juin), plus prcisment la M6, pour fonctionner. Il vous faut donc dans un premier temps la rcuprer, depuis le site Eclipse : http://download.eclipse.org/eclipse/. Lensemble des composants de la 0.9 M2 est disponible sous forme dun update site zipp sur notre site www.programmez.com (eclipse-e4-repo-0.9M2.zip). Une fois votre Eclipse 3.5 M6 lanc, il vous suffit de venir le rfrencer (" Help > Install New Software " puis " Add " ; choisissez un nom explicite, " e4 0.9 M2 " par exemple, et indiquez le chemin vers le ZIP (" Archive " dans le champ " Location: ". Une fois lupdate site ajout, cochez les composants suivants, puis terminez lassistant : Une fois linstallation de tous les composants effectue, et aprs avoir, comme
propos par lassistant, redmarr Eclipse, vous tes quasiment prts ! Pour faciliter votre mise en route, vous trouverez galement sur notre site plusieurs projets Eclipse quil convient dimporter dans votre workspace. Ils sont contenus dans le zip e4-programmez-projects.zip quil vous suffit dimporter (" File > Import > Existing Projects into Workspace " puis " Select archive file "). Enfin, si vous souhaitez utiliser le crosscompilateur SWT vers Flex, vous aurez besoin du SDK Flex (disponible ladresse http://opensource.adobe.com). Une fois celui-ci install, il faut rajouter la ligne Dflex.sdk=<chemin_flex_sdk> la toute fin de votre fichier eclipse.ini. La compilation croise est plutt simple mettre en uvre : il faut dfinir une nouvelle JRE (" Window > Preferences > Java > Installed JREs ") de type " ActionScript VM " dont le " JRE Home " pointe vers le dossier dins-
tallation de votre Internet Explorer ou de votre Firefox. Pour pouvoir dbugger vos futures applications Flash crites en Java, vous prendrez soin dinstaller dans le navigateur choisi le plug-in Flash dans sa version " debug ".
outils \\ java
couches trs basses dEquinox (en particulier la couche grant le cycle de vie des composants), il peut traiter de manire particulire les plug-in dont le Manifest (voir Programmez ! n115) contient lentte JavaScript-Bundle, et ainsi interprter correctement le code JavaScript quils contiennent (voir http://wiki.eclipse.org/E4/JavaScript pour plus dinformations). Si cette possibilit de mlanger plusieurs langages vous parat farfelue, dites-vous simplement que vous faites certainement cela tous les jours. Qui na jamais en effet t amen travailler sur une application a priori 100% Java, mais qui appelait en ralit un script Ruby pour traiter tel import de fichier CSV, lanait tel traitement via un script Shell, etc. ?
Reprise du workspace
Paralllement aux rvolutions fonctionnelles voques prcdemment, il faut prciser que des amliorations beaucoup plus pragmatiques sont apportes du ct de lIDE, afin de venir corriger certaines limitations historiques. Parmi ces volutions, celles concernant le modle du " workspace " Eclipse est la plus aboutie. En effet, la gestion des projets, ainsi que des ressources (dossiers et fichiers) quils contiennent, nest pas toujours satisfaisante dans Eclipse 3.x. Un IDE tel que Visual Studio, permet par exemple de crer des ressources " virtuelles ", qui peuvent tre des liens symboliques vers des ressources externes, ou bien des groupes agrgeant virtuellement des ressources contenues dans un projet. Cest prcisment ce genre de fonctionnalits que proposera lIDE Eclipse 4, ouvrant ainsi la porte une meilleure gestion de projets C ou C++, trop souvent compliqus bien organiser. Cette version remanie du modle des ressources est dj bien avance, et disponible dans la 0.9 M2. Cerise sur le gteau, la notion de groupe et de ressource lie est mme rtrocompatible Eclipse 3.4 !
20
Des composants interface utilisateurs suprieurs pour Windows Forms, WPF, ASP.NET et Silverlight Pour de plus amples infos : infragistics.com
Four Platforms. One Package.
0800 667 307
grids
tree
menus
navigation
charts
& more!
Copyright 1996-2009 Infragistics, Inc. All rights reserved. Infragistics, the Infragistics logo and NetAdvantage are registered trademarks of Infragistics, Inc. All other trademarks or registered trademarks are the respective property of their owners.
outils \\ web
Microsoft MIX 09, qui sest tenu Las Vegas a donn lieu de nombreuses annonces. Microsoft a profit du buzz mdiatique de cet vnement, ddi aux designers et dveloppeurs, pour prsenter la nouvelle mouture de Silverlight, intitule Silverlight 3.
Silverlight 3 arrive la fois sur Eclipse avec Eclipse4sl et aussi sur MacOS X pour la partie dveloppement toujours grce Eclipse !
http://go.microsoft.com/fwlink/?linkid=143433 Expression Blend 3 preview : http://www.microsoft.com/expression/tryit/blendpreview.aspx Petite astuce, Microsoft a regroup lintgralit de ces outils en un seul package dinstallation, sauf naturellement, Expression Blend. Vous retrouverez ce package ladresse suivante : http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=11dc7151-dbd64e39-878f-5081863cbb5d ce package comprend aussi les Silverlight 3 Tools pour Visual Studio 2008 SP1. Pour rcapituler, il suffit dinstaller ce dernier package et vous serez fin prt dvelopper avec Silverlight 3. Attention, en installant Silverlight 3 vous supprimez le plugin Silverlight 2. En ce qui concerne les Tools pour Silverlight 2 il existe une manipulation astucieuse pour continuer dvelopper en Silverlight 2 avec du Silverlight 3 install sur sa machine. Plus dinformation sur cette manipulation : http://www.jeff.wilcox.name/2009/03/sxs-sl2-sl3-building/
ontrairement au passage de Silverlight 1 Silverlight 2, celui Silverlight 3 sera beaucoup plus ais car il ne sagit pas dun changement de technologie mais bel et bien dun ajout de nouvelles fonctionnalits. A travers cet article, nous allons tenter de dcouvrir les principales nouveauts apparues dans cette version 3 bta 1.
Installation de Silverlight 3
La version de Silverlight 3 annonce au MIX09 est la bta 1. Elle na donc pas vocation tre distribue au grand public, mais seulement aux dveloppeurs afin quils puissent commencer apprhender les nouveauts de ce plugin. En dautres termes, la version Go-Live na pas t encore annonce et il nest donc pas possible, lheure actuelle, de commercialiser des applications Silverlight 3. Si vous tes dveloppeur et impatient de dcouvrir les nouveauts de Silverlight 3, nhsitez pas installer une VPC et suivre les liens ci-dessous qui vous permettront dinstaller votre environnement de dveloppement : Le SDK de Silverlight 3 bta 1 : http://www.microsoft.com/downloads/details.aspx?FamilyID=D09B6ECF9A45-4D99-B752-2A330A937BC4&displaylang=en La documentation du framework Silverlight 3 : http://go.microsoft.com/fwlink/?LinkId=144350 Le plugin Silverlight 3 pour les dveloppeurs :
Fig.1
22
outils \\ web
concerne la gestion de la 3D. [Fig.2]. Chaque contrle Silverlight, savoir un Grid, un bouton ou une TextBox est capable de se projeter dans un environnement 3D. Voyons comment cela fonctionne du ct XAML et du ct code. A nouvelle fonctionnalit, nouvelles proprits, Silverlight 3 se voit donc ajouter 12 nouvelles proprits ddies la manipulation 3D, accessibles directement depuis votre code XAML mais aussi ct code C#. Nous retrouvons donc : CenterOfRotation(X|Y|Z) pour modifier le centre de rotation suivant laxe GlobalOffset(X|Y|Z) pour modifier la focale globale LocalOffset(X|Y|Z) pour modifier la focale propre lobjet courant (UIElement) Rotation(X|Y|Z) pour effectuer une rotation de lobjet suivant laxe [Fig.3] Ct XAML, tout comme le RenderTransform, il sagit dajouter un nud de type Projection : <Canvas Background=Red x:Name=monCanvas Width=400_ Height=200_> <Canvas.Projection> <PlaneProjection RotationX=40_ RotationY=60_ Rotation Z=0_ /> </Canvas.Projection> </Canvas> Ct Code C# il suffit dutiliser les DepedencyProperty : monCanvas.Projection.GetValue(PlaneProjection.RotationXProperty); monCanvas.Projection.SetValue(PlaneProjection.RotationXProper ty, maValeur); lments Storyboard nont pas vocation tre soumis lacclration GPU. Lanimation modifiant lobjet en permanence, celui-ci serait sans cesse re-rendu et ce, au dtriment du cache. Par dfaut, une application nayant que des animations classiques et des contrles basiques naura pas besoin de lacclration GPU, il est donc inutile de lactiver si vous nen ressentez pas le besoin. Le calcul du FPS de votre application sera le meilleur moyen pour savoir si oui ou non cette fonctionnalit vous est indispensable.
[Fig.4] Silverlight 3 permet prsent denregistrer des fichiers sur la machine cliente. La nouvelle classe SaveFileDialog permet via la mthode ShowDialog dafficher la fentre Enregistrer sous propre votre systme dexploitation. Cette fonctionnalit est bien entendu scurise car elle ncessite laction de lutilisateur. Voyons le fonctionnement de cette classe avec le code C# : private void btnSave_Click(object sender, RoutedEventArgs e) { SaveFileDialog mySaveDialog = new SaveFileDialog(); mySaveDialog.Filter = "Text Files (.txt)|*.txt|All Files |*.*"; bool? ret = mySaveDialog.ShowDialog(); if (ret == true) { using (Stream fs = (Stream)mySaveDialog.OpenFile()) { byte[] info = (new UTF8Encoding(true)).GetBytes (tbTest.Text); fs.Write(info, 0, info.Length); fs.Close(); } } }
Cela ouvre les portes de nouveaux scnarios. Vous allez pouvoir sauvegarder des DataGrid au format Excel, au format CSV, etc. au sein de vos applications Silverlight. En couplant cette fonctionnalit au mode dconnect de Silverlight 3, lusage de Silverlight se voit rellement enrichi.
Fig.4
outils \\ web
Le Databinding dlment
Silverlight 3 vient enrichir le modle de Databinding existant de Silverlight 2, en introduisant la notion de Element Databinding, dj connue des dveloppeurs WPF. Le concept du " Element Databinding " consiste lier la valeur de la proprit dun lment avec la proprit dun autre lment. Ainsi il est possible de lier la valeur dun Slider avec la largeur dun Rectangle. <Slider x:Name=monSlider Width=200_ Minimum=0_ Maximum= 400_ Value=200_></Slider> <Rectangle Width={Binding Value, ElementName=mon Slider} Height=200_ RadiusX=5_ RadiusY=5_ Fill=Gray> </Rectangle> Lintrt de cette syntaxe est quelle ne ncessite pas lintervention dun dveloppeur. Il suffit de connatre le langage XAML ou bien dutiliser Expression Blend bon escient. De plus, cette syntaxe permet dconomiser de nombreuses lignes de code. [Fig.5] { uv.y = uv.y + (sin(uv.y*100)*0.03); return tex2D( input , uv.xy); } Ce code a pour effet dinverser limage et de londuler comme le reflet de leau. Exemple tir du trs bon blog de Jeff Prosise : http://www.wintellect.com/CS/blogs/jprosise/ [Fig.7]
[Fig.6]
TextBlock Text=Pixel shaders> <TextBlock.Effect> <DropShadowEffect BlurRadius=5_ Direction=-50_ Shadow Depth=5_ Color=Black></DropShadowEffect> </TextBlock.Effect> </TextBlock> <Button Content=Pixel shaders FontSize=30_ Margin=20_> <Button.Effect> <BlurEffect Radius=10_></BlurEffect> </Button.Effect> </Button> Comme le montre lexemple de la figure 6, les Pixel Shaders peuvent servir appliquer des effets graphiques tels que des effets de Blur et des effets dombrage Shadow. Un Pixel Shader est un objet qui transforme les pixels juste avant le rendu. Par dfaut, Silverlight proposes deux effets diffrents : BlurEffect et DropShadowEffect. Lun des gros points forts de cette nouveaut est la possibilit den crer soi-mme. Pour cela, il faut utiliser le langage High-Level Shading Language (HLSL) et le SDK de DirectX (http://msdn.microsoft.com/enus/directx/aa937788.aspx) afin de crer des fichier.FX. Voici un exemple de fichier FX : sampler2D input : register(S0); float4 main(float2 uv : TEXCOORD) : COLOR
En savoir plus
Pour aller plus loin avec les nouveauts de Silverlight 3 voici une liste de liens intressants : Program manager Silverlight : http://timheuer.com/blog/ Program manager Silverlight : http://blogs.msdn.com/jstegman/ Mike Snow et son incontournable " Tips of the Day " : http://silverlight.net/blogs/msnow/ Le blog officiel de la team Silverlight : Fig.7 http://team.silverlight.net/ Andy beaulieu : http://www.andybeaulieu.com/ Vous pourrez retrouver lintgralit des nouveauts Silverlight 3 en franais et en vido sur mon site : http://www.guillaumeandre.com/
Fig.5
Fig.6
Fig.8
24
Cloud Computing
Vos applications sur le web !
istockphoto.com/Pgiam
me si le SaaS reste modeste en parts de march, les utilisateurs et les diteurs sy mettent. Durant de nombreuses annes, le modle initi par Microsoft, Software + Services (ou S+S), soit le Logiciel + les services sera incontestablement le modle qui va tre disponible. On gardera les classiques licences ou souscriptions (dans le monde open source) et on accdera des services, des applications, complmentaires ou non, en ligne, soit sur le web. Plusieurs cueils restent plus que jamais dactualit : le manque dinteroprabilit entre les solutions et les services, limmaturit des API et SDK, des plates-formes Cloud encore en bta ou peine disponibles, un changement aussi radical dans la distribution des applications et donc du modle conomique.
Le cloud impose en effet ce que lon appelle depuis plus de 10 ans linformatique la demande. Cest--dire que lon paie ce que lon utilise rellement. On loue de lapplication, du temps serveurs, des ressources serveurs. Cest une vritable rvolution permettant, si lapplication est bien code, de pouvoir ajuster en quelques minutes peine, le nombre de serveurs ncessaires lors dun pic de charge. Comme dans le monde logiciel classique, plusieurs univers saffrontent dans le Cloud. Vous avez les partisans dun cloud computing ouvert, interoprable, reposant sur des standards, des spcifications connues et indpendantes, et des fournisseurs / diteurs privilgiant leur propre plate-forme (plus ou moins ferme) et tissant des accords bilatraux avec dautres diteurs. Il existe l un rel risque, comme nous le
connaissons sur les plates-formes RIA ou au dbut des Web Services et la profusion de spcifications. Quest-ce qui change pour le dveloppeur ? Beaucoup et peu la fois. peu, car les grands fournisseurs de plates-formes tentent de faire une transition le plus en douceur possible. Ainsi Google en incluant Java dans App Engine vite de redvelopper son application Java mme sil y a encore de nombreux manques fonctionnels. Microsoft fait de mme avec .Net naturellement, mais aussi avec des langages non .Net. Cest un gage important envers le dveloppeur. Cependant, linstabilit des API et des SDK gne le dveloppement et hormis utiliser des systmes dploys sur un Cloud hberg comme Amazon EC3, les plates-formes App Engine ou Azure restent viter pour une application en production. Trop tt. Mais cela changera rapidement ! Cependant, le Cloud impose de nouveaux rflexes dans la gestion des donnes, dans les instances serveurs et les applications, ou encore sur le fait de grer du code local et serveur ou le online et le offline. Incontestablement, le dveloppeur doit devenir peu peu un dveloppeur web dun nouveau genre. Pour ce premier grand dossier " cloud " dans Programmez !, nous avons voulu tre trs pratique et concret : architectures, Azure, Google App Engine, Amazon ! Nous reviendrons trs rgulirement sur le nuage informatique pour vous prparer et expliquer au mieux les technologies et plates-formes des diteurs. Franois Tonic
26
Plates-formes et fonctionnement
Le terme Cloud Computing se traduit littralement par " informatique dans les nuages , ces nuages faisant rfrence Internet et au web. Pour bien comprendre cette terminologie, il faut rappeler quInternet est un rseau trs complexe et difficile apprhender, car constitu de millions de connexions utilisant des technologies trs disparates (fibre optique, cble, ADSL, etc.). Le monde de lInternet est compltement abstrait pour la plupart des utilisateurs, il na pas de ralit gographique tangible.
application de Cloud Computing que nous utilisons peut se trouver San Francisco, dans un satellite ou mme sur la Lune : cela fait finalement peu de diffrence pour nous. Les nuages du Cloud Computing font rfrence cette abstraction. Ils font aussi rfrence au fait que lon reprsente souvent Internet sous la forme dun nuage dans les schmas informatiques. Le Cloud Computing signifie donc que les applications en ligne sont utilises comme si elles taient situes dans lther, dans un espace sans ralit physique. [Fig.1]
Des architectures ddies et optimises : les applications SaaS bnficient dun environnement dexcution conu pour un usage en ligne avec une forte charge utilisateur ; elles sont lies cet environnement et ne peuvent pas tre " dmnages " simplement sur un serveur en entreprise. La mise en avant de fonctions collaboratives : les SaaS mettent laccent sur les pratiques collaboratives hrites du web 2.0 ; La fourniture dAPI ouvertes : les SaaS fournissent des API permettant de faire appel leurs fonctionnalits.
Fig.1
Le concept de Cloud Computing englobe les concepts de Software as a Service (SaaS) et de Platform as a Service (PaaS).
tance aux sinistres (inondations, incendies, etc.) Les plates-formes PaaS reposent gnralement sur les composants suivants : Un ensemble de datacenters : leur nombre est toujours suprieur trois. Dans les cas de Microsoft ou
27
Cet article est ralis partir dextrait de louvrage : " Cloud Computing & SaaS : une rupture dcisive pour l'informatique d'entreprise ", Dunod, par Guillaume Plouin, Directeur programme innovation SQLI
28
oogle App Engine (GAE) est une offre de Cloud Computing permettant aux dveloppeurs dhberger leurs applications Web sur les serveurs de Google. Les applications ainsi hberges bnficient de ce fait de la mme capacit de monte en charge que les services Google tels que Gmail ou Google Finance. Un des atouts de Google App Engine est que gratuitement un dveloppeur peut dployer une application accde raison de 5 millions de pages vues par mois, ce qui est somme toute une offre dhbergement intressante. Au-del de ces quotas, il est possible dacheter des ressources supplmentaires. Depuis quelques mois, nous pouvions voir dans la roadmap de ce projet que le support dautres langages tait un des objectifs de Google. Aujourd'hui, cest chose faite, Google ouvre son service une nouvelle communaut et contrairement leur poisson davril, ce nest pas Fortran mais bien Java qui est dsormais support. Cette nouvelle devrait donc tre accueillie avec un vif enthousiasme lorsque lon sait que le support de Java a t lune des premires volutions suggres par les dveloppeurs lors de la sortie de la premire version de lApp Engine.
Lintgration de Java
La version Java ne droge pas au qualificatif de " Simple dutilisation " qui caractrisait la version Python. En effet, il ny a pas de diffrence majeure dans lapproche quont ces deux dernires. Un atout supplmentaire de la version Java et qui a son importance, cest le fait quelle saccompagne dun plugin Eclipse. Il est ainsi possible de crer une application et de la dployer en quelques clics. De plus, lintgration avec GWT (Google Web Toolkit) est enfantine et propose par dfaut par le plugin. Lenvironnement de dveloppement App Engine Java supporte les versions Java 5 et Java 6, sachant que sur les serveurs distants cest la 6 qui est supporte. Les pr-requis au dveloppement et au dploiement dapplications sur la plate-forme sont relativement faibles : avoir install Java et le SDK de lApp Engine. Linstallation du plugin Eclipse est bien entendu un plus non ngligeable. Ladministration des applications se fait via la mme interface que pour les applications Python. Il est ainsi possible de voir la rpartition de la charge dans le temps, les requtes HTTP les plus rcurrentes, le taux dutilisation ramen aux quotas. Il est galement possible de consulter les logs. Enfin, une page permet daccder aux donnes stockes dans le Datastore. Etudions de plus prs larchitecture dun projet et lutilisation des API
gin Eclipse, vous obtiendrez une structuration semblable celle de la figure ci-dessous : Cette arborescence de projet ne prsente pas de spcificit particulire, on notera la prsence dun fichier web.xml permettant dassurer le mapping entre les URL et les classes des Servlets. Lorsque vous dployez une application sur Google App Engine, une association sopre entre les fichiers que vous transfrez sur les serveurs de Google et les applications que vous tes en mesure dadministrer. Cette association est possible grce un identifiant que vous vous devez de retranscrire dans le fichier appengine-web.xml. Ce fichier est lquivalent du fichier app.yaml de la version Python de lApp Engine. Les Servlets sont tout fait communes et ne diffrent pas de celles que lon peut dvelopper dans une application traditionnelle. La Servlet dun HelloWorld pourrait donc se prsenter ainsi : package com.sfeir.demo; import java.io.IOException; import javax.servlet.http.*; public class DemoServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServlet Response resp) throws IOException { resp.setContentType("text/plain"); resp.getWriter().println("Hello, world"); } } Intressons nous maintenant aux API spcifiques de Google App Engine.
Passons la pratique
Les applications Google App Engine doivent tre structures en respectant larborescence WAR, ainsi, si vous crez un projet via le plu-
30
public class DemoServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServlet Response resp) throws IOException { UserService userService = UserServiceFactory.getUser Service(); User user = userService.getCurrentUser(); if (user != null) { resp.setContentType("text/plain"); resp.getWriter().println("Hello, " + user.getNick name()); } else { resp.sendRedirect(userService.createLoginURL(req. getRequestURI())); } } } Ici, on utilise le UserService pour rcuprer lutilisateur actuellement connect lapplication. Sil y a bel et bien un utilisateur authentifi, nous lui affichons un message de bienvenue et si ce nest pas le cas, lAPI nous permet de le rediriger vers une page de login. Lorsque vous travaillez en " local ", le systme dauthentification est mul, il ny a pas de vrification, proprement parler, de lexistence des utilisateurs. Lorsque vous dployez votre application, le UserService se base sur les Google Accounts pour vrifier lexistence des utilisateurs. Persistance Attention, comme pour la version Python de Google App Engine, le stockage des donnes ne seffectue pas dans une base de donnes relationnelle. Google dispose de son propre formalisme de stockage des donnes qui sapparente une Map multidimensionnelle partage. Le dveloppeur dispose de trois solutions distinctes pour persister ses donnes, en effet, Google App Engine Java implmente JDO (Java Data Object), JPA (Java Persitance API) et met galement disposition une API de plus bas niveau (Datastore API). Dans cette version de Google App Engine, Google pousse un Framework de persistance : DataNucleus. Sa configuration se fait trs simplement (voir doc pour plus de dtails) Voici un exemple utilisant JDO, la dfinition des donnes persister se fait par annotation. Ci-dessous, lobjet Comment est dfini comme pouvant tre persist, en le sauvant, les lments annots comme @Persistent feront partie de la sauvegarde. package com.sfeir.demo; import import import import import java.util.Date; javax.jdo.annotations.IdGeneratorStrategy; javax.jdo.annotations.IdentityType; javax.jdo.annotations.PersistenceCapable; javax.jdo.annotations.Persistent;
String query = "select from " + Comment.class.getName(); List<Comment> comments = (List<Comment>) pm.newQuery(query) .execute() ;
32
Configuration de lenvironnement
Ajouter les jars suivantes au projet : jdom.jar org.restlet.jar org.restlet.ext.httpclient.jar org.apache.commons.httpclient.jar org.apache.commons.logging.jar org.apache.commons.codec.jar
Fig.1
Fig.2
33
Lapplication
Dans lapplication principale (Main), on va : Crer une file de messages Supprimer une file de messages Ajouter un message dans une file Rcuprer un message dune file Supprimer un message dune file Supprimer tous les messages dune file
Authentification
Toutes les requtes doivent tre authentifies suivant le schma dauthentification de Windows Azure : http://msdn.microsoft.com/enus/library/dd179428.aspx, la Development Version de Restlet supporte ce schma dauthentification (ChallengeScheme.HTTP_MS_SHAREDKEY), les appels sont alors rendus plus faciles, il suffit de spcifier le nom du compte Storage Account ainsi que la Primary Key associe : public static Response ProcessRequest(Request request) { ChallengeScheme scheme = ChallengeScheme.HTTP_MS_SHAREDKEY; // Identifiant d'acces aux services SDS ChallengeResponse authentication = new ChallengeResponse(scheme,<ACCOUNT_NAME>,<PRIMARY_ACCESS _KEY>); request.setChallengeResponse(authentication); // Ask to the HTTP client connector to handle the call
34
Conclusion
En exposant une architecture REST, Windows Azure tend la cible des applications au-del de la technologie .NET. Restlet facilite lintgration de la plate-forme avec le monde Java. Vous aurez sans doute remarqu la simplicit de la manipulation des Azure Queue, mettre une opration se rsume savoir quel verbe HTTP envoyer et sur quelle URL avec ventuellement quelle donne. Vos applications Java peuvent maintenant bnficier dun service de Message Queuing dans les nuages !
Linformation permanente
Lactu de Programmez.com : le fil dinfo quotidien La newsletter hebdo : la synthse des informations indispensables.
www.programmez.com
36
PROgrammez ! \\ Mai 2009
tion du rseau. Vous pouvez, travers les API du Web Service, ou via des outils fournis : crer une (ou plusieurs) image(s) (Amazon Machine Image : AMI) hbergeant vos applicatifs et donnes (AWS appelle Elastic Block Store sa fonctionnalit de persistance) ou utiliser une instance prconfigure. Toute image est stocke dans un fichier crypt (dans lenvironnement S3) charger votre instance dans un environnement scuris et fiable via le service S3. configurer des aspects scuritaires ainsi que laccs rseau votre (vos) instance(s). Ainsi, une instance peut se manipuler distance et en tout lieu via le mcanisme Elastic IP adresse IP statique attribue , un compte client et non une instance en particulier. Les instances (vendues de 1 20 units EC2, une unit correspondant un processeur de 1,2 GHz Opteron 2007 ou Xeon 2007) conviennent pour toute application, de la plus modeste la plus gourmande. Tous les principaux systmes du march sont disponibles. On retrouve aussi les habituels SGBD, serveurs Web et dapplication et vido. Aprs enregistrement auprs des services S3 et EC2 (si vous tes dj client dAmazon, vous navez quun clic faire au niveau de votre carte bleue), il faut se munir de diffrents codes et certificats (account ID, access key ID, secret access key, private key file et X.509 certificate file). Le processus de gestion dinstances est le suivant :
Crer une image partir de rien (pour Linux/UNIX) ou base sur une instance existante prconfigure (image publique) ; Installer ventuellement des logiciels additionnels votre image (bundle) puis obtenir un nouvel AMI ID ; Lancer autant dinstances de vos images que ncessaire ; Administrer et utiliser vos instances. Les tapes pour manipuler une image publique sont de slectionner une AMI, gnrer une paire de cls, lancer linstance, autoriser les accs rseau, se connecter linstance puis charger (ct instance) le certificat ainsi quune cl. La liste des images est disponible sur le site dAmazon et lutilitaire EC2 AMI recense les plus courantes. La commande ec2-describe-images -a retourne les identifiants de toutes les images publiques (cette commande ma retourn le dtail de 1215 images dj recenses !). Une description de ces machines peut tre obtenue via le site communautaire dAmazon. Afin de grer vos images, vous pouvez opter pour une interface en ligne de commandes ou par le navigateur Firefox. Lutilitaire EC2 AMI Tool, crit en Java, inclut des scripts sadaptant Windows 2000/XP,
Infrastructure
Elastic Compute Cloud (EC2) Alexa Web Search Simple Storage Service SimpleDB CloudFront Simple Queue Service
37
Pour les transferts, 7 centimes par Go en entre et 12 centimes en sortie seront facturs (tarifs dgressifs par la suite). Comptez environ 9 centimes pour 1000 requtes.
SimpleDB
Ce service permet dexcuter des requtes sur des donnes (stockes dans S3) et hberges sur une instance EC2. Lditeur affirme quaucun schma nest dfinir, que les donnes sont automatiquement indexes, que lAPI est simple. Le but serait de rduire les tches dadministration, de modlisation et doptimisation. Que de louables objectifs ! Ne rvez pas, ce service ne peut en aucun cas remplacer un SGBD mme sous-utilis. Le premier exemple quAmazon produit concerne une structure de table relationnelle qui nest pas en premire forme normale !
glossaire
API REST / SOAP : moyens daccs des mthodes distantes (groupes sous la dnomination Web Service), le premier bas sur le protocole http (le plus souvent envoi dune requte GET), le second ncessite de composer des messages XML au format normalis et dcrit dans un contrat de type WSDL, puis de dcoder le retour dans le mme format. Cloud computing : concept faisant rfrence lutilisation de ressources dordinateurs distants (un peu analogue au grid computing) situs dans un nuage (lInternet). Lutilisateur nest plus propritaire de son serveur mais y accde de manire volutive sans avoir grer linfrastructure. Elastifox : Extension de Firefox permettant une gestion dimages (choix, dmarrage, arrt, accs rseau, etc.). Image : configuration logique (type de processeur, RAM et disque, systme dexploitation et logiciels hbergs) choisie par lutilisateur distant. Instance : machine physique respectant la configuration logique choisie par lutilisateur distant. Web Service : technologie rpartie base sur la publication dun ensemble doprations dcrites dune manire plus ou moins normalise au sein dun contrat (interface) et invocables distance via tout langage. Les messages dappel et de retour sont majoritairement bass sur XML et transports par les protocoles du Web (http, smtp, https, etc.).
Conclusion
Malgr ces fonctionnalits allchantes, bon nombre dentreprises doivent se mfier de ces technologies. Amazon tente de les rassurer en leur proposant des contrats de niveau de service pour S3 et EC2 (taux de disponibilit 99,9 % et 99,95 %) et en rapprochant physiquement les services des clients. Des alliances ont dj vu le jour avec Capgemini et Salesforce. Dautres alliances sont aussi passes avec les plus grands diteurs comme Red Hat ou Oracle qui facilite lutilisation de 11g sur EC2. Aprs la mise en place de loffre de diffusion de contenu, Amazon prvoit de crer des nouvelles fonctionnalits pour EC2 (quilibrage de charge entre serveurs, console de gestion avec gestion dinstances en mode drag and drop et prsentation dinformations en temps rel sur ltat des systmes). Il est galement prvu une fonction daide au dimensionnement dinstances (autoscaling) en fonction des besoins rels. Christian Soutou
Laccs se fait via REST ou SOAP . LAPI propose diffrentes mthodes (CREATE pour les domaines de donnes, GET, PUT et DELETE pour les attributs lies un domaine, QUERY assorti de quelques options pour simuler un peu SQL).
CloudFront
CloudFront est une offre concurrente dAkamai, elle permet de diffuser du
38
Nouvelle version
PLATEFORME PROFESSIONNELLE DE DVELOPPEMENT (AGL) Pocket PC, Smartphone, Terminal Windows CE, Windows Mobile
Logiciel professionnel. Document non contractuel. Support technique gratuit: 15 requtes sur la version en cours de commercialisation. . WINDEV, WEBDEV et WINDEV Mobile sont compatibles.
Vous aussi ralisez vos applications mobiles 10 fois plus vite... avec WINDEV Mobile 14.
(Logiciel professionnel)
Logiciel professionnel
UN CODE MULTI-PLATEFORME : Windows, .Net, Java, PHP, J2EE, XML, Internet, Ajax, Pocket PC, SmartPhone, Client riche ...
www.pcsoft.fr
dossier \\ coding4fun
Coding4fun
Coder pour le
Le dveloppeur est aussi un grand enfant ! Non, la programmation nest pas ennuyeuse, rptitive ! La programmation demeure un jeu, un plaisir. Le dveloppeur aime chercher de nouvelles technologies, des gadgets, bref, coder pour samuser, rveiller son ct geek ! Dans notre dossier, nous allons dvoiler quelques ides de coding4fun : dtourner lusage de votre Wii remote (vous savez la fameuse manette de jeux de la console Wii de Nintendo), transformer votre tlphone Android en dictaphone, ou encore comment crer un gadget pour son Skype (si, si, on peut le faire). Dans la mme veine, on dcouvrira la conception dun widget en PHP avec les librairies Yahoo !, fonctionnant quasiment partout ! Autre ct fun, lutilisation dun zoom infini et surpuissant sur son site web avec la technologie DeepZoom de Silverlight, malheureusement encore peu utilise. Et enfin, nous dcouvrirons un petit langage qui, mine de rien, rconcilie tout le monde avec la programmation : le projet Smallbasic. Ce nest pas un hasard si Microsoft promotionne fortement le coding4fun avec un site bourr dides : http://blogs.msdn.com/coding4fun/ Google et bien dautres ne disent pas autre chose ! Avec le Coding4fun , nous allons nous divertir, programmer autre chose, prendre ou reprendre du plaisir dvelopper, concevoir un site, un logiciel sans nous prendre au srieux. Les neurones ont aussi besoin de se reposer et de jouer un peu. If geek Coding4fun = francoistonic endif
FUN
40
dossier \\ coding4fun
Wiimote, XNA et C#
La Nintendo Wii a connu un norme succs ds sa sortie malgr les deux grandes concurrentes que sont la Xbox 360 et la Playstation 3. Cest parce que la Wii a apport quelque chose dinnovant dans le Gameplay : une autre manire de jouer !
intendo a toujours domin le march des consoles portables mais a eu du mal survivre sur le march des consoles de salon lorsque Sony a dbarqu avec sa Playstation et que Microsoft en a " rajout une couche " avec la Xbox 360. Mais Big-N a russi survivre en sadressant une nouvelle cible de joueurs : les joueurs occasionnels. Ce nest pas tant au niveau des graphismes que la Wii sort du commun mais plutt grce sa manette, la Wiimote. Facile prendre en main et facile comprendre par la plupart des joueurs. Cette manette permet de dtecter les mouvements et de les retranscrire dans le jeu. " pourquoi est-ce que je vous raconte tout a ?", me direz-vous. Si vous lisez cet article cest que vous tes un minimum intress par le monde du dveloppement des jeux vido et savoir comment programmer les jeux les plus addictifs ? Pourquoi ne pas rutiliser llment le plus intressant de la Wii dans vos jeux : la Wiimote. Ou, autrement dit, comment utiliser la Wiimote dans vos jeux dvelopps en XNA ? Cest bien le but de cet article ! Alors Bonne lecture !
contrle utilisateur : MultipleWiimoteForm.cs SingleWiimoteForm.cs WiimoteInfo.cs Dans la premire fentre le programme va rechercher les diffrentes Wiimote disponibles et crer une tabulation dans notre fentre pour chaque Wii dcouverte : mWC = new WiimoteCollection(); int index = 1; try { mWC.FindAllWiimotes(); } catch(WiimoteNotFoundException ex) { MessageBox.Show(ex.Message, "Wiimote not found error", MessageBoxButtons.OK, MessageBoxIcon.Error); } catch(WiimoteException ex) { MessageBox.Show(ex.Message, "Wiimote error", MessageBox Buttons.OK, MessageBoxIcon.Error); } catch(Exception ex) { MessageBox.Show(ex.Message, "Unknown error", MessageBox Buttons.OK, MessageBoxIcon.Error); } foreach(Wiimote wm in mWC) { // create a new tab TabPage tp = new TabPage("Wiimote " + index); tabWiimotes.TabPages.Add(tp); } Dans ces tabulations se trouvera une instance du contrle utilisateur (WiimoteInfo.cs). Il ne vous reste plus qu dtecter les changements de la Wiimote. Pour cela, nous devons intercepter deux vnements : WiimoteChanged pour intercepter les vnements de base de la Wiimote.
41
D.R.
dossier \\ coding4fun
WiimoteExtensionChanged pour intercepter des extensions comme celle de Guitar Heroes. wm.WiimoteChanged += wm_WiimoteChanged; wm.WiimoteExtensionChanged += wm_WiimoteExtensionChanged; void wm_WiimoteChanged(object sender, WiimoteChangedEventArgs e) { WiimoteInfo wi = mWiimoteMap[((Wiimote)sender).ID]; wi.UpdateState(e); } void wm_WiimoteExtensionChanged(object sender, WiimoteExten sionChangedEventArgs e) { // find the control for this Wiimote WiimoteInfo wi = mWiimoteMap[((Wiimote)sender).ID]; wi.UpdateExtension(e); if(e.Inserted) ((Wiimote)sender).SetReportType(InputReport.IRExtension Accel, true); else ((Wiimote)sender).SetReportType(InputReport.IRAccel, true); } Les diffrents contrles utilisateurs ont t sauvs dans un tableau, ce qui nous permet dappeler une mthode du contrle utilisateur. Ces mthodes vont lancer un delegate qui mettra jour linterface utilisateur. Par exemple pour savoir quel bouton a t press : private void UpdateWiimoteChanged(WiimoteChangedEventArgs args) { WiimoteState ws = args.WiimoteState; clbButtons.SetItemChecked(0, ws.ButtonState.A); clbButtons.SetItemChecked(1, ws.ButtonState.B); clbButtons.SetItemChecked(2, ws.ButtonState.Minus); clbButtons.SetItemChecked(3, ws.ButtonState.Home); clbButtons.SetItemChecked(4, ws.ButtonState.Plus); clbButtons.SetItemChecked(5, ws.ButtonState.One); clbButtons.SetItemChecked(6, ws.ButtonState.Two); clbButtons.SetItemChecked(7, ws.ButtonState.Up); clbButtons.SetItemChecked(8, ws.ButtonState.Down); clbButtons.SetItemChecked(9, ws.ButtonState.Left); clbButtons.SetItemChecked(10, ws.ButtonState.Right); Je ne peux que vous conseiller de regarder et de tester plus en dtail les applications dexemples fournis avec la librairie pour vous donner une meilleure ide des possibilits.
Fig.1
La premire chose faire est de crer notre projet. Pour cela, ouvrez Visual Studio 2008 et crez un projet XNA Game Studio 3.0 : [Fig.2]. Une fois le projet cr, nous devons ajouter notre rfrence la DLL Wiimote. Game1.cs est la classe principale de notre programme. Program.cs va lancer cette classe comme nous en avons lhabitude dans nos dveloppements Winform. Game1 drive de Microsoft.Xna.Framework.Game qui, comme on peut le voir, est une classe du framework XNA. Dans notre classe, nous allons redfinir plusieurs mthodes : Initialize LoadContent UnloadContent Update Draw Dans la mthode Initialize, nous allons connecter la Wiimote et placer notre pointeur une position de base. Nous ne grons dans ce petit jeu quune seule Wiimote pour plus de facilit : protected override void Initialize() { wiimote.Connect(); wiimote.SetReportType(InputReport.IRAccel, true); wiimote.SetLEDs(false, true, true, false); position_pointer.Width = 31; position_pointer.Height = 31; position_pointer.X = this.Window.ClientBounds.Width / 2; position_pointer.Y = this.Window.ClientBounds.Height - 40; base.Initialize(); } Le contenu de notre application nest pas bien gros mais il ne faut pas oublier de lajouter notre solution dans Content. La mthode LoadContent va permettre de charger ces lments dans notre jeu : protected override void LoadContent() { pointer = Content.Load<Texture2D>("pointer"); // 31x31
42
dossier \\ coding4fun
Fig.2
target = Content.Load<Texture2D>("target"); // 100x100 } La Mthode UnloadContent na pas beaucoup dintrt, nous dconnectons simplement la Wiimote laide de la mthode Disconnect(). Cest dans la mthode Update que va se retrouver toute notre logique de gestion de la Wiimote. Nous devons rcuprer dans cette mthode la position de notre pointeur : position_pointer.X = wiimote.WiimoteState.IRState.IRSensors [0].RawPosition.X; position_pointer.Y = wiimote.WiimoteState.IRState.IRSensors [0].RawPosition.Y; On ajoute ensuite quelques cibles :
if (wiimote.WiimoteState.ButtonState.A) { wiimote.SetRumble(true); for (int i = 0; i < position_target.Count; i++) { if ((position_pointer.X + position_pointer.Width / 2) > position_target[i].position.X && (position_pointer.X + position_pointer.Width / 2) < position_target[i].position.X + position_target[i].position.Width && (position_pointer.Y + position_pointer.Height / 2) > position_target[i].position.Y && (position_pointer.Y + position_pointer.Height / 2) < position_target[i].position.Y + position_target[i].position.Height) { position_target.RemoveAt(i); } } } La mthode SetRumble est une mthode de la librairie de la Wiimote qui permet de la faire vibrer. Si le bouton nest pas press, on passe false comme argument la mthode SetRumble : else { wiimote.SetRumble(false); }
if (rnd.Next(100) == 1) { Random r = new Random(); int x = r.Next(100, this.Window.ClientBounds.Width-100); int y = r.Next(100, this.Window.ClientBounds.Height-100); position_target.Add(new Target(new Rectangle(x,y,100, 100), 0)); } position_target est une liste de Target, un objet que nous avons cr dans le projet : class Target { public Rectangle position; public double timer { get; set; } public Target(Rectangle r, double t) { position = r; timer = t; } } Pour vrifier si le joueur a tir, nous vrifions si le bouton A de la Wiimote a t press.Si oui, nous vrifions si nous avons bien vis une cible et dans ce cas nous supprimons cette cible :
Si la position de la cible est la mme depuis trop longtemps, nous la dplaons pour rendre le temps un peu plus compliqu : for (int i = 0; i < position_target.Count; i++) { position_target[i].timer += gameTime.ElapsedGameTime. TotalMilliseconds; if (position_target[i].timer > 1000*3) { position_target.RemoveAt(i); } } Nous devons enfin appeler la mthode de la classe de base : base.Update(gameTime); Voil qui termine notre petit jeu. A peu de choses prs (des oiseaux, et un petit dcor et plusieurs niveaux), cela ne vous rappellerait pas un petit jeu sur Super Nintendo ?
43
dossier \\ coding4fun
dans cette optique qua t cr le logiciel DeepZoom Composer que nous allons maintenant utiliser.
DEEPZOOM COMPOSER
Comment utiliser DeepZoom composer
DeepZoom Composer est un logiciel gratuit propos par Microsoft comme un outil de sa gamme Expression, permettant la cration des fichiers " images pyramides " de faon simple et rapide. DeepZoom Composer peut tre tlcharg sur le centre de tlchargement Microsoft. A linstar des autres logiciels de la suite Expression, DeepZoom Composer travaille avec des fichiers de projets (*.dzprj). En sortie, DeepZoom permet de sauvegarder les produits en diffrents formats tels quImages, Seadragon ou Silverlight. Cette dernire permet de gnrer directement une solution Silverlight pour Visual Studio 2008, cependant nous choisirons loption Images pour voir prcisment comment intgrer par nous-mmes les images pyramides dans Silverlight. En revanche, pour faire rapidement une simple application DeepZoom, cela pourrait vous tre utile. Une fois le projet cr, la composition dimages DeepZoom se fait en trois tapes : Import : vous pouvez importer dans le projet autant de fichiers images que voulu, afin de les intgrer ensuite dans limage finale. Composition : vous pouvez maintenant utiliser les images que vous avez prcdemment importes et les disposer comme bon vous semble dans lespace. Cet espace na dailleurs pas de limite de taille. Vous pouvez donc mettre un nombre arbitraire dimages. Export : il est maintenant temps dexporter le projet en vritable fichier pyramide afin de lexploiter dans Silverlight. Dans ce but, choisissez loption de sortie " Image ", donnez un nom, et choisissez lune des deux options dexport : Composition dimages
44
dossier \\ coding4fun
signifie que lassemblage dimages sera considr comme tant une seule grande image, alors que Collection dimages signifie au contraire que les images sont distinctes. Ca y est, vous avez cr votre premire image pyramide, il va falloir prsent crer le projet Silverlight et importer les fichiers gnrs par DeepZoom. Changeons doutil et ouvrons prsent Visual Studio 2008 ! ZIndex Comme les images peuvent maintenant se dplacer, il peut tre utile de changer leur ZIndex pour dcider quelle image sera visible si deux images se chevauchent.
PROPRIETES DU MULTISCALEIMAGE :
Source SubImages Comme nous venons de le voir, la source permet de donner ladresse du fichier de sortie XML. SubImages est une liste dlments MultiScaleSubImage permettant dobtenir toutes les images dune collection. Dans le cas dune composition la liste sera toujours vide. Le viewport dfinit ce que voit lutilisateur un instant donn. Lorigine du viewport est donc le point vue en haut gauche par rapport toute limage. Modifier ce point permet de se dplacer par programme dans le DeepZoom. La taille du Viewport donne la largeur de la partie vue par lutilisateur par rapport toute limage. Modifier cette valeur permet de changer la valeur de zoom par programme.
ViewportOrigin
ViewportWidth
METHODES DU MULTISCALEIMAGE :
ZoomAboutLogicalPoint Permet de zoomer dans le MultiScaleImage. Comme vous vous en doutez srement, la seconde classe qui nous sera utile dans le cas dune collection est la classe MultiScaleSubImage. On pourra manipuler toutes les images dune collection en utilisant la proprit SubImages de notre MultiScaleImage. Cette classe permet galement un certain nombre de traitements via ses proprits :
PROPRIETES DU MULTISCALESUBIMAGE :
Opacity On pourra manipuler lopacit de chacune des images sparment, ce qui peut tre particulirement utile dans le cas du filtrage des images. De mme que pour le MultiScaleImage, on peut changer lorigine du Viewport attach limage. Cependant dans ce cas, cest limage seule qui va se dplacer. Cela servira si lon veut dplacer les images sans changer la vue. On peut galement changer la taille du Viewport attach limage. Limage vise verra ainsi sa taille augmenter ou diminuer.
ViewportOrigin
ViewportWidth
45
dossier \\ coding4fun
Excutez votre application Silverlight, vous pourrez maintenant zoomer sur limage volont. En revanche, vous ne pouvez pas encore revenir en arrire dans limage. Deux solutions soffrent alors nous : ajouter un bouton pour faire un zoom en arrire, en utilisant la mme mthode que prcdemment ou bien utiliser la classe MouseWheelHelper. Cette classe, qui nest pas une classe standard de Silverlight (mais elle peut tre trouve ladresse suivante : http://blois.us/Silverlight/Scrolling2/MouseWheelHelper.cs) permet en effet dutiliser la molette de la souris pour zoomer et d-zoomer. Essayons de mettre en place cette seconde solution. Pour cela, nous devons avant tout garder dans une variable la dernire position de la souris. Dans ce but nous allons ajouter un gestionnaire pour l'vnement MouseMove, comme le montre lexemple suivant : <MultiScaleImage Name="msi" Source="dzc_output.xml" MouseLeftButtonDown="MultiScaleImage_MouseLeftButtonDown" MouseMove="MultiScaleImage_MouseMove"/> protected Point _lastMousePosition; private void MultiScaleImage_MouseMove(object sender, Mouse EventArgs e) { _lastMousePosition = e.GetPosition(msi); } Ajoutons maintenant linstance du MouseWheelHelper, puis un gestionnaire l'vnement Moved, tout cela dans le constructeur de Page : public Page() { InitializeComponent(); new MouseWheelHelper(msi).Moved += new EventHandler<MouseWheelEventArgs>(Page_Moved); } private void Page_Moved(object sender, MouseWheelEventArgs e) { if (e.Delta > 0) { Zoom(1.3f, _lastMousePosition); } else { Zoom(1 / 1.3f, _lastMousePosition); } } Vous pouvez prsent zoomer volont dans votre application DeepZoom. On pourrait galement garder dans une variable le coefficient de zoom, afin de pouvoir par exemple grer un zoom maximal. Enfin, nous allons voir comment nous dplacer dans le viewport, en faisant un glisser / dposer avec la souris. Pour cela il nous faut dabord ajouter deux variables supplmentaires, qui garderont la dernire position du viewport et dfiniront si lutilisateur est en train de dplacer la scne. protected Point _lastDragViewportOrigin; protected bool _isDragging = false; Changeons maintenant les actions dclenches lors du mouvement et du clic sur le MultiScaleImage afin de pouvoir changer la proprit ViewportOrigin lors du mouvement de la souris, si lon a auparavant dbut un drag, puis nous ajouterons le gestionnaire d'vnement MouseLeftButtonUp pour librer ce drag : private void MultiScaleImage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { if (!_isDragging) { this._lastDragViewportOrigin = msi.ViewportOrigin; this._lastMousePosition = e.GetPosition(msi); this._isDragging = true; } } private void MultiScaleImage_MouseMove(object sender, Mouse EventArgs e) { if (_isDragging) { Point newViewport = _lastDragViewportOrigin; Point currentMousePosition = e.GetPosition(msi); newViewport.X += (_lastMousePosition.X - currentMouse Position.X) / this.msi.ActualWidth * this.msi.ViewportWidth; newViewport.Y += (_lastMousePosition.Y - currentMouse Position.Y) / this.msi.ActualWidth * this.msi.ViewportWidth; msi.ViewportOrigin = newViewport; _lastDragViewportOrigin = newViewport; } _lastMousePosition = e.GetPosition(msi); } private void MultiScaleImage_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { this._isDragging = false; } Et voil, votre premire application DeepZoom est maintenant pleinement fonctionnelle !
POUR CONCLURE
Avec les outils que nous avons vus, vous pouvez faire nimporte quelle application DeepZoom. Les classes que nous avons rencontres sont simples et puissantes la fois et offrent beaucoup de libert. Si vous voulez manipuler de grandes photos ou faire une galerie dimages originale, nhsitez plus, DeepZoom est fait pour cela !
Sbastien Mornas sebastienmornas@gmail.com tudiant lEPITA au sein de la spcialisation Multimdia et Technologies de lInformation, Sbastien est passionn des technologies Microsoft.
46
dossier \\ coding4fun
Broadcast receiver
Plus puissant que le concept de Push registry disponible sous les profils MIDP 2.0 de Java ME, les Broadcast receivers (ou Intent Receiver) peuvent tre utiliss pour que du code ragisse un vnement extrieur comme une heure prcise, un appel entrant, Les broadcast receivers ne sont pas destins afficher une interface graphique bien quils puissent prsenter des Nofications pour alerter lutilisateur. Ils sont galement enregistrs par le biais du fichier AndroidManifest.xml, mais ils peuvent galement senregistrer programmaticalement au lancement de lapplication. A noter que tout comme le Push registry de MIDP une application , na pas besoin de tourner pour que ses intent receiver soient appels, lapplication sera dmarre si besoin est.
Activit
Lactivit est le composant le plus utilis dans une application, chacune reprsentant un cran de lapplication. Une application multicran - soit la plupart des applications - sera donc compose de plusieurs activits qui seront dmarres en fonction des actions utilisateur ou de la logique de votre programme. Chaque activit est implmente sous la forme dune classe qui hrite de la classe Activity. Chaque nouvelle activit est ajoute la pile dactivits de lapplication pour composer ce que lon appellera une tche. A chaque nouvelle activit au dessus de la pile, lactivit prcdente est conserve en pause pour tre affiche de nouveau lorsque lactivit du dessus de la pile sera retire. Intent et IntentFilter Android utilise le concept dIntent pour naviguer dun cran un autre, ou plutt dune activit une autre. Un Intent dcrit ce quune application veut raliser et on pourra associer le concept dIntent celui dun vnement dans la programmation vnementielle. Les deux parties importantes de la structure de donnes dun Intent sont laction et la donne sur laquelle on souhaite agir (exprime sous forme dURI). Par exemple, pour visualiser une page internet sur le navigateur, on crera en Java un Intent avec laction VIEW et lURI du site web :
Service
Un service correspond du code fonctionnant en tche de fond qui ne ncessite pas dinterface graphique. Si on prend lexemple dune application multimdia, une interface graphique peut tre ncessaire pour choisir un morceau de musique diffuser, mais lutilisateur peut lgitimement sattendre ce que la musique continue malgr lutilisation dautres activits.
Le fichier androidManifest.xml
Ce fichier, situ la racine de votre projet, est le fichier de description de votre application. Il est charg de dfinir l'application, son point d'entre, les permissions ncessaires pour le bon droulement de l'application, les librairies utilises, les Intents pour lesquels elle doit ragir, ... Il est indispensable au bon fonctionnement de l'application. La classe R.java Il s'agit d'une classe permettant d'accder l'ensemble des ressources de votre application. Toutes les ressources images, sons,
48
dossier \\ coding4fun
texte internationalis sont situes dans le rpertoire /res mais ne devront tre accdes qu' l'aide de cette classe R. Cette classe est gnre automatiquement par le plugin Eclipse. tion des fichiers XML est conseiller dans vos projets pour permettre des applications plus souples et une gestion plus simple et pratique des id des contrles. Nous allons tudier ces deux possibilits en crant deux " Hello world ". Cration dun nouveau projet Pour crer un projet Android, choisir File->New->Other, puis choisir Android Project. Dans lassistant de cration, voici les valeurs que je suggre, reste cliquer sur Finish. [Fig.2] Voici la structure cre automatiquement par Eclipse pour votre projet : [Fig.3] Avant de lancer le projet, quelques explications sont ncessaires, notamment concernant lactivit HelloWorld gnre. Activit Voici le code de lactivit : package com.programmez.android.helloworld; import android.app.Activity; import android.os.Bundle; public class HelloWorld extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } Grce cet extrait de code, on devine quune activit possde un tat et un cycle de vie linstar dune MIDlet Java ME. Les trois tats essentiels sont : active / running, quand elle est en premier plan lcran. paused, elle a perdu le focus, une autre activit est par-dessus avec de la transparence ou ne la recouvre pas totalement, elle est toujours visible par lutilisateur. stopped, elle est compltement masque par une autre activit et peut tre dtruite par le systme si besoin. Le cycle de vie complet dune activit est illustr dans le graphique et on remarque bien notre mthode onCreate, hrite de la classe Activity, que nous nimplmentons pas par hasard : [Fig.4]
Fig.2 Fig.3
49
dossier \\ coding4fun
XML-Layout (main.xml) Si lon fait une analogie avec la programmation Swing, lactivit est un container qui est organis pour prsenter une mise en page, que lon appelle aussi un layout. La ligne setContentView (R.layout.main) nous permet dutiliser le fichier main.xml grce la fameuse classe R que nous avons voque plus haut et donc dattribuer la mise en page du fichier main.xml notre activit. Voici le contenu de ce fichier : <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk /res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout> Ce fichier nous permet dobtenir une mise en page linaire verticale plein cran qui ne contient quun TextView affichant une chane de caractres. On aurait pu utiliser dautres layout disponibles comme le TableLayout (tableau), lAbsoluteLayout (placement en x,y). Pour afficher quelque chose lcran, une activit va travailler avec des objets View et ViewGroup. En effet, chaque activit nest quun conteneur qui contiendra des contrles (image, texte, etc.) qui porte le nom de vue dans Android. Une vue est une structure qui contient la mise en page dune surface rectangulaire de lcran et qui gre son affichage, linteraction avec les touches sur laire quil reprsente. La classe View est la classe de base pour tous les widgets graphiques - les contrles -comme le TextView, le RadioButton, Un groupe de vues a pour objectif de contenir et grer un ensemble de vues et/ou de groupes de vues.[Fig.5] Avec Android, on dfinit donc linterface graphique dune activit grce un arbre de vues et de groupes de vues. La mthode setContentView() permet dattacher cet arbre lactivit cre. Au moment de dessiner, chaque groupe sera ainsi responsable du dessin et de la disposition de ses enfants. Tout cela nous rappelle un peu lAPI Swing.
Fig.4
AndroidManifest.xml
Voici un exemple de manifest Android qui dcrit une application : <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res /android" package="com.programmez.android.helloworld" android:versionCode="1" android:versionName="1.0.0"> <application android:icon="@drawable/icon" android:label ="@string/app_name"> <activity android:name=".HelloWorld" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action .MAIN" /> <category android:name="android.intent.category .LAUNCHER" /> </intent-filter> </activity> </application> </manifest> A retenir dans ce manifeste, part le namespace et la structure globale que nous retrouverons chaque fois, la prsence du tag <application> qui contient la dclaration de tous les lments de lapplication. On retrouve licne de lapplication, le nom de lapplication et le tag <intent-filter> qui nous permet avec ces rglages de lancer lapplication via licne prsente dans lmulateur. Pour vrifier tout cela, il suffit de lancer lmulateur sparment grce lexcutable emulator.exe disponible dans le rpertoire /tools du SDK : [Fig.6]
50
dossier \\ coding4fun
ligne suivante pour pouvoir accder au micro : import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class HelloWorld extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* On a besoin d'une vue de type TextView pour afficher un texte */ TextView textViewInstance = new TextView(this); /* Put some text to the newly created TextView */ textViewInstance.setText("Hello world Programmez!"); /* Au lieu de passer un identifiant de ressource, on passe notre vue*/ this.setContentView(textViewInstance); } } <uses-permission _AUDIO" /> android:name="android.permission.RECORD
Le tour est jou ! Il ne nous reste qu simuler une carte SD. Tout dabord en la crant sous forme dimage de 256Mo par exemple : C:\android-sdk-1.1_r1\tools\mksdcard -l SD256M 256M C:\android -sdk-1.1_r1\card
Fig.7
Fig.8
Puis en ajoutant, dans les paramtres de lancement de lmulateur (ligne de commande ou alors dans les Run Configuration, Targets dEclipse) : -sdcard C:\android-sdk-1.1_r1\card [Fig.7] On aurait pu le faire grce une portion de code, mais pour simplifier les choses, scannons ensuite tous les fichiers multimdia de lappareil afin quils apparaissent dans notre playlist. Pour cela, il faut aller dans lapplication Dev Tools, Media Scanner, puis dans lapplication musique, menu songs pour couter notre enregistrement : [Fig.8]
Conclusion
Nous avons vu quAndroid est une plate-forme relativement accessible nimporte quel dveloppeur Java. Evidemment, nous navons pas pu prsenter tous les concepts en dtail dans cet article, ni toutes les subtilits du SDK. Nanmoins, la documentation fournie par Google est trs dtaille et vous y trouverez tous les lments pour dmarrer srieusement vos projets Android. Les appareils Android arrivent en France, les outils sont dj disposition, il ne vous manque que les ides pour offrir vos applications la communaut Android ! Rfrence Open Handset Alliance : http://www.openhandsetalliance.com/ Push registry : http://developers.sun.com/mobility/midp/articles/pushreg/ SDK Android : http://developer.android.com/sdk Eclipse : http://www.eclipse.org/
52
dossier \\ coding4fun
53
dossier \\ coding4fun
Des flches de dplacement en vertical / horizontal, Un bouton OK pour valider la slection courante. Ce mode de navigation et daffichage est important car nous le retrouverons dans la logique de conception de notre gadget SideShow. Les applications disponibles par dfaut sont un gadget daccueil et 2 jeux : Reversi et Columns (sorte de Tetris). Vous pouvez avoir un gadget Outlook 2007 si ce dernier est install. Ajoutez une rfrence lassembly Microsoft.SideShow.dll [Fig.9] Ajoutez une icne au projet en prenant soin de prciser les tailles 16x16, 32x32 et 48x48 en 32, 8 et 4 bits. Toutes les spcifications des gadgets SideShow en termes dexprience utilisateur et dergonomie sont donnes sur le site web MSDN : http://msdn.microsoft.com/en-us/library/aa970173(VS.85).aspx. Modifiez les paramtres du projet pour prciser que votre icne est celle utiliser par dfaut (Project | Properties | Application | Icon). [Fig.10] Modifiez Program.cs pour prciser les espaces de nommage utiliser : using using using using System.Threading; Microsoft.SideShow; Microsoft.SideShow.SimpleContentFormat; System.Reflection;
Puis, ajoutez le code denregistrement du gadget et de dsenregistrement dans le fichier Program.cs, ainsi que la partie de code qui vrifie que le gadget nest charg quune seule fois par le Gadget Manager. Ce code est le mme que celui gnr par dfaut dans le template de projet Gadget SideShow. static void Main(string[] args) { if (args.Length > 0) { Guid GadgetId = new Guid("{A0B00F4E-BDF8-4af7-A430-A 67176F03E75}"); switch (args[0].ToUpperInvariant()) { case "-R": GadgetRegistration.Register(false, GadgetId, ScfSideShowGadget.ScfEndpointId, "Skype", "\"" + Assembly.GetEntryAssembly() .Location + "\"", string.Format("\"{0}\",{1}", Assembly.GetEntryAssembly().Location, GadgetRegistration.DefaultIconResourceId), false, GadgetCachePolicies.KeepNewest, null); return; case "-U": GadgetRegistration.Unregister(false, GadgetId);
CRATION DU PROJET
Excutez Visual Studio et crez un projet de type Windows Forms en .NET Framework 2.0. [Fig.8]
Figure 6 - Exemple de navigation dans le gadget Figure 5 - Configuration du priphrique auxiliaire SideShow SideShow Windows Media Player
54
dossier \\ coding4fun
return; } } bool firstInstance = false; using (Mutex mutex = new Mutex(true, "A0B00F4E-BDF8-4af7A430-A67176F03E75", out firstInstance)) { if (firstInstance) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } La premire partie du code concerne lenregistrement (switch " -R ") du gadget et son " dsenregistrement " (switch " -U "). La seconde partie du code vrifie quil nexiste quune seule instance du gadget charge par le gadget manag. Modifiez la variable GadgetId pour prciser un identifiant unique pour votre gadget (utilisez pour cela lutilitaire fourni avec Visual Studio via le menu Tools | Create Guid). Lenregistrement dun gadget cre une cl dans la base des registres base sur lidentifiant du gadget (GadgetId) : HKEY_CURRENT_USER\Software\Microsoft\SideShow\Gadgets\... Vous pouvez " dsenregistrer " un gadget manuellement en supprimant la cl correspondant lidentifiant de votre gadget. Pour faciliter le processus denregistrement pendant la phase de dveloppement, modifiez les paramtres de post-compilation de votre projet (Project | Properties | Build Events | Post-build event command line) pour indiquer la commande suivante : "$(TargetPath)" R
Figure 8 - Cration d'un projet Windows Forms en .NET 2.0 ( noter le template de projet SideShow Gadget install avec le SDK)
55
dossier \\ coding4fun
public Form1() { // Cacher l'application Windows Forms WindowState = FormWindowState.Minimized; ShowInTaskbar = false; FormBorderStyle = FormBorderStyle.None; InitializeComponent(); // Initialiser SideShow InitializeSideShowPlatform(); } private void InitializeSideShowPlatform() { _scfGadget = new ScfSideShowGadget(gadgetId); #region Gestionnaires d'vnements SideShow _scfGadget.AllDevicesRemoved += new EventHandler (_scfGadget_AllDevicesRemoved); // TODO: ajouter les autres gestionnaires #endregion // Afficher un message d'accueil _scfGadget.AddGlanceContent(WelcomeMessage); } private void Form1_Load(object sender, EventArgs e) { // Cacher la fentre. this.Visible = false; UpdateContent(); } void _scfGadget_GadgetEnter(object sender, EventArgs e) { UpdateContent(); } private void UpdateContent() { // TODO: Constuire l'interface du Gadget. } Enfin lajout du code suivant permettra de terminer " proprement " le processus : void _scfGadget_AllDevicesRemoved(object sender, EventArgs e) { Application.Exit(); } Vous pouvez faire un premier test de votre gadget en le compilant. Noubliez pas denregistrer le gadget si cela nest pas fait automatiquement comme dcrit. Ouvrez ensuite le panneau de configuration pour Windows SideShow et votre gadget devrait apparatre. [Fig.11]. Slectionnez-le pour le charger dans le simulateur : [Fig.12]
tes
{0}.",
Nous allons modifier le code de la mthode UpdateContent pour afficher linterface de notre gadget. Cest ici que la comprhension du modle XML de SCF nous permet de construire des pages : private void UpdateContent() { string skypeUserStatus = string.Empty; try { skypeUserStatus = _skype.UserStatus.ToString(); }
56
dossier \\ coding4fun
catch { skypeUserStatus = "Inconnu"; } ScfElement userStatus = Scf.Txt(ScfAlign.Left, true, Color. White, string.Format("Votre statut: {0}", skypUser Status)); ScfElement content = Scf.Content(PageIDs.MainPage, PageTitles.MainPage, userStatus); _scfGadget.AddContent(content); } Ci-dessous la dclaration des classes statiques prives pour les identifiants des pages et les titres : private static class PageIDs { public const Int32 MainPage = ScfSideShowGadget.HomePage ContentId; } private static class PageTitles { public const string MainPage = "Informations"; } En ajoutant la rception dappel notre code (vnement IncomingCall de la classe SkypeManager), nous sommes maintenant capables dafficher le nom dune personne qui cherche nous joindre. void _skype_IncomingCall(object sender, IncomingCallEventArgs e) { _hasIncomingCall = true; _caller = e.Call.PartnerDisplayName; UpdateContent(); } Et la mthode UpdateContent devient alors : ScfElement caller = Scf.Txt(ScfAlign.Left, true, Color.White, "Pas d'appel entrant"); if (_hasIncomingCall) { caller = Scf.Txt(ScfAlign.Left, true, Color.White, string.Format("Appel entrant de: {0}", _caller)); } ScfElement content = Scf.Content(PageIDs.MainPage, PageTitles.MainPage, userStatus, Scf.Br(), caller); Compilez votre gadget, slectionnez-le ensuite dans le panneau de configuration pour Windows SideShow et utilisez le simulateur pour interagir avec. Dans notre exemple, le rsultat du code est le suivant : [Fig.13]
Note : Lors de lactivation du gadget SideShow, Skype alerte lutilisateur pour demander lautorisation dexcuter un programme externe. Il faut valider et autoriser lexcution du programme externe dans Skype comme le montre la fentre suivante : [Fig.14]
CONCLUSION
Dans cet article, nous avons prsent Windows SideShow et montr comment dvelopper et excuter un gadget grce au simulateur SideShow. Lutilisation des API .NET pour SideShow nous a permis de construire une interface simple en .NET Framework 2.0 grce au format SCF. Le dveloppeur peut choisir C++ ou Javascript pour implmenter ses gadgets SideShow. Il peut mme dvelopper et publier sur la galerie en ligne un gadget pour la Sidebar de Vista et driver ce gadget pour le rendre compatible avec un priphrique auxiliaire supportant SideShow. Pour aller encore plus loin, la documentation fournie avec le SDK est un trs bon support notamment pour toute la partie packaging et dploiement. Enfin, lexemple de cet article nous a aussi permis de prsenter trs succinctement les possibilits offertes par Skype pour le dveloppeur .NET au travers des API manages fournies par SharpLogic. Toujours plus de " code " moudre pour les dveloppeurs .NET passionns que nous sommes !
Figure 13 - Rception d'un appel dans Skype et mise jour des informations de notre gadget SideShow
Frdric QUEUDRET
CTO de la socit Mpoware, acclrateur dinnovation. Socit franaise ddition de logiciels et de prestations de services sur la cration doutils de productivit pour les dveloppeurs Visual Studio. http://www.mpoware.com/ Figure 14 - Autorisation d'excution du gadget SideShow pour Skype
57
dossier \\ coding4fun
vec la version 3 de Yahoo! Go, vous pouvez utiliser Yahoo!Blueprint pour crer toutes sortes d'applications pour les plates-formes Java, Symbian, Windows Mobile et aussi Yahoo! Go. Yahoo! Blueprint est un SDK et comme l'ensemble des outils Yahoo, ouvert, permettant ainsi d'tendre les possibilits vers le Web. Pour utiliser celui-ci, la meilleure faon de s'en servir concerne l'adoption et l'utilisation du langage PHP . Avec Yahoo! Blueprint vous allez pouvoir construire des applications riches et trs puissantes pour les tlphones mobiles, des sites et des widgets. La suite de cet article va sintresser la ralisation de ce dernier point : les widgets.
Ralisation
L'exemple utilis pour la partie thorique est tir de celui fourni par le SDK Yahoo! Blueprint et vous allez voir l'utilisation dun " Hello World ". Il se dcompose en deux parties, ce qui vous donne les bonnes pratiques pour voluer. Vous verrez aussi comment communiquer avec une API trs rpandue.
1 Configuration
Lorsque vous dsirez mettre en ligne un widget, vous devez crer un projet et soumettre un dossier " submission.zip ". Le contenu de ce dossier est reprsent par l'illustration 2 Dans ce dossier, 2 fichiers sont modifier : Le fichier " config.xml " contient les informations de votre projet : le titre, la description, l'icne utiliser, les renseignements concernant l'auteur, et l'emplacement de votre widget. La ligne la plus impor tante modifier concerne <widget base="http://votresite/widget"> car elle contient le chemin exact o se trouve la page " index " afficher. Le fichier " gallery.xml " contient les mtadonnes utilises par le Widget Gallery et permet de classer votre widget. Le dossier " ressources " contient les diffrentes icnes ncessaires pour que votre application puisse tre lue par tous les mobiles. Pour valider votre projet et le mettre en production, vous devez l'uploader sur votre compte l'adresse suivante : http://mobile.yahoo.com/devcenter/test/upload Si vous avez respect l'ensemble des rgles, vous obtenez un message de succs, sinon vous devez recommencer.
Principe
Avant de commencer, un petit rappel concernant les widgets. Ils intgrent un balisage XML et communiquent avec un serveur web externe. Votre widget peut se composer d'une ou plusieurs pages et les relier ensemble ou sparment (par exemple un formulaire de saisie et un retour d'informations par rapport la saisie). Un Widget suit une route entre la demande de votre visiteur et son affichage, comme le montre l'illustration 1.
Installation
Pour utiliser Yahoo! Blueprint, vous devez avoir dans votre microordinateur au moins les lments suivants : Yahoo! Blueprint SDK disponible http://mobile.yahoo.com/devcenter/ downloads PHP 5.2 Possder un compte Yahoo pour effectuer les tests de validation Yahoo! Blueprint est le point central de son utilisation, puisque ce SDK possde sa propre librairie et se trouve tre une plate-forme de dveloppement pour la cration d'applications mobiles. Lorsque vous aurez tlcharg la dernire version (actuellement la version 1.1), vous devrez le dcompresser dans le rpertoire de votre choix pour l'utiliser. Le contenu de ce fichier est trs vaste car il contient la librairie, les sources, les schmas d'utilisation et aussi les templates.
Fig.1
58
LINFORMATION EN CONTINU
www.solutions-logiciels.com
dossier \\ coding4fun
Fig.4
$writer = new XMLWriter(); $writer->openMemory(); $writer->setIndent( true ); $writer->startDocument('1.0','UTF-8'); //-----------------------------$page = new Blueprint_Page("Exemple Widget Flick R"); $module = new Blueprint_Module(); $page->addContent($module); //---- Definition chemin et communication $params = array( 'api_key' => 'VOTRE_CLEF', 'method'=> 'flickr.photos.getInfo', 'photo_id' => '2465397186', // numero de la photo 'format'=> 'php_serial', ); $encoded_params = array(); foreach ($params as $k => $v) { $encoded_params[] = urlencode($k).'='.urlencode($v); } $url = "http://api.flickr.com/services/rest/?".implode('&', $en coded_params); $chemin = curl_init($url); curl_setopt($chemin, CURLOPT_RETURNTRANSFER, true); curl_setopt($chemin, CURLOPT_HEADER, 0); $view = curl_exec($chemin); curl_close($chemin); //------Affiche le rsultat--$val = unserialize($view); if ($val['stat'] == 'ok') { $photo_title = $val['photo']['title']['_content']; $photo_url = "http://farm" . $val['photo']['farm'] . ".static.flickr.com/" . $val['photo']['server'] . "/" . $val['photo']['id'] . "_" . $val['photo']['secret'] . ".jpg"; $placard = new Blueprint_Placard("simple", $photo_title, $photo_url); $module->addContent($placard); }else{ $module->addContent("Call failed!"); } $page->Emit( $writer ); echo ( $writer->outputMemory() ); ?> Christophe Villeneuve Auteur du livre PHP & MySQL-MySQLi-PDO, Construisez votre application, aux Editions ENI. Trsorier de l'AFUP (Association des Utilisateurs de PHP), membre du LeMug.fr et contributeur de nombreux sites touchant PHP dont Nexen, PHP Team, PHPTV... , Contacter l'auteur : http://www.hello-design.fr
Crer un XML writer Cration de la page Envoyer des informations en-ttes de pages Ajouter le contenu Afficher Librer la mmoire Sur votre site, vous devez trouver au moins plusieurs fichiers comme le montre l'illustration 3
3 Mise en ligne
Ya h o o ! P r o p o s e l o r s d e l a v a l i d a t i o n d e v o t r e f i c h i e r " submission.zip ", un simulateur de mobile, vous permettant ainsi de voir le rsultat. Si tout a t valid, vous pouvez le dployer en spcifiant bien que votre visiteur doit possder un compte Yahoo pour l'utiliser. Avec la dcomposition de ces deux parties, vous avez les bases pour raliser votre propre Widget.
Cas pratique
Pour retenir la bonne API permettant d'tre utilise avec les Widgets, Yahoo! Propose un ensemble de choix tels que : afficher la mto, se positionner sur une carte, communiquer avec les rseaux sociaux...etc. L'auteur de l'article a retenu la communication avec l'API flickR permettant ainsi d'afficher une image en miniature dont le source PHP est fourni et le rsultat aussi (illustration 4). Pour dcrire le code source en PHP vous utiliserez la mme , mthode que prcdemment. Cependant lors de l'excution de la page en PHP vous utiliserez la mthode cURL vous permettant , ainsi de communiquer facilement avec une application ne vous appartenant pas. L'exemple qui est affich montre un titre d'illustration du Widget et dans le corps, la photo en miniature et le titre de la photo. <?php // index.php //------ Dclaration ----header( "Content-Type: application/x-ywidget+xml" ); header( "Cache-Control: no-cache" ); require_once( "lib/blueprint.php" ); blueprintSetErrorHandler(); //------- Preparation format XML
60
dossier \\ coding4fun
eaucoup dentre nous sont passs par les mthodologies classiques pour apprendre la programmation. Les notions de base de lalgorithmie, les premiers programmes rdigs sur des feuilles papiers, les notions de liste, pile, boucle, etc. Ah, que de souvenirs ! Puis nous avons toutes et tous commenc rdiger notre premier programme dans un langage : du C pour certains, C++ pour dautres, et pour certains chanceux du C#, Java.
Un second programme
A prsent, allons plus loin et faisons un peu de code pour samuser. Jaimerai pouvoir crer une galerie anime de photos issues de Flickr. Le principe consiste utiliser les mots cls (TAG) afin de gnrer une galerie photo. TextWindow.WriteLine("Bienvenue sur Programmez!") TextWindow.WriteLine("Merci de patienter quelques instants ") tag = "paris" // je choisis le TAG que jutiliserai pour flickr For i = 1 To 5 x = Math.GetRandomNumber(250) y = Math.GetRandomNumber(250) picName = Flickr.GetRandomPicture(tag) GraphicsWindow.DrawResizedImage(picName, x, y, 200, 200) EndFor Et voici le rsultat : [Fig.2] Avec Smallbasic, on peut tout faire ou presque avec un niveau de complexit variable. Ainsi, je peux trs bien crer un programme pour composer de la musique, crer mon jeu Tetris, ou rcuprer des donnes en ligne sur Flickr Voici quelques exemples que vous pourrez retrouver en ligne 1. Jouer de la musique sur SmallBasic : Voici une extension intressante permettant de faire de la musique avec SmallBasic : a. http://code.msdn.microsoft.com/ExtToneGenerator 2. Tetris by Kenny Kasajian : [Fig.3] Code source en ligne sur: http://cohendavid.net/archive/2009/04/07/ tetris-sous-smallbasic.aspx David Cohen - Responsable des Expriences numriques cohendavid.net
Fig.2 Fig.3
61
carrire \\ globetrotter
out ce qui est externalisable peut tre ralis ltranger : dveloppement dapplications, paramtrage, maintenance, test, hotline, support technique Les diteurs de logiciels open source font souvent appel des dveloppeurs trangers. Pour les SSII, travailler avec des trangers permet de faire des conomies, les salaires tant souvent bien infrieurs ceux qui sont pratiqus ici. Cest le cas en Chine, en Inde, au Maghreb, Madagascar ou dans lIle Maurice. Les pays les plus divers sont cits : lEurope de lEst pour la proximit, mais aussi des contres plus exotiques, comme le Sri Lanka, o par exemple lditeur de PGI (progiciel de gestion intgr) IFS a recrut 635 dveloppeurs en 2007, dans le cadre dun programme de responsabilit sociale. " Nous avons t amens regarder au-del des frontires de lEurope et des EtatsUnis pour trouver les talents ncessaires, tant sur les plans quantitatifs que qualitatifs ", indique lditeur. La SSII franaise Osiatis cite le Cambodgien Hakara Tea, ancien lve de lEcole Polytechnique, diplm de Tlcom ParisTech et titulaire dun MS en tlcoms de luniversit de Stanford, qui a lanc le CIST (Center for Information Systems Training) au Cambodge en 2005 : " La mission que sest
donne le CIST est doffrir de jeunes Cambodgiens dfavoriss une formation suprieure de qualit, qui les mne un emploi qualifi ", expose Hakara Tea. " Le Centre vise former des techniciens capables de grer de petits rseaux de 20 30 postes, pour lesquels il y a un vrai besoin dans le pays. "
Comptences et motivation
Pour faire face sa croissance et pour pallier le manque de main duvre qualifie en France, Avanade, intgrateur spcialis sur les technologies Microsoft, fait appel des ressources au Maroc, en Inde, en Malaisie et aux Philippines (Centres de Delivery near-shore et offshore). " Nous travaillons surtout sur des grands programmes de dimension internationale en Inde et aux Philippines, plutt en dveloppement pour lInde et en maintenance pour les Philippines ; et sur des projets francophones de plus petite taille, pouvant demander plus de souplesse, au Maroc ", explique Nicolas Marry, viceprsident Avanade France. Chez eXo Platform, 95 personnes sont rparties sur quatre pays : France, Ukraine, Vietnam, Etats-Unis, ce qui sexplique par le fait que deux des cofondateurs sont dorigine trangre : un Ukrainien, et un Vietnamien. Chez Talend,
62
reportage \\ globetrotter
russi en France et au Canada, notamment ", raconte-t-il. " Le gouvernement du Vietnam encourage activement la formation. Il y a des universits de trs haut niveau. " Les tudiants issus de ces filires sont gnralement dous en informatique, trs travailleurs, fortement motivs, et habitus trs tt " bidouiller " le matriel et le logiciel. Revers de la mdaille : ils travaillent surtout individuellement. " Ils sont trs motivs pour les mathmatiques et linformatique, ce que le gouvernement encourage en organisant des concours ds le lyce, do une dmarche plus individuelle ", explique Michel Mouyssinat. Daprs les responsables de stages dans les SSII dans lesquels ils vont travailler, " ils doivent sadapter, en particulier apprendre matriser la langue, mais ils deviennent trs vite autonomes et dveloppent beaucoup plus vite que les autres. " En Thalande, " on commence linformatique vers 15-16 ans au lyce ", rappelle le chef du projet Windows Light prsent par lquipe SKE ImagineCup 2008. Les Chinois de HongKong qui prsentaient le projet MEN Mobile ce concours avaient tous les quatre 17 ans et taient encore lycens. En Inde, les membres de lquipe JAL se sont initis linformatique ds ladolescence et lun deux a commenc coder 16 ans. Michel Brocq, grant de MB Conseil (www.mb-conseil.com), insiste sur les qualits des dveloppeurs malgaches et mauriciens avec lesquels travaille sa socit : " Les formations sont sensiblement identiques quen France, avec un cadre linguistique et culturel proche du franais, donc il ny a pas de problme de comprhension. Mais lenvironnement conomique fait quils ne bnficient pas des mmes structures dencadrement et de mthodologie ; il leur manque une comprhension globale de ce quest un projet, de la place du dveloppement dans un projet et de gestion dune quipe projet. Ils ont donc besoin dun encadrement cohrent. " Si le march local de lIle Maurice et Madagascar est peu demandeur, ces informaticiens peuvent fort bien travailler avec les PME franaises, soit directement, soit via des SSII locales, soit encore via des socits pivot, comme MB Conseil. " Gnralement capables dune bonne rflexion en mathmatiques et informatique, ils sont trs travailleurs, respectueux, savent sengager et ont envie de progresser ", ajoute Michel Brocq, qui se flicite aussi du turn-over relativement faible mme si, du fait de la tradition, la famille et les problmes personnels peuvent primer sur lassiduit professionnelle.
de stockage de donnes et dchanges dinformations inter linguistiques. La mission de Linh a donc consist dvelopper une application facilitant ces types de transferts et de traductions. Aprs un BTS en Informatique de gestion, Sbastien Farges, entre en Cycle Suprieur d'Ingnierie Informatique lEPSI et enrichit ses comptences techniques et en gestion. Il y rencontre un " epsien " sri lankais qui a dcid de monter une bote spcialise en dveloppement industriel, dont le secteur technique se situerait en Inde, et la partie commerciale en Europe. Hightechlead (www.hightechlead.com) est ainsi cre en juillet 2006 Chiennai, sur la cte est du pays, 150 km au nord de Pondichry, et Sbastien part en Inde pour la rejoindre en mars 2007. Son rle au sein de cette entreprise, qui dveloppe des logiciels de gestion sur mesure pour de petites structures, consiste faire lintermdiaire entre les dveloppeurs, indiens, et les clients, europens et notamment franais. " Les Indiens ont des coles en informatique de haut niveau, ils savent tout faire, mais nont pas de mthodologie ", a-t-il constat. " Sils sont bons techniquement, ils ont un gros problme de communication : la notion de contrat na gure de sens pour eux, ils ne comprennent pas ce qui est attendu et, sils ont besoin dexplication, ne prennent pas linitiative de demander. Les relations sont dordre affectif. Le turn-over est trs important. " Pour amliorer le fonctionnement de lquipe, Sbastien Farges a mis en place un modle avec une personne charge de faire le lien entre lquipe et le client. Claire Rmy
Deux Franais, issus de lEPSI, en Inde : Sbastien Farges, avec une marque rouge sur le front (symbole hindou), et Paul Mayer, stagiaire. En bas gauche, Ramesh Chelliah, fondateur de la socit Hightechlead et ancien lve de lEPSI.
Nouvelle rubrique :
technique \\ multicore
e nos jours, un compilateur ne peut se contenter de produire un binaire minimaliste, mme optimis. Il doit vous aider adopter une syntaxe plus claire, apporter un clairage nouveau sur votre code et surtout aider parallliser votre logiciel simplement. Un dveloppeur n'est jamais trop exigeant avec son compilateur. Une fois Parallel Studio install, pour utiliser le compilateur Intel il suffit de cliquer droit sur votre solution et demander sa conversion (la procdure est rversible). Il est important de noter que le compilateur et les librairies sont disponibles sur dautres plates-formes, et que les performances sont bonnes sur dautres processeurs que ceux dIntel, portabilit avant tout ! Parmi toutes les fonctionnalits de Parallel Composer, parlons donc des diffrentes manires de parallliser votre code, des extensions C++ d'Intel et des fonctions lambda.
OPENMP
OpenMP est un standard qui permet de parallliser rapidement un code avec un minimum de changements par rapport la version srielle. Le standard existe depuis plus de 10 ans, il a prouv son utilit dans le calcul scientifique et bnficie d'un soutien sans faille de l'industrie ; vous pouvez donc l'utiliser en production sans crainte. Historiquement OpenMP a commenc par l'ajout de pragmas simples, ces commentaires trs spciaux lus par certains compi-
lateurs. Par exemple une ligne "#pragma omp parallel for" place juste avant une boucle for permet de la parallliser. Diffrentes itrations de la boucle seront alors envoyes diffrents threads (crs automatiquement par OpenMP), et ce de manire totalement transparente et dynamique lors de l'excution. Vous pouvez mme spcifier quel algorithme de distribution vous souhaitez, tout cela sans changer une seule ligne de code. Vous pouvez certes programmer des threads en bas niveau avec C/C++, mais pourquoi ne pas laisser faire la machine virtuelle OpenMP ? Connatre OpenMP c'est l'adorer ! Si votre compilateur ne comprend pas OpenMP votre code sera compil , en sriel, donc aucun risque. Pour appliquer les instructions, il doit savoir mettre en place un cadre de calcul parallle dynamique lors de l'excution autour de votre code et de vos donnes, toute la complexit est donc reporte du dveloppeur vers le compilateur. Tche d'autant plus complexe que le standard, au dbut limit de simples fonctions, permet maintenant la paralllisation de cas beaucoup plus complexes. Le support d'OpenMP dans sa version rcente 3.0 devient donc un critre important lors du choix d'un compilateur. Dans sa mouture 3.0, OpenMP apporte notamment des amliorations dans la rcursivit. Il n'est pas simple de parallliser une liste de tches dont on ne connat pas l'tendue lavance, ou qui ont des dpen-
dances entre elles, deux caractristiques de bien des algorithmes rcursifs. Le nouveau concept de "Task" mettra une partie de votre code dans la liste d'attente des tches calculer en parallle (que vous n'avez pas grer), quels que soient le nombre et la complexit des tches ou la nature rcursive de leurs appels.
VECTORISATION ET OOO
Nous parlons souvent de paralllisation au niveau logiciel dans le but d'utiliser diffrents curs, mais la paralllisation peut aussi se faire au niveau matriel dans l'utilisation simultane de diffrentes units de calcul d'un mme cur. Soit vous utilisez ces units pour effectuer des calculs diffrents et indpendants, et c'est que vous avez un processeur "Out Of Order" (sans ordre dtermin). Soit vous les utilisez pour des calculs similaires sur des donnes diffrentes,
64
technique \\ multicore
nous parlons alors de vectorisation. Le calcul Out Of Order est une proprit de certains processeurs (dont les Core2 d'Intel) ou tout est gr automatiquement et de manire transparente, le compilateur intervient peu dans ce mcanisme. Par contre, la vectorisation ncessite l'emploi d'un jeu d'instructions spcifiques, les SSE (Streaming SIMD Extensions), LRBni (Larrabee New Instructions) ou futures Intel AVX (Advanced Vector eXtensions). Ces instructions sont gnralement ajoutes par le compilateur si votre code le permet mais il vous faut lui en faire la demande par des arguments lors de la compilation (ces arguments peuvent tre changs par des menus interactifs dans Visual Studio). Des exemples d'acclrations intressantes concernent les oprations arithmtiques simples, ou l'emploi de "valarray". que le sujet de discussion drive rapidement vers les fonctions lambda. Probable aussi que la discussion soit quelque peu thorique, faute d'avoir un compilateur capable de les comprendre jusqu' prsent et une exprience pratique de ces fonctions. Pour rsumer, une fonction lambda est une fonction dclare la vole lors de l'appel et dont la syntaxe est simplifie. Si vous n'avez besoin dune fonction qu'une seule fois, pourquoi la dclarer compltement et ne pas se concentrer sur son code utile la place ? Prsentes sous cet angle les fonctions lambda peuvent apparatre comme un lger raccourci syntaxique sans consquences. Elles sont en fait une rvolution dans le monde du C++ : elles marquent le passage d'une programmation procdurale vers une programmation fonctionnelle (en simplifiant). Ce n'est peut tre pas tout fait un hasard si Intel s'y intresse de si prs. Le support des fonctions lambda est demand par nombre de dveloppeurs et Intel se doit donc de l'incorporer dans le compilateur, mais plus gnralement, la programmation fonctionnelle devrait long terme permettre de tirer parti au mieux d'une architecture largement parallle, et ce avec un code simple et naturel. La programmation fonctionnelle n'entre pas en concurrence avec des technologies de calcul parallle comme OpenMP ou TBB (qui utilisent parfois des principes de programmation fonctionnelle), les deux approches sont complmentaires. cing ainsi que des fonctions plus bas niveau de traitement de signal. Pour le traitement d'image par exemple, profitez du Deffered Mode Image Processing. Le DMIP vous propose de dfinir tous les filtres et oprations que vous souhaitez sur une image comme un pipeline avant de l'excuter en optimisant l'utilisation du cache processeur. Utiliser un codec vido IPP dans votre logiciel offre une performance et une portabilit optimale assez simplement. Par contre, utiliser certaines fonctions de traitement de signal pour faire de la reconnaissance faciale est plus ardu. (Mais si ce sujet vous intresse, la librairie Open Computer Vision est trs amusante, plus facile utiliser et disponible sous licence BSD). Si vous suivez l'actualit des processeurs de trs prs, vous avez peut tre vu que le Core i7 "Nehalem" est sorti depuis peu et qu'il intgre un nouveau jeu d'instructions "STTNI" spcialis dans le traitement de chanes. Si vous travaillez dans la fouille de donnes profitez en ds maintenant avec des fonctions IPP comme "ippsFind*Any()". N'hsitez pas regarder la documentation d'IPP vous trouverez probable, ment des ides pour acclrer ou amliorer des parties de votre logiciel.
DIAGNOSTIC
Par dfaut, le compilateur Intel vous affichera un niveau de diagnostic comparable celui de Visual Studio. Mais il est souvent trs instructif de demander un affichage plus dtaill. Pour commencer, l'option "diagenable:level1" pourra dceler des incohrences comme des arguments incorrects ou des tests logiques inutiles. L'option "vec-report3" vous informera, elle, de la faon dont l'unit de vectorisation automatique du compilateur peroit votre code, pas seulement le rsultat de l'optimisation mais les raisons d'une non optimisation. Lorsque le compilateur ne peut dterminer avec certitude que deux donnes sont indpendantes, il suppose quelles sont dpendantes et empche de vectoriser une boucle ou elles sont prsentes. Bien souvent, de simples redfinitions de variables temporaires permettent de prouver lindpendance et de vectoriser. Et comme Parallel Composer est intgr Visual Studio vous verrez les messages de log lis votre code.
ET BIEN PLUS
Le compilateur Intel est dj trs complet et utile dans sa configuration actuelle avec OpenMP IPP et TBB , mais il le sera encore plus lavenir. Lorsque vous souhaiterez utiliser les ressources d'un acclrateur graphique comme Larrabee de manire transparente pour des simulations physiques ou une intelligence artificielle, il est fort possible que le compilateur joue un rle central. Si vous voulez programmer en parallle, en fonctionnel ou tout simplement crer des binaires plus rapides je vous encourage donc tester Intel Parallel Composer et donner votre avis sur les forums de software.intel.com. Paul Guermonprez Ingnieur logiciel Intel
IPP
Lorsque vous voulez optimiser l'utilisation matrielle de votre logiciel, la premire action prendre est souvent de remplacer vos librairies par des librairies optimises, parallles et "thread safe" (dont le comportement en mode parallle est garanti par le vendeur). Parallel Composer inclut la librairie Intel Performance Primitives ou IPP qui peut tre distribue gratuitement avec votre logiciel, ne vous privez donc pas de l'utiliser. IPP offre un panel de fonctions trs large : codecs vido, traitement d'image, reconnaissance faciale et vocale, compression, cryptographie, ray tra-
FONCTIONS LAMBDA
Si deux dveloppeurs C++ se croisent ces derniers temps, il est probable
65
code \\ ajax
1re partie
Il existe une multitude de librairies Ajax. Mais trs peu de cadres bien dfinis pour les utiliser. Ct serveur les choses se sont structures avec le temps.
APPLICATION : WEB
rie de gnration de flux html verront cette partie passablement inexploite. Une autre question qui vient rapidement lesprit est celle des performances. L effectivement il y a des choses qui penchent en faveur des deux approches. Sans Ajax les transferts entre le serveur et le navigateur sont alourdis par la dcoration HTML, et en Ajax, les codes clients sont lourds et longs charger. Je dois avouer que cette question est reste en suspens pendant longtemps et t pour moi un frein ladoption dAjax. Jai expriment de nombreux exemples de la littrature et dinternet et tout cela ntait pas en faveur dAjax. La documentation dExtjs est particulirement lente se charger et cela ne donne pas envie dutiliser la librairie. En fait, moyennant quelques prcautions, la situation devient trs vite acceptable. La toute premire est devenue pour moi une rgle dor : Ne jamais produire de JavaScript dynamiquement. En clair, aucun script JavaScript nest le rsultat dun traitement PHP La raison est trs simple. . JavaScript sexcute sur une machine virtuelle. Celle-ci lit un code source, le compile et lutilise. Lorsquon lui fournit deux fois le mme script, il nest lu et compil quune fois. Sauf lorsque ce code source est dynamique, auquel cas il est relu et recompil. Ceci implique quil est aussi transfr plusieurs fois. Cela peut paratre une limitation forte mais il nen est rien. Lide dAjax tait la base de ne transfrer que le ncessaire. Cette rgle nous aidera lappliquer jusquau bout. Il est tout de mme ncessaire de constater quune application Ajax vue du client met un certain temps dmarrer. Ct architecture de lapplication, nous avons un mode client/serveur. Avec un serveur en php bas sur un framework MVC, et un client en JavaScript qui sappuie sur une librairie JS. Jai cherch un vritable framework JavaScript. Vous allez trouver des librairies souvent bien faites, qui proposent une large palette de composants et un modle de programmation, mais pas un cadre de travail, ni un modle de conception. Je suis un adepte de MVC depuis trs longtemps et je me suis demand si son adoption dans ce cadre tait une bonne approche. Tout dabord dans la majorit des implmentations de MVC on trouve un master-controller ou front-controller et un dispatcher. Dans notre contexte, le cur mme de JavaScript contient lembryon dun tel contrleur. Les librairies comme Extjs lamliorent et vont mme jusqu limplmenter. La diffrence avec une implmentation MVC tant que ce cur va lui-mme grer tous les composants au lieu de dlguer le travail un contrleur. De plus, laccs la couche mtier nest pas spar et se trouve perdu dans le code des composants.
1. LARCHITECTURE
Avec ZF je suis habitu produire des web applications classiques. Les premires questions que je suis en droit de me poser sont : Lintroduction dAjax va-t-elle remettre en question larchitecture de mes applications ? Le modle MVC est-il remis en cause ? En effet, on sent bien que le fonctionnement dune application Ajax nest pas bas comme une webapp sur un enchanement de pages. Et effectivement une application Ajax est plus proche du mode client/serveur en vogue dans les annes 90 que de la webapp. La diffrence avec une application client/serveur est essentiellement que la relation entre les deux parties de lapplication se fait sur http et est donc commune toutes les applications Ajax. Lautre diffrence fondamentale est que la partie client sexcute dans un simple navigateur. Ce qui lve les deux plus gros inconvnients dans les applications client serveur. Ai-je encore intrt utiliser un framework destin faire des webapp dans ce contexte ? De par ma propre exprience je dirais oui. Mais le dbat reste ouvert. On bnficie ainsi de toutes les capacits du serveur grer le dialogue http. De plus, le framework apporte nombre de composants qui restent utiles dans ce cadre. Le modle MVC nest pas remis en cause. Dans une webapp, le navigateur demande une ressource (une url), le serveur lanalyse, donne la main un contrleur qui va invoquer le mtier et enfin retourne une vue. Dans notre contexte, ce nest pas le navigateur mais le client Ajax qui demande la ressource et la vue quil attend nest pas une page web mais un flux de donnes, lequel nest quune vue comme une autre. Effectivement les frameworks possdant une puissante librai-
2. AU CUR DE LACTION
Je vous propose donc de crer une petite application Ajax de gestion de contact. Un contact tant un nom, un prnom, un n de tlphone, et un genre. Les contacts sont placs dans des groupes (un nom de groupe). Notre application va prsenter lutilisateur une liste des contacts et la possibilit dajouter, modifier, supprimer
66
code \\ ajax
un contact. Jai donc dcid de dcouper mon application en composants. Le " ContactList " charg de la liste des contacts et " Contact " charg de ldition de contact, et " Core " le cur de lapplication charg du dmarrage et de quelques fonctionnalit gnrales. Voil pour le client. Ct serveur, jai dcoup mon application par domaine fonctionnel. Un ensemble " Contact " charg de la gestion des contacts et " Group " charg de la gestion des groupes. On voit immdiatement que les deux ne sont pas en bijection. Cela na aucune importance. <title>SimpleContact 2.0</title> <link rel="stylesheet" href="<?php echo $this->baseUrl; ?>/public/scripts/ext/resources/css/ext-all.css" type="text/css"> <link rel="stylesheet" href="<?php echo $this->baseUrl; ?>/public/scripts/ext/resources/css/xtheme-gray.css" type= "text/css"> <link rel="stylesheet" type="text/css" href="<?php echo $this->baseUrl; ?>/public/styles/application/app.css" /> <link rel="shortcut icon" href="<?php echo $this->base Url; ?>/favicon.ico" /> <link rel="icon" href="<?php echo $this->baseUrl; ?>/ favicon.ico" /> </head> <body scroll="no"> <div id="loading-mask"> <div id="loading-msg"> <div id="loading"> <img src="<?php echo $this->baseUrl; ?> /public/scripts/ext/resources/images/default/shared/large-loa ding.gif" width="32" height="32" align="bottom"/> Loading... </div> </div> </div> <!-- Ext library --> <script type="text/javascript" src="<?php echo $this-> baseUrl; ?>/public/scripts/ext/ext-base.js"></script> <script type="text/javascript" src="<?php echo $this-> baseUrl; ?>/public/scripts/ext/ext-all-debug.js"></script> <!-- Ext addons --> <script type="text/javascript" src="<?php echo $this-> baseUrl; ?>/public/scripts/core/sources/ext/CookieProvider. js"></script> <!-- App Components --> <script type="text/javascript" src="<?php echo $this-> baseUrl; ?>/public/scripts/core/sources/ContactList.js"></ script> <script type="text/javascript" src="<?php echo $this-> baseUrl; ?>/public/scripts/core/sources/Contact.js"></script> <script type="text/javascript"> Ext.app.baseUrl = '<?php echo $this->baseUrl; ?>/'; </script> <script type="text/javascript" src="<?php echo $this-> baseUrl; ?>/public/scripts/core/core.js"></script> </body> </html> Notez aussi le passage de la valeur de baseUrl de php Extjs. Cela permet ensuite dans tout le code client de ne faire rfrence qu Ext.app.baseUrl et donc de pouvoir installer lapplication nimporte quel niveau hirarchique du site. Nous verrons dans la 2e partie le ct client. Jean-Yves Terrien
Le premier contrleur
La premire chose faire est davoir un espace Zend_Framework en tat de marche. Cela nest pas le propos de cet article et je supposerais donc que cest le cas. Reportez vous la doc de ZF ou demandez de laide sur z-f.fr. Pour lancer notre application, il faut ouvrir une page web. Deux solutions se prsentent, une page purement statique, ou une vue dune action ZF. Jai choisi la deuxime solution car elle permet dinitier le dialogue entre le client et le serveur et utilise laction par dfaut. Ouvrez donc votre contrleur index ou crez-le. Laction index est celle qui nous intresse. JavaScript tant plus simple utiliser en UTF8, nous allons produire une vue dans cet encodage. Tous les changes entre le client et le serveur se feront en UTF8. class IndexController extends Application_Controllers_Action { public function indexAction() { // cette action affiche toute l'IHM (ajax) de l'application $this->_response->setHeader('Content-Type', 'text/html; charset=UTF-8', true); $this->view->baseUrl = $this->_request->getBaseUrl(); } } Dans notre exemple, ce code est minimal. Il dfinit lencodage et passe le baseUrl au client. Dans ZF, baseUrl est un paramtre qui dfinit le chemin de votre application par rapport la racine du site. Cest dans la vue que nous allons placer le ncessaire pour dmarrer le client. La vue est en gros la page HTML qui sera affiche. Nous allons y placer le chargement des feuilles de styles et les scripts de chargement du client. Dans le cas dune application Ajax, linterface est gnre par le JavaScript. Le code HTML est donc rduit sa plus simple expression autrement dit : dfinir le document, et les en-ttes. Nous avons l le strict ncessaire. Si nous faisons cela lors du dmarrage, lutilisateur et particulirement le premier aura une page blanche le temps que le JavaScript cre toute linterface. Nous allons donc placer un petit cran de bienvenue. Lors de son lancement, le JavaScript masquera cet cran pour laisser apparatre lapplication. Nous devons donc placer ces lments avant le JavaScript pour quils apparaissent immdiatement. <html xmlns:ext="http://extjs.com/docs"> <head> <meta http-equiv="content-type" content="text/html; char set=utf-8">
FORUM
code \\ serveur
Note : Il se peut que vous ayez des erreurs de permissions sur les dossiers, veillez les corriger.
68
code \\ serveur
Voil, vous avez un univers vous permettant de crer et de faire tourner une application web. Vous pouvez toujours amliorer la configuration de votre LAMP en parcourant les serveurs HTTP . Il faut inclure cette connexion en haut de page. Et ne pas oublier de mettre un mysql_close() la fin du code pour fermer cet accs la base de donnes. Sur notre page PHP nous commenons par tes, ter si un message est envoy avec la fonction " isset() " native de PHP Si elle nous retourne " true " cest que lon peut insrer le mes. sage dans la base de donnes. Il faut maintenant procder une vrification du message. Afin dviter tout injection SQL ou autre, nous allons utiliser deux petites fonctions : " htmlspecialchars " (ou " htmlentities ") ainsi que " mysql_real_escape_string ". En plus de cela, nous pouvons utiliser " nl2br " sur le message, afin de retrouver les sauts de ligne que lutilisateur a pu effectuer dans le textarea. On procde ensuite linsertion avec mysql_db_query(" base ", " requete ") dans notre base de donnes. La requte doit bien videmment tre en SQL. Ensuite, on passe laffichage des messages laisss. On doit donc parcourir la table de la base de donnes. Il faut effectuer une requte, puis parcourir le retour de celle-ci avec un " mysql_fetch_array() ". On peut alors afficher le nom de lutilisateur et son message. Voici un morceau de code permettant de faire ce qui a t expliqu prcdemment : <?php mysql_connect("localhost", "flo", "password"); if (isset($_POST['nom']) AND isset($_POST['message'])){ $nom_utilisateur = mysql_real_escape_string(htmlspecialchars ($_POST['nom'])); $message = mysql_real_escape_string(htmlspecialchars($_POST ['message'])); $message = nl2br($message); mysql_db_query("tuto","INSERT INTO livredor VALUES('', '".$ nom_utilisateur."', '".$message."')"); } //Vous pouvez insrer votre formulaire ici $reponse = mysql_db_query("tuto","SELECT nom, message FROM livre dor ORDER BY id DESC"); while ($donnees = mysql_fetch_array($reponse)){ echo '<p><strong>'.$donnees['nom'].'</strong> a crit :<br />'; echo $donnees['message'].'</p>'; } mysql_close(); ?> Vous pouvez bien videmment amliorer ce script. Ce nest quun exemple pour montrer le bon fonctionnement de notre univers LAMP Je conseille de connatre le HTML et le PHP pour utiliser cet . univers. Des cours sont disponibles sur internet et beaucoup de forums et sites proposent des scripts dj cods et fiables. Liens utiles : http://httpd.apache.org/ http://www.mysql.fr/ - http://fr.php.net/ http://www.siteduzero.com/ - http://www.solinux.fr/ Florian Dupuis - florian.dupuis@solinux.fr Dveloppeur web pour Solinux, une socit du groupe AlterWay.
69
code \\ patron
APPLICATION : TOUTES
public class BadPhotomaton { private private private private private private final static int HORS_SERVICE = 1; final static int MONNAYEUR_VIDE = 2; final static int MONNAYEUR_PLEIN = 3; final static int DEVELOPPEMENT = 4; int etat = HORS_SERVICE; int photos = 0;
BadPhotomaton(int nb) { photos = nb; if (photos > 0) { etat = MONNAYEUR_VIDE; System.out.println( "Inserez une piece"); } } public void insererPiece() { if (etat == HORS_SERVICE) { System.out.println( "Appareil Hors Service, reprennez votre piece"); } else if (etat == MONNAYEUR_PLEIN) { System.out.println( "Vous avez deja paye, reprennez votre piece"); } else if (etat == DEVELOPPEMENT) { System.out.println( "Developpement en cours, attendez votre photo"); System.out.println( "Reprennez votre piece"); } else if (etat == MONNAYEUR_VIDE) { System.out.println( "Selectionnez une photo"); etat = MONNAYEUR_PLEIN; } } public void boutonRecupererPiece() { if (etat == HORS_SERVICE) { System.out.println( "Appareil Hors Service"); } else if (etat == DEVELOPPEMENT) { System.out.println( "Developpement en cours, attendez votre photo"); } else if (etat == MONNAYEUR_VIDE) { System.out.println( "Pas de piece dans le monnayeur"); } else if (etat == MONNAYEUR_PLEIN) { libererPiece(); etat = MONNAYEUR_VIDE; }
70
code \\ patron
} } public void boutonIdentite() { if (etat == HORS_SERVICE) { System.out.println( "Appareil Hors Service"); } else if (etat == DEVELOPPEMENT) { System.out.println( "Developpement en cours, attendez votre photo"); } else if (etat == MONNAYEUR_VIDE) { System.out.println( "Pas de piece dans le monnayeur"); } else if (etat == MONNAYEUR_PLEIN) { etat = DEVELOPPEMENT; fairePhotoIdentite(); photos--; if (photos > 0) { etat = MONNAYEUR_VIDE; } else { etat = HORS_SERVICE; } } } public void boutonPortrait() { if (etat == HORS_SERVICE) { System.out.println( "Appareil Hors Service"); } else if (etat == DEVELOPPEMENT) { System.out.println( "Developpement en cours, attendez votre photo"); } else if (etat == MONNAYEUR_VIDE) { System.out.println( "Pas de piece dans le monnayeur"); } else if (etat == MONNAYEUR_PLEIN) { etat = DEVELOPPEMENT; fairePhotoPortrait(); photos--; if (photos > 0) { etat = MONNAYEUR_VIDE; } else { etat = HORS_SERVICE } } } private void fairePhotoIdentite() { System.out.println( "Prenez votre photo identite"); } private void fairePhotoPortrait() { System.out.println( "Prenez votre photo portrait"); } private void libererPiece() { System.out.println( @Override public String toString() { return "Capacite photos: " + photos; } } Chaque tat est dfini par une constante. Une variable se voit affecte une de ces constantes selon la situation. On remarque que les morceaux de code correspondant une action de l'utilisateur (appui sur un bouton) sont tous similaires et peu lgants. Dans chaque cas l'tat courant est test, ce qui implique que le code est une suite d'instructions conditionnelles. Dans un cas aussi simple que celui-ci, cela fonctionne trs bien. Le lecteur trouvera sur notre site la classe TestBadPhotomaton pour s'en convaincre. Si cela fonctionne trs bien, quel est donc le problme ? Dans un cas aussi simple il n'y en pas forcment. Toutes les instructions conditionnelles rsident dans les mthodes d'une seule classe. Si nous reprenons l'exemple du logiciel deux tats, en supposant que celui-ci soit un petit peu labor, ce ne sera probablement pas aussi facile. Trs vraisemblablement constitu d'un grand nombre de classes, il est craindre que les instructions de tests soient dissmines "un peu partout". Dj cette dissmination est un problme, car elle compliquera coup sr un travail de dveloppement en quipe. Mais admettons la limite. Il est malheureusement certain que le bt blessera cruellement la premire intervention de l'un des deux ennemis jurs du dveloppeur: le chef de projet et le client :) L'un deux, si ce n'est les deux viendront tt ou tard (mais toujours au plus mauvais moment... ;) demander une modification du code. Et c'est l que rien ne va plus. Rechercher dans un code volumineux des instructions dissmines, les modifier en se heurtant des situations contradictoires prendra dans le meilleur des cas beaucoup de temps, et en gnral introduira des bugs: un test oubli ici, un conflit l... "Recuperez votre piece");
code \\ patron
L'interface est un bon choix, mais pas ncessairement un choix unique ni mme le meilleur. Il est important de toujours garder l'esprit qu'un Design Pattern est une dmarche, une faon d'approcher un problme. Sa mise en oeuvre peut varier selon les situations et le talent du programmeur. Par exemple une classe abstraite pourrait tre plus pertinente s'il existe du code commun tous les tats. Nous reprenons ensuite le code de notre Photomaton. La classe se voit enrichie d'accesseurs pour chacun des tats. Dans la classe, le corps de chaque mthode de traitement se voit rduit l'invocation de la mthode correspondante de l'tat courant : public class GoodPhotomaton { EtatMonnayeurPlein etatMonnayeurPlein = new EtatMonnayeurPlein(this); EtatMonnayeurPleinPromo etatMonnayeurPleinPromo = new EtatMonnayeurPleinPromo(this); EtatMonnayeurVide etatMonnayeurVide = new EtatMonnayeurVide(this); EtatHorsService etatHorsService = new EtatHorsService(this); EtatDeveloppement etatDeveloppement = new EtatDeveloppement(this); EtatPhotomaton etat; int photos = 0; GoodPhotomaton(int nb) { photos = nb; if (photos > 0) { setEtat(etatMonnayeurVide); System.out.println( "Inserez une piece"); } } } void insererPiece() { etat.insererPiece(); } void boutonRecupererPiece() { etat.boutonRecupererPiece(); } void boutonIdentite() { etat.boutonIdentite(); } void boutonPortrait() { etat.boutonPortait(); } void fairePhotoIdentite() { System.out.println("Prenez votre photo identite"); } void fairePhotoPortrait() { System.out.println("Prenez votre photo portrait"); } Regardons maintenant l'implmentation d'un tat. L'implmentation des autres tats est similaire. Nous renvoyons le lecteur au code complet sur notre site. Dans le code ci-dessous on remarquera que l'tat conserve une rfrence sur son contexte (l'objet Photomaton autrement dit) et qu'il se charge de basculer le contexte sur un autre tat : class EtatMonnayeurVide implements EtatPhotomaton { GoodPhotomaton gp; String msg_vide = "Pas de piece dans le monnayeur"; EtatMonnayeurVide(GoodPhotomaton gp) { this.gp = gp; } public void insererPiece() { System.out.println( "Selectionnez une photo"); gp.setEtat(gp.getEtatMonnayeurPlein()); } void libererPiece() { System.out.println( "Recuperez votre piece"); } void setEtat(EtatPhotomaton nouveau) { etat = nouveau; } EtatPhotomaton getEtatMonnayeurVide() { return etatMonnayeurVide; } EtatPhotomaton getEtatMonnayeurPlein() { return etatMonnayeurPlein; } EtatPhotomaton getEtatHorsService() { return etatHorsService; } EtatPhotomaton getEtatDeveloppement() { return etatDeveloppement; } EtatPhotomaton getEtatMonnayeurPleinPromo() { return etatMonnayeurPleinPromo; } @Override public String toString() { return "Capacite photos: " + photos; }
72
public void boutonRecupererPiece() { System.out.println(msg_vide); } public void boutonIdentite() { System.out.println(msg_vide); } public void boutonPortait() { System.out.println(msg_vide); } } L'ensemble du code prsente une bien meilleure organisation et lisibilit. En revanche, chaque mdaille ayant son revers, il est beaucoup plus verbeux que le premier exemple. Presque deux fois plus volumineux, ce qui peut sembler norme. En outre les tats ne sont pas totalement dcoupls les uns des autres. Avons-nous finalement fait une bonne opration ?
code \\ script
Dcouvrir PowerShell 2
PowerShell est un vrai shell en ligne de commande pour Windows. L'outil est puissant. Son volution, PowerShell 2, l'est encore plus, notamment en raison de ses fonctionnalits de travail distance. Dcouvrons-le ensemble.
Programmez! vous a prsent PowerShell de nombreuses occasions, LANGAGE : .NET notamment dans les numDIFFICULTE SOURCE : OUI ros 93 et 99. PowerShell AVANC est une interface en ligne de commande ' la Unix' et qui faisait grand dfaut aux systmes Windows jusqu'alors. A la Unix ? Pas tout fait. Les systmes Unix ou Linux sont dots d'une interface en ligne de commande qui est constitue d'un ensemble de petites applications, gnralement crites en C ou en BASH (ou SH, ou autre) le langage intgr au Shell. Ces petites commandes mettent du texte destination de l'utilisateur sur une console, et un code de retour destination du Shell lui-mme. PowerShell est d'une conception trs diffrente. PowerShell est bas sur le Framework. Net. Il consiste aussi en un ensemble de commandes, baptises cmdlet. Avec PowerShell 1, ces commandes devaient tre crites en C#, en VB.Net, ou avec un autre langage .Net, ce qui indique clairement la nature de PowerShell: plutt que de travailler avec du texte, il manipule des objets. Si en PowerShell 2 il est dsormais possible d'crire des cmdlet directement en PowerShell, celui-ci garde toute sa spcificit de Shell orient objet, spcificit qui en fait tout l'intrt, car pouvoir travailler avec des objets c'est avoir toutes les classes du Framework .Net porte de main. PowerShell 2 apporte un lot d'amliorations qui vont sans doute faire de lui un outil incontournable pour les administrateurs. Le hobbyiste y trouvera aussi sans doute son compte. Nous allons dcouvrir ensemble quelques-unes de ces nouveauts, en commenant par un morceau de choix.
APPLICATION : SHELL
1 LE TRAVAIL DISTANCE
PowerShell 2 permet le travail sur machine distante, ou remoting. Cela ressemble ce que l'on peut faire sous Unix avec une connexion SSH, mais PowerShell permet lui de travailler avec plusieurs machines en mme temps. C'est trs intressant, c'est puissant, mais encore faut-il russir le faire fonctionner :) Nous avons fait quelques manipulations avec PowerShell CTP 2 (quelque chose de similaire une bta 2), seule disponible au moment de la rdaction de cet article. Le lecteur tlchargera donc PowerShell 2 sur le site de Microsoft. Le premier point important est que PowerShell travaille avec le service Winrm qui doit tre obligatoirement mis niveau. La page de tlchargement ddie PowerShell donne un lien sur winrm. Lors de la prparation de cet article, nous avons eu affaire un winrm en bta lui aussi, et qui mettait des sorties pour le moins surprenantes sur la console [Fig.1] Ceci pour dire qu'avant de passer aux essais avec PowerShell, il est prudent de penser sa dsinstallation future, et surtout la dsinstallation de winrm. Celui-ci vient dans un fichier .msu, c'est--dire un paquetage autonome de mise jour. Ce genre de fichier ne se dsinstalle pas comme une application, et il n'apparatra pas dans l'affichage gnral de l'applet 'Programmes et Fonctionnalits' du panneau de configuration. Cliquez alors sur le lien 'Afficher les mises jour installes'. Vous y retrouverez la mise jour sous le nom WindowsRemoteManagement comme illustr ci-contre. [Fig.2]. Demander ici la dsinstallation du service vous fera automatiquement revenir la version prcdente. Si vous n'tes pas sr de vous, vous pouvez prfrer crer un point de restauration systme avant de vous faire la main avec ces outils bta.
Fig.1
Fig.2
Sortie mise par la commande winrm help config... On ne souhaitera peut tre pas garder un service winrm bta sur sa machine :)
74
code \\ script
Le message suggre un problme de pare-feu ou d'inactivit du service SharedAccess. La raison de ce message d'erreur sous Windows Vista Home Premium est pour le moins obscure et le message doit simplement tre ignor. Enfin nous devons vrifier que winrm est actif : PS C:\Windows\System32> get-service winrm Status -----Running Name ---WinRM DisplayName ----------?indw? ?e?t? ??p?gemt (?S-???g...
Ne nous attardons pas sur le nom du service :) contentons nous de constater qu'il est actif (Running). Nous sommes enfin prts pour faire un peu de remoting.
3 UN PEU DE PRATIQUE
Sommes-nous vraiment prts ? Si les machines avec lesquelles nous voulons travailler sont dans un domaine, la rponse est oui. En revanche si les machines sont simplement connectes en rseau, le service winrm sur le poste client doit tre inform du ou des htes de confiance avec lesquels nous voulons travailler. Ainsi si nous souhaitons atteindre une machine baptise 'soleil', nous commenons par taper ceci dans le PowerShell client : winrm set winrm/config/client '@{TrustedHosts="soleil"}' D'aprs la documentation de winrm, il est thoriquement possible d'atteindre toutes les machines d'un rseau aprs l'excution de cette commande : winrm set winrm/config/client '@{TrustedHosts="<local>"}' Toutefois nos essais ne se sont pas rvls concluants. Pour un premier essai de commande distance, nous nous proposons de lister le contenu du disque C: de la machine distante 'soleil'. Un peu d'aide ne fait pas de mal. Sept documents sont notre disposition, nous pouvons les lister ainsi : PS > help about_remote* Name ---about_remote about_remote_FAQ about_remote_jobs about_remote_output about_remote_quoting about_remote_requirements about_remote_troubleshooting Puis pour en consulter un, par exemple : help about_remote_FAQ Si la fonctionnalit d'aide est casse sur votre machine, cela vient sans doute du fait que tous les fichiers sont situs dans C:\Windows\System32\WindowsPowerShell\v1.0\en-US Category -------HelpFile HelpFile HelpFile HelpFile HelpFile HelpFile HelpFile
Pour la configuration de winrm proprement dit, Powershell 2 vient avec un script qu'il vous suffit de lancer depuis la console PowerShell : configure-wsman Oui, ici, winrm s'appelle wsman :) Nous avons fait des essais avec des machines en rseau quipes de Windows Vista Ultimate et un ordinateur portable quip de Windows Vista Home Premium. Avec les premiers tout se passe parfaitement. Avec le dernier, le script met la fin de son excution un message d'erreur aussi inquitant qu'abondant et dont voici un extrait : CheckError : Error opening port 80 on system. \nCheck if the 'Windows Firewall/Internet Connection Sharing (ICS)' service is running using the following command:\n\n\t get-service SharedAccess\n\nIf the ser vice is not running, use the following to star t the service:\n\n\t netsh firewall set opmode enable\n
Fig.3
Pour le travail distance avec Powershell 2, la connexion rseau doit tre partage.
Oui, vous avez bien lu... v1.0, mais ceci n'a aucune importance. Par
ABONNEMENT PDF :
2,73 le numro
code \\ script
contre, faites une copie du rpertoire soit le nom C:\Windows\System32\WindowsPowerShell\v1.0\fr-FR pour rparer la fonctionnalit d'aide. Cette aide nous apprend que pour parvenir notre but, PowerShell 2 doit avant tout tre lanc avec les droits administrateur. Ensuite nous apprenons que nous devons utiliser la cmdlet invoke-command. Il reste bien comprendre la question des credentials, ce qui est ni plus ni moins que les login et mot de passe utilisateur sur la machine distante. Ceux-ci seront demands par chaque excution distante. Essayons avec cette commande : PS > invoke-command -scriptblock { ls c:\ } -computername so leil -credential soleil\fred s'ouvre alors une bote de dialogue demandant le mot de passe de l'utilisateur fred sur la machine soleil, comme illustr ci-dessous. [Fig.4]. Donnez le mot de passe, et miracle, le contenu du disque distant s'affiche sur votre poste client. Comme toute cmdlet peut tre excute ainsi, vous pouvez travailler sur la machine distante comme si vous y tiez. En revanche, saisir le mot de passe chaque commande est videmment invivable. Mais nous pouvons mmoriser une fois pour toutes le crdential dans une variable, comme ceci : $cred = get-credential soleil\fred la dure d'une session et aussi d'obtenir une connexion avec une machine distante de manire semblable ce que l'on fait sous Unix avec SSH. Examinons d'abord ce dernier point PS > $cred = get-credential soleil\fred PS > push-runspace -computername soleil -credential $cred [soleil]: PS G:\Windows\System32> A l'issue de l'opration le prompt sur notre console local a chang. Il indique dsormais que nous sommes connects la machine soleil. Nous pouvons excuter directement une commande sur cette machine : ls c:\ Il est remarquer que le procd ne peut tre appliqu en cascade. Ainsi depuis soleil nous ne pouvons atteindre une autre machine distante 'lune' tandis que nous le pourrions depuis notre machine locale, sur laquelle tourne la console PowerShell. Pour clore la session distante, il suffit de saisir : pop-runspace Crons maintenant deux runspace sur notre machine locale. (pour simplifier les commandes) PS > $rs1 = new-runspace PS > $rs2 = new-runspace Maintenant crons une variable dans chaque runspace. La variable porte le mme nom chaque fois : PS > invoke-command -runspace $rs1 -scriptblock {set-variable -name v -value "A"} PS > invoke-command -runspace $rs2 -scriptblock {set-variable -name v -value "B"} Chaque variable v est stocke dans un des environnements d'excution, ou runspace, cr prcdemment. Elles sont invisibles directement : echo $v ne donne rien. Dire qu'elles sont invisibles directement revient dire qu'elles ne font pas partie du runspace par dfaut, car toute session PowerShell en cre un. Nous pouvons accder nos variables en spcifiant le runspace : PS > invoke-command -runspace $rs1 -scriptblock {echo $v} A PS > invoke-command -runspace $rs2 -scriptblock {echo $v} B Parce qu'ils permettent l'excution en parallle de scripts sans risquer de collision dans les noms de variable, les runspaces de PowerShell 2 sont une fonctionnalit trs intressante qui prend tout son sens avec la fonctionnalit d'excution en arrire plan que nous examinons maintenant, mais non sans avoir d'abord pris soin d'effacer nos runspaces : PS > remove-runspace $rs1 PS > remove-runspace $rs2
qui ouvrira la bote de dialogue dont nous venons de parler. Ensuite les commandes auront cette allure : invoke-command -scriptblock { ls c:\ } -computername soleil credential $cred
4 NOTION DE RUNSPACE
Tout ceci est dj trs bien. Mais PowerShell 2 appor te aussi quelque chose de trs intressant, le runspace, ou espace d'excution. Cet espace permet de conserver des variables pendant
Fig.4
Pour lancer une commande distance sous PowerShell 2, login et mot de passe sont requis.
76
Nouvelle Formule
PROGRAMMEZ !
livre choc
www. programmez.com
Le magazine du dveloppement
mensuel n118 - avril 2009
www.programmez.com
Langage et code, dveloppement web, carrires et mtier : Programmez !, c'est votre outil de veille technologique. Pour votre dveloppement personnel et professionnel, abonnez-vous Programmez !
Enqute
Linux MULTI-TOUCH
sur
Comment a Les outils, les technologies disponibles Dvelopper vos Coder pour l'iPhone premires applications 2.0 Les dveloppeurs Au coeur du e-lab de Bouygues
Matriser les standards : marche ? AppChecker LSB,
La Rvolution du
Dvelopper
Jeux
Exclusif ! Vers dveloppement !Microsoft 3.0 2.0 Web Les projets secrets
Le match parlent en
Spcial
Les nouveauts PHP 5.3 Crer son moteur de template en PHP 5 AspectJ
Eclipse - Netbeans
technique
Tout savoir sur Eclipse 4.0 ENFIN DISPONIBLE ! SQL Server Flash
PHP Java
:
PHP et Google JavaSpaces de dveloppement : tout faire 2008 Multicur Matriser le bitmap avec la programmation par composants Le Resource Intgrer Google Maps et JSF futur de la modlisation 3 ActionScript Crer votre grid computing Dcouvrez le Programmer vos curs avec OpenMP M 04319 - 111 - F: 5,95 E Ce Governor que prpare Mozilla
UML
La le duo d'enfer UML et PHP :programmation par aspect facile ! : latelier WinDev
Outil
Et La charge OSLO aussi : Crer votre extension XUL Microsoft avec processeur iPhone / .net Linux : Dvelopper avec WMI pour Firefox ! Piloter votre des extensions Nautilus Windows Media Center avec iPhone
3:HIKONB=^UZ^Z]:?k@b@l@b@a;
Jeux :
Serveur GPU
+
Printed in France - Imprim en France - BELGIQUE 6,45 - SUISSE 12 FS - LUXEMBOURG 6,45 - DOM Surf 6,90 - Canada 8,95 $ CAN - TOM 940 XPF - MAROC 50 DH
3:HIKONB=^UZ^Z]:?k@l@b@c@a; Coding4fun
Open Source
Les fondamentaux de PHP
Abonnement Intgral : 1 an au magazine + archives sur Internet et PDF : 59 Tarif France mtropolitaine Abonnement PDF / 1 an : 30 - Tarif unique
Inscription et paiement exclusivement en ligne www.programmez.com
Printed in France - Imprim en France - BELGIQUE 6,45 - SUISSE 12 FS - LUXEMBOURG 6,45 - DOM Surf 6,90 - Canada 8,95 $ CAN - TOM 940 XPF - MAROC 50 DH
3:HIKONB=^UZ^Z]:?a@l@l@i@a;
11 numros par an : 49 *
Economisez 16,45 *
*Tarif France mtropolitaine
+ Abonnement INTGRAL
Vous pouvez vous abonner en ligne et trouver tous les tarifs
OUI, je mabonne
PROGRAMMEZ
www.programmez.com
Abonnement 1 an au magazine : 49 (au lieu de 65,45 tarif au numro) Tarif France mtropolitaine Abonnement Intgral : 1 an au magazine + archives sur Internet et PDF : 59 Tarif France mtropolitaine Abonnement Etudiant : 1 an au magazine : 39 (joindre copie carte tudiant) Offre France mtropolitaine
M. Mme Mlle
Entreprise :
........................................................................................
Fonction : ...................................................
Le renvoi du prsent bulletin implique pour le souscripteur l'acceptation pleine et entire de toutes les conditions de vente de cette offre. Conformment la loi Informatique et Liberts du 05/01/78, vous disposez d'un droit d'accs et de rectification aux donnes vous concernant. Par notre intermdiaire, vous pouvez tre amen recevoir des propositions d'autres socits ou associations. Si vous ne le souhaitez pas, il vous suffit de nous crire en nous prcisant toutes vos coordonnes.
Code postal : Tl :
...............................................
Ville :
...................................................................................................................................................................
........................................................................................
E-mail :
....................................................................................................................................
Je joins mon rglement par chque lordre de Programmez ! Je souhaite rgler rception de facture A remplir et retourner sous enveloppe affranchie : Programmez ! - Service Abonnements - 22 rue Ren Boulanger - 75472 Paris Cedex 10. abonnements.programmez@groupe-gli.com
PRO grammez !
Le magazine du dveloppement
PROG 119
code \\ script
PowerShell a attribu Job1 comme nom notre job. Nous pouvons nous servir de ce nom pour savoir si le job est termin : PS > get-psjob -Name "Job1" SessionId --------1 Name State HasMoreData Location Command ----- -------------- -------------Job1 Completed False localhost ls c:\
C'est le cas, (State Completed) nous pouvons donc en obtenir le rsultat, ce qui doit tre demand par la commande receive-psjob : PS > receive-psjob -name "Job1"
Directory: Microsoft.PowerShell.Core\FileSystem::C:\
#obtenir les rsultats une premire fois $result = invoke-command -runspace $rs -scriptblock {receive-ps job -name "Job7" -keep} #obtenir les rsultats une seconde fois et dernire fois $result = invoke-command -runspace $rs -scriptblock {receive-psjob -name "Job7"} Cependant, sauf erreur de notre part, la troisime approche ne fonctionne correctement que lorsque les machines font partie d'un domaine, du moins avec PowerShell bta 2
Il est possible d'utiliser la cmdlet wait-psjob pour attendre explicitement la fin d'un job. Il est encore possible de travailler avec des 'objets job', plutt qu'avec des noms de job gnrs par le systme. Exemple : PS > $j = start-psjob -command "ls c:\" PS > wait-psjob -job $j PS > receive-psjob -job $j
7CONCLUSION
PowerShell 2 recle encore d'autres innovations. Toutefois nous avons pu apprcier que les innovations que nous avons dcouvertes forment un tout la fois cohrent et d'une grande puissance pour l'administration des systmes Windows en local ou distance. Nous tudierons d'autres possibilits de PowerShell 2 dans un article venir. Frdric Mazu - fmazue@programmez.com
78
ludique \\ applications
1re partie
Dans les laboratoires, coles, centres de recherche, on dcouvre parfois de petites merveilles. Voici quelques exemples que nous avons retenus ! Bonne dcouverte.
Fig.1
Installation
[Fig.1] En ce qui concerne linstallation, vous avez deux choix possibles : un fichier binaire i586 ou un source compress .tar (en anglais, " source tarball "). Si vous choisissez le binaire, tlchargez tout dabord le fichier compress .tar fourni et extrayez-en le contenu vers un rper toire de votre choix. Ensuite, comme racine ou en utilisant sudo(1), copiez le fichier binaire vers /usr/bin ou vers votre rpertoire binaire prfr pour excuter BeeDiff au niveau systme. Puis copiez licne gnre, beediff.png, vers /usr/ share/icons ou vers le rpertoire dicnes de votre got.
Usage
BeeDiff est ax sur la comparaison de deux fichiers qui ont la mme origine, si bien que la comparaison de morceaux de code et de scripts sera la meilleure faon dutiliser les possibilits de BeeDiff. Lanez BeeDiff et une fois lintrieur, vous remarquerez deux volets (sous-fentres) principaux. L, vous chargerez un fichier
Youtube-dl
(1) sudo (abrviation de superuser do, en anglais : " super utilisateur fait ") est une commande informatique utilise principalement dans les systmes d'exploitations de type Unix et Linux. Elle permet un administrateur systme de donner un utilisateur (ou un groupe d'utilisateurs) la possibilit d'excuter une ou toutes les commandes en tant que super utilisateur, tout en gardant une trace des commandes tapes et des arguments.
[Fig.2] (www.arrakis.es/~rggi3/youtube-dl) Voici un tlchargeur YouTube. Pas dun grand intrt, puisque tout le monde en a dj fait usage auparavant, nest-ce pas ? En effet, mais il y a quelques mois, YouTube a modifi quelques options imbriques, rendant inutiles la plupart de ces jolis petits outils. Eh bien, ce petit script a t mis jour et tlcharge trs bien des vidos YouTube. Pour linstaller, sauvegarder simplement lURL fourni sur votre disque dur et cest tout ! Assurez-vous cependant que vous sauvegardez le nom du fichier comme tel et non avec une extension .html. Pour lutiliser, ouvrez un terminal dans le rpertoire o vous avez sauvegard le fichier. Assurez-vous que vous pou-
Vous tes maintenant prt vous lancer ! Trouvez votre clip-video YouTube favori et copiez son URL. Retournez sur votre terminal et tapez ./youtubedl, et collez lURL du clip-video juste aprs, cest--dire en tapant : $ ./youtube-dl http://youtube. com/watch?v=tNTWwbYYlgU A prsent, youtube-dl le sauvegarde sur votre disque dur et il dispose mme dun moniteur patant progression textuelle. Une fois tlcharg, le nom du fichier ressemble tout simplement des dtritus alatoires. Renommez le fichier avec le nomdevotreclip-video.flv (lextension .flv est la partie la plus importante), et ouvrez-le avec un bon logiciel video (video player) tel que VideoLAN ou Mplayer. Dr. Rodrigue Sabin Mompelat Enseignant-Chercheur, Ingnieur Logiciel, Copenhague - Danemark
Un outil amusant, utilisable sur la ligne de commande, pour sauvegarder des videos YouTube sur le disque dur
79
ludique \\ xbox
(suite et fin)
isponible en version trial pour les tudiants, il faut toutefois dbourser 99$ lanne (ou 44$ pour 4 mois) pour dbloquer cette fonctionnalit. Sacquitter de cette somme permet galement de dbloquer du contenu pdagogique supplmentaire sur le " Creator club " et de pouvoir vendre son jeu sur plusieurs millions de consoles via le Community Games. Nous allons prendre comme exemple Programmez Tycoon que nous allons porter sur XBOX 360.De manire gnrale, le portage est trs simple mais il y a quelques subtilits connatre. Aprs avoir effectu les diffrentes configurations ncessaires sur sa machine (cf lien), ouvrez votre solution, cliquez droit sur le projet et slectionnez tout simplement " Create Copy of Project for Xbox 360 ". XNA va alors crer un autre projet. Les modifications faites sur la version Xbox ou PC seront automatiquement reportes sur lautre, mme pour lajout de nouvelles ressources. Noubliez pas toutefois de slectionner le nouveau projet xbox comme projet par dfaut.
Vous avez peut-tre remarqu la premire ligne de code concernant la Xbox 360 ? On rcupre ltat dune manette en particulier. Le joueur pouvant trs bien se connecter avec la " manette 2 ". Pour le reste, la gestion de la manette est trs proche du clavier. Vous trouverez donc des mthodes utilitaires dans le code source fourni. Une fonction intressante toutefois est la gestion du retour de forces (les vibrations). Ce qui pouvait prendre un temps considrable se fait avec une facilit affligeante : /// <param name="lMotor">Intensit du moteur gauche (0 -> 1)</ param> /// <param name="rMotor">Intensit du moteur droit (0 -> 1)</ param> public void VibrateGamepad(float lMotor, float rMotor, int du ration) { GamePad.SetVibration(this.currentPlayerIndex, lMotor, rMo tor); this.vibrationDuration = duration; } Petit cas particulier mais qui a son importance, pensez mettre le jeu en pause lorsquaucune manette nest connecte. public void CheckForDisconnection() { if (!GamePad.GetState(this.currentPlayerIndex).IsConnected) { this.active = false; if (this.OnDisconnection != null)
Viva la revolucion !
La souris nest logiquement plus gre sur Xbox 360. On va alors dfinir le stick analogique (ThumbSticks) gauche pour la remplacer. La pression exerce sur le stick est traduite par une valeur comprise entre 0 et 1. En pratique, il sera courant de dfinir un comportement de certaines fonctionnalits du jeu spcifique notre console ou au PC (voire au Zune). Pour cela, on peut utiliser les directives conditionnelles de prprocesseur. #if !XBOX lastMouseState = currentMouseState; currentMouseState = Mouse.GetState(); // update position vector with mouse coordinates this.position = new Vector2(currentMouseState.X, current MouseState.Y); #else currentGamePadState = GamePad.GetState(this.currentPlayer Index); this.internalPosition += this.mouseSpeed * new Vector2(this .currentGamePadState.ThumbSticks.Left.X, -this.currentGamePad State.ThumbSticks.Left.Y); this.position = internalPosition; if (this.position.X < 0) this.position.X = 0; else if (this.position.X > Kernel.Instance.Width) this.po sition.X = Kernel.Instance.Width; if (this.position.Y < 0) this.position.Y = 0; else if (this.position.Y > Kernel.Instance.Height) this. position.Y = Kernel.Instance.Height; #endif
80
ludique \\ xbox
this.OnDisconnection(this, null); } } Le portage est un vrai bonheur mais quand on nest pas familier du dveloppement sur console, on se frotte des problmes trs particuliers. Nous en avons tout particulirement retenu deux : le Systme dIO et de la mmoire & la gestion des rsolutions et loverscan. public Kernel(Game game, Size windowSize, bool fullscreen) { // Creates and configures the graphic device this.graphicsManager = new GraphicsDeviceManager(game); this.initialSizeScreen = windowSize; this.graphicsManager.PreferredBackBufferWidth = windowSize .Width; this.graphicsManager.PreferredBackBufferHeight = window Size.Height; this.graphicsManager.PreferMultiSampling = true; // Keeps a game reference this.game = game; // Keeps the engine instance Kernel.instance = this; } Sur les tlviseurs 4:3, le jeu aura trs certainement des bandes noires sur les bords haut et bas de lcran. Bien entendu, il est possible de grer compltement et manuellement ce type de rsolution. Il suffira de checker le format dcran via la mthode GraphicsAdapter.DefaultAdapter.IsWidescreen. Je vous parle " doverscan " depuis tout lheure mais de quoi sagit-il ? Cest un problme inconnu sur PC car il ne se pose pas. En fait, certaines tlvisions naffichent pas la totalit de ce quelles devraient afficher, il y a souvent des pertes sur les bords latraux de lcran. Ces pertes peuvent tre de 10%. Dans la mesure o il est impossible de savoir o sont situs ces pertes sur lcran, il est trs fortement recommand de nafficher les informations importantes que dans la zone intrieure de lcran (gale 80% donc). Cette zone est appel la " Title Safe Area ". Attention, ce phnomne touche tout type de tlviseur : aussi bien sur de vieilles configurations que sur les crans HD. Pour grer le problme efficacement et surtout indpendamment de la rsolution dcran sans calcul pnible faire, XNA propose une mthode associe au Viewport (zone de lcran) afin de permettre de rcuprer les dimensions et positions de la Title Safe Area. // Rcupre le viewport actuelle (zone daffichage et les dimensions de la title safe area Viewport viewport = GraphicsDevice.Viewport; Rectangle safeArea = viewport.TitleSafeArea; antialiase. Et inversement. Nous dfinissons la taille de notre application lors de linitialisation du game engine :
Ressources :
Comment connecter sa xbox : http://www.benjamingauthey.com/page/Comment-installer-des-jeux-sur-Xbox-360-via-XNA.aspx Creator club : http://creators.xna.com/fr-FR zyggyware High Performance: http://www.ziggyware.com/readarticle.php?article_id=222
Laurat de lImagine CUP dans la catgorie jeu vido et soutenue par Microsoft, ECOThink dveloppe des jeux vido innovants grce la technologie XNA. contact@ecological-tycoon.com
Frdric PEDRO
FORUM
livres \\
livre du mois
RIA Flex 3
Difficult : ** / *** Editeur : Eyrolles Auteur : Laurent Jayr Prix : 29,90
Dans les platesformes des applications internet riches, Flex tient une place part. Par sa maturit et la qualit de ses outils et API. Lauteur brasse en 200 pages de nombreux thmes : Flex Builder, le Framework, linterface et sa conception, les effets et animations, la gestion de donnes. Il sagit de bien comprendre les fondations et le fonctionnement de Flex. A noter un point trs intressant : AMF et Flex. AMF se ddie linteraction entre le client et le serveur. Puis on enchane avec le serveur BlazeDS, un serveur open source sintgrant dans linfrastructure Flex. La dernire partie est tout aussi intressante avec la " migration " des applications sur la plate-forme desktop : Air. Un bon ouvrage pour bien dmarrer avec Flex. Seul regret : le manque de prsentation des outils tiers.
Practical Symfony
Difficult : *** - Editeur : Sensiolabs books Auteur : Fabien Potencier - Prix : 24,90
Vous utilisez le dsormais clbre Framework Php Symfony ou vous souhaitez lutiliser ? Ce livre se propose de faire une plonge assez complte dans Symfony. On dmarre par la cration dun projet, sa gestion. Puis on attaque dans le dur avec le modle de donnes, larchitecture MVC de la librairie, le support des services, les plug-in, la gestion cache, sans oublier de finir par le dploiement. En 24 jours, vous pouvez acqurir les bonnes bases pour coder en Symfony. Le livre contient beaucoup de code et de conseils pour bien matriser la librairie. Seul regret : disponible uniquement en anglais. Limpression se fait la demande sur www.lulu.com. techniques utiliser. Les nombreux tableaux et schmas permettent une meilleure assimilation.
solide et approfondi. Judicieusement dcoup en grandes parties, on dbute par les fondamentaux : les API, l a f f i c h a g e , les symboles, linteractivit. Puis lauteur rappelle avec prcision quil faut penser objet avec ActionScript. Et pourtant, cest loin dtre une section rbarbative ! Thibault explique les grands principes de lobjet avec des exemples ActionScript pour bien comprendre comment cela passe dans le langage. Mais comme ActionScript fait aussi de lanimation, une importante section concerne le graphisme, le son, la 3D. Un incontournable pour tout flexeur et flasheur.
INFRASTRUCTURE Zimbra
Difficult : ** Editeur : ditions Eni Auteur : Sbastien Don Prix : 54
La messagerie dentreprise est une composante vitale en entreprise. Si Microsoft Exchange continue tre trs prsent, le projet open source Zimbra se pose en alternative srieuse pour lentreprise. Cet ouvrage prsente de manire claire son architecture, son administration, son dploiement et les mcanismes de synchronisation. Idal pour sauter le pas vers Zimbra.
82
gnration, des solutions de-commerce aussi puissantes que faciles mettre en uvre. Mais cest dornavant galement une gamme doutils la pointe pour crer votre site en quelques clics ou pour gnrer vos newsletters, et vos campagnes demails marketing, ... Avec Dada, Amen prend sa nouvelle dimension autour de valeurs communes : innovation, fiabilit, simplicit, internationalisation,
convergence des services. Et une proccupation de tous les instants : faire de chaque client un client heureux
www.amen.fr
Nouvelle version
PLATEFORME PROFESSIONNELLE DE DVELOPPEMENT (AGL) Windows, .Net, Java Windows 98, 2000, NT, 2003, XP, Vista, 2008
*: WINDEV a t lu Langage le plus productif du march par les lecteurs de la revue Programmez!, octobre 2008
Logiciel professionnel. Document non contractuel. Support technique gratuit: 15 requtes sur la version en cours de commercialisation.
WINDEV 14
Logiciel professionnel
UN CODE MULTI-PLATEFORME : Windows, .Net, Java, PHP, J2EE, XML, Internet, Ajax, Pocket PC, SmartPhone, Client riche ...
www.pcsoft.fr