[{"data":1,"prerenderedAt":200},["ShallowReactive",2],{"navigation":3,"talk-/talks/design-patterns":162,"person-Mariam Demir":190,"/talks/design-patterns-surround":197},[4],{"title":5,"path":6,"stem":7,"children":8,"page":161},"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,145,149,153,157],{"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},"😀 🔤Hello World!🔤❗️: The Weird World of Esolangs","/talks/esolangs","talks/esolangs",{"title":138,"path":139,"stem":140},"Networking 101: From your computer to the internet","/talks/networking-101","talks/networking-101",{"title":142,"path":143,"stem":144},"Agent Communication Protocols","/talks/agent-communication-protocols","talks/agent-communication-protocols",{"title":146,"path":147,"stem":148},"Why I hate try/catch, and why you should hate it too!","/talks/hate-try-catch","talks/hate-try-catch",{"title":150,"path":151,"stem":152},"Systems Architecture and Agentic AI","/talks/systems-architecture-agentic-ai","talks/systems-architecture-agentic-ai",{"title":154,"path":155,"stem":156},"The Beauty of Vim Motions","/talks/beauty-of-vim-motions","talks/beauty-of-vim-motions",{"title":158,"path":159,"stem":160},"Don't let your servers do the cooking! Refactoring a messy codebase using design patterns","/talks/design-patterns","talks/design-patterns",false,{"id":163,"title":158,"body":164,"date":179,"description":180,"extension":181,"imgClass":182,"imgUrl":183,"isImgLogo":184,"meta":185,"navigation":184,"path":159,"recordingUrl":186,"seo":187,"speaker":188,"stem":160,"__hash__":189},"talks/talks/design-patterns.md",{"type":165,"value":166,"toc":174},"minimark",[167,171],[168,169,170],"p",{},"Have you ever come across a class that seems to do everything?",[168,172,173],{},"In this talk, I'll walk through how I refactored a real codebase that started with a single class responsible for everything: from the GUI, to the strategy and the application flow. We'll talk about the choices in design patterns and layered architecture that helped decouple the code's responsibilities. Very much like a restaurant where one waitress takes orders, plans the meals, cooks every dish, and serves every table, the application worked, but was difficult to understand, maintain and extend. In the end, we'll have a full kitchen brigade with their own individual roles and stations, and no stepping on toes.",{"title":175,"searchDepth":176,"depth":177,"links":178},"",1,2,[],["Date","2026-08-05T00:00:00.000Z"],"A detailed account of refactoring a real codebase that started with a single class responsible for everything.","md","bg-[#F7F7F7]","/images/design-patterns.png",true,{},null,{"title":158,"description":180},"Mariam Demir","DMCNGBvJgr2RRSD0SSGniTGRBs89RDBScTqAx6u03XQ",{"id":191,"title":192,"extension":193,"imgUrl":186,"meta":194,"name":188,"roles":186,"stem":195,"__hash__":196},"people/people/mariam-demir.yml","Research Software Engineer","yml",{},"people/mariam-demir","_ZPO1bu6bCGf4tyPB4dfDamW2Qly8sUMEAc8-gnbK7U",[198,186],{"title":154,"path":155,"stem":156,"description":199,"children":-1},"An overview of vim motions and why they are so lovely to use.",1785926661065]