
Hello HN!
I've been working on Canine for about a year now. It started when I was sick of paying the overhead of using stuff like Heroku, Render, Fly, etc to host some web apps that I've built. At one point I was paying over $400 a month for hosting these in the cloud. Last year I moved all my stuff to Hetzner.
For a 4GB machine, the cost of various providers:
Heroku = $260 Fly.io = $65 Render = $85 Hetzner = $4
(This problem gets a lot worse when you need > 4GB)
The only downside

Article URL: https://www.nature.com/articles/d41586-025-01880-9
Comments URL: https://news.ycombinator.com/item?id=44292342
Points: 15
# Comments: 0

Article URL: https://arxiv.org/abs/2506.11016
Comments URL: https://news.ycombinator.com/item?id=44290315
Points: 28
# Comments: 11

Article URL: https://coroot.com/blog/opentelemetry-for-go-measuring-the-overhead/
Comments URL: https://news.ycombinator.com/item?id=44290331
Points: 10
# Comments: 4
https://coroot.com/blog/opentelemetry-for-go-measuring-the-overhead/
Article URL: https://www.apa.org/pubs/journals/releases/xge-xge0001772.pdf
Comments URL: https://news.ycombinator.com/item?id=44290597
Points: 16
# Comments: 11
https://www.apa.org/pubs/journals/releases/xge-xge0001772.pdf

Article URL: https://www.chemistryworld.com/opinion/benzene-at-200/4021504.article
Comments URL: https://news.ycombinator.com/item?id=44290413
Points: 67
# Comments: 24
https://www.chemistryworld.com/opinion/benzene-at-200/4021504.article

Article URL: https://blog.darklang.com/darklang-goes-open-source/
Comments URL: https://news.ycombinator.com/item?id=44290653
Points: 43
# Comments: 9

Article URL: https://yalereview.org/article/jennifer-krasinski-richard-foreman
Comments URL: https://news.ycombinator.com/item?id=44291026
Points: 5
# Comments: 1
https://yalereview.org/article/jennifer-krasinski-richard-foreman

Hello HN,
I built a Typescript library (named socket-call, for lack of a more sexy name) whose goal is to be able to call socket.io events as regular functions.
So you declare your server-side like so:
...
const listenEvents = (services: UserServices) => ({
// Add your events here, the name of the event is the name of the function
login: async (username: string) => {
services._socket.data.user = { username };
console.log(`User ${username} logged in`);

Article URL: https://turso.tech/blog/working-on-databases-from-prison
Comments URL: https://news.ycombinator.com/item?id=44288937
Points: 214
# Comments: 139