News for hackers. Stuff that matters.

davvid

Nicely done OP. Does it do 3-way diffs for merges as well? The instructions only mention the two-way `git difftool` configuration so maybe that'll be a future feature?

Any interest in getting the setup upstreamed[1] so that users only need to `git config --global diff.tool omnidiff` to enable it by default? Disclosure: I created `git difftool` a long time ago, and am always happy when builtin support for useful tools are added to it. Feel free to reach out if you'd like help making that happen.

[1] https://github.com/git/git/tree/master/mergetools

Ask HN: Did crates.io stop processing new crate publishes?

For example https://crates.io/crates/saphyr-parser/0.3.2/code was recently published (without any client-side errors) but crates.io says: The source code for this version is not available yet. Archives are built shortly after a version is published. This usually only takes a few seconds, so please try again in a couple of minutes. I've never seen this error before. The same can be...

( Read More... | 2 comments | on HN )
Re:How we made claude.ai 3x faster in two weeks on Wednesday September 23, 2026 @09:49PM (#49825214)
This is nothing new, tho. The downfalls of reward maximization has been a known issue without a solution ever since reinforcement learning was first researched.. in the 1980s.
Re:Before GitHub on Friday May 08, 2026 @02:37AM (#48059454)
No, Git is alive and well. Git is under active development and continual iterative improvement.

Github might be on the decline, but git != github

Re:How to build a `Git diff` driver on Sunday April 12, 2026 @09:28PM (#47746487)
git-difftool is quite helpful, especially if you want an easy way to integrate existing file-based diff tools.
Re:Pixar's True Story on Thursday January 01, 2026 @12:37AM (#46451606)
Nor Catmull, unfortunately. FWIW, the article is centered around the financing and IPO side of the story.
Re:Go is portable, until it isn't on Saturday December 13, 2025 @06:20AM (#46253782)
> We did not want to spend time maintaining a backward compatible parser or doing code archaeology. So this option was discarded.

Considering all of the effort and hoop-jumping involved in the route that was chosen, perhaps this decision might be worth revisiting.

In hindsight, maintaining a parser might be easier and more maintainable when compared to the current problems that were overcome and the future problems that will arise if/when the systemd libraries decide to change their C API interfaces.

One benefit of a freestanding parser is that it could be made into a reusable library that others can use and help maintain.

Re:CLI tool to check the Git status of multiple projects on Friday November 21, 2025 @02:36PM (#46008069)
The "official" repo is the gitlab repo[1], but the github mirror has more watchers/stars.

[1] http://gitlab.com/garden-rs/garden

Re:CLI tool to check the Git status of multiple projects on Thursday November 20, 2025 @02:50PM (#45996835)
If you're into multi-repo setups then you might be interested in garden. I built this specifically for handling dozens of repos as single units.

https://github.com/garden-rs/garden

Re:Notes on Switching to Helix from Vim on Saturday October 11, 2025 @01:44AM (#45546896)

    > I had to get my project to emit compile_commands.json,
    > get clangd, figure out which things about our build
    > process clangd was not understanding from 
    > compile_commands.json and add them in .clangd
That sounds rough. This is anecdotal, but in my Linux corner of the world, ccls has been an easier user experience as a C and C++ LSP since I've never had to resort to messing with flags in the generated file.

I haven't used clangd myself, though, so I can't say either way, I just know ccls works well.

By convention I tend to have the generated build system in build/ at the top-level of the repo so that the file is at build/compile_commands.json. That, or I'll arrange to have a symlink there pointing to one generated elsewhere.

The nvim snippet I use in my init.lua to setup ccls to work in that scenario is:

    vim.lsp.config('ccls', {
        init_options = {
            compilationDatabaseDirectory = 'build',
        },
    })
    vim.lsp.enable('ccls')
My actual config does also contain a capabilities = ... argument that forwards the default_capabilities() from nvim-cmp, but you get the point. I hope that helps in case you're curious to give neovim another spin.
Re:Notes on Switching to Helix from Vim on Saturday October 11, 2025 @01:24AM (#45546814)
> upon further thought, I don't like having to move my hand to the arrow keys

ctrl-n and ctrl-p should let you select next and previous from the autocomplete menu while avoiding the arrow keys.

Re:How to Make a Living as a Writer on Saturday May 24, 2025 @01:15AM (#44078915)
> Throughout all of this, Horse News was the only stable work I had.

Only a good writer, that truly enjoys their craft, is able to masterfully insert a witty dry pun like that into their work. Bravo!

Re:Is Python Code Sensitive to CPU Caching? (2024) on Saturday April 05, 2025 @02:28PM (#43595542)
The article didn't mention Python's atomic refcounts. They're very bad for cache usage as they're constantly invalidating cache.
Re:The case against conversational interfaces on Wednesday April 02, 2025 @02:04AM (#43554035)
> It's 2025 and the closest I can find is a dictation app on my newest phone that uses online AI service, yet it's still not that great [...]

> Is there anything equally effective for any of you nowadays?

I'm not affiliated in any way. You might be interested in the "Futo Keyboard" and voice input apps - they run completely offline and respect your privacy.

The source code is open and it does a good job at punctuation without you needing to prompt it by saying, "comma," or, "question mark," unlike other voice input apps such as Google's gboard.

https://keyboard.futo.org/

Re:Stacked Commits Can Help You Write Better Code Faster on Thursday February 13, 2025 @05:52AM (#43034696)
In case you didn't know: `git rebase --update-refs` or to make this the default behavior: `git config --global rebase.updateRefs true`.
Re:Evo: Version control that works the way you think on Tuesday January 21, 2025 @11:59PM (#42789178)
These are called stacked branches in git. You're possibly looking for:

    git rebase --update-refs
... or a GUI like Git Cola that does this for you by default.
Re:All Lisp indentation schemes are ugly on Monday January 20, 2025 @03:13AM (#42766160)
Likewise, it's better to optimize for experienced readers than it is to optimize for students.
Re:All Lisp indentation schemes are ugly on Sunday January 19, 2025 @10:13PM (#42764619)
> This post misses the IMO best indentation scheme for lisp [...]

Likewise, a lispier(?) and more compact compromise?:

    (define (match:element variable restrictions)
        (define (ok? datum)
            (every 
                (lambda (restriction)
                    (restriction datum))
                restrictions))
        (define (element-match data dictionary succeed)
            (and 
                (ok? data)
                (let ((vcell (match:lookup variable dictionary)))
                    (if vcell
                        (and 
                            (equal? (match:value vcell) data)
                            (succeed dictionary))
                        (succeed (match:bind variable data dictionary))))))
        element-match)
Re:Something weird is happening with LLMs and chess on Friday November 15, 2024 @12:37AM (#42144213)
Here is a truly brilliant game. It's Google Bard vs. Chat GPT. Hilarity ensues.

https://www.youtube.com/watch?v=FojyYKU58cw

Re:Ubuntu Hoping to Remove Qt 5 Before Ubuntu 26.04 LTS on Friday November 01, 2024 @08:21PM (#42022962)
Qt5 to Qt6 is nothing like Python2 to Python3.

The lessons from (Qt3 to Qt4 and) Qt4 to Qt5 have been learned and moving a large project from Qt5 to Qt6 is not that hard comparatively. There are a few minor deprecated APIs to handle and it's relatively easy over all.

I even have a stable project that is compatible with Qt5 and Qt6 [1] all in a single code base (particularly thanks to the effort of the qtpy[2] library). It's not that hard, and my opinion includes C++ in that assessment.

[1] https://github.com/git-cola/git-cola/

[2] https://github.com/spyder-ide/qtpy

While I mostly wrote `mutuple` for fun, it's also a proof of concept for solving a tricky pickling problem in the jsonpickle[1] library: restoring object graphs that contain tuples with back-references to the same tuple.

I'm pretty sure there are better ways of handling this edge case, but, hey, it works and was a pretty fun experiment.

[1] https://github.com/jsonpickle/jsonpickle/pull/491

If you're into this kinda thing and are in python land you might also appreciate my friend's project in a similar vein

https://github.com/ugtar/pg_temp

Re:Show HN: Gcd – Git Worktree Navigator on Friday February 16, 2024 @05:59AM (#39395447)
Thanks for the feedback on the animations. I didn't want to keep too large of a .gif in the repo but that's the only format that's straightforward enough to have displayed inline so I had to keep the animation terse (and admittedly a bit too fast).

It is indeed using fzf in a specialized way so that it only searches for git worktrees and nothing more. The use case I have is that I have dozens or hundreds of repos in various locations on disk and this tool makes it easy to instantly jump into any of them.

That's why it's called "gcd" -- git + cd.

When I was in university around 2001/2002 my partner's close friend was an intern in 3M's legal department. At the time she noted that she was helping to ensure that 3M was never legally liable for teflon and related products.

Older »