HN user

weatherlight

6,148 karma

[ my public key: https://keybase.io/proletariat; my proof: https://keybase.io/proletariat/sigs/Uv4J7-JLh3FUzOh12m1RmZDS2BCXWC6yuMbNXnlg1nM ]

Posts304
Comments962
View on HN
lptk.github.io 19d ago

Demystifying MLsub – The Simple Essence of Algebraic Subtyping

weatherlight
1pts0
loc.closertotruth.com 19d ago

Interactive: Resource for Theories of Consciousness

weatherlight
1pts0
loc.closertotruth.com 19d ago

Landscape Grid: Consciousness Categories and Theories

weatherlight
3pts0
mamad.purbo.org 2mo ago

The Side Effect You Can't See: Perceptual Parochialism in Software Engineering

weatherlight
3pts0
slicker.me 4mo ago

A Minimal NixOS Config That Still Feels Premium

weatherlight
2pts0
revelry.co 7mo ago

Which language is best for AI code generation?

weatherlight
2pts0
github.com 10mo ago

Write Ruby extension gems in Rust, or call Ruby code from a Rust binary

weatherlight
3pts0
www.grisp.org 10mo ago

Run Erlang/Elixir on Microcontrollers and Embedded Linux

weatherlight
206pts53
en.wikipedia.org 1y ago

English-Prime

weatherlight
2pts0
www.youtube.com 1y ago

Discovery Makes Skin Invisible with Yellow Dye

weatherlight
1pts0
www.science.org 1y ago

Achieving optical transparency in live animals with absorbing molecules

weatherlight
1pts2
jpcamara.com 2y ago

Ruby Methods Are Colorless

weatherlight
5pts1
www.ericpfahl.com 2y ago

Unification in Elixir

weatherlight
186pts31
standards.nasa.gov 2y ago

NASA Software Safety Guidebook [pdf]

weatherlight
53pts5
www.ericpfahl.com 2y ago

Unification in Elixir

weatherlight
2pts0
hyperpolyglot.org 2y ago

(Logic) Prolog, Erlang, Elixir a side-by-side reference sheet

weatherlight
37pts10
www.youtube.com 2y ago

Keynote: Gang of None? Design Patterns in Elixir – José Valim – ElixirConf(2024)

weatherlight
4pts0
www.lesswrong.com 2y ago

A reckless introduction to Hindley-Milner type inference

weatherlight
3pts0
en.wikipedia.org 2y ago

Comparison of File Systems

weatherlight
2pts6
medium.com 2y ago

Nix-Shell Saved Our Team's Sanity

weatherlight
5pts0
www.thestackcanary.com 2y ago

Python NumPy to Elixir-Nx

weatherlight
6pts0
www.carryology.com 2y ago

Mission to Mars – Designing Backpacks for NASA

weatherlight
1pts0
theintercept.com 2y ago

Elon Musk Fought Govt Surveillance, yet Profited from It

weatherlight
11pts0
phoenixonrails.com 2y ago

Phoenix is not your application (unlike Rails)

weatherlight
2pts0
github.com 2y ago

Gleam v1.0.0

weatherlight
9pts3
roman-empire.net 2y ago

Household Sex (In the Roman Empire)

weatherlight
17pts1
deepcuts.blog 2y ago

Lovecraftian movie posters from Ghana

weatherlight
82pts3
www.eia.gov 2y ago

Weekly U.S. Ending Stocks of Crude Oil in SPR (Thousand Barrels)

weatherlight
2pts0
blog.swmansion.com 2y ago

Elixir WebRTC

weatherlight
3pts0
www.thespacereview.com 2y ago

Ekipazh: Russia's top-secret nuclear-powered satellite

weatherlight
3pts0

I receive webhooks all the time as ack that something was processed/ or a notification of the status of some sort of thing in an external system that we don't control.

I love Lisps, ML-family languages, etc. Languages like Java or Go are just painful for me to program in, and I know I’m probably in the minority there.

But honestly, I think a lot of it comes down to the fact that syntax carries semantic expectations. Certain syntax makes you expect a certain model of programming: mutability, imperative control flow, objects everywhere, etc.

Gleam is a good counterexample. It has an ALGOL-ish syntax, but semantically it’s a functional language, and it’s wonderful to read/write.

Same with Ruby: the parts of Ruby that still make me smile are mostly the parts that feel Lisp-adjacent.

It’s kind of wild that we live in a world where, for most programmers, syntax seems to matter more than semantics.

I'm working on Glyph, Its a is a statically typed functional language in the ML family.

Surface syntax is mostly SML-1997-ish, but underneath it's a different thing: simple-sub type inference, algebraic effects, modular implicits, and Perceus-style reference counting instead of a tracing GC.

The compiler is currently a Rust frontend -> Zig codegen -> native binary pipeline.

Its been a lot of fun thus far.

The BEAM virtual machine. Its has lightweight isolated processes, message passing, supervisors, hot-ish runtime introspection, and fault containment are not libraries bolted on later. They are the substrate. not an after thought.

if you are build an app that needs the following: + many concurrent users + real-time UI + background jobs + workflows + stateful sessions + distributed events + failure isolation + “this thing should keep running for months”

You're going to want the thing built on the BEAM.

Slight misunderstanding. The LLM didn't generate Zig. My compiler does.

The model's work was in the Rust compiler internals, specifically the borrow-inference and refcount-insertion passes (Perceus-style ownership analysis). Zig is just the compiler's codegen target, the same way another compiler might emit LLVM IR or C.

The only Zig written by hand is the runtime: allocator code, RC primitives, list/string operations, etc. It's pure Zig, no libc, but it's small, stable, and was mostly untouched during this work.

The model only touched Zig indirectly, by reading the compiler's generated output to verify whether a fix worked. For example: checking that a drop was emitted before a parameter-slot reassignment. That's reading machine-generated code for correctness, not "the LLM writes Zig." Both models handled that part fine.

The 16 failures vs. 1 success were all in the ownership analysis, and that code is Rust.

Yes, iit had access. Thats actually the point.

I maintain a failure registry in the repo. Every failed attempt gets documented with the exact mechanism, the test that regressed, the revert SHA, and an instruction to start from that frontier. Fable read all of it.

But so did Opus.

Each of the 16 Opus failures ran in the same harness with the same accumulating registry. By attempt 15, it had disproofs 1–14 in context. By the end, Opus had basically the same corpus that Fable started with, and it still kept failing, sometimes by re-deriving an already-disproved approach in a slightly different shape.

So “it leveraged the previous work” doesn’t really separate them. Both had the leverage. Only one converted it.

What changed wasn’t more context. It was that Fable rejected a premise inside the context.

The registry’s standing framing was: “this needs whole-program borrow inference, which conflicts with per-module incrementality” (architecturally blocked.) Fable ran around 5 fresh attempts in-session, hit the same wall, and then noticed the framing was a red herring: the borrow analysis already runs module-wide, and for a single-module program, the module is the whole program.

Opus read that same framing for months and treated it as a constraint. Fable falsified it.

its the same repo, same rules, same disproof history, same workflow. The model was the only variable that changed, and the outcome flipped. Is it possible that attempt 17 by Opus could have figured it out? sure. but there's 16 previous attempts that say otherwise.

As fars as anecdotes go, that’s about as controlled as it gets.

I had almost the opposite experience.

I'm building a compiler for a language without a tracing GC, so a big chunk of the work is around memory management: functional in-place update, reuse analysis, and a Perceus-style reference-counting strategy similar to what Koka uses. The hard part was that my use case wasn't exactly covered by the Koka/Perceus paper. The prior art got me maybe 75% of the way there, but the remaining 25% was a cluster of bugs with very similar shapes and no obvious published solution.

With Opus, I kept getting stuck in this loop where it would fix one case, but break another case elsewhere in codegen. We ended up with something like 16 failed experiments just for one bug class. The workflow was: run an experiment, identify the shape of the bug, propose a fix, check whether it emitted the correct Zig, then see if the fix broke any previous memory-management cases. It was useful, but it kept choking on the parts where there wasn't clean prior art to lean on.

Fable was a different story for me. It one-shotted the Class A bug cluster, and then basically said "by the way, your previous attempts have these structural problems." More importantly, it identified the other related bug classes and came up with workable strategies for applying the Perceus-style memory management in those shapes too.

That's obviously anecdotal, and I'm not claiming Fable is universally better. But in my case, this was not a toy frontend wireframe. It was compiler work involving ownership, reuse, RC/drop behavior, and Zig codegen. The thing that surprised me was that Fable seemed better precisely where the problem wasn't just "reproduce known prior art", but required filling in a missing piece.

Also worth noting: I'm not using the API. I'm using the Max plan, so maybe there are product-path differences here. But I definitely did not have the "unpredictable beyond toy-scale" experience. For this particular compiler/memory-management problem, it probably saved me a ridiculous amount of time and money.

Really depends of the ergonomics of the language. In erlang/elixir/beam langs etc, its incredibly ergonomic to write code that runs on distributed systems.

you have to try really hard to do the inverse. Java's ergonomics, even with Akka, lends its self to certain design patterns that don't lend itself to writing code for distributed systems.

We have a really talented engineer on our team (in the US), who has a green card and everything. He's taking a job in Brussels, he said very plainly hes not sticking around to find out what happens next. I don't blame him.

I agree. Having children does make ones priorities very cut and dry. I found it a lot easier to "adult" once I had children. My Friends, at the time often asked, "Is having children hard?" I often replied, in the beginning at least, "Children are easy, it's everything else that is hard."

Pop OS 24.04 LTS Beta 10 months ago

I've been using Alpha(as my main driver!) for a year now, there's been a few hiccups here and there but its been very good. I prefer this to Gnome.

It's my main driver for software development, it was initially a dual boot system with windows, but I found that I could use Steam with very little configuration and could do all my gaming in linux(Cosmic DE/PopOS, I have a Nvidia GPU) as well. Works out of the box with Bigwig Studio and my Soundcard (Ultralite mk5)

I use a mix of the Cosmic store and nix for packages and programs.

I don't need to use windows ever again for anything and it makes me very happy.

I live a 20 minute walk away. I never tire of looking at it. When friends come to visit I usually skip the touristy stuff but I will always accompany them to go see the Sagrada Família.

:disksup.get_disk_info/1 (from :os_mon) just calls into the underlying OS once, grabs the info, and returns it. It’s not a blocking “long-running monitor” the way a NIF doing I/O in a scheduler thread would be. https://www.erlang.org/docs/26/man/disksup#get_disk_info-1

^ just use this.

:disksup.get_disk_data/0, which caches results in the :disksup server that updates every N seconds (configurable) which is what you are referring to.. https://www.erlang.org/docs/26/man/disksup#get_disk_data-0

because the author self admitted they don't know C! One of the reason why people use the Beam VM is because its robust and fault tolerant.

a lot of the choice here are made at the expense of VM's health.

also why wouldn't anyone just use :disksup.get_disk_info/1. (Thats immediate) calling :disksup.get_disk_info/1 won’t mess with the scheduler in the way a custom NIF or a big blocking port might.

I see the above code/lib and just see reflags all over the place.

3 out of 5 of all the phone calls you've ever made was managed by a box somewhere running the Erlang VM (BEAM) which Elixir gets all its concurrency and parallelism from.

And no, Discord has not moved away from Elixir. While they have adopted Rust for certain parts of their infrastructure, Elixir remains a core part of their backend, particularly for real-time communication and chat infrastructure.

I said this else where, but, dramatic foreign policy shifts and realignments only make the U.S. even less attractive as an ally and a partner. Decades of relationships are being strained in the attempt of mending ties with a state that never really did much to advance America's interests in the modern era. And it could all be completely undone in four years. The whip lash of back and forth, radical shifts in policy, are as damaging as the acts that directly alienate America's global partners.

The US has basically said that. It doesn't matter though, because at the end of the day, dramatic foreign policy shifts and realignments only make the U.S. even less attractive as an ally and a partner. Decades of relationships are being strained in the attempt of mending ties with a state that never really did much to advance America's interests in the modern era. And it could all be completely undone in four years. The whip lash of back and forth, radical shifts in policy, are as damaging as the acts that directly alienate America's global partners.

    ...where the shadows of men's thoughts lengthen in the afternoon, when the twin suns sink into the lake of Hali; and my mind will bear for ever the memory of the Pallid Mask
So good, So many question. So many allusions to things that aren't explained but feel whole, but unknowable. They exist, but not for you.