mirror of
https://github.com/jbranchaud/til
synced 2026-01-21 07:58:02 +00:00
Compare commits
7 Commits
c094019937
...
7cc6b648bd
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7cc6b648bd | ||
|
|
eb3369d296 | ||
|
|
6f47e2f057 | ||
|
|
409201611f | ||
|
|
77cc07a908 | ||
|
|
5615da920f | ||
|
|
c60c63f554 |
10
README.md
10
README.md
@@ -10,7 +10,7 @@ pairing with smart people at Hashrocket.
|
|||||||
|
|
||||||
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
|
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
|
||||||
|
|
||||||
_1585 TILs and counting..._
|
_1589 TILs and counting..._
|
||||||
|
|
||||||
See some of the other learning resources I work on:
|
See some of the other learning resources I work on:
|
||||||
- [Ruby Operator Lookup](https://www.visualmode.dev/ruby-operators)
|
- [Ruby Operator Lookup](https://www.visualmode.dev/ruby-operators)
|
||||||
@@ -195,7 +195,7 @@ See some of the other learning resources I work on:
|
|||||||
- [Aliasing An Ansible Host](devops/aliasing-an-ansible-host.md)
|
- [Aliasing An Ansible Host](devops/aliasing-an-ansible-host.md)
|
||||||
- [Allow Cross-Origin Requests To Include Cookies](devops/allow-cross-origin-requests-to-include-cookies.md)
|
- [Allow Cross-Origin Requests To Include Cookies](devops/allow-cross-origin-requests-to-include-cookies.md)
|
||||||
- [Allow HTTPS Through Your UFW Firewall](devops/allow-https-through-your-ufw-firewall.md)
|
- [Allow HTTPS Through Your UFW Firewall](devops/allow-https-through-your-ufw-firewall.md)
|
||||||
- [Check For Cached Site Assocation File For iOS](devops/check-for-cached-site-association-file-for-ios.md)
|
- [Check For Cached Site Association File For iOS](devops/check-for-cached-site-association-file-for-ios.md)
|
||||||
- [Check The Status of All Services](devops/check-the-status-of-all-services.md)
|
- [Check The Status of All Services](devops/check-the-status-of-all-services.md)
|
||||||
- [Check The Syntax Of nginx Files](devops/check-the-syntax-of-nginx-files.md)
|
- [Check The Syntax Of nginx Files](devops/check-the-syntax-of-nginx-files.md)
|
||||||
- [Connect To An RDS PostgreSQL Database](devops/connect-to-an-rds-postgresql-database.md)
|
- [Connect To An RDS PostgreSQL Database](devops/connect-to-an-rds-postgresql-database.md)
|
||||||
@@ -356,6 +356,7 @@ See some of the other learning resources I work on:
|
|||||||
- [Quicker Commit Fixes With The Fixup Flag](git/quicker-commit-fixes-with-the-fixup-flag.md)
|
- [Quicker Commit Fixes With The Fixup Flag](git/quicker-commit-fixes-with-the-fixup-flag.md)
|
||||||
- [Rebase Commits With An Arbitrary Command](git/rebase-commits-with-an-arbitrary-command.md)
|
- [Rebase Commits With An Arbitrary Command](git/rebase-commits-with-an-arbitrary-command.md)
|
||||||
- [Reference A Commit Via Commit Message Pattern Matching](git/reference-a-commit-via-commit-message-pattern-matching.md)
|
- [Reference A Commit Via Commit Message Pattern Matching](git/reference-a-commit-via-commit-message-pattern-matching.md)
|
||||||
|
- [Reference Commits Earlier Than Reflog Remembers](git/reference-commits-earlier-than-reflog-remembers.md)
|
||||||
- [Remove Untracked Files From A Directory](git/remove-untracked-files-from-a-directory.md)
|
- [Remove Untracked Files From A Directory](git/remove-untracked-files-from-a-directory.md)
|
||||||
- [Rename A Remote](git/rename-a-remote.md)
|
- [Rename A Remote](git/rename-a-remote.md)
|
||||||
- [Renaming A Branch](git/renaming-a-branch.md)
|
- [Renaming A Branch](git/renaming-a-branch.md)
|
||||||
@@ -670,6 +671,7 @@ See some of the other learning resources I work on:
|
|||||||
- [Set A Window To Its Default Zoom Level](mac/set-a-window-to-its-default-zoom-level.md)
|
- [Set A Window To Its Default Zoom Level](mac/set-a-window-to-its-default-zoom-level.md)
|
||||||
- [Specify App When Opening From Command Line](mac/specify-app-when-opening-from-command-line.md)
|
- [Specify App When Opening From Command Line](mac/specify-app-when-opening-from-command-line.md)
|
||||||
- [Start Amphetamine Session With AppleScript](mac/start-amphetamine-session-with-applescript.md)
|
- [Start Amphetamine Session With AppleScript](mac/start-amphetamine-session-with-applescript.md)
|
||||||
|
- [Uninstall LogiTech G Hub From Mac](mac/uninstall-logitech-g-hub-from-mac.md)
|
||||||
- [Use A Different Font With iTerm2](mac/use-a-different-font-with-iterm2.md)
|
- [Use A Different Font With iTerm2](mac/use-a-different-font-with-iterm2.md)
|
||||||
- [Use Default Screenshot Shortcuts With CleanShot X](mac/use-default-screenshot-shortcuts-with-cleanshot-x.md)
|
- [Use Default Screenshot Shortcuts With CleanShot X](mac/use-default-screenshot-shortcuts-with-cleanshot-x.md)
|
||||||
- [View All Windows Of The Current App](mac/view-all-windows-of-the-current-app.md)
|
- [View All Windows Of The Current App](mac/view-all-windows-of-the-current-app.md)
|
||||||
@@ -768,7 +770,7 @@ See some of the other learning resources I work on:
|
|||||||
- [Check If Clusters Are Upgrade Compatible](postgres/check-if-clusters-are-upgrade-compatible.md)
|
- [Check If Clusters Are Upgrade Compatible](postgres/check-if-clusters-are-upgrade-compatible.md)
|
||||||
- [Check If The Local Server Is Running](postgres/check-if-the-local-server-is-running.md)
|
- [Check If The Local Server Is Running](postgres/check-if-the-local-server-is-running.md)
|
||||||
- [Check If User Role Exists For Database](postgres/check-if-user-role-exists-for-database.md)
|
- [Check If User Role Exists For Database](postgres/check-if-user-role-exists-for-database.md)
|
||||||
- [Check Table For Any Oprhaned Records](postgres/check-table-for-any-orphaned-records.md)
|
- [Check Table For Any Orphaned Records](postgres/check-table-for-any-orphaned-records.md)
|
||||||
- [Checking Inequality](postgres/checking-inequality.md)
|
- [Checking Inequality](postgres/checking-inequality.md)
|
||||||
- [Checking The Type Of A Value](postgres/checking-the-type-of-a-value.md)
|
- [Checking The Type Of A Value](postgres/checking-the-type-of-a-value.md)
|
||||||
- [Clear The Screen In psql](postgres/clear-the-screen-in-psql.md)
|
- [Clear The Screen In psql](postgres/clear-the-screen-in-psql.md)
|
||||||
@@ -1535,6 +1537,7 @@ See some of the other learning resources I work on:
|
|||||||
- [Get Matching Filenames As Output From Grep](unix/get-matching-filenames-as-output-from-grep.md)
|
- [Get Matching Filenames As Output From Grep](unix/get-matching-filenames-as-output-from-grep.md)
|
||||||
- [Get The SHA256 Hash For A File](unix/get-the-sha256-hash-for-a-file.md)
|
- [Get The SHA256 Hash For A File](unix/get-the-sha256-hash-for-a-file.md)
|
||||||
- [Get The Unix Timestamp](unix/get-the-unix-timestamp.md)
|
- [Get The Unix Timestamp](unix/get-the-unix-timestamp.md)
|
||||||
|
- [Get Word Count For All Files In Git Repo](unix/get-word-count-for-all-files-in-git-repo.md)
|
||||||
- [Global Substitution On The Previous Command](unix/global-substitution-on-the-previous-command.md)
|
- [Global Substitution On The Previous Command](unix/global-substitution-on-the-previous-command.md)
|
||||||
- [Globbing For All Directories In Zsh](unix/globbing-for-all-directories-in-zsh.md)
|
- [Globbing For All Directories In Zsh](unix/globbing-for-all-directories-in-zsh.md)
|
||||||
- [Globbing For Filenames In Zsh](unix/globbing-for-filenames-in-zsh.md)
|
- [Globbing For Filenames In Zsh](unix/globbing-for-filenames-in-zsh.md)
|
||||||
@@ -1553,6 +1556,7 @@ See some of the other learning resources I work on:
|
|||||||
- [Killing A Frozen SSH Session](unix/killing-a-frozen-ssh-session.md)
|
- [Killing A Frozen SSH Session](unix/killing-a-frozen-ssh-session.md)
|
||||||
- [Last Argument Of The Last Command](unix/last-argument-of-the-last-command.md)
|
- [Last Argument Of The Last Command](unix/last-argument-of-the-last-command.md)
|
||||||
- [Less With Style](unix/less-with-style.md)
|
- [Less With Style](unix/less-with-style.md)
|
||||||
|
- [Limit Protocols Used In A cURL Command](unix/limit-protocols-used-in-a-curl-command.md)
|
||||||
- [List All Fonts On Your Machine](unix/list-all-fonts-on-your-machine.md)
|
- [List All Fonts On Your Machine](unix/list-all-fonts-on-your-machine.md)
|
||||||
- [List All The Enabled ZSH Options](unix/list-all-the-enabled-zsh-options.md)
|
- [List All The Enabled ZSH Options](unix/list-all-the-enabled-zsh-options.md)
|
||||||
- [List All Users](unix/list-all-users.md)
|
- [List All Users](unix/list-all-users.md)
|
||||||
|
|||||||
34
git/reference-commits-earlier-than-reflog-remembers.md
Normal file
34
git/reference-commits-earlier-than-reflog-remembers.md
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# Reference Commits Earlier Than Reflog Remembers
|
||||||
|
|
||||||
|
While preparing some stats for a recent blog post on [A Decade of
|
||||||
|
TILs](https://www.visualmode.dev/a-decade-of-tils), I ran into an issue
|
||||||
|
referencing chuncks of time further back than 2020.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
❯ git diff --diff-filter=A --name-only HEAD@{2016-02-06}..HEAD@{2017-02-06} -- "*.md"
|
||||||
|
warning: log for 'HEAD' only goes back to Sun, 20 Dec 2020 00:26:27 -0600
|
||||||
|
warning: log for 'HEAD' only goes back to Sun, 20 Dec 2020 00:26:27 -0600
|
||||||
|
```
|
||||||
|
|
||||||
|
This is because `HEAD@...` is a reference to the `reflog`. The `reflog` is a
|
||||||
|
local-only log of objects and activity in the repository. That date looks
|
||||||
|
suspiciously like the time that I got this specific machine and cloned the
|
||||||
|
repo.
|
||||||
|
|
||||||
|
In order to access this information, I need a different approach of finding
|
||||||
|
references that bound these points in time.
|
||||||
|
|
||||||
|
How about asking `rev-list` for the first commit it can find before the given
|
||||||
|
dates in 2017 and 2016 and then using those.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
❯ git rev-list -1 --before="2017-02-07 00:00" HEAD
|
||||||
|
17db6bc4468616786a8f597a10d252c24183d82e
|
||||||
|
|
||||||
|
❯ git rev-list -1 --before="2016-02-07 00:00" HEAD
|
||||||
|
f1d3d1f796007662ff448d6ba0e3bbf38a2b858d
|
||||||
|
|
||||||
|
❯ git diff --diff-filter=A --name-only f1d3d1f796007662ff448d6ba0e3bbf38a2b858d..17db6bc4468616786a8f597a10d252c24183d82e -- "*.md"
|
||||||
|
|
||||||
|
# git outputs a bunch of files ...
|
||||||
|
```
|
||||||
17
mac/uninstall-logitech-g-hub-from-mac.md
Normal file
17
mac/uninstall-logitech-g-hub-from-mac.md
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Uninstall LogiTech G Hub From Mac
|
||||||
|
|
||||||
|
I rarely uninstall software from my Mac. And unless the software is nice enough
|
||||||
|
to provide a clear 'Uninstall' flow, it is not straightforward how to do it. In
|
||||||
|
fact, it probably varies quite a bit from app to app.
|
||||||
|
|
||||||
|
In the case of LogiTech's G Hub, I was able to find the following instructions
|
||||||
|
for uninstalling it. The thing of note is that the updater app can take an
|
||||||
|
`--uninstall` flag.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo /Applications/lghub.app/Contents/MacOS/lghub_updater.app/Contents/MacOS/lghub_updater --uninstall
|
||||||
|
```
|
||||||
|
|
||||||
|
I still had to remove the app launcher from my `Applications` directory.
|
||||||
|
|
||||||
|
[source](https://www.reddit.com/r/LogitechG/comments/bluth5/comment/lbhctx1/)
|
||||||
32
unix/get-word-count-for-all-files-in-git-repo.md
Normal file
32
unix/get-word-count-for-all-files-in-git-repo.md
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# Get Word Count For All Files In Git Repo
|
||||||
|
|
||||||
|
As part of gathering numbers for [A Decade of TILs](), I wanted to get an word
|
||||||
|
count of all the TIL markdown files I've committed to this project over its 10
|
||||||
|
year history. By using `git ls-files` with a pattern, I can get a list of all
|
||||||
|
file names. Then with `xargs` I can pass that entire list to `wc -w` which
|
||||||
|
gives a word count of each. The final line that `wc -w` outputs is a sum total
|
||||||
|
of all the file word counts. Lastly, piping that through `tail -n1` gives me
|
||||||
|
just that last total count line.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ git ls-files "*/**.md" | xargs wc -w | tail -n1
|
||||||
|
206816 total
|
||||||
|
```
|
||||||
|
|
||||||
|
Since the `tail -n1` obfuscates what the `wc -w` is doing, here is what that
|
||||||
|
looks like before that final pipe.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ git ls-files "*/**.md" | tail -n3 | xargs wc -w
|
||||||
|
115 zsh/add-to-the-path-via-path-array.md
|
||||||
|
190 zsh/link-a-scalar-to-an-array.md
|
||||||
|
214 zsh/use-a-space-to-exclude-command-from-history.md
|
||||||
|
519 total
|
||||||
|
```
|
||||||
|
|
||||||
|
I can even clean up the final output a bit more with `awk`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ git ls-files "*/**.md" | xargs wc -w | tail -n1 | awk '{print $1}'
|
||||||
|
206816
|
||||||
|
```
|
||||||
27
unix/limit-protocols-used-in-a-curl-command.md
Normal file
27
unix/limit-protocols-used-in-a-curl-command.md
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
# Limit Protocols Used In A cURL Command
|
||||||
|
|
||||||
|
I was about to install [`atuin`](https://github.com/atuinsh/atuin). I went to
|
||||||
|
their _Quick Start_ section to grab whatever command I would need to install
|
||||||
|
it. It was a `curl` statement piped to `sh`. The thing that caught my attention
|
||||||
|
though was I `curl` flag that I didn't recognize — `--proto`.
|
||||||
|
|
||||||
|
> Tells curl to limit what protocols it may use for transfers.
|
||||||
|
|
||||||
|
Using `curl --proto '=https' ...` we can enforce that only an `https` URL can
|
||||||
|
be used in this command.
|
||||||
|
|
||||||
|
Here is what happens if I try to run the `atuin`-provided `curl` command after
|
||||||
|
I have downgraded their URL to be `http`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl --proto '=https' --tlsv1.2 -LsSf http://setup.atuin.sh | sh
|
||||||
|
curl: (1) Protocol "http" not supported or disabled in libcurl
|
||||||
|
```
|
||||||
|
|
||||||
|
It doesn't even attempt the request. The protocol is considered unsupported and
|
||||||
|
the command immediately fails.
|
||||||
|
|
||||||
|
In addition to only installing software we trust, we should make sure we are
|
||||||
|
only doing so over a protocol we trust (namely, `https`).
|
||||||
|
|
||||||
|
See `man curl` for more details, including about the modifiers (`=`, `+`, `-`).
|
||||||
Reference in New Issue
Block a user