HNHacker News
TopNewBestAskShowJobs

m_sahaf

800 karma · joined September 25, 2015

submissionscomments
m_sahaf··on TigerFS – A Filesystem Backed by PostgreSQL
Brilliant. I wonder what limits we can hit with this setup. What if local postgres is installed and its data directory location is on TigerFS, what are the trade-offs here? Could placing SQLite file on TigerFS mount increase durability for Litestream setup? Is it possible to somehow run have TigerFS database storing data on TigerFS?
m_sahaf··on Enable CORS for Your Blog
How can someone add platforms to the guide? I want to add Caddy
m_sahaf··on SSL Configuration Generator
ElGamal says he uses them interchangeably. He says TLS exists for historical reasons, but the essence of the technology is the same. I got into the habit of using SSL/TLS.
m_sahaf··on Postman which I thought worked locally on my computer, is down
Allow me to introduce you to Hurl: https://hurl.dev/
m_sahaf··on Next Steps for the Caddy Project Maintainership
> If that person found another problem with Caddy, I think they are less likely to report it to you because of this.

Given they're aware of previous discussion and the stance on the feature request, I don't think they're deterred by the discussion here. Your addition of fuel to fire here is the very thing that's not helping.

> If they did report it, I would think you are very likely to dismiss it because of who they are, not the contents of the bug report.

That's a huge assumption on your behalf.

m_sahaf··on Next Steps for the Caddy Project Maintainership
It's a repeat complaint from the same person who admits bringing it up before. The way they framed their complaint is, again, snide.

> That’s a long way beyond exasperation, that’s a massive overreaction.

Your reaction to Francis is _the_ overreaction. Francis simply said to OP to put their money where their mouth is. The "slander" comment comes later as a general statement on why this subject has become annoying.

Stop being hung up on Francis' response. The niche feature was discussed at length multiple times. You're welcome to search the web for all the conversations we had on the subject. Caddy has been around for 11 years. We've seen this subject more than you've seen it brought up. Again, OP referenced the discussion on the issue tracker in one of the earlier times they brought it up. They _admit_ it's niche. What's the point of continuously bringing it up?

m_sahaf··on Next Steps for the Caddy Project Maintainership
This is being blown out of proportion. You're discounting an entire project and your experience of the software over a person expressing exasperation over an inconsequential feature (not a bug) that even the author of curl had his run through and frustration. The request was not dismissed, rather it was discussed at length on our issue tracker. The OP knows it was discussed at length because they linked to the discussion thread in the earlier times they brought this up. Moreover, the way they presented it this time is snide, agree or not. To quote Matt's statement of the project being "stable and mature" just to say "except you didn't implement my niche feature" (yes, editorialized) is not criticism nor a feature request. It's veiled instigation hiding behind plausible deniability.

Anyways, on the feature request, Caddy is not the only software who disagrees with it being valid, and curl had their back-and-forth on it. There's no legitimate bug being dismissed, and you can go through the issue tracker to audit it. Equating this discussion with 37signals or Signal is false equivalence.

Disclaimer: Caddy maintainer

m_sahaf··on Abogen – Generate audiobooks from EPUBs, PDFs and text
I imagine a pipeline between Calibre-Web[0] and audiobookshelf[1] going through Abogen, where Calibre-Web supplies the books, Abogen generates the audio version of it, and Audiobookshelf serves them. Great solution for the hearing impaired.

[0] https://github.com/janeczku/calibre-web

[1] https://github.com/advplyr/audiobookshelf

m_sahaf··on Ask HN: What Are You Working On? (June 2025)
I'm not actively working on it daily, as I have shortage of free time and helping hands, but the HTTP Spec Test Suite is my Moby-Dick. I wrote about it here: https://www.caffeinatedwonders.com/2024/12/18/towards-valida..., I also discussed it on the HTTP WG mailing list and presented it at the HTTP WG Workshop last year.

Another Moby-Dick of mine is Kadessh, the SSH server plugin of Caddy, formerly known as caddy-ssh. This one is an itch. I wrote about it here https://www.caffeinatedwonders.com/2022/03/28/new-ssh-server..., and the repo is here: https://github.com/kadeessh/kadeessh. Similar to the other one, feedback and helping hands are sorely needed.

They are both sort of an obsession and itches of mine, but between dayjob and school, I barely have a chance to have the clear mind to give them the attention they require.

m_sahaf··on "I vibe coded and shipped an app in three days. It got hacked. Twice."
That isn't true representative of Supabase. Tables respect RLS by default, unless turned off. This is how Supabase works. Views are not, and that is due to multiple reasons which Supabase documents. Supabase also warns the user of this and asks them to configure RLS properly for views by first changing the invoker. They also report the same issue to the user on their Security Advisor. The fix is as easy as running the SQL statement in the SQL Editor. Supabase also offers "Autofix" next to the warning, which tells the user exactly how to modify the CREATE VIEW statement to enable RLS.

This is not a problem with Supabase.

m_sahaf··on Ssl.com: DCV bypass and issue fake certificates for any MX hostname
I always wonder who/what checks if CAs respect CAA. I know some browsers now check the certificate transparency log, but are there any that check the CAA record against the issuer of the certificate?
m_sahaf··on Writing as Transformation
I cannot find the source, but I saved this quote by Douglas Hofstadter about the process of writing, rewriting, and revising:

"It is the intensity of this process of global tightening and smoothing of a huge structure that was once implicit in one's mind but is now external and has its own unanticipated shape, life, and momentum, it is the power of this process of converting a set of once-intangible intuitions into a very tangible network of interconnected crystals, that I had forgotten."

m_sahaf··on SSL certificate lifetimes are going down. Dates proposed. 45 days by 2027
The renewal of the key does not affect existing connections/sessions because they (the sessions) don't use the key directly. The private key is only used in the beginning to agree on the symmetric key, then the symmetric key is used from there onwards.
m_sahaf··on SSL certificate lifetimes are going down. Dates proposed. 45 days by 2027
Caddy doesn't reuse the private key by default. The user has to explicitly configure it in that broken way.
m_sahaf··on Rearchitecting: Redis to SQLite
There's Redka: https://github.com/nalgeon/redka/
m_sahaf··on Kamal Proxy – A minimal HTTP proxy for zero-downtime deployments
Yep, it was Simon: https://til.simonwillison.net/caddy/pause-retry-traffic
m_sahaf··on Deno: What we got wrong about HTTP imports
Ha, in what I believe Ryan's first talk about Deno, he mentioned something about avoiding cute features or so, then he said Deno has URL-based imports "because they're cute". It didn't take long for someone to raise it up in 2018:

https://github.com/denoland/deno/issues/195

We've come full circle :)

m_sahaf··on Nginx Unit: open-source, lightweight and versatile application runtime
It supports it with the caddy-l4 plugin: https://github.com/mholt/caddy-l4. It was also indicated we might move the plugin into standard Caddy once given enough feedback from the user-base and are comfortable with the implementation solidity.
m_sahaf··on FrankenPHP: Modern PHP App Server
Citing that particular blog post isn't making the point you think it makes. To quote:

> The most striking piece of new knowledge for me was learning about failure modes. Nginx will fail by refusing or dropping connections, Caddy will fail by slowing everything down.

Do you want your clients failing to load your website at all? Is this the best approach to serving users?

m_sahaf··on Take a look at Traefik, even if you don't use containers
> After that, you use the REST API to make changes to the server while it is running, which uses a JSON configuration definition instead of a Caddyfile, so it ends up being a jump for users.

You can, in fact, use any configuration format with the API as long as Caddy has its adapter compiled-in; you just have to use the correct value in the `Content-Type` header. For instance, you can use Caddyfile format using the `text/caddyfile` value in `Content-Type`. This is documented[0].

[0] https://caddyserver.com/docs/api#post-load

m_sahaf··on The Format Dialog in Windows NT
Once famous incident of this effect is reported by Oliver Sacks, where he confidently narrated a story that presumably happened to him during the war until his brother corrected him:

https://www.wired.com/2015/08/fully-immersive-mind-oliver-sa...

m_sahaf··on How the open source Caddy server uses Grafana Cloud for full-stack observability
We have it enabled in production. Checkmate.

You're welcome to help through numerous means.

m_sahaf··on How the open source Caddy server uses Grafana Cloud for full-stack observability
Fair enough. There was a learning curve which we had to overcome. I guess you can blame the curse of knowledge[0] for not making this part of the blog post, or because I was more focused on the results delivered by the Grafana stack than the process. I wonder if it may be something like math, where you have to practice much enough for it to click.

[0] https://en.wikipedia.org/wiki/Curse_of_knowledge

m_sahaf··on How the open source Caddy server uses Grafana Cloud for full-stack observability
> I'd have preferred more technical details.

There isn't much technical details to it. Caddy exposes profiles by default[0] and prometheus metrics are available as opt-in. We set up grafana-agent to collect profiles and metrics from Caddy, poked at the Grafana Cloud portal, studied the available data, and checked the charts for anomalies. Grafana Cloud made it easy for us to get started with that without having to build more infrastructure for them, which will also require extra energy that can be better spent on the core of our project.

[0] https://twitter.com/MohammedSahaf/status/1760415991513637137

m_sahaf··on Profiling Caddy
The pprof format is not tied to Go. From my understanding, it's used within Google across multiple languages. The format is defined in the pprof repository[0], and the visualization tool is source-language agnostic. I've seen libraries in numerous languages (e.g. Python, Java) to publish profiles in pprof format. This is an indicator the pprof format has become de-facto. Grafana Pyroscope[1] is a tool that's capable of parsing the pprof format, agnostic to the source programming language, and has instructions for Go, Java, Python, Ruby, node.js, Rust, and .NET.

My understanding is that you're searching for a combination of the profiles, metrics, and tracing. Caddy supports all 3.

[0] https://github.com/google/pprof/blob/main/doc/README.md

[1] https://grafana.com/docs/pyroscope/latest/

metrics and tracing need to be manually enabled (for now, perhaps)

m_sahaf··on Freenginx: Core Nginx developer announces fork
You could've used the nginx-adapter and skip the faulty LLMs

https://github.com/caddyserver/nginx-adapter

m_sahaf··on Zero-Trust Architecture with Caddy
I had fun building it. It was illuminating seeing where implicit trust is unconsciously assumed, break that down, and identify the threat entry-points (absence of policy definition for the ACME server) as areas of improvement for Caddy. I'm surprised none of the users attempted it or reported those needs. I know at least one user who told me they were considering it but need the tutorial document. Now we have the tutorial (kinda) :)
m_sahaf··on I abandoned OpenLiteSpeed and went back to good ol' Nginx
> I’m not aware of anyone running Caddy at any sort of scale for customers.

Well, to name a few...

- Stripe (https://twitter.com/caddyserver/status/1559591673511813120)

- Mercedes-Benz (https://github.com/caddyserver/caddy/pull/5275#issuecomment-...)

- Approximated.app (https://dev.to/carterbryden/how-to-allow-end-user-custom-dom...)

- FusionAuth (https://fusionauth.io/blog/unlimited-domains-fusionauth)

The problem is those using Caddy are shy, not that it's not used at all. I know this because I see users removing the `server` header on the Caddy forum all the time, and many of the large users are just shy of their technology stack when it comes to Caddy.

Disclaimer: Member of the Caddy team

m_sahaf··on GCP Incidents
I don't know what metric to use of "good", but the throwaway app I've used it for worked flawlessly with both, so good enough for me ¯\_(ツ)_/¯
m_sahaf··on GCP Incidents
For web, Flutter has 2 renderers and offers 3 options:

- html: Uses HTML elements and CSS

- canvaskit: which, as you mentioned, uses canvas to own the full drawing process

- auto: defaults to canvaskit on web but html on mobile.

Source: https://docs.flutter.dev/platform-integration/web/renderers

Page 1 of 5Next →