{"id":870,"date":"2011-06-01T08:00:06","date_gmt":"2011-06-01T07:00:06","guid":{"rendered":"http:\/\/www.alpesjug.fr\/?p=870"},"modified":"2011-06-01T09:56:37","modified_gmt":"2011-06-01T08:56:37","slug":"code-in-the-cloud","status":"publish","type":"post","link":"https:\/\/www.alpesjug.fr\/?p=870","title":{"rendered":"Code in the Cloud"},"content":{"rendered":"<p><a href=\"http:\/\/oreilly.com\/catalog\/9781934356630\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft\" title=\"CodeInTheCloud\" src=\"http:\/\/imagery.pragprog.com\/products\/178\/mcappe.jpg\" alt=\"CodeInTheCloud\" width=\"160\" height=\"200\" \/><\/a> Ca y est ! j&rsquo;ai\u00a0emprunt\u00e9\u00a0mon premier livre \u00e0 la <a href=\"http:\/\/www.alpesjug.fr\/?p=419\">librairie officielle du JUG<\/a>.<\/p>\n<p>J&rsquo;ai opt\u00e9 pour <a href=\"http:\/\/oreilly.com\/catalog\/9781934356630\"><strong>\u00ab\u00a0Code in the Cloud\u00a0\u00bb<\/strong> <em>(programming Google App Engine)<\/em><\/a> de <a href=\"https:\/\/twitter.com\/#!\/markcc\">Mark C. Chu-Carroll<\/a>.<\/p>\n<p>Voici ce que j&rsquo;en retiens.<\/p>\n<p>Ce livre est une tr\u00e8s bonne introduction aux diff\u00e9rents concepts et aux diff\u00e9rentes probl\u00e9matiques li\u00e9s \u00e0 la programmation sur le cloud de Google. L&rsquo;auteur s&rsquo;attache plus particuli\u00e8rement \u00e0 donner des solutions simples avec des exemples de codes en Python ou en Java (pas encore de Go) qui s\u2019ex\u00e9cutent sur l&rsquo;<a href=\"http:\/\/googleappengine.blogspot.com\/\">AppEngine<\/a> de Google.<\/p>\n<p>Il commence le livre en se focalisant sur les possibilit\u00e9s de g\u00e9n\u00e9ration de page Web avec les <a href=\"http:\/\/code.google.com\/appengine\/docs\/python\/gettingstarted\/\">API python<\/a> disponibles sur cette plate-forme, cela passe notamment par une mise en pratique des fonctions de templating embarqu\u00e9es avec Python.<\/p>\n<p>Une fois une couche graphique sommaire mise en place, l&rsquo;auteur bascule dans le monde Java pour pr\u00e9senter le <a href=\"http:\/\/code.google.com\/webtoolkit\/\">Google Web Toolkit<\/a>. Cette partie pr\u00e9sente une bonne introduction \u00e0 l&rsquo;utilisation de ce framework dans le cadre d&rsquo;une application simple mais l&rsquo;auteur fait l&rsquo;impasse sur les outils officiels propos\u00e9s par la firme de Mountain View (le plug-in Eclipse, le designer Graphique), ainsi que sur des concepts cruciaux comme l&rsquo;<a href=\"http:\/\/code.google.com\/webtoolkit\/doc\/latest\/DevGuideUiBinder.html\">UIBinder<\/a>.<\/p>\n<p>Apr\u00e8s la partie centr\u00e9e sur l&rsquo;IHM, on plonge\u00a0litt\u00e9ralement\u00a0dans les aspects \u00ab\u00a0persistance\u00a0de donn\u00e9es\u00a0\u00bb avec une pr\u00e9sentation des possibilit\u00e9s offertes par les <a href=\"http:\/\/code.google.com\/appengine\/docs\/python\/gettingstarted\/usingdatastore.html\">API Datastore<\/a>. Cette probl\u00e9matique sert aussi de support \u00e0 Mark pour expliquer plus pr\u00e9cis\u00e9ment comment tout cela fonctionne sous le capot dans BigTable.\u00a0Il passe en revue les probl\u00e8mes communs rencontr\u00e9s lorsque l&rsquo;on essaie de calquer un mod\u00e8le de persistance relationnel sur l&rsquo;AppEngine, ce point est d&rsquo;ailleurs abord\u00e9 en profondeur par l&rsquo;auteur \u00e0 la fois du point de vue du mod\u00e8le de donn\u00e9es Java\/Python (design du code) mais aussi du point de vue du param\u00e9trage de l&rsquo;application (n\u00e9cessit\u00e9 de d\u00e9finir des indexes).<\/p>\n<p>Ces indexes, utilis\u00e9s par le Datastore pour effectuer des recherches sur des donn\u00e9es pr\u00e9sentes dans BigTable, font d&rsquo;ailleurs l&rsquo;objet d&rsquo;un chapitre \u00e0 part enti\u00e8re dans lequel Mark explique ce qui peut \u00eatre fait automatiquement par la plate-forme et ce qui ne peut pas l&rsquo;\u00eatre.<\/p>\n<p>Une fois les principes de base pos\u00e9s et notre application de chat en ligne presque op\u00e9rationnelle, on a droit \u00e0 un tour d&rsquo;horizon plus ou moins d\u00e9taill\u00e9 des diff\u00e9rents <a href=\"http:\/\/code.google.com\/appengine\/docs\/java\/apis.html\">services transverses propos\u00e9s par AppEngine<\/a> :<\/p>\n<ul>\n<li>gestion et objectif d&rsquo;un cache applicatif (MemCache)<\/li>\n<li>authentification nativement support\u00e9e (UserService)<\/li>\n<li>communications externes (XMPP, Mail)<\/li>\n<li>gestion des jobs et de l&rsquo;asynchronisme (Cron, TaskQueue)<\/li>\n<\/ul>\n<p>Ce denier item, auquel un chapitre entier est d\u00e9di\u00e9, est d\u00e9crit en profondeur permettant ainsi aux futurs d\u00e9veloppeurs de faire le choix de la bonne API pour leur probl\u00e9matique. Cette partie apporte d&rsquo;ailleurs beaucoup d&rsquo;informations aux personnes qui connaissaient d\u00e9j\u00e0 les APIs de bases pour pousser un peu plus loin l&rsquo;utilisation du SDK.<\/p>\n<p>Pour finir, Mark prend un peu de recul sur la plate-forme et explique en quelques pages les pi\u00e8ges \u00e0 \u00e9viter concernant la s\u00e9curit\u00e9 dans les applications d\u00e9ploy\u00e9es sur l&rsquo;AppEngine.<\/p>\n<p>L&rsquo;ouverture par laquelle se cl\u00f4t le bouquin pr\u00e9voit quelques am\u00e9liorations qui entre temps sont devenues r\u00e9alit\u00e9 comme la ChannelAPI ou le support du langage Go.<\/p>\n<h2>Bilan<\/h2>\n<p>Ce livre propose un passage en revue int\u00e9ressant des possibilit\u00e9s offertes aux applications h\u00e9berg\u00e9es sur l&rsquo;AppEngine, il p\u00eache n\u00e9anmoins sur la pr\u00e9sentation de l&rsquo;outillage existant qui se r\u00e9sume \u00e0 pr\u00e9senter la console en ligne d&rsquo;administration d&rsquo;une application et les scripts python utilis\u00e9es pour d\u00e9ployer une application sans s&rsquo;int\u00e9resser ni \u00e0 l&rsquo;industrialisation d&rsquo;un projet (lancement d&rsquo;une instance locale, tests unitaires), ni aux facilit\u00e9s offertes par le <a href=\"http:\/\/code.google.com\/eclipse\/\">plug-in Eclipse de Google<\/a>.<\/p>\n<p>Le livre est tr\u00e8s agr\u00e9able \u00e0 lire, les extraits de code sont clairement expliqu\u00e9s, les concepts abord\u00e9s de mani\u00e8re assez simple et couvre toutes les pr\u00e9occupations de base lorsque l&rsquo;on cherche \u00e0 faire une application sur AppEngine.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ca y est ! j&rsquo;ai\u00a0emprunt\u00e9\u00a0mon premier livre \u00e0 la librairie officielle du JUG. J&rsquo;ai opt\u00e9 pour \u00ab\u00a0Code in the Cloud\u00a0\u00bb (programming Google App Engine) de Mark C. Chu-Carroll. Voici ce que j&rsquo;en retiens. Ce&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[],"class_list":["post-870","post","type-post","status-publish","format-standard","hentry","category-livre"],"_links":{"self":[{"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/posts\/870","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=870"}],"version-history":[{"count":14,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/posts\/870\/revisions"}],"predecessor-version":[{"id":899,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/posts\/870\/revisions\/899"}],"wp:attachment":[{"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=870"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=870"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}