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

Thank you for this, I updated some time ago but never really switched. Night and day difference !

The other thing I'm waiting for is search results ordered by date instead of relevance. When I'm searching for a picture in particular I know was taken 3 years ago, and search keywords to find it, it's impossible to find this specific photo because the ordering seem random


It went forward a little, but yes not really driving. But the upside down part is just a demo of the vacuum thingie technology, not the main point


> "He explained that I was looking at a plan for a restored ecosystem. It was also a perfectly adapted money machine. There was a large area where the ancient elephants could graze, and this would be funded, in part, by carbon-offset payments from governments and corporations. The carbon value of a single elephant is about two million dollars, he told me. (An elephant increases biodiversity, in part, by spreading seeds in its dung and by crushing dense vegetation on forest floors, giving slow-growing trees the space to survive.) He added that the interesting educational opportunities and “sexiness factor” of Colossal’s creations would make its carbon credits “trade at a premium.”"

So it's a startup, valued at 10 billion?! How exactly do they plan to make money?

Seriously, could anything be more 21st-century? Resurrecting extinct animal species (ones that supposedly went extinct naturally, mind you, not because of humans – what's the point then?) just to reintroduce them into parks and sell carbon credits.


The real prize is the technology and techniques to do this sort of stuff. CRISPR is a fascinating technology that we're just now seeing the benefits of[0]

0 - https://www.labiotech.eu/in-depth/crispr-technology-cure-dis...


From the article, it looks like they have multiple teams working on multipe animals at the same time. But the dodo team is going slower than the mammoth and the wolf :

> Keyte added that her team was still a long way from bringing back the dodo. For one thing, the methods for growing and manipulating the embryonic precursors of avian sperm and eggs in a lab setting have been developed for only two birds: the chicken and, recently, the goose. Keyte said, “It’s been almost twenty years since culture conditions for the chicken were established, and those culture conditions have not worked for other bird species, even ones that are really closely related, like quail.” She added that, despite the dearth of related research, her team was getting better at growing the sperm-and-egg precursors in birds: “We’ve gotten to the point where we feel like we can start doing some migration assays”—a technique for studying how the cells in an early embryo begin to differentiate. Once the researchers got the basic method for growing bird cells down, they could use the technology not just to develop a dodo but also to help replenish populations of endangered birds. The team had already identified some species that could use the help.


The complexity is that it's not a drawing : It's SVG. So it's code that must, in the end, display a pelican, so it's one step further.


This redirects to the submission link!


You now have five 2s!


Ooohhh! With only 4x 2s. I get it now! I feel dummy


No need to feel dummy, I was about to ask the exact same question.


For these commands I want to rerun, but not often enough, I add a comment to the command like `yay - Sc # clear pacman and yay caches` so it's easier to search in the future


I use this a lot too, often with cherry-picks and reverts that can't be merged into this or that branch yet, too. It's very convenient and works everywhere without installing anything.


Oh man that's clever, I never thought of doing that!


This is literally what the article advocates. It pushes things to the extreme where every code you write would be on the main branch and behind a feature flag


Feature flags have nothing to do with trunk or git-flow or feature branches. Simply, taking the entire introduction and asking, why are you not using common tooling?


It’s an advertisement for a feature flagging tool. I think you may have missed that.


So I've been hovering around jj for a while, trying to understand how it works, without suceeding in having a good mental model around it. I looked at this megamerge workflow and it's the first one that "clicked" for me (even though I'm not sure I understand the magic behind jj absorb, but I'll look into it). One thing though is that I don't quite understand how it would work in the context of a real git repo. Let's say I work on two branches, main and feature1, I'd create a [merge] commit that is has the two bookmarks as parents. But if after a fetch main has new changes, do I need to discard the current [merge] and recreate it again ? I can't find a way to just say "Update the parents so they track these bookmarks". I just tried it on a real repo, working on a change in a branch, then on a change on another branch, then adding a third branch I needed to work on that was not a parent yet, but this seems like a lot of boilerplate to always recreate my megamerge setup so I think I'm missing something


> One thing though is that I don't quite understand how it would work in the context of a real git repo.

Just to be clear, `jj` stores all of its stuff in a real git repo. I know you probably meant "using git instead of jj" but I wanted to point that out because it means that you can just go look at what it does. I will say that sometimes that can be confusing, and I'd be very careful running git commands that modify history inside that directory.

So for example, here's a simple mega merge:

     jj log
    @        oyktpwwq steve@steveklabnik.com 2025-02-12 13:25:41 79d7cf16
    ├─┬─┬─╮  (empty) (no description set)
    │ │ │ ○  qvqxlymp steve@steveklabnik.com 2025-02-12 13:25:34 9403fc75
    │ │ ├─╯  (empty) C
    │ │ ○  wrqmrkot steve@steveklabnik.com 2025-02-12 13:25:32 2df38e4e
    │ ├─╯  (empty) B
    │ ○  oluunuku steve@steveklabnik.com 2025-02-12 13:25:29 19d713aa
    ├─╯  (empty) A
    ○  vukunsxq steve@steveklabnik.com 2025-02-12 13:25:25 main git_head() d29e7411
    │  (empty) (no description set)
    ◆  zzzzzzzz root() 00000000
the first commit after the root is bookmarked as `main`, our three changes are on top of it, with a mega merge.

I've used a colocated repo, so the `.git` dir is at the top level, so we can just run `git log`:

     git log --graph --all
    *---.   commit 79d7cf16869f0f293b18ff4fa339d2d053b537c0 (refs/jj/keep/79d7cf16869f0f293b18ff4fa339d2d053b537c0)
    |\ \ \  Merge: d29e741 19d713a 2df38e4 9403fc7
    | | | | Author: Steve Klabnik <steve@steveklabnik.com>
    | | | | Date:   Wed Feb 12 13:25:41 2025 -0600
    | | | |
    | | | * commit 9403fc75d2ec85491d990c7322b0f5f8f500fa78 (refs/jj/keep/9403fc75d2ec85491d990c7322b0f5f8f500fa78)
    | | |/  Author: Steve Klabnik <steve@steveklabnik.com>
    | | |   Date:   Wed Feb 12 13:25:34 2025 -0600
    | | |
    | | |       C
    | | |
    | | * commit 2df38e4eccbd31ef70a810dd86c637cc2110912c (refs/jj/keep/2df38e4eccbd31ef70a810dd86c637cc2110912c)
    | |/  Author: Steve Klabnik <steve@steveklabnik.com>
    | |   Date:   Wed Feb 12 13:25:32 2025 -0600
    | |
    | |       B
    | |
    | * commit 19d713aab65d0e572994634b2487ce7637d6752a (refs/jj/keep/19d713aab65d0e572994634b2487ce7637d6752a)
    |/  Author: Steve Klabnik <steve@steveklabnik.com>
    |   Date:   Wed Feb 12 13:25:29 2025 -0600
    |
    |       A
    |
    * commit d29e7411f098bba0120cfd5b819b732dabcb6f73 (HEAD, refs/jj/keep/d29e7411f098bba0120cfd5b819b732dabcb6f73)
      Author: Steve Klabnik <steve@steveklabnik.com>
      Date:   Wed Feb 12 13:25:25 2025 -0600
So this is the initial state.

Let's say that we pull down our remote, and main has changed, as you've said. There is a new commit on top of it.

We can simulate this in jj. (q is valid because we have so few changes there's no others that start with q yet)

     jj new v --no-edit -m "changes from upstream"
    Created new commit trzwxsrr c8318f5f (empty) changes from upstream
    
     jj bookmark create -r t main@origin
    Created 1 bookmarks pointing to trzwxsrr c8318f5f main@origin | (empty) changes from upstream
here's our log in `jj`:

     jj log
    @        oyktpwwq steve@steveklabnik.com 2025-02-12 13:25:41 79d7cf16
    ├─┬─┬─╮  (empty) (no description set)
    │ │ │ ○  qvqxlymp steve@steveklabnik.com 2025-02-12 13:25:34 9403fc75
    │ │ ├─╯  (empty) C
    │ │ ○  wrqmrkot steve@steveklabnik.com 2025-02-12 13:25:32 2df38e4e
    │ ├─╯  (empty) B
    │ ○  oluunuku steve@steveklabnik.com 2025-02-12 13:25:29 19d713aa
    ├─╯  (empty) A
    │ ○  trzwxsrr steve@steveklabnik.com 2025-02-12 13:27:16 main@origin c8318f5f
    ├─╯  (empty) changes from upstream
    ○  vukunsxq steve@steveklabnik.com 2025-02-12 13:25:25 main git_head() d29e7411
    │  (empty) (no description set)
    ◆  zzzzzzzz root() 00000000
and in `git`:

     git log --graph --all
    * commit c8318f5fd641a9b271b67e90e7ca1c465b1a92da (refs/jj/keep/c8318f5fd641a9b271b67e90e7ca1c465b1a92da, main@origin)
    | Author: Steve Klabnik <steve@steveklabnik.com>
    | Date:   Wed Feb 12 13:27:16 2025 -0600
    |
    |     changes from upstream
    |
    | *-.   commit 79d7cf16869f0f293b18ff4fa339d2d053b537c0 (refs/jj/keep/79d7cf16869f0f293b18ff4fa339d2d053b537c0)
    |/|\ \  Merge: d29e741 19d713a 2df38e4 9403fc7
    | | | | Author: Steve Klabnik <steve@steveklabnik.com>
    | | | | Date:   Wed Feb 12 13:25:41 2025 -0600
    | | | |
    | | | * commit 9403fc75d2ec85491d990c7322b0f5f8f500fa78 (refs/jj/keep/9403fc75d2ec85491d990c7322b0f5f8f500fa78)
    | | |/  Author: Steve Klabnik <steve@steveklabnik.com>
    | | |   Date:   Wed Feb 12 13:25:34 2025 -0600
    | | |
    | | |       C
    | | |
    | | * commit 2df38e4eccbd31ef70a810dd86c637cc2110912c (refs/jj/keep/2df38e4eccbd31ef70a810dd86c637cc2110912c)
    | |/  Author: Steve Klabnik <steve@steveklabnik.com>
    | |   Date:   Wed Feb 12 13:25:32 2025 -0600
    | |
    | |       B
    | |
    | * commit 19d713aab65d0e572994634b2487ce7637d6752a (refs/jj/keep/19d713aab65d0e572994634b2487ce7637d6752a)
    |/  Author: Steve Klabnik <steve@steveklabnik.com>
    |   Date:   Wed Feb 12 13:25:29 2025 -0600
    |
    |       A
    |
    * commit d29e7411f098bba0120cfd5b819b732dabcb6f73 (HEAD, refs/jj/keep/d29e7411f098bba0120cfd5b819b732dabcb6f73, main)
      Author: Steve Klabnik <steve@steveklabnik.com>
      Date:   Wed Feb 12 13:25:25 2025 -0600
So now we get to the issue: git would want us to rebase every one of these branches individually. When we rebase A (19d713aab65d0e572994634b2487ce7637d6752a) on top of main@origin (c8318f5fd641a9b271b67e90e7ca1c465b1a92da), well: (don't do this in a real repo, since this is an example I'm okay with trashing things, I even made a copy of the repo before doing this)

     git checkout 19d713aab65d0e572994634b2487ce7637d6752a
    Previous HEAD position was d29e741
    HEAD is now at 19d713a A

     git rebase main@origin

     git log --all --graph
    * commit f397936ac0d4510682e68ab470eb81863a5c2a73 (HEAD)
    | Author: Steve Klabnik <steve@steveklabnik.com>
    | Date:   Wed Feb 12 13:25:29 2025 -0600
    |
    |     A
    |
    * commit c8318f5fd641a9b271b67e90e7ca1c465b1a92da (refs/jj/keep/c8318f5fd641a9b271b67e90e7ca1c465b1a92da, main@origin)
    | Author: Steve Klabnik <steve@steveklabnik.com>
    | Date:   Wed Feb 12 13:27:16 2025 -0600
    |
    |     changes from upstream
    |
    | *-.   commit 79d7cf16869f0f293b18ff4fa339d2d053b537c0 (refs/jj/keep/79d7cf16869f0f293b18ff4fa339d2d053b537c0)
    |/|\ \  Merge: d29e741 19d713a 2df38e4 9403fc7
    | | | | Author: Steve Klabnik <steve@steveklabnik.com>
    | | | | Date:   Wed Feb 12 13:25:41 2025 -0600
    | | | |
    | | | * commit 9403fc75d2ec85491d990c7322b0f5f8f500fa78 (refs/jj/keep/9403fc75d2ec85491d990c7322b0f5f8f500fa78)
    | | |/  Author: Steve Klabnik <steve@steveklabnik.com>
    | | |   Date:   Wed Feb 12 13:25:34 2025 -0600
    | | |
    | | |       C
    | | |
    | | * commit 2df38e4eccbd31ef70a810dd86c637cc2110912c (refs/jj/keep/2df38e4eccbd31ef70a810dd86c637cc2110912c)
    | |/  Author: Steve Klabnik <steve@steveklabnik.com>
    | |   Date:   Wed Feb 12 13:25:32 2025 -0600
    | |
    | |       B
    | |
    | * commit 19d713aab65d0e572994634b2487ce7637d6752a (refs/jj/keep/19d713aab65d0e572994634b2487ce7637d6752a)
    |/  Author: Steve Klabnik <steve@steveklabnik.com>
    |   Date:   Wed Feb 12 13:25:29 2025 -0600
    |
    |       A
    |
    * commit d29e7411f098bba0120cfd5b819b732dabcb6f73 (refs/jj/keep/d29e7411f098bba0120cfd5b819b732dabcb6f73, main)
      Author: Steve Klabnik <steve@steveklabnik.com>
      Date:   Wed Feb 12 13:25:25 2025 -0600
    
We only get one branch. So what we'd have to do is go back and fix up every single branch here, including our merge. And so yeah, you can do it, but it's a giant pain in the butt. And for the children, you really need --onto, so you'd end up doing something like

    $ git checkout 2df38e4eccbd31ef70a810dd86c637cc2110912c
    $ git rebase HEAD --onto f397936ac
    $ git checkout 9403fc75d2ec85491d990c7322b0f5f8f500fa78
    $ git rebase HEAD --onto <new head of branch the first rebase committed>
for every branch. HOWEVER, git has introduced --update-refs, which can automate this. But it's from 2022, and my Ubuntu is a bit old, and so I cannot actually try it out.

That allll being said, I also don't know how well --update-refs does with the mega merge commit itself.

> this seems like a lot of boilerplate to always recreate my megamerge setup so I think I'm missing something

I mean, the entire thesis here is that stuff is easier in jj than it is in git: it doesn't mean you're missing something it means that git can be a bit clunky sometimes.


> So now we get to the issue: git would want us to rebase every one of these branches individually.

> [..]

> We only get one branch. So what we'd have to do is go back and fix up every single branch here, including our merge.

Not really, sounds close to git's --rebase-merges (formerly --preserve-merges):

  git rebase --onto main@origin main 79d7cf16869f0f293b18ff4fa339d2d053b537c0 --rebase-merges
I'm guessing putting "--update-refs" on top of it would give you exactly what you want. I also have a version without it though.


Ah nice, thank you!


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

Search: