[{"data":1,"prerenderedAt":3817},["ShallowReactive",2],{"i-ic:outline-arrow-upward":3,"Footer_afPiwGMwNiEyV4syWzw87ovzxHAgs4iwKtCn4zqBf8E":8,"podcasts-count-5":16,"podcasts-5":17,"i-material-symbols:home":3683,"i-ic:baseline-play-circle-filled-white":3685,"Brand_bAcjTzQpW6OVpFK319jfMki97vH1GrZiqHmeI7Xg4o":3687,"Duration_bXAvyLJy4hnjKFbTgCa0tjmFSMDLbxzWoVaHXAGg":3692,"Duration_IB9YkQaWffMT6Iu62AbupywxFoY5cfRfRk9pGN5KM":3697,"Duration_7202gHk1KJgRdWUEOZVZMWjj3Hb2mF4m9FK8EmXQH8":3702,"Duration_J0xMwsB2Ow0znN05i11Gnyd78T59EtXXyQLrUfI":3707,"Duration_W1lzm9oJmMyoAwAvc7hZ4ps4wEuDw8WNPbE6RwBXH0g":3712,"Duration_KbWXzwI0tSzZpVMEA9EPZkuKPxFEGBjHi6kRxDNEhmk":3717,"Duration_DcvrPH2VjkdKRr8iwYtZ26K4XGSjxRwwjLGTlXEJh4":3722,"Duration_4oVvJQfqqsiSHoTlJS4mGIhspKHOXamcUSvT69fdYgg":3727,"Duration_MiFZNqp8gruN5BRPuaep6ujzxVixbOexkuGKhddnzE":3732,"Duration_mtsQhDf23d2NPbe9Uvzjb9G1GMDacU3hOYGG76zc":3737,"Duration_RjYPp9v2Nj9GWeTndKtdlOPQ9m5m5aqDZwnNmAD2WOQ":3742,"Duration_lyDyuwcAx5uPrV1YTPadPqiUXRBseArvizs268qcYg4":3747,"Duration_ySvEtgnwTYqWZ8uxpicgpN7uP3GYhLLKfhOD4NPBg":3752,"Duration_fIff5zPmTrS9dEPCpKvTKpbkTqovLWM2KhOyNhg0XP0":3757,"Duration_QcFhSy5jwBqrAcH39nfeMaHtcx9yAfcpq8H7GtZi9hc":3762,"Duration_xjvprifJhQwpLCsfOfzDhvKc5nSPH2oFPNC0GE3ZG4":3767,"Duration_u3gHTLbWaAst355C73glH2WbEmxBih32snaVk57DMo":3772,"Duration_PV9uCPg5iUn9LhWZrDGgJbopoThtzFvCoi2QXaHw":3777,"Duration_txf832WnL2vXulWRBES0SrDf47yFmcK1bxABC11lxAs":3782,"Duration_EFkrFFMtACs9ZUFpyq9hHwxOe4PLGgTmVQWHzWS4":3787,"Duration_RbPXK9ZEETwbis4kEy5gUpmwIW7WNJDBXDIAEd0":3792,"Duration_4pYWfuLru3qoQwiVXbsfFmO9u7Xp6fbjgMuobn4LLOA":3797,"Duration_gFyYJIxKJqJSdNXFOaLlSmK4H1CSoJKKZoBJvgPdDQc":3802,"Duration_AeiGaUoNqY5MtXWqiwnu2xrWgcqoxvi8B58zKquMA":3807,"Duration_thtleCgfhm5lEVbAAbs26ZtSRFb9JrWXQqRwA5WMiA":3812},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,24,false,"\u003Cpath fill=\"currentColor\" d=\"m4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8z\"\u002F>",["Island",9],{"key":10,"result":11},"Footer_afPiwGMwNiEyV4syWzw87ovzxHAgs4iwKtCn4zqBf8E",{"head":12},{"style":13},[14],{"innerHTML":15},":where(.i-mdi\\:github){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url(\"data:image\u002Fsvg+xml,%3Csvg xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5c.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34c-.46-1.16-1.11-1.47-1.11-1.47c-.91-.62.07-.6.07-.6c1 .07 1.53 1.03 1.53 1.03c.87 1.52 2.34 1.07 2.91.83c.09-.65.35-1.09.63-1.34c-2.22-.25-4.55-1.11-4.55-4.92c0-1.11.38-2 1.03-2.71c-.1-.25-.45-1.29.1-2.64c0 0 .84-.27 2.75 1.02c.79-.22 1.65-.33 2.5-.33s1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02c.55 1.35.2 2.39.1 2.64c.65.71 1.03 1.6 1.03 2.71c0 3.82-2.34 4.66-4.57 4.91c.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2'\u002F%3E%3C\u002Fsvg%3E\")}",136,[18,185,223,354,420,495,674,819,967,1112,1326,1424,1489,1820,1933,2612,2703,2750,2870,2921,3048,3147,3321,3494,3604],{"id":19,"title":20,"author":21,"body":22,"categories":161,"description":163,"dsSlug":164,"duration":165,"episodeArtwork":166,"episodeNumber":167,"episodeType":168,"explicit":6,"extension":169,"guid":170,"links":171,"meta":172,"navigation":173,"path":174,"publicationDate":175,"season":176,"seo":177,"status":178,"stem":179,"subtitle":180,"tags":181,"videoLink":166,"__hash__":184},"podcasts\u002Fpodcasts\u002F036.analytics22\u002Findex.md","Outils de web Analytics et Vie privée","Double Slash",{"type":23,"value":24,"toc":151},"minimark",[25,37,41,58,66,70,75,120,124,138,142,148],[26,27,29,30],"h3",{"id":28},"retrouvez-la-vidéo-de-lenregistrement-sur-le-youtube-de-doubleslash","Retrouvez la vidéo de l'enregistrement sur ",[31,32,36],"a",{"href":33,"rel":34},"https:\u002F\u002Fyoutu.be\u002FAjY6K2WFTD0",[35],"nofollow","le Youtube de DoubleSlash",[26,38,40],{"id":39},"notre-invité","Notre invité",[42,43,44],"ul",{},[45,46,47,48,52,53],"li",{},"François Best ",[31,49,50],{"href":50,"rel":51},"https:\u002F\u002Ffrancoisbest.com\u002F",[35],", ",[31,54,57],{"href":55,"rel":56},"https:\u002F\u002Ftwitter.com\u002Ffortysevenfx",[35],"@fortysevenfx",[59,60,61,62],"p",{},"La solution analytics de notre invité : ",[31,63,64],{"href":64,"rel":65},"https:\u002F\u002Fchiffre.io",[35],[26,67,69],{"id":68},"les-autres-solutions-pour-sortir-ou-remplacer-google-analytics","Les autres solutions pour sortir ou remplacer Google Analytics",[71,72,74],"h4",{"id":73},"open-source-et-possibilité-dauto-hébergement","Open-source et possibilité d'auto hébergement :",[42,76,77,83,89,95,101,107,113],{},[45,78,79],{},[31,80,81],{"href":81,"rel":82},"https:\u002F\u002Fackee.electerious.com\u002F",[35],[45,84,85],{},[31,86,87],{"href":87,"rel":88},"https:\u002F\u002Fplausible.io\u002F",[35],[45,90,91],{},[31,92,93],{"href":93,"rel":94},"https:\u002F\u002Fwww.piratepx.com\u002F",[35],[45,96,97],{},[31,98,99],{"href":99,"rel":100},"https:\u002F\u002Fumami.is\u002F",[35],[45,102,103],{},[31,104,105],{"href":105,"rel":106},"https:\u002F\u002Fmatomo.org\u002F",[35],[45,108,109],{},[31,110,111],{"href":111,"rel":112},"https:\u002F\u002Fposthog.com\u002F",[35],[45,114,115,119],{},[31,116,117],{"href":117,"rel":118},"https:\u002F\u002Fwww.kokoanalytics.com\u002F",[35]," solution pour WordPress",[71,121,123],{"id":122},"autres-solutions","Autres solutions",[42,125,126,132],{},[45,127,128],{},[31,129,130],{"href":130,"rel":131},"https:\u002F\u002Fusefathom.com\u002F",[35],[45,133,134],{},[31,135,136],{"href":136,"rel":137},"https:\u002F\u002Fsimpleanalytics.com\u002F",[35],[26,139,141],{"id":140},"repo-qui-liste-plusieurs-solutions","Repo qui liste plusieurs solutions",[59,143,144],{},[31,145,146],{"href":146,"rel":147},"https:\u002F\u002Fprivacyfocusedanalytics.netlify.app\u002F",[35],[59,149,150],{},"Bonne écoute !",{"title":152,"searchDepth":153,"depth":153,"links":154},"",2,[155,158,159,160],{"id":28,"depth":156,"text":157},3,"Retrouvez la vidéo de l'enregistrement sur le Youtube de DoubleSlash",{"id":39,"depth":156,"text":40},{"id":68,"depth":156,"text":69},{"id":140,"depth":156,"text":141},[162],"Technology","Dans cet épisode, nous avons le plaisir de recevoir François Best pour des outils de web Analytics et la protection de notre vie privée.","DS_036_analytics_privacy",4002,null,36,"full","md","a281e6f01ec88c6c24916751a843e0e9",[],{},true,"\u002Fpodcasts\u002Fanalytics22","2022-05-10",1,{"title":20,"description":163},"published","podcasts\u002F036.analytics22\u002Findex","Web Analytics, privacy et Open Source avec François Best",[182,183],"analytics","open source","OGyJFuVsDLhEl69yzYP2qcYwo5rdmLOOd2Mw8k_gzPU",{"id":186,"title":187,"author":21,"body":188,"categories":202,"description":203,"dsSlug":204,"duration":205,"episodeArtwork":166,"episodeNumber":206,"episodeType":168,"explicit":6,"extension":169,"guid":207,"links":208,"meta":211,"navigation":173,"path":212,"publicationDate":213,"season":176,"seo":214,"status":178,"stem":215,"subtitle":216,"tags":217,"videoLink":221,"__hash__":222},"podcasts\u002Fpodcasts\u002F035.state-of-front-2022\u002Findex.md","State of Front-end 2022",{"type":23,"value":189,"toc":200},[190,198],[59,191,192,193],{},"Sinon, vous pouvez vous rendre directement sur le lien de la page dédiée aux résultats : ",[31,194,197],{"href":195,"rel":196},"https:\u002F\u002Ftsh.io\u002Fstate-of-frontend\u002F",[35],"State of Front-end",[59,199,150],{},{"title":152,"searchDepth":153,"depth":153,"links":201},[],[162],"On discute et on commente les résultats du questionnaire \"State of Front-end\". Quels sont les Frameworks front les plus utilisés et quels sont les plus détestés ? Les bonnes pratiques des developpeurs front-end. Quel éditeur de code est le plus utilisé ? Vous connaitrez les réponses en écoutant l'épisode.","DS_035_state-front-end-22",4068,35,"d7cce3e2e0ab3f01a96bdad2659cea05",[209],{"title":197,"url:'https:\u002F\u002Ftsh":210},{"io\u002Fstate-of-frontend\u002F'":166},{},"\u002Fpodcasts\u002Fstate-of-front-2022","2022-04-27",{"title":187,"description":203},"podcasts\u002F035.state-of-front-2022\u002Findex","Analyse du State of Front-end 2022",[218,219,220],"state of front","js","css","s8Ez-hvx8_o","LkNuI8Pa7Rb2ynaURVxnq4xw5DF4vXHtRHywTNhBDNY",{"id":224,"title":225,"author":21,"body":226,"categories":335,"description":336,"dsSlug":337,"duration":338,"episodeArtwork":166,"episodeNumber":339,"episodeType":168,"explicit":6,"extension":169,"guid":340,"links":341,"meta":342,"navigation":173,"path":343,"publicationDate":344,"season":176,"seo":345,"status":178,"stem":346,"subtitle":347,"tags":348,"videoLink":166,"__hash__":353},"podcasts\u002Fpodcasts\u002F034.news-avril-2022\u002Findex.md","La chasse aux news - Avril 2022",{"type":23,"value":227,"toc":332},[228,234,238,330],[26,229,29,230],{"id":28},[31,231,36],{"href":232,"rel":233},"https:\u002F\u002Fyoutu.be\u002FqH6m3WxUq9k",[35],[71,235,237],{"id":236},"les-news-évoquées-durant-lépisode","Les news évoquées durant l'épisode :",[42,239,240,243,250,257,264,271,278,285,292,299,306,313,320,327],{},[45,241,242],{},"00:00 Intro et présentation",[45,244,245,246],{},"01:08 La version 1 Redwood JS lancée officiellement le 4 avril ",[31,247,248],{"href":248,"rel":249},"https:\u002F\u002Fv1launchweek.redwoodjs.com\u002F",[35],[45,251,252,253],{},"03:44 L’équipe d’Astro lancera la V1 le 8 juin 2022 ",[31,254,255],{"href":255,"rel":256},"https:\u002F\u002Fastro.build\u002Fblog\u002Fastro-1-beta-release\u002F",[35],[45,258,259,260],{},"08:10 Liberez vos threads avec Party Town ",[31,261,262],{"href":262,"rel":263},"https:\u002F\u002Fpartytown.builder.io\u002F",[35],[45,265,266,267],{},"11:34 React 18 disponible sur NPM ",[31,268,269],{"href":269,"rel":270},"https:\u002F\u002Freactjs.org\u002Fblog\u002F2022\u002F03\u002F29\u002Freact-v18.html",[35],[45,272,273,274],{},"23:42 \"Heroku is too limiting and expensive. AWS is too complex.\". Pilotez votre web app sur AWS avec Flight Control ",[31,275,276],{"href":276,"rel":277},"https:\u002F\u002Fwww.flightcontrol.dev\u002F",[35],[45,279,280,281],{},"28:17 Blitz le framework fullstack React pivote pour devenir un toolkit framework agnostique. ",[31,282,283],{"href":283,"rel":284},"https:\u002F\u002Fblitzjs.com\u002Fdocs\u002Fblitz-pivot",[35],[45,286,287,288],{},"30:55 Faites vos tests unitaires avec vitest ",[31,289,290],{"href":290,"rel":291},"https:\u002F\u002Fvitest.dev\u002F",[35],[45,293,294,295],{},"34:00 Nuxt 3 toujours en développement ",[31,296,297],{"href":297,"rel":298},"https:\u002F\u002Fv3.nuxtjs.org\u002Fcommunity\u002Froadmap\u002F",[35],[45,300,301,302],{},"38:17 L'écosystème de Supabase s'étoffe pour devenir de plus en plus complet ",[31,303,304],{"href":304,"rel":305},"https:\u002F\u002Fsupabase.com\u002F",[35],[45,307,308,309],{},"47:29 Un projet compatible Storybook mais version light ",[31,310,311],{"href":311,"rel":312},"https:\u002F\u002Fwww.ladle.dev\u002F",[35],[45,314,315,316],{},"49:12 Parcel v2.4.0 Nouveau parcer css (écrit en Rust) 100x plus rapides que CSSNano ",[31,317,318],{"href":318,"rel":319},"https:\u002F\u002Fparceljs.org\u002Fblog\u002Fparcel-css\u002F",[35],[45,321,322,323],{},"53:40 La roadmap de Tina CMS pour 2022 ",[31,324,325],{"href":325,"rel":326},"https:\u002F\u002Ftina.io\u002Fblog\u002Ftinacms-2022\u002F",[35],[45,328,329],{},"57:15 - Petit retour rapide sur le WordCamp Geneve 2022",[59,331,150],{},{"title":152,"searchDepth":153,"depth":153,"links":333},[334],{"id":28,"depth":156,"text":157},[162],"Un passage en revue des news et releases de nos outils et technologies de développement web des dernières semaines.","DS_034_news22",3705,34,"0479679fbfac701b8757a41fb3422d20",[],{},"\u002Fpodcasts\u002Fnews-avril-2022","2022-04-15",{"title":225,"description":336},"podcasts\u002F034.news-avril-2022\u002Findex","Un passage en revue des news et releases de nos outils et technologies de développement web des dernières semaines",[349,350,351,352],"devops","react","astro","cms","JPXMofgt7H-hhL5wettTzyXe1ae9iy-VSmdKoTZkLyQ",{"id":355,"title":356,"author":21,"body":357,"categories":405,"description":406,"dsSlug":407,"duration":408,"episodeArtwork":166,"episodeNumber":409,"episodeType":168,"explicit":6,"extension":169,"guid":410,"links":411,"meta":412,"navigation":173,"path":413,"publicationDate":414,"season":176,"seo":415,"status":178,"stem":416,"subtitle":406,"tags":417,"videoLink":166,"__hash__":419},"podcasts\u002Fpodcasts\u002F033.web3\u002Findex.md","Web3, bullshit ou révolution ?",{"type":23,"value":358,"toc":399},[359,367,372,380,390,394,397],[26,360,29,362],{"id":361},"retrouvez-la-vidéo-de-lenregistrement-sur-youtube",[31,363,366],{"href":364,"rel":365},"https:\u002F\u002Fyoutu.be\u002FA8yk7NT__HM",[35],"YouTube",[368,369,371],"h2",{"id":370},"le-web-30-pourquoi","Le WEB 3.0, Pourquoi ?",[59,373,374,375,379],{},"En 2008, le bitcoin voyait le jour. Suite à la crise des subprimes, ",[376,377,378],"strong",{},"Satoshi Nakamoto",", publia un livre blanc sur le fonctionnement d'une monnaie cryptographique. Une monnaie avec un fonctionnement décentralisé. Le concept avait comme moteur principal : une économie s'affranchissant de tout organisme tiers, tel que les institutions financières.",[59,381,382,383,386,387,389],{},"Aujourd'hui, le ",[376,384,385],{},"web3"," part d'une même idée. Le web, tel que nous le connaissons, et aujourd'hui principalement détenue par les grands groupes américains.\nLe ",[376,388,385],{}," serait un web décentralisé à l'image des cryptomonnaies avec des mécanismes basés sur des blockchains qui pourrait améliorer la sécurité et la confidentialité des données",[368,391,393],{"id":392},"le-web-30-comment-ça-marche","Le WEB 3.0, comment ça marche ?",[59,395,396],{},"Alex nous explique comment le web peut tendre vers plus de transparence, confiance et résilience avec les architectures décentralisées.\nOn parle de blockchain, et de toutes les technos sous-jacentes (NFT,...). Comment vont-elles jouer un rôle dans le futur de nos métiers de développeur.",[59,398,150],{},{"title":152,"searchDepth":153,"depth":153,"links":400},[401,403,404],{"id":361,"depth":156,"text":402},"Retrouvez la vidéo de l'enregistrement sur YouTube",{"id":370,"depth":153,"text":371},{"id":392,"depth":153,"text":393},[162],"Alex nous fait découvrir le Web3 et nous explique les fondamentaux de ce web décentralisé prometteur.","DS_033_web3",3254,33,"86f360be3ff581e2236173ba0ed482d3",[],{},"\u002Fpodcasts\u002Fweb3","2022-03-09",{"title":356,"description":406},"podcasts\u002F033.web3\u002Findex",[385,418],"blockchain","ZHzELmpeTI36OzX1KFExpkXTYglgQaSrThEjfmqn6m8",{"id":421,"title":422,"author":21,"body":423,"categories":478,"description":479,"dsSlug":480,"duration":481,"episodeArtwork":166,"episodeNumber":482,"episodeType":168,"explicit":6,"extension":169,"guid":483,"links":484,"meta":485,"navigation":173,"path":486,"publicationDate":487,"season":176,"seo":488,"status":178,"stem":489,"subtitle":490,"tags":491,"videoLink":166,"__hash__":494},"podcasts\u002Fpodcasts\u002F032.hasura\u002Findex.md","Hasura, une API GraphQL qui assure !",{"type":23,"value":424,"toc":474},[425,431,439,442,445,448,451,454,457,461],[26,426,29,427],{"id":361},[31,428,366],{"href":429,"rel":430},"https:\u002F\u002Fyoutu.be\u002F0fK57NRHqPY",[35],[59,432,433,438],{},[31,434,437],{"href":435,"rel":436},"https:\u002F\u002Fhasura.io\u002F",[35],"Hasura"," est un système qui vous permet de monter un API GraphQL facilement à partir d'une base de données.",[59,440,441],{},"Le code est open source. Vous pouvez l'autohéberger sur un serveur ou l'utiliser via le service cloud proposé par la société éditrice. Dans le dernier cas, il faudra payer en fonction de votre forfait.",[59,443,444],{},"Une fois installé, vous connectez votre base de données et Hasura génère les schemas qui correspondent à vos data. Il génère également les resolvers et toute la partie CRUD (create, read, update, delete).",[59,446,447],{},"Vous n'avez plus qu'a consommer la data à travers une route API et vous concentrer sur votre application.",[59,449,450],{},"Il gère aussi la partie autorisation en donnant accès à tel ou tel data.\nMais attention, de base, tout est ouvert. Vous devez donc utiliser un système d'authentification pour sécuriser vos data.",[59,452,453],{},"Nous vous laissons écouter l'épisode pour en savoir plus sur Hasura.",[59,455,456],{},"Bonne écoute.",[368,458,460],{"id":459},"les-liens-de-lépisode","Les liens de l'épisode",[42,462,463,468],{},[45,464,465],{},[31,466,435],{"href":435,"rel":467},[35],[45,469,470],{},[31,471,472],{"href":472,"rel":473},"https:\u002F\u002Fwww.nhost.io\u002F",[35],{"title":152,"searchDepth":153,"depth":153,"links":475},[476,477],{"id":361,"depth":156,"text":402},{"id":459,"depth":153,"text":460},[162],"Alex nous parle d'Hasura, un service qui permet de monter une API GraphQL à partir d'une base de données.","DS_032_hasura",2725,32,"232290c1a57fb93aac34811ec55f41ca",[],{},"\u002Fpodcasts\u002Fhasura","2022-01-20",{"title":422,"description":479},"podcasts\u002F032.hasura\u002Findex","Alex nous fait découvrir Hasura, un service qui permet de monter une API GraphQL à partir d'une base de données.",[492,493],"hasura","graphql","m0iBK_CZX3zOhT2QQp-kJITg66EwxYB9aW2mUzJ-ffY",{"id":496,"title":497,"author":21,"body":498,"categories":659,"description":660,"dsSlug":661,"duration":662,"episodeArtwork":166,"episodeNumber":663,"episodeType":168,"explicit":6,"extension":169,"guid":664,"links":665,"meta":666,"navigation":173,"path":667,"publicationDate":668,"season":176,"seo":669,"status":178,"stem":670,"subtitle":660,"tags":671,"videoLink":166,"__hash__":673},"podcasts\u002Fpodcasts\u002F031.redwood-js\u002Findex.md","RedwoodJS avec Simon Gagnon",{"type":23,"value":499,"toc":654},[500,506,514,534,537,540,570,573,582,585,589,613,615,650],[26,501,29,502],{"id":361},[31,503,366],{"href":504,"rel":505},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=eEY03v7RBy0",[35],[59,507,508,513],{},[31,509,512],{"href":510,"rel":511},"https:\u002F\u002Fredwoodjs.com\u002F",[35],"Redwoodjs"," est un framework basé sur les meilleurs outils autours de la librairie ReactJS.\nVous avez à disposition des outils préconfigurés tel que :",[42,515,516,519,522,525,528,531],{},[45,517,518],{},"webpack",[45,520,521],{},"Prisma",[45,523,524],{},"Storybook",[45,526,527],{},"Jest",[45,529,530],{},"Fastify",[45,532,533],{},"Pino",[59,535,536],{},"Vous pouvez démarrer un projet ultra rapidement sans aucune configuration.\nAvec des lignes de commandes disponible dans votre console, vous pouvez créer facilement des éléments dans votre projet, tel que des formulaires, sections, services ou pages.",[59,538,539],{},"Par exemple, avec la commande :",[541,542,546],"pre",{"className":543,"code":544,"language":545,"meta":152,"style":152},"language-shell shiki shiki-themes synthwave-84","yarn redwood generate page home\n","shell",[547,548,549],"code",{"__ignoreMap":152},[550,551,553,557,561,564,567],"span",{"class":552,"line":176},"line",[550,554,556],{"class":555},"sRQ1T","yarn",[550,558,560],{"class":559},"soy-K"," redwood",[550,562,563],{"class":559}," generate",[550,565,566],{"class":559}," page",[550,568,569],{"class":559}," home\n",[59,571,572],{},"Vous allez générer une page home et \"Redwoodjs\" va vous générer automatiquement la route, le template et la storie qui va avec.",[59,574,575,576,581],{},"Redwood est un framework développé autour de la philosophie ",[31,577,580],{"href":578,"rel":579},"https:\u002F\u002Frubyonrails.org\u002F",[35],"Ruby on Rails"," et tout est pensé pour vous faciliter et optimiser le développement. Cela vous permet de vous concentrer sur votre application au lieu de perdre votre temps à configurer, à choisir les outils ou à structurer votre projet.",[59,583,584],{},"Bonne écoute :)",[368,586,588],{"id":587},"pour-retrouver-notre-invité","Pour retrouver notre invité",[42,590,591,599,606],{},[45,592,593,594],{},"Simon Gagnon : ",[31,595,598],{"href":596,"rel":597},"https:\u002F\u002Ftwitter.com\u002FSimonCrypta",[35],"@SimonCrypta",[45,600,601,602],{},"Simoncrypta : ",[31,603,604],{"href":604,"rel":605},"https:\u002F\u002Fsimoncrypta.dev\u002F",[35],[45,607,608,609],{},"GitHub de Simon : ",[31,610,611],{"href":611,"rel":612},"https:\u002F\u002Fgithub.com\u002Fsimoncrypta",[35],[368,614,460],{"id":459},[42,616,617,622,629,636,643],{},[45,618,619],{},[31,620,510],{"href":510,"rel":621},[35],[45,623,624],{},[31,625,628],{"href":626,"rel":627},"https:\u002F\u002Ftwitter.com\u002Fredwoodjs",[35],"@redwoodjs",[45,630,631],{},[31,632,635],{"href":633,"rel":634},"https:\u002F\u002Fgithub.com\u002Fredwoodjs\u002Fredwood",[35],"Github redwoodjs",[45,637,638],{},[31,639,642],{"href":640,"rel":641},"https:\u002F\u002Fdiscord.com\u002Finvite\u002FjjSYEQd",[35],"Discord redwoodjs",[45,644,645],{},[31,646,649],{"href":647,"rel":648},"https:\u002F\u002Flearn.redwoodjs.com\u002Fdocs\u002Ftutorial\u002Fwelcome-to-redwood\u002F",[35],"Tutorial redwoodjs",[651,652,653],"style",{},"html pre.shiki code .sRQ1T, html code.shiki .sRQ1T{--shiki-default:#FE4450}html pre.shiki code .soy-K, html code.shiki .soy-K{--shiki-default:#BBBBBB}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":152,"searchDepth":153,"depth":153,"links":655},[656,657,658],{"id":361,"depth":156,"text":402},{"id":587,"depth":153,"text":588},{"id":459,"depth":153,"text":460},[162],"Dans cet épisode, nous avons le plaisir de recevoir Simon Gagnon en direct de Montréal (Canada) pour parler de RedwoodJS.","DS_031_redwood",2776,31,"22904a35fe6a2350abd743a6d02b743b",[],{},"\u002Fpodcasts\u002Fredwood-js","2021-12-28",{"title":497,"description":660},"podcasts\u002F031.redwood-js\u002Findex",[672],"redwoodjs","xHYGxX3SLWepnavSjzS9zD1zX2cSvFWg4Lwvej5xAqc",{"id":675,"title":676,"author":21,"body":677,"categories":801,"description":802,"dsSlug":803,"duration":804,"episodeArtwork":166,"episodeNumber":805,"episodeType":168,"explicit":6,"extension":169,"guid":806,"links":807,"meta":808,"navigation":173,"path":809,"publicationDate":810,"season":176,"seo":811,"status":178,"stem":812,"subtitle":813,"tags":814,"videoLink":166,"__hash__":818},"podcasts\u002Fpodcasts\u002F030.bit-dev-olivier-combe\u002Findex.md","Bit.dev avec Olivier Combe",{"type":23,"value":678,"toc":794},[679,692,700,708,711,719,722,725,729,732,746,748,765,767],[26,680,29,682,686,687],{"id":681},"retrouvez-la-vidéo-de-lenregistrement-sur-youtube-et-twitch",[31,683,366],{"href":684,"rel":685},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=3TFpuKHMdb4",[35]," et ",[31,688,691],{"href":689,"rel":690},"https:\u002F\u002Fwww.twitch.tv\u002Fdoubleslashpodcast\u002Fvideo\u002F1221756050",[35],"Twitch",[59,693,694,699],{},[31,695,698],{"href":696,"rel":697},"https:\u002F\u002Fbit.dev\u002F",[35],"Bit.dev"," est un outil pour le développement en mode component driven (CDD).\nLe “component-driven development” est une méthode qui consiste à développer indépendamment chaque components. Les components sont autonomes et peuvent être intégrés dans une app par la suite.",[59,701,702,703,707],{},"À l’instar de ",[31,704,524],{"href":705,"rel":706},"https:\u002F\u002Fstorybook.js.org\u002F",[35],", bien connu des développeurs React (Storybook est maintenant compatible sur plusieurs frameworks), Bit.dev permet de visualiser les components dans un playground.",[59,709,710],{},"Mais le service offre des fonctionnalités beaucoup plus poussées :",[42,712,713,716],{},[45,714,715],{},"Il permet de partager les components entre différents projets facilement, car ils deviennent installables comme des dépendances.",[45,717,718],{},"Il est possible de gérer des versions de components également et même de visualiser les versions sur l’interface.",[59,720,721],{},"C’est donc un système bien pratique pour gérer un design système et une bibliothèque de composant dans une entreprise.",[59,723,724],{},"Le service propose un compte “free” avec un seul scope privé et les autres en publics. Ensuite, les versions payantes des scopes privées unlimited.",[368,726,728],{"id":727},"angular-13","Angular 13",[59,730,731],{},"Dans cet épisode, nous profitons de l’expertise d’olivier pour parler rapidement d’Angular qui vient de sortir dans sa version 13 :",[42,733,734,737,740,743],{},[45,735,736],{},"changement du moteur de vue par défaut (Ivy)",[45,738,739],{},"changement du package format",[45,741,742],{},"update de l'API component",[45,744,745],{},"arrêt du support de IE11",[368,747,588],{"id":587},[42,749,750,758],{},[45,751,752,753],{},"Olivier Combe : ",[31,754,757],{"href":755,"rel":756},"https:\u002F\u002Ftwitter.com\u002FOCombe",[35],"@OCombe",[45,759,760,761],{},"GitHub Olivier : ",[31,762,763],{"href":763,"rel":764},"https:\u002F\u002Fgithub.com\u002Focombe",[35],[368,766,460],{"id":459},[42,768,769,774,781,787],{},[45,770,771],{},[31,772,696],{"href":696,"rel":773},[35],[45,775,776],{},[31,777,780],{"href":778,"rel":779},"https:\u002F\u002Ftwitter.com\u002Fbitdev_?s=20",[35],"@bitdev",[45,782,783],{},[31,784,728],{"href":785,"rel":786},"https:\u002F\u002Fblog.angular.io\u002Fangular-v13-is-now-available-cce66f7bc296",[35],[45,788,789],{},[31,790,793],{"href":791,"rel":792},"http:\u002F\u002Fwww.ngx-translate.com\u002F",[35],"NGX Translate",{"title":152,"searchDepth":153,"depth":153,"links":795},[796,798,799,800],{"id":681,"depth":156,"text":797},"Retrouvez la vidéo de l'enregistrement sur YouTube et Twitch",{"id":727,"depth":153,"text":728},{"id":587,"depth":153,"text":588},{"id":459,"depth":153,"text":460},[162],"Dans cet épisode, nous avons le plaisir de recevoir Olivier Combe pour parler du service Bitdev. Un service qui vous facilite le quotidien pour la gestion de vos components.","DS_030_bit",3747,30,"e8fead5a9f5e8f1d4ae779d654509d3b",[],{},"\u002Fpodcasts\u002Fbit-dev-olivier-combe","2021-12-06",{"title":676,"description":802},"podcasts\u002F030.bit-dev-olivier-combe\u002Findex","Dans cet épisode, nous avons le plaisir de recevoir Olivier Combe pour parler du service Bitdev.",[815,816,817],"bit","angular","web component","V7B7-69e5Nte5TkxxQYfcGEglhEYMb_oM_QS-dRJW80",{"id":820,"title":821,"author":21,"body":822,"categories":950,"description":951,"dsSlug":952,"duration":953,"episodeArtwork":166,"episodeNumber":954,"episodeType":168,"explicit":6,"extension":169,"guid":955,"links":956,"meta":957,"navigation":173,"path":958,"publicationDate":959,"season":176,"seo":960,"status":178,"stem":961,"subtitle":962,"tags":963,"videoLink":166,"__hash__":966},"podcasts\u002Fpodcasts\u002F029.nuxt-sebastien-chopin\u002Findex.md","Nuxt.JS avec Sébastien Chopin",{"type":23,"value":823,"toc":945},[824,838,841,851,855,883,886,898,909,912,916],[59,825,826,827,830,831,834,835,837],{},"Comment aujourd’hui, la société ",[376,828,829],{},"NuxtLab",", qui est derrière le projet open source, réussit à se financer pour continuer à développer et promouvoir ",[376,832,833],{},"Nuxt.JS",".\nNous revenons également sur les principales fonctionnalités de ",[376,836,833],{}," 3.",[59,839,840],{},"Un épisode très intéressant qui nous l’espérons va vous plaire.",[42,842,843],{},[45,844,845,846],{},"Sébastien Chopin : ",[31,847,850],{"href":848,"rel":849},"https:\u002F\u002Ftwitter.com\u002FAtinux",[35],"@Atinux",[368,852,854],{"id":853},"lhistoire-de-nuxtjs","L'histoire de Nuxt.JS",[59,856,857,858,861,862,865,866,868,869,871,872,875,876,879,880,882],{},"Sébastien Chopin poussa son premier commit pour le projet ",[376,859,860],{},"Nuxt.js"," le ",[376,863,864],{},"26 octobre 2016",". L'idée de ",[376,867,833],{}," est née après la refonte d'un site e-commerce basé des technologies web open source moderne : Vue 2, Node.js et Webpack.\nÀ la création de ",[376,870,833],{},", le rendu côté serveur des applications ",[376,873,874],{},"Vue.js"," relevait plus du hacking que d'une méthode officielle et le seul exemple disponible était publié par ",[376,877,878],{},"Evan You"," (Créateur de Vue.js) sur Hacker New.\nMalgré cela, les 2 frères Chopin relevèrent le challenge et ",[376,881,833],{}," était bien née !",[368,884,833],{"id":885},"nuxtjs",[59,887,888,890,891,894,895,897],{},[376,889,833],{}," est un framework open source. Il permet de développer des applications robustes et structurées grâce à une surcouche au-dessus de la librairie ",[376,892,893],{},"Vue.JS",".\nIl permet de supprimer toute la partie configuration et de se concentrer sur la partie métier de votre application.\n",[376,896,833],{}," permet également différents rendus de votre application :",[42,899,900,903,906],{},[45,901,902],{},"rendu serveur",[45,904,905],{},"rendu uniquement client",[45,907,908],{},"rendu complètement statique",[59,910,911],{},"La version 3 est une grosse refonte du framework qui nécessite un gros travail de la part de l'équipe et de la communauté. Pour le moment, la version bêta a été rendue publique le 12 octobre 2021.",[368,913,915],{"id":914},"liens-de-lépisode","Liens de l'épisode",[42,917,918,924,931,938],{},[45,919,920],{},[31,921,833],{"href":922,"rel":923},"https:\u002F\u002Fnuxtjs.org\u002F",[35],[45,925,926],{},[31,927,930],{"href":928,"rel":929},"https:\u002F\u002Fnuxtlabs.com\u002F",[35],"NuxtLabs",[45,932,933],{},[31,934,937],{"href":935,"rel":936},"https:\u002F\u002Fgithub.com\u002Fnuxt",[35],"GitHub Nuxt",[45,939,940],{},[31,941,944],{"href":942,"rel":943},"https:\u002F\u002Fgithub.com\u002Fnuxtlabs",[35],"GitHub NuxtLabs",{"title":152,"searchDepth":153,"depth":153,"links":946},[947,948,949],{"id":853,"depth":153,"text":854},{"id":885,"depth":153,"text":833},{"id":914,"depth":153,"text":915},[162],"Dans cet épisode, nous avons le plaisir de recevoir Sébastien Chopin pour parler du framework Nuxt.JS qui arrive dans sa 3e version prochainement Sébastien Chopin est le cocréateur de Nuxt.JS (l'autre personne est son frère ;)). Avec lui, nous revenons sur l’histoire de la création de Nuxt.JS. Comment, pourquoi il a été créé et l’évolution du framework.","DS_029_nuxt",3885,29,"24879b619ab1bc5eb3a7aabe2bbeb354",[],{},"\u002Fpodcasts\u002Fnuxt-sebastien-chopin","2021-11-11",{"title":821,"description":951},"podcasts\u002F029.nuxt-sebastien-chopin\u002Findex","Dans cet épisode, nous avons le plaisir de recevoir Sébastien Chopin pour parler du framework Nuxt.JS qui arrive dans sa 3e version prochainement.",[964,965],"nuxt","vue","YlVxAmfZjO7JPWuKys_023Itv1cj39yHsG68_wIs0nk",{"id":968,"title":969,"author":21,"body":970,"categories":1095,"description":1096,"dsSlug":1097,"duration":1098,"episodeArtwork":166,"episodeNumber":1099,"episodeType":168,"explicit":6,"extension":169,"guid":1100,"links":1101,"meta":1102,"navigation":173,"path":1103,"publicationDate":1104,"season":176,"seo":1105,"status":178,"stem":1106,"subtitle":1096,"tags":1107,"videoLink":166,"__hash__":1111},"podcasts\u002Fpodcasts\u002F028.prisma-orm\u002Findex.md","Prisma ORM",{"type":23,"value":971,"toc":1086},[972,977,980,988,1004,1015,1026,1029,1034,1038,1041,1052,1056,1059,1063,1066,1070,1073,1077],[42,973,974],{},[45,975,976],{},"Le son de Patrick est pas terrible, toutes nos escuses pour ça. Nous allons améliorer ça dans les prochains épisodes.",[368,978,969],{"id":979},"prisma-orm",[981,982,983],"blockquote",{},[59,984,985],{},[376,986,987],{},"\"V2, j’oublie la V1 et je reprends depuis le début !\"",[59,989,990,992,993,996,997,686,1000,1003],{},[376,991,521],{}," est un ORM (object-relational mapping) open source écrit en ",[376,994,995],{},"Rust",". Il est compatible ",[376,998,999],{},"JavaScript\u002FTypeScript",[376,1001,1002],{},"Go",".",[59,1005,1006,1007,1011,1012,1014],{},"Au départ, ",[31,1008,521],{"href":1009,"rel":1010},"https:\u002F\u002Fwww.prisma.io\u002F",[35]," dans sa version 1, était une sorte de générateur d'API. Vous lui donniez une DB et il vous donnait accès à des routes et une API graphQL pour récupérer les data.\nAprès un virage à 180 degrés, la V2 n'a plus rien a voir avec la V1. Pour la V2, ",[376,1013,521],{}," est désormais un ORM.",[59,1016,1017,1018,1021,1022,1025],{},"Un ",[376,1019,1020],{},"ORM"," est un système qui vous permet de gérer les data d'une base de données en manipulant des objets. Les objets représentent les data et vous n'écrivez normalement jamais de query vers la base. Par exemple, pour une table \"user\", vous avez accès à un objet ",[547,1023,1024],{},"User"," et vous interrogez la base via cet objet.",[59,1027,1028],{},"Il gère plusieurs systèmes de base de données : Postgres \u002F Mysql \u002F SQlite \u002F SQLServer \u002F MongoDB",[59,1030,1031,1033],{},[376,1032,521],{}," est présenté sou 4 modules : CLIENT \u002F MIGRATE \u002F STUDIO \u002F DATA PLATFORM ( early stage )",[26,1035,1037],{"id":1036},"client","Client",[59,1039,1040],{},"Cette partie gère:",[42,1042,1043,1046,1049],{},[45,1044,1045],{},"la connexion avec les DB.",[45,1047,1048],{},"le schéma des modèles",[45,1050,1051],{},"la récupération des data et des queries",[26,1053,1055],{"id":1054},"migrate","Migrate",[59,1057,1058],{},"Cette partie gère les migrations. Pour mettre à jour une DB en prod quand vous modifiez les modèles en développement.",[26,1060,1062],{"id":1061},"studio","Studio",[59,1064,1065],{},"Cette partie offre une interface de visualisation dans le style PHPMyAdmin, mais en beaucoup mieux !",[26,1067,1069],{"id":1068},"data-platform","Data Platform",[59,1071,1072],{},"Un service en early stage pour gérer un DB via une interface cloud.",[368,1074,1076],{"id":1075},"outil-recommandé","Outil recommandé",[42,1078,1079],{},[45,1080,1081],{},[31,1082,1085],{"href":1083,"rel":1084},"https:\u002F\u002Fsyncinc.so",[35],"syncinc.so",{"title":152,"searchDepth":153,"depth":153,"links":1087},[1088,1094],{"id":979,"depth":153,"text":969,"children":1089},[1090,1091,1092,1093],{"id":1036,"depth":156,"text":1037},{"id":1054,"depth":156,"text":1055},{"id":1061,"depth":156,"text":1062},{"id":1068,"depth":156,"text":1069},{"id":1075,"depth":153,"text":1076},[162],"Un épisode \"explore\" dans lequel Alex nous présente l'ORM Prisma.","DS_028_prisma",3456,28,"e5cc08fb14a96639f9b6a98f199d47f8",[],{},"\u002Fpodcasts\u002Fprisma-orm","2021-10-19",{"title":969,"description":1096},"podcasts\u002F028.prisma-orm\u002Findex",[1108,1109,1110],"prisma","orm","node","7nOntX6jXw8sDIWbzBF2ephzc4fCxgmLQf6VJeEiT44",{"id":1113,"title":1114,"author":21,"body":1115,"categories":1311,"description":1312,"dsSlug":1313,"duration":1314,"episodeArtwork":166,"episodeNumber":1315,"episodeType":168,"explicit":6,"extension":169,"guid":1316,"links":1317,"meta":1318,"navigation":173,"path":1319,"publicationDate":1320,"season":176,"seo":1321,"status":178,"stem":1322,"subtitle":1312,"tags":1323,"videoLink":166,"__hash__":1325},"podcasts\u002Fpodcasts\u002F027.back-to-school\u002Findex.md","Back to school",{"type":23,"value":1116,"toc":1300},[1117,1121,1126,1136,1140,1145,1151,1155,1160,1168,1172,1177,1185,1189,1194,1201,1205,1210,1224,1238,1242,1247,1250,1270,1277,1281,1286,1289,1291],[368,1118,1120],{"id":1119},"github-copilot","GitHub Copilot",[981,1122,1123],{},[59,1124,1125],{},"Du pair coding avec une AI !",[59,1127,1128,1129,1131,1132],{},"Principalement disponible sur VSCode, ",[376,1130,1120],{}," est une assistance formée sur des milliards de lignes de code public. Elle complète votre code au fur et à mesure que vous écrivez.\nElle apprend en analysant votre code et vous suggère la complétion de votre code. Vous êtes libre d'accepter ou non la suggestion.\nEncore en version technical preview, vous pouvez l'essayer en allant sur cette page : ",[31,1133,1134],{"href":1134,"rel":1135},"https:\u002F\u002Fcopilot.github.com\u002F",[35],[368,1137,1139],{"id":1138},"github-dev","GitHub Dev",[981,1141,1142],{},[59,1143,1144],{},"Passer en mode “édition” grâce avec la touche \".\" !",[59,1146,1147,1148],{},"Quand vous êtes dans un repository sur github.com, il vous suffit d'appuyer sur la touche \".\" de votre clavier pour passer sur github.dev et éditer le projet sur un VSCode en ligne.\nVous pouvez importer vos settings et travailler comme si vous étiez dans votre VSCode installé sur votre ordinateur.\n",[376,1149,1150],{},"Les notes de cet épisode sont créées directement sur github.dev",[368,1152,1154],{"id":1153},"alpine-js-3","Alpine JS 3",[981,1156,1157],{},[59,1158,1159],{},"La version de la maturité !",[59,1161,1162,1163,1167],{},"Fin mai, c'est déroulé l'alpine day. ",[31,1164,1165],{"href":1165,"rel":1166},"https:\u002F\u002Falpineday.com\u002Fwatch",[35],".Nous vous recommandons de visionner les différentes présentations.\nSuite à ça, la version 3 d'AlpineJS est sortie. Dans la foulée, un nouveau site et une nouvelle documentation.",[368,1169,1171],{"id":1170},"petite-vue","Petite Vue",[981,1173,1174],{},[59,1175,1176],{},"WTF Evan !",[59,1178,1179,1180,1184],{},"Quand Evan You fait un side project, ça donne ",[31,1181,1170],{"href":1182,"rel":1183},"https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fpetite-vue",[35],".\nDirectement inspiré d'AlpineJS, petite vue (avec l'accent) est une petite librairie qui pèse seulement 6Kb.\nUne grosse majorité des méthodes provenant de VueJS sont disponibles. Elle permet de créer des éléments interactifs dans une page web sans devoir installer une plus grosse librairie.",[368,1186,1188],{"id":1187},"vue-3","Vue 3",[981,1190,1191],{},[59,1192,1193],{},"La bêta que l'on utilise tous en prod !",[59,1195,1196,1197],{},"La version 3.2 vient de sortir avec des nouveautés et des grosses améliorations de performance.\nLire ici le post de la version 3.2 : ",[31,1198,1199],{"href":1199,"rel":1200},"https:\u002F\u002Fblog.vuejs.org\u002Fposts\u002Fvue-3.2.html",[35],[368,1202,1204],{"id":1203},"nuxt-3","Nuxt 3",[981,1206,1207],{},[59,1208,1209],{},"Plus c'est long, plus c'est bon !",[59,1211,1212,1213,1217,1218,1223],{},"La version 3.2 vient de sortir avec des nouveautés et L'attente est longue, mais le travail est immense pour l'équipe de ",[31,1214,1216],{"href":942,"rel":1215},[35],"Nuxt Lab",".\nLa conf Nuxt Nation vient de passer avec une présentation et la timeline du travail pour sortir la version 3 de Nuxt.\nLa première version bêta publique est annoncée pour le 12 octobre 2021.\nLe travail est immense pour l'équipe, car en plus de réécrire totalement la version 3 en TypeScript, il faut maintenir la version 2 et sortir des nouveaux modules. À l'image de ",[31,1219,1222],{"href":1220,"rel":1221},"https:\u002F\u002Fimage.nuxtjs.org\u002F",[35],"Nuxt Image"," sorite courant juin 2021 !\nEn quelques lignes, la version 3 de Nuxt, c'est :",[42,1225,1226,1229,1232,1235],{},[45,1227,1228],{},"Compatible Vue 3",[45,1230,1231],{},"Très compatible avec TypeScript (comme Vue 3)",[45,1233,1234],{},"Un nouveau moteur Nitro, très performant et capable de faire de l'incrémentale.",[45,1236,1237],{},"Un bundle de prod hyper performant et cross plateforme.",[368,1239,1241],{"id":1240},"strapi-4","Strapi 4",[981,1243,1244],{},[59,1245,1246],{},"On reprend tout depuis le début !",[59,1248,1249],{},"La version 4 de Strapi est en développement. Une grosse majorité de fonctionnalités est repensée.\nVoici les principales évolutions :",[42,1251,1252,1255,1258,1261,1264,1267],{},[45,1253,1254],{},"Nouvelle interface d'admin",[45,1256,1257],{},"Nouveau système de plugin",[45,1259,1260],{},"Nouveau Database Layer",[45,1262,1263],{},"Nouvelle API REST et GraphQL",[45,1265,1266],{},"Système de migration",[45,1268,1269],{},"Système de hook pour étendre Strapi",[59,1271,1272,1273],{},"Au-delà de la version 4, Strapi a annoncé un changement de pricing :\n",[31,1274,1275],{"href":1275,"rel":1276},"https:\u002F\u002Fstrapi.io\u002Fblog\u002Fintroducing-user-based-pricing-for-strapi-enterprise-edition",[35],[368,1278,1280],{"id":1279},"astro-js","Astro JS",[981,1282,1283],{},[59,1284,1285],{},"Faire l'inverse des autres !",[59,1287,1288],{},"Astro est un générateur de site statique qui par défaut, ne met aucun JavaScript dans le navigateur.\nVous pouvez développer vos templates avec le langage \".astro\" mais aussi avec vos frameworks JS préférés : lit, Vue, React, Preact, Svelte ou Solid. Astro compile sans problème avec plusieurs frameworks.\nEn cas d'utilisation d'un component créé avec Vue par exemple, il est rendu par défaut sans interaction, juste en HTML. Ensuite, vous pouvez choisir différents modes d'hydratation pour le rendre interactif : load, visible, idle, only.\nIl gère également tous les assets (css, etc.).\nEncore en version bêta, il semble très prometteur.",[368,1290,1076],{"id":1075},[42,1292,1293],{},[45,1294,1295],{},[31,1296,1299],{"href":1297,"rel":1298},"https:\u002F\u002Ffig.io\u002F",[35],"Fig",{"title":152,"searchDepth":153,"depth":153,"links":1301},[1302,1303,1304,1305,1306,1307,1308,1309,1310],{"id":1119,"depth":153,"text":1120},{"id":1138,"depth":153,"text":1139},{"id":1153,"depth":153,"text":1154},{"id":1170,"depth":153,"text":1171},{"id":1187,"depth":153,"text":1188},{"id":1203,"depth":153,"text":1204},{"id":1240,"depth":153,"text":1241},{"id":1279,"depth":153,"text":1280},{"id":1075,"depth":153,"text":1076},[162],"Un épisode de rentrée en format \"news\". Nous revenons sur les annonces qui ont eu lieu durant l'été 2021.","DS_027_news921",3717,27,"8c99b7f6333d2d920abfa786ffb827c9",[],{},"\u002Fpodcasts\u002Fback-to-school","2021-09-17",{"title":1114,"description":1312},"podcasts\u002F027.back-to-school\u002Findex",[1324,965,964,351],"github","bfJjrf7SX9a82iHFIDV3KQdcIl90Lk2IUrmtR-bDkMM",{"id":1327,"title":1328,"author":21,"body":1329,"categories":1407,"description":1408,"dsSlug":1409,"duration":1410,"episodeArtwork":166,"episodeNumber":1411,"episodeType":168,"explicit":6,"extension":169,"guid":1412,"links":1413,"meta":1414,"navigation":173,"path":1415,"publicationDate":1416,"season":176,"seo":1417,"status":178,"stem":1418,"subtitle":1419,"tags":1420,"videoLink":166,"__hash__":1423},"podcasts\u002Fpodcasts\u002F026.wasm\u002Findex.md","What the WASM !",{"type":23,"value":1330,"toc":1404},[1331,1334,1337,1350,1353],[59,1332,1333],{},"WebAssembly est un type de code qui peut être exécuté dans un navigateur web. Langage de bas niveau, il est proche de l'assembleur et il permet d'atteindre des performances proches des applications natives (par exemple écrites en C\u002FC++) tout en fonctionnant sur le Web. WebAssembly est pensé et conçu pour fonctionner en lien avec JavaScript.",[59,1335,1336],{},"Ivan Enderlin, nous explique comment Web Assembly fonctionne et pourquoi il faut s’intéresser à cette techno qui devient de plus en plus populaire.",[42,1338,1339],{},[45,1340,1341,1342,686,1346],{},"Ivan Enderlin : ",[31,1343,1344],{"href":1344,"rel":1345},"https:\u002F\u002Ftwitter.com\u002Fmnt_io",[35],[31,1347,1348],{"href":1348,"rel":1349},"https:\u002F\u002Ftwitter.com\u002Fwasmerio",[35],[26,1351,1352],{"id":459},"Les liens de l'épisode :",[42,1354,1355,1362,1369,1376,1383,1390,1397],{},[45,1356,1357,1358],{},"WebAssembly, ",[31,1359,1360],{"href":1360,"rel":1361},"https:\u002F\u002Fwebassembly.org\u002F",[35],[45,1363,1364,1365],{},"Wasmer, ",[31,1366,1367],{"href":1367,"rel":1368},"https:\u002F\u002Fgithub.com\u002Fwasmerio\u002Fwasmer",[35],[45,1370,1371,1372],{},"Yew Rust Web Framework, ",[31,1373,1374],{"href":1374,"rel":1375},"https:\u002F\u002Fyew.rs\u002F",[35],[45,1377,1378,1379],{},"AssemblyScript, ",[31,1380,1381],{"href":1381,"rel":1382},"https:\u002F\u002Fwww.assemblyscript.org\u002F",[35],[45,1384,1385,1386],{},"wasm-pack, ",[31,1387,1388],{"href":1388,"rel":1389},"https:\u002F\u002Fgithub.com\u002Frustwasm\u002Fwasm-pack\u002F",[35],[45,1391,1392,1393],{},"wasm-bindgen, ",[31,1394,1395],{"href":1395,"rel":1396},"https:\u002F\u002Fgithub.com\u002Frustwasm\u002Fwasm-bindgen",[35],[45,1398,1399,1400],{},"The Rust and WebAssembly book, ",[31,1401,1402],{"href":1402,"rel":1403},"https:\u002F\u002Frustwasm.github.io\u002Fdocs\u002Fbook\u002F",[35],{"title":152,"searchDepth":153,"depth":153,"links":1405},[1406],{"id":459,"depth":156,"text":1352},[162],"Un épisode avec un invité, Ivan Enderlin, co-fondateur de Wasmer. Une runtime open-source pour executer Web Assembly coté serveur.","DS_026_wasm",2246,26,"23fe8555c6839d85bbcebb7cc21ff48b",[],{},"\u002Fpodcasts\u002Fwasm","2021-07-12",{"title":1328,"description":1408},"podcasts\u002F026.wasm\u002Findex","Découvrir WebAssembly avec Ivan Enderlin",[1421,1422],"wasm","rust","-Gj7MrTMa3blMwFd6pgfrAPUR49ARTxojPAUg9Xj4v8",{"id":1425,"title":1426,"author":21,"body":1427,"categories":1472,"description":1473,"dsSlug":1474,"duration":1475,"episodeArtwork":166,"episodeNumber":1476,"episodeType":168,"explicit":6,"extension":169,"guid":1477,"links":1478,"meta":1479,"navigation":173,"path":1480,"publicationDate":1481,"season":176,"seo":1482,"status":178,"stem":1483,"subtitle":1484,"tags":1485,"videoLink":166,"__hash__":1488},"podcasts\u002Fpodcasts\u002F025.site-statique-10000-pages\u002Findex.md","Un site statique de 11000 pages",{"type":23,"value":1428,"toc":1468},[1429,1433,1436,1439,1447,1449],[368,1430,1432],{"id":1431},"le-context","Le context",[59,1434,1435],{},"Sur le papier, les sites statiques c'est l'idéal pour avoir un site rapide et sécurisé. Mais quand est-il pour un site avec beaucoup, beaucoup de pages ?",[59,1437,1438],{},"Un site de média publie un grand nombre d'articles au quotidien et les articles ne sont plus retouchés par la suite. Des pages statiques sont donc l'idéale pour ce type de site.\nEst-il possible de gérer un processus de publication et de déploiement utilisable. Comment se passe le déploiement d'un site avec beaucoup de page. Plusieurs questions en suspens avant la réalisation d'un prototype fait en début d'année 2021.",[59,1440,1441,1442],{},"Cet épisode fait suite à un article publié sur le site ",[31,1443,1446],{"href":1444,"rel":1445},"https:\u002F\u002Fjamstatic.fr\u002F2021\u002F03\u002F09\u002F11000-pages-statiques\u002F",[35],"jamstatic.fr",[368,1448,1352],{"id":459},[42,1450,1451,1457,1463],{},[45,1452,1453],{},[31,1454,1455],{"href":1455,"rel":1456},"https:\u002F\u002Fcraftcms.com\u002F",[35],[45,1458,1459],{},[31,1460,1461],{"href":1461,"rel":1462},"https:\u002F\u002Fnextjs.org\u002F",[35],[45,1464,1465],{},[31,1466,922],{"href":922,"rel":1467},[35],{"title":152,"searchDepth":153,"depth":153,"links":1469},[1470,1471],{"id":1431,"depth":153,"text":1432},{"id":459,"depth":153,"text":1352},[162],"Dans cet épisode, nous allons parler d'un retour d'expérience sur un projet de site statique qui doit comporter un grand nombre de pages.","DS_025_static10k",2339,25,"2cd0208a7d3c92a5b087e46c77caf5f8",[],{},"\u002Fpodcasts\u002Fsite-statique-10000-pages","2021-06-21",{"title":1426,"description":1473},"podcasts\u002F025.site-statique-10000-pages\u002Findex","Un retour d'expérience sur un projet de site statique qui doit comporter un grand nombre de pages.",[1486,1487],"next","static","PEdREUUpatRaXhkYNChi7boRT3ZjFqf2Dzuhdu7DQTE",{"id":1490,"title":1491,"author":21,"body":1492,"categories":1803,"description":1804,"dsSlug":1805,"duration":1806,"episodeArtwork":166,"episodeNumber":5,"episodeType":168,"explicit":6,"extension":169,"guid":1807,"links":1808,"meta":1809,"navigation":173,"path":1810,"publicationDate":1811,"season":176,"seo":1812,"status":178,"stem":1813,"subtitle":1814,"tags":1815,"videoLink":166,"__hash__":1819},"podcasts\u002Fpodcasts\u002F024.core-web-vitals\u002Findex.md","Audit des Google core web vitals",{"type":23,"value":1493,"toc":1789},[1494,1497,1500,1511,1515,1518,1521,1524,1528,1541,1545,1572,1576,1591,1595,1604,1607,1640,1648,1657,1661,1676,1680,1683,1692,1695,1703,1706,1710,1713,1716,1725,1731,1740,1743,1752,1754],[59,1495,1496],{},"Si vous êtes propriétaire d'un site WordPress créé avec un builder, vous pouvez vous inquiéter ! Mais attention, cela peut toucher tous les sites. N'oubliez jamais, rien n'est automatique et votre site sera rapide uniquement si vous faites en sorte qu'il le soit !",[59,1498,1499],{},"Dans cet épisode, nous détaillons les 3 indicateurs et comment améliorer le score d’un site sur chaque critère :",[42,1501,1502,1505,1508],{},[45,1503,1504],{},"Largest Contentful Paint (LCP)",[45,1506,1507],{},"First Input Delay (FID)",[45,1509,1510],{},"Cumulative Layout Shift (CLS)",[368,1512,1514],{"id":1513},"_1-largest-contentful-paint-lcp","1 - Largest Contentful Paint (LCP)",[59,1516,1517],{},"Moins de 2.5 secs pour charger le plus gros élément visible dans le viewport.",[59,1519,1520],{},"Une image, une image dans un svg, une vidéo, élément avec background-image, élément avec du texte.\nPour la majorité des sites, c'est une image (hero image)",[59,1522,1523],{},"Pour trouver l'élément, Dev Tools (chrome) > Preformance (run) > dans la timeline \"Timing\" trouver le bloc \"LCP\"",[26,1525,1527],{"id":1526},"serveur","Serveur",[42,1529,1532],{"className":1530},[1531],"contains-task-list",[45,1533,1536,1540],{"className":1534},[1535],"task-list-item",[1537,1538],"input",{"disabled":173,"type":1539},"checkbox"," optimiser la réponse du serveur (cache, code..)",[26,1542,1544],{"id":1543},"images","Images",[42,1546,1548,1554,1560,1566],{"className":1547},[1531],[45,1549,1551,1553],{"className":1550},[1535],[1537,1552],{"disabled":173,"type":1539}," les images doivent être responsive (afficher différentes images en fonction de la largeur du device).",[45,1555,1557,1559],{"className":1556},[1535],[1537,1558],{"disabled":173,"type":1539}," limiter les formats des images, notamment pour les grands formats",[45,1561,1563,1565],{"className":1562},[1535],[1537,1564],{"disabled":173,"type":1539}," réduire le poids des images et utiliser webp si possible",[45,1567,1569,1571],{"className":1568},[1535],[1537,1570],{"disabled":173,"type":1539}," utiliser loading sur les images pour différer le chargement",[26,1573,1575],{"id":1574},"fonts","Fonts",[42,1577,1579,1585],{"className":1578},[1531],[45,1580,1582,1584],{"className":1581},[1535],[1537,1583],{"disabled":173,"type":1539}," limiter et optimiser les polices",[45,1586,1588,1590],{"className":1587},[1535],[1537,1589],{"disabled":173,"type":1539}," utiliser \"font-display: swap\" et avoir des polices de fallback",[26,1592,1594],{"id":1593},"scripts-tiers","Scripts tiers",[42,1596,1598],{"className":1597},[1531],[45,1599,1601,1603],{"className":1600},[1535],[1537,1602],{"disabled":173,"type":1539}," limiter les scripts tiers (GA, etc..)",[26,1605,1606],{"id":1606},"optimisations",[42,1608,1610,1616,1622,1628,1634],{"className":1609},[1531],[45,1611,1613,1615],{"className":1612},[1535],[1537,1614],{"disabled":173,"type":1539}," réduire le poids des fichiers JS",[45,1617,1619,1621],{"className":1618},[1535],[1537,1620],{"disabled":173,"type":1539}," réduire le poids des fichiers CSS",[45,1623,1625,1627],{"className":1624},[1535],[1537,1626],{"disabled":173,"type":1539}," supprimer le CSS inutilisé",[45,1629,1631,1633],{"className":1630},[1535],[1537,1632],{"disabled":173,"type":1539}," utiliser la technique du critical CSS",[45,1635,1637,1639],{"className":1636},[1535],[1537,1638],{"disabled":173,"type":1539}," defer chargement du CSS si possible. Pour les éléments non visibles.",[541,1641,1646],{"className":1642,"code":1644,"language":1645},[1643],"language-text","for(...)\nvar link = document.createElement('link');\nlink.href = ...\nlink.type = \"text\u002Fcss\"\n...\ndocument.getElementsByTagName('head')[0].appendChild(link)\n","text",[547,1647,1644],{"__ignoreMap":152},[42,1649,1651],{"className":1650},[1531],[45,1652,1654,1656],{"className":1653},[1535],[1537,1655],{"disabled":173,"type":1539}," async ou defer sur les scripts non nécessaires au chargement",[26,1658,1660],{"id":1659},"bonus","Bonus",[42,1662,1664,1670],{"className":1663},[1531],[45,1665,1667,1669],{"className":1666},[1535],[1537,1668],{"disabled":173,"type":1539}," utiliser les preconnect",[45,1671,1673,1675],{"className":1672},[1535],[1537,1674],{"disabled":173,"type":1539}," preload les éléments importants (image hero, fonts)",[368,1677,1679],{"id":1678},"_2-first-input-delay-fid","2 - First Input Delay (FID)",[59,1681,1682],{},"Le temps pour que la page soit utilisable (clique sur un lien ou un bouton par exemple)\nPrincipale coupable, les fichiers JS. Le poids et le temps de parsing.",[42,1684,1686],{"className":1685},[1531],[45,1687,1689,1691],{"className":1688},[1535],[1537,1690],{"disabled":173,"type":1539}," réduire la taille des fichiers JS",[59,1693,1694],{},"Pour limiter le temps de parsing des fichiers.",[42,1696,1698],{"className":1697},[1531],[45,1699,1701,1603],{"className":1700},[1535],[1537,1702],{"disabled":173,"type":1539},[59,1704,1705],{},"Pour limiter les requêtes et le temps de parsing des fichiers.",[368,1707,1709],{"id":1708},"_3-cumulative-layout-shift-cls","3 - Cumulative Layout Shift (CLS)",[59,1711,1712],{},"Dev Tools (chrome) > Performance (run) > Dans timeline \"experience\", trouver le bloc \"Layout Shift\"",[59,1714,1715],{},"Stabilité des éléments dans la page. Insertions de pub, de bannière ou une hydratation qui est longue peut décaler le contenu. Attention aux images qui peuvent décaler le contenu une fois chargé.",[42,1717,1719],{"className":1718},[1531],[45,1720,1722,1724],{"className":1721},[1535],[1537,1723],{"disabled":173,"type":1539}," définir la taille des images et des vidéos. (16:9, height * 16\u002F9)",[541,1726,1729],{"className":1727,"code":1728,"language":1645},[1643],"\u003Cstyle>\n  img {\n    width: 100%;\n    height: auto;\n    \u002F\u002F aspect-ratio: 1\u002F1;\n    aspect-ratio: attr(width) \u002F attr(height);\n  }\n\u003C\u002Fstyle>\n\u003Cimg src=\"hero_image.jpg\" alt=\"\" width=\"500\" height=\"500\">\n\n",[547,1730,1728],{"__ignoreMap":152},[42,1732,1734],{"className":1733},[1531],[45,1735,1737,1739],{"className":1736},[1535],[1537,1738],{"disabled":173,"type":1539}," ne pas insérer des éléments entre d'autres éléments au chargement de la page (pub, banner)",[59,1741,1742],{},"Réserver l'espace pour les éléments dynamiques, utiliser des skeletons pour les images (bloc bg gris par exemple)",[42,1744,1746],{"className":1745},[1531],[45,1747,1749,1751],{"className":1748},[1535],[1537,1750],{"disabled":173,"type":1539}," définir la place pour les éléments \"embed\" (pub, vidéo, etc..)",[26,1753,1352],{"id":459},[42,1755,1756,1763,1769,1776,1782],{},[45,1757,1758],{},[31,1759,1762],{"href":1760,"rel":1761},"https:\u002F\u002Fwww.devisedlabs.com\u002Fblog\u002Flargest-contentful-paint-lcp-hack",[35],"Un hack plutôt efficace",[45,1764,1765],{},[31,1766,1767],{"href":1767,"rel":1768},"https:\u002F\u002Fweb.dev\u002Fvitals\u002F",[35],[45,1770,1771],{},[31,1772,1775],{"href":1773,"rel":1774},"https:\u002F\u002Fdevelopers.google.com\u002Fspeed\u002Fpagespeed\u002Finsights\u002F?hl=fr",[35],"PageSpeed Insights",[45,1777,1778],{},[31,1779,1780],{"href":1780,"rel":1781},"https:\u002F\u002Fgtmetrix.com\u002F",[35],[45,1783,1784],{},[31,1785,1788],{"href":1786,"rel":1787},"https:\u002F\u002Fdevelopers.google.com\u002Fweb\u002Ftools\u002Flighthouse",[35],"Ligthouse",{"title":152,"searchDepth":153,"depth":153,"links":1790},[1791,1799,1800],{"id":1513,"depth":153,"text":1514,"children":1792},[1793,1794,1795,1796,1797,1798],{"id":1526,"depth":156,"text":1527},{"id":1543,"depth":156,"text":1544},{"id":1574,"depth":156,"text":1575},{"id":1593,"depth":156,"text":1594},{"id":1606,"depth":156,"text":1606},{"id":1659,"depth":156,"text":1660},{"id":1678,"depth":153,"text":1679},{"id":1708,"depth":153,"text":1709,"children":1801},[1802],{"id":459,"depth":156,"text":1352},[162],"En juin 2021, Google introduit de nouveaux indicateurs de performance pour les sites web. Ils annoncent qu'ils sont désormais pris en compte dans les critères pour le classement dans le résultat de recherches. On constate une panique générale des propriétaires de site web alors que Google avait prévenu depuis un moment que la vitesse de chargement serait de plus en plus prise en compte.","DS_024_audit",2681,"53da8f3c8d7ba2c6130e200960c65de3",[],{},"\u002Fpodcasts\u002Fcore-web-vitals","2021-06-02",{"title":1491,"description":1804},"podcasts\u002F024.core-web-vitals\u002Findex","Comment faire un audit des core web vitals en 2021 et comment améliorer le score d’un site sur chaque critère.",[1816,1817,1818],"core web vitals","seo","performance","rwYf8AMkkX-YtDAj6RHothos_TKScdaQj_iK6juMciQ",{"id":1821,"title":1822,"author":21,"body":1823,"categories":1916,"description":1917,"dsSlug":1918,"duration":1919,"episodeArtwork":166,"episodeNumber":1920,"episodeType":168,"explicit":6,"extension":169,"guid":1921,"links":1922,"meta":1923,"navigation":173,"path":1924,"publicationDate":1925,"season":176,"seo":1926,"status":178,"stem":1927,"subtitle":1928,"tags":1929,"videoLink":166,"__hash__":1932},"podcasts\u002Fpodcasts\u002F023.meilisearch\u002Findex.md","MeiliSearch, rustique à la française !",{"type":23,"value":1824,"toc":1910},[1825,1833,1837,1840,1842,1845,1848,1866,1868],[59,1826,1827,1832],{},[31,1828,1831],{"href":1829,"rel":1830},"https:\u002F\u002Fwww.meilisearch.com\u002F",[35],"MeiliSearch"," est un moteur de recherche open source.\nDéveloppé sur le langage Rust pour la partie Core, il est possible de le connecter à de multiples autres langages pour l'utiliser sur votre projet. Sans avoir besoin de coder en Rust, vous pouvez alimenter le moteur avec vos data et effectuer des recherches pour les afficher sur votre site.\nVous pouvez installer un serveur facilement via des services comme Digital Ocean par exemple. Ainsi vos données vous appartiennent et vous gérez vous-même votre service de recherche. Vous avez également un coût mensuel maitrisé.",[26,1834,1836],{"id":1835},"historique","Historique :",[59,1838,1839],{},"C'est lors d'un stage chez un gros acteur du e-commerce français qu'ils sont confrontés à la difficulté d'implémenter un moteur de recherche. Ils réalisent une première version lors du stage avec le langage GO.\nPlus tard, vers fin 2018, l'aventure continue avec une nouvelle version basée sur Rust.",[368,1841,995],{"id":1422},[59,1843,1844],{},"Dans l'épisode, nous parlons aussi du langage Rust. Petit retour d’expérience de nos deux invités qui utilisent le langage au quotidien pour en savoir un peu plus sur Rust.",[59,1846,1847],{},"Nous vous laissons découvrir MeiliSearch et Rust plus en détail en écoutant l'épisode numéro 23 avec nos invités:",[42,1849,1850,1858],{},[45,1851,1852,1853],{},"Thomas,",[31,1854,1857],{"href":1855,"rel":1856},"https:\u002F\u002Ftwitter.com\u002Ftotolapaille",[35],"@totolapaille",[45,1859,1860,1861],{},"Marin, ",[31,1862,1865],{"href":1863,"rel":1864},"https:\u002F\u002Ftwitter.com\u002FMarinpostma",[35],"@Marinpostma",[26,1867,1352],{"id":459},[42,1869,1870,1875,1882,1889,1896,1903],{},[45,1871,1872],{},[31,1873,1831],{"href":1829,"rel":1874},[35],[45,1876,1877],{},[31,1878,1881],{"href":1879,"rel":1880},"https:\u002F\u002Fdocs.meilisearch.com\u002F",[35],"Doc",[45,1883,1884],{},[31,1885,1888],{"href":1886,"rel":1887},"https:\u002F\u002Fslack.meilisearch.com",[35],"Le slack",[45,1890,1891],{},[31,1892,1895],{"href":1893,"rel":1894},"https:\u002F\u002Fgithub.com\u002Fmeilisearch\u002Fmeilisearch",[35],"Le github",[45,1897,1898],{},[31,1899,1902],{"href":1900,"rel":1901},"https:\u002F\u002Fdocs.meilisearch.com\u002Flearn\u002Fgetting_started\u002Fquick_start.html#download-and-launch",[35],"Getting started",[45,1904,1905],{},[31,1906,1909],{"href":1907,"rel":1908},"https:\u002F\u002Ftwitter.com\u002Fmeilisearch",[35],"twitter",{"title":152,"searchDepth":153,"depth":153,"links":1911},[1912,1913],{"id":1835,"depth":156,"text":1836},{"id":1422,"depth":153,"text":995,"children":1914},[1915],{"id":459,"depth":156,"text":1352},[162],"Un épisode avec 2 invités : Thomas cofondateur et Marin développeur Core de MeiliSearch. Nous allons parler de ce moteur de recherche open source et du langage Rust.","DS_023_meillisearch",2939,23,"e514d4fc0073c9bb7ad8625d7a190e9a",[],{},"\u002Fpodcasts\u002Fmeilisearch","2021-05-14",{"title":1822,"description":1917},"podcasts\u002F023.meilisearch\u002Findex","Un épisode avec 2 invités : Thomas cofondateur et Marin développeur Core de MeiliSearch. Nous allons parler de ce moteur de recherche open source et du langage Rust",[1930,1931],"meilisearch","search","qU3Kkeik6aJm91NwJXirDCzViSnI9KQnwwNNxob-rKg",{"id":1934,"title":1935,"author":21,"body":1936,"categories":2595,"description":2596,"dsSlug":2597,"duration":2598,"episodeArtwork":166,"episodeNumber":2599,"episodeType":168,"explicit":6,"extension":169,"guid":2600,"links":2601,"meta":2602,"navigation":173,"path":2603,"publicationDate":2604,"season":176,"seo":2605,"status":178,"stem":2606,"subtitle":2607,"tags":2608,"videoLink":166,"__hash__":2611},"podcasts\u002Fpodcasts\u002F022.vite-bundler\u002Findex.md","Vite.., un bundler !",{"type":23,"value":1937,"toc":2590},[1938,1942,1953,1956,1961,2000,2005,2103,2107,2112,2151,2156,2214,2219,2471,2480,2516,2546,2550,2587],[368,1939,1941],{"id":1940},"pourquoi-on-utilise-des-bundlers","Pourquoi on utilise des bundlers :",[42,1943,1944,1947,1950],{},[45,1945,1946],{},"Limiter les requêtes, minifier et éviter de polluer le scope global (window).",[45,1948,1949],{},"Avoir un code plus propre découpé en module.",[45,1951,1952],{},"Et une réutilisation du code.",[59,1954,1955],{},"Avant les bundlers:",[42,1957,1958],{},[45,1959,1960],{},"Immediately Invoked Function Expression (IIFE).",[541,1962,1965],{"className":1963,"code":1964,"language":219,"meta":152,"style":152},"language-js shiki shiki-themes synthwave-84","(function foo() {\n  return bar;\n})();\n",[547,1966,1967,1983,1995],{"__ignoreMap":152},[550,1968,1969,1972,1976,1980],{"class":552,"line":176},[550,1970,1971],{"class":559},"(",[550,1973,1975],{"class":1974},"scrqX","function",[550,1977,1979],{"class":1978},"sgRlq"," foo",[550,1981,1982],{"class":559},"() {\n",[550,1984,1985,1988,1992],{"class":552,"line":153},[550,1986,1987],{"class":1974},"  return",[550,1989,1991],{"class":1990},"sqjNi"," bar",[550,1993,1994],{"class":559},";\n",[550,1996,1997],{"class":552,"line":156},[550,1998,1999],{"class":559},"})();\n",[42,2001,2002],{},[45,2003,2004],{},"Plugin jQuery qui s'appelait à travers jQuery",[541,2006,2008],{"className":1963,"code":2007,"language":219,"meta":152,"style":152},"(function ($) {\n  $.fn.greenify = function () {\n    this.css('color', 'green');\n    return this;\n  };\n})(jQuery);\n",[547,2009,2010,2026,2051,2075,2086,2092],{"__ignoreMap":152},[550,2011,2012,2014,2016,2019,2023],{"class":552,"line":176},[550,2013,1971],{"class":559},[550,2015,1975],{"class":1974},[550,2017,2018],{"class":559}," (",[550,2020,2022],{"class":2021},"sH7Js","$",[550,2024,2025],{"class":559},") {\n",[550,2027,2028,2031,2033,2036,2038,2041,2045,2048],{"class":552,"line":153},[550,2029,2030],{"class":1990},"  $",[550,2032,1003],{"class":559},[550,2034,2035],{"class":1990},"fn",[550,2037,1003],{"class":559},[550,2039,2040],{"class":1978},"greenify",[550,2042,2044],{"class":2043},"sW278"," =",[550,2046,2047],{"class":1974}," function",[550,2049,2050],{"class":559}," () {\n",[550,2052,2053,2057,2059,2061,2063,2067,2069,2072],{"class":552,"line":156},[550,2054,2056],{"class":2055},"swVBR","    this",[550,2058,1003],{"class":559},[550,2060,220],{"class":1978},[550,2062,1971],{"class":559},[550,2064,2066],{"class":2065},"sFl1-","'color'",[550,2068,52],{"class":559},[550,2070,2071],{"class":2065},"'green'",[550,2073,2074],{"class":559},");\n",[550,2076,2078,2081,2084],{"class":552,"line":2077},4,[550,2079,2080],{"class":1974},"    return",[550,2082,2083],{"class":2055}," this",[550,2085,1994],{"class":559},[550,2087,2089],{"class":552,"line":2088},5,[550,2090,2091],{"class":559},"  };\n",[550,2093,2095,2098,2101],{"class":552,"line":2094},6,[550,2096,2097],{"class":559},"})(",[550,2099,2100],{"class":1990},"jQuery",[550,2102,2074],{"class":559},[368,2104,2106],{"id":2105},"les-principaux-types-de-modules","Les principaux types de modules :",[42,2108,2109],{},[45,2110,2111],{},"CommonJS:",[541,2113,2115],{"className":1963,"code":2114,"language":219,"meta":152,"style":152},"require('..');\n\nmodule.exports = ...;\n",[547,2116,2117,2129,2134],{"__ignoreMap":152},[550,2118,2119,2122,2124,2127],{"class":552,"line":176},[550,2120,2121],{"class":1978},"require",[550,2123,1971],{"class":559},[550,2125,2126],{"class":2065},"'..'",[550,2128,2074],{"class":559},[550,2130,2131],{"class":552,"line":153},[550,2132,2133],{"emptyLinePlaceholder":173},"\n",[550,2135,2136,2139,2141,2144,2146,2149],{"class":552,"line":156},[550,2137,2138],{"class":555},"module",[550,2140,1003],{"class":559},[550,2142,2143],{"class":555},"exports",[550,2145,2044],{"class":2043},[550,2147,2148],{"class":1974}," ...",[550,2150,1994],{"class":559},[42,2152,2153],{},[45,2154,2155],{},"AMD (Asynchronous Module Definition):",[541,2157,2159],{"className":1963,"code":2158,"language":219,"meta":152,"style":152},"define(['dep1', 'dep2'], function (dep1, dep2) {\n  \u002F\u002FDefine the module value by returning a value.\n  return function () {};\n});\n",[547,2160,2161,2194,2200,2209],{"__ignoreMap":152},[550,2162,2163,2166,2169,2172,2174,2177,2180,2182,2184,2187,2189,2192],{"class":552,"line":176},[550,2164,2165],{"class":1978},"define",[550,2167,2168],{"class":559},"([",[550,2170,2171],{"class":2065},"'dep1'",[550,2173,52],{"class":559},[550,2175,2176],{"class":2065},"'dep2'",[550,2178,2179],{"class":559},"], ",[550,2181,1975],{"class":1974},[550,2183,2018],{"class":559},[550,2185,2186],{"class":2021},"dep1",[550,2188,52],{"class":559},[550,2190,2191],{"class":2021},"dep2",[550,2193,2025],{"class":559},[550,2195,2196],{"class":552,"line":153},[550,2197,2199],{"class":2198},"sjThu","  \u002F\u002FDefine the module value by returning a value.\n",[550,2201,2202,2204,2206],{"class":552,"line":156},[550,2203,1987],{"class":1974},[550,2205,2047],{"class":1974},[550,2207,2208],{"class":559}," () {};\n",[550,2210,2211],{"class":552,"line":2077},[550,2212,2213],{"class":559},"});\n",[42,2215,2216],{},[45,2217,2218],{},"UMD (Universal Module Definition):",[541,2220,2222],{"className":1963,"code":2221,"language":219,"meta":152,"style":152},"(function (root, factory) {\n    if (typeof define === \"function\" && define.amd) {\n        define([\"jquery\", \"underscore\"], factory);\n    } else if (typeof exports === \"object\") {\n        module.exports = factory(require(\"jquery\"), require(\"underscore\"));\n    } else {\n        root.Requester = factory(root.$, root._);\n    }\n}(this, function ($, _) {\n    \u002F\u002F this is where I defined my module implementation\n\n    var Requester = { \u002F\u002F ... };\n\n    return Requester;\n}));\n",[547,2223,2224,2242,2274,2295,2320,2354,2363,2397,2403,2426,2432,2437,2454,2459,2465],{"__ignoreMap":152},[550,2225,2226,2228,2230,2232,2235,2237,2240],{"class":552,"line":176},[550,2227,1971],{"class":559},[550,2229,1975],{"class":1974},[550,2231,2018],{"class":559},[550,2233,2234],{"class":2021},"root",[550,2236,52],{"class":559},[550,2238,2239],{"class":2021},"factory",[550,2241,2025],{"class":559},[550,2243,2244,2247,2249,2252,2255,2258,2261,2264,2266,2268,2272],{"class":552,"line":153},[550,2245,2246],{"class":1974},"    if",[550,2248,2018],{"class":559},[550,2250,2251],{"class":1974},"typeof",[550,2253,2254],{"class":1990}," define",[550,2256,2257],{"class":1974}," ===",[550,2259,2260],{"class":2065}," \"function\"",[550,2262,2263],{"class":1974}," &&",[550,2265,2254],{"class":1990},[550,2267,1003],{"class":559},[550,2269,2271],{"class":2270},"sz5MA","amd",[550,2273,2025],{"class":559},[550,2275,2276,2279,2281,2284,2286,2289,2291,2293],{"class":552,"line":156},[550,2277,2278],{"class":1978},"        define",[550,2280,2168],{"class":559},[550,2282,2283],{"class":2065},"\"jquery\"",[550,2285,52],{"class":559},[550,2287,2288],{"class":2065},"\"underscore\"",[550,2290,2179],{"class":559},[550,2292,2239],{"class":1990},[550,2294,2074],{"class":559},[550,2296,2297,2300,2303,2306,2308,2310,2313,2315,2318],{"class":552,"line":2077},[550,2298,2299],{"class":559},"    } ",[550,2301,2302],{"class":1974},"else",[550,2304,2305],{"class":1974}," if",[550,2307,2018],{"class":559},[550,2309,2251],{"class":1974},[550,2311,2312],{"class":555}," exports",[550,2314,2257],{"class":1974},[550,2316,2317],{"class":2065}," \"object\"",[550,2319,2025],{"class":559},[550,2321,2322,2325,2327,2329,2331,2334,2336,2338,2340,2342,2345,2347,2349,2351],{"class":552,"line":2088},[550,2323,2324],{"class":555},"        module",[550,2326,1003],{"class":559},[550,2328,2143],{"class":555},[550,2330,2044],{"class":2043},[550,2332,2333],{"class":1978}," factory",[550,2335,1971],{"class":559},[550,2337,2121],{"class":1978},[550,2339,1971],{"class":559},[550,2341,2283],{"class":2065},[550,2343,2344],{"class":559},"), ",[550,2346,2121],{"class":1978},[550,2348,1971],{"class":559},[550,2350,2288],{"class":2065},[550,2352,2353],{"class":559},"));\n",[550,2355,2356,2358,2360],{"class":552,"line":2094},[550,2357,2299],{"class":559},[550,2359,2302],{"class":1974},[550,2361,2362],{"class":559}," {\n",[550,2364,2366,2369,2371,2374,2376,2378,2380,2382,2384,2386,2388,2390,2392,2395],{"class":552,"line":2365},7,[550,2367,2368],{"class":1990},"        root",[550,2370,1003],{"class":559},[550,2372,2373],{"class":2270},"Requester",[550,2375,2044],{"class":2043},[550,2377,2333],{"class":1978},[550,2379,1971],{"class":559},[550,2381,2234],{"class":1990},[550,2383,1003],{"class":559},[550,2385,2022],{"class":2270},[550,2387,52],{"class":559},[550,2389,2234],{"class":1990},[550,2391,1003],{"class":559},[550,2393,2394],{"class":2270},"_",[550,2396,2074],{"class":559},[550,2398,2400],{"class":552,"line":2399},8,[550,2401,2402],{"class":559},"    }\n",[550,2404,2406,2409,2412,2414,2416,2418,2420,2422,2424],{"class":552,"line":2405},9,[550,2407,2408],{"class":559},"}(",[550,2410,2411],{"class":2055},"this",[550,2413,52],{"class":559},[550,2415,1975],{"class":1974},[550,2417,2018],{"class":559},[550,2419,2022],{"class":2021},[550,2421,52],{"class":559},[550,2423,2394],{"class":2021},[550,2425,2025],{"class":559},[550,2427,2429],{"class":552,"line":2428},10,[550,2430,2431],{"class":2198},"    \u002F\u002F this is where I defined my module implementation\n",[550,2433,2435],{"class":552,"line":2434},11,[550,2436,2133],{"emptyLinePlaceholder":173},[550,2438,2440,2443,2446,2448,2451],{"class":552,"line":2439},12,[550,2441,2442],{"class":1974},"    var",[550,2444,2445],{"class":1990}," Requester",[550,2447,2044],{"class":2043},[550,2449,2450],{"class":559}," { ",[550,2452,2453],{"class":2198},"\u002F\u002F ... };\n",[550,2455,2457],{"class":552,"line":2456},13,[550,2458,2133],{"emptyLinePlaceholder":173},[550,2460,2462],{"class":552,"line":2461},14,[550,2463,2464],{"class":559},"    return Requester;\n",[550,2466,2468],{"class":552,"line":2467},15,[550,2469,2470],{"class":559},"}));\n",[42,2472,2473],{},[45,2474,2475,2476],{},"ESM (EcmaScript Modules): compatibilité 92% ",[31,2477,2478],{"href":2478,"rel":2479},"https:\u002F\u002Fcaniuse.com\u002Fes6-module",[35],[541,2481,2483],{"className":1963,"code":2482,"language":219,"meta":152,"style":152},"import toto from ...;\n\nexport default ...;\n",[547,2484,2485,2500,2504],{"__ignoreMap":152},[550,2486,2487,2491,2494,2497],{"class":552,"line":176},[550,2488,2490],{"class":2489},"sfE7D","import",[550,2492,2493],{"class":1990}," toto",[550,2495,2496],{"class":1974}," from",[550,2498,2499],{"class":559}," ...;\n",[550,2501,2502],{"class":552,"line":153},[550,2503,2133],{"emptyLinePlaceholder":173},[550,2505,2506,2509,2512,2514],{"class":552,"line":156},[550,2507,2508],{"class":2489},"export",[550,2510,2511],{"class":1974}," default",[550,2513,2148],{"class":1974},[550,2515,1994],{"class":559},[42,2517,2518,2525,2532,2539],{},[45,2519,2520,2521],{},"Browserify (js + plugin pour autre fichier) première release en 2011. Uniquement JS. Permettait de créer des modules avec require\u002Fmodule.exports: ",[31,2522,2523],{"href":2523,"rel":2524},"http:\u002F\u002Fbrowserify.org\u002F",[35],[45,2526,2527,2528],{},"Brunch (js, css, etc..) simple, peu de config, skeleton: ",[31,2529,2530],{"href":2530,"rel":2531},"https:\u002F\u002Fbrunch.io\u002F",[35],[45,2533,2534,2535],{},"Webpack (js, css, ...): ",[31,2536,2537],{"href":2537,"rel":2538},"https:\u002F\u002Fwebpack.js.org\u002F",[35],[45,2540,2541,2542],{},"Rollup: Top pour faire des packages. Capable de compiler en differents types (CommonJs, AMD, IIFE) ",[31,2543,2544],{"href":2544,"rel":2545},"https:\u002F\u002Frollupjs.org\u002Fguide\u002Fen\u002F",[35],[368,2547,2549],{"id":2548},"nouvelle-génération-de-bundler","Nouvelle génération de bundler",[42,2551,2552,2559,2566,2573,2580],{},[45,2553,2554,2555],{},"Snowpack: En mode dev, pas de bundle. Recharge uniquement le fichier modifié. En production, par défaut, il fait une optimisation optionnelle, mais on est toujours sur du ESM. On peut ajouter des plugins (webpack, Rollup) pour faire un seul fichier. ",[31,2556,2557],{"href":2557,"rel":2558},"https:\u002F\u002Fwww.snowpack.dev\u002F",[35],[45,2560,2561,2562],{},"Rome: ",[31,2563,2564],{"href":2564,"rel":2565},"https:\u002F\u002Fgithub.com\u002Frome\u002Ftools",[35],[45,2567,2568,2569],{},"Vite: Fais beaucoup de choses \"out of the box”. Le mode dev est en ESM. Divise en 2 modules: le code source de l'app et les dépendances. Il prébundle les dépendances, car elles changent peu lors du dev. Le code source est en ESM. Fais un bundle (sans ESBuild mais avec Rollup) pour la production pour le moment. ",[31,2570,2571],{"href":2571,"rel":2572},"https:\u002F\u002Fvitejs.dev\u002F",[35],[45,2574,2575,2576],{},"ESBuild (Go) vraiment jeune pas encore prêt pour la production. Par contre extrêmement rapide et très prometteur. ",[31,2577,2578],{"href":2578,"rel":2579},"https:\u002F\u002Fesbuild.github.io\u002F",[35],[45,2581,2582,2583],{},"WMR: ",[31,2584,2585],{"href":2585,"rel":2586},"https:\u002F\u002Fgithub.com\u002Fpreactjs\u002Fwmr",[35],[651,2588,2589],{},"html pre.shiki code .soy-K, html code.shiki .soy-K{--shiki-default:#BBBBBB}html pre.shiki code .scrqX, html code.shiki .scrqX{--shiki-default:#FEDE5D}html pre.shiki code .sgRlq, html code.shiki .sgRlq{--shiki-default:#36F9F6}html pre.shiki code .sqjNi, html code.shiki .sqjNi{--shiki-default:#FF7EDB}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sH7Js, html code.shiki .sH7Js{--shiki-default:#FF7EDB;--shiki-default-font-style:italic}html pre.shiki code .sW278, html code.shiki .sW278{--shiki-default:#FFFFFFEE}html pre.shiki code .swVBR, html code.shiki .swVBR{--shiki-default:#FE4450;--shiki-default-font-weight:bold}html pre.shiki code .sFl1-, html code.shiki .sFl1-{--shiki-default:#FF8B39}html pre.shiki code .sRQ1T, html code.shiki .sRQ1T{--shiki-default:#FE4450}html pre.shiki code .sjThu, html code.shiki .sjThu{--shiki-default:#848BBD;--shiki-default-font-style:italic}html pre.shiki code .sz5MA, html code.shiki .sz5MA{--shiki-default:#2EE2FA}html pre.shiki code .sfE7D, html code.shiki .sfE7D{--shiki-default:#72F1B8}",{"title":152,"searchDepth":153,"depth":153,"links":2591},[2592,2593,2594],{"id":1940,"depth":153,"text":1941},{"id":2105,"depth":153,"text":2106},{"id":2548,"depth":153,"text":2549},[162],"Les bundlers (générateur de bundle), on les utilise au quotidien. Ils sont indispensables dans les outils des développeurs front et ils ont beaucoup évolué. Nous passons en revue les principaux bundlers les plus utilisés et surtout nous parlons des nouvelles générations de bundler.","DS_022_bundler",2799,22,"b558c0c66f61e51ad282d0827fb11c3a",[],{},"\u002Fpodcasts\u002Fvite-bundler","2021-04-19",{"title":1935,"description":2596},"podcasts\u002F022.vite-bundler\u002Findex","Un épisode dédié aux bundlers. On passe en revue les différents bundlers utilisés et pourquoi les nouveaux comme Vite, changent les règles.",[2609,2610],"vite","bundler","NoxQVztjER13XPENBYUp0j66PlFPuvggQ32RXHpHEdc",{"id":2613,"title":2614,"author":21,"body":2615,"categories":2687,"description":2688,"dsSlug":2689,"duration":2690,"episodeArtwork":166,"episodeNumber":2691,"episodeType":168,"explicit":6,"extension":169,"guid":2692,"links":2693,"meta":2694,"navigation":173,"path":2695,"publicationDate":2696,"season":176,"seo":2697,"status":178,"stem":2698,"subtitle":2688,"tags":2699,"videoLink":166,"__hash__":2702},"podcasts\u002Fpodcasts\u002F021.strapi\u002Findex.md","Strapi, le CMS headless 100% JavaScript avec Jim Laurie",{"type":23,"value":2616,"toc":2684},[2617,2625,2628,2631,2645,2647],[59,2618,2619,2624],{},[31,2620,2623],{"href":2621,"rel":2622},"https:\u002F\u002Fstrapi.io\u002F",[35],"Strapi"," est un CMS open source créé il y a environ 7 ans par 3 personnes lors de leurs études. Créé pour des besoins clients à la base, le projet a rapidement vu sa communauté augmentée et suscité un réel intérêt. Ce qui a poussé les créateurs a tenté l'aventure et continué le projet à la fin de leurs études.\n7 ans plus tard, le CMS est a sa version 3.5, a réalisé 3 levées de fond. Plus de 30 personnes travaillent désormais chez Strapi et le projet est robuste.",[59,2626,2627],{},"Basé 100% sur JavaScript, il tourne sur Node JS (koa) pour la partie back et utilise React JS pour la partie administration.\nIl vous permet de modeler votre API en fonction de votre besoin. De base, vous avez une API Rest disponible avec la gestion des accès. Vous pouvez également utiliser GraphQL pour appeler votre API.\nBref, Strapi vous permet de monter rapidement et facilement une API.",[59,2629,2630],{},"Nous vous laissons découvrir le CMS Strapi plus en détail en écoutant l'épisode numéro 21 avec notre invité:",[42,2632,2633],{},[45,2634,2635,2636],{},"Jim Laurie,\n",[42,2637,2638],{},[45,2639,2640],{},[31,2641,2644],{"href":2642,"rel":2643},"https:\u002F\u002Ftwitter.com\u002Flaurie_jim",[35],"@laurie_jim",[26,2646,1352],{"id":459},[42,2648,2649,2656,2663,2669,2675,2682],{},[45,2650,2651],{},[31,2652,2655],{"href":2653,"rel":2654},"https:\u002F\u002Fwww.strapi.io\u002Fstrapi-conf-2021",[35],"La Strapi Conf du 22 avril 2021",[45,2657,2658],{},[31,2659,2662],{"href":2660,"rel":2661},"https:\u002F\u002Fportal.productboard.com\u002Fstrapi\u002F1-roadmap\u002Ftabs\u002F2-under-consideration",[35],"Roadmap",[45,2664,2665],{},[31,2666,1888],{"href":2667,"rel":2668},"https:\u002F\u002Fslack.strapi.io\u002F",[35],[45,2670,2671],{},[31,2672,1895],{"href":2673,"rel":2674},"https:\u002F\u002Fgithub.com\u002Fstrapi\u002F",[35],[45,2676,2677],{},[31,2678,2681],{"href":2679,"rel":2680},"https:\u002F\u002Fforum.strapi.io\u002F",[35],"Le forum",[45,2683],{},{"title":152,"searchDepth":153,"depth":153,"links":2685},[2686],{"id":459,"depth":156,"text":1352},[162],"Un épisode avec notre invité Jim Laurie, cocréateur et cofondateur de Strapi, un CMS open source 100% JavaScript","DS_021_strapi",4457,21,"3e7174a89bd28661bfaa8bbb11022eb2",[],{},"\u002Fpodcasts\u002Fstrapi","2021-03-08",{"title":2614,"description":2688},"podcasts\u002F021.strapi\u002Findex",[352,2700,2701],"strapi","headless","EN6EuJA41dTm9dUzKriwO4MPab16Do5OUosZQU9H49U",{"id":2704,"title":2705,"author":21,"body":2706,"categories":2733,"description":2734,"dsSlug":2735,"duration":2736,"episodeArtwork":166,"episodeNumber":2737,"episodeType":168,"explicit":6,"extension":169,"guid":2738,"links":2739,"meta":2740,"navigation":173,"path":2741,"publicationDate":2742,"season":176,"seo":2743,"status":178,"stem":2744,"subtitle":2745,"tags":2746,"videoLink":166,"__hash__":2749},"podcasts\u002Fpodcasts\u002F020.fastify-node-js-open-source\u002Findex.md","Fastify, framework rapide Node JS avec Vincent Le Goff",{"type":23,"value":2707,"toc":2731},[2708,2715,2718],[59,2709,2710,2714],{},[31,2711,530],{"href":2712,"rel":2713},"https:\u002F\u002Fwww.fastify.io\u002F",[35]," est un framework pour Node JS qui est principalement orienté sur la légèreté et la rapidité.\nIl offre une très bonne expérience développeur et un système de plugin puissant.\nInspiré par Hapi et Express, il offre de très bonnes performances pour des grosses montées en charge.",[59,2716,2717],{},"Nous vous laissons découvrir le framework plus en détail en écoutant l'épisode numéro 20 avec notre invité:",[42,2719,2720],{},[45,2721,2722,2723],{},"Vincent Le Goff,\n",[42,2724,2725],{},[45,2726,2727],{},[31,2728,2729],{"href":2729,"rel":2730},"https:\u002F\u002Fgithub.com\u002Fzekth",[35],{"title":152,"searchDepth":153,"depth":153,"links":2732},[],[162],"Un épisode avec notre invité Vincent Le Goff qui contribue activement au projet Fastify. Un framework pour Node JS orienté vitesse et légèreté.","DS_020_fastify",3013,20,"c0ab9fa68657a38131e5007e376d1b09",[],{},"\u002Fpodcasts\u002Ffastify-node-js-open-source","2021-02-24",{"title":2705,"description":2734},"podcasts\u002F020.fastify-node-js-open-source\u002Findex","Un épisode avec notre invité Vincent Le Goff qui contribue activement au projet Fastify. Un framework pour Node JS orienté vitesse et légèreté",[2747,2748,219],"nodejs","fastify","G84MFB--h0vsvQ2KQ5zZJ-37YDRMR2BDqX1sFSCZSR4",{"id":2751,"title":2752,"author":21,"body":2753,"categories":2854,"description":2855,"dsSlug":2856,"duration":2857,"episodeArtwork":166,"episodeNumber":2858,"episodeType":168,"explicit":6,"extension":169,"guid":2859,"links":2860,"meta":2861,"navigation":173,"path":2862,"publicationDate":2863,"season":176,"seo":2864,"status":178,"stem":2865,"subtitle":2855,"tags":2866,"videoLink":166,"__hash__":2869},"podcasts\u002Fpodcasts\u002F019.jamstatic-fr-forestry\u002Findex.md","Jamstatic fr, Forestry.io et Tina CMS avec Frank Taillandier",{"type":23,"value":2754,"toc":2850},[2755,2759,2762,2767,2805,2809,2817,2820,2828,2831],[368,2756,2758],{"id":2757},"dans-la-première-partie-nous-allons-parler-de-la-communauté-jamstatic-fr","Dans la première partie, nous allons parler de la communauté \"Jamstatic FR\"",[59,2760,2761],{},"Une communauté qui souhaite réunir les personnes pour échanger autour des sites statiques, des services et des outils.\nSur le site, vous pouvez suivre l'actualité de la JAMStack et du statique. Sur le slack, vous pouvez échanger avec d'autres acteurs de la communauté pour avoir des avis, des retours d'expériences.\nVous pouvez également contribuer en écrivant des articles pour le site en ouvrant une PR sur le Github.",[59,2763,2764],{},[376,2765,2766],{},"La communauté \"Jamstatic FR\" accueillante se retrouve sur différents canaux :",[42,2768,2769,2776,2784,2791,2798],{},[45,2770,2771,2772],{},"Le site internet : ",[31,2773,2774],{"href":2774,"rel":2775},"https:\u002F\u002Fjamstatic.fr\u002F",[35],[45,2777,2778,2779],{},"Le compte Twitter : ",[31,2780,2783],{"href":2781,"rel":2782},"https:\u002F\u002Ftwitter.com\u002Fjamstatic_fr",[35],"@jamstatic_fr",[45,2785,2786,2787],{},"Le slack : ",[31,2788,2789],{"href":2789,"rel":2790},"https:\u002F\u002Fjamstatic.herokuapp.com\u002F",[35],[45,2792,2793,2794],{},"Le github : ",[31,2795,2796],{"href":2796,"rel":2797},"https:\u002F\u002Fgithub.com\u002Fjamstatic",[35],[45,2799,2800,2801],{},"Le podcast : ",[31,2802,2803],{"href":2803,"rel":2804},"https:\u002F\u002Fanchor.fm\u002Fjamstatic\u002F",[35],[368,2806,2808],{"id":2807},"dans-la-deuxième-partie-nous-abordons-forestryio-et-tina-cms","Dans la deuxième partie, nous abordons Forestry.io et Tina CMS",[59,2810,2811,2816],{},[31,2812,2815],{"href":2813,"rel":2814},"https:\u002F\u002Fforestry.io\u002F",[35],"Forestry"," est un cms basé sur Git. Il se connecte à des services type Github, Gitlab pour éditer directement les fichiers dans le repository. Rien n'est stocké chez Forestry, dès que vous sauvez des valeurs dans l'administration Forestry, il effectue un commit sur le repository.",[59,2818,2819],{},"L'administration de Forestry est assez claire et assez configurable. Tout est configuré sur un fichier stocké sur votre projet.",[59,2821,2822,2827],{},[31,2823,2826],{"href":2824,"rel":2825},"https:\u002F\u002Ftina.io\u002F",[35],"Tina CMS"," est un système qui permet d'avoir une édition visuelle de votre contenu et directement sur votre site\u002Fapp. Pour le moment, il est principalement orienté React JS mais il est prévu d'ouvrir à d'autre framework.\nForestry croit beaucoup au projet Tina CMS et investit de plus en plus sur le projet.",[59,2829,2830],{},"Nous vous laissons découvrir le service plus en détail en écoutant l'épisode numéro 19 avec notre invité:",[42,2832,2833],{},[45,2834,2835,2836],{},"Frank Taillandier,\n",[42,2837,2838,2844],{},[45,2839,2840],{},[31,2841,2842],{"href":2842,"rel":2843},"https:\u002F\u002Ftwitter.com\u002FFrankTLDR",[35],[45,2845,2846],{},[31,2847,2848],{"href":2848,"rel":2849},"https:\u002F\u002Fgithub.com\u002FDirtyF",[35],{"title":152,"searchDepth":153,"depth":153,"links":2851},[2852,2853],{"id":2757,"depth":153,"text":2758},{"id":2807,"depth":153,"text":2808},[162],"Un épisode avec notre invité Frank Taillandier qui a créé la communauté Jamstatic FR et qui travaille pour Forestry.io. Un épisode orienté statique !","DS_019_jamstatic",4531,19,"e920b97fca291002903e32ea3aefff46",[],{},"\u002Fpodcasts\u002Fjamstatic-fr-forestry","2021-01-29",{"title":2752,"description":2855},"podcasts\u002F019.jamstatic-fr-forestry\u002Findex",[1487,2867,2868],"jamstack","forestry","JvXB_dB8pTzY_JuzttESa-35_LF7gQyxXVBTcFaTMHU",{"id":2871,"title":2872,"author":21,"body":2873,"categories":2905,"description":2906,"dsSlug":2907,"duration":2908,"episodeArtwork":166,"episodeNumber":2909,"episodeType":168,"explicit":6,"extension":169,"guid":2910,"links":2911,"meta":2912,"navigation":173,"path":2913,"publicationDate":2914,"season":176,"seo":2915,"status":178,"stem":2916,"subtitle":2917,"tags":2918,"videoLink":166,"__hash__":2920},"podcasts\u002Fpodcasts\u002F018.javascript-alpine-js\u002Findex.md","Alpine JS, petit mais costaud !",{"type":23,"value":2874,"toc":2902},[2875,2878,2881,2884,2886],[59,2876,2877],{},"On peut l'utiliser facilement en insérant le script Javascript dans la page ou en installant le package npm.\nIl utilise une syntaxe qui s'inspire de Tailwind CSS et permet de créer des composants dynamiques facilement.",[59,2879,2880],{},"Il est plutôt destiné à être utilisé sur des sites classiques. Un peu moins pour créer des applications complètes comme on peut le faire avec React ou Vue JS.",[59,2882,2883],{},"Nous vous laissons découvrir Alpine JS plus en détail en écoutant l'épisode numéro 18.",[368,2885,1352],{"id":459},[42,2887,2888,2895],{},[45,2889,2890],{},[31,2891,2894],{"href":2892,"rel":2893},"https:\u002F\u002Fgithub.com\u002Falpinejs\u002Falpine",[35],"Repo github Alpine JS",[45,2896,2897],{},[31,2898,2901],{"href":2899,"rel":2900},"https:\u002F\u002Fpixenjoy.com\u002Fnotes\u002Fle-framework-alpinejs\u002F",[35],"Article sur Alpine JS",{"title":152,"searchDepth":153,"depth":153,"links":2903},[2904],{"id":459,"depth":153,"text":1352},[162],"Dans cet épisode, nous allons parler d'un framework innovant qui apporte un peu de nouveauté dans le monde des frameworks Javascript. Alpine JS est un framework léger (moins de 9kb) qui vient se placer entre les frameworks\u002Flibraries complets type Vue JS et jQuery\u002FVanilla JS.","DS_018_alpinejs",2220,18,"7de0a7e693b772b0615747c7c5e3a0f8",[],{},"\u002Fpodcasts\u002Fjavascript-alpine-js","2021-01-11",{"title":2872,"description":2906},"podcasts\u002F018.javascript-alpine-js\u002Findex","Alpine JS est un framework léger (moins de 9kb) qui vient se placer entre les FW complets type Vue JS et jQuery\u002FVanilla JS.",[219,2919],"alpine","w6Vymuvsfws4ABfiADoU08-o6z2xDTW-MUXT-aFddY8",{"id":2922,"title":2923,"author":21,"body":2924,"categories":3031,"description":3032,"dsSlug":3033,"duration":3034,"episodeArtwork":166,"episodeNumber":3035,"episodeType":168,"explicit":6,"extension":169,"guid":3036,"links":3037,"meta":3038,"navigation":173,"path":3039,"publicationDate":3040,"season":176,"seo":3041,"status":178,"stem":3042,"subtitle":3043,"tags":3044,"videoLink":166,"__hash__":3047},"podcasts\u002Fpodcasts\u002F017.e-commerce-snipcart\u002Findex.md","Snipcart avec François Lanthier Nadeau",{"type":23,"value":2925,"toc":3027},[2926,2929,2932,2935,2952,2955,2979,2983,2986,2995,2997],[59,2927,2928],{},"Lancé il y a environ 7 ans, Snipcart en est à sa troisième version. Cette troisième version lancée début 2020 offre une solution complète pour mettre en place rapidement une solution ecommerce.",[59,2930,2931],{},"Il vous suffit d'inclure le script Javascript sur votre site. D'implémenter les bons attributs sur votre élément html (button) pour ajouter un produit dans le panier Snipcart. Et vous êtes prêt pour vendre.",[59,2933,2934],{},"Mais Snipcart offre beaucoup d'autres avantages :",[42,2936,2937,2940,2943,2946,2949],{},[45,2938,2939],{},"personnalisation des éléments (panier, page de check out)",[45,2941,2942],{},"une API pour brancher d'autres services",[45,2944,2945],{},"personnalisation des expéditions",[45,2947,2948],{},"webhooks",[45,2950,2951],{},"etc..",[59,2953,2954],{},"Nous vous laissons découvrir le service plus en détail en écoutant l'épisode numéro 17 avec notre invité:",[42,2956,2957],{},[45,2958,2959,2960,2963],{},"François Lanthier Nadeau, ",[376,2961,2962],{},"CEO de Snipcart",[42,2964,2965,2972],{},[45,2966,2967],{},[31,2968,2971],{"href":2969,"rel":2970},"https:\u002F\u002Ftwitter.com\u002Fthe_fln",[35],"@the_fln",[45,2973,2974],{},[31,2975,2978],{"href":2976,"rel":2977},"https:\u002F\u002Ftwitter.com\u002Fsnipcart",[35],"@snipcart",[368,2980,2982],{"id":2981},"un-article-sur-les-acteurs-de-la-jamstack-indépendants","Un article sur les acteurs de la JAMStack indépendants",[59,2984,2985],{},"Dans l'épisode, nous discutons avec François du monde de la JAMStack, des sociétés qui font des levées de fond et de l'état d'esprit de Snipcart. François a fait un article sur le sujet.",[42,2987,2988],{},[45,2989,2990],{},[31,2991,2994],{"href":2992,"rel":2993},"https:\u002F\u002Fsnipcart.com\u002Fblog\u002Fbootstrap-jamstack",[35],"The Bootstrap Jamstack: How Independent Players Compete\n(en)",[368,2996,1352],{"id":459},[42,2998,2999,3006,3013,3020],{},[45,3000,3001],{},[31,3002,3005],{"href":3003,"rel":3004},"https:\u002F\u002Fsnipcart.com\u002F",[35],"Snipcart",[45,3007,3008],{},[31,3009,3012],{"href":3010,"rel":3011},"https:\u002F\u002Fdocs.snipcart.com\u002Fv3\u002F",[35],"Documentation Snipcart",[45,3014,3015],{},[31,3016,3019],{"href":3017,"rel":3018},"https:\u002F\u002Fsnipcart.com\u002Fblog",[35],"Blog Snipcart",[45,3021,3022],{},[31,3023,3026],{"href":3024,"rel":3025},"https:\u002F\u002Fwww.mercredibiscuiterie.com\u002F",[35],"Un exemple de site",{"title":152,"searchDepth":153,"depth":153,"links":3028},[3029,3030],{"id":2981,"depth":153,"text":2982},{"id":459,"depth":153,"text":1352},[162],"Dans cet épisode, nous allons parler d'un service ecommerce qui vous permet de mettre en place rapidement une boutique en ligne sur n'importe quel système. Snipcart est une solution qui se place entre les systèmes monolithiques du type Prestashop ou Magento et les services API First du type Commerce JS ou Swell.","DS_017_snipcart",3277,17,"314ab0a29bfe296e6123d984df41c97b",[],{},"\u002Fpodcasts\u002Fe-commerce-snipcart","2020-12-25",{"title":2923,"description":3032},"podcasts\u002F017.e-commerce-snipcart\u002Findex","Snipcart est une solution qui vous permet de mettre en place rapidement une boutique en ligne sur n'importe quel système",[3045,3046,1487],"ecommerce","devtools","A6tK7JcxvOYwVJOSSTXY7u88XM18Zt8Dz5AOtPzVTO0",{"id":3049,"title":3050,"author":21,"body":3051,"categories":3131,"description":3132,"dsSlug":3133,"duration":3134,"episodeArtwork":166,"episodeNumber":3135,"episodeType":168,"explicit":6,"extension":169,"guid":3136,"links":3137,"meta":3138,"navigation":173,"path":3139,"publicationDate":3140,"season":176,"seo":3141,"status":178,"stem":3142,"subtitle":166,"tags":3143,"videoLink":166,"__hash__":3146},"podcasts\u002Fpodcasts\u002F016.azure-static-web-app\u002Findex.md","Azure Static Web Apps avec Wassim Chegham",{"type":23,"value":3052,"toc":3128},[3053,3056,3059,3062,3065,3068,3082,3084],[59,3054,3055],{},"Il suffit de créer votre projet avec un outil tel que Nuxt, Next, Gatsby ou Eleventy. Ensuite, vous l'hébergez sur GitHub. Puis, vous déclarez votre repository Github sur votre compte Azure et ce dernier, se chargera de compiler et publier automatiquement votre projet en ligne.",[59,3057,3058],{},"Vous avez aussi la possibilité d'utiliser des fonctions dans votre projet que vous pourrez appeler directement de votre web app pour vous connecter à une API ou réceptionner les data d'un formulaire par exemple.",[59,3060,3061],{},"Azure Static Web Apps permet également la gestion des authentifications dans votre application statique.",[59,3063,3064],{},"Actuellement, le service Azure Static Web Apps est en \"preview\". Durant cette période de présentation, le service est gratuit.",[59,3066,3067],{},"Nous vous laissons découvrir le service plus en détail en écoutant l'épisode numéro 16 avec notre invité:",[59,3069,3070,3071,3074,686,3078],{},"Wassim Chegham, ",[376,3072,3073],{},"Senior Developer Advocate spécialisé JavaScript",[31,3075,3076],{"href":3076,"rel":3077},"https:\u002F\u002Fgithub.com\u002Fmanekinekko",[35],[31,3079,3080],{"href":3080,"rel":3081},"http:\u002F\u002Fwassim.dev",[35],[368,3083,1352],{"id":459},[42,3085,3086,3093,3100,3107,3114,3121],{},[45,3087,3088],{},[31,3089,3092],{"href":3090,"rel":3091},"https:\u002F\u002Fazure.microsoft.com\u002Ffr-fr\u002Fservices\u002Fapp-service\u002Fstatic\u002F?WT.mc_id=javascript-00000-wachegha",[35],"Azure static Web Apps",[45,3094,3095],{},[31,3096,3099],{"href":3097,"rel":3098},"https:\u002F\u002Fdocs.microsoft.com\u002Ffr-fr\u002Fazure\u002Fstatic-web-apps\u002Foverview?WT.mc_id=javascript-00000-wachegha",[35],"Documentation Azure static Web Apps",[45,3101,3102],{},[31,3103,3106],{"href":3104,"rel":3105},"https:\u002F\u002Fdocs.microsoft.com\u002Ffr-fr\u002Fazure\u002Fazure-functions\u002Fcreate-first-function-vs-code-node?WT.mc_id=javascript-00000-wachegha",[35],"Documentation serverless",[45,3108,3109],{},[31,3110,3113],{"href":3111,"rel":3112},"https:\u002F\u002Fdocs.microsoft.com\u002Ffr-fr\u002Flearn\u002Fpaths\u002Fbuild-javascript-applications-nodejs\u002F?WT.mc_id=javascript-00000-wachegha",[35],"Cours gratuit sur Node JS",[45,3115,3116],{},[31,3117,3120],{"href":3118,"rel":3119},"https:\u002F\u002Fgithub.com\u002Fmanekinekko\u002Fswa-emulator",[35],"Static Web Apps Emulator",[45,3122,3123],{},[31,3124,3127],{"href":3125,"rel":3126},"https:\u002F\u002Fecologi.com\u002Fwassimchegham?r=5facf70521660a001d024120",[35],"Acheter un arbre sur Ecologi",{"title":152,"searchDepth":153,"depth":153,"links":3129},[3130],{"id":459,"depth":153,"text":1352},[162],"Dans cet épisode, nous allons parler du nouveau service de Microsoft avec notre invité, Wassim Chegham. Présenté en mai 2020, Azure static Web Apps permet d'héberger vos projets destinés à être compilés pour générer un site ou une web app statique.","DS_016_swa",3401,16,"e3a620e47a0c34dcf64503211d1b5ea6",[],{},"\u002Fpodcasts\u002Fazure-static-web-app","2020-12-07",{"title":3050,"description":3132},"podcasts\u002F016.azure-static-web-app\u002Findex",[3144,3145,349],"azure","swa","m-C9YEpmXS8dXtlHK-G-ihfWbbSBVcfs-uC6SZqoVu4",{"id":3148,"title":3149,"author":21,"body":3150,"categories":3307,"description":3308,"dsSlug":3309,"duration":3310,"episodeArtwork":166,"episodeNumber":2467,"episodeType":168,"explicit":6,"extension":169,"guid":3311,"links":3312,"meta":3313,"navigation":173,"path":3314,"publicationDate":3315,"season":176,"seo":3316,"status":178,"stem":3317,"subtitle":3318,"tags":3319,"videoLink":166,"__hash__":3320},"podcasts\u002Fpodcasts\u002F015.news-octobre-2020\u002Findex.md","Épisode news avec React 17, Webpack 5, NextJS 10, Gatsby...",{"type":23,"value":3151,"toc":3298},[3152,3156,3172,3176,3185,3189,3219,3223,3253,3256,3265,3269,3278,3282],[368,3153,3155],{"id":3154},"webpack-5","Webpack 5",[42,3157,3158,3165],{},[45,3159,3160],{},[31,3161,3164],{"href":3162,"rel":3163},"https:\u002F\u002Fmedium.com\u002Ffrontend-digest\u002Fwhats-new-in-webpack-5-ef619bb74fae",[35],"Whats new in webpack 5",[45,3166,3167],{},[31,3168,3171],{"href":3169,"rel":3170},"https:\u002F\u002Fwebpack.js.org\u002Fmigrate\u002F5\u002F",[35],"Doc migration 4 to 5",[368,3173,3175],{"id":3174},"react-17","React 17",[42,3177,3178],{},[45,3179,3180],{},[31,3181,3184],{"href":3182,"rel":3183},"https:\u002F\u002Freactjs.org\u002Fblog\u002F2020\u002F10\u002F20\u002Freact-v17.html",[35],"Annonce de la version 17",[368,3186,3188],{"id":3187},"next-js-10","Next JS 10",[42,3190,3191,3198,3205,3212],{},[45,3192,3193],{},[31,3194,3197],{"href":3195,"rel":3196},"https:\u002F\u002Fmedium.com\u002Ffrontend-digest\u002Fwhats-new-in-nextjs-10-218d84145fea",[35],"Whats new in Next JS 10",[45,3199,3200],{},[31,3201,3204],{"href":3202,"rel":3203},"https:\u002F\u002Fnextjs.org\u002Fblog\u002Fnext-10",[35],"Annonce de Next JS 10",[45,3206,3207],{},[31,3208,3211],{"href":3209,"rel":3210},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fnext.js\u002Fanalytics",[35],"Next JS analytics",[45,3213,3214],{},[31,3215,3218],{"href":3216,"rel":3217},"https:\u002F\u002Fnextjs.org\u002Fcommerce",[35],"Next JS Commerce",[368,3220,3222],{"id":3221},"gatsby","Gatsby",[42,3224,3225,3232,3239,3246],{},[45,3226,3227],{},[31,3228,3231],{"href":3229,"rel":3230},"https:\u002F\u002Fwww.gatsbyjs.com\u002Fdocs\u002Ffile-system-page-creation\u002F",[35],"File system Route API",[45,3233,3234],{},[31,3235,3238],{"href":3236,"rel":3237},"https:\u002F\u002Fgithub.com\u002Fgatsbyjs\u002Fgatsby\u002Fblob\u002Fmaster\u002Fpackages\u002Fgatsby-admin\u002FREADME.md",[35],"Gatsby Admin",[45,3240,3241],{},[31,3242,3245],{"href":3243,"rel":3244},"https:\u002F\u002Fgithub.com\u002Fgatsbyjs\u002Fgatsby\u002Fdiscussions\u002F27667",[35],"Gatsby Function",[45,3247,3248],{},[31,3249,3252],{"href":3250,"rel":3251},"https:\u002F\u002Fgithub.com\u002Fgatsbyjs\u002Fgatsby\u002Fdiscussions\u002F27668",[35],"New Gatsby Image API",[368,3254,3255],{"id":816},"Angular",[42,3257,3258],{},[45,3259,3260],{},[31,3261,3264],{"href":3262,"rel":3263},"https:\u002F\u002Fscully.io\u002F",[35],"Scully",[368,3266,3268],{"id":3267},"mdn-en-mode-jamstack","MDN en mode JAMStack",[42,3270,3271],{},[45,3272,3273],{},[31,3274,3277],{"href":3275,"rel":3276},"https:\u002F\u002Fhacks.mozilla.org\u002F2020\u002F10\u002Fmdn-web-docs-evolves-lowdown-on-the-upcoming-new-platform\u002F",[35],"article",[368,3279,3281],{"id":3280},"article-comparaison-des-temps-de-compilation-des-gss","Article: \"comparaison des temps de compilation des GSS\"",[42,3283,3284,3291],{},[45,3285,3286],{},[31,3287,3290],{"href":3288,"rel":3289},"https:\u002F\u002Fjamstatic.fr\u002F2020\u002F10\u002F31\u002Fcomparatif-performance-generateurs-de-site-statique\u002F",[35],"article fr",[45,3292,3293],{},[31,3294,3297],{"href":3295,"rel":3296},"https:\u002F\u002Fcss-tricks.com\u002Fcomparing-static-site-generator-build-times\u002F",[35],"article original",{"title":152,"searchDepth":153,"depth":153,"links":3299},[3300,3301,3302,3303,3304,3305,3306],{"id":3154,"depth":153,"text":3155},{"id":3174,"depth":153,"text":3175},{"id":3187,"depth":153,"text":3188},{"id":3221,"depth":153,"text":3222},{"id":816,"depth":153,"text":3255},{"id":3267,"depth":153,"text":3268},{"id":3280,"depth":153,"text":3281},[162],"Un épisode spécial news. Nous allons revenir sur les dernières sorties. Sur le passage de la documentation web MDN en mode JAMStack. Puis parler d'un article comparatif sur les générateurs de site statique : Hugo, Eleventy, Jekyll, Gatsby, Next, Nuxt.","DS_015_newsOCT",3012,"085209868df93d54ab3b514a48b426d8",[],{},"\u002Fpodcasts\u002Fnews-octobre-2020","2020-11-05",{"title":3149,"description":3308},"podcasts\u002F015.news-octobre-2020\u002Findex","Nous allons revenir sur les dernières sorties. Sur le passage de la documentation web MDN en mode JAMStack. Puis parler d'un article comparatif sur les générateurs de site statique.",[518,350,1486,816],"ru2WaqGy2dK1HUdZvcdHe0uvnbOprxSngOwRsywQN-k",{"id":3322,"title":3323,"author":21,"body":3324,"categories":3480,"description":3481,"dsSlug":3482,"duration":3483,"episodeArtwork":166,"episodeNumber":2461,"episodeType":168,"explicit":6,"extension":169,"guid":3484,"links":3485,"meta":3486,"navigation":173,"path":3487,"publicationDate":3488,"season":176,"seo":3489,"status":178,"stem":3490,"subtitle":3491,"tags":3492,"videoLink":166,"__hash__":3493},"podcasts\u002Fpodcasts\u002F014.e-commerce-state-2020\u002Findex.md","Les plateformes e-commerce en 2020 avec Aurélien Lavorel",{"type":23,"value":3325,"toc":3473},[3326,3329,3349,3353,3373,3377,3391,3395,3421,3425,3439,3443],[59,3327,3328],{},"Notre invité, Aurélien Lavorel, est un expert e-commerce. Il nous donne ses avis sur les plateformes disponibles, vers quelle forme de plateforme va se diriger le e-commerce et des conseils pour lancer un e-commerce en 2020.",[59,3330,3331,3332,686,3336,3341],{},"Aurélien Lavorel : ",[31,3333,3334],{"href":3334,"rel":3335},"https:\u002F\u002Flumao.eu\u002F",[35],[31,3337,3340],{"href":3338,"rel":3339},"https:\u002F\u002Ftwitter.com\u002FLavoWeb",[35],"@LavoWeb",[376,3342,3343,3344],{},"Développeur certifié #Magento et dirigant de ",[31,3345,3348],{"href":3346,"rel":3347},"https:\u002F\u002Ftwitter.com\u002FLumaoSAS",[35],"@LumaoSAS",[368,3350,3352],{"id":3351},"les-plateformes-historiques","Les plateformes historiques",[42,3354,3355,3361,3367],{},[45,3356,3357],{},[31,3358,3359],{"href":3359,"rel":3360},"https:\u002F\u002Fmagento.com\u002F",[35],[45,3362,3363],{},[31,3364,3365],{"href":3365,"rel":3366},"https:\u002F\u002Fwww.prestashop.com\u002Ffr",[35],[45,3368,3369],{},[31,3370,3371],{"href":3371,"rel":3372},"https:\u002F\u002Fwoocommerce.com\u002F",[35],[368,3374,3376],{"id":3375},"les-nouveaux-acteurs","Les nouveaux acteurs",[42,3378,3379,3385],{},[45,3380,3381],{},[31,3382,3383],{"href":3383,"rel":3384},"https:\u002F\u002Fsylius.com\u002F",[35],[45,3386,3387],{},[31,3388,3389],{"href":3389,"rel":3390},"https:\u002F\u002Fwww.salesforce.com\u002Ffr\u002Fproducts\u002Fcommerce-cloud\u002Foverview\u002F",[35],[368,3392,3394],{"id":3393},"les-solutions-sass","Les solutions SASS",[42,3396,3397,3403,3409,3415],{},[45,3398,3399],{},[31,3400,3401],{"href":3401,"rel":3402},"https:\u002F\u002Fwww.shopify.fr\u002F",[35],[45,3404,3405],{},[31,3406,3407],{"href":3407,"rel":3408},"https:\u002F\u002Fsnipcart.com\u002Ffr",[35],[45,3410,3411],{},[31,3412,3413],{"href":3413,"rel":3414},"https:\u002F\u002Fswell.store\u002F",[35],[45,3416,3417],{},[31,3418,3419],{"href":3419,"rel":3420},"https:\u002F\u002Fcommercejs.com\u002F",[35],[368,3422,3424],{"id":3423},"les-solutions-front-web-app","Les solutions Front Web App",[42,3426,3427,3433],{},[45,3428,3429],{},[31,3430,3431],{"href":3431,"rel":3432},"https:\u002F\u002Fwww.vuestorefront.io\u002F",[35],[45,3434,3435],{},[31,3436,3437],{"href":3437,"rel":3438},"https:\u002F\u002Fwww.front-commerce.com\u002F",[35],[368,3440,3442],{"id":3441},"autres-liens","Autres liens",[42,3444,3445,3452,3459,3466],{},[45,3446,3447,3448],{},"React hook Stripe ",[31,3449,3450],{"href":3450,"rel":3451},"https:\u002F\u002Fuseshoppingcart.com\u002F",[35],[45,3453,3454,3455],{},"Liste de solutions e-commerce headless ",[31,3456,3457],{"href":3457,"rel":3458},"https:\u002F\u002Fheadlesscommerce.org\u002F",[35],[45,3460,3461,3462],{},"Exemple d'une solution GatsbyJS\u002FSylius ",[31,3463,3464],{"href":3464,"rel":3465},"https:\u002F\u002Fgithub.com\u002FGatsbylius\u002FGatsbylius",[35],[45,3467,3468,3469],{},"Solution de tracking de livraison ",[31,3470,3471],{"href":3471,"rel":3472},"https:\u002F\u002Fwww.shipup.co\u002F",[35],{"title":152,"searchDepth":153,"depth":153,"links":3474},[3475,3476,3477,3478,3479],{"id":3351,"depth":153,"text":3352},{"id":3375,"depth":153,"text":3376},{"id":3393,"depth":153,"text":3394},{"id":3423,"depth":153,"text":3424},{"id":3441,"depth":153,"text":3442},[162],"Dans ce nouvel épisode, nous allons faire un état des lieux des différentes plateformes et solutions e-commerce en 2020. Faut-il encore utiliser les CMS les plus connus (Magento, Prestashop, WooCommerce) ou passer sur des solutions SASS (Shopify..).","DS_014_ecommerce2020",4302,"3dff15e6db69929b871c5393172a91d8",[],{},"\u002Fpodcasts\u002Fe-commerce-state-2020","2020-10-21",{"title":3323,"description":3481},"podcasts\u002F014.e-commerce-state-2020\u002Findex","État des lieux des différentes plateformes et solutions e-commerce en 2020. Faut-il encore utiliser les CMS les plus connus (Magento, Prestashop, WooCommerce) ou passer sur des solutions SASS (Shopify..).",[3045],"1Hyxjh7sQbbQ01sYQzXjJZaYMQeHAz9tNAI8TbolFHA",{"id":3495,"title":3496,"author":21,"body":3497,"categories":3589,"description":3590,"dsSlug":3591,"duration":3592,"episodeArtwork":166,"episodeNumber":2456,"episodeType":168,"explicit":6,"extension":169,"guid":3593,"links":3594,"meta":3595,"navigation":173,"path":3596,"publicationDate":3597,"season":176,"seo":3598,"status":178,"stem":3599,"subtitle":3600,"tags":3601,"videoLink":166,"__hash__":3603},"podcasts\u002Fpodcasts\u002F013.graphql-hype-or-revolution\u002Findex.md","GraphQL, Hype ou Révolution",{"type":23,"value":3498,"toc":3584},[3499,3502,3506,3517,3521,3547,3551],[59,3500,3501],{},"Pourquoi avons-nous besoin d'utiliser graphQL dans nos projets, quels sont les avantages et inconvénients par rapport à REST.",[26,3503,3505],{"id":3504},"solutions-connues","Solutions connues",[42,3507,3508,3511,3514],{},[45,3509,3510],{},"SOAP est un protocole qui retourne des données en XML",[45,3512,3513],{},"REST est une norme basée sur le protocole HTTP créée en 2000",[45,3515,3516],{},"GraphQL est un langage de requête basé sur le protocole HTTP",[26,3518,3520],{"id":3519},"quelques-api-publiques-rest-et-graphql","Quelques API publiques REST et GraphQL",[42,3522,3523,3529,3535,3541],{},[45,3524,3525],{},[31,3526,3527],{"href":3527,"rel":3528},"https:\u002F\u002Fapi.got.show\u002Fdoc\u002F",[35],[45,3530,3531],{},[31,3532,3533],{"href":3533,"rel":3534},"https:\u002F\u002Fjsonplaceholder.typicode.com\u002F",[35],[45,3536,3537],{},[31,3538,3539],{"href":3539,"rel":3540},"https:\u002F\u002Fswapi.dev\u002F",[35],[45,3542,3543],{},[31,3544,3545],{"href":3545,"rel":3546},"http:\u002F\u002Fgraphql.org\u002Fswapi-graphql",[35],[26,3548,3550],{"id":3549},"liens","Liens",[42,3552,3553,3560,3567,3572,3577],{},[45,3554,3555],{},[31,3556,3559],{"href":3557,"rel":3558},"https:\u002F\u002Fgraphql.org\u002F",[35],"GraphQL Org",[45,3561,3562],{},[31,3563,3566],{"href":3564,"rel":3565},"https:\u002F\u002Fgithub.com\u002Fchentsulin\u002Fawesome-graphql",[35],"Awesome GraphQL",[45,3568,3569],{},[31,3570,437],{"href":435,"rel":3571},[35],[45,3573,3574],{},[31,3575,521],{"href":1009,"rel":3576},[35],[45,3578,3579],{},[31,3580,3583],{"href":3581,"rel":3582},"https:\u002F\u002Fgithub.com\u002Fapollographql",[35],"Apollo GraphQL",{"title":152,"searchDepth":153,"depth":153,"links":3585},[3586,3587,3588],{"id":3504,"depth":156,"text":3505},{"id":3519,"depth":156,"text":3520},{"id":3549,"depth":156,"text":3550},[162],"Dans cet épisode, nous allons parler de GraphQL et de REST. GraphQL est un langage de requête basé sur le protocole HTTP qui a été pensé pour une utilisation adapté aux usages actuels.","DS_013_graphql",3464,"e52e7d625a9a2113b1163230a11925d6",[],{},"\u002Fpodcasts\u002Fgraphql-hype-or-revolution","2020-10-05",{"title":3496,"description":3590},"podcasts\u002F013.graphql-hype-or-revolution\u002Findex","GraphQL est un langage de requête basé sur le protocole HTTP qui a été pensé pour une utilisation adapté aux usages actuels",[3602,493],"api","g3JgYkJX-efCI_AYrytLzugBGigsqb113e-8-fd5unA",{"id":3605,"title":3606,"author":21,"body":3607,"categories":3668,"description":3669,"dsSlug":3670,"duration":3671,"episodeArtwork":166,"episodeNumber":2439,"episodeType":168,"explicit":6,"extension":169,"guid":3672,"links":3673,"meta":3674,"navigation":173,"path":3675,"publicationDate":3676,"season":176,"seo":3677,"status":178,"stem":3678,"subtitle":3679,"tags":3680,"videoLink":166,"__hash__":3682},"podcasts\u002Fpodcasts\u002F012.github-readme\u002Findex.md","Utiliser le Github README comme Portfolio",{"type":23,"value":3608,"toc":3663},[3609,3612,3616,3626,3628,3644,3647],[59,3610,3611],{},"En créant un repository avec le même nom que votre profil et en y ajoutant un fichier README, vous pouvez améliorer votre profil GitHub.\nMais vous pouvez aller encore plus loin avec l'automatisation. C'est ce que l'on vous explique dans cet épisode.",[368,3613,3615],{"id":3614},"exemples-de-readme-portfolio-avec-automatisation","Exemples de Readme Portfolio avec automatisation",[42,3617,3618],{},[45,3619,3620,3625],{},[31,3621,3624],{"href":3622,"rel":3623},"https:\u002F\u002Fgithub.com\u002Fxlanex6",[35],"Github d'alex",", avec le code source et les workflows consultables.",[26,3627,3550],{"id":3549},[42,3629,3630,3637],{},[45,3631,3632],{},[31,3633,3636],{"href":3634,"rel":3635},"https:\u002F\u002Fsimpleicons.org\u002F",[35],"Icons",[45,3638,3639],{},[31,3640,3643],{"href":3641,"rel":3642},"https:\u002F\u002Fshields.io\u002F",[35],"Badges",[59,3645,3646],{},"Pour l'automatisation:",[42,3648,3649,3656],{},[45,3650,3651],{},[31,3652,3655],{"href":3653,"rel":3654},"https:\u002F\u002Fgithub.com\u002Fanuraghazra\u002Fgithub-readme-stats",[35],"GitHub Readme Stats",[45,3657,3658],{},[31,3659,3662],{"href":3660,"rel":3661},"https:\u002F\u002Fpipedream.com\u002F",[35],"Pipedream",{"title":152,"searchDepth":153,"depth":153,"links":3664},[3665],{"id":3614,"depth":153,"text":3615,"children":3666},[3667],{"id":3549,"depth":156,"text":3550},[162],"Dans cet épisode, nous allons parler d'une fonctionnalité sur github.com qui permet d'améliorer sa page d'accueil GitHub.","DS_012_github_readme",1699,"d938da08dcb61e54ab6ae1c9706c80e2",[],{},"\u002Fpodcasts\u002Fgithub-readme","2020-09-19",{"title":3606,"description":3669},"podcasts\u002F012.github-readme\u002Findex","Comment créer un portfolio automatiquement avec la nouvelle fonctionnalité de GitHub pour améliorer votre profil",[3681,1324,3046],"git","vKce3lkWDUI0RAFZrYh7JTzjAYD0qAAXZ1hNZtse4Dc",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":3684},"\u003Cpath fill=\"currentColor\" d=\"M4 21V9l8-6l8 6v12h-6v-7h-4v7z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":3686},"\u003Cpath fill=\"currentColor\" d=\"M12 2C6.475 2 2 6.475 2 12s4.475 10 10 10s10-4.475 10-10S17.525 2 12 2m-2 14.5v-9l6 4.5z\"\u002F>",["Island",3688],{"key":3689,"result":3690},"Brand_bAcjTzQpW6OVpFK319jfMki97vH1GrZiqHmeI7Xg4o",{"head":3691},{},["Island",3693],{"key":3694,"result":3695},"Duration_bXAvyLJy4hnjKFbTgCa0tjmFSMDLbxzWoVaHXAGg",{"head":3696},{},["Island",3698],{"key":3699,"result":3700},"Duration_IB9YkQaWffMT6Iu62AbupywxFoY5cfRfRk9pGN5KM",{"head":3701},{},["Island",3703],{"key":3704,"result":3705},"Duration_7202gHk1KJgRdWUEOZVZMWjj3Hb2mF4m9FK8EmXQH8",{"head":3706},{},["Island",3708],{"key":3709,"result":3710},"Duration_J0xMwsB2Ow0znN05i11Gnyd78T59EtXXyQLrUfI",{"head":3711},{},["Island",3713],{"key":3714,"result":3715},"Duration_W1lzm9oJmMyoAwAvc7hZ4ps4wEuDw8WNPbE6RwBXH0g",{"head":3716},{},["Island",3718],{"key":3719,"result":3720},"Duration_KbWXzwI0tSzZpVMEA9EPZkuKPxFEGBjHi6kRxDNEhmk",{"head":3721},{},["Island",3723],{"key":3724,"result":3725},"Duration_DcvrPH2VjkdKRr8iwYtZ26K4XGSjxRwwjLGTlXEJh4",{"head":3726},{},["Island",3728],{"key":3729,"result":3730},"Duration_4oVvJQfqqsiSHoTlJS4mGIhspKHOXamcUSvT69fdYgg",{"head":3731},{},["Island",3733],{"key":3734,"result":3735},"Duration_MiFZNqp8gruN5BRPuaep6ujzxVixbOexkuGKhddnzE",{"head":3736},{},["Island",3738],{"key":3739,"result":3740},"Duration_mtsQhDf23d2NPbe9Uvzjb9G1GMDacU3hOYGG76zc",{"head":3741},{},["Island",3743],{"key":3744,"result":3745},"Duration_RjYPp9v2Nj9GWeTndKtdlOPQ9m5m5aqDZwnNmAD2WOQ",{"head":3746},{},["Island",3748],{"key":3749,"result":3750},"Duration_lyDyuwcAx5uPrV1YTPadPqiUXRBseArvizs268qcYg4",{"head":3751},{},["Island",3753],{"key":3754,"result":3755},"Duration_ySvEtgnwTYqWZ8uxpicgpN7uP3GYhLLKfhOD4NPBg",{"head":3756},{},["Island",3758],{"key":3759,"result":3760},"Duration_fIff5zPmTrS9dEPCpKvTKpbkTqovLWM2KhOyNhg0XP0",{"head":3761},{},["Island",3763],{"key":3764,"result":3765},"Duration_QcFhSy5jwBqrAcH39nfeMaHtcx9yAfcpq8H7GtZi9hc",{"head":3766},{},["Island",3768],{"key":3769,"result":3770},"Duration_xjvprifJhQwpLCsfOfzDhvKc5nSPH2oFPNC0GE3ZG4",{"head":3771},{},["Island",3773],{"key":3774,"result":3775},"Duration_u3gHTLbWaAst355C73glH2WbEmxBih32snaVk57DMo",{"head":3776},{},["Island",3778],{"key":3779,"result":3780},"Duration_PV9uCPg5iUn9LhWZrDGgJbopoThtzFvCoi2QXaHw",{"head":3781},{},["Island",3783],{"key":3784,"result":3785},"Duration_txf832WnL2vXulWRBES0SrDf47yFmcK1bxABC11lxAs",{"head":3786},{},["Island",3788],{"key":3789,"result":3790},"Duration_EFkrFFMtACs9ZUFpyq9hHwxOe4PLGgTmVQWHzWS4",{"head":3791},{},["Island",3793],{"key":3794,"result":3795},"Duration_RbPXK9ZEETwbis4kEy5gUpmwIW7WNJDBXDIAEd0",{"head":3796},{},["Island",3798],{"key":3799,"result":3800},"Duration_4pYWfuLru3qoQwiVXbsfFmO9u7Xp6fbjgMuobn4LLOA",{"head":3801},{},["Island",3803],{"key":3804,"result":3805},"Duration_gFyYJIxKJqJSdNXFOaLlSmK4H1CSoJKKZoBJvgPdDQc",{"head":3806},{},["Island",3808],{"key":3809,"result":3810},"Duration_AeiGaUoNqY5MtXWqiwnu2xrWgcqoxvi8B58zKquMA",{"head":3811},{},["Island",3813],{"key":3814,"result":3815},"Duration_thtleCgfhm5lEVbAAbs26ZtSRFb9JrWXQqRwA5WMiA",{"head":3816},{},1785405175079]