<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>YouTube on Colan Biemer</title><link>https://bi3mer.github.io/youtube/</link><description>Recent content in YouTube on Colan Biemer</description><generator>Hugo -- 0.137.1</generator><language>en-us</language><lastBuildDate>Mon, 29 Jun 2026 12:00:00 +0000</lastBuildDate><atom:link href="https://bi3mer.github.io/youtube/index.xml" rel="self" type="application/rss+xml"/><item><title>Data Structures &amp; Algorithms: Bubble Sort</title><link>https://bi3mer.github.io/youtube/data-structures-algorithms-bubble-sort/</link><pubDate>Mon, 29 Jun 2026 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/data-structures-algorithms-bubble-sort/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/HUHrCYPtvwU?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>In this video, I explain bubble sort and how to implement it in Go. Hope it helps!&lt;/p>
&lt;p>Links:&lt;/p>
&lt;p>Project repo: &lt;a href="https://github.com/bi3mer/data-structures-and-algorithms">https://github.com/bi3mer/data-structures-and-algorithms&lt;/a>&lt;/p>
&lt;p>Implementation (Go): &lt;a href="https://github.com/bi3mer/data-structures-and-algorithms/tree/main/Sort/BubbleSort">https://github.com/bi3mer/data-structures-and-algorithms/tree/main/Sort/BubbleSort&lt;/a>&lt;/p>
&lt;p>Previous video (selection sort in C): &lt;a href="https://www.youtube.com/watch?v=2cNuPpzcbVU&amp;amp;t">https://www.youtube.com/watch?v=2cNuPpzcbVU&amp;amp;t&lt;/a>&lt;/p>
&lt;p>Gopher by Renée French, CC3.0: &lt;a href="https://github.com/golang-samples/gopher-vector">https://github.com/golang-samples/gopher-vector&lt;/a>&lt;/p></description></item><item><title>Data Structures &amp; Algorithms: Selection Sort</title><link>https://bi3mer.github.io/youtube/data-structures-algorithms-selection-sort/</link><pubDate>Wed, 24 Jun 2026 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/data-structures-algorithms-selection-sort/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/2cNuPpzcbVU?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>In this video, I explain selection sort and how to implement it in Go. Hope it helps!&lt;/p>
&lt;p>Links:&lt;/p>
&lt;p>Project repo: &lt;a href="https://github.com/bi3mer/data-structures-and-algorithms">https://github.com/bi3mer/data-structures-and-algorithms&lt;/a>&lt;/p>
&lt;p>Implementation (Go): &lt;a href="https://github.com/bi3mer/data-structures-and-algorithms/blob/main/Sort/SelectionSort/main.go">https://github.com/bi3mer/data-structures-and-algorithms/blob/main/Sort/SelectionSort/main.go&lt;/a>&lt;/p>
&lt;p>Previous video (selection sort in C): &lt;a href="https://www.youtube.com/watch?v=LuxDiQ7-i38">https://www.youtube.com/watch?v=LuxDiQ7-i38&lt;/a>&lt;/p>
&lt;p>Gopher by Renée French, CC3.0: &lt;a href="https://github.com/golang-samples/gopher-vector">https://github.com/golang-samples/gopher-vector&lt;/a>&lt;/p></description></item><item><title>Data Structures &amp; Algorithms: Arrays and Linear Search</title><link>https://bi3mer.github.io/youtube/data-structures-algorithms-arrays-and-linear-search/</link><pubDate>Mon, 16 Mar 2026 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/data-structures-algorithms-arrays-and-linear-search/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/LuxDiQ7-i38?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>An introduction to arrays and linear search, live-coded in C11.&lt;/p>
&lt;p>In this video we cover:&lt;/p>
&lt;ul>
&lt;li>Declaring and initializing arrays&lt;/li>
&lt;li>Accessing and modifying elements&lt;/li>
&lt;li>Implementing linear search from scratch&lt;/li>
&lt;li>Brief analysis time complexity&lt;/li>
&lt;/ul>
&lt;p>All code is written live in C11 with no frameworks or libraries — just the standard library and a text editor.&lt;/p></description></item><item><title>I Ran My Game 30,000 Times to Find Bugs</title><link>https://bi3mer.github.io/youtube/i-ran-my-game-30000-times-to-find-bugs/</link><pubDate>Fri, 23 Jan 2026 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/i-ran-my-game-30000-times-to-find-bugs/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/4PDm8JZTNhw?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>I built a simple automated tester for my game—30,000 runs, zero crashes. Here&amp;rsquo;s how it works.&lt;/p>
&lt;p>Testing your own game is hard because you play it the way it&amp;rsquo;s meant to be played. Players won&amp;rsquo;t. Hiring a QA team is overkill for a solo project. So I built a fuzz tester instead: a Python script that runs my game thousands of times with random inputs and logs the results.
The whole setup took an afternoon. In this video I walk through the Python script, the conditional compilation, and the random &amp;ldquo;agent&amp;rdquo; that plays the game.&lt;/p></description></item><item><title>Creating a Full Tic-Tac-Toe Game You Can't Beat | C &amp; Raylib</title><link>https://bi3mer.github.io/youtube/creating-a-full-tic-tac-toe-game-you-cant-beat-c-raylib/</link><pubDate>Thu, 27 Nov 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/creating-a-full-tic-tac-toe-game-you-cant-beat-c-raylib/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/C3z1K1nciw4?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Learn how to program a complete Tic-Tac-Toe game in C with Raylib, featuring an unbeatable AI opponent using the Minimax algorithm! We&amp;rsquo;ll build everything: the game board, mouse input handling, game logic, and an intelligent computer player that plays perfectly every time.&lt;/p>
&lt;p>GET THE CODE: &lt;a href="https://github.com/bi3mer/c-tic-tac-toe">https://github.com/bi3mer/c-tic-tac-toe&lt;/a>&lt;/p></description></item><item><title>Snake in C - Under 400 Lines (Full Tutorial)</title><link>https://bi3mer.github.io/youtube/snake-in-c-under-400-lines-full-tutorial/</link><pubDate>Fri, 21 Nov 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/snake-in-c-under-400-lines-full-tutorial/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/BpA8Ly7HLkc?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Learn how to build the classic Snake game in C from scratch! In this tutorial, we&amp;rsquo;ll create a fully functional Snake game in under 400 lines of clean, readable code using C and Raylib. Perfect for beginners wanting to learn game programming in C or anyone interested in understanding the fundamentals of game development without unnecessary complexity.&lt;/p></description></item><item><title>Code Pong in 220 Lines of C | Raylib Game Programming</title><link>https://bi3mer.github.io/youtube/code-pong-in-220-lines-of-c-raylib-game-programming/</link><pubDate>Thu, 13 Nov 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/code-pong-in-220-lines-of-c-raylib-game-programming/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/dP4YZkMWJbQ?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Learn to code the classic Pong game in C using Raylib in just 220 lines of clean, beginner-friendly code!&lt;/p>
&lt;p>In this tutorial, you&amp;rsquo;ll learn:&lt;/p>
&lt;ul>
&lt;li>Setting up a Raylib game window&lt;/li>
&lt;li>Implementing paddle controls and movement&lt;/li>
&lt;li>Ball physics and collision detection&lt;/li>
&lt;li>Score tracking and display&lt;/li>
&lt;/ul>
&lt;p>Perfect for beginners wanting to learn game programming in C or anyone interested in Raylib development.&lt;/p></description></item><item><title>How Games Find The Shortest Path Between Two Points</title><link>https://bi3mer.github.io/youtube/how-games-find-the-shortest-path-between-two-points/</link><pubDate>Fri, 07 Nov 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/how-games-find-the-shortest-path-between-two-points/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/DGx7GGb8_Fg?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Learn how pathfinding algorithms work through interactive visualizations. In this video, I implement and compare three fundamental search algorithms - Depth-First Search (DFS), Breadth-First Search (BFS), and A* - showing exactly how each one explores a grid to find the optimal path.&lt;/p>
&lt;p>We&amp;rsquo;ll cover how DFS explores deeply before backtracking, why BFS guarantees the shortest path in unweighted grids, and how A* uses heuristics to find paths efficiently. Everything is implemented in C using Raylib for visualization with terrain generation via Perlin noise.&lt;/p></description></item><item><title>From 100 Compiles to Zero: adjust.h (C Hot Reload)</title><link>https://bi3mer.github.io/youtube/from-100-compiles-to-zero-adjusth-c-hot-reload/</link><pubDate>Wed, 29 Oct 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/from-100-compiles-to-zero-adjusth-c-hot-reload/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/9eIXOygjPvw?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Stop recompiling your C code just to change a number. adjust.h is a single-header library that lets you edit variables while your program is running - no rebuilds needed. Just include the header, mark your variables, and watch them update live as you edit your source file. In this video, I&amp;rsquo;ll show you how to set it up and demonstrate why this simple tool can save you time.&lt;/p></description></item><item><title>Hot Reloading Constants: Tweak Values Without Recompiling</title><link>https://bi3mer.github.io/youtube/hot-reloading-constants-tweak-values-without-recompiling/</link><pubDate>Tue, 07 Oct 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/hot-reloading-constants-tweak-values-without-recompiling/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/QAgNCyHa5ic?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Tired of the compile-restart-test loop when tuning parameters? In this video, I show you a clever technique for hot reloading hardcoded constants. By wrapping values in a TWEAK() macro, you can edit numbers directly in your source code and see them update in real-time while your program is running—no recompiling or restarting needed.&lt;/p></description></item><item><title>Boids with Raylib and C++</title><link>https://bi3mer.github.io/youtube/boids-with-raylib-and-c/</link><pubDate>Mon, 15 Sep 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/boids-with-raylib-and-c/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/vTydKS50j58?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>In this video, I implement a Boids flocking simulation using C++ and Raylib. Watch as autonomous agents exhibit emergent behavior through simple rules of separation, alignment, and cohesion, creating mesmerizing patterns that mimic real-world flocking behaviors found in birds, fish, and other animals.&lt;/p>
&lt;ul>
&lt;li>Raylib: &lt;a href="https://www.raylib.com/">https://www.raylib.com/&lt;/a>&lt;/li>
&lt;li>Source Code: &lt;a href="https://gist.github.com/bi3mer/0017a28837bfa4f380364c6a4e089f68">https://gist.github.com/bi3mer/0017a28837bfa4f380364c6a4e089f68&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Creating a Sorting Visualization with C++ and Raylib</title><link>https://bi3mer.github.io/youtube/creating-a-sorting-visualization-with-c-and-raylib/</link><pubDate>Mon, 08 Sep 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/creating-a-sorting-visualization-with-c-and-raylib/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/elGfmnmk2OI?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>In this video, I build a real-time sorting algorithm visualizer using C++ and Raylib. Watch as the sorting process comes to life through smooth animations and colorful graphics, demonstrating how the algorithm works under the hood with visual feedback for each comparison and swap operation.&lt;/p></description></item><item><title>Block Randomization Web Server in Go - Participant Assignment, Logging, &amp; Static Serving</title><link>https://bi3mer.github.io/youtube/block-randomization-web-server-in-go-participant-assignment-logging-static-serving/</link><pubDate>Mon, 01 Sep 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/block-randomization-web-server-in-go-participant-assignment-logging-static-serving/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/a21U3MzoPpc?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>I live code a Go web server that uses block randomization to assign participants to different conditions in experiments. The server also handles logging and serving static files for the experiment interface.&lt;/p>
&lt;p>Block randomization is a technique that ensures you get equal numbers of participants in each group throughout your study, which is important for getting valid results. Instead of pure random assignment, it assigns participants in blocks to keep the groups balanced.&lt;/p></description></item><item><title>Coding Sokoban pt. 31: Conclusion</title><link>https://bi3mer.github.io/youtube/coding-sokoban-pt-31-conclusion/</link><pubDate>Mon, 25 Aug 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-pt-31-conclusion/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/xqqOXJfDIHo?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 31: Conclusion -&lt;/p>
&lt;p>Part 31 brings our Sokoban journey to a close. I play through some levels of our completed game and share what&amp;rsquo;s coming next in future projects. Thank you all for joining me, and I hope you enjoyed the videos :D&lt;/p>
&lt;ul>
&lt;li>Project Repository: &lt;a href="https://github.com/bi3mer/sokoban">https://github.com/bi3mer/sokoban&lt;/a>&lt;/li>
&lt;li>Series Playlist: &lt;a href="https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR">https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Coding Sokoban pt. 30: Bug Fixing</title><link>https://bi3mer.github.io/youtube/coding-sokoban-pt-30-bug-fixing/</link><pubDate>Fri, 22 Aug 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-pt-30-bug-fixing/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/IJVnTfPr8l8?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 30: Level Loading Bug Fix and a Debugging Technique&lt;/p>
&lt;p>Part 30 tackles a bug in our level loading system: we could only load rectangular levels! We fix this limitation to support arbitrary level shapes, plus demonstrate a valuable debugging technique for verifying that our new ring buffer behaves identically to the old linked list.&lt;/p></description></item><item><title>Coding Sokoban pt. 29: Ring Buffer (2)</title><link>https://bi3mer.github.io/youtube/coding-sokoban-pt-29-ring-buffer-2/</link><pubDate>Wed, 20 Aug 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-pt-29-ring-buffer-2/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/jwV1VI7t0VU?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 29: Ring Buffer (2)&lt;/p>
&lt;p>Part 29 completes our ring buffer implementation and puts it head-to-head with our pooled linked list in speed tests. The results are surprising - ring buffer wins on cold starts, but our object-pooled linked list actually performs better when everything is pre-initialized.&lt;/p></description></item><item><title>Coding Sokoban pt. 28: Ring Buffer (1)</title><link>https://bi3mer.github.io/youtube/coding-sokoban-pt-28-ring-buffer-1/</link><pubDate>Mon, 18 Aug 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-pt-28-ring-buffer-1/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/A1QO5dBmweQ?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 28 starts a small refactor. We start replacing our custom linked list with a ring buffer implementation for our undo system. This change will provide better performance characteristics and more predictable memory usage. They&amp;rsquo;re simpler and more predictable than dynamic linked lists.&lt;/p>
&lt;ul>
&lt;li>Project Repository: &lt;a href="https://github.com/bi3mer/sokoban">https://github.com/bi3mer/sokoban&lt;/a>&lt;/li>
&lt;li>Series Playlist: &lt;a href="https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR">https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Coding Sokoban pt. 27: Convenient Logging</title><link>https://bi3mer.github.io/youtube/coding-sokoban-pt-27-convenient-logging/</link><pubDate>Fri, 15 Aug 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-pt-27-convenient-logging/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/I_AWdfBew0s?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 27: Convenient Logging&lt;/p>
&lt;p>Part 27 upgrades our logging system with modern C++ techniques! We eliminate the need for users to manually call std::format by implementing template parameter packing and perfect forwarding, creating a much more convenient logging experience.&lt;/p>
&lt;p>Instead of log(std::format(&amp;ldquo;Player at {}, {}&amp;rdquo;, x, y)), users can now simply write log(&amp;ldquo;Player at {}, {}&amp;rdquo;, x, y).&lt;/p></description></item><item><title>Coding Sokoban pt. 26: std::bitset</title><link>https://bi3mer.github.io/youtube/coding-sokoban-pt-26-stdbitset/</link><pubDate>Wed, 13 Aug 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-pt-26-stdbitset/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/QHCQ1MIqluA?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 26: std::bitset&lt;/p>
&lt;p>Part 26 refactors our core game representation! We replace the unsigned char* implementation with std::bitset for our game elements, making the code much more readable and maintainable while keeping the same efficient bitboard approach.&lt;/p>
&lt;ul>
&lt;li>Project Repository: &lt;a href="https://github.com/bi3mer/sokoban">https://github.com/bi3mer/sokoban&lt;/a>&lt;/li>
&lt;li>Series Playlist: &lt;a href="https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR">https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Coding Sokoban pt. 25: State / Flags</title><link>https://bi3mer.github.io/youtube/coding-sokoban-pt-25-state-flags/</link><pubDate>Mon, 11 Aug 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-pt-25-state-flags/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/M8M9Yl7iOLI?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 25: State / Flags - State Machine Fix and Compiler Warnings Cleanup&lt;/p>
&lt;p>Part 25 tackles two important code quality issues. We enhance our state machine with proper on_enter and on_exit functions to fix a bug, then dive into compiler flags and clean up all the warnings in our codebase.&lt;/p></description></item><item><title>Coding Sokoban pt. 24: Better IO</title><link>https://bi3mer.github.io/youtube/coding-sokoban-pt-24-better-io/</link><pubDate>Fri, 08 Aug 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-pt-24-better-io/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/RuZNQr3HCP4?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 24: Better IO - Byte-by-Byte File Reading Optimization&lt;/p>
&lt;p>Part 24 overhauls how we load in level files. We replace the old file reading approach with a much more efficient byte-by-byte method for loading level files.&lt;/p>
&lt;ul>
&lt;li>Project Repository: &lt;a href="https://github.com/bi3mer/sokoban">https://github.com/bi3mer/sokoban&lt;/a>&lt;/li>
&lt;li>Series Playlist: &lt;a href="https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR">https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Coding Sokoban pt. 23: Scrolling</title><link>https://bi3mer.github.io/youtube/coding-sokoban-pt-23-scrolling/</link><pubDate>Wed, 06 Aug 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-pt-23-scrolling/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/1L1dNE5m5mg?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 23: Scrolling&lt;/p>
&lt;p>Part 23 starts with fixing a game-freezing bug from the previous episode, then moves on to the main feature: adding scrolling to our grid-based level progression. Now players can navigate through large collections of levels smoothly!&lt;/p>
&lt;ul>
&lt;li>Project Repository: &lt;a href="https://github.com/bi3mer/sokoban">https://github.com/bi3mer/sokoban&lt;/a>&lt;/li>
&lt;li>Series Playlist: &lt;a href="https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR">https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Coding Sokoban pt. 22: Memory</title><link>https://bi3mer.github.io/youtube/coding-sokoban-pt-22-memory/</link><pubDate>Mon, 04 Aug 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-pt-22-memory/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/iFj4iQMAEb8?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 22: Memory&lt;/p>
&lt;p>Part 22 tackles memory management head-on! We fix a potential issue where excessive undo commands could exhaust memory, and improve the underlying Sokoban representation to eliminate unnecessary malloc/free operations when loading levels.&lt;/p>
&lt;ul>
&lt;li>Project Repository: &lt;a href="https://github.com/bi3mer/sokoban">https://github.com/bi3mer/sokoban&lt;/a>&lt;/li>
&lt;li>Series Playlist: &lt;a href="https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR">https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Coding Sokoban pt. 21: Results Message</title><link>https://bi3mer.github.io/youtube/coding-sokoban-pt-21-results-message/</link><pubDate>Fri, 01 Aug 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-pt-21-results-message/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/16wnLh4J73k?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 21: Results Message - Celebrating Player Achievements&lt;/p>
&lt;p>Part 21 adds the finishing touches to our object pool and linked list, then implements a results message system to celebrate when players beat their previous records.&lt;/p>
&lt;ul>
&lt;li>Project Repository: &lt;a href="https://github.com/bi3mer/sokoban">https://github.com/bi3mer/sokoban&lt;/a>&lt;/li>
&lt;li>Series Playlist: &lt;a href="https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR">https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Coding Sokoban pt. 20: Object Pool</title><link>https://bi3mer.github.io/youtube/coding-sokoban-pt-20-object-pool/</link><pubDate>Wed, 30 Jul 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-pt-20-object-pool/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/q_kgWLWenJw?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 20: Object Pool&lt;/p>
&lt;p>Part 20 is all about craftsmanship! We implement an object pool and update our linked list to use it, reducing memory allocations. While Sokoban doesn&amp;rsquo;t need this level of optimization, it&amp;rsquo;s about writing quality software that we can be proud of.&lt;/p></description></item><item><title>Coding Sokoban pt. 19: Block Undo</title><link>https://bi3mer.github.io/youtube/coding-sokoban-pt-19-block-undo/</link><pubDate>Mon, 28 Jul 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-pt-19-block-undo/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/2j91p5DeAz0?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 19: Block Undo&lt;/p>
&lt;p>Part 19 completes our undo system! We implement block undo using the command pattern and fix three critical bugs in our linked list implementation. Now, players have full undo functionality, making the game that much easier!&lt;/p>
&lt;ul>
&lt;li>Project Repository: &lt;a href="https://github.com/bi3mer/sokoban">https://github.com/bi3mer/sokoban&lt;/a>&lt;/li>
&lt;li>Series Playlist: &lt;a href="https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR">https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Coding Sokoban pt. 18: Player Undo</title><link>https://bi3mer.github.io/youtube/coding-sokoban-pt-18-player-undo/</link><pubDate>Fri, 25 Jul 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-pt-18-player-undo/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/L2LhJ2iOYwQ?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 18: Player Undo - Progress with a Bug Discovery&lt;/p>
&lt;p>Part 18 tackles the highly anticipated undo feature! We implement player undo functionality using our linked list, but discover a bug in our implementation along the way. Still, we manage to get partial undo working - players can undo their movement, with block undo coming in the next episode.&lt;/p></description></item><item><title>Coding Sokoban pt. 17: Linked List</title><link>https://bi3mer.github.io/youtube/coding-sokoban-pt-17-linked-list/</link><pubDate>Wed, 23 Jul 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-pt-17-linked-list/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/50y0NFC2JsM?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 17: Linked List - Foundation for Undo System&lt;/p>
&lt;p>Part 17 sets up undo! We implement a custom linked list data structure that will serve as the backbone for our command pattern implementation. This foundational work enables the undo system coming next.&lt;/p>
&lt;ul>
&lt;li>GitHub Repository: &lt;a href="https://github.com/bi3mer/sokoban">https://github.com/bi3mer/sokoban&lt;/a>&lt;/li>
&lt;li>Series Playlist: &lt;a href="https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDRn">https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDRn&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Coding Sokoban pt. 16: Time and UI</title><link>https://bi3mer.github.io/youtube/coding-sokoban-pt-16-time-and-ui/</link><pubDate>Mon, 21 Jul 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-pt-16-time-and-ui/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/8dJV7Ep_B4I?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 16: Time and UI
In Part 16, we implement the UI elements to display move count and completion time, giving players real-time feedback on their performance and showing their best results. We also fix a bug with how the time it took to solve a level was calculated by using std::chrono.&lt;/p></description></item><item><title>Coding Sokoban pt. 15: Level Data</title><link>https://bi3mer.github.io/youtube/coding-sokoban-pt-15-level-data/</link><pubDate>Fri, 18 Jul 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-pt-15-level-data/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/jTv9JLUsuAI?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 15: Level Data&lt;/p>
&lt;p>Part 15 brings level data to the game! We implement tracking for the number of moves and completion time for each level. Next up is to add UI so that players can see their performance and challenge themselves to improve.&lt;/p>
&lt;ul>
&lt;li>GitHub Repository: &lt;a href="https://github.com/bi3mer/sokoban">https://github.com/bi3mer/sokoban&lt;/a>&lt;/li>
&lt;li>Series Playlist: &lt;a href="https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR">https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Coding Sokoban pt. 14: Better Saving</title><link>https://bi3mer.github.io/youtube/coding-sokoban-pt-14-better-saving/</link><pubDate>Wed, 16 Jul 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-pt-14-better-saving/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/7pU4PTDer0k?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>🔧 Part 14: Better Saving&lt;/p>
&lt;p>Part 14 has two parts. First, I fixed a bug with the level unlocking code. Second, I remove the save_system from before and make it part of the application state. I also added tracking for the number of moves the player took to beat a level and the time that it took them. This sets up nicely to finally get to saving stats per level&lt;/p></description></item><item><title>Coding Sokoban pt. 13: Application State</title><link>https://bi3mer.github.io/youtube/coding-sokoban-pt-13-application-state/</link><pubDate>Mon, 14 Jul 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-pt-13-application-state/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/fQ7q7BKoBzI?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 13: Application State
Part 13 lays crucial groundwork for our next major feature! Before we can track move count and completion time, we need a proper application state system. This episode builds the foundation that will make those features possible and easy to track for each level.&lt;/p></description></item><item><title>Coding Sokoban pt. 12: Logging</title><link>https://bi3mer.github.io/youtube/coding-sokoban-pt-12-logging/</link><pubDate>Fri, 11 Jul 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-pt-12-logging/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/UwbaxYBC5OI?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 12: Adding a Logging System - Essential Debugging Tools
Time for some behind-the-scenes infrastructure! In this episode, I take a break from user-facing features to implement a proper logging system. Sometimes the most important work happens behind the scenes - this foundation will make all future development much smoother!&lt;/p></description></item><item><title>Coding Sokoban Part 11: Saving</title><link>https://bi3mer.github.io/youtube/coding-sokoban-part-11-saving/</link><pubDate>Wed, 09 Jul 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-part-11-saving/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/dbooT1yTtI0?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 11: Level Unlocking + Save System&lt;/p>
&lt;p>Part 11 completes our progression system! We implement the actual unlock mechanics and add a save system so players can quit and return without losing their hard-earned progress. Plus, auto-saving for seamless gameplay.&lt;/p>
&lt;p>Now we have a fully functional puzzle game with proper progression - players can actually work through the levels and keep their progress!&lt;/p></description></item><item><title>Coding Sokoban Part 10: Grid View</title><link>https://bi3mer.github.io/youtube/coding-sokoban-part-10-grid-view/</link><pubDate>Mon, 07 Jul 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-part-10-grid-view/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/-jr-BNMy5K8?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 10: Level Selection Grid with Visual Unlock System&lt;/p>
&lt;p>In this episode, we upgrade our level progression to a grid-based level selector with visual unlock indicators. The UI shows which levels are locked and unlocked, but the actual unlock logic will be implemented in part 11.&lt;/p></description></item><item><title>Coding Sokoban Part 9: Level Progression</title><link>https://bi3mer.github.io/youtube/coding-sokoban-part-9-level-progression/</link><pubDate>Fri, 04 Jul 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-part-9-level-progression/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/kqlvHfFpcj4?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 9: Level Progression System + Vim Keybindings&lt;/p>
&lt;p>Part 9 brings exciting new functionality! We&amp;rsquo;re evolving from a single-level demo into a proper multi-level puzzle game. Plus, some fantastic quality of life improvements that will make both development and gameplay much more enjoyable.&lt;/p>
&lt;ul>
&lt;li>GitHub Repository: &lt;a href="https://github.com/bi3mer/sokoban">https://github.com/bi3mer/sokoban&lt;/a>&lt;/li>
&lt;li>Series Playlist: &lt;a href="https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR">https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Coding Sokoban Part 8: Instructions</title><link>https://bi3mer.github.io/youtube/coding-sokoban-part-8-instructions/</link><pubDate>Tue, 01 Jul 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-part-8-instructions/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/pl2_XjE7QFA?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 8: Instruction Menu&lt;/p>
&lt;p>Part 8 continues our journey! We enhance the main menu system with proper interaction handling and make an important correction that demonstrates good C++ practices.&lt;/p>
&lt;ul>
&lt;li>GitHub Repository: &lt;a href="https://github.com/bi3mer/sokoban">https://github.com/bi3mer/sokoban&lt;/a>&lt;/li>
&lt;li>Series Playlist: &lt;a href="https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR">https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Coding Sokoban Part 7: State Machine Basics</title><link>https://bi3mer.github.io/youtube/coding-sokoban-part-7-state-machine-basics/</link><pubDate>Sun, 29 Jun 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-part-7-state-machine-basics/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/GkINdTax_Eg?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 7: State Machine Architecture + Quality of Life Improvements&lt;/p>
&lt;p>Part 7 is packed with improvements! We tackle both technical debt and user experience enhancements, implementing a proper state machine architecture while adding features that make the game genuinely enjoyable to play.&lt;/p>
&lt;ul>
&lt;li>Project repository: &lt;a href="https://github.com/bi3mer/sokoban">https://github.com/bi3mer/sokoban&lt;/a>&lt;/li>
&lt;li>Series Playlist: &lt;a href="https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR">https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Coding Sokoban Part 6: Menu interaction</title><link>https://bi3mer.github.io/youtube/coding-sokoban-part-6-menu-interaction/</link><pubDate>Thu, 26 Jun 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-part-6-menu-interaction/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/CMHkWGfSPqg?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 6: Main Menu - Completing the Game Experience&lt;/p>
&lt;p>Welcome to part 6! We&amp;rsquo;re transforming our Sokoban project from a simple game into a polished application with a fully interactive main menu system. This is where our game starts feeling like a real product!&lt;/p>
&lt;ul>
&lt;li>Project Repository: &lt;a href="https://github.com/bi3mer/sokoban">https://github.com/bi3mer/sokoban&lt;/a>&lt;/li>
&lt;li>Series Playlist: &lt;a href="https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR">https://www.youtube.com/watch?v=1qzPr5OpPOE&amp;amp;list=PLwaZncztKsRckZ0u3sKbwkZMtH1-ABkDR&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Coding Sokoban Part 5: Restarting</title><link>https://bi3mer.github.io/youtube/coding-sokoban-part-5-restarting/</link><pubDate>Tue, 24 Jun 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-part-5-restarting/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/WjEhLT4OZLk?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 5: Player Restarting&lt;/p>
&lt;p>Part 5 brings a crucial gameplay feature and an important learning opportunity! We implement the restart functionality that every puzzle game needs, but more importantly, I show you two different approaches - one efficient, one not so much. Understanding what NOT to do is just as valuable as learning the right way.&lt;/p></description></item><item><title>Coding Sokoban Part 4: Colors and a Main Menu</title><link>https://bi3mer.github.io/youtube/coding-sokoban-part-4-colors-and-a-main-menu/</link><pubDate>Fri, 20 Jun 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-part-4-colors-and-a-main-menu/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/42ZuLIajps8?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 4: Adding Colors &amp;amp; a Main Menu - Bringing Sokoban to Life!&lt;/p>
&lt;p>The refactoring in part 3 pays off! In this episode, we leverage our clean codebase to add visual flair and user interface improvements to our Sokoban game. Watch as the game transforms from functional to genuinely appealing.&lt;/p></description></item><item><title>Coding Sokoban Part 3: Organization</title><link>https://bi3mer.github.io/youtube/coding-sokoban-part-3-organization/</link><pubDate>Thu, 19 Jun 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-part-3-organization/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/ZO7vgxL8Zqo?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 3: Organization - Preparing Sokoban for Advanced Features&lt;/p>
&lt;p>Welcome to part 3 of the Sokoban C++ series! Sometimes the most important work happens behind the scenes. In this episode, I take a step back from adding flashy new features to focus on something crucial: clean, maintainable code architecture.&lt;/p></description></item><item><title>Coding Sokoban Part 2: ncurses</title><link>https://bi3mer.github.io/youtube/coding-sokoban-part-2-ncurses/</link><pubDate>Tue, 17 Jun 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-part-2-ncurses/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/PHkmcQtTuxU?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Part 2: Enhancing Sokoban with ncurses - Adding Visual Polish to C++ Games&lt;/p>
&lt;p>Back with part 2! In my previous video, we built a functional Sokoban game using bitboards, but let&amp;rsquo;s be honest - it wasn&amp;rsquo;t much to look at. Time to fix that! In this follow-up, I show you how to transform a basic console game into an engaging visual experience using the ncurses library.&lt;/p></description></item><item><title>Coding Sokoban Part 1: Bitboards</title><link>https://bi3mer.github.io/youtube/coding-sokoban-part-1-bitboards/</link><pubDate>Thu, 12 Jun 2025 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/coding-sokoban-part-1-bitboards/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/1qzPr5OpPOE?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Live Coding: Building Sokoban Game in C++ Using Bitboards&lt;/p>
&lt;p>Watch me code a complete Sokoban puzzle game from scratch using C++! In this live coding session, I demonstrate how to implement the classic box-pushing puzzle game using bitboards for an efficient representation of the game state.&lt;/p></description></item><item><title>Graph Simplification for a Faster A*</title><link>https://bi3mer.github.io/youtube/graph-simplification-for-a-faster-a/</link><pubDate>Tue, 06 Sep 2022 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/graph-simplification-for-a-faster-a/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/3fX2kzr_AbQ?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>In this video I show a way to simplify graphs for pathfinding to speed up A*.&lt;/p>
&lt;p>Implementation: &lt;a href="https://github.com/bi3mer/simplifying_graphs_for_pathfinding">https://github.com/bi3mer/simplifying_graphs_for_pathfinding&lt;/a>
NetworkX: &lt;a href="https://networkx.org/">https://networkx.org/&lt;/a>&lt;/p>
&lt;p>A* Info:
Red Blob Games A* Blog: &lt;a href="https://www.redblobgames.com/pathfinding/a-star/introduction.html">https://www.redblobgames.com/pathfinding/a-star/introduction.html&lt;/a>
Sebastian Lague A* video: &lt;a href="https://www.youtube.com/watch?v=-L-WgKMFuhE&amp;amp;t">https://www.youtube.com/watch?v=-L-WgKMFuhE&amp;amp;t&lt;/a>&lt;/p>
&lt;p>Me:
Personal website: colan.biemer.us
Github: &lt;a href="https://github.com/bi3mer">https://github.com/bi3mer&lt;/a>
Twitter: &lt;a href="https://twitter.com/bi3mer">https://twitter.com/bi3mer&lt;/a>&lt;/p>
&lt;p>Other:
Stock videos from: &lt;a href="https://pixabay.com/">https://pixabay.com/&lt;/a>&lt;/p></description></item><item><title>On Linking Level Segments - CoG 2022 Talk</title><link>https://bi3mer.github.io/youtube/on-linking-level-segments-cog-2022-talk/</link><pubDate>Wed, 24 Aug 2022 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/on-linking-level-segments-cog-2022-talk/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/VrOBNP6UbRU?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>This is the talk I did for the IEEE Conference on Games (CoG) 2022 on the paper I wrote with Seth Cooper, On Linking Level Segments, which was nominated for best paper. (The winner of the best paper award also has a talk which is available at &lt;a href="https://www.youtube.com/watch?v=mnNKdOzi0F4&amp;amp;t=6s&amp;amp;ab_channel=TeaPea">https://www.youtube.com/watch?v=mnNKdOzi0F4&amp;amp;t=6s&amp;amp;ab_channel=TeaPea&lt;/a>.) A link to the arxiv version of the paper and the abstract is below.&lt;/p></description></item><item><title>Gram-Elites: N-Gram Based Quality Diversity Search</title><link>https://bi3mer.github.io/youtube/gram-elites-n-gram-based-quality-diversity-search/</link><pubDate>Thu, 05 Aug 2021 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/gram-elites-n-gram-based-quality-diversity-search/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/CRK1YlSFb3c?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>This is a talk I did for the PCG Workshop on the paper by the same name as this video. The abstract for the paper is below, and once the paper is uploaded I will include a link.&lt;/p>
&lt;p>In the context of procedural content generation via machine learning (PCGML), quality-diversity (QD) algorithms are a powerful tool to generate diverse game content. A branch of QD uses genetic operators to generate content (e.g. MAP-Elites). Problematically, levels generated with these operators have no guarantee of matching the style of a game. This can be addressed by incorporating whether a level is generable by an n-gram into the fitness function. Unfortunately, this leads to wasted computation and poor results. In this work, we introduce n-gram genetic operators, which produce only solutions that are generable by the n-gram model; we call MAP-Elites combined with these operators Gram-Elites. We test on a tile-based side-scrolling platformer, vertical platformer, and roguelike. For all three, n-gram operators outperform standard operators and random n-gram generation, finding more usable (i.e. completable and generable) solutions at a faster rate. By integrating structure into operators, instead of fitness, these genetic operators could be beneficial to QD in PCGML.&lt;/p></description></item><item><title>Markov Decision Processes</title><link>https://bi3mer.github.io/youtube/markov-decision-processes/</link><pubDate>Tue, 28 Apr 2020 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/markov-decision-processes/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/05Ozahj7WsQ?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Russell, Stuart, and Peter Norvig. &amp;ldquo;Artificial intelligence: a modern approach.&amp;rdquo; (2002).&lt;/p></description></item><item><title>N-Grams for Game AI</title><link>https://bi3mer.github.io/youtube/n-grams-for-game-ai/</link><pubDate>Wed, 25 Mar 2020 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/n-grams-for-game-ai/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/tg6kGqzwMrQ?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>A short presentation on N-Grams for game ai course.&lt;/p>
&lt;p>C# implementation: &lt;a href="https://github.com/bi3mer/UnityAITools/tree/master/NGram">https://github.com/bi3mer/UnityAITools/tree/master/NGram&lt;/a>&lt;/p>
&lt;p>Harry Potter N-Grams: &lt;a href="https://bi3mer.github.io/blog/post_22/index.html">https://bi3mer.github.io/blog/post_22/index.html&lt;/a>&lt;/p></description></item><item><title>Python - JSON file to Schema</title><link>https://bi3mer.github.io/youtube/python-json-file-to-schema/</link><pubDate>Tue, 10 May 2016 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/python-json-file-to-schema/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/0QyaDI--3t8?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Convert JSON file to a schema. Source can be found at: &lt;a href="https://github.com/bi3mer/CreateJSONSchema">https://github.com/bi3mer/CreateJSONSchema&lt;/a>&lt;/p></description></item><item><title>Dodge Bird</title><link>https://bi3mer.github.io/youtube/dodge-bird/</link><pubDate>Sat, 31 Oct 2015 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/dodge-bird/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/NrFSy5ivm20?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>Made this game for a girl scouts game jam at EGS in a little over 6 hours. If you&amp;rsquo;re wondering yes this can be played on the Cira Center and has been. There are two game modes easy and hard, here I play easy then hard. In hard you&amp;rsquo;ll notice not only are there more rain drops but there are is also wind which will push the rain drops.&lt;/p></description></item><item><title>My Best Man Speech</title><link>https://bi3mer.github.io/youtube/my-best-man-speech/</link><pubDate>Fri, 30 May 2014 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/my-best-man-speech/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/ROG829IHCXo?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>filmed by margot&lt;/p></description></item><item><title>competitve tetris</title><link>https://bi3mer.github.io/youtube/competitve-tetris/</link><pubDate>Thu, 27 Mar 2014 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/competitve-tetris/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/nELEB3xt-sw?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>competitve tetris&lt;/p></description></item><item><title>UIAlertView and Changing views in IOS</title><link>https://bi3mer.github.io/youtube/uialertview-and-changing-views-in-ios/</link><pubDate>Thu, 16 May 2013 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/uialertview-and-changing-views-in-ios/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/0GfrrccgGZY?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>this goes over the basics of programming with alert and what to do with them and how to show them. It does not show how to make use of the input from the buttons but that will be covered later on. Furthermore it shows how to create different views within an app through a fairly simple method&lt;/p></description></item><item><title>Basic objective-c Programing: Button and Label</title><link>https://bi3mer.github.io/youtube/basic-objective-c-programing-button-and-label/</link><pubDate>Wed, 15 May 2013 12:00:00 +0000</pubDate><guid>https://bi3mer.github.io/youtube/basic-objective-c-programing-button-and-label/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/gEAAiYGjTMA?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
>&lt;/iframe>
&lt;/div>
&lt;hr>
&lt;p>This goes over some basic programming with buttons and labels in xcode while making use of the .xib file.&lt;/p></description></item></channel></rss>