Hacker News

Top stories

Live mirror
30 storiesupdated just nowView source snapshot
  1. Laya the open source version of Jev(convaiinnovations.com ↗)
    79comments
  2. What Zig felt like, coming from Rust(besok.github.io ↗)
    44comments
  3. AI-generated posters don’t have to be horrible(john.hartnup.uk ↗)
    368comments
  4. A graphical desktop for the ZX Spectrum(github.com/mindbox77 ↗)
    8comments
  5. Tin: full-text search for Postgres(planetscale.com ↗)
    3comments
  6. Human brain is two separate organs, Stanford Medicine-led research finds(stanford.edu ↗)
    165comments
  7. “The Secret Life of Circuits” is here(coredump.cx ↗)
    37comments
  8. Asking Authors About Their Own Papers(medium.com/tmlrorg ↗)
    6comments
  9. Android 17 is the first since 3.x to add new APIs without releasing to the AOSP(grapheneos.social ↗)
    521comments
  10. Black Holes or Black Hole Stars? Astronomers Spar over 'Little Red Dots'(quantamagazine.org ↗)
    7comments
  11. San Francisco Onion Futures Company(onionfutures.com ↗)
    94comments
  12. GPT-6 Astra Solves a WWI German Radio Cipher(prinzai.com ↗)
    120comments
  13. If math is more than proof, we need to better celebrate the rest of it(terrytao.wordpress.com ↗)
    171comments
  14. Learning Another Language May Be One of the Best Ways to Keep Your Brain Healthy(theconversation.com ↗)
    10comments
  15. Cloudflare Quick Tunnels(cloudflare.com ↗)
    299comments
  16. Communication by means of modulated Johnson noise(pnas.org ↗)
    16comments
  17. How to Write with an LLM(sockpuppet.org ↗)
    358comments
  18. You can run Git on object storage if you re-make packfiles(tigrisdata.com ↗)
    23comments
  19. Saving another 100TB of RAM(cloudflare.com ↗)
    87comments
  20. SDCC – Small Device C Compiler(sourceforge.net ↗)
    22comments
  21. Science Is Open Software(jepedersen.dk ↗)
    47comments
  22. From Stonemasons to Carpenters(thelastsoftwareengineer.substack.com ↗)
    4comments
  23. Why building a Rust LSP is hard(rust-glancer.github.io ↗)
    44comments
  24. Ray Ozzie and the Optimism of Being Early(reproof.app ↗)
    6comments
  25. Ctenophores: Wonders of Biology(quantamagazine.org ↗)
    6comments
  26. The first new cat species discovered in 100 years(nationalgeographic.com ↗)
    119comments
  27. NASA-IBM Lunar Foundation open-Source Geospatial AI Model(usra.edu ↗)
    5comments
  28. How OpenAI Used Its Own LLMs to Design Its Jalapeño Chip(ieee.org ↗)
    115comments
  29. OpenJev(openjev.com ↗)
    276comments
  30. Goroutine Leak Profiles(go.dev ↗)
    6comments

LMDB – First version of Redis written in Tcl

149 pointsby 9y agogist.github.com
25 comments
9y agoHN ↗

This is really inspiring. Reminds me of the quote "A complex system that works is invariably found to have evolved from a simple system that worked."

The interesting question of course is how to evolve a simple system into a successful complex system. One thing that seems important is nailing the right architecture early on - the simple system must contain all the right ideas in it and it is important to weed out bad ideas before they are entrenched in the code base. Still, planning the long-term evolution of a software system remains an arcane art to me. "Listen to your users and do what is necessary at the moment" is too simplistic.

9y agoHN ↗

On the contrary I don't think you can plan architectural perfection from the beginning. IMO you have to throw it in a prod-like environment early (preferably as an internal app with a minimal SLO) so that you can iterate early and often.

9y agoHN ↗

That's what I talked about in the last sentence of my post. It is important to do this, but it is not the whole story. How do you decide in which direction to iterate?

9y agoHN ↗

I think it takes experience. That's why I still believe that sw architects are really essential.

9y agoHN ↗

Similar to my sibling comment I think the value in sw architects isn't the ability to predict the future from experience, rather they should build systems that can accept reasonable change.

Some practical examples would be to implement build systems into their stack that accept database migrations and rollbacks easily. Or realizing they are in a fast-paced team that could benefit from specific frameworks and languages (experience would play a big role here).

9y agoHN ↗

Make it feature-driven. When Facebook came out they didn't know photo sharing would be a definitive feature. When they put it out there they took a slug to the shoulder for not realizing it sooner and then implemented relevant features (like tagging).

Similarly when Redis came out I doubt the creator realized everybody and their grandmother would use lists as a defacto message queue but now look at all the commands list has that facilitate just that.

Key point is to accept and welcome that slug to the shoulder that pushes you in the right direction, to abuse the metaphor.

9y agoHN ↗

Iirc Zuckerberg allowed profile pics but realized people kept changing them all the time so they implemented photos

9y agoHN ↗

The ability to plan falls out of experience.

All you have to do is listen to your users and do what's necessary if you have scars to remind you that sticking IO here will bring the system to its knees on a real user load, or that this customer is going to ask for LDAP integration next week so you better build your authentication accordingly.

9y agoHN ↗

I agree that experience helps, but experience alone is insufficient. Experience should be properly reflected upon, or you can stick to suboptimal practices justifying them by saying "that's how I always do it, worked for me in the past".

Experience can even be detrimental - the well-known second system syndrome comes to mind!

9y agoHN ↗

Yet lack of experience won't help either...

so, experience and keeping up with what customers need

9y agoHN ↗

If you are able to rewrite the code base in a short amount of time, the infrastructure problems are easier to handle. That way you can move forward faster and fix problems early on.

9y agoHN ↗

Yes, when the code base is small, evolving it is much simpler. One of the challenges is deciding on the exact right moment to introduce big changes - too early and the changes are in the wrong direction or even useless, too late and the amount of work is prohibiting and you are forced to live with suboptimal architecture.

9y agoHN ↗

Yeah, I agree. I think the real challange is to keep the code base in such a good shape that a rewrite of the whole thing or parts of is always doable. Someone talked about never writing modules that can't be rewritten in two weeks.

9y agoHN ↗

Yes, when the code base is small, evolving it is much simpler.

There's obviously some truth to that. But I also think it leaves or an important angle: Often larger, more complicated, features are easier to add if you have a lot of infrastructure pieces.

Say, in a database, if you have no durability (journaling), resource management (errors, locks), error checking (deadlocks, days checksumming), it'll be a lot more work to add support for some new query language [feature]. Now databases are my thing, but the same it's true for a lot of areas.

Disregarding that is IMO one of the reasons ground up rewrites fail so often: You'll get bogged down with infrastructure for a long time, without proper non toy users of the facility.

9y agoHN ↗

antirez mentions that this forks to save, but I'm not seeing that. The backgroundsave procedure makes a copy of db to dbcopy, but then never saves dbcopy. I wonder how much further the TCL implementation was extended before antirez switched to C.

BTW, I hadn't heard of LLOOGG (the L in LMDB) before. It was this:

"LLOGG was web service I (Salvatore Sanfilippo) and my co-founder Fabio Pitrola ran for seven years for free."

https://github.com/antirez/lloogg/blob/master/README.md

9y agoHN ↗

You are right, the intention was that but now I'm reminding that, in the middle of doing it, I thought, ok I reached the limits of the Tcl prototype, let's rewrite in C.

9y agoHN ↗

To be fair, LLOOGG Memory DB is apparently earlier than Lightning Memory-Mapped Database

9y agoHN ↗

As someone who worked for a company for a few years on a vast Tcl codebase, a company in which almost every engineer lamented the fact that they were working in an unused and unknown language, it warms my heart to see that it was used for this.