41554 blogs · [ { "id": "01a08756-29c6-70c0-a95b-835f428495ab", "title": "The Math Behind Burn Rate Detectors", "url": "https://blog.woojiahao.com/post/burn-rate-detectors-math", "published_at": "2026-09-04T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f435d0b2f", "title": "Unified Data Modelling with Elixir", "url": "https://blog.woojiahao.com/post/unified-data-modelling-with-elixir", "published_at": "2026-06-12T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f43f8f42d", "title": "Running Docker in GitHub Action steps", "url": "https://blog.woojiahao.com/post/docker-in-github-action-step", "published_at": "2026-02-10T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f44cb2d33", "title": "Packaging and Publishing on Debian", "url": "https://blog.woojiahao.com/post/packaging-and-publishing-on-debian", "published_at": "2026-01-01T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f45b85254", "title": "Unpacking Options in Python", "url": "https://blog.woojiahao.com/post/unpacking-options-in-python", "published_at": "2025-12-27T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f4651044b", "title": "Building Components for Markdown in Astro", "url": "https://blog.woojiahao.com/post/building-components-for-markdown", "published_at": "2025-04-29T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f46bbc95a", "title": "Understanding Systems with Sequence Diagrams", "url": "https://blog.woojiahao.com/post/understanding-systems-with-sequence-diagrams", "published_at": "2025-04-25T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f4785d163", "title": "Evolution of Resumes", "url": "https://blog.woojiahao.com/post/evolution-of-resumes", "published_at": "2025-04-21T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f4853f8ca", "title": "Reframing Failure", "url": "https://blog.woojiahao.com/post/reframing-failure", "published_at": "2025-03-15T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f48d7c7d7", "title": "Ten Years in Tech", "url": "https://blog.woojiahao.com/post/ten-years-in-tech", "published_at": "2025-01-08T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f49734815", "title": "Maximizing learning at internships", "url": "https://blog.woojiahao.com/post/maximizing-learning-at-internships", "published_at": "2024-12-17T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f4a1e0e46", "title": "Appreciating 'Largest Rectangle in Histogram'", "url": "https://blog.woojiahao.com/post/appreciating-largest-rectangle-in-histogram", "published_at": "2024-04-13T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f4a6fbba9", "title": "Preparing for Technical Interviews", "url": "https://blog.woojiahao.com/post/technical-interview-systems", "published_at": "2024-03-30T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f4ab3ee50", "title": "The Story of Elixir", "url": "https://blog.woojiahao.com/post/the-story-of-elixir", "published_at": "2024-01-15T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f4b13e9b9", "title": "A Comprehensive Guide to Using JSON in Go", "url": "https://blog.woojiahao.com/post/a-comprehensive-guide-to-using-json-in-go", "published_at": "2023-12-23T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f4b60ed06", "title": "Redis Caching in Go: A Beginner's Guide", "url": "https://blog.woojiahao.com/post/redis-caching-in-go", "published_at": "2023-12-23T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f4bf482e8", "title": "How to Work with SQL Databases in Go", "url": "https://blog.woojiahao.com/post/how-to-work-with-sql-databases-in-go", "published_at": "2023-12-19T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f4ce61dcd", "title": "How to Get Started with Logging in Django", "url": "https://blog.woojiahao.com/post/how-to-get-started-with-logging-in-django", "published_at": "2023-12-06T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f4dc96392", "title": "Installing UxPlay on Arch Linux", "url": "https://blog.woojiahao.com/post/uxplay-arch-linux", "published_at": "2022-02-01T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f4de03ab0", "title": "The Javascript Ecosystem Can Be Frustrating to Work With", "url": "https://blog.woojiahao.com/post/javascript-ecosystem-can-be-frustrating-to-work-with", "published_at": "2021-12-21T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f4e5c4238", "title": "Under the Hood of Metaprogramming: Pitfalls of Metaprogramming in Elixir", "url": "https://blog.woojiahao.com/post/pitfalls-of-metaprogramming-in-elixir", "published_at": "2021-11-16T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f4f04a4a2", "title": "Under the Hood of Metaprogramming: How to Use Macros", "url": "https://blog.woojiahao.com/post/how-to-use-macros", "published_at": "2021-10-26T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f4f72e30d", "title": "Under the Hood of Metaprogramming: Under the Hood of Macros in Elixir", "url": "https://blog.woojiahao.com/post/under-the-hood-of-macros-in-elixir", "published_at": "2021-10-05T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f4fe0ecc6", "title": "Under the Hood of Metaprogramming: An Introduction to Metaprogramming in Elixir", "url": "https://blog.woojiahao.com/post/an-introduction-to-metaprogramming-in-elixir", "published_at": "2021-09-07T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f50dd77e1", "title": "Open-source Deep Dive: Broadway (Part 2) - Inner workings of Broadway", "url": "https://blog.woojiahao.com/post/odd-broadway-2", "published_at": "2021-04-13T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f51c0a672", "title": "Open-source Deep Dive: Broadway (Part 1) - Message queues, concurrency in Elixir, and Broadway architecture", "url": "https://blog.woojiahao.com/post/odd-broadway-1", "published_at": "2021-04-12T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f527c5db5", "title": "Open-source Deep Dive: Hound", "url": "https://blog.woojiahao.com/post/odd-hound", "published_at": "2021-01-17T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f536c5255", "title": "Elixir has opened my eyes...", "url": "https://blog.woojiahao.com/post/elixir-has-opened-my-eyes", "published_at": "2020-12-29T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f539aa87a", "title": "The truth behind software projects", "url": "https://blog.woojiahao.com/post/software-projects-truth", "published_at": "2020-05-26T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f54444122", "title": "Applications of Kotlin's delegate properties", "url": "https://blog.woojiahao.com/post/kotlin-delegate-properties", "published_at": "2019-07-13T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f54676d2a", "title": "Porting to FlexMark", "url": "https://blog.woojiahao.com/post/porting-flexmark", "published_at": "2019-04-08T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f546c1a36", "title": "Lessons on software release", "url": "https://blog.woojiahao.com/post/lessons-on-software-release", "published_at": "2019-04-03T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f551262fd", "title": "An investigation into generics in Java", "url": "https://blog.woojiahao.com/post/java-generics", "published_at": "2018-11-26T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f55daab29", "title": "Familiarising yourself with lambdas in Kotlin", "url": "https://blog.woojiahao.com/post/kotlin-lambdas", "published_at": "2018-10-28T00:00:00+00:00" }, { "id": "01a08756-29c6-70c0-a95b-835f5684a4fe", "title": "Diving into (Java) streams", "url": "https://blog.woojiahao.com/post/diving-into-streams", "published_at": "2018-04-08T00:00:00+00:00" } ] posts Claim your blog
Back to blog.woojiahao.com
Blog · corpus.blog/blogs/blog.woojiahao.com/posts

blog.woojiahao.com

blog.woojiahao.com

2026

2025

2024

2023

2022

2021

2020

2019

2018