[{"data":1,"prerenderedAt":190},["ShallowReactive",2],{"navigation":3,"talk-/talks/jinja2-templates-with-python":146,"person-Kiran Jonathan":175,"/talks/jinja2-templates-with-python-surround":185},[4],{"title":5,"path":6,"stem":7,"children":8,"page":145},"Talks","/talks","talks",[9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,129,133,137,141],{"title":10,"path":11,"stem":12},"The Single Responsibility Principle","/talks/single-responsibility-principle","talks/single-responsibility-principle",{"title":14,"path":15,"stem":16},"The Open/Closed Principle","/talks/open-closed-principle","talks/open-closed-principle",{"title":18,"path":19,"stem":20},"Spack","/talks/spack","talks/spack",{"title":22,"path":23,"stem":24},"GitHub Actions","/talks/github-actions","talks/github-actions",{"title":26,"path":27,"stem":28},"Inheritance is Evil","/talks/inheritance-is-evil","talks/inheritance-is-evil",{"title":30,"path":31,"stem":32},"Nuxt","/talks/nuxt","talks/nuxt",{"title":34,"path":35,"stem":36},"LogSeq","/talks/logseq","talks/logseq",{"title":38,"path":39,"stem":40},"Time Complexity","/talks/time-complexity","talks/time-complexity",{"title":42,"path":43,"stem":44},"How to Review a Codebase","/talks/how-to-review-a-codebase","talks/how-to-review-a-codebase",{"title":46,"path":47,"stem":48},"Numba and Bitmasks","/talks/numba-and-bitmasks","talks/numba-and-bitmasks",{"title":50,"path":51,"stem":52},"Mutation Testing","/talks/mutation-testing","talks/mutation-testing",{"title":54,"path":55,"stem":56},"Message Passing Interface","/talks/message-passing-interface","talks/message-passing-interface",{"title":58,"path":59,"stem":60},"P vs NP","/talks/p-vs-np","talks/p-vs-np",{"title":62,"path":63,"stem":64},"Verbose Graphics with Rust and Vulkan","/talks/verbose-graphics-with-rust-and-vulkan","talks/verbose-graphics-with-rust-and-vulkan",{"title":66,"path":67,"stem":68},"Slidev","/talks/slidev","talks/slidev",{"title":70,"path":71,"stem":72},"Nuxt Content By Example","/talks/nuxt-content-by-example","talks/nuxt-content-by-example",{"title":74,"path":75,"stem":76},"Rust MMU Guest Lecture","/talks/rust-mmu-guest-lecture","talks/rust-mmu-guest-lecture",{"title":78,"path":79,"stem":80},"As We May Think - AI for Coding","/talks/ai-for-coding","talks/ai-for-coding",{"title":82,"path":83,"stem":84},"Git in Practice: Techniques for Collaborative Development","/talks/git-in-practice","talks/git-in-practice",{"title":86,"path":87,"stem":88},"A Crash Course in Natural Language Processing","/talks/natural-language-processing","talks/natural-language-processing",{"title":90,"path":91,"stem":92},"Graphs: Ruining the Travelling Salesman's Day Since 1930","/talks/graph-theory","talks/graph-theory",{"title":94,"path":95,"stem":96},"Automating File Creation With Jinja2 Templates in Python","/talks/jinja2-templates-with-python","talks/jinja2-templates-with-python",{"title":98,"path":99,"stem":100},"What the hell is a Monad?","/talks/monads","talks/monads",{"title":102,"path":103,"stem":104},"The Liskov Substitution Principle","/talks/liskov-substitution-principle","talks/liskov-substitution-principle",{"title":106,"path":107,"stem":108},"Everything as a Specification","/talks/everything-as-a-specification","talks/everything-as-a-specification",{"title":110,"path":111,"stem":112},"The Interface Segregation Principle","/talks/interface-segregation-principle","talks/interface-segregation-principle",{"title":114,"path":115,"stem":116},"The Dependency Inversion Principle","/talks/dependency-inversion-principle","talks/dependency-inversion-principle",{"title":118,"path":119,"stem":120},"A Field Guide To Coupling","/talks/a-field-guide-to-coupling","talks/a-field-guide-to-coupling",{"title":122,"path":123,"stem":124},"Why Python is (and isn't) Fast","/talks/why-python-is-slow","talks/why-python-is-slow",{"title":126,"path":127,"stem":128},"Cybersecurity","/talks/cybersecurity","talks/cybersecurity",{"title":130,"path":131,"stem":132},"What Linux Distribution Should You Use?","/talks/what-linux-distribution","talks/what-linux-distribution",{"title":134,"path":135,"stem":136},"Agent Communication Protocols","/talks/agent-communication-protocols","talks/agent-communication-protocols",{"title":138,"path":139,"stem":140},"Why I hate try/catch, and why you should hate it too!","/talks/hate-try-catch","talks/hate-try-catch",{"title":142,"path":143,"stem":144},"The Beauty of Vim Motions","/talks/beauty-of-vim-motions","talks/beauty-of-vim-motions",false,{"id":147,"title":94,"body":148,"date":164,"description":165,"extension":166,"imgClass":167,"imgUrl":168,"isImgLogo":169,"meta":170,"navigation":169,"path":95,"recordingUrl":171,"seo":172,"speaker":173,"stem":96,"__hash__":174},"talks/talks/jinja2-templates-with-python.md",{"type":149,"value":150,"toc":159},"minimark",[151,155],[152,153,154],"p",{},"Do you find yourself writing files with the same structure over and over and over again? Are you using clunky bash scripts with sed everywhere to automate your file creation? Jinja2 provides a lightweight and simple templating infrastructure in Python to help you automate the creation of ordered, structured text files, and works really nicely with other unordered inputs like yaml, dataclasses, and more.",[156,157],"slidev",{"name":158},"jinja2-templates-with-python",{"title":160,"searchDepth":161,"depth":162,"links":163},"",1,2,[],["Date","2026-03-25T00:00:00.000Z"],"Learn how Jinja2 provides a lightweight and simple templating infrastructure in Python to help you automate the creation of ordered, structured text files","md","bg-white","/images/jinja-name.svg",true,{},"https://stfc365-my.sharepoint.com/personal/ashraf_hussain_stfc_ac_uk/_layouts/15/embed.aspx?UniqueId=2ea0676b-e4e6-45b0-b833-7529430dde25&embed=%7B%22ust%22%3Atrue%2C%22hv%22%3A%22CopyEmbedCode%22%7D&referrer=StreamWebApp&referrerScenario=EmbedDialog.Create",{"title":94,"description":165},"Kiran Jonathan","aTtxvgn6vhjlBqq9DUevrm0X7mLAWBqQk5YLLdO3kgI",{"id":176,"title":177,"extension":178,"imgUrl":179,"meta":180,"name":173,"roles":181,"stem":183,"__hash__":184},"people/people/kiran-jonathan.yml","Research Software Engineer","yml","/images/people/kiran-jonathan.jpg",{},[182],"Committee Member","people/kiran-jonathan","mIgZoABI1Z97k7jOd8OzZkijGX1eZUZZfG3DZDW6HEg",[186,188],{"title":90,"path":91,"stem":92,"description":187,"children":-1},"A tour of graph algorithms and classic problems in computer science, from traversal and shortest paths to the Travelling Salesman Problem.",{"title":98,"path":99,"stem":100,"description":189,"children":-1},"Monads are one of the most powerful tools in functional programming languages, yet widely misunderstood as an unexplainable and over-abstracted whimsy only describable as \"monoids in the category of endofunctors.\"",1778147361186]