{
    "componentChunkName": "component---src-templates-series-page-js",
    "path": "/software",
    "result": {"data":{"site":{"siteMetadata":{"title":"Solid Abstractions","siteUrl":"https://solidabstractions.com","twitterId":291334023,"author":{"fullName":"Julien Hartmann","profileHtml":"I am an open-source de­vel­op­er, for­mer IT con­sul­tant with a pas­sion for new tech­nol­o­gies. I be­lieve the role of an en­gi­neer is to em­pow­er peo­ple, by as­sem­bling sim­ple, re­fined de­signs.\n","links":[{"url":"https://github.com/spectras/","name":"github","title":"GitHub"},{"url":"https://stackoverflow.com/users/3212865/spectras","name":"stackoverflow","title":"StackOverflow"},{"url":"https://www.linkedin.com/in/julienhartmann/","name":"linkedin","title":"LinkedIn"}],"profilePicNode":{"original":{"src":"/static/profile-pic-301a9cbe7b572c3e7910c9717d2b3bcd.jpg"}}}}},"series":{"name":"software","fullName":"software engineering","description":"<p>\n    Here we talk about programming in general, without focusing on a specific language.\n    Posts will vary from intermediate to expert level depending mostly on what\n    interesting questions people ask me that I decide to write about.\n</p>\n","fields":{"slug":"/software"}},"posts":[{"excerpt":"After the theory, a quick review of common runtime error handling techniques.\nMost ecosystems focus on one, but knowing the others might come in handy in some situations.","fields":{"slug":"/2019/error-handling-techniques"},"frontmatter":{"title":"Error Handling part 3: Techniques","date":"2021-04-03T00:00:00.000Z","formattedDate":"03 April, 2021"},"tags":[{"name":"code","slug":"/tag/code"}]},{"excerpt":"A C++ smart unique_ptr uses exactly the same amount of memory as a\nregular pointer, and has zero runtime cost. That is what we love about C++. But what if I need a custom deleter for my pointer? Can I get it at zero cost too?","fields":{"slug":"/2019/zero-cost-unique_ptr"},"frontmatter":{"title":"Zero-cost unique_ptr deleters","date":"2019-03-05T00:00:00.000Z","formattedDate":"05 March, 2019"},"tags":[{"name":"code","slug":"/tag/code"},{"name":"c++","slug":"/tag/c"}]},{"excerpt":"We cover the basics of correct error handling, so it is no longer an afterthought.\nIn previous post, we left some crucial questions unanswered, such as\n“What exactly makes an error recoverable?”. In this post, we dive into levels of abstraction and what they mean for error handling.","fields":{"slug":"/2019/error-handling-levels"},"frontmatter":{"title":"Error Handling part 2: Abstractions","date":"2019-02-28T00:00:00.000Z","formattedDate":"28 February, 2019"},"tags":[{"name":"code","slug":"/tag/code"}]},{"excerpt":"","fields":{"slug":"/2019/error-handling-introduction"},"frontmatter":{"title":"Error Handling part 1: Introduction","date":"2019-02-19T00:00:00.000Z","formattedDate":"19 February, 2019"},"tags":[{"name":"code","slug":"/tag/code"}]}],"seriesList":{"edges":[{"series":{"name":"cryptomate","fullName":null,"fields":{"slug":"/cryptomate"}}},{"series":{"name":"python","fullName":null,"fields":{"slug":"/python"}}},{"series":{"name":"software","fullName":"software engineering","fields":{"slug":"/software"}}}]}},"pageContext":{"slug":"/software"}},
    "staticQueryHashes": ["1733002695","4006707078"]}