{"count":8,"items":[{"categories":["ai"],"date":"2026-07-11","description":"Simple and effective tool call example","lastmod":"2026-09-25","reading_time":7,"section":"blog","slug":"calculator-tool-call","summary":"Simple Math is actually Hard? A very simple problem with large language models, which frequently gets highlighted, is their poor ability to accurately do simple grade school math. Something that would be easy for human beings, even just in their head, can be surprisingly difficult for these models to do reliably.\nThere are many benchmarks for model performance on simple math problems, and their results are often disappointing. This isn\u0026rsquo;t that surprising, given that their training is based on next token prediction, which isn\u0026rsquo;t as well suited to number crunching as a calculator. Computers though, should be very good at number crunching. If we could just hook up LLMs to a calculator, we could fix this problem.\n","tags":["python"],"title":"LLM Tool Calling","url":"https://michaelmuratov.ca/blog/artifacts/guides/calculator-tool-call/","word_count":1369},{"categories":["graphics"],"date":"2025-06-01","description":"Build interactive WebGL effects in Hugo pages with GLSL Canvas.","lastmod":"2025-06-01","reading_time":4,"section":"blog","slug":"shaders-glsl-canvas","summary":" GLSL Library GLSL Canvas is a library that allows you to run GLSL shaders in a web environment. It makes it easy to create interactive graphics and visualizations using shader language inside a canvas element with WebGL.\nhttps://github.com/patriciogonzalezvivo/glslCanvas\n1\u0026lt;script src=\u0026#34;https://cdn.jsdelivr.net/npm/glslCanvas@0.2.6/dist/GlslCanvas.min.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; ShaderToy -\u0026gt; GLSL Canvas The original shader we\u0026rsquo;ll be using was written for ShaderToy, which uses a specific set of uniforms and functions. In GLSL Canvas, we need to adapt the code to use the u_time and u_resolution uniforms provided by the library. The main function will also be adjusted to fit the GLSL Canvas structure.\n","tags":[],"title":"Shaders in GLSL Canvas","url":"https://michaelmuratov.ca/blog/artifacts/guides/shaders-glsl-canvas/","word_count":670},{"categories":["security"],"date":"2025-05-25","description":"The first step to signing your images","lastmod":"2025-05-25","reading_time":4,"section":"blog","slug":"intro-image-watermarking","summary":"Intro to Image Watermarking Watermarking is a technique used to embed information into an image, which can be used for various purposes such as copyright protection, authentication, or non-repudiation. In this guide, we will explore the basics of image watermarking and how you can implement it in your projects.\nWhy Use Watermarking? Watermarking serves several purposes: Copyright protection:\nWatermarks can help protect your images from unauthorized use by clearly indicating ownership.\n","tags":["watermarking","steganography"],"title":"Intro to Image Watermarking","url":"https://michaelmuratov.ca/blog/artifacts/guides/intro-image-watermarking/","word_count":802},{"categories":["thm"],"date":"2024-10-20","description":"Network Services 2 Room","lastmod":"2024-10-20","reading_time":7,"section":"blog","slug":"thm-sql-room","summary":"This is a TryHackMe Room Writeup\nReference 💻 TryHackMe Network Services Room\n","tags":["thm","enumeration","hash cracking","mysql"],"title":"TryHackMe - SQL","url":"https://michaelmuratov.ca/blog/artifacts/guides/thm-sql-room/","word_count":1408},{"categories":["thm"],"date":"2024-10-17","description":"Network Services 2 Room","lastmod":"2024-10-17","reading_time":4,"section":"blog","slug":"thm-smtp-room","summary":"This is a TryHackMe Room Writeup\nReference 💻 TryHackMe Network Services Room\n","tags":["thm","brute force","mail","smtp"],"title":"TryHackMe - SMTP","url":"https://michaelmuratov.ca/blog/artifacts/guides/thm-smtp-room/","word_count":828},{"categories":["thm"],"date":"2024-10-12","description":"Network Services 2 Room","lastmod":"2024-10-12","reading_time":4,"section":"blog","slug":"thm-nfs-room","summary":"This is a TryHackMe Room Writeup\nReference 💻 THM Network Services Room\n","tags":["thm","file server","nmap","privilege escalation","ssh authentication"],"title":"TryHackMe - NFS","url":"https://michaelmuratov.ca/blog/artifacts/guides/thm-nfs-room/","word_count":689},{"categories":["data structures"],"date":"2021-06-27","description":"And you don’t need to memorize how binary search works","lastmod":"2021-06-27","reading_time":4,"section":"blog","slug":"binary-search-python","summary":"I always get anxious when I see a problem that involves a sorted list because I know that it’ll inevitably involve using binary search.\nThis fear is completely irrational, and I always kick myself for feeling this way because binary search is beautiful. Given a sorted list you can find the index of any value in log(N) time because you get to cut your search space in half with every lookup.\n","tags":["python","trees","recursion"],"title":"Binary Search in Python","url":"https://michaelmuratov.ca/blog/artifacts/guides/binary-search-python/","word_count":683},{"categories":["algorithms"],"date":"2020-05-19","description":"Analyzing a difficult Leetcode problem","lastmod":"2020-05-19","reading_time":12,"section":"blog","slug":"solving-recursive-complexity","summary":"A few days ago I bumped into a question on LeetCode where I saw a bunch of people scratching their heads. It was question number 10 titled Regular Expression Matching with the difficulty label Hard. The solution to the exercise itself was not intuitive, requiring effective use of previously solved subproblems, but that wasn’t what everyone in the comments were interested in. After all the solution was available for everyone to see.\n","tags":["python","recursion","complexity"],"title":"Solving for Recursive Complexity","url":"https://michaelmuratov.ca/blog/artifacts/guides/solving-recursive-complexity/","word_count":2465}],"scope":"https://michaelmuratov.ca/blog/artifacts/guides/","title":"Guides"}