Sure, Github wins on the UI. Hands down. But, despite my initial annoyance with Gerrit when I first started using it almost a year ago, I am now a convert. Fully. Let me tell you why.
Note: This is an opinionated (on purpose) piece. I assume your preferences are like mine on certain ideas, such as:
- Fast-forward submits to the target branch are better than allowing merge commits to the target branch. The reason I personally prefer this is that, even if a non-conflicting merge to the target branch is possible, the fact that the review/pull request is not up to date with the latest on the target branch means feature branch test suite runs in the CI pipeline reporting on the review/PR may not be accurate. Another minor point is that forced merge commits are annoying as fuck (opinion) and clutter up Git log histories unnecessarily and I prefer clean histories.
- Atomic/related changes all in one commit is something worth striving for. Having your dev
Similar to ansible
command but allows you to use any command that will work in your shell. Not tied to specific
configuration management tooling, just SSH and your default shell on remote systems. Just works. I <3 it :)
Runs commands across potentially many machines. Allows you to organize your servers/VMs/instances into groups very easily.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Put in your ~/.ssh/config | |
### Problem | |
# | |
# You are on a public WiFi network that blocks SSH ports but you don't want to switch | |
# to pushing your Github changes to GH remotes via HTTPS nor do you want to change the | |
# remote hostname in all your repos. | |
Host github.com | |
Hostname ssh.github.com |
- the default
direnv
Nix integration from projects loads a Nix shell every new terminal or every timeshell.nix
and/ordefault.nix
changes. On larger projects with a lot of Nix shell dependencies, that can cause the terminal to take more than 6 seconds to load, which significantly degrades the developer experience (DX). - when a developer garbage collects in their Nix store, often the Nix shell dependencies are deleted also which causes a slow start the next time the project’s Nix shell is requested, also degrading developer experience (DX).
- on first Nix shell load, the Nix shell is evaluated fully such that direnv dumps the environment from the spawn Nix shell process
- CT: Category Theory
- FP: Functional Programming (typically meaning more pure functional programming)
- TFP: Total Functional Programming
- TDD: Type Driven Development (e.g. via Idris or Agda)
- TT: Type Theory
- PLT: Programming Language Theory
Git has different levels of configuration that apply to different /”scopes”/:
- system (almost never needed; not covered here)
- global (which is /”global for a user”/ scoped)
- local (which is specific to one local clone)
- worktree (which only applies to the current worktree; only relevant if you work with
worktree
s) - file (not covered here but you can set a git configuration option, when relevant at the file level, to one file)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
main() { | |
local -ri mar_end=1583042400 | |
local -ri today="$(date +"%s")" | |
local -r dow="$(date -u +"%a")" | |
local -r time="$(date -u +"%T")" | |
local -ri secs=86400 | |
local -ri days_since="$(( ((${today} - ${mar_end}) / ${secs}) + 1 ))" |
NewerOlder