How I Accidentally Nuked My Home Internet at Midnight

Like any good homelabber, I sometimes get the urge to ā€œjust try somethingā€ late at night. This time, that ā€œsomethingā€ was AdGuard Home, a DNS-level ad blocker and filtering service. My plan was simple: spin up AdGuard in Docker, point pfSense at it, and bask in an ad-free, privacy-respecting LAN.…

Introducing the Snowflake Series: From Foundations to Advanced Engineering

Snowflake has quickly become one of the most popular cloud data platforms — and for good reason. Its separation of storage and compute, pay-as-you-go scalability, and unique features like zero-copy cloning and time travel make it a powerful tool for modern data teams. But for many engineers, the challenge isn’t…

🧱 Reviving a Broken LXC Container

While it's probably not the best thing to admit, I've been neglecting my homelab for some time now. Gotify had been giving me errors for a at least a month and eventually seemed to stop working entirely. So it wasn't a complete surprise when…

Monitoring, Troubleshooting & Best Practices in Azure Synapse

We’ve covered everything from architecture to performance and cost management in Azure Synapse. Now, let’s close out the series with a practical guide to monitoring, troubleshooting, and applying best practices to keep your data warehouse running smoothly. Even the best-designed pipelines need visibility and tuning—this is where…

Resource Management & Cost Optimization in Azure Synapse

In previous posts, we’ve talked about designing tables, distributing data, and writing efficient queries. Now let’s turn our attention to resource management—a crucial area for both performance and cost control in Azure Synapse Dedicated SQL Pools. Synapse gives you tools to scale compute, manage concurrency, and minimize…

Query Optimization in Azure Synapse: Tips for Speed and Scale

Once you’ve designed your tables and chosen the right distribution strategy, the next big lever for performance is query optimization. In Azure Synapse Dedicated SQL Pools, this means writing efficient SQL, minimizing data movement, and ensuring the engine has the information it needs to generate the best query plan.…