{"data":{"site":{"siteMetadata":{"title":"@nicoespeon's blog","subtitles":{"en":"I write about VS Code, web development and life in general.","fr":"J’écris à propos de VS Code, du développement web et de la vie en général."},"greetings":{"en":"Hi, I'm Nicolas 👋","fr":"Salut, je suis Nicolas 👋"},"menus":{"en":[{"label":"Articles","path":"/"},{"label":"Talks","path":"/talks"},{"label":"Side projects","path":"/projects"},{"label":"Who I am","path":"/about"},{"label":"My recommendations","path":"/worth-reading"}],"fr":[{"label":"Articles","path":"/fr/"},{"label":"Talks","path":"/fr/talks"},{"label":"Projets personnels","path":"/fr/projects"},{"label":"Qui je suis","path":"/fr/about"},{"label":"Mes recommandations","path":"/fr/worth-reading"}]},"author":{"name":"Nicolas Carlo","email":"nicolascarlo.espeon@gmail.com","bluesky":"nicoespeon","github":"nicoespeon","linkedin":"nicolas-carlo-095b243b","rss":"/feed.xml"}}},"allMarkdownRemark":{"edges":[{"node":{"fields":{"slug":"/en/2026/03/decoding-arrays-with-zod/","categorySlug":"/categories/web-development/"},"timeToRead":3,"frontmatter":{"title":"The Proper Way to Decode Arrays (with Zod)","date":"2026-03-24T00:00:00.000Z","category":"Web development","description":"A 10-line Zod helper that gracefully handles malformed array items."}}},{"node":{"fields":{"slug":"/en/2020/10/how-to-export-git-history-pdf","categorySlug":"/categories/web-development/"},"timeToRead":2,"frontmatter":{"title":"How to export git history in PDF","date":"2020-08-16T00:00:00.000Z","category":"Web development","description":"In case you need to export your git history, because reasons."}}},{"node":{"fields":{"slug":"/en/2019/12/til-git-checkout-previous-branch/","categorySlug":"/categories/web-development/"},"timeToRead":1,"frontmatter":{"title":"TIL: How to checkout to \"previous\" branch","date":"2019-12-03T00:00:00.000Z","category":"Web development","description":"Today, I learned how to go back to the previous branch with one simple command."}}},{"node":{"fields":{"slug":"/en/2019/06/drawing-git-graphs-browser/","categorySlug":"/categories/web-development/"},"timeToRead":1,"frontmatter":{"title":"Drawing Git Graphs in the Browser","date":"2019-06-04T00:00:00.000Z","category":"Web development","description":"A talk I gave at FullStack NYC 2019 to present GitGraph.js."}}},{"node":{"fields":{"slug":"/en/2019/03/the-secrets-of-hexagonal-architecture/","categorySlug":"/categories/web-development/"},"timeToRead":1,"frontmatter":{"title":"The Secrets of Hexagonal Architecture","date":"2019-03-12T00:00:00.000Z","category":"Web development","description":"A talk I gave at ConFoo Montréal 2019 about Hexagonal Architecture."}}},{"node":{"fields":{"slug":"/en/2019/01/til-get-files-from-distant-machine/","categorySlug":"/categories/web-development/"},"timeToRead":1,"frontmatter":{"title":"TIL: Easy file sharing from the command line","date":"2019-01-16T00:00:00.000Z","category":"Web development","description":"Today, I learned how to easily retrieve a file from a distant server."}}},{"node":{"fields":{"slug":"/en/2019/01/approval-testing-on-legacy-code/","categorySlug":"/categories/web-development/"},"timeToRead":13,"frontmatter":{"title":"\"I need to change this code, but it has no test\"","date":"2019-01-12T00:00:00.000Z","category":"Web development","description":"An introduction to \"Approval Testing\" in JavaScript with Jest."}}},{"node":{"fields":{"slug":"/en/2019/01/hexagonal-architecture-elixir/","categorySlug":"/categories/web-development/"},"timeToRead":1,"frontmatter":{"title":"Hexagonal Architecture & Elixir","date":"2019-01-07T00:00:00.000Z","category":"Web development","description":"A talk I gave at the Montreal Elixir meetup of November 2018."}}},{"node":{"fields":{"slug":"/en/2018/12/tool-work-with-complicated-sass-codebases/","categorySlug":"/categories/web-development/"},"timeToRead":7,"frontmatter":{"title":"I built a tool to work with complicated Sass codebases","date":"2018-12-12T00:00:00.000Z","category":"Web development","description":"Introducing sass-graph-viz, a tool to draw a visual graph of Sass dependencies."}}},{"node":{"fields":{"slug":"/en/2018/07/git-rebase-onto/","categorySlug":"/categories/web-development/"},"timeToRead":4,"frontmatter":{"title":"Git rebase onto","date":"2018-07-19T00:00:00.000Z","category":"Web development","description":"A story about this useful command."}}},{"node":{"fields":{"slug":"/en/2018/06/tdd-with-elixir/","categorySlug":"/categories/web-development/"},"timeToRead":1,"frontmatter":{"title":"TDD with Elixir","date":"2018-06-07T00:00:00.000Z","category":"Web development","description":"A lightning talk I gave at the Montreal Elixir meetup of May 2018."}}},{"node":{"fields":{"slug":"/en/2018/03/i-went-to-montreal-elixir-meetup/","categorySlug":"/categories/web-development/"},"timeToRead":3,"frontmatter":{"title":"So I went to Montreal Elixir meetup","date":"2018-03-23T00:00:00.000Z","category":"Web development","description":"Here is my feedback about how this meetup was, and what you could expect from it."}}},{"node":{"fields":{"slug":"/en/2017/03/using-observables-in-real-life/","categorySlug":"/categories/web-development/"},"timeToRead":7,"frontmatter":{"title":"Using observables in real life","date":"2017-03-23T00:00:00.000Z","category":"Web development","description":"In this post, I’ll talk about a concrete use case in which Observables turn to be remarkably relevant to make our code cleaner and more maintainable."}}},{"node":{"fields":{"slug":"/en/2016/07/implementing-download-button-cycle-js/","categorySlug":"/categories/web-development/"},"timeToRead":4,"frontmatter":{"title":"Implementing a download button with Cycle.js","date":"2016-07-19T00:00:00.000Z","category":"Web development","description":"A concrete example of programming with Cycle.js & Rx.js."}}},{"node":{"fields":{"slug":"/en/2016/05/trello-kanban-analysis-tool/","categorySlug":"/categories/web-development/"},"timeToRead":4,"frontmatter":{"title":"Trello Kanban analysis tool","date":"2016-05-23T00:00:00.000Z","category":"Web development","description":"Introducing a tool to analyze Kanban workflow on Trello, built with Cycle.js"}}},{"node":{"fields":{"slug":"/en/2016/04/point-free-javascript/","categorySlug":"/categories/web-development/"},"timeToRead":4,"frontmatter":{"title":"Point-free JavaScript with R.converge / _.over","date":"2016-04-12T00:00:00.000Z","category":"Web development","description":"Insights from practicing a more functional approach to JavaScript."}}},{"node":{"fields":{"slug":"/en/2015/11/plop-micro-generator-boilerplate-yeoman-alternative/","categorySlug":"/categories/web-development/"},"timeToRead":8,"frontmatter":{"title":"Plop — a micro-generator to ease your daily life","date":"2015-11-26T00:00:00.000Z","category":"Web development","description":"Meet plop, a little node package which quickly bootstraps new files."}}},{"node":{"fields":{"slug":"/en/2015/11/testing-marionette-behaviors/","categorySlug":"/categories/web-development/"},"timeToRead":4,"frontmatter":{"title":"Testing Marionette.js Behaviors","date":"2015-11-23T00:00:00.000Z","category":"Web development","description":"How to unit test your Marionette.js Behaviors with ease."}}},{"node":{"fields":{"slug":"/en/2015/06/functions-chaining-composition-lodash-underscore/","categorySlug":"/categories/web-development/"},"timeToRead":1,"frontmatter":{"title":"Functions chaining and composition with lodash / underscore","date":"2015-06-25T00:00:00.000Z","category":"Web development","description":"Function chaining and composition techniques to build efficient pipelines, why and how-to."}}},{"node":{"fields":{"slug":"/en/2015/06/objects-composition-backbone/","categorySlug":"/categories/web-development/"},"timeToRead":9,"frontmatter":{"title":"Inheritance, composition and Backbone.js","date":"2015-06-19T00:00:00.000Z","category":"Web development","description":"Why objects composition is preferable to inheritance in JavaScript? Most of all, how do you apply this technique with Backbone.js?"}}},{"node":{"fields":{"slug":"/en/2015/01/pure-functions-javascript/","categorySlug":"/categories/web-development/"},"timeToRead":7,"frontmatter":{"title":"Pure functions in JavaScript","date":"2015-01-25T00:00:00.000Z","category":"Web development","description":"What is a pure function and why should you consider it in JavaScript?"}}},{"node":{"fields":{"slug":"/en/2015/01/oop-revisited-switch-in-js/","categorySlug":"/categories/web-development/"},"timeToRead":5,"frontmatter":{"title":"OOP - switch revisited in JavaScript","date":"2015-01-14T00:00:00.000Z","category":"Web development","description":"With JavaScript you get a more object-oriented, less procedural and error-prone alternative to the good 'ol switch … case."}}},{"node":{"fields":{"slug":"/en/2014/12/private-methods-backbonejs/","categorySlug":"/categories/web-development/"},"timeToRead":8,"frontmatter":{"title":"Private methods with Backbone.js","date":"2014-12-07T00:00:00.000Z","category":"Web development","description":"Why and how to create private methods. How to concretely implement that while using Backbone.js."}}},{"node":{"fields":{"slug":"/en/2014/04/clean-git-repo-like-a-boss/","categorySlug":"/categories/web-development/"},"timeToRead":4,"frontmatter":{"title":"Clean your git repo, like a boss","date":"2014-04-23T00:00:00.000Z","category":"Web development","description":"How to properly rebase your repo, removing what should never have been in there without broking your history."}}},{"node":{"fields":{"slug":"/en/2014/04/multilingual-blog-with-jekyll-1-5/","categorySlug":"/categories/web-development/"},"timeToRead":3,"frontmatter":{"title":"Multilingual blog with Jekyll 1.5","date":"2014-04-05T00:00:00.000Z","category":"Web development","description":"What changed with Jekyll v1.5.1 if you want to build a multilingual blog."}}},{"node":{"fields":{"slug":"/en/2013/11/gitgraphjs/","categorySlug":"/categories/web-development/"},"timeToRead":5,"frontmatter":{"title":"Gitgraph.js","date":"2013-11-03T00:00:00.000Z","category":"Web development","description":"A JavaScript library, git trees, workflows modelisation… and a bit of Georges Michael."}}},{"node":{"fields":{"slug":"/en/2013/08/which-git-workflow-for-my-project/","categorySlug":"/categories/web-development/"},"timeToRead":8,"frontmatter":{"title":"Which git workflow for my project?","date":"2013-08-15T00:00:00.000Z","category":"Web development","description":"A little look around git-flow, GitHub flow and which one to choose regarding your needs."}}},{"node":{"fields":{"slug":"/en/2013/06/convert-sass-project-into-less/","categorySlug":"/categories/web-development/"},"timeToRead":14,"frontmatter":{"title":"Convert a SASS project into LESS","date":"2013-06-11T00:00:00.000Z","category":"Web development","description":"Similarities, differences et equivalents between those two CSS preprocessors."}}},{"node":{"fields":{"slug":"/en/2013/05/properly-isolate-variables-in-javascript/","categorySlug":"/categories/web-development/"},"timeToRead":5,"frontmatter":{"title":"Properly isolate your variables in JavaScript","date":"2013-05-19T00:00:00.000Z","category":"Web development","description":"A story of immediately-invoked function expression (IIFE)… Know them, it could save your life!"}}},{"node":{"fields":{"slug":"/en/2013/05/event-delegation-jquery/","categorySlug":"/categories/web-development/"},"timeToRead":5,"frontmatter":{"title":"Event delegation in jQuery","date":"2013-05-13T00:00:00.000Z","category":"Web development","description":"A few reminders about event listeners and the event delegation best practices in jQuery."}}},{"node":{"fields":{"slug":"/en/2013/05/dive-into-oocss/","categorySlug":"/categories/web-development/"},"timeToRead":15,"frontmatter":{"title":"Dive into OOCSS principles","date":"2013-05-08T00:00:00.000Z","category":"Web development","description":"OOCSS - what it is, what it does, what it is, what it isn't."}}},{"node":{"fields":{"slug":"/en/2013/05/jquery-data-and-performance/","categorySlug":"/categories/web-development/"},"timeToRead":5,"frontmatter":{"title":"jQuery, data and performance","date":"2013-05-04T00:00:00.000Z","category":"Web development","description":"Best practice and data manipulation with jQuery, no added colourings or preservatives."}}},{"node":{"fields":{"slug":"/en/2013/05/optimize-selectors-css-vs-js/","categorySlug":"/categories/web-development/"},"timeToRead":6,"frontmatter":{"title":"Optimize selectors, CSS vs. JS","date":"2013-05-02T00:00:00.000Z","category":"Web development","description":"Short round up of best practices for selectors use in CSS and Javascript. What is sauce for the goose is not necessarily sauce for the gander."}}},{"node":{"fields":{"slug":"/en/2013/04/discover-inuitcss/","categorySlug":"/categories/web-development/"},"timeToRead":7,"frontmatter":{"title":"Tired of Bootstrap? Discover inuit.css!","date":"2013-04-12T00:00:00.000Z","category":"Web development","description":"inuit.css is a a powerful, scalable, BEM, OOCSS framework which doesn't impose you a design."}}},{"node":{"fields":{"slug":"/en/2013/04/play-around-with-interactive-playgrounds/","categorySlug":"/categories/web-development/"},"timeToRead":5,"frontmatter":{"title":"Play around with interactive playgrounds","date":"2013-04-10T00:00:00.000Z","category":"Web development","description":"JSBin, jsFiddle, dabblet, … If that doesn't sound familiar to you, you may have a look here and discover what are these \"playgrounds\" about."}}},{"node":{"fields":{"slug":"/en/2013/04/building-a-multinlingual-jekyll-blog/","categorySlug":"/categories/web-development/"},"timeToRead":6,"frontmatter":{"title":"Building a multilanguage Jekyll blog","date":"2013-04-07T00:00:00.000Z","category":"Web development","description":"As a first post, what about sharing the way I managed to build this blog? Having a both english and french Jekyll website is not that hard, but you have to care about some crucial points."}}}]}},"pageContext":{"category":"Web development"}}