Hacker Newsnew | past | comments | ask | show | jobs | submit | sshine's commentslogin

You don't always choose the application layer.

When you're an OpenStack cloud provider, your customers choose.

When you're a customer using Open Source software, your vendors choose.

Using a mixture of directly attached NVMe and network-attached volumes with backup is the sweet spot for me.

I don't need to maintain my own network filesystem (Ceph), and I can put applications that mirrors its database natively on NVMe and everything I don't have much control over on network-attached volumes.

I feel like there's something better not yet made.


I ran OpenCode + GLM-5.1 for three weeks during my vacation. It’s okay. It thinks a lot more to get to a similar result as Claude. So it’s slower. It’s congested during peak hours. It has quirks as the context gets close to full.

But if you’re stuck with no better model, it’s better than local models and no models.

I have to say, OpenCode’s OpenUI has taught me what modern TUIs can be like. Claude’s TUI feels more like it’s been grown than designed. I’m playing around with TUI widgets trying to recreate and improve that experience


> I have to say, OpenCode’s OpenUI has taught me what modern TUIs can be like. Claude’s TUI feels more like it’s been grown than designed.

Claude's TUI is not a TUI. It's the most WTF thing ever: the TUI is actually a GUI. A headless browser shipped the TUI that, in real-time, renders the entire screen, scrolls to the bottom, and converts that to text mode. There are several serious issues and I'll mention two that do utterly piss me off...

1. Insane "jumping" around where the text "scrolls back" then scrolls back down to your prompt: at this point, seen the crazy hack that TUI is, if you tell me the text jumping around in the TUI is because they're simulating mouse clicks on the scrollbar I would't be surprised. If I'm not mistaken we've seen people "fixing" this by patching other programs (tmux ?).

2. What you see in the TUI is not the output of the model. That is, to me, the most insane of it all. They're literally changing characters between their headlessly rendered GUI and the TUI.

> Claude’s TUI feels more like it’s been grown than designed.

"grown" or "hacked" are way too nice words for the monstrosity that Claude's TUI is.

Codex is described as a: "Lightweight coding agent that runs in your terminal". It's 95%+ Rust code. I wonder if the "lightweight" is a stab at the monstrosity that Claude's TUI is.


To be clear, was OpenCode a better in your opinion compared to ClaudeCode?

Better UI, worse model (GLM), probably slightly worse agentic runtime.

In spite of how glitchy Claude feels, it makes decisions fast.


I handle polyglot monorepos using Nix.

Because Nix is a package manager not tied to one programming language ecosystem, I can install all the tools for every language I need, and have the tooling consistent and modular, even between monorepos.

For formatting I usee treefmt-nix, which quickly format all syntaxes in my repo (.nix, .rs, .md, etc.) by calling individual formatters (installed via Nix), such as rustfmt, mdformat, nixfmt, etc.

For git hooks I use lefthook-nix, which automatically installs my git hooks using lefthook. husky, cargo-husky, etc. are great, but they assume you're mainly using one tech stack. lefthook is like pre-commit, but with significantly better dependency chain. (I tried one time to bust the Nix cache and had to download and compile both the .NET runtime and the Swift runtime... it reminded me my dependency footprint could be smaller.)

For Cargo workspaces in Rust I use workspace-level linter rules, so all new crates can inherit the same rules.

As the author, I also love `just` and I have the CI steps as `just fmt`, etc.

This means the same commands I type work in CI, so there's not a parallel environment I have to maintain.

I have a `just ci` for running all the steps at once locally, but in GitHub/Forgejo Actions, I like to split them into separate Actions steps for better rendering on web. But `just ci: fmt lint ...` is just an alias, so very little repetition here.

Here's a lefthook-nix + treefmt-nix guide: https://simonshine.dk/articles/lefthook-treefmt-direnv-nix/

Here's a GitHub Actions + Nix guide: https://simonshine.dk/articles/speeding-up-ci-with-nix/

Here's an example project that uses it: https://github.com/sshine/walltime-rs

Here's a "how much Nix should I swallow at once?" guide: https://simonshine.dk/articles/three-levels-of-nix/

Here's a Forgejo Actions runner that builds and pushes an OCI image to a registry without Docker: https://git.shine.town/infra/runners/src/branch/main/.forgej...


There should be a scientific journal of programming in Odin just to reach notability.

We'll call for a yearly online conference.


One thing is lack of control of token efficiency on what’s already a subsidised product.

Another thing is branding: Their CLI might be the best right now, but tech debt says it won’t continue to be for very long.

By enforcing the CLI you enforce the brand value — you’re not just buying the engine.


Claude Code was the best harness from roughly around release to January this year. Ever since then, it's become more and more bloated with more and more stuff and seemingly no coherent plan or vision to it all other than "let's see what else that sounds cool we can cram in there."

What's taken over since then? Codex or something else?

Pi.dev

Maybe they should fix bugs like this then https://github.com/anthropics/claude-code/issues/17979#issue... ...

> Perhaps Anthropic is struggling to meet demand?

Yes, definitely, they’re gracefully failing to meet demand. They could also deny new customers, but it would probably be bad for business.


I once decided to deny new customers in order to be able to service current demand at the quality we wanted. It backfired and made people want our product even more. Our phones were blowing up. That approach can have unintended consequences!

You unintentionally used a common sales tactic; by decreasing supply you increase demand.

Another knob you could have turned is: raise prices. Did you try this?

Anthropic is already doing this.

Signup prices seem higher now than three months ago.

This is actually the least frustrating method because people who can't afford to pay are not as angry as people who paid and aren't getting served (like when sign-in emails don't arrive for hours or days), or people who have paid for a long time to suddenly see quality decrease.

But it might not be best for business: Having more users than you can handle might suck, but if you're popular enough, people are still gonna put up with it.


Bad for business and probably unwise for the type of product people will pop their head in to check on, then stop paying and return much later to see whether it's still not much more than a parlor trick for them.

For my part, I've tried to help reduce their demand by cancelling my subscription.

I’m reimplementing the Nix parser. I don’t know if it’ll morph into another formatter, or an LSP server, or what. I guess I’d like to try and improve on error messages and build it from scratch. Rust has really brought ergonomics to systems programming, and I wrote very few parsers for real languages, and never one with good errors.


> generating a good UI is not easy

And so many UIs stink, so auto-generating them might, on average, not be worse.

> a good interface conveys so much more semantic information then just it's underlying API

Yes, a good UI contains institutional memory on rendering that particular information in a bigger context than the pure data. I’m not sure how to convey that best.


In most cases, the deeper into the stack you look the more you'll find out why it sucks. You might be taking for granted how hard it is to implement some features.

Just because you can superficially design a better UI doesn't mean it would work as intended. It's amazing really how much can go on behind the scenes just for a seemingly trivial button that looks like shit.


Dendritic Nix (either too new or too underrepresented in training data)

Proper escaping of layered syntaxes in Ansible on the first attempt

Writing bare-metal embedded Rust, although this was long ago, so not current models


Addressing the self-deprecation:

> I felt like I was flinging slop over the wall

> my impostor syndrome got worse

> thanks for dealing with my slop, Alec

> I have never felt like a bigger fraud in this field

I'm the most senior software developer in my company and I sit in the middle of the room with my screens open to everyone, and I use 10x the average tokens. I've felt like an imposter when I was barely measuring up against the intellectual giants in my first jobs. It's a feeling, and it has nothing to do with you, your work, or your automation tools.

Secrecy leads to bad patterns of practice. AI doesn't make good programmers bad, or bad programmers good.

Addressing the lack of fun:

> I’m privileged that I get to have fun at all in my line of work

> this has sucked out all of the fun

Split your coding in two: The part that gets done quick, and the part where you personally care about every line of code.

This was always a problem with commercial programming for me: Employer only cares that it gets done, I care that it's good. The tension is necessary.

There are aspects to your style of craftsmanship that the AI hasn't encoded yet.

I choose to embed those in templates and agent skills, but you can also just keep writing that code yourself.

Addressing productivity:

> I would not have the mental capacity or skill to create a pull request like that without AI tooling

> Now that using AI is a normal expectation at work and how I’m evaluated in performance reviews, I suspect that this fraud feeling will only grow

I think that's why using it is so unavoidable: It does increase productivity and lowers cognitive strain, at the cost of yolo.

I don't know if "fraud feeling" is referring to your impostor syndrome, and you want to get rid of this: deal with the feeling, it's just part of your growth as a person. Or if you're using fraud as a loaded term to devalue AI use in programming for ideological reasons: Can't help here, I don't have a problem with it.

Addressing craftsmanship:

> no matter how big the impact, I feel empty

> I still contributed something of value

> I perhaps tied my identity too much to my career

> I’m not the greatest engineer, but I’ve always worked hard

> I care about the craftsmanship of my code

Your interest in the details of your craft will disappear eventually.

Keep it up as long as you care, it's fun.

When you're ready to see yourself as something else, it will naturally fade.

I've been an aspiring team lead without a team for a long time. Now I have a team of robots (and incidentally a team of people), and it feels natural. I still code in my spare time, but not for productivity, only when I have to or when I want to have fun.

For me, I've slowly switched to wanting things to exist rather than wanting to make them. That helps swallowing that I don't code as much any more. (I mean, I still recreatively code 2-3 hours per day, but it's far from the 8-16 hours that have been the norm in my life.)

If it helps: It is probably good for your physical well-being that you don't have to sit hunched over as much.


> Split your coding in two: The part that gets done quick, and the part where you personally care about every line of code. > This was always a problem with commercial programming for me: Employer only cares that it gets done, I care that it's good. The tension is necessary.

Use AI-assisted coding to MVP or vertical slice or however you want to call it. Prove that it works and is doable. Now you have baseline to start editing from, rewrite every single line, even the ones with just a single { if that's how you roll.

Or read it and ship it as is. Maybe adjust the agent's instructions and the project linters/formatters to match your specific style better.


Consider applying for YC's Summer 2026 batch! Applications are open till May 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: