From f5a82e8d2184efb0e5fa02878bfe868717ae8ede Mon Sep 17 00:00:00 2001 From: Fabien Freling Date: Tue, 26 Nov 2024 14:38:41 +0100 Subject: [PATCH] add jujutsu article --- Tuprules.tup | 8 +++++ articles/jujutsu/Tupfile | 6 ++++ articles/jujutsu/index.md | 40 ++++++++++++++++++++++++ articles/jujutsu/jj_revision.drawio.png | Bin 0 -> 7202 bytes articles/jujutsu/slides.md | 23 ++++++++++++++ articles/web_stack.md | 1 + flake.nix | 2 ++ 7 files changed, 80 insertions(+) create mode 100644 articles/jujutsu/Tupfile create mode 100644 articles/jujutsu/index.md create mode 100644 articles/jujutsu/jj_revision.drawio.png create mode 100644 articles/jujutsu/slides.md diff --git a/Tuprules.tup b/Tuprules.tup index 3712e6e..a1c3ed5 100644 --- a/Tuprules.tup +++ b/Tuprules.tup @@ -24,3 +24,11 @@ HTML_TEMPLATE = main.html JPG_OPT = -quality 80 -strip -interlace Plane !blur_mini = |> ^ %f -> blur mini^ convert %f -resize 400x400 -blur 0x8 $(JPG_OPT) %o |> blur_mini.jpg !thumbnail = |> ^ %f -> thumbnail^ convert %f -resize 200x200 $(JPG_OPT) %o |> + +# +# Slides +# +MARP = npx @marp-team/marp-cli@latest +MARP_OPTS = --allow-local-files --bespoke.progress +!marp_pdf = |> $(MARP) $(MARP_OPTS) %f --pdf --output %o |> %B.pdf +!marp_html = |> $(MARP) $(MARP_OPTS) %f --html --output %o |> %B.html diff --git a/articles/jujutsu/Tupfile b/articles/jujutsu/Tupfile new file mode 100644 index 0000000..df556c8 --- /dev/null +++ b/articles/jujutsu/Tupfile @@ -0,0 +1,6 @@ +include_rules +HTML_TEMPLATE = article.html + +: slides.md |> !marp_pdf |> jujutsu_slides.pdf ./ +: index.md | ./ |> !html |> + diff --git a/articles/jujutsu/index.md b/articles/jujutsu/index.md new file mode 100644 index 0000000..1059614 --- /dev/null +++ b/articles/jujutsu/index.md @@ -0,0 +1,40 @@ +--- +title: "Lightning talk: Jujutsu" +date: 2024-11-26 +--- + +_This article is also available as a lightning talk: [pdf](./jujutsu_slides.pdf)_ + +## What is it? + +[Jujutsu](https://github.com/martinvonz/jj) is a new version control software +(VCS), like git, mercurial, etc. Git is the actual gold standard for VCS, even if its +UX could be better. There is a whole ecosystem around git that makes switching +to similar projects (eg. mercurial) a daunting task. How does jujutsu plans on +making us switch? + +Jujutsu separates the frontend (what the user interacts with) and the +backend (how the information is stored). And the main backend is actually git +repositories. There is a native backend being developed but it's not ready for +prime time. Sharing the same backend as the most popular VCS, Jujutsu aims to +improve on the frontend. + +## How does it compare? + +### No branch, only revisions + +Jujutsu understand git commits, but operates at a higher level with revisions. +Revisions wrap commits, however as you move revisions around (edit with changes, +or rebase), they keep their id. Only their underlying commit id changes. + +With revision ids being stable, you don't need branches to start working: create +a new revision, and start working. You will need to create a branch (or bookmark +in jujutsu world) to push your changes, but it can be done at the end. + +There is no special mode like git's "Detached HEAD", you are always on a revision. You can jump around + +## VCS landscape +> I was part of the team at Meta that built Sapling for many years. I’m no +> longer at Meta and I use jj full time. +> +> _[Discussion on Lobste.rs](https://lobste.rs/s/rojoz1/jujutsu_jj_git_compatible_vcs#c_foqya4)_ diff --git a/articles/jujutsu/jj_revision.drawio.png b/articles/jujutsu/jj_revision.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..66d715137332447f6bcf43b415ae00ad04427499 GIT binary patch literal 7202 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 +section::after { + content: attr(data-marpit-pagination) '/' attr(data-marpit-pagination-total); +} + + + + + +# Jujutsu + +Life after Git + +--- diff --git a/articles/web_stack.md b/articles/web_stack.md index 1ffc6d8..bface29 100644 --- a/articles/web_stack.md +++ b/articles/web_stack.md @@ -1,6 +1,7 @@ --- title: Web stack date: 2019-06-26 +update: 2024-11-26 --- Previous stacks diff --git a/flake.nix b/flake.nix index e0c7923..df507e3 100644 --- a/flake.nix +++ b/flake.nix @@ -7,10 +7,12 @@ devShell.x86_64-linux = with pkgs; mkShell { nativeBuildInputs = [ + graphviz-nox imagemagick just libavif libjxl + nodejs nushell pandoc tup