I think what people usually mean is "scary" or "it's easy to mess up". Git is very easy to use until you mess up, then it can become complicated, and certain actions may have devastating consequences.
Two examples from recent memory:
Someone merged the develop branch into their branch, then changed their mind and reverted the merge commit specifically (i.e. reversing all the incoming changes), then somehow merged all of this into the develop branch, undoing weeks of work without noticing.
I had to go in and revert the revert to undo the mistake. Yes they messed up, but these things happen with enough people and time.
Another very interesting issue that happened to a less technical person on the team was that their git UI somehow opened the terminal in the wrong folder. They then tried to run some command which made git suggest to run 'git init', creating another git repo in that wrong location.
Fast forward some days and we had an issue where people had to clean their repos, so I was in a call with the person helping them run the clean command. The UI opened the wrong location again, I helped them put in the command and it started cleaning. The problem was that this git repo was essentially at the top level on their disk, and since was a fresh repo every single file was considered a new file so it tried to delete EVERYTHING on their disk. This was of course mostly my fault for not running git status before the clean command, but this potential scenario was definitely not on my mind.
The reflog doesn't capture everything. jj's oplog does.
An example of something that the reflog isn't going to capture is a git reset --hard losing your unstaged changes, whereas the equivalent flow and commands in jj would allow you to get those contents back.
The thing to keep in mind is that Git doesn't version the file system, it versions the index. This is because a file system guy like Torvalds knows that the file system is a shared resource and no program should think it can control its state. Therefore a Git repository doesn't consists out of all the files below a directory, it consists out of everything in the index.
Git does version everything that is in the repository and all these states occur in the reflog.
> The thing to keep in mind is that Git doesn't version the file system, it versions the index.
Yes. I think that this difference is what introduces a lot of friction, both in the model, and how people use it. The divergence between the files that exist on disk inside your working copy and what's actually tracked means lots of opportunities for friction that go away once you decide that it should. That doesn't mean things are perfect, for example, by default jj only snapshots the filesystem when you run a `jj` command, so you can still lose changes from in between those, you need to enable Watchman to get truly full logging here.
> all these states occur in the reflog.
Well, let's go back to the documentation for reflog:
> Reference logs, or "reflogs", record when the tips of branches and other references were updated in the local repository.
It only tracks changes to refs. That is, the states that refs have been in. So, one big example is detatched HEADs: any changes you make to those, which still are contents of the repository, are not tracked in the reflog.
Even for refs, there's differences: the reflog says "ref was in state x and changed to state y" without any more details. jj's oplog keeps track of not only the state change, but the reason why: "rebased commit <sha> with these args: jj rebase -r <sha> -d trunk"
The reflog only tracks individual refs. Say we rebase multiple commits. The reflog still just says "the head of this branch was in state x and changed to state y" but the oplog says "a rebase happened, it affected all of these commits refs in these ways," that is, it's just inherently more rich in what it tracks, and does it across all relative commits, not only the refs.
This doesn't mean the reflog is bad! It's just a very specific thing. Git could have an operation log too, it's just a different feature.
> So, one big example is detatched HEADs: any changes you make to those, which still are contents of the repository, are not tracked in the reflog.
$ git checkout HEAD
$ git commit --allow-empty -m "_"
$ git checkout master
$ git reflog
a91 (HEAD -> master, origin/master, origin/HEAD) HEAD@{0}: checkout: moving from b94 to master
b94 HEAD@{1}: commit: _
28d (origin/feature, feature) HEAD@{2}: checkout: moving from feature to @
> Even for refs, there's differences: the reflog says "ref was in state x and changed to state y" without any more details. jj's oplog keeps track of not only the state change, but the reason why: "rebased commit <sha> with these args: jj rebase -r <sha> -d trunk"
> The reflog only tracks individual refs. Say we rebase multiple commits. The reflog still just says "the head of this branch was in state x and changed to state y" but the oplog says "a rebase happened, it affected all of these commits refs in these ways," that is, it's just inherently more rich in what it tracks, and does it across all relative commits, not only the refs.
68e HEAD@{15}: rebase (finish): returning to refs/heads/feature
68e HEAD@{16}: rebase (pick): message #6
7ff HEAD@{17}: rebase (pick): message #5
797 HEAD@{18}: rebase (pick): message #4
776 HEAD@{19}: rebase (pick): message #3
c7d HEAD@{20}: rebase (pick): message #2
f10 HEAD@{21}: rebase (pick): message #1
c0d HEAD@{22}: rebase (start): checkout @~6
a7c HEAD@{100}: rebase (reword): message ...
3b1 HEAD@{229}: rebase (reset): '3b1' message ...
4a4 HEAD@{270}: rebase (continue): message ...
One little benefit of the op log is that you can use a single `jj undo` to undo all the rebased branches/bookmarks in one go. If you have rebased many branches with `git rebase --update-refs`, you need to reset each of the branches separately AFAIK.
--update-refs, --no-update-refs
Automatically force-update any branches that point to commits that
are being rebased. Any branches that are checked out in a worktree
are not updated in this way.
If the configuration variable rebase.updateRefs is set, then this
option can be used to override and disable this setting.
Are you saying that that text implies that the you can undo the rebase with a single command or that all the reflogs get updated atomically? Or how is it related to the comment you replied to?
Oops. No the text implies that I can't read and answered to a claim which you didn't state, namely that --update-refs can only update specific refs. (This was given by another comment.)
Yes, this is something, that JJ provides and Git does not.
Which, the stuff you said earlier is in the reflog?
I think Git will just gain a oplog. You just need to append a commit hash to a list before each command and implement undo as remove item and checkout. The hardest thing will be race conditions, but Git already knows how to be a database.
That article has no real arguments for the bias. And if you are trying to make a point, at least to to cite a somewhat neutral source, Elliott Abrams is very pro-Israel.
You could also argue that for such as small country Israel has managed disproportionate amounts of suffering and should be treated thereafter. I'm so sick of people taking the Israeli side as if they are some innocent nation being harassed by Hamas. They are ruthlessly killing Palestinians and the world is mostly acting as if this is a proper response to a single incident killing just a fraction of people.
What Hamas did on the 7th of October 2023 was terrible, what Israel has done since then is way way way way worse, not even comparable.
And going back in history it looks the same.
AI and HRW is taking a stance against these terrible crimes, while the rest of the world is cheering on.
> What Hamas did on the 7th of October 2023 was terrible, what Israel has done since then is way way way way worse, not even comparable.
Legally, Israel would have had the right to wipe Palestine off the map as a response to this factual declaration of war until Hamas declares surrender.
Same story for me at a game studio bought by Microsoft. It was simply not worth the hassle.
As an employee I still had to sit through the same customer support as anyone else, talking to some person at an Indian call center with a bad line. After some failed attempts I just gave up and lived with my misspelled address.
My spouse is principal architect for a platform made by a large cloud vendor.
It takes an Act of Congress, a Papal Conclave who produces white smoke on the first vote, Divine Intervention, and Interdiction by a Vice President, all offered in triplicate upon the altar of subpar IT support organizations, to get a ticket closed -with- a resolution in less than a year. If it’s not something they already have a script for it’s almost certainly impossible as far as IT support is concerned.
The company makes billions of dollars a year, employs tens of thousands of people, and they still can’t craft a competent and empowered IT support organization. Even if just for their own developers and technical experts.
Yeah, this has always bothered me. I don't really know what the issue is. One possibility is that IT is a "cost center" and so by making it cost as little as possible, you are doing a good job of running the company.
I look at it more like a "productivity multiplier", where spending money wisely can make other departments more cost efficient beyond the cost you put into IT. I guess they don't teach that in business school, or everyone is already as productive as they can possibly be. Somehow I doubt it, though.
I hate standups, but I also hate no standups since most people are unable to grab people and sync when needed.
Currently my team has two morning meetings, first the forced full team one which is 100% useless since it's just status reporting and most people do not care what most people do.
Then after that we have a sync between devs (we are 6 devs in my team). That's where useful things happen, we allow it to be a bit more than a standup, so we discuss issues, solutions etc and make sure backend/frontend is aligned etc. Anybody is free to leave if the topic doesn't concern them and this meeting usually runs 15-20min max, compared to the big standup that can run for 40min+ (yeah...).
A tech sync that is more than a standup, to allow for discussions, is the most useful way I know to align devs and make sure we are building things in a good way. It's something I usually advocate for, not because it's ideal, but because people are bad at syncing/discussing spontaneously thoughout the day.
First thought when reading the title was that it will look very fragile and clumsy when walking (even real birds do) and that was confirmed by the first video.
What's the purpose of actually mimicing bird legs and feet? Why not use something more simple like wheels on a board that has a spring for example?
I expected the article to justify why, but to me it seems like the big thing was the jumping itself, which does not require complex bird anatomy necessarily.
There's probably a good reason that I missed, but this feels like a too direct translation of the bird feature, unless the purpose is specifically to make it look and move like a real bird.
> the big thing was the jumping itself, which does not require complex bird anatomy necessarily
No, this is exactly the opposite. The jumping requires exactly this specific anatomy for so many reasons. It stores energy in the joints, it has a specific balance, the jumping works at multiple angles, etc, etc. You can’t do better than that for this specific purpose.
comparing to wheel size. one can use bigger light wheels. that would make landing on short runways possible. besides, wheeling is much easier than walking. two wheels balancing and rolling around is not a problem today. but.. without legs it's just an common airplane, nothing to talk about. the best of both? put small motorized wheels instead of flat platforms for feet.
Avoiding cheap surveillance technologies seems like a big deal. Although I assume once the government works out what you can do with it, it’ll become illegal pretty quickly. I assume this research will attract DOD grant funding pretty quickly. Students have to eat somehow.
- good-enough understanding of the avian brain connectome & operation, such that all you need is a bunch of fine wires stuck in it, and a small CPU sending commands (local and remote operation, etc.)
It’s going to get interesting when the conspiracy theory becomes reality. Imagine the future historians browsing the Reddit archives going like, ”they knew!!“
What conspiracy? CIA had spy pigeons among other animals half a century ago, which is public info by now.[1]
They are very proud of it too.
> While many of the animal programs studied by CIA were never deployed operationally—or failed for a variety of technical, logistical, or behavioral reasons—collectively they demonstrate the incredible innovation and creative thinking that has come to characterize everything that our Directorate of Science and Technology does.
Every good conspiracy theory starts with a truth, I guess.
I had no idea about the CIA thing. I just always assumed the "birds aren't real" meme to be a way of showing how ridiculous the police state is going to become in the next decade or so as surveillance gets more and more weaponized against the people it was supposed to protect.
More likely that sensible mainstream journalists will laugh at people under Govt surveillance because they sound like the reddit conspiracy nuts from their youth...
I agree that making an absolute statement like that is not great. But surely, if you understand the concept, you also know that it's way too common for extroverts having zero understanding that some people need to be alone to recharge. They'll call you boring when you don't want to go out after being at the office for 8 hours already, for example. "Come on, it will be so much fun! What will you do when you get home? Play games lol? Come on get out in the world and meet some people!!"
It's also very common for extroverts to assume that just because you need to recharge by not being with people that introverts don't like being with people in the first place.
Social energy for me is a bit like physical energy. I love working out, but then I get tired and need to rest. In this analogy the extroverts somehow gets more energy while working out. That part is very hard for me to understand.
The pandemic was a total eye opener for me. I always thought that (ever since I started working) I didn't like to go to after works, nor parties in the weekend. What I realized was that I really love those things, but that my social battery drains completely at the office so I needed the evenings and most of the weekend to keep running. Hybrid work has complete changed my ability to socialize outside work.
I shared your opinion until I attended my first funeral as an adult. They are very important for the grieving process, at least to me.
That doesn't mean much money needs to be spent, I've only been to scaled down funerals where there's a short ceremony and a meal afterwards.
Eh. For children of less than stellar parents, a funeral is:
- A bad person gets celebrated in a way that is not aligned to your understanding
- A bunch of people who don't know about the less than stellar bits offering what feels like performative grief
- Others who enabled the less than stellar bits angry their applecart has been upset, looking to lash out at a scapegoat.
Obviously not everyone has this negative experience, but narcissism is in about 6.2-7.7% of the population; other "dark traits" are also around in a long tail. So it's not unreasonable to expect around 12-15%? of people risk a potential increase to trauma at an already complex time of their lives.
In jazz it's more common to see multiple recordings of the same song by the same artist. Bill Evans recordings of Autumn Leaves opened up my mind for exploring this.
Two examples from recent memory:
Someone merged the develop branch into their branch, then changed their mind and reverted the merge commit specifically (i.e. reversing all the incoming changes), then somehow merged all of this into the develop branch, undoing weeks of work without noticing. I had to go in and revert the revert to undo the mistake. Yes they messed up, but these things happen with enough people and time.
Another very interesting issue that happened to a less technical person on the team was that their git UI somehow opened the terminal in the wrong folder. They then tried to run some command which made git suggest to run 'git init', creating another git repo in that wrong location. Fast forward some days and we had an issue where people had to clean their repos, so I was in a call with the person helping them run the clean command. The UI opened the wrong location again, I helped them put in the command and it started cleaning. The problem was that this git repo was essentially at the top level on their disk, and since was a fresh repo every single file was considered a new file so it tried to delete EVERYTHING on their disk. This was of course mostly my fault for not running git status before the clean command, but this potential scenario was definitely not on my mind.