I’ve said similar before but I’m just so impressed with Julia Evans as a technologist and technology writer/blogger: from very humble beginnings the scope and sophistication and arc of growing expertise is a masterclass in how to become a legend via putting in the work: and in an age of so many bytes on how to take shortcuts this is exactly the kind of role model we need.<p>In this particular instance I recall the post about DNS some years ago and the callback is amply enriched.<p>Keep it up @jvns. You hold us all to a high standard.
> Sometimes users will still get errors from PowerDNS directly, but I added some logging of all the errors that users see, so hopefully I can review them and add extra translations if there are other common errors that come up.<p>I noticed that you are using our Go module to access the API. It is wonderful to see our work helping others build great software, especially for education. Thank you for that.<p>Please note that the upstream API sometimes changes slightly between minor releases. For example, prior to v4.9, the error response for a non-existent server was "Not Found". Starting with v4.9, it changed to "Method Not Allowed".<p>Unfortunately, error responses aren't always part of the API specification. I'm thinking about adding the most common cases to the module anyway.
Thank you very much for this wonderful experimental and educational tool.<p>You mentioned about your previous version:<p>> If there was a CNAME record for a domain name, it allowed you to create other records for that domain name, even if it shouldn’t<p>> you could create 2 different CNAME records for the same domain name, which shouldn’t be allowed<p>One suggestion... If someone makes a mistake and generates an error, it would be terrific if there were a more verbose explanation so the user may better understand why what they're trying to do won't work. I'm very much a conceptual learner. If I can understand why an error is an error, it puts me on a better path toward a more comprehensive understanding.<p>Thanks again for all your work.
> Previously Mess With DNS was using a Postgres database. This was problematic because I only gave the Postgres machine 256MB of RAM, which meant that the database got OOM killed almost every single day. I never really worked out exactly why it got OOM killed every day, but that’s how it was.<p>Found this a little surprising - postgres is internet old - I'm pretty sure it was around at a time when physical servers might not have 256mb of ram?<p>Seems this should be possible to tune down still? (I mean, maybe not. Postgres 16 isn't postgres 6, and maybe I'm just getting old..)
The section labelled "what I learned: it’s okay for an API to duplicate information" is something I come across often in Django projects. Django views send a Python dictionary of data to the template processor to display the information. Often it's easier to massage the data into a more friendly format before sending it to the template, even if it means duplicating the info sent.
Been using a PowerDNS cluster in production for about 5 years using a SQL backend for replication, absolutely zero issues, not a single crash, memory leak etc in that time. The only downside is the API has a single key and you can not generate more, but there are open source projects that can put the API behind a proxy with additional keys/ACL.<p>Given it can read BIND files, surprised BIND is still the default in many places.
Great write up. I'm using PowerDNS for <a href="https://www.getlocalcert.net/" rel="nofollow">https://www.getlocalcert.net/</a>, which also makes heavy use of PowerDNS's HTTP API. I've been really happy with it. I need to check my code, but I remember planning to use the comment field of the records to map between application IDs and records in PowerDNS zones.<p>You may be able to implement the logging by using a customization of the Sqlite backend, although I think PowerDNS caching may get in your way.<p>I'll recommend the pipe backend to anyone looking to hack on DNS stuff. It's almost like a DNS lookup via a function in any programming language you choose. It takes a while to figure out how incoming queries are translated though.<p><a href="https://doc.powerdns.com/authoritative/backends/pipe.html" rel="nofollow">https://doc.powerdns.com/authoritative/backends/pipe.html</a>
I came across Bert Hubert during covid because of his incredible work on this article: <a href="https://berthub.eu/articles/posts/reverse-engineering-source-code-of-the-biontech-pfizer-vaccine/" rel="nofollow">https://berthub.eu/articles/posts/reverse-engineering-source...</a><p>Long before Bert was writing articles on the source code of mRNA vaccines, he helped build PowerDNS. He talks about that in a three part series starting here: <a href="https://berthub.eu/articles/posts/history-of-powerdns-1999-2003/" rel="nofollow">https://berthub.eu/articles/posts/history-of-powerdns-1999-2...</a><p>A fascinating individual...<p><a href="https://fosstodon.org/@bert_hubert" rel="nofollow">https://fosstodon.org/@bert_hubert</a><p><a href="https://github.com/berthubert">https://github.com/berthubert</a><p><a href="https://berthub.eu/" rel="nofollow">https://berthub.eu/</a>
As an administrator running and having run this at scale, make sure to check out:<p>- dnsdist DNS application aware loadbalancer<p>- Opera Software dns-ui