From bcf8313a4b3b58ffa81c001421a357ed42ca42e3 Mon Sep 17 00:00:00 2001 From: Travis Shears Date: Thu, 5 Jun 2025 16:20:57 +0200 Subject: [PATCH] add the old snippet md files --- old_snippets/How-to-trust-gpg-keys.md | 30 ++++++ old_snippets/auto-find-ssh-keys.en.md | 44 ++++++++ old_snippets/auto-nvm-use.en.md | 19 ++++ .../automatic-tmux-session-names.en.md | 14 +++ old_snippets/awk-last-column.en.md | 34 ++++++ old_snippets/aws-cloud-front-inval.en.md | 15 +++ old_snippets/aws-s3-sync.en.md | 16 +++ old_snippets/bash-extract-file-name.en.md | 38 +++++++ old_snippets/choose-over-awk.en.md | 24 +++++ old_snippets/close-the-garden.en.md | 21 ++++ .../deployment-env-yaml-snippet.en.md | 29 +++++ old_snippets/describe-raku-variable.en.md | 17 +++ .../destructure-array-javascript.en.md | 27 +++++ old_snippets/disable-user.en.md | 14 +++ old_snippets/diy-git-remote-on-nas.en.md | 46 ++++++++ old_snippets/emacs-doom-vim-word.en.md | 22 ++++ old_snippets/emacs-mac-umlauts.en.md | 29 +++++ .../emacs-replace-across-multiple-files.en.md | 67 ++++++++++++ old_snippets/extending-gpg-key.en.md | 42 ++++++++ old_snippets/ffmpeg-screen-casts.en.md | 36 +++++++ old_snippets/file-search-plus-size.en.md | 20 ++++ old_snippets/filtered-git-diff.md | 17 +++ .../find-bugs-source-with-git-bisect.en.md | 11 ++ old_snippets/find-folder.en.md | 17 +++ old_snippets/fix-git-file-mode-changes.en.md | 40 +++++++ old_snippets/git-better-git-add.en.md | 18 ++++ .../git-discard-unstaged-changes.en.md | 16 +++ old_snippets/git-force-push-with-lease.en.md | 26 +++++ old_snippets/git-log-grep.en.md | 16 +++ old_snippets/git-move-branch.en.md | 21 ++++ old_snippets/git-nocommit-merge.en.md | 21 ++++ old_snippets/git-prev-commit-changes.en.md | 14 +++ old_snippets/git-rebase.en.md | 16 +++ old_snippets/git-repo-backup.en.md | 39 +++++++ old_snippets/git-revert-branch.en.md | 16 +++ old_snippets/git-revert.en.md | 16 +++ old_snippets/git-trim.en.md | 18 ++++ old_snippets/git-who-last.en.md | 16 +++ old_snippets/git-zsh-plugin.en.md | 54 ++++++++++ old_snippets/gitlab-runners-config.en.md | 18 ++++ old_snippets/gpg-usb-workflow.md | 24 +++++ old_snippets/gzip-existing-tar.en.md | 41 +++++++ .../imagemagik-png-to-jpg-white-bg.en.md | 41 +++++++ old_snippets/init-yubikey.md | 25 +++++ .../ios-xcode-simulator-dark-mode.en.md | 16 +++ .../jq-command-line-json-processor.en.md | 28 +++++ old_snippets/jsx-comments.en.md | 30 ++++++ old_snippets/k8s-reg-secret.en.md | 31 ++++++ old_snippets/list-tar-contents.md | 23 ++++ .../locally-host-istanbul-js-results.md | 17 +++ old_snippets/lower-case.en.md | 20 ++++ old_snippets/markdown-to-org.md | 18 ++++ old_snippets/mass-mkv-to-mp4-ffmpeg.en.md | 14 +++ .../measuring-node-js-fn-performance.md | 24 +++++ old_snippets/move-file-range.en.md | 16 +++ old_snippets/moving-gpg-keys.en.md | 33 ++++++ old_snippets/npm-i-vs-npm-ci.en.md | 25 +++++ old_snippets/open-notion-links.en.md | 28 +++++ old_snippets/org-roam-capture-templates.md | 34 ++++++ old_snippets/pass-bulk-import.en.md | 18 ++++ old_snippets/pass-copy.en.md | 15 +++ old_snippets/pass-search.en.md | 15 +++ old_snippets/per-company-git-config.en.md | 37 +++++++ old_snippets/percol-to-pick-lines.en.md | 25 +++++ old_snippets/pretty-print-json.en.md | 15 +++ old_snippets/prevent-vim-auto-new-line.en.md | 24 +++++ ...ng-to-remote-branch-with-different-name.md | 17 +++ old_snippets/random-password.en.md | 16 +++ old_snippets/re-export-js-fn.en.md | 31 ++++++ old_snippets/re-export.en.md | 43 ++++++++ old_snippets/recover-deleted-file-git.en.md | 34 ++++++ ...ap-section-sign-to-backslash-mac-osx.en.md | 64 +++++++++++ old_snippets/remove-brew-packages.en.md | 30 ++++++ old_snippets/remove-common-lines.en.md | 55 ++++++++++ .../remove-gps-metadata-from-image.en.md | 17 +++ old_snippets/restart-nginx.en.md | 22 ++++ old_snippets/run-changed-tests.en.md | 10 ++ old_snippets/s3-copy-recursive.en.md | 25 +++++ old_snippets/s3-move-folder.en.md | 19 ++++ old_snippets/scp.en.md | 17 +++ old_snippets/shell-for-loops.en.md | 102 ++++++++++++++++++ old_snippets/short-server-names.en.md | 41 +++++++ old_snippets/silver-searcher.en.md | 15 +++ old_snippets/sort-numerically.en.md | 46 ++++++++ old_snippets/split-files.md | 15 +++ .../strip-audio-from-video-file.en.md | 18 ++++ old_snippets/temp-sqlite-table.en.md | 21 ++++ old_snippets/tmux-new.en.md | 21 ++++ old_snippets/tmux-plus-screen.en.md | 27 +++++ old_snippets/trust-gpg-key.en.md | 16 +++ old_snippets/twtxt-config.en.md | 25 +++++ old_snippets/type-js-file.md | 46 ++++++++ old_snippets/update-local-zef-module.en.md | 26 +++++ old_snippets/update-npm-packages.en.md | 33 ++++++ old_snippets/update-pleroma-server.en.md | 31 ++++++ old_snippets/vim-arglist.en.md | 52 +++++++++ old_snippets/vim-fzf-plugin.en.md | 36 +++++++ old_snippets/vim-jumps-fix.en.md | 21 ++++ old_snippets/vim-open-file-under-cursor.en.md | 29 +++++ old_snippets/vim-placeholders.en.md | 28 +++++ old_snippets/vim-ripgrep-custom.en.md | 29 +++++ old_snippets/vim-spelling.en.md | 31 ++++++ old_snippets/vim-substitute.en.md | 33 ++++++ old_snippets/vim-window-resize.en.md | 19 ++++ old_snippets/vs-code-tasks.en.md | 57 ++++++++++ old_snippets/watch-command.en.md | 44 ++++++++ old_snippets/who-is-using-that-port.en.md | 16 +++ old_snippets/wipe-dynamodb-via-terraform.md | 62 +++++++++++ old_snippets/wipe-git-commit-times.en.md | 22 ++++ old_snippets/wipe-mongo-collection.en.md | 35 ++++++ 110 files changed, 3048 insertions(+) create mode 100644 old_snippets/How-to-trust-gpg-keys.md create mode 100644 old_snippets/auto-find-ssh-keys.en.md create mode 100644 old_snippets/auto-nvm-use.en.md create mode 100644 old_snippets/automatic-tmux-session-names.en.md create mode 100644 old_snippets/awk-last-column.en.md create mode 100644 old_snippets/aws-cloud-front-inval.en.md create mode 100644 old_snippets/aws-s3-sync.en.md create mode 100644 old_snippets/bash-extract-file-name.en.md create mode 100644 old_snippets/choose-over-awk.en.md create mode 100644 old_snippets/close-the-garden.en.md create mode 100644 old_snippets/deployment-env-yaml-snippet.en.md create mode 100644 old_snippets/describe-raku-variable.en.md create mode 100644 old_snippets/destructure-array-javascript.en.md create mode 100644 old_snippets/disable-user.en.md create mode 100644 old_snippets/diy-git-remote-on-nas.en.md create mode 100644 old_snippets/emacs-doom-vim-word.en.md create mode 100644 old_snippets/emacs-mac-umlauts.en.md create mode 100644 old_snippets/emacs-replace-across-multiple-files.en.md create mode 100644 old_snippets/extending-gpg-key.en.md create mode 100644 old_snippets/ffmpeg-screen-casts.en.md create mode 100644 old_snippets/file-search-plus-size.en.md create mode 100644 old_snippets/filtered-git-diff.md create mode 100644 old_snippets/find-bugs-source-with-git-bisect.en.md create mode 100644 old_snippets/find-folder.en.md create mode 100644 old_snippets/fix-git-file-mode-changes.en.md create mode 100644 old_snippets/git-better-git-add.en.md create mode 100644 old_snippets/git-discard-unstaged-changes.en.md create mode 100644 old_snippets/git-force-push-with-lease.en.md create mode 100644 old_snippets/git-log-grep.en.md create mode 100644 old_snippets/git-move-branch.en.md create mode 100644 old_snippets/git-nocommit-merge.en.md create mode 100644 old_snippets/git-prev-commit-changes.en.md create mode 100644 old_snippets/git-rebase.en.md create mode 100644 old_snippets/git-repo-backup.en.md create mode 100644 old_snippets/git-revert-branch.en.md create mode 100644 old_snippets/git-revert.en.md create mode 100644 old_snippets/git-trim.en.md create mode 100644 old_snippets/git-who-last.en.md create mode 100644 old_snippets/git-zsh-plugin.en.md create mode 100644 old_snippets/gitlab-runners-config.en.md create mode 100644 old_snippets/gpg-usb-workflow.md create mode 100644 old_snippets/gzip-existing-tar.en.md create mode 100644 old_snippets/imagemagik-png-to-jpg-white-bg.en.md create mode 100644 old_snippets/init-yubikey.md create mode 100644 old_snippets/ios-xcode-simulator-dark-mode.en.md create mode 100644 old_snippets/jq-command-line-json-processor.en.md create mode 100644 old_snippets/jsx-comments.en.md create mode 100644 old_snippets/k8s-reg-secret.en.md create mode 100644 old_snippets/list-tar-contents.md create mode 100644 old_snippets/locally-host-istanbul-js-results.md create mode 100644 old_snippets/lower-case.en.md create mode 100644 old_snippets/markdown-to-org.md create mode 100644 old_snippets/mass-mkv-to-mp4-ffmpeg.en.md create mode 100644 old_snippets/measuring-node-js-fn-performance.md create mode 100644 old_snippets/move-file-range.en.md create mode 100644 old_snippets/moving-gpg-keys.en.md create mode 100644 old_snippets/npm-i-vs-npm-ci.en.md create mode 100644 old_snippets/open-notion-links.en.md create mode 100644 old_snippets/org-roam-capture-templates.md create mode 100644 old_snippets/pass-bulk-import.en.md create mode 100644 old_snippets/pass-copy.en.md create mode 100644 old_snippets/pass-search.en.md create mode 100644 old_snippets/per-company-git-config.en.md create mode 100644 old_snippets/percol-to-pick-lines.en.md create mode 100644 old_snippets/pretty-print-json.en.md create mode 100644 old_snippets/prevent-vim-auto-new-line.en.md create mode 100644 old_snippets/pushing-to-remote-branch-with-different-name.md create mode 100644 old_snippets/random-password.en.md create mode 100644 old_snippets/re-export-js-fn.en.md create mode 100644 old_snippets/re-export.en.md create mode 100644 old_snippets/recover-deleted-file-git.en.md create mode 100644 old_snippets/remap-section-sign-to-backslash-mac-osx.en.md create mode 100644 old_snippets/remove-brew-packages.en.md create mode 100644 old_snippets/remove-common-lines.en.md create mode 100644 old_snippets/remove-gps-metadata-from-image.en.md create mode 100644 old_snippets/restart-nginx.en.md create mode 100644 old_snippets/run-changed-tests.en.md create mode 100644 old_snippets/s3-copy-recursive.en.md create mode 100644 old_snippets/s3-move-folder.en.md create mode 100644 old_snippets/scp.en.md create mode 100644 old_snippets/shell-for-loops.en.md create mode 100644 old_snippets/short-server-names.en.md create mode 100644 old_snippets/silver-searcher.en.md create mode 100644 old_snippets/sort-numerically.en.md create mode 100644 old_snippets/split-files.md create mode 100644 old_snippets/strip-audio-from-video-file.en.md create mode 100644 old_snippets/temp-sqlite-table.en.md create mode 100644 old_snippets/tmux-new.en.md create mode 100644 old_snippets/tmux-plus-screen.en.md create mode 100644 old_snippets/trust-gpg-key.en.md create mode 100644 old_snippets/twtxt-config.en.md create mode 100644 old_snippets/type-js-file.md create mode 100644 old_snippets/update-local-zef-module.en.md create mode 100644 old_snippets/update-npm-packages.en.md create mode 100644 old_snippets/update-pleroma-server.en.md create mode 100644 old_snippets/vim-arglist.en.md create mode 100644 old_snippets/vim-fzf-plugin.en.md create mode 100644 old_snippets/vim-jumps-fix.en.md create mode 100644 old_snippets/vim-open-file-under-cursor.en.md create mode 100644 old_snippets/vim-placeholders.en.md create mode 100644 old_snippets/vim-ripgrep-custom.en.md create mode 100644 old_snippets/vim-spelling.en.md create mode 100644 old_snippets/vim-substitute.en.md create mode 100644 old_snippets/vim-window-resize.en.md create mode 100644 old_snippets/vs-code-tasks.en.md create mode 100644 old_snippets/watch-command.en.md create mode 100644 old_snippets/who-is-using-that-port.en.md create mode 100644 old_snippets/wipe-dynamodb-via-terraform.md create mode 100644 old_snippets/wipe-git-commit-times.en.md create mode 100644 old_snippets/wipe-mongo-collection.en.md diff --git a/old_snippets/How-to-trust-gpg-keys.md b/old_snippets/How-to-trust-gpg-keys.md new file mode 100644 index 0000000..9eccd5a --- /dev/null +++ b/old_snippets/How-to-trust-gpg-keys.md @@ -0,0 +1,30 @@ +--- +date: 2023-10-27T22:00:00.000Z +title: How to trust gpg keys +draft: false +snippet_types: + - gpg +seo_description: How to trust gpg keys +--- + +After moving some GPG keys to a new computer I kept getting these trust warnings. + +``` +It is NOT certain that the key belongs to the person named +in the user ID.If you * really * know what you are doing, +you may answer the next question with yes. + +Use this key anyway? (y/N) +``` + +To solve this one has to edit the key and set a trust level. + +```javascript +$ gpg--edit - key 't@coolsite.com' +trust +5 +``` + +## Source + +* [yanhan](https://yanhan.github.io/posts/2014-03-04-gpg-how-to-trust-imported-key/) diff --git a/old_snippets/auto-find-ssh-keys.en.md b/old_snippets/auto-find-ssh-keys.en.md new file mode 100644 index 0000000..fb1330a --- /dev/null +++ b/old_snippets/auto-find-ssh-keys.en.md @@ -0,0 +1,44 @@ +--- +title: "auto find ssh keys" +date: 2020-08-12T12:14:15+02:00 +draft: false +snippet_types: +- ssh +--- + +I use to always pass a key when sshing ex: + +```shell +$ ssh -i ~/.ssh/de2 travis@vxxxxxxxxxxxxxxxxxxx.megasrv.de +``` +That can be a bit annoying. I know two fixes: + +# add private key to ssh-agent + +```shell +$ ssh-add ~/.ssh/de2 +``` + +Now when you ssh you need not include the `-i ~/.ssh/de2` because the ssh-agent will find it +automatically. + +*\*note: this resets once you reboot* + +# configure individual host + +You can configure individual hosts to use a spefic private key my editing your `~/.ssh/config`: + +``` +Host de2 + HostName vxxxxxxxxxxxxxxxxxxxx.megasrv.de + User travis + IdentityFile ~/.ssh/de2 +``` + +Now you only need to + +```shell +$ ssh de2 +``` + +source -- https://www.techrepublic.com/article/how-to-use-per-host-ssh-configuration/ diff --git a/old_snippets/auto-nvm-use.en.md b/old_snippets/auto-nvm-use.en.md new file mode 100644 index 0000000..2f26e5b --- /dev/null +++ b/old_snippets/auto-nvm-use.en.md @@ -0,0 +1,19 @@ +--- +title: "auto nvm use" +seo_description: Configuration to automatically run when starting a shell session in a dir with an .nvmrc file +date: 2023-03-13T10:33:12+01:00 +draft: false +snippet_types: +- nvm +--- + +Simply adding: + +``` +[ -f ./.nvmrc ] && nvm use +``` + +to your .bashrc or .zshrc + +Will automatically run the `nvm use` command should you start the shell in a dir with a `.nvmrc` file. + diff --git a/old_snippets/automatic-tmux-session-names.en.md b/old_snippets/automatic-tmux-session-names.en.md new file mode 100644 index 0000000..2e5c5ad --- /dev/null +++ b/old_snippets/automatic-tmux-session-names.en.md @@ -0,0 +1,14 @@ +--- +title: "automatic tmux session names" +date: 2020-07-13T11:38:52+02:00 +draft: false +snippet_types: ["tmux"] +--- + +This month I ditched [XQuartz](https://www.xquartz.org/) and am back to using Tmux. One part I found tedious was manually naming sessions. I wrote this little alias help. When run from outside a tux session to creates a new session named after the current directory. Ex when in `/users/t.shears/dev/cool-app` a session named cool-app is created. + +Excerpt from my `.zshrc` + +```bash +alias tmux_new="tmux new -s \$(pwd | awk -F "/" '{print \$NF}' | sed 's/\./_/g')" +``` \ No newline at end of file diff --git a/old_snippets/awk-last-column.en.md b/old_snippets/awk-last-column.en.md new file mode 100644 index 0000000..5d64ac4 --- /dev/null +++ b/old_snippets/awk-last-column.en.md @@ -0,0 +1,34 @@ +--- +title: "awk last column" +seo_description: "Shell snippet explaining how to extract the last column using awk" +date: 2022-02-13T10:46:08+01:00 +draft: false +snippet_types: +- awk +--- + +My first [awk](https://en.wikipedia.org/wiki/AWK) snippet! Today I needed to get +all the file extensions in directory for a blog post I'm writing. + +I solved it with: + +```shell +$ fd . --type f | awk -F"." '{print $(NF)}' | tr '[:upper:]' '[:lower:]' | sort | uniq | pbcopy +``` + +## Break down + +**fd . --type f**, lists all the files in a directory recursively. + +**awk -F"." '{print $(NF)}'**, the **-F"."** tells awk to split columns on ".". The **'{print $(NF)'}** tells awk to print the last column. +Normally you do something like **'{print $2}'** to print the second column. + +**tr '[:upper:]' '[:lower:]'**, tr is a Unix until to translate characters. In +this case all upper case letters will be translated to lower case. I've created a +[seprate snippet](/snippets/lower-case) for it as well. + +**sort | uniq**, a classic combo sorts the results then gets rid of duplicates. + +**pbcopy**, anther common one for me pipes the result into the clipboard. + +[source](https://linuxhint.com/awk_print_last_column_file/) diff --git a/old_snippets/aws-cloud-front-inval.en.md b/old_snippets/aws-cloud-front-inval.en.md new file mode 100644 index 0000000..68b1078 --- /dev/null +++ b/old_snippets/aws-cloud-front-inval.en.md @@ -0,0 +1,15 @@ +--- +title: "aws cloudfront invalidation sync" +date: 2020-01-11T04:41:11+01:00 +draft: false +snippet_types: ["aws"] +--- + +```shell +$ aws cloudfront create-invalidation --distribution-id E29OAXKYAP0NP8 --paths /work/ +``` +Pairing well with the sync is invalidating the CDN so that the live site is updated immediately with the S3 bucket. Like everything these days, there is a cost involved with this operation so if I'm not in a rush I often avoid it. Also you can reduce cost by using **--paths** only invalidating needed routes. + +inspiration: + +[lustforge](https://lustforge.com/2016/02/27/hosting-hugo-on-aws/) - great blog post diff --git a/old_snippets/aws-s3-sync.en.md b/old_snippets/aws-s3-sync.en.md new file mode 100644 index 0000000..bfa1097 --- /dev/null +++ b/old_snippets/aws-s3-sync.en.md @@ -0,0 +1,16 @@ +--- +title: "aws s3 sync" +date: 2020-01-11T04:43:43+01:00 +draft: false +snippet_types: ["aws", "s3"] +--- + +```shell +$ aws s3 sync --acl public-read --sse AES256 build/ s3://travisshears.com +``` +Having the ability to send a site live with a single command is heaven and not a BASH script with a bunch of moving parts liable to break. This command takes me back to the old days when putting a site live meant an FTP upload command to a server letting Apache take care of the rest. This site, for example, is hosted in an AWS S3 bucket that is connected to AWS CloudFront. + +inspiration: + +[lustforge](https://lustforge.com/2016/02/27/hosting-hugo-on-aws/) - great blog post + diff --git a/old_snippets/bash-extract-file-name.en.md b/old_snippets/bash-extract-file-name.en.md new file mode 100644 index 0000000..e3535a2 --- /dev/null +++ b/old_snippets/bash-extract-file-name.en.md @@ -0,0 +1,38 @@ +--- +title: "bash extract file name" +seo_description: "How to use basename command to extract just file name from full path" +date: 2022-03-17T15:08:43+01:00 +draft: false +snippet_types: +- sh +- bash +--- + +Comparing the following shows how to use basename to extract just the file name from a full path. + +```shell +$ for file in ./content/**/*.md ; do echo $file ; done | head -10 +./content/_index.de.md +./content/_index.en.md +./content/_index.ru.md +./content/blog/_index.de.md +./content/blog/_index.en.md +./content/blog/ahrn-valley/index.en.md +./content/blog/archiving-corona-cal/index.en.md +./content/blog/arco/index.de.md +./content/blog/arco/index.en.md +./content/blog/armycookbot/index.de.md + + +$ for file in ./content/**/*.md ; do file=$(basename $file) && echo $file ; done +_index.de.md +_index.en.md +_index.ru.md +_index.de.md +_index.en.md +index.en.md +index.en.md +index.de.md +index.en.md +index.de.md +``` diff --git a/old_snippets/choose-over-awk.en.md b/old_snippets/choose-over-awk.en.md new file mode 100644 index 0000000..5887942 --- /dev/null +++ b/old_snippets/choose-over-awk.en.md @@ -0,0 +1,24 @@ +--- +title: "choose over awk" +seo_description: Why I use choose instead of awk now days. +date: 2024-03-04T11:52:22+01:00 +draft: false +snippet_types: +- awk +- choose +--- + +Sometimes typing out `awk '{print $1}'` just takes too long. Today I decovered [choose](https://github.com/theryangeary/choose?tab=readme-ov-file). +It makes selecting a field from an output much faster. + +Now instead of: + +```shell +$ gss | rg awk | awk '{ print $2 }' | xargs hx +``` + +I run: + +```shell +$ gss | rg awk | choose 1 | xargs hx +``` diff --git a/old_snippets/close-the-garden.en.md b/old_snippets/close-the-garden.en.md new file mode 100644 index 0000000..22b47eb --- /dev/null +++ b/old_snippets/close-the-garden.en.md @@ -0,0 +1,21 @@ +--- +title: "close the garden" +seo_description: "" +date: 2022-01-24T10:12:03+01:00 +draft: false +snippet_types: +- garden-cli +--- + +Started playing with [garden cli](https://garden.io) today. After playing around +with the local kubernetes deployments I found it annoying it left some system +containers running when I was finished. To get rid of these run the following +from the project directory (the dir with project.garden.yml) + + +```shell +$ garden delete env + +$ garden plugins local-kubernetes uninstall-garden-services +``` + diff --git a/old_snippets/deployment-env-yaml-snippet.en.md b/old_snippets/deployment-env-yaml-snippet.en.md new file mode 100644 index 0000000..472e091 --- /dev/null +++ b/old_snippets/deployment-env-yaml-snippet.en.md @@ -0,0 +1,29 @@ +--- +title: "k8s deployment.yaml env vscode snippet" +date: 2020-06-20T14:45:57+02:00 +draft: false +snippet_types: ["vscode", "kubernetes"] +--- + +Most of my personal projects are deployed via kubernetes. I write a lot of +*deployment.yaml* files. In order to keep them clean and checked in to version control +I keep sensitive env variables in a config maps. Problem is adding values env values to +*deployment.yaml* files is pretty painful. This makes it a little less. + +placed in *yaml.json* πŸ˜€ what a file name! + +```json +{ + "env var from configmap": { + "prefix": "env", + "body": [ + "- name: $1", + " valueFrom:", + " configMapKeyRef:", + " key: $1", + " name: configmapname" + ], + "description": "env varable from config map, remember to replace configmapname with your configmap name" + } +} +``` \ No newline at end of file diff --git a/old_snippets/describe-raku-variable.en.md b/old_snippets/describe-raku-variable.en.md new file mode 100644 index 0000000..f8b3404 --- /dev/null +++ b/old_snippets/describe-raku-variable.en.md @@ -0,0 +1,17 @@ +--- +title: "describing a raku variable" +date: 2021-10-15T18:04:19+04:00 +draft: false +snippet_types: +- raku +--- + +My go to way to figure out what I'm working with in Raku. + +```raku +my $res = cool_thing(); + +say $res.WHAT; +say $res.^attributes; +say $res; +``` diff --git a/old_snippets/destructure-array-javascript.en.md b/old_snippets/destructure-array-javascript.en.md new file mode 100644 index 0000000..fd99d80 --- /dev/null +++ b/old_snippets/destructure-array-javascript.en.md @@ -0,0 +1,27 @@ +--- +title: "destructuring an array in javascript" +date: 2021-11-29T09:22:30+01:00 +draft: false +seo_description: "Turns out you don't need blank variables at all, simply using commas is enough" +snippet_types: +- js +--- + +How I use to destructure Arrays: +```js +const nums = [1,2,3]; +const [a, _, c]; +(a === 1) // true +(c === 3) // true +``` + +Problem is this **_** is not needed and will cause problems with some ESLint +setups. For example they might not allow unused variables. Turnes out you +can just leave that spot blank! + +```js +const nums = [1,2,3]; +const [a, , c]; +(a === 1) // true +(c === 3) // true +``` diff --git a/old_snippets/disable-user.en.md b/old_snippets/disable-user.en.md new file mode 100644 index 0000000..3891fa1 --- /dev/null +++ b/old_snippets/disable-user.en.md @@ -0,0 +1,14 @@ +--- +title: "disable user" +date: 2020-08-11T16:23:05+02:00 +draft: false +snippet_types: +- sysadmin +--- + +In this case disabling the user named ubuntu from logging in. This includes logging in via ssh. + +```shell +$ sudo usermod --expiredate 1 ubuntu +``` + diff --git a/old_snippets/diy-git-remote-on-nas.en.md b/old_snippets/diy-git-remote-on-nas.en.md new file mode 100644 index 0000000..dfc2204 --- /dev/null +++ b/old_snippets/diy-git-remote-on-nas.en.md @@ -0,0 +1,46 @@ +--- +title: "diy git remote on nas storage" +seo_description: "How to setup a folder on a network attached storage drive to be a remote git repo." +date: 2022-06-26T15:57:58+02:00 +draft: false +snippet_types: +- git +- nas +--- + +Got a repo with sensitive data you don't want to push to a remote server you don't control? Have a NAS setup on our home network? +Here is how to setup a folder on that NAS to act as a git remote. + +**Step 1:* + +Change directorys to the NAS and clone the local folder with the _--bare_ option. + +```shell +$ cd /Volumes/travis/git +$ git clone --bare ~/.password-store +``` + +This creates **/Volumes/travis/git/.password-store** but without a working directory. Basically its just the **/.git** part of the repo. + +**Step 2:** + +Setup the NAS file path to be a git remote on the repo. + +```shell +$ cd ~/.password-store +$ git remote add nas /Volumes/travis/git/travisshears.com.git +... +``` + +**Step 3:** + +Done. Now jus push. + +```shell +$ git push nas +Enumerating objects: 8, done. +Counting objects: 100% (8/8), done. +Delta compression using up to 10 threads +Compressing objects: 100% (5/5), done. +Writing objects: 100% (5/5), 1.30 KiB | 1.30 MiB/s, done. +``` diff --git a/old_snippets/emacs-doom-vim-word.en.md b/old_snippets/emacs-doom-vim-word.en.md new file mode 100644 index 0000000..53e4625 --- /dev/null +++ b/old_snippets/emacs-doom-vim-word.en.md @@ -0,0 +1,22 @@ +--- +title: "make emacs words closer to vim" +date: 2021-10-20T20:18:34+02:00 +seo_description: "code snippet explaining how to make emacs more like vim" +draft: false +snippet_types: +- emacs +--- + +I love [doomacs](https://github.com/hlissner/doom-emacs) but jumping around words it bugged me underscores were not +considered part of the word like in vim. After six months of dealing with it I +stumbled upon a solution! + +Simply put this in my **.doom.d/config.el**. + + +```emacs +(modify-syntax-entry ?_ "w") +``` + + +source: [emacs.stackexchange](https://emacs.stackexchange.com/questions/9583/how-to-treat-underscore-as-part-of-the-word) diff --git a/old_snippets/emacs-mac-umlauts.en.md b/old_snippets/emacs-mac-umlauts.en.md new file mode 100644 index 0000000..c1b0a7f --- /dev/null +++ b/old_snippets/emacs-mac-umlauts.en.md @@ -0,0 +1,29 @@ +--- +title: "emacs mac umlauts" +seo_description: "How to type umlauts in emacs on mac" +date: 2021-11-05T13:50:36+01:00 +draft: false +snippet_types: +- emacs +--- + +Recently I've been writing a lot for the German side of my personal site. When typing in German +I perfer to use the English QWERTY keyboard and just alt-u-u to type "ΓΌ". The problem I was having +was emacs would intercept this and execute the capitalize-word function 😞. After some digging into +my configs, ~/.doom.d/config.el, I was able to unset **M-u** only problem is it still didn't activate +the mac system umlaut feature. + +```emacs +(global-unset-key (kbd "M-u")) +``` + +Finally after some more digging I found: + +```emacs +(setq ns-alternate-modifier 'none + ns-right-alternate-modifier 'meta) +``` + +It works by un-assigning the left alt to meta, allowing the system keyboard feature to kick in. + +source: https://emacs.stackexchange.com/questions/61019/umlauts-in-emacs-on-mac diff --git a/old_snippets/emacs-replace-across-multiple-files.en.md b/old_snippets/emacs-replace-across-multiple-files.en.md new file mode 100644 index 0000000..8b849ea --- /dev/null +++ b/old_snippets/emacs-replace-across-multiple-files.en.md @@ -0,0 +1,67 @@ +--- +title: "emacs replace across multiple files" +seo_description: "emacs tutorial on how to replace / edit across multiple files" +date: 2021-11-28T18:49:21+01:00 +draft: false +snippet_types: +- emacs +--- + +This week I was making some changes to a [hugo shortcode](https://gohugo.io/content-management/shortcodes/) I use on my personal +site for videos. + +Old one: + +``` +{< video-with-caption + remote_url="https://travisshears.com/image-service/videos/galtenberg-ski-tour/over_the_tree.webm" + backup_url="https://travisshears.com/image-service/videos/galtenberg-ski-tour/over_the_tree.mp4" + title="through the woods we go" +>} +``` + +New one: + +``` +{< video-with-caption + webm_url="https://travisshears.com/image-service/videos/galtenberg-ski-tour/over_the_tree.webm" + mp4_url="https://travisshears.com/image-service/videos/galtenberg-ski-tour/over_the_tree.mp4" + title="through the woods we go" +>} +``` + +Problem is this change crosses 50+ files. I knew some ways with sed to regex +substitute it across the files but I wanted something more emacs. Eventually +found [wgrep](https://github.com/emacsmirror/wgrep)! Its allows you to search +with normal `+default/search-project` then edit the results. + +- \ to search the project +- type search ex: "remote_url" +- \ to open the results +- delete some results with \ +- \ to make the results editable +- make edits example :%s/remote_url/webm_url/g +- \ to save changes across all the files +- lastly review changes via git + +{{< video-with-caption + webm_url="https://travisshears.com/image-service/videos/emacs-replace-across-multiple-files/emacs_mass_edit_small.webm" + mp4_url="https://travisshears.com/image-service/videos/emacs-replace-across-multiple-files/emacs_mass_edit_small.mp4" +>}} + +final patch: https://git.sr.ht/~travisshears/travisshears.com/commit/71e9c89c32f9b9f362e8e94ca8530530c1418284 + +--- + +In the making of this snippet I had some other fun: + +- this screen recording led me to finding + [keycastr](https://github.com/keycastr/keycastr). + A very helpful mac osx program that displays keys as you type them. + Great for tutorials. +- My personal site is not open source because I write lot of drafts that don't + get published for months... For this snippet I wanted to show part of that + source code as a patch, decided on hosting it as a sourcehut paste. To create + the paste I wrote a [sourcehut-paste](https://git.sr.ht/~travisshears/sourcehut-paste). +- Video was created with Quicktime screen recording feature plus my video + helper app, [ts-video](https://git.sr.ht/~travisshears/ts-video) diff --git a/old_snippets/extending-gpg-key.en.md b/old_snippets/extending-gpg-key.en.md new file mode 100644 index 0000000..35940df --- /dev/null +++ b/old_snippets/extending-gpg-key.en.md @@ -0,0 +1,42 @@ +--- +title: "extending gpg keys" +date: 2020-06-22T11:58:48+02:00 +draft: false +snippet_types: ["gpg"] +--- + +Don't let those keys expire. 🚨 + +Time to edit some keys: + +```shell +gpg --edit-key t@travisshears.com +Secret key is available. +sec rsa2048/D4C2E4DFAB8BABF8 + created: 2018-07-18 expires: 2020-07-17 usage: SC +ssb rsa2048/25C629D0FECC25B9 + created: 2018-07-18 expires: 2020-07-17 usage: E +ssb rsa4096/97F7C2B46E6C5D11 + created: 2019-09-28 expires: 2023-09-28 usage: E +``` + +1. select key to change `key 1` +1. `expire` +1. duration: `1y` +1. repeat until every key is updated + +resulting output should be something like: + +```shell +sec rsa2048/D4C2E4DFAB8BABF8 + created: 2018-07-18 expires: 2021-06-22 usage: SC +ssb rsa2048/25C629D0FECC25B9 + created: 2018-07-18 expires: 2021-06-22 usage: E +ssb rsa4096/97F7C2B46E6C5D11 + created: 2019-09-28 expires: 2021-06-22 usage: E +``` + +lastly `save` and done + +source: +- https://keithbeattyblog.wordpress.com/2019/05/04/how-to-extend-your-gpg-key/ \ No newline at end of file diff --git a/old_snippets/ffmpeg-screen-casts.en.md b/old_snippets/ffmpeg-screen-casts.en.md new file mode 100644 index 0000000..a5b95fd --- /dev/null +++ b/old_snippets/ffmpeg-screen-casts.en.md @@ -0,0 +1,36 @@ +--- +title: "uploadable ffmpeg screen casts" +date: 2020-01-11T12:33:07+01:00 +draft: false +snippet_types: ["ffmpeg", "media"] +--- + +I prefer tools like https://asciinema.org/ when I want to show terminal tricks and cli tools I +build, but sometimes you need to show something that breaks out of the terminal. In this case I +record a **.mov** screen cast using quicktime then do several transformations using **ffmpeg** to +get a small uploaded web friendly **.webm** file. + +1. cut down the video if need be +```shell +$ ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4 +``` + +2. scale down the **.mov** file to something more web friendly +```shell +$ ffmpeg -i vim_dic.mov -filter:v scale=512:-1 -c:a copy vim_dic_small.mov +``` + +3. convert the **.mov** to **.webm** +```shell +$ ffmpeg -i vim_dic_small.mov -c:v libvpx -crf 10 -b:v 1M -c:a libvorbis vim_dic.webm +``` + +If you don't have **ffmpeg** is available via brew + +source: + +- [brew ffmpeg](https://formulae.brew.sh/formula/ffmpeg) +- [convert mov to webm](https://davidwalsh.name/convert-to-webm) +- [resize mov](https://superuser.com/questions/624563/how-to-resize-a-video-to-make-it-smaller-with-ffmpeg) +- [html video element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video) +- [cutting video](https://stackoverflow.com/questions/18444194/cutting-the-videos-based-on-start-and-end-time-using-ffmpeg) diff --git a/old_snippets/file-search-plus-size.en.md b/old_snippets/file-search-plus-size.en.md new file mode 100644 index 0000000..93383f5 --- /dev/null +++ b/old_snippets/file-search-plus-size.en.md @@ -0,0 +1,20 @@ +--- +title: "file search plus size" +date: 2020-07-02T10:09:24+02:00 +draft: false +snippet_types: ["fd", "du"] +--- + +How big are the fonts in this project? Not sure where they are even. +This command finds the files using [fd](https://github.com/sharkdp/fd) then +prints file size. + +```shell +$ fd woff | xargs du -h + 20K src/assets/fonts/brandon_text_medium.woff2 + 20K src/assets/fonts/brandon_text_regular.woff2 + 20K src/assets/fonts/chronicle_light.woff2 + 20K src/assets/fonts/chronicle_roman.woff2 +4.0K types/woff +4.0K types/woff2 +``` diff --git a/old_snippets/filtered-git-diff.md b/old_snippets/filtered-git-diff.md new file mode 100644 index 0000000..ab4107b --- /dev/null +++ b/old_snippets/filtered-git-diff.md @@ -0,0 +1,17 @@ +--- +title: "filtered git diff" +date: 2021-06-25T10:49:51+02:00 +draft: false +snippet_types: +- git +--- + +How to browse git diff of two hashes but exclude some files. In this case any file with test in the name won't be in the diff. + +```shell +gd xxxsha001xxx...xxxsha002xxx -- $(gd --name-only xxxsha001xxx...xxxsha002xxx | rg --invert-match test) +``` + +"gd" == "git diff", via zsh git plugin + +[source](https://www.yaplex.com/blog/find-list-of-files-which-are-different-between-two-branches-in-git) diff --git a/old_snippets/find-bugs-source-with-git-bisect.en.md b/old_snippets/find-bugs-source-with-git-bisect.en.md new file mode 100644 index 0000000..e6f6e25 --- /dev/null +++ b/old_snippets/find-bugs-source-with-git-bisect.en.md @@ -0,0 +1,11 @@ +--- +title: "track down bugs with git bisect" +date: 2020-06-10T10:07:10+02:00 +draft: true +snippet_types: ["git"] +--- + +Git bisect snippet + +- [https://git-scm.com/docs/git-bisect](https://git-scm.com/docs/git-bisect) +- [https://social.nixnet.services/@amolith/104315651903786804](https://social.nixnet.services/@amolith/104315651903786804) \ No newline at end of file diff --git a/old_snippets/find-folder.en.md b/old_snippets/find-folder.en.md new file mode 100644 index 0000000..4256a60 --- /dev/null +++ b/old_snippets/find-folder.en.md @@ -0,0 +1,17 @@ +--- +title: "find that lost folder" +date: 2020-01-11T05:09:47+01:00 +draft: false +snippet_types: ["find", "search"] +--- + +```shell +$ find . -name php-e\* +``` + +Where the hell did that /php-extras folder go that I donloaded for my emacs?? On there you are! +also **ag -g 'php-e'** would work if you want to stick with silver searcher + +source: + +[man page](http://man7.org/linux/man-pages/man1/find.1.html) diff --git a/old_snippets/fix-git-file-mode-changes.en.md b/old_snippets/fix-git-file-mode-changes.en.md new file mode 100644 index 0000000..c58106f --- /dev/null +++ b/old_snippets/fix-git-file-mode-changes.en.md @@ -0,0 +1,40 @@ +--- +title: "fix git file mode changes" +seo_description: "How to reset file modes via git diff." +date: 2022-06-04T12:16:22+02:00 +draft: false +snippet_types: +- git +--- + +Before changing laptops I backed up all my personal projects to my NAS. When I +transfer them back the file modes got messed up and a **git status** returned +this: + +```shell +diff --git a/docker/Dockerfile b/docker/Dockerfile +old mode 100644 +new mode 100755 +diff --git a/lib/DeployTool/CLI.rakumod b/lib/DeployTool/CLI.rakumogpg --list-secret-keys --keyid-format LONG d +old mode 100644 +new mode 100755 +diff --git a/lib/DeployTool/Config.rakumod b/lib/DeployTool/Config.rakumod +old mode 100644 +new mode 100755 +``` + +Git diff shell magic, thanks to [Stanislav Khromov](https://snippets.khromov.se), +to the rescue! + + +```shell +$ git diff -p -R --no-ext-diff --no-color \ + | grep -E "^(diff|(old|new) mode)" --color=never \ + | git apply +``` + +This command uses git diff and some clever grep logic to swap the file modes back to what git remembers them as. + +I also converted the snippet to a shell script [here](https://paste.sr.ht/~travisshears/ee89c97e7c6a54401b28d8b71ae1f796468dcb48) + +source: [Stanislav Khromov's blog](https://snippets.khromov.se/reset-file-mode-chmod-changes-when-making-a-git-commit/) diff --git a/old_snippets/git-better-git-add.en.md b/old_snippets/git-better-git-add.en.md new file mode 100644 index 0000000..f0c27de --- /dev/null +++ b/old_snippets/git-better-git-add.en.md @@ -0,0 +1,18 @@ +--- +title: "better git add" +date: 2020-01-11T05:07:50+01:00 +draft: false +snippet_types: ["git"] +--- + +```shell +$ git add -p +``` + +I tend to use magit in emacs to stange and unstage files/hunks but in a pinch **-p** or **git add -i** + +selecting patch works great. You can choose exactly which hunks you want to stage leading to cleaner +incrimental commits. The bonus to using magit is you can easily edit the file during the process. + +source: + +[git docs](https://git-scm.com/docs/git-add) diff --git a/old_snippets/git-discard-unstaged-changes.en.md b/old_snippets/git-discard-unstaged-changes.en.md new file mode 100644 index 0000000..ec6c933 --- /dev/null +++ b/old_snippets/git-discard-unstaged-changes.en.md @@ -0,0 +1,16 @@ +--- +title: "discard unstaged changes" +seo_description: "Snippet explaining how to disgard unstage git changes." +date: 2022-09-06T14:01:59+02:00 +draft: false +snippet_types: +- git +--- + +Have a bunch of changes staged and want to drop the rest? Easy: + +```shell +$ git restore . +``` + +[source](https://stackoverflow.com/questions/52704/how-do-i-discard-unstaged-changes-in-git) diff --git a/old_snippets/git-force-push-with-lease.en.md b/old_snippets/git-force-push-with-lease.en.md new file mode 100644 index 0000000..9a742f1 --- /dev/null +++ b/old_snippets/git-force-push-with-lease.en.md @@ -0,0 +1,26 @@ +--- +title: "force push with --lease for safety" +date: 2020-06-10T10:06:23+02:00 +draft: false +snippet_types: ["git"] +--- + +Just found out, via [tweet](https://twitter.com/joshdholtz/status/1270578433563787264?s=19), from +the insightful [joshdholtz](https://twitter.com/joshdholtz) that there is a safer alternative to +`git push --force` + +Time to update my aliases: + + +```diff +alias gs="gst" +-alias gpf="gp --force" ++alias gpf="gp --force-with-lease" +alias gdc="gd --cached" +``` + +*I use zsh shell's git plugin that is why you see "gst" for `git status` and "gp" for `git push`. Highly recommend it* + +**Source:** + +- [stackoverflow](https://stackoverflow.com/questions/52823692/git-push-force-with-lease-vs-force) \ No newline at end of file diff --git a/old_snippets/git-log-grep.en.md b/old_snippets/git-log-grep.en.md new file mode 100644 index 0000000..106ea82 --- /dev/null +++ b/old_snippets/git-log-grep.en.md @@ -0,0 +1,16 @@ +--- +title: "search git logs with grep" +date: 2020-01-11T05:13:57+01:00 +draft: false +snippet_types: ["git", "search"] +--- + +```shell +$ git log --grep=NUTS-5288 --since=3.month +``` + +Have I already made commits for this Jira ticket? + +source: + +[gitster blog](https://gitster.livejournal.com/30195.html) diff --git a/old_snippets/git-move-branch.en.md b/old_snippets/git-move-branch.en.md new file mode 100644 index 0000000..ae16fd7 --- /dev/null +++ b/old_snippets/git-move-branch.en.md @@ -0,0 +1,21 @@ +--- +title: "move branch" +date: 2020-01-11T05:06:49+01:00 +draft: false +snippet_types: ["git"] +--- + +```shell +$ git rebase source-commit --onto target-branch +``` + +Sometimes you need to start a new feature branch but the place you need to base the branch is not +ready yet, say coworker has merged his changes to a stage branch but not master. With this work flow +you simply start your branch off stage then move to master later. **git branch -m new-name** also +comes in handy to rename the branch after you've moved it if need be. + +source: + +[makandracards](https://makandracards.com/makandra/10173-git-how-to-rebase-your-feature-branch-from-one-branch-to-another) + +[w3docs](https://www.w3docs.com/snippets/git/how-to-rename-git-local-and-remote-branches.html) diff --git a/old_snippets/git-nocommit-merge.en.md b/old_snippets/git-nocommit-merge.en.md new file mode 100644 index 0000000..6443c81 --- /dev/null +++ b/old_snippets/git-nocommit-merge.en.md @@ -0,0 +1,21 @@ +--- +title: "soft merge" +date: 2020-01-11T05:05:05+01:00 +draft: false +snippet_types: ["git"] +--- + +```shell +$ git merge feature/tickets/NUTS-1231 --no-commit --no-ff +``` + +Sometimes you need to merge but only parcial files and you want fine control over everything and and +possibly want to manually merge parts of files. This is when I use **--no-commit --no-ff**, ff for +fast forward, it basically stages the entire merge making it easy to go trough and make changes. +Using magit in spacemacs I go through hitting 'u' on files I don't want unstaging them, then maybe +'e' on a file to edit it via ediff, combining the new changes with orginal file seamlessy. Overall a +fun and impowering workflow! + +source: + +[stackoverflow](https://stackoverflow.com/questions/8640887/git-merge-without-auto-commit) diff --git a/old_snippets/git-prev-commit-changes.en.md b/old_snippets/git-prev-commit-changes.en.md new file mode 100644 index 0000000..cfec296 --- /dev/null +++ b/old_snippets/git-prev-commit-changes.en.md @@ -0,0 +1,14 @@ +--- +title: "see previous commit changes" +date: 2020-01-11T04:45:42+01:00 +draft: false +snippet_types: ["git"] +--- + +`git log -p -2` or `git lg -p -2` + +Viewing previous changes was something I relied on a GUI's for, like GitLab/Source-Tree, until I found this command! The **-p** stands for **--patch** and the **-2** stands for last two commits. + +source: + +[git docs](https://git-scm.com/book/en/v2/Git-Basics-Viewing-the-Commit-History) diff --git a/old_snippets/git-rebase.en.md b/old_snippets/git-rebase.en.md new file mode 100644 index 0000000..937010e --- /dev/null +++ b/old_snippets/git-rebase.en.md @@ -0,0 +1,16 @@ +--- +title: "rewrite history git history" +date: 2020-01-11T04:58:50+01:00 +draft: false +snippet_types: ["git"] +--- + +```shell +$ git rebase -i HEAD~3 +``` + +Using this command you can rewrite a series of commits via dropping, fixing, squshing, and picking. It's most helpful before pushing to a remote repo if you did a bunch of small commits you want to roll into one. + +source: + +[git docs](https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History) diff --git a/old_snippets/git-repo-backup.en.md b/old_snippets/git-repo-backup.en.md new file mode 100644 index 0000000..c4d2fe5 --- /dev/null +++ b/old_snippets/git-repo-backup.en.md @@ -0,0 +1,39 @@ +--- +title: "git repo backup" +date: 2020-02-23T10:14:44+01:00 +draft: false +snippet_types: ["git", "pass"] +--- + + +Backup a git repo without thats not hosted on remote repo with: + +```shell +$ git bundle create /tmp/pass_"$(date +%s)".bundle --all + +``` + +Then to confirm bundle: + +```shell +$ git bundle verify /tmp/pass_1582448923.bundle +``` + +When you need to restore the backup into a new repo folder: + +```shell +$ git clone -b master /tmp/pass_1582448923.bundle newrepo +``` + +I recently used this to backup my *~/.pass-store* [pass](https://www.passwordstore.org/) +repo. Basically it's a folder full of **.gpg** files each encrypting a password. Don't want to store +it on a remote host so I back it up locally. Create a git bundle then I encrypt the resulting bundle +file and store it somewhere safe. + +```shell +$ gpg --symmetric ./pass_1582448923.bundle +``` + +source: + +[git-memo docs](https://git-memo.readthedocs.io/en/latest/repository_backup.html) diff --git a/old_snippets/git-revert-branch.en.md b/old_snippets/git-revert-branch.en.md new file mode 100644 index 0000000..d8117cc --- /dev/null +++ b/old_snippets/git-revert-branch.en.md @@ -0,0 +1,16 @@ +--- +title: "revert an entire feature branch" +date: 2020-01-11T05:12:42+01:00 +draft: false +snippet_types: ["git"] +--- + +```shell +$ git revert -m 1 59e36575c691a05d33d34f403f5a831891df61b2 +``` + +Yeah that whole feature was just a bad idea... + +source: + +[git docs](https://git-scm.com/docs/git-revert) diff --git a/old_snippets/git-revert.en.md b/old_snippets/git-revert.en.md new file mode 100644 index 0000000..5c510ad --- /dev/null +++ b/old_snippets/git-revert.en.md @@ -0,0 +1,16 @@ +--- +title: "oops i take that back" +date: 2020-01-11T04:57:24+01:00 +draft: false +snippet_types: ["git"] +--- + +```shell +$ git revert sfjes_examplehash_f32f32h +``` + +Some times you only need to undo a spific commit, often when you have already pushed to orgin and can't rebase past a certin point that's where **git revert** comes in. Simply supply it with a commit hash and it will basiclly undo that commits changes. This can be combined with git rebase if you need to git revert servral commits then rebase all the reverts into a single revert. + +source: + +[git docs](https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History) diff --git a/old_snippets/git-trim.en.md b/old_snippets/git-trim.en.md new file mode 100644 index 0000000..80919c3 --- /dev/null +++ b/old_snippets/git-trim.en.md @@ -0,0 +1,18 @@ +--- +title: git trim +seo_description: Code snippet showing how to use git-trim +date: 2023-02-23T13:09:31+01:00 +draft: false +snippet_types: +- git +--- + +Easy clean up branches from local that are old or already merged on remote. + +```shell +$ git trim -s -p +``` + +- [source](https://codelawd.hashnode.dev/managing-git-branches-with-git-trim#heading-basic-install) +- [git-trim project](https://github.com/jasonmccreary/git-trim) + diff --git a/old_snippets/git-who-last.en.md b/old_snippets/git-who-last.en.md new file mode 100644 index 0000000..77f54b0 --- /dev/null +++ b/old_snippets/git-who-last.en.md @@ -0,0 +1,16 @@ +--- +title: "who last edited a file" +date: 2020-01-11T05:14:55+01:00 +draft: false +snippet_types: ["git"] +--- + +```shell +$ git log -1 -- alice/alice/public/themes/core/views/layouts/src/css/main.scss +``` + +Sometimes you just need to know how to blame + +source: + +[git docs](https://www.git-scm.com/docs/git-log) diff --git a/old_snippets/git-zsh-plugin.en.md b/old_snippets/git-zsh-plugin.en.md new file mode 100644 index 0000000..898c6a1 --- /dev/null +++ b/old_snippets/git-zsh-plugin.en.md @@ -0,0 +1,54 @@ +--- +title: "zsh git plugin" +date: 2020-01-27T12:47:22+01:00 +draft: false +snippet_types: ["git", "zsh"] +--- + +I use git exclusive from the command line and while it's interface is very clear since I spend so +much time I'm willing to trade some of that clarity for speed. ZSH has a great plugin for really +fast git tasks. Two of my favorite are pushing while setting a upstream branch and adding patches. + +**GPSUP, git set upstream and push shortcut** + +I push new git branches a few times a day and my previous work flow was to: + +```shell +$ gp +fatal: The current branch NOTICKET-XXX has no upstream branch. +To push the current branch and set the remote as upstream, use + + git push --set-upstream origin NOTICKET-XXX +``` + +followed by the classic [fuck command](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/thefuck): + +```shell +$ fuck +``` + +which then runs the proper push command setting upstream. News flash! This call all be accomplished +with a single plugin command: + +```shell +$ gpsup +``` + +**GAPA, git add patch** + +I like small commits and the key to that for me is adding by patch. This short cut turns + +```shell +$ git add --patch +``` + +to + + +```shell +$ gapa +``` + +Can't recommend the zsh git plugin enough! There are too many shortcut commands to be worth +memorizing but I think **gpsup** and **gapa** are worth it. For a big list of commands it checkout the docs +[here](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/git) diff --git a/old_snippets/gitlab-runners-config.en.md b/old_snippets/gitlab-runners-config.en.md new file mode 100644 index 0000000..eab4b5e --- /dev/null +++ b/old_snippets/gitlab-runners-config.en.md @@ -0,0 +1,18 @@ +--- +title: "configure more gitlab runners" +date: 2020-01-11T05:16:03+01:00 +draft: false +snippet_types: ["gitlab", "docker"] +--- + +```shell +$ docker run --rm -t -i -v /home/travis/runner:/etc/gitlab-runner --name gitlab-runner-hypert-web gitlab/gitlab-runner register +``` + +Gitlab's ci pipelines are superpowerful and not hard to setup but you do have to +get runners going. For me running gitlab in out of a docker container this is +how I add runners to a new project + +source: + +[gitlab docs](https://docs.gitlab.com/runner/register/index.html#docker) diff --git a/old_snippets/gpg-usb-workflow.md b/old_snippets/gpg-usb-workflow.md new file mode 100644 index 0000000..b309387 --- /dev/null +++ b/old_snippets/gpg-usb-workflow.md @@ -0,0 +1,24 @@ +--- +title: "gpg usb workflow" +date: 2021-06-13T08:49:38+02:00 +draft: false +snippet_types: +- gpg +--- + +How to use a GPG key stored on a flash drive to encrypt files? I was perplexed for sometime. Eventually I figured out instead of exporting, importing, file system linking.. you just use a remote key ring that contains the keys you want! + +1. Create the new key on the flash drive with + +```shell +$ gpg --full-generate-key --homedir /Volumes/usb_flash_stick/key_homedir +``` + +2. Use that new public key to encrypt files + +```shell +$ gpg --encrypt-files --homedir /Volumes/usb_flash_stick/key_homedir -r XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ./file_a +``` + +This also bring the possibility of only storing the public key locally and having the secret key safe on the USB. See +[how to move keys snippet](/snippets/moving-gpg-keys). diff --git a/old_snippets/gzip-existing-tar.en.md b/old_snippets/gzip-existing-tar.en.md new file mode 100644 index 0000000..a84fc6c --- /dev/null +++ b/old_snippets/gzip-existing-tar.en.md @@ -0,0 +1,41 @@ +--- +title: "gzipping an existing tar" +date: 2020-10-14T09:12:54+02:00 +draft: false +snippet_types: +- tar +- gzip +--- + +Part of my work process is taking lots of screenshot, ~5 per day. Then I back them up in AWS S3 +Glacier once a month, using [freeze +app](https://apps.apple.com/us/app/freeze-for-amazon-glacier/id1046095491?mt=12). Like to start with +creating a regular tar file in /tmp. + +```shell +$ tar cvf /tmp/pic_dump_14_10_20.tar ~/Desktop/**/*.png +``` + +Then append few more images. `r` in this case sanding for append.. + +```shell +$ tar rfv /tmp/pic_dump_14_10_20.tar ~/Pictures/resized/* +``` + +Now that the tar is complete I double check it by listing the files. + +```shell +$ tar tf /tmp/pic_dump_14_10_20.tar +``` + +Lastly I need to compress the tar and I was confused if I could use tar command itself to compress a +tar into a tar.gz but turns you use gunzip. + +```shell +$ gzip /tmp/pic_dump_14_10_20.tar +``` + + + +source: https://alvinalexander.com/blog/post/linux-unix/how-work-files-tar-gzip-tgz/ (4) + diff --git a/old_snippets/imagemagik-png-to-jpg-white-bg.en.md b/old_snippets/imagemagik-png-to-jpg-white-bg.en.md new file mode 100644 index 0000000..66fba36 --- /dev/null +++ b/old_snippets/imagemagik-png-to-jpg-white-bg.en.md @@ -0,0 +1,41 @@ +--- +title: "imagemagik .png to .jpg with white background" +seo_description: "snippet explaining how to use imagemagik to covert images from .png .jpg and make the transparent parts white" +date: 2022-03-03T21:31:00+01:00 +draft: false +snippet_types: +- imagemagik +--- + +Working on some .png map files today. I needed to covert them to small .jpg's for +uses in [Oblastle](https://oblastle.fun). Problem being by default the transparent part +fills into to black. Here is how to make it white: + + +```shell +$ ls +us-ak.png +us-al.png +us-ar.png +us-az.png +us-ca.png + +$ for file in *.png ; do magick mogrify -format jpg -resize '500' -background white -flatten $file; done + +$ ls +us-ak.png +us-ak.jpg +us-al.png +us-al.jpg +us-ar.png +us-ar.jpg +us-az.png +us-az.jpg +us-ca.png + +$ rm ./*.png +``` + +The important bit being **-background white -flatten**. + +[source](https://stackoverflow.com/questions/7943711/change-the-background-of-an-image-in-image-magick) diff --git a/old_snippets/init-yubikey.md b/old_snippets/init-yubikey.md new file mode 100644 index 0000000..d2fbe74 --- /dev/null +++ b/old_snippets/init-yubikey.md @@ -0,0 +1,25 @@ +--- +title: "init yubikey" +date: 2021-07-16T12:29:01+02:00 +draft: false +snippet_types: +- yubikey +- gpg +--- + +Some servers at work require yubikey authentication and for some reason I have +to fetch and verify every time I want to use it. + +```shell +$ export SSH_AUTH_SOCK=~/.gnupg/S.gpg-agent.ssh +$ gpg --card-edit + +fetch +verify +enter key +via pass yubikey +quit + +$ ssh-add -L +$ ssh travis@serverX +``` diff --git a/old_snippets/ios-xcode-simulator-dark-mode.en.md b/old_snippets/ios-xcode-simulator-dark-mode.en.md new file mode 100644 index 0000000..6abba22 --- /dev/null +++ b/old_snippets/ios-xcode-simulator-dark-mode.en.md @@ -0,0 +1,16 @@ +--- +title: "ios xcode simulator dark mode" +seo_description: "How to switch xcode simulator to dark mode" +date: 2022-05-02T14:16:56+02:00 +draft: false +snippet_types: +- xcode +--- + +Recently I was testing an IOS app on my wifes phone. The UI was completly broken. +Turns out she had dark mode enabled. That led me down the path of adding dark mode support to the +app. Which is testable via the Xcode simulator if you know how to enable it. + +**Command + Shift + A**: Toggles dark mode + +source: https://www.kindacode.com/article/how-to-toggle-dark-mode-on-ios-simulator/ diff --git a/old_snippets/jq-command-line-json-processor.en.md b/old_snippets/jq-command-line-json-processor.en.md new file mode 100644 index 0000000..2a5fe1d --- /dev/null +++ b/old_snippets/jq-command-line-json-processor.en.md @@ -0,0 +1,28 @@ +--- +title: "jq json processor" +date: 2020-01-30T09:10:56+01:00 +draft: false +snippet_types: ["JSON", "curl", "jq"] +--- + +One of my oldest snippets is how to [Pretty print JSON](/snippets/pretty-print-json) +in the shell. This method works great for simple things where you just need to get an idea +of the JSON structure, it has the bonus of using python which you probably already have +installed. The problem is when you want to do more complex tasks it is quite limited in terms of +parsing. Thats where [jq](https://stedolan.github.io/jq) comes in + +```shell +$ curl https://review-noticket-xxxxxxxx.eu/xxxxx/static/loadable-stats.json | jq '.entrypoints .sharedHeader .assets' | rg --invert-match map` +``` + +Simply piping to [jq](https://stedolan.github.io/jq) pretty prints the JSON +but by passing a query string, ex **".entrypoints .sharedHeader .assets"**, +you dig into the JSON and easily get what you need. This is easily +combinable with other shell utilities like in the example above which gets a +list of asset URLs than uses ripgrep invert-match to clean out the source map +URLs from the list. This is now my perfered way of working with JSON in the shell. + +source: + +- [brew formulae](https://formulae.brew.sh/formula/jq) +- [jq docs](https://formulae.brew.sh/formula/jq) diff --git a/old_snippets/jsx-comments.en.md b/old_snippets/jsx-comments.en.md new file mode 100644 index 0000000..b4105c0 --- /dev/null +++ b/old_snippets/jsx-comments.en.md @@ -0,0 +1,30 @@ +--- +title: "jsx comments" +date: 2020-05-26T11:59:43+02:00 +draft: false +snippet_types: ["react", "jsx"] +--- + +The other day at work we have an html comment in jsx slip on to stage. Made me relize I didn't know how to leave comments in jsx myself. + +So as a reminder **DON'T** do this: + +```jsx +
+ +

Hello world

+
+``` + +**Instead do this:** + +```jsx +
+ {/* comment here */} +

Hello world

+
+``` + +source: + +https://wesbos.com/react-jsx-comments \ No newline at end of file diff --git a/old_snippets/k8s-reg-secret.en.md b/old_snippets/k8s-reg-secret.en.md new file mode 100644 index 0000000..d15e518 --- /dev/null +++ b/old_snippets/k8s-reg-secret.en.md @@ -0,0 +1,31 @@ +--- +title: "creating k8s registry secrets" +date: 2020-03-29T20:43:14+02:00 +draft: false +snippet_types: ["kubernetes"] +--- + +Hosting side projects in kubernetes and using gitlab container registry? This +is the command I run to create the needed secret for the cluster to pull the +image: + +```shell +$ kubectl create secret docker-registry cool-project-gitlab \ + --docker-server=registry.gitlab.com \ + --docker-username=gitlab+deploy-token-666666 \ + --docker-password=xxxxxxxxxxxxxxxxxxxx \ + --docker-email=xxxxxxxxx@xmail.com +``` + +Then in the deployment.yml use the gitlab registry image and newly created image +secret: + +```yaml +containers: + image: registry.gitlab.com/btbtravis/cool-project:0.0.1 + imagePullPolicy: IfNotPresent + name: cool-project-api +imagePullSecrets: +- name: cool-projects-gitlab +``` + diff --git a/old_snippets/list-tar-contents.md b/old_snippets/list-tar-contents.md new file mode 100644 index 0000000..b89e080 --- /dev/null +++ b/old_snippets/list-tar-contents.md @@ -0,0 +1,23 @@ +--- +title: "list tar contents" +date: 2021-06-13T08:31:14+02:00 +draft: false +snippet_types: +- tar +--- + +Before putting a tar file somewhere hard to access like S3 Glacier I note what is in it. I create a manifest file. Simply list the file names within: + +```shell +$ tar tvf example.tar +``` + +With more automation worked in I came up with this: + +- list all the tar files using fd (rust find replacment) +- list content of each one +- pipe that into a file for safe keeping + +```shell +$ for x in $(fd -e tar) ; do (tar tvf "$x" && echo "\n") ; done > /tmp/example_manifest +``` diff --git a/old_snippets/locally-host-istanbul-js-results.md b/old_snippets/locally-host-istanbul-js-results.md new file mode 100644 index 0000000..e440700 --- /dev/null +++ b/old_snippets/locally-host-istanbul-js-results.md @@ -0,0 +1,17 @@ +--- +title: "locally host istanbul js results" +date: 2021-06-23T11:15:24+02:00 +draft: false +snippet_types: +- js +- npx +- npm +--- + +At work we use [istanbul js](https://istanbul.js.org/) for code coverage but at +times the cli output is not enough to debug. Luckily istanbul also outputs a HTML +report that can be viewed with the following command: + +```shell +$ npx http-server ./coverage/lcov-report +``` diff --git a/old_snippets/lower-case.en.md b/old_snippets/lower-case.en.md new file mode 100644 index 0000000..385aa96 --- /dev/null +++ b/old_snippets/lower-case.en.md @@ -0,0 +1,20 @@ +--- +title: "lower case string" +seo_description: "Shell snippet expanding how to lower case words" +date: 2022-02-13T12:17:50+01:00 +draft: false +snippet_types: +- tr +--- + +TR is a Unix until to translate characters I recently learned about as part of [this awk snippet](/snippets/awk-last-column). + +```shell +$ echo "TRAVIS" | tr '[:upper:]' '[:lower:]' +travis +``` + +[source](https://www.shellscript.sh/tips/case/) + + + diff --git a/old_snippets/markdown-to-org.md b/old_snippets/markdown-to-org.md new file mode 100644 index 0000000..89d0b27 --- /dev/null +++ b/old_snippets/markdown-to-org.md @@ -0,0 +1,18 @@ +--- +title: "markdown to org file conversion" +date: 2021-06-21T10:58:47+02:00 +draft: false +snippet_types: +- org +- markdown +--- + +I use the [Bear Notes app on IOS](https://bear.app/) which has a nice markdown +export feature. From there it is easy to air drop the file to my mac then I +paste it into my org notes after converting it. + +```shell +$ pandoc -f markdown -t org -o note.org /tmp/md_note.md && pbcopy < /tmp/md_note.md +``` + +source: [stackexchange](https://emacs.stackexchange.com/questions/5465/how-to-migrate-markdown-files-to-emacs-org-mode-format) diff --git a/old_snippets/mass-mkv-to-mp4-ffmpeg.en.md b/old_snippets/mass-mkv-to-mp4-ffmpeg.en.md new file mode 100644 index 0000000..619f0ce --- /dev/null +++ b/old_snippets/mass-mkv-to-mp4-ffmpeg.en.md @@ -0,0 +1,14 @@ +--- +title: "convert .mkv to .mp4" +date: 2020-06-30T16:31:35+02:00 +draft: false +snippet_types: ["ffmpeg"] +--- + +Before I updated my [OBS](https://obsproject.com/) settings to record to .mp4 +files I manually converted .mkv files to .mp4. This shell command does that +for every recording in a directory deleting the original. + +```shell +$ for x in $(ls *.mkv | awk -F "." '{print $1}') ; do ffmpeg -i $x.mkv -c copy $x.mp4 && rm $x.mkv ; sleep 3; done +``` diff --git a/old_snippets/measuring-node-js-fn-performance.md b/old_snippets/measuring-node-js-fn-performance.md new file mode 100644 index 0000000..ee0e493 --- /dev/null +++ b/old_snippets/measuring-node-js-fn-performance.md @@ -0,0 +1,24 @@ +--- +title: "measuring node.js function performance" +date: 2021-08-23T10:42:01+02:00 +draft: false +snippet_types: +- js +- node-js +--- + +How fast is that new function? + +```diff + import { xx } from 'xx'; ++import { performance } from 'perf_hooks'; +@@ -160,7 +161,10 @@ const userSessionMiddleware = async (req: XRequest, res: ExpressResponse, ne ++ var t0 = performance.now(); + req.isBot = headersIndicateBot(req.headers); ++ var t1 = performance.now(); ++ console.log('Took', (t1 - t0).toFixed(4), 'milliseconds to calculate is bot'); +``` + + +source: +https://www.sitepoint.com/measuring-javascript-functions-performance/ diff --git a/old_snippets/move-file-range.en.md b/old_snippets/move-file-range.en.md new file mode 100644 index 0000000..8acc282 --- /dev/null +++ b/old_snippets/move-file-range.en.md @@ -0,0 +1,16 @@ +--- +title: "move file range" +date: 2020-01-27T14:47:22+01:00 +draft: false +snippet_types: ["files", "built-ins"] +--- + +Recently had to move a range of files and some zsh expansions came in handy. + +```shell +$ for x in {1..6}; do mv AAAA.S01E0"$x".mkv ./a-$x.mkv; done +``` + +source: + +https://serverfault.com/questions/370403/copy-a-range-of-files-in-command-line-zsh-bash diff --git a/old_snippets/moving-gpg-keys.en.md b/old_snippets/moving-gpg-keys.en.md new file mode 100644 index 0000000..4fdea73 --- /dev/null +++ b/old_snippets/moving-gpg-keys.en.md @@ -0,0 +1,33 @@ +--- +date: 2020-06-20T13:43:46.000Z +title: moving gpg keys +draft: false +snippet_types: + - gpg +seo_description: How to move GPG keys from one computer to the next. +--- + +New laptop? Got to move over those GPG keys. + +```shell +$ cd /tmp && mkdir gpg_export +$ gpg --output gpg_export/main_pub.gpg --armor --export t@travisshears.com +$ gpg --output gpg_export/main_sec.gpg --armor --export-secret-key t@travisshears.com +$ tar cvfz gpg_export.tar.gz ./gpg_export +$ gpg --symmetric ./gpg_export.tar.gz +``` + +Then move the encrypted tar to the new computer, with airdrop for example. + +To import the keys. + +```shell +$ gpg --decrypt gpg_export.tar.gz.gpg > gpg_export.tar.gz +$ tar xvfz gpg_export.tar +$ gpg --import gpg_export/main_sec.gpg +$ gpg --import gpg_export/main_pub.gpg +``` + +Source: + +* [https://www.debuntu.org/how-to-importexport-gpg-key-pair/](https://www.debuntu.org/how-to-importexport-gpg-key-pair/) diff --git a/old_snippets/npm-i-vs-npm-ci.en.md b/old_snippets/npm-i-vs-npm-ci.en.md new file mode 100644 index 0000000..151dd1e --- /dev/null +++ b/old_snippets/npm-i-vs-npm-ci.en.md @@ -0,0 +1,25 @@ +--- +title: "npm i vs npm ci" +date: 2020-08-17T11:42:34+02:00 +draft: false +snippet_types: +- npm +- js +--- + +Today I discovered `npm ci` from a colleague. It does a clean install wiping out the node_modules +before installing. For me this is perfect because I often find myself doing + +```shell +$ rm -rf node_modules && npm i +``` + +no need just run `npm ci` + +**note: you'll still want to do `npm i` when installing packages as `npm ci` does not update package\*..* + +source: + +- https://docs.npmjs.com/cli/install +- https://docs.npmjs.com/cli/ci + diff --git a/old_snippets/open-notion-links.en.md b/old_snippets/open-notion-links.en.md new file mode 100644 index 0000000..15c18d6 --- /dev/null +++ b/old_snippets/open-notion-links.en.md @@ -0,0 +1,28 @@ +--- +title: "open notion links" +date: 2020-06-07T12:05:55+02:00 +draft: false +snippet_types: ["bash", "notion"] +--- + +Recently I've started using [Notion app](https://www.notion.so) for note +taking. There came times when I wanted to write about a specific directory, +but then came the problem of how to link the dic to notion page. How about a +tiny bash script? OSX's built in open command is capable of opening links so +I copied the link from notion and put in a `docs.sh` script. Boom! It opens +the notion page but in the browser not the app 😟. + +After some digging I found this +[repo](https://github.com/creold/open-in-notion/) for a chrome extension that +opens notion links in the app. Taking a look at the source code it simply +adds a `/native` in the url to open in the app. Updated my script and now it +works πŸ˜€. + +```bash +#!/usr/bin/env bash + +open https://www.notion.so/native/Custom-Brew-Tap-e6f4faef5130442f94c9b06575806fc0 +exit 0 +``` + +If I continue to do this perhaps I'll write a small tool to create the script files for me. \ No newline at end of file diff --git a/old_snippets/org-roam-capture-templates.md b/old_snippets/org-roam-capture-templates.md new file mode 100644 index 0000000..8dc7dfd --- /dev/null +++ b/old_snippets/org-roam-capture-templates.md @@ -0,0 +1,34 @@ +--- +title: "org-roam capture templates" +date: 2021-04-06T11:29:54+02:00 +draft: false +snippet_types: +- org +- emacs +--- + +Recently I've started using [org-roam](https://www.orgroam.com/), so far so +good. Utilizing capture buffers I create notes for work and my reefing aquarium +hobby. Adding the roam tags manually became a pain so now I've figured out a way to +prefill them with capture templates. + +```lisp +(setq org-roam-capture-templates + '(("r" "reef" plain (function org-roam-capture--get-point) + "%?" + :file-name "%<%Y%m%d%H%M%S>-${slug}" + :head "#+title: ${title}\n#+roam_tags: reef" + :unnarrowed t) + ("w" "work" plain (function org-roam-capture--get-point) + "%?" + :file-name "%<%Y%m%d%H%M%S>-${slug}" + :head "#+title: ${title}\n#+roam_tags: work" + :unnarrowed t) + ("d" "default" plain (function org-roam-capture--get-point) + "%?" + :file-name "%<%Y%m%d%H%M%S>-${slug}" + :head "#+title: ${title}\n" + :unnarrowed t))) +``` + +source: https://www.reddit.com/r/orgmode/comments/lmlsdr/simple_question_re_orgroam_how_to_access_capture/ diff --git a/old_snippets/pass-bulk-import.en.md b/old_snippets/pass-bulk-import.en.md new file mode 100644 index 0000000..ddf8ca7 --- /dev/null +++ b/old_snippets/pass-bulk-import.en.md @@ -0,0 +1,18 @@ +--- +title: "bulk import into pass" +date: 2020-01-11T04:51:47+01:00 +draft: false +snippet_types: ["pass"] +--- + +```shell +$ passimport list.csv +``` +Switching to [Pass](https://www.passwordstore.org/) was not exactly a straightforward process. It lacks a built-in mass import feature and I was dealing with a few hundred passwords and as a programmer entering them manually was unthinkable. After looking around at several plugins for [Pass](https://www.passwordstore.org/) nothing seemed simple enough so I wrote my open python script to handle the task. I later turned that script into an executable, run by this command, and pushed it to GitHub. + +[my repo](https://github.com/BTBTravis/basic-pass-import) + +source: + +[pass docs](https://www.passwordstore.org/) + diff --git a/old_snippets/pass-copy.en.md b/old_snippets/pass-copy.en.md new file mode 100644 index 0000000..3afe947 --- /dev/null +++ b/old_snippets/pass-copy.en.md @@ -0,0 +1,15 @@ +--- +title: "copy password from pass to the keyboard" +date: 2020-01-11T04:49:16+01:00 +draft: false +snippet_types: ["pass"] +--- + +```shell +$ pass -c github +``` +Switching to [Pass](https://www.passwordstore.org/), a CLI based password manager, was a big time saver for me. I was using [Padlock](https://padlock.io/), a minimalist open source electron based manager, but was wasting so much time waiting for the GUI to load up and entering my master password scrolling to the desired entry and clicking. I'm not a time-saving purist but it was downright annoying UX pattern. Now I don't even have to leave the comfort of my keyboard. + +source: + +[pass docs](https://www.passwordstore.org/) diff --git a/old_snippets/pass-search.en.md b/old_snippets/pass-search.en.md new file mode 100644 index 0000000..9431574 --- /dev/null +++ b/old_snippets/pass-search.en.md @@ -0,0 +1,15 @@ +--- +title: "search pass from password" +date: 2020-01-11T04:53:40+01:00 +draft: false +snippet_types: ["pass"] +--- + +```shell +$ pass list | ag aws +``` +Being a CLI interface the UX of [Pass](https://www.passwordstore.org/) fits amazingly into the rest of the shell ecosystem. Need can't remember if you have a password for AWS saved, run this. + +source: + +[pass docs](https://www.passwordstore.org/) diff --git a/old_snippets/per-company-git-config.en.md b/old_snippets/per-company-git-config.en.md new file mode 100644 index 0000000..17d3218 --- /dev/null +++ b/old_snippets/per-company-git-config.en.md @@ -0,0 +1,37 @@ +--- +title: "per company git config" +seo_description: "how to configure git to use different emails per company / folder" +date: 2022-06-03T10:49:40+02:00 +draft: false +snippet_types: +- git +--- + +Started new job this week and I wanted to have a seprate email on my work related repos then my +personal ones. Cool thing is git supports +[conditional config file includes](https://git-scm.com/docs/git-config#_conditional_includes)! + + +**~/.gitconfig** +```gitconfig +# per-user git config +[user] +name = Travis Shears +email = t@travisshears.com + +[includeIf "gitdir:~/company-x/"] + path = .gitconfig-company-x +``` + +**~/.gitconfig-company-x** +```gitconfig +# Company X spefic git config +[user] +name = Travis Shears +email = travis.shears@company-x.com +``` + +Now any commits made under the directory **~/company-x** will use the email +**travis.shears@company-x.com** and not my personal email. + +[source](https://stackoverflow.com/questions/8801729/is-it-possible-to-have-different-git-configuration-for-different-projects) diff --git a/old_snippets/percol-to-pick-lines.en.md b/old_snippets/percol-to-pick-lines.en.md new file mode 100644 index 0000000..8569ec9 --- /dev/null +++ b/old_snippets/percol-to-pick-lines.en.md @@ -0,0 +1,25 @@ +--- +title: "percol to pick lines" +seo_description: "How to use percol to pick lines mid pipe" +date: 2023-05-16T15:37:29+02:00 +draft: false +snippet_types: +- percol +--- + +Deep in a emac tutorial I discovered this hidden gem. + +> "percol adds flavor of interactive selection to the traditional pipe concept on UNIX." + +[project github](https://github.com/mooz/percol) + +You can simply place it in the middle of a pipe and pick the options you want. + +Example: + +```shell +$ BUCKET="s3://cool-bucket" aws s3 ls $BUCKET | awk '{print $4}' | percol |sed "s;^;${BUCKET}/;" | xargs aws s3 rm +delete: ... +``` + +{{< asciicast-with-caption id="585386" title="demo" >}} \ No newline at end of file diff --git a/old_snippets/pretty-print-json.en.md b/old_snippets/pretty-print-json.en.md new file mode 100644 index 0000000..bf6873a --- /dev/null +++ b/old_snippets/pretty-print-json.en.md @@ -0,0 +1,15 @@ +--- +title: "pretty print json" +date: 2020-01-11T04:37:52+01:00 +draft: false +snippet_types: ["curl", "json"] +--- + +```shell +$ curl -X GET https://some.json.endpoint.com | python -m json.tool +``` +Need to check a API request but stuck reading a garbled mess. Try pipeing the result to python json.tool + +source: + +[stackoverflow](https://stackoverflow.com/questions/352098/how-can-i-pretty-print-json-in-a-shell-script) diff --git a/old_snippets/prevent-vim-auto-new-line.en.md b/old_snippets/prevent-vim-auto-new-line.en.md new file mode 100644 index 0000000..7f94925 --- /dev/null +++ b/old_snippets/prevent-vim-auto-new-line.en.md @@ -0,0 +1,24 @@ +--- +title: "prevent vim auto new lines" +date: 2020-08-13T10:06:37+02:00 +draft: false +snippet_types: +- vim +--- + +Sometimes when typing vim will automatically start a newline. This is an expected behavior but at +times can be really annoying. Ex working with macros, you can recored one on a short line that +breaks on longer lines 😟. The amount of text before vim will break to new line while typing is +controlled via the **textwidth** setting. So a fix is pretty simple. If don't want the behavior just set +**textwidth** to a big number. ex: + +``` +: set tw=500 +``` + +Here is a asciicast of the problem and solution in action: + +{{< asciicast-with-caption id="353148" title="demo of setting tw" >}} + +source -- https://stackoverflow.com/questions/1272173/in-vim-how-do-i-break-one-really-long-line-into-multiple-lines + diff --git a/old_snippets/pushing-to-remote-branch-with-different-name.md b/old_snippets/pushing-to-remote-branch-with-different-name.md new file mode 100644 index 0000000..60be507 --- /dev/null +++ b/old_snippets/pushing-to-remote-branch-with-different-name.md @@ -0,0 +1,17 @@ +--- +title: "pushing to remote branch with different name" +date: 2021-09-08T13:02:41+02:00 +draft: false +snippet_types: +- git +--- + +Some times you rename a branch locally and want to push it to a remote branch with a different name. +This is how: + +```shell +$ git push -u origin localBranch:remoteBranch +``` + +source: [stack-overflow](https://stackoverflow.com/questions/36139275/git-pushing-to-remote-branch) + diff --git a/old_snippets/random-password.en.md b/old_snippets/random-password.en.md new file mode 100644 index 0000000..3d64fe2 --- /dev/null +++ b/old_snippets/random-password.en.md @@ -0,0 +1,16 @@ +--- +title: "random password" +seo_description: "Create a random password on the commandline" +date: 2023-10-18T13:46:35+02:00 +draft: false +snippet_types: +- openssl +--- + +This will generate a six char password. + +```shell +$ openssl rand -base64 6 +``` + +s3u3fi diff --git a/old_snippets/re-export-js-fn.en.md b/old_snippets/re-export-js-fn.en.md new file mode 100644 index 0000000..9a01cd2 --- /dev/null +++ b/old_snippets/re-export-js-fn.en.md @@ -0,0 +1,31 @@ +--- +title: "re-export javascript function" +date: 2021-10-05T08:45:34+02:00 +draft: false +snippet_types: +- js +--- + +When splitting logic into files in JavaScript it sometimes happens you have a folder of files; say +for a single domain like Google analytics tracking. There comes a time in another part of the code +where you need to import some functions and types from this GATracking folder but you may not want +to dig into which file in the folder that function is. Re-exporting allows us to keep the API of the +GATracking logic consise and allow the rest of the program to not worry about how exactly the files +are structured. Example: + +src/client/hooks/GATracking/index.tsx +```ts +export { default as TrackingAction } from './actions'; +export const track = (action: TrackingAction) => +... +``` + +Then somewhere else: +src/client/components/GoButton/index.tsx + +```ts +import {TrackingAction, track} from '../hooks/GATracking'; +... +``` + +source: https://stackoverflow.com/questions/34576276/re-export-a-default-export diff --git a/old_snippets/re-export.en.md b/old_snippets/re-export.en.md new file mode 100644 index 0000000..d10c9a1 --- /dev/null +++ b/old_snippets/re-export.en.md @@ -0,0 +1,43 @@ +--- +title: "re export" +seo_description: "Code snippet explaining re-exporting enums in TypeScript" +date: 2022-01-05T09:13:55+01:00 +draft: false +snippet_types: +- typescript +--- + +Today when writing a React hook I imported an enum type from another section of +code. This enum was used as an argument to the hook. Any components that used +this hook would also need to import that type enum. So just to use the hook at a +minimum the component would need to import two things, the hook itself, and the type +enum. To many imports cluttering stuff us! + + +```ts +import useCoolHook from 'Client/hooks/CoolHoook'; +import HatStyleEnum from 'Client/hats/styles'; + +... +cool = useCoolHook(HatStyleEnum.cowboy); +``` + +What I found is the ability to re-export the type from the hook to keep the enum +bundled with the hook and more easily accessible. + +```ts +export {HatStyleEnum} from 'Client/hats/styles'; + +export const useCoolHook = (hatId: HatStyleEnum) => { +... +``` + +This way the components only have to have one import, saving space. +```ts +import useCoolHook, {HatStyleEnum} from 'Client/hooks/CoolHoook'; +``` + +Also see [similar snippet for js](/snippets/re-export-js-fn/) + +source: [stackoverflow](https://stackoverflow.com/questions/36790911/reexport-class-in-typescript) + diff --git a/old_snippets/recover-deleted-file-git.en.md b/old_snippets/recover-deleted-file-git.en.md new file mode 100644 index 0000000..f620ac8 --- /dev/null +++ b/old_snippets/recover-deleted-file-git.en.md @@ -0,0 +1,34 @@ +--- +title: how to recover deleted file with git +seo_description: "short git tutorial on how to recover deleted files with git" +date: 2023-09-12T09:30:17+02:00 +draft: false +snippet_types: +- git +--- + +I'd like to build a new nest.js command based off a file I deleted last week. +Here is how I go about getting that old file back via `git restore` + +Step 1, find the file: + +```shell +$ git log --name-only +/command +fd8bc2a6 Merge branch 'XXX-1111-remove-search-queue' into 'main' +fd07ddc3 XXX-1111: Remove search queue +apps/cli/src/cli.module.ts +apps/cli/src/db/backfill-search-queue.command.ts +apps/cli/src/db/db.module.ts +... +``` + +Step 2, restore the file: + +```shell +$ git restore --source fd07ddc3~1 apps/cli/src/db/backfill-search-queue.command.ts +``` + +Note the `~1`. The file in question was deleted in commit fd07ddc3, so to +restore it we need to go one commit before it was deleted. `~1` does exactly +that. diff --git a/old_snippets/remap-section-sign-to-backslash-mac-osx.en.md b/old_snippets/remap-section-sign-to-backslash-mac-osx.en.md new file mode 100644 index 0000000..9534d1f --- /dev/null +++ b/old_snippets/remap-section-sign-to-backslash-mac-osx.en.md @@ -0,0 +1,64 @@ +--- +date: 2022-06-05T10:26:08.000Z +title: remap Β§/Β± to `/~ on max osx +draft: false +snippet_types: + - mac + - osx +seo_description: How to remap (Β§) section sign to (`) backslash on mac. +--- + +Got a new Macbook Pro with the start of my new job and I love it. Except. It did +not come with and english keyboard. Now every time I try to type the backslash (\`) +or tilde (\~) instead I get "Β§" or "Β±" πŸ˜”. Lucky for me there are a bunch of people +with the same issue. + +This base command to remap the key is: + +```shell +$ hidutil property --set '{"UserKeyMapping": + [{"HIDKeyboardModifierMappingSrc":0x700000064, + "HIDKeyboardModifierMappingDst":0x700000035}] +}' +``` + +but to make this survive a computer restart things get a little more complicated. +For that you need you need a LaunchDaemon. + +/Library/LaunchDaemons/org.custom.backslash-key-remap-fix.plist + +```xml + + + + + Label + org.custom.backslash-key-remap-fix + ProgramArguments + + /Users/travis.shears/projects/scripts/bin/backslash-key-remap-fix.sh + + RunAtLoad + + KeepAlive + + + +``` + +/Users/travis.shears/projects/scripts/bin/backslash-key-remap-fix.sh + +```shell +#/bin/sh -e + +hidutil property --set '{"UserKeyMapping": + [{"HIDKeyboardModifierMappingSrc":0x700000064, + "HIDKeyboardModifierMappingDst":0x700000035}] +}' +``` + +## Sources: + +* [https://rakhesh.com/mac/using-hidutil-to-map-macos-keyboard-keys/](https://rakhesh.com/mac/using-hidutil-to-map-macos-keyboard-keys/) +* [https://www.grzegorowski.com/how-to-remap-single-mac-keyboard-key](https://www.grzegorowski.com/how-to-remap-single-mac-keyboard-key) +* [https://superuser.com/questions/37042/remapping-of-keys-in-mac-os-x](https://superuser.com/questions/37042/remapping-of-keys-in-mac-os-x) diff --git a/old_snippets/remove-brew-packages.en.md b/old_snippets/remove-brew-packages.en.md new file mode 100644 index 0000000..5d3b7e3 --- /dev/null +++ b/old_snippets/remove-brew-packages.en.md @@ -0,0 +1,30 @@ +--- +title: "remove brew packages" +seo_description: "A snippet explaining how to remove top level brew packages" +date: 2022-01-18T10:31:48+01:00 +draft: false +snippet_types: +- brew +--- + +Trying to clean up my laptop a bit today by removing some unused brew packages. + +Normally I would use `brew list` but this also list packages that are dependicies. +Here is a way to list the top level packages: + + +```shell +$ brew leaves +asciinema +aspell +autoconf +awscli +bat +bumpversion +... + +$ brew uninstall neomutt newsboat travisshears/tap/deploy_tool weechat +... +``` + +[source](https://apple.stackexchange.com/questions/101090/list-of-all-packages-installed-using-homebrew) diff --git a/old_snippets/remove-common-lines.en.md b/old_snippets/remove-common-lines.en.md new file mode 100644 index 0000000..443fd9c --- /dev/null +++ b/old_snippets/remove-common-lines.en.md @@ -0,0 +1,55 @@ +--- +title: "remove common lines with comm" +seo_description: "How to remove common lines from files using the comm command" +date: 2023-05-24T12:52:11+02:00 +draft: false +snippet_types: +- comm +--- + +With help of ChatGPT I discovered this unix gem today. + +Given two files + +main_deck.txt: +``` +1 Abzan Charm +1 Arcane Bombardment +1 Arcane Sanctum +1 Arcane Signet +1 Archmage Emeritus +1 Bant Charm +1 Boros Charm +1 Bring to Light +1 Brokers Charm +1 Brokers Confluence +``` + +considering.txt: +``` +1 Abzan Charm +1 Arcane Sanctum +1 Taigam, Ojutai Master +1 Archmage Emeritus +1 Boros Charm +1 Tamanoa +1 Time Wipe +1 Trap Essence +1 Brokers Confluence +``` + +running + +```shell +$ comm -23 <(cat considering.txt | sort) <(cat main_deck.txt | sort) +1 Taigam, Ojutai Master +1 Tamanoa +1 Time Wipe +1 Trap Essence +``` + +Returns a list of cards that are unique to the considering.txt. + +If your text files are sorted you can skip the `<(cat ..)` magic. + +And yes. I'm using the cli two help build Magic the Gathering Decks! \ No newline at end of file diff --git a/old_snippets/remove-gps-metadata-from-image.en.md b/old_snippets/remove-gps-metadata-from-image.en.md new file mode 100644 index 0000000..bea1c22 --- /dev/null +++ b/old_snippets/remove-gps-metadata-from-image.en.md @@ -0,0 +1,17 @@ +--- +title: "remove gps metadata from image" +seo_description: code snippet on how to use exiftool in the shell to remove gps metadata from images +date: 2023-01-31T12:53:04+01:00 +draft: false +snippet_types: + - exiftool +--- + +Recently I noticed some of the images on my site had GPS metadata info. Thats +not very private! So I did some googling and found this solution. + +```shell +$ exiftool -GPS*= $(fd -e jpg -e png -e jpeg) +``` + +[source](https://exiftool.org/forum/index.php?topic=12615.0) diff --git a/old_snippets/restart-nginx.en.md b/old_snippets/restart-nginx.en.md new file mode 100644 index 0000000..502f83f --- /dev/null +++ b/old_snippets/restart-nginx.en.md @@ -0,0 +1,22 @@ +--- +title: "restart nginx" +date: 2021-02-07T00:33:09+01:00 +draft: false +snippet_types: +- nginx +--- + +Normally I use +```shell +$ sudo systemctl restart nginx +``` + +but recently I had to take more drastic measures. + +```shell +sudo pkill -f nginx & wait $! +sudo systemctl start nginx +``` + +source -- [stackoverflow](https://stackoverflow.com/questions/14972792/nginx-nginx-emerg-bind-to-80-failed-98-address-already-in-use) + diff --git a/old_snippets/run-changed-tests.en.md b/old_snippets/run-changed-tests.en.md new file mode 100644 index 0000000..436c989 --- /dev/null +++ b/old_snippets/run-changed-tests.en.md @@ -0,0 +1,10 @@ +--- +title: "run changed tests" +date: 2021-02-01T15:48:43+01:00 +draft: false +snippet_types: +- npm +- git +--- + +npm run test -- $(git diff master --name-only | rg 'test\.ts') --coverage=false \ No newline at end of file diff --git a/old_snippets/s3-copy-recursive.en.md b/old_snippets/s3-copy-recursive.en.md new file mode 100644 index 0000000..0452655 --- /dev/null +++ b/old_snippets/s3-copy-recursive.en.md @@ -0,0 +1,25 @@ +--- +title: "s3 copy recursive" +seo_description: "short snippet explaining how to upload folders recursivly to s3 from the cli" +date: 2022-03-03T21:39:59+01:00 +draft: false +snippet_types: +- aws +- s3 +--- + +Where were you **--recursive** when I was hacking around with +**for file * ; do aws s3 cp \$file.....** + +```shell +$ aws s3 cp ./ s3://travisshears.images/image-service/images/oblastle/context/ --profile personal --recursive +upload: ./us-ak.jpg to s3://travisshears.images/image-service/images/oblastle/context/us-ak.jpg +upload: ./us-co.jpg to s3://travisshears.images/image-service/images/oblastle/context/us-co.jpg +upload: ./us-ar.jpg to s3://travisshears.images/image-service/images/oblastle/context/us-ar.jpg +upload: ./us-ca.jpg to s3://travisshears.images/image-service/images/oblastle/context/us-ca.jpg +upload: ./us-al.jpg to s3://travisshears.images/image-service/images/oblastle/context/us-al.jpg +upload: ./us-ct.jpg to s3://travisshears.images/image-service/images/oblastle/context/us-ct.jpg +... +``` + +**--recursive** is an easy win to upload a bunch of files to s3. diff --git a/old_snippets/s3-move-folder.en.md b/old_snippets/s3-move-folder.en.md new file mode 100644 index 0000000..61dcd20 --- /dev/null +++ b/old_snippets/s3-move-folder.en.md @@ -0,0 +1,19 @@ +--- +title: "s3 move folder / rename folder" +seo_description: "snippet showing how to move files from one s3 'folder' to another" +date: 2022-03-17T15:08:04+01:00 +draft: false +snippet_types: +- s3 +- aws +--- + +Working on my [Oblastle](https://oblastle.fun) game today. In an effort to standardize the way I store images for the game in S3 I needed to move all the files with key **image-service/images/oblastle/flags/** to **/image-service/images/oblastle/flag/**. + +Here is how I did it: + +```shell +$ aws s3 mv s3://travisshears.images/image-service/images/oblastle/flags/ s3://travisshears.images/image-service/images/oblastle/flag/ --recursive --profile personal +``` + +[source](https://bobbyhadz.com/blog/aws-s3-rename-folder) diff --git a/old_snippets/scp.en.md b/old_snippets/scp.en.md new file mode 100644 index 0000000..cf7730d --- /dev/null +++ b/old_snippets/scp.en.md @@ -0,0 +1,17 @@ +--- +title: "i need a file off my server but i don't want to set up ftp" +date: 2020-01-11T05:11:00+01:00 +draft: false +snippet_types: ["scp"] +--- + +```shell +$ scp -i ~/.ssh/privkey travis@199.199.19.199:/home/travis/example.txt ./ +``` + +Yeah sometimes you just need to move files around. Any server you have ssh access to you can use +that same key to send files over ssh. + +source: + +[man page](http://man7.org/linux/man-pages/man1/scp.1.html) diff --git a/old_snippets/shell-for-loops.en.md b/old_snippets/shell-for-loops.en.md new file mode 100644 index 0000000..f6854b8 --- /dev/null +++ b/old_snippets/shell-for-loops.en.md @@ -0,0 +1,102 @@ +--- +title: "for loops in bash / zsh shells" +date: 2020-01-12T11:54:38+01:00 +draft: false +snippet_types: ["zsh", "built-ins"] +--- + +Looping directly in the shell is something I do at lease once a week and it's a great time saver. +Here I want to run through a concrete example of how to use for loops to mass move and rename files. + +During process of getting this snippet section of my site off the ground I realize I had put a bunch +of markdown files into named directories when I could have just named the files better and done without +the directories. What I needed to do was **mv** the files out of these dirs and rename them to the +name of the dir plus add the ".en.md" extension. + +Here is the old directory structure: + +```shell +$ tree +. +└── snippets + β”œβ”€β”€ _index.en.md + β”œβ”€β”€ aws-cloud-front-inval + β”‚Β Β  └── index.en.md + β”œβ”€β”€ aws-s3-sync + β”‚Β Β  └── index.en.md + β”œβ”€β”€ ffmpeg-screen-casts + β”‚Β Β  └── index.en.md + β”œβ”€β”€ find-folder + β”‚Β Β  └── index.en.md + β”œβ”€β”€ git-better-git-add + β”‚Β Β  └── index.en.md + β”œβ”€β”€ git-log-grep + β”‚Β Β  └── index.en.md + β”œβ”€β”€ git-move-branch + β”‚Β Β  └── index.en.md + . + . +``` + +To start with I preformed the operation in question a single time to prove it works: + +```shell +$ mv ./who-is-using-that-port/index.en.md ./who-is-using-that-port.en.md && rm -r ./who-is-using-that-port +``` + +Then I copy this command to the clipboard for later and use command history pull up a +previous for loop command and switch the shell command entry external editing +in vim mode, for me **\\**. As we are essentially writing a quick bash script in-line we need vim +powers! While in vim if you need the file list a quick **:r !ls** does the trick. +These little efficiencies like using command history are not just faster but make it so you +don't have to remember the bash syntax. + +Resulting vim buffer with the for loop: + +```shell +for x in \ +aws-s3-sync \ +ffmpeg-screen-casts \ +find-folder \ +git-better-git-add \ +git-log-grep \ +... +git-move-branch \ +vim-window-resize ; do mv ./"$x"/index.en.md ./"$x".en.md && rm -r "$x" ; done +``` + +Resulting new file structure: + +```shell +$ tree +. +└── snippets + β”œβ”€β”€ _index.en.md + β”œβ”€β”€ aws-cloud-front-inval.en.md + β”œβ”€β”€ aws-s3-sync.en.md + β”œβ”€β”€ ffmpeg-screen-casts.en.md + β”œβ”€β”€ find-folder.en.md + β”œβ”€β”€ git-better-git-add.en.md + β”œβ”€β”€ git-log-grep.en.md + β”œβ”€β”€ git-move-branch.en.md + . + . +``` + +Perfect, all files have been renamed properly and the empty directories deleted. This technique has +lots of other applications besides moving and renaming files. Earlier this week while debugging api +at work I dumped bunch of json responses into a file so I could search for translation key. + +```shell +$ for x in \ +https://api.poeditor.com/v2/download/file/xxx \ +https://api.poeditor.com/v2/download/file/xxx \ +https://api.poeditor.com/v2/download/file/xxx \ +https://api.poeditor.com/v2/download/file/xxx \ +https://api.poeditor.com/v2/download/file/xxx \ +https://api.poeditor.com/v2/download/file/xxx \ +https://api.poeditor.com/v2/download/file/xxx \ +https://api.poeditor.com/v2/download/file/xxx \ +https://api.poeditor.com/v2/download/file/xxx \ +https://api.poeditor.com/v2/download/file/xxx ; do curl $x >> /tmp/translations.json; done +``` diff --git a/old_snippets/short-server-names.en.md b/old_snippets/short-server-names.en.md new file mode 100644 index 0000000..c30cf61 --- /dev/null +++ b/old_snippets/short-server-names.en.md @@ -0,0 +1,41 @@ +--- +title: "using short server names" +date: 2020-08-12T12:04:32+02:00 +draft: false +snippet_types: +- ssh +--- + +It use to be when I was trying to ssh into one of my servers I would just: in the shell to +get my fzz backwards command search, type ssh, then scroll up and down until I found the correct server. As +my number of servers has grown this is no longer manageable because I don't remember which IPs align +with with server. Time for some human readable names. + +By adding something like this to your `~/.ssh/config`: + +``` +Host de1 + HostName vxxxxxxxxxxxxxxxxxxxx.megasrv.de + User travis + +Host de2 + HostName vyyyyyyyyyyyyyyyyyyyymegasrv.de + User travis + +Host de3 + HostName vzzzzzzzzzzzzzzzzzzz.megasrv.de + User travis + +Host nyc1 + HostName 123.123.123.1233 + User travis +``` + +sshing becomes as easy as: + + +```shell +$ ssh de2 +``` + +source -- https://www.techrepublic.com/article/how-to-use-per-host-ssh-configuration/ diff --git a/old_snippets/silver-searcher.en.md b/old_snippets/silver-searcher.en.md new file mode 100644 index 0000000..7435f58 --- /dev/null +++ b/old_snippets/silver-searcher.en.md @@ -0,0 +1,15 @@ +--- +title: "silver searcher, it's like grep but faster and easier" +date: 2020-01-11T04:54:57+01:00 +draft: false +snippet_types: ["ag", "search"] +--- + +```shell +$ ag -G .php 'the meaning of the universe' +``` +Life on the command line means grepping for things on a daily basis. After doing this for a while I memorized so may flag like grep **-n** for line numbers **-i** for case-insensitive and even the **.** to specify file directory. Then I discovered [silver searcher](https://github.com/ggreer/the_silver_searcher), not only was the name a call back to one of my favorite comic book heroes but, it basically did work just as well as grep without all the flags and seemingly faster. It is now my go-to command for searching files whether it be inside vim via **:r !ag -G .php 'something'** or from the cli. It even has different outputs depending on the situation, in the cli it opens a temp window to browse results like **less** when piping or in vim it outputs a more machine-readable chunk of text with file paths, line numbers, and a single line of code. + +source: + +[silver searcher](https://github.com/ggreer/the_silver_searcher) diff --git a/old_snippets/sort-numerically.en.md b/old_snippets/sort-numerically.en.md new file mode 100644 index 0000000..57c9265 --- /dev/null +++ b/old_snippets/sort-numerically.en.md @@ -0,0 +1,46 @@ +--- +title: "sort numerically" +seo_description: "how to sort lines numerically in unix shell" +date: 2023-05-11T09:14:37+02:00 +draft: false +snippet_types: +- sort +--- + +Working with with sitemap xml files in AWS S3 today and the default sort is a bit hard to read. + +Example: + +```shell +$ aws s3 ls s3://cool-bucket | awk '{print $4}' +sitemap.brands.xml +sitemap.episode.0.xml +sitemap.episode.1.xml +sitemap.episode.10.xml +sitemap.episode.11.xml +sitemap.episode.2.xml +sitemap.episode.20.xml +sitemap.episode.21.xml +sitemap.episode.22.xml +sitemap.episode.23.xml +... +``` + +Using `sort -V` it sorts the lines numerically! + +Working example: + +```shell +$ aws s3 ls s3://cool-bucket | awk '{print $4}' | sort -V +sitemap.brands.xml +sitemap.xml +sitemap.episode.0.xml +sitemap.episode.1.xml +sitemap.episode.2.xml +sitemap.episode.3.xml +sitemap.episode.4.xml +sitemap.episode.5.xml +sitemap.episode.6.xml +sitemap.episode.7.xml +... +``` \ No newline at end of file diff --git a/old_snippets/split-files.md b/old_snippets/split-files.md new file mode 100644 index 0000000..925969e --- /dev/null +++ b/old_snippets/split-files.md @@ -0,0 +1,15 @@ +--- +title: "split files" +date: 2021-06-13T08:31:03+02:00 +draft: false +snippet_types: +- split +--- + +To prevent upload errors to S3 Glacier I keep my files ~500mb. So larger ones must be split. + +```shell +$ split -b 500mb example.txt example.txt.part +``` + +[perl script example](https://paste.sr.ht/~travisshears/1327a69aea4e86e17894aeec9e16011338280b8a) diff --git a/old_snippets/strip-audio-from-video-file.en.md b/old_snippets/strip-audio-from-video-file.en.md new file mode 100644 index 0000000..adf2588 --- /dev/null +++ b/old_snippets/strip-audio-from-video-file.en.md @@ -0,0 +1,18 @@ +--- +title: "strip audio from video file" +date: 2021-01-09T15:27:08+01:00 +draft: false +snippet_types: +- ffmpeg +--- + +Easy way to remove audio from a video file using ffmpeg + +```shell +ffmpeg -i $input_file -c copy -an $output_file +``` + +source: [superuser](https://superuser.com/questions/268985/remove-audio-from-video-file-with-ffmpeg) + + + diff --git a/old_snippets/temp-sqlite-table.en.md b/old_snippets/temp-sqlite-table.en.md new file mode 100644 index 0000000..da5092b --- /dev/null +++ b/old_snippets/temp-sqlite-table.en.md @@ -0,0 +1,21 @@ +--- +title: "creating a temporary tabel in sqlite" +date: 2021-09-21T10:33:46+02:00 +draft: false +snippet_types: +- sqlite +- sql +--- + +Today I needed to export some data from an sqlite tabel to csv, as part of my poverty line project. +Using [sqlitebrowser](https://sqlitebrowser.org/) I could see the table had to much data and I only wanted +to export a few columns. To accomplish this I learned how to create a temporary table and exported that. + + +```sql +DROP TABLE IF EXISTS processing_data_export; +CREATE TEMPORARY TABLE processing_data_export AS +SELECT x,y, county_id FROM grid; +``` + +source: [stackoverflow](https://stackoverflow.com/questions/26491230/sqlite-query-results-into-a-temp-table) diff --git a/old_snippets/tmux-new.en.md b/old_snippets/tmux-new.en.md new file mode 100644 index 0000000..0855888 --- /dev/null +++ b/old_snippets/tmux-new.en.md @@ -0,0 +1,21 @@ +--- +title: "mutliplex all the shells" +date: 2020-01-11T04:59:56+01:00 +draft: false +snippet_types: ["tmux"] +--- + +```shell +$ tmux new -s 'example_session_name' +``` + +Creates a new tmux session with the name 'example_session_name' which is very powerful and will +exist even if you close out of the terminal. + +Once you launch use **\** to split the window horizontally or **\** for +vertically split and moving between windows with **\** +You can detach and go back to shell at any time with **\** then reattach later with +**tmux new-s 'example_session_name'**. If you forget the name a simple **tmux ls** show running +sessions. + +[cheat sheet](https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History) diff --git a/old_snippets/tmux-plus-screen.en.md b/old_snippets/tmux-plus-screen.en.md new file mode 100644 index 0000000..e5b6b1a --- /dev/null +++ b/old_snippets/tmux-plus-screen.en.md @@ -0,0 +1,27 @@ +--- +title: "tmux plus screen" +date: 2020-08-17T14:19:16+02:00 +draft: false +snippet_types: +- screen +- tmux +--- + +Recently I was sshed into my home pi server trying to sftp some big files from a remote server. +Some of the transfers are huge, 30gb+. On our internet that will take a while. Not +wanting to leave the shh terminal session open that whole time I used +[screen](https://linux.die.net/man/1/screen) on the pi. +Idea was to create a screen session start the transfer detach and comeback few hours later. +Detaching was a bit tricky. is the default detach command for both tmux running on my +mac and screen running on the pi. So when I tried to detach from the screen session tmux would +detach instead. 😑 + +After messing with configs and some searching turns out if you press the tmux prefix key twice it +sends it once to the child shell. So eventually I was able to detach from the screen session with: + +** **!! + +sources: + +- [stackoverflow](https://stackoverflow.com/questions/8518815/how-to-send-commands-when-opening-a-tmux-session-inside-another-tmux-session) +- [screen basics](https://www.howtogeek.com/662422/how-to-use-linuxs-screen-command) diff --git a/old_snippets/trust-gpg-key.en.md b/old_snippets/trust-gpg-key.en.md new file mode 100644 index 0000000..47af330 --- /dev/null +++ b/old_snippets/trust-gpg-key.en.md @@ -0,0 +1,16 @@ +--- +title: "trust gpg key" +seo_description: "how to trust a gpg key on mac and stop the annoying popups related to non trusted +gpg keys" +date: 2022-06-04T10:50:22+02:00 +draft: false +snippet_types: +- gpg +--- + +Just moved computers and thus moved my [pass store](https://www.passwordstore.org/). After importing +my gpg keys, [explained in this snippet](/snippets/moving-gpg-keys), I had to trust them in order to stop the annoying +warnings everytime I created a new password. + + +[source](https://yanhan.github.io/posts/2014-03-04-gpg-how-to-trust-imported-key/) diff --git a/old_snippets/twtxt-config.en.md b/old_snippets/twtxt-config.en.md new file mode 100644 index 0000000..6b773ec --- /dev/null +++ b/old_snippets/twtxt-config.en.md @@ -0,0 +1,25 @@ +--- +title: "twtxt config alias" +date: 2020-05-30T11:56:31+02:00 +draft: false +snippet_types: ["zsh", "twtxt"] +--- + +Recently I started using [twtxt](https://twtxt.readthedocs.io/en/stable/). I +installed it with brew then setup it up via the quick setup command. The +problem is when you put a config file location other then the default when +you call the command you get a +**"βœ— Config file not found or not readable. You may want to run twtxt quickstart."** +error. This is super annoying so I aliased the command to always include the location of my +config file. + +```diff + alias gpf="gp --force" ++ alias tw="twtxt -c ~/.twtxt/config" +``` + +Now posting is as easy as: + +```shell +$ tw tweet "authoring a snippet on how to configure alias twtxt" +``` diff --git a/old_snippets/type-js-file.md b/old_snippets/type-js-file.md new file mode 100644 index 0000000..6947425 --- /dev/null +++ b/old_snippets/type-js-file.md @@ -0,0 +1,46 @@ +--- +title: "add types to a javascript when using typescript" +date: 2021-07-12T11:12:32+02:00 +draft: false +snippet_types: +- js +- typescript +--- + +Today I had a .js file that I needed to import into the rest of a TypeScript app but could not convert it to a .ts file. To get around this limitation I added an accompanying .d.ts file. + + +countryConfig.js + +```js +const countries = [ + { + code: 'de', + domainExtension: '.de' + }, + ... +]; + +exports.countries = countries; +``` + +countryConfig.d.ts + +```typescript +interface Country { + code: string; + domainExtension: string; +} + +export const countries: Array; +``` + +app.ts + +```typescript +import countries from './countryConfig' + +... +``` + +source: https://www.typescriptlang.org/docs/handbook/declaration-files/templates/module-d-ts.html diff --git a/old_snippets/update-local-zef-module.en.md b/old_snippets/update-local-zef-module.en.md new file mode 100644 index 0000000..0691fb8 --- /dev/null +++ b/old_snippets/update-local-zef-module.en.md @@ -0,0 +1,26 @@ +--- +title: "update a local zef module" +date: 2021-10-20T20:28:05+02:00 +seo_description: "code snippet explainin how to install raku/zef modules locally" +draft: false +snippet_types: +- raku +- zef +--- + +Lately I've been working locally with raku/zef modules for my CLI apps. +I install them with: + +```shell +$ zef install . +``` + +Turns out you can update a package very similarity. Just bump the version in +the META6.json and run the same command again. + +```shell +$ zef install . +``` + + +[docs](https://github.com/ugexe/zef) diff --git a/old_snippets/update-npm-packages.en.md b/old_snippets/update-npm-packages.en.md new file mode 100644 index 0000000..659a7c6 --- /dev/null +++ b/old_snippets/update-npm-packages.en.md @@ -0,0 +1,33 @@ +--- +title: "update npm packages to latest versions" +seo_description: "How to update the node modules of a project to their latest version" +date: 2022-06-15T09:28:28+02:00 +draft: false +snippet_types: +- npm +- js +- node +--- + +I was doing some housekeeping on a Node.JS project today. Wanted to update all +the dependencies to their latest versions. At first I tried `npm update` but +come to find out that is ment more for upgrading single packages and not +major versions. In the end after some googling I found +[npm-check-updates](https://www.npmjs.com/package/npm-check-updates). + +To upgrade the dependencies of a project without installing anything else I ran: + +```shell +$ npx npm-check-updates -u +``` + +It updated the **package.json** so it must be followed up by a: + + +```shell +$ npm i +``` + +Which will install the new packages and update the **package-lock.json**. + +[source](https://nodejs.dev/learn/update-all-the-nodejs-dependencies-to-their-latest-version) diff --git a/old_snippets/update-pleroma-server.en.md b/old_snippets/update-pleroma-server.en.md new file mode 100644 index 0000000..25ed16f --- /dev/null +++ b/old_snippets/update-pleroma-server.en.md @@ -0,0 +1,31 @@ +--- +title: update pleroma server +seo_description: Hoe to update your Pleroma OTP install quickly and easily +date: 2022-12-04T17:13:12+01:00 +draft: false +snippet_types: +- pleroma +--- + +I always forget how to upgrade my Pleroma servicer when a new version comes out so I'm writing it here. +If you are unsure of what you are doing please consult the +[official docs](https://docs-develop.pleroma.social/backend/administration/updating/). + +My Pleroma instance: [social.travisshears.xyz](http://social.travisshears.xyz) + +Start by sshing into the server and switching to the pleroma user. + +```shell +$ sudo su pleroma -s $SHELL +``` + +Then stop the server request the update, migrate the db and start it again. + +```shell +$ ./bin/pleroma stop +$ ./bin/pleroma_ctl update +$ ./bin/pleroma_ctl migrate +$ ./bin/pleroma daemon +``` + +Boom new version! \ No newline at end of file diff --git a/old_snippets/vim-arglist.en.md b/old_snippets/vim-arglist.en.md new file mode 100644 index 0000000..f0b4cfc --- /dev/null +++ b/old_snippets/vim-arglist.en.md @@ -0,0 +1,52 @@ +--- +title: "super powers of the arg list" +date: 2020-01-11T19:44:49+01:00 +draft: false +snippet_types: ["vim", "search"] +--- + +Vim help: + +> The argument list \*argument-list* \*arglist* + +> If you give more than one file name when starting Vim, this list is remembered +> as the argument list. You can jump to each file in this list. + +If you have been using vim a while you will be comfortable with the buffer list but often it's +full of random files, terminal sessions, and other none file buffers, this is where arglist comes +in. It starts out as list of files that were initially opened when the vim session was launched ex: + +```shell +nvim ./a.txt ./b.txt ./c.txt +``` + +would start vim with three buffers in both arglist and buffer list. You can cycle through the +arglist with files via **:next**, **:prev**. Further files opened will not be automatically added to +the arglist so it's essentially a clean sub list of the buffer list. Helpful commands include +**:rew** to jump back to the first file you edited this session. Also **:all** which opens all +buffers of the arglist in splits. + +Where I find the arglist particularly powerful is for mass file edits. Here is an day to day +example: + +1. get files in questing into the arglist either pipe files to vim or from in vim override initial +arglist. + - from cli +```shell +$ rg -i 'snippet_typ.*vim' --files-with-matches | xargs nvim +``` + + - from inside vim (harder because no autocomplete) +```vim script +:args `rg -i 'snippet_typ.*vim' --files-with-matches` +``` + +1. now lets change all the posts front-matter to draft = true +```vim script +:argdo %s/draft: false/draft: false/g | update +``` +thats it all the files have been modified and saved. Its best to use this kind of thing with +version control so during an interactive git add you can verify each modification. + +For more complex edits I load files into the list a similar way then make quick manual and move to +next file with **:wn** which also saves. diff --git a/old_snippets/vim-fzf-plugin.en.md b/old_snippets/vim-fzf-plugin.en.md new file mode 100644 index 0000000..2ee4048 --- /dev/null +++ b/old_snippets/vim-fzf-plugin.en.md @@ -0,0 +1,36 @@ +--- +title: "vim fzf plugin" +date: 2020-01-30T14:57:50+01:00 +draft: false +snippet_types: ["vim", "search"] +--- + +I've used several fuzzy finder utilities in vim over the years like +[Command T](https://github.com/wincent/Command-T) or +[CtrlP](https://github.com/ctrlpvim/ctrlp.vim). They both have there pluses and +minuses but never found them to be that fast especially with large code bases +I'm often working in. Fzf for me is superior so I was excited to see a plugin +that integrates Fzf so well into vim. Its not just useful for finding files but +works great with buffers, files with git changes, commands, marks, and even +lines in open buffers. + +My vim config for Fzf is as follows: + +```vim script +nnoremap pb :Buffers +nnoremap pf :GFiles +nnoremap pg :GFiles? +nnoremap pm :Marks +nnoremap pc :History: +nnoremap pl :Lines +``` + +This allows me to easily zip around my code base with speed. + +{{< asciicast-with-caption id="296788" title="demo using fzf in vim" >}} + +sources: + +- https://github.com/wincent/Command-T +- https://github.com/ctrlpvim/ctrlp.vim +- https://github.com/junegunn/fzf.vim diff --git a/old_snippets/vim-jumps-fix.en.md b/old_snippets/vim-jumps-fix.en.md new file mode 100644 index 0000000..d3d1ad5 --- /dev/null +++ b/old_snippets/vim-jumps-fix.en.md @@ -0,0 +1,21 @@ +--- +title: "remapping ability to jump" +date: 2020-01-11T13:09:41+01:00 +draft: false +snippet_types: ["vim"] +--- + +Moving efficiently in vim is a massive topic but recently I just wanted to take advantage of the +jump list more but by xQuartz / xterm mac terminal setup meant the default key mappings we being +intercepted as promote / demote pane. Simple remap did the trick + +```vim script +nnoremap i +nnoremap o +``` + +In the following demo I open this very post then navigate to my **.nvimrc** and yank the code +remapping snippet. With the snipped yanked, using this using jump list via **\**, I jump back +to the markdown file I was editing and put. + +{{< asciicast-with-caption id="292978" title="demo of using the jump list" >}} diff --git a/old_snippets/vim-open-file-under-cursor.en.md b/old_snippets/vim-open-file-under-cursor.en.md new file mode 100644 index 0000000..c526552 --- /dev/null +++ b/old_snippets/vim-open-file-under-cursor.en.md @@ -0,0 +1,29 @@ +--- +title: "vim open file under cursor" +date: 2020-03-06T08:00:30+01:00 +draft: false +snippet_types: ["vim"] +--- + +Half my time in the editor I'm not coding, I'm just browsing the file system trying to understand how things are connected. Trying figure out what needs to change in order to complete my task. This module imports this module which imports this module... There are many ways to navigate the file system and read files. Since I primarily code in VIM there are two main ways I navigate. + +One is using the file explorer from plugin, NerdTree. It is great for getting a general overview of folder structure of a project and moving, deleting, or creating new files. Also really good for finding sibling files using the **:NerdTreeFind** command which I have remapped to ****. Where is lacks however is opening a nested import for example. When you want to jump to a different file / module directly. + +This is where the goto file comes in. Using the following commands in conjunction with moving up and down the jump list, navigation is easy. Here is an example where I use the goto command and a few of its variations. + +{{< asciicast-with-caption id="307951" title="demo using vim's goto and jumplist commands" >}} + +The most helpful ones to learn are + +- **\\** goto file, same window +- **\\** goto file, new split +- **\\\** goto file, new tab + +Also don't forget to use the jump list + +- **\** or in my case remapped to **\\** to jump backwards + +Resources: + +- https://vim.fandom.com/wiki/Open_file_under_cursor +- https://github.com/preservim/nerdtree diff --git a/old_snippets/vim-placeholders.en.md b/old_snippets/vim-placeholders.en.md new file mode 100644 index 0000000..20ffc9b --- /dev/null +++ b/old_snippets/vim-placeholders.en.md @@ -0,0 +1,28 @@ +--- +title: "custom placeholders solution" +date: 2020-01-12T00:59:03+01:00 +draft: false +snippet_types: ["vim"] +--- + +This little bit of magic I believe I picked up from watching a Luke Smith video. The point is to +leave placeholders in the form of the text "\<++>" in your code/writing then quickly snap to and +fill them in later. + +```vim script +" placeholder magic +nnoremap /<++"_c4l +nnoremap n l/<++>h +" always fill p reg with <++> +:autocmd VimEnter * :call setreg('p', '<++>') +``` + +1. Thanks to the vim enter hook the magic placeholder text is always in my p register so its easy to put with **\<">\

** +1. Then to jump to the next placeholder and immediately start editing it with a simple **\\** + + +{{< asciicast-with-caption id="293101" title="placeholders demo" >}} + +source: + +- [Luke Smith Youtube Channel](https://www.youtube.com/channel/UC2eYFnH61tmytImy1mTYvhA) diff --git a/old_snippets/vim-ripgrep-custom.en.md b/old_snippets/vim-ripgrep-custom.en.md new file mode 100644 index 0000000..49d916c --- /dev/null +++ b/old_snippets/vim-ripgrep-custom.en.md @@ -0,0 +1,29 @@ +--- +title: "custom ripgrep" +date: 2020-01-11T14:59:13+01:00 +draft: false +snippet_types: ["vim", "search"] +--- + +In the past I used full plugin level text searching solutions the likes of +**:Rg**, **:Grep**, **:Ag** from the [vim grep plugin](https://github.com/yegappan/grep). +Recently I've found it faster and more customizable to just run **:term** do my searching +from there and then opening file under cursor in new split with **\\**. Doing the +searches directly in terminal builds more on all the tricks I've devolved outside of vim world. +However launching terminals all the time is also has it's pain points, so now I've come up with a +simple key mapping to run searches in a new scratch window without having to go full term. + +yank the search term then **\\** pulls up a new scratch buffer with the search pre-filled +but with the ability to still edit and add further customisations. +```vim script +nnoremap s :Sscratch:read ! rg -i " +``` + +here I use the technique to search for all snippet files tagged with vim + +{{< asciicast-with-caption id="293019" title="demo of using the jump list" >}} + +plugins: + +- [vim grep plugin](https://github.com/yegappan/grep) +- [scratch buffer plugin](https://github.com/vim-scripts/scratch.vim/blob/master/plugin/scratch.vim) diff --git a/old_snippets/vim-spelling.en.md b/old_snippets/vim-spelling.en.md new file mode 100644 index 0000000..9063b86 --- /dev/null +++ b/old_snippets/vim-spelling.en.md @@ -0,0 +1,31 @@ +--- +title: "vim spelling" +date: 2020-03-05T10:41:42+01:00 +draft: false +snippet_types: ["vim"] +--- + +Exampled by the errors in my blog posts, spelling is not my strength. Never was. Always felt focusing on spelling limited my vocabulary. So I rely on tech. From the first red squiggly line in MS Word to now. + +Web UI base tools: + +- [Grammerly](https://app.grammarly.com/) +- [Language tool](https://languagetool.org/) + +The problem with these is I have to leave the terminal. Tech Motto: Never leave the terminal. So I use vim's built-in. It is surprisingly good. + +**In action:** + +{{< asciicast-with-caption id="307766" title="demo using vim's builtin spell check" >}} + +**Config:** + +I write in both English and German so I have key maps for both + +```vim script +nnoremap se :setlocal spell spelllang=en +nnoremap sd :setlocal spell spelllang=de +nnoremap sn :setlocal nospell +``` + +Other spelling and writing tools: https://www.are.na/travis-shears/writing-bqnwud28d50 diff --git a/old_snippets/vim-substitute.en.md b/old_snippets/vim-substitute.en.md new file mode 100644 index 0000000..84f071d --- /dev/null +++ b/old_snippets/vim-substitute.en.md @@ -0,0 +1,33 @@ +--- +title: "replae with spell and nohl" +date: 2020-01-11T12:57:46+01:00 +draft: false +snippet_types: ["vim"] +--- + +When is the last time you used the **\** key in vim? May not know what it even does? + +The vim help pages lists it as substitute: + +``` +4.2 Substitute *:substitute* + *:s* *:su* +:[range]s[ubstitute]/{pattern}/{string}/[flags] [count] +``` + +In real use I find this visual selection putting or using **\** along with movement keys much +better for substituting text. This leave the s key in normal mode open to be remapped! Here are two +mappings I have so far: + +- turn off highlighting with a quick **\\** +```vim script +nnoremap ss :noh +``` + +- turn on spell check in a given language +```vim script +nnoremap se :setlocal spell spelllang=en +nnoremap sd :setlocal spell spelllang=de +``` + + diff --git a/old_snippets/vim-window-resize.en.md b/old_snippets/vim-window-resize.en.md new file mode 100644 index 0000000..573a0a5 --- /dev/null +++ b/old_snippets/vim-window-resize.en.md @@ -0,0 +1,19 @@ +--- +title: "resizing vim windows with arrow keys" +date: 2020-01-11T12:50:53+01:00 +draft: false +snippet_types: ["vim"] +--- + +If your comfortable in vim you only use the j,h,k,l movement keys leaving the arrow keys open to do +something more useful like window resizing! + +```vim script +" Remap arrow keys to resize window +nnoremap :resize -2 +nnoremap :resize +2 +nnoremap :vertical resize -2 +nnoremap :vertical resize +2 +``` + +{{< asciicast-with-caption id="292983" title="demo window resizing" >}} diff --git a/old_snippets/vs-code-tasks.en.md b/old_snippets/vs-code-tasks.en.md new file mode 100644 index 0000000..9a3960d --- /dev/null +++ b/old_snippets/vs-code-tasks.en.md @@ -0,0 +1,57 @@ +--- +title: "vs code tasks" +seo_description: "How to configure VS Code with custom tasks" +date: 2021-11-12T14:44:37+01:00 +draft: false +snippet_types: +- vscode +--- + +For the past years whenever I needed to lint or test a single file I would: + +- right click it in the navigation tree +- copy relative path +- open the built in terminal with Command-J +- Control-R to search recent commands for 'npm run test' or 'npm run lint' +- Select old path in the command and paste with path I want to test +- hit Enter +- wait + +Over time doing this adds up. Recently I stumbled upon VS Code Tasks and found +a way to speed things up. By configuring the following tasks.json: + +```json +{ + "version": "2.0.0", + "tasks": [ + { + "type": "shell", + "label": "test single xxxxx file", + "command": "npm run test -- ${file} --coverage=false", + "problemMatcher": [] + }, + { + "type": "shell", + "label": "lint and fix single file xxxxx file", + "command": "./node_modules/.bin/eslint ${file} --fix", + "problemMatcher": [] + }, + ] +} +``` + +Now to test the file that I'm currently working on I: + +- Command-Shift-P to bring up commands input +- Usually 'Tasks: Run Task' is the last run command so just press Enter, In the + case it is not typing 'Task' is enough to bring it up +- Then the lint and test tasks appier in the drop down and all I have to do is hit + Enter again +- wait +- profit + +Don't know why I held out on customizing VS Code so long! Wonder what other time saving +features there are? + + +source: [vs code docs](https://code.visualstudio.com/Docs/editor/tasks#_custom-tasks) diff --git a/old_snippets/watch-command.en.md b/old_snippets/watch-command.en.md new file mode 100644 index 0000000..864034e --- /dev/null +++ b/old_snippets/watch-command.en.md @@ -0,0 +1,44 @@ +--- +title: "watch command" +date: 2020-01-27T15:47:22+01:00 +draft: false +snippet_types: ["watch"] +--- + +Currently at work we occasionally have to redeploy pods that have the same image tag but different +SHA hashes. The problem stems from the k8s deployments not picking up the changes and thus a +manually killing of the production pods is required. When they are restarted the SHA is checked and +new image pulled, during this process I like to watch along at the running pods to make sure things +are going smoothly. + +I use to use the built in watch argument of k8s get pods command **-w**: + + +```shell +$ kubectl get pods -n shop -w +``` + +But this produces a really cluttered terminal output so I started just running the command on loop + +```shell +$ while true; do; kubectl get pods -n shop ; sleep 5; done +``` + +Then a coworker showed me the watch command which has a much cleaner interface and outputs to a much +clearer less/more like non scrolling output. + + +```shell +$ watch -n 5 'kubectl get pods -n shop' +``` + +The watch command is availble via brew + +```shell +$ brew install watch +``` + +source: + +https://gitlab.com/procps-ng/procps/blob/master/watch.c + diff --git a/old_snippets/who-is-using-that-port.en.md b/old_snippets/who-is-using-that-port.en.md new file mode 100644 index 0000000..c81185f --- /dev/null +++ b/old_snippets/who-is-using-that-port.en.md @@ -0,0 +1,16 @@ +--- +title: "who is using that damn port? (mac)" +date: 2020-01-11T04:22:55+01:00 +draft: false +snippet_types: ["lsof"] +--- + +```shell +$ sudo lsof -i:3000 +``` +Launching a process and it's complaining about port being in use? With 100 shells running and os apps this can be hard to track down. Run this to get an idea of what to kill. + +source: + +[superuser](https://superuser.com/questions/304726/macos-what-process-is-using-port-8888) + diff --git a/old_snippets/wipe-dynamodb-via-terraform.md b/old_snippets/wipe-dynamodb-via-terraform.md new file mode 100644 index 0000000..93ce759 --- /dev/null +++ b/old_snippets/wipe-dynamodb-via-terraform.md @@ -0,0 +1,62 @@ +--- +title: "wipe dynamodb table via terraform" +date: 2021-09-17T13:38:32+02:00 +draft: false +snippet_types: +- dynamodb +- aws +- terraform +--- + +Recently I came across the problem of how to wipe a dynamodb table. +I though there would be an ui button for this or at lease an api/sdk method +but from what I found the only way it to individually delete the items by key. This +method can be batched up to 10 items per call but is still very slow and incurs write +costs. + +Since I'm used Terraform to create the table in the first place I thought I'll just destroy it +and remake it... Then came the problem of not wanting to destroy everything but simply remake the +table. After some digging in Terraform docs I found a pretty clean solution. + + +**main.tf** + +``` +module "dynamodb_table" { + source = "terraform-aws-modules/dynamodb-table/aws" + + name = "poverty-line-county-gps-map" + hash_key = "id" + stream_enabled = false + + attributes = [ + { + name = "id" + type = "S" + } + ] + + tags = { + Terraform = "true" + Project = "poverty_line" + } +} +``` + +In this case I wanted to remake "poverty-line-county-gps-map". To find out what +exactly it is called I ran terraform state: + +```shell +$ terraform state list +aws_sqs_queue.dead_letter_queue +aws_sqs_queue.terraform_queue +module.dynamodb_table.aws_dynamodb_table.this[0] +``` + +from here the resource can be remake like: + +```shell +$ terraform apply -replace="module.dynamodb_table.aws_dynamodb_table.this[0]" +``` + +Happy times remaking things. πŸ‘‹ diff --git a/old_snippets/wipe-git-commit-times.en.md b/old_snippets/wipe-git-commit-times.en.md new file mode 100644 index 0000000..50c317c --- /dev/null +++ b/old_snippets/wipe-git-commit-times.en.md @@ -0,0 +1,22 @@ +--- +title: "wipe git commit times" +seo_description: "Snippet on how to remove timestamps from a git repo" +date: 2022-01-14T10:59:50+01:00 +draft: false +snippet_types: +- git +--- + +Some time you don't want everyone to know exactly when you committed. +This command will wipe the time stamps and set them all to today at 0:00h. + +``` +git filter-branch --env-filter ' + GIT_AUTHOR_DATE="$(date +%Y-%m-%d) 00:00:00+0000" + GIT_COMMITTER_DATE="$(date +%Y-%m-%d) 00:00:00+0000" + ' -- --all +``` + +It works best on fresh repos just be for pushing to remote for the first timee. + +[source](https://exceptionshub.com/remove-time-and-time-zone-of-all-git-commits-but-keep-date.html) diff --git a/old_snippets/wipe-mongo-collection.en.md b/old_snippets/wipe-mongo-collection.en.md new file mode 100644 index 0000000..8c535c8 --- /dev/null +++ b/old_snippets/wipe-mongo-collection.en.md @@ -0,0 +1,35 @@ +--- +title: "wipe a mongo collection" +date: 2020-06-29T10:32:01+02:00 +draft: false +snippet_types: ["mongo"] +--- + +Currently I run a shared mongo instance in my k8s cluster used by a bunch of my side projects. +Every once in a while I have to manually execute mongo commands this is how I do so. + +Manually ssh into the pod: + +```shell +$ kubectl exec -it shared-mongo-xxxxxxxxxx-xxxxx -- /bin/bash +``` + +Then launch the mongo shell and hack away: + +```shell +$ mongo +> db2 = db.getSiblingDB('coolDB') +coolDB +> db2.getCollectionNames() +[ "coolThings" ] +> db2.coolThings.count() +666 +> db2.coolThings.remove({}) +WriteResult({ "nRemoved" : 666 }) +> db2.coolThings.count() +0 +``` + +source: +- [stackoverflow -- mongodb-how-to-delete-all-records-of-a-collection-in-mongodb-shell](https://stackoverflow.com/questions/46368368/mongodb-how-to-delete-all-records-of-a-collection-in-mongodb-shell) +- [stackoverflow -- how-can-i-list-all-collections-in-the-mongodb-shell](https://stackoverflow.com/questions/8866041/how-can-i-list-all-collections-in-the-mongodb-shell)