{"id":102,"date":"2010-12-05T21:43:03","date_gmt":"2010-12-05T19:43:03","guid":{"rendered":"http:\/\/www.bittner.fr\/blogs\/pierre\/?p=102"},"modified":"2010-12-05T21:43:03","modified_gmt":"2010-12-05T19:43:03","slug":"choix-du-framework-part-2","status":"publish","type":"post","link":"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/","title":{"rendered":"Choix du framework (part 2)"},"content":{"rendered":"<p>Bon hier soir (la nuit derni\u00e8re) j&rsquo;ai un peu d\u00e9riv\u00e9 de mon objectif qui \u00e9tait de choisir le framework de d\u00e9veloppement.<\/p>\n<p>Je voulais avoir une big picture de ce qui se fait actuellement sur les sites communautaires \/ r\u00e9seaux sociaux \/ smartphone en terme d&rsquo;API de communication. C&rsquo;est sur qu&rsquo;apr\u00e8s 4 ans dans la finance, je n&rsquo;avais pas trop suivi les grosses tendances de d\u00e9veloppement distribu\u00e9 (ca ne se fait plus le RMI, xml schema, le SOAP ou le XML\/RPC ? \ud83d\ude42 Les grosses tendances semblent \u00eatre REST \/ JSON \/ Atom \/ HttpRequest, OAuth, etc&#8230; Bon bref c&rsquo;est pas tr\u00e8s important tout ca mais ca m&rsquo;a permis de voir ce qui se passer et modeler un peu mes besoins.<\/p>\n<p>Retour aux frameworks de d\u00e9veloppement ce matin donc. Pour r\u00e9sumer pour l&rsquo;instant j&rsquo;ai Java et comme h\u00e9bergement Google App Engine. J&rsquo;ai pass\u00e9 pas mal d&rsquo;ann\u00e9es sur les framework web (struts, spring mvc, JSP, taglibs, freemarker + de la veille techno:\u00a0 wicket, JSF, tapestry ) et persistance (jdbc \/ procedure, ibatis, hibernate, jdo) avec spring pour lier tout ca. Sur le dernier projet, j&rsquo;ai mis en place une configuration bas\u00e9 sur les annotations (hibernate\/spring) et c&rsquo;\u00e9tait assez convaincant je dois dire (partie pr\u00e9sentation avec swing).<\/p>\n<p>Bon maintenant l&rsquo;objectif est de pondre un truc super rapidement (prototype\/crud) mais suffisamment s\u00e9rieusement pour ne pas avoir \u00e0 tout refaire quand l&rsquo;application marchera (si jamais elle marche).<\/p>\n<p>Il y a pas mal de nouvelles technos int\u00e9ressantes dans le monde java (scala, <a href=\"http:\/\/clojure.org\/\">clojure<\/a>, groovy) sans parler de ce qui se fait niveau web2 (jQuery, GWT), <a href=\"http:\/\/www.zeroturnaround.com\/jrebel\/\">JRebel <\/a>(d\u00e9veloppement \u00e0 chaud) et la tendance No SQL.<\/p>\n<p>Fred qui bosse dans le monde des jeux vid\u00e9os online est un big fan de <a href=\"http:\/\/www.scala-lang.org\/\">scala<\/a>. Par contre ca me semble \u00eatre un peu un univers a part enti\u00e8re et j&rsquo;ai un peu peur de la learning curve pour mon projet. A priori, <a href=\"http:\/\/code.google.com\/p\/googleappengine\/wiki\/WillItPlayInJava#Scala\">Scala est support\u00e9 sur GAE<\/a>. Bon c&rsquo;est tentant mais on essaiera ca plus tard.<\/p>\n<p>Pour le no sql, c&rsquo;est un passage oblig\u00e9 puisque la persistance sur GAE se fait \u00e0 travers BigTable. Le seul choix est donc JDO ou JPA cot\u00e9 persistance. Pour ceux qui ne savent pas, <a href=\"http:\/\/en.wikipedia.org\/wiki\/BigTable\">BigTable <\/a>est une base de donn\u00e9e hi\u00e9rarchique. C&rsquo;est sans trop de regret que je quitte le SQL ayant pass\u00e9 trop de temps dans les proc\u00e9dures stock\u00e9es ces derni\u00e8res ann\u00e9es. Et puis j&rsquo;ai un autre projet en t\u00eate que je verrais bien sur une base de <a href=\"http:\/\/en.wikipedia.org\/wiki\/Column-oriented_DBMS\">donn\u00e9es orient\u00e9es colonnes<\/a>.<\/p>\n<p>Cot\u00e9 <a href=\"http:\/\/www.springsource.org\/\">spring<\/a>, j&rsquo;ai vu des solutions int\u00e9ressantes pour mobile (<a href=\"https:\/\/www.bittner.fr\/blogs\/pierre\/?p=90\">voir post pr\u00e9c\u00e9dent<\/a>). Mon soucis est plut\u00f4t le cout en temps de la mise en place (note: j&rsquo;aurais pu utiliser <a href=\"http:\/\/www.springsource.org\/roo\">spring roo<\/a> mais voir note en bas du post). Et puis c&rsquo;est un framework que je connais trop bien, j&rsquo;ai envie de passer \u00e0 autre chose notamment tester un framework a la <a href=\"http:\/\/rubyonrails.org\/\">ruby on rails<\/a> (<a href=\"http:\/\/fr.wikipedia.org\/wiki\/Convention_plut%C3%B4t_que_configuration\">convention plut\u00f4t que configuration<\/a>)\u00a0 et des langages dynamiques.<\/p>\n<p>Le candidat est donc tout choisi (la recherche est termin\u00e9e on pourrait dire): <a href=\"http:\/\/www.grails.org\/\">Grails<\/a>. R\u00e9ponse Java \u00e0 RoR avec du <a href=\"http:\/\/groovy.codehaus.org\/\">Groovy<\/a> inside. Ca semble pas mal. Initialement con\u00e7u pour tourner avec <a href=\"http:\/\/www.hibernate.org\/\">hibernate <\/a>(qui lui ne tourne que sur des bases SQL), une couche d&rsquo;abstraction a \u00e9t\u00e9 ajout\u00e9e pour faire du JDO\/JPA (<a href=\"http:\/\/grails.org\/doc\/latest\/guide\/5.%20Object%20Relational%20Mapping%20%28GORM%29.html\">GORM<\/a>). J&rsquo;ai fait quelques recherche, ca semble pas trop mal tourner sur <a href=\"http:\/\/code.google.com\/intl\/fr\/appengine\/\">Google App Engine<\/a> (GAE) et m\u00eame sur <a href=\"http:\/\/aws.amazon.com\/\">Amazon Web Services<\/a> (AWS). Et ca s&rsquo;est faire du <a href=\"http:\/\/grails.org\/REST+plugin\">REST <\/a>et du <a href=\"http:\/\/www.grails.org\/GWT+Plugin\">GWT<\/a>. Bonheur<\/p>\n<p>Bon on va partir la dessus, on verra bien. Ci dessous quelques guides qui pourront m&rsquo;\u00eatre utile.<\/p>\n<p>Next step installation de l&rsquo;environnement de d\u00e9veloppement.<\/p>\n<ul>\n<li><a href=\"http:\/\/www.grails.org\/plugin\/app-engine\">Grails AppEngine plugin<\/a> (grails.org)<\/li>\n<li><a href=\"http:\/\/stackoverflow.com\/questions\/1314732\/scala-vs-groovy-vs-clojure\">Scala vs. Groovy vs. Clojure<\/a> (stackoverflow.com)<\/li>\n<li><a href=\"http:\/\/fbflex.wordpress.com\/2009\/06\/03\/grails-on-the-google-app-engine-everything-you-wanted-to-know-but-were-afraid-to-ask\/\">Grails on The Google App Engine: Everything you wanted to know but were afraid to ask <\/a>(fbflex.wordpress.com)<\/li>\n<li><a href=\"http:\/\/fbflex.wordpress.com\/2009\/05\/07\/grails-scaffolding-crud-templates-for-google-app-engine-java\/\">Grails Scaffolding CRUD Templates for Google App Engine \/ Java <\/a>(fbflex.wordpress.com)<\/li>\n<li><a href=\"http:\/\/www.touilleur-express.fr\/tag\/grails\/\">Les Archives du Touilleur Express &#8211; Articles taggu\u00e9s: grails<\/a><\/li>\n<li><a href=\"http:\/\/www.touilleur-express.fr\/2009\/06\/18\/google-app-engine-grails-et-spring-mvc\/\">Google App Engine, Grails et Spring MVC<\/a> (touilleur-express.fr)<\/li>\n<li><a href=\"http:\/\/www.morkeleb.com\/2009\/08\/12\/grails-and-google-appengine-beginners-guide\/\">Grails and Google AppEngine Beginners Guide<\/a> (morkeleb.com)<\/li>\n<li><a href=\"http:\/\/www.morkeleb.com\/2009\/07\/27\/grails-and-google-appengine-on-windows\/\">Grails and Google AppEngine on Windows<\/a> (morkeleb.com)<\/li>\n<li><a href=\"http:\/\/www.stainlesscode.com\/site\/comments\/grails_one_to_many_scaffolding\/\">Grails Custom One-To-Many Scaffolding<\/a> (stainlesscode.com)<\/li>\n<li><a href=\"http:\/\/code.google.com\/p\/googleappengine\/wiki\/WillItPlayInJava\">WillItPlayInJava <\/a>(code.google.com)<\/li>\n<li><a href=\"http:\/\/objectuser.wordpress.com\/2009\/07\/04\/17-minute-jdo\/\">17 Minute JDO!<\/a> (objectuser.blog(brain))<\/li>\n<li><a href=\"http:\/\/thoughts.inphina.com\/2010\/09\/26\/google-app-engine-some-jpa-gotchas\/\">Google App Engine Some JPA Gotchas<\/a> (thoughts.inphina.com)<\/li>\n<li><a href=\"http:\/\/stackoverflow.com\/questions\/2004669\/grails-vs-roo-why-springsource-is-pushing-two-very-similar-technologies\">Grails vs Roo &#8211; why SpringSource is pushing two very similar technologies?<\/a> (stackoverflow.com)<\/li>\n<li><a href=\"http:\/\/blog.excilys.com\/2009\/12\/11\/grails-episode-1-presentation\/\">Grails \u2013 \u00e9pisode 1 \u2013 Pr\u00e9sentation<\/a> (blog.excilys.com)<\/li>\n<li><a href=\"http:\/\/blog.excilys.com\/2009\/12\/14\/grails-episode-2-creation-du-domaine\/\">Grails \u2013 \u00e9pisode 2 \u2013 Cr\u00e9ation du domaine<\/a> (blog.excilys.com)<\/li>\n<li><a href=\"http:\/\/blog.excilys.com\/2009\/12\/21\/grails-episode-3-branchement-des-controleursvuesservices\/\">Grails \u2013 \u00e9pisode 3 \u2013 Branchement des contr\u00f4leurs\/vues\/services<\/a> (blog.excilys.com)<\/li>\n<\/ul>\n<p>En \u00e9crivant la liste de site, je me suis dit et pourquoi pas spring roo ? Grosso modo roo est un g\u00e9n\u00e9rateur d&rsquo;application spring. Il y a tout ce qui faut pour faire une application dans le cloud. Les grosses diff\u00e9rences \u00e9tant java vs groovy et configuration vs convention. Je reste donc sur grails&#8230;<\/p>\n<p>Je suis tomb\u00e9 \u00e9galement sur quelques articles parlant de probl\u00e8me de performance avec GAE sur java. A priori, cela semble du \u00e0 l&rsquo;instanciation de nouvelle jvm ou le d\u00e9marrage (warmup d&rsquo;une application). <a href=\"http:\/\/googleappengine.blogspot.com\/2010\/12\/happy-holidays-from-app-engine-team-140.html\">Google vient de sortir la version 1.4 de GAE<\/a> qui semble offrir des solutions <a href=\"http:\/\/googleappengine.blogspot.com\/2009\/12\/request-performance-in-java.html\">\u00e0 ses probl\u00e8mes de performances<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bon hier soir (la nuit derni\u00e8re) j&rsquo;ai un peu d\u00e9riv\u00e9 de mon objectif qui \u00e9tait de choisir le framework de d\u00e9veloppement. Je voulais avoir une big picture de ce qui se fait actuellement sur les sites communautaires \/ r\u00e9seaux sociaux \/ smartphone en terme d&rsquo;API de communication. C&rsquo;est sur qu&rsquo;apr\u00e8s 4 ans dans la finance, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-102","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Choix du framework (part 2) - Pierre&#039;s weblog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Choix du framework (part 2) - Pierre&#039;s weblog\" \/>\n<meta property=\"og:description\" content=\"Bon hier soir (la nuit derni\u00e8re) j&rsquo;ai un peu d\u00e9riv\u00e9 de mon objectif qui \u00e9tait de choisir le framework de d\u00e9veloppement. Je voulais avoir une big picture de ce qui se fait actuellement sur les sites communautaires \/ r\u00e9seaux sociaux \/ smartphone en terme d&rsquo;API de communication. C&rsquo;est sur qu&rsquo;apr\u00e8s 4 ans dans la finance, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Pierre&#039;s weblog\" \/>\n<meta property=\"article:published_time\" content=\"2010-12-05T19:43:03+00:00\" \/>\n<meta name=\"author\" content=\"Pierre\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Pierre\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/\"},\"author\":{\"name\":\"Pierre\",\"@id\":\"https:\/\/www.bittner.fr\/blogs\/pierre\/#\/schema\/person\/3ab57f92769bc1c95b4f56d526b0b225\"},\"headline\":\"Choix du framework (part 2)\",\"datePublished\":\"2010-12-05T19:43:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/\"},\"wordCount\":898,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.bittner.fr\/blogs\/pierre\/#\/schema\/person\/3ab57f92769bc1c95b4f56d526b0b225\"},\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/\",\"url\":\"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/\",\"name\":\"Choix du framework (part 2) - Pierre&#039;s weblog\",\"isPartOf\":{\"@id\":\"https:\/\/www.bittner.fr\/blogs\/pierre\/#website\"},\"datePublished\":\"2010-12-05T19:43:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.bittner.fr\/blogs\/pierre\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Choix du framework (part 2)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.bittner.fr\/blogs\/pierre\/#website\",\"url\":\"https:\/\/www.bittner.fr\/blogs\/pierre\/\",\"name\":\"Pierre's weblog\",\"description\":\"Release 2.3\",\"publisher\":{\"@id\":\"https:\/\/www.bittner.fr\/blogs\/pierre\/#\/schema\/person\/3ab57f92769bc1c95b4f56d526b0b225\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.bittner.fr\/blogs\/pierre\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.bittner.fr\/blogs\/pierre\/#\/schema\/person\/3ab57f92769bc1c95b4f56d526b0b225\",\"name\":\"Pierre\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/www.bittner.fr\/blogs\/pierre\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.bittner.fr\/blogs\/pierre\/wp-content\/uploads\/2025\/09\/Pierre-Bittner.png\",\"contentUrl\":\"https:\/\/www.bittner.fr\/blogs\/pierre\/wp-content\/uploads\/2025\/09\/Pierre-Bittner.png\",\"width\":1920,\"height\":1080,\"caption\":\"Pierre\"},\"logo\":{\"@id\":\"https:\/\/www.bittner.fr\/blogs\/pierre\/#\/schema\/person\/image\/\"},\"sameAs\":[\"http:\/\/www.bittner.fr\/blogs\/pierre\",\"https:\/\/www.linkedin.com\/in\/pierre-bittner\/\",\"https:\/\/www.youtube.com\/@pierrebittner\"],\"url\":\"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Choix du framework (part 2) - Pierre&#039;s weblog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/","og_locale":"fr_FR","og_type":"article","og_title":"Choix du framework (part 2) - Pierre&#039;s weblog","og_description":"Bon hier soir (la nuit derni\u00e8re) j&rsquo;ai un peu d\u00e9riv\u00e9 de mon objectif qui \u00e9tait de choisir le framework de d\u00e9veloppement. Je voulais avoir une big picture de ce qui se fait actuellement sur les sites communautaires \/ r\u00e9seaux sociaux \/ smartphone en terme d&rsquo;API de communication. C&rsquo;est sur qu&rsquo;apr\u00e8s 4 ans dans la finance, [&hellip;]","og_url":"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/","og_site_name":"Pierre&#039;s weblog","article_published_time":"2010-12-05T19:43:03+00:00","author":"Pierre","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Pierre","Dur\u00e9e de lecture estim\u00e9e":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/#article","isPartOf":{"@id":"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/"},"author":{"name":"Pierre","@id":"https:\/\/www.bittner.fr\/blogs\/pierre\/#\/schema\/person\/3ab57f92769bc1c95b4f56d526b0b225"},"headline":"Choix du framework (part 2)","datePublished":"2010-12-05T19:43:03+00:00","mainEntityOfPage":{"@id":"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/"},"wordCount":898,"commentCount":0,"publisher":{"@id":"https:\/\/www.bittner.fr\/blogs\/pierre\/#\/schema\/person\/3ab57f92769bc1c95b4f56d526b0b225"},"articleSection":["Uncategorized"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/","url":"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/","name":"Choix du framework (part 2) - Pierre&#039;s weblog","isPartOf":{"@id":"https:\/\/www.bittner.fr\/blogs\/pierre\/#website"},"datePublished":"2010-12-05T19:43:03+00:00","breadcrumb":{"@id":"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/2010\/12\/05\/choix-du-framework-part-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.bittner.fr\/blogs\/pierre\/"},{"@type":"ListItem","position":2,"name":"Choix du framework (part 2)"}]},{"@type":"WebSite","@id":"https:\/\/www.bittner.fr\/blogs\/pierre\/#website","url":"https:\/\/www.bittner.fr\/blogs\/pierre\/","name":"Pierre's weblog","description":"Release 2.3","publisher":{"@id":"https:\/\/www.bittner.fr\/blogs\/pierre\/#\/schema\/person\/3ab57f92769bc1c95b4f56d526b0b225"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.bittner.fr\/blogs\/pierre\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":["Person","Organization"],"@id":"https:\/\/www.bittner.fr\/blogs\/pierre\/#\/schema\/person\/3ab57f92769bc1c95b4f56d526b0b225","name":"Pierre","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.bittner.fr\/blogs\/pierre\/#\/schema\/person\/image\/","url":"https:\/\/www.bittner.fr\/blogs\/pierre\/wp-content\/uploads\/2025\/09\/Pierre-Bittner.png","contentUrl":"https:\/\/www.bittner.fr\/blogs\/pierre\/wp-content\/uploads\/2025\/09\/Pierre-Bittner.png","width":1920,"height":1080,"caption":"Pierre"},"logo":{"@id":"https:\/\/www.bittner.fr\/blogs\/pierre\/#\/schema\/person\/image\/"},"sameAs":["http:\/\/www.bittner.fr\/blogs\/pierre","https:\/\/www.linkedin.com\/in\/pierre-bittner\/","https:\/\/www.youtube.com\/@pierrebittner"],"url":"https:\/\/www.bittner.fr\/blogs\/pierre\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.bittner.fr\/blogs\/pierre\/wp-json\/wp\/v2\/posts\/102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bittner.fr\/blogs\/pierre\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bittner.fr\/blogs\/pierre\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bittner.fr\/blogs\/pierre\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bittner.fr\/blogs\/pierre\/wp-json\/wp\/v2\/comments?post=102"}],"version-history":[{"count":9,"href":"https:\/\/www.bittner.fr\/blogs\/pierre\/wp-json\/wp\/v2\/posts\/102\/revisions"}],"predecessor-version":[{"id":116,"href":"https:\/\/www.bittner.fr\/blogs\/pierre\/wp-json\/wp\/v2\/posts\/102\/revisions\/116"}],"wp:attachment":[{"href":"https:\/\/www.bittner.fr\/blogs\/pierre\/wp-json\/wp\/v2\/media?parent=102"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bittner.fr\/blogs\/pierre\/wp-json\/wp\/v2\/categories?post=102"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bittner.fr\/blogs\/pierre\/wp-json\/wp\/v2\/tags?post=102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}