[{"title":"Heuristics for effective software\u00a0development","url":"heuristics-for-effective-software-development.html","tags":"engineering, teams, organisations ","body":"\u201cWithout psychological safety, respect, and trust, none of the following is\u00a0possible\u201d \u201cThe best ways to work are collaborative. Negotiation is not collaboration. Isolated individuals making heroic efforts are never as effective as collaborative groups. We get the best results when customers, business people, and developers literally work\u00a0together.\u201d Blog\u00a0post"},{"title":"Move a file between git\u00a0branches","url":"move-a-file-between-git-branches.html","tags":"git ","body":"Checkout the branch where you want the file to by copied to,\u00a0then: git checkout \u003cother-branch\u003e \u003crelative-file-path or directory\u003e Use a commit hash to pull files from any\u00a0commit Multiple files and directories can be\u00a0specified Overwrites the\u00a0file SO"},{"title":"Start with Finance to transform IT","url":"start-with-finance-to-transform-it.html","tags":"engineering, organisations, business, corporations ","body":"Zwischenzugs blog post arguing that to achieve a significant change in an organisation you need need\u00a0to: Get\u00a0funding. Persuade the finance department to give you\u00a0money. Understand what they\u00a0value. Understand their cash\u00a0flows. Understand how and why customers or clients part with their\u00a0money. Understand business constraints (legal, reg,\u00a0operating). The five whys approach to problem\u00a0solving \u201cConsider a deeper structural cause of cultural problems in change management: how money flows through the\u00a0organisation.\u201d \u201cIf you want to transform IT in an enterprise, start with finance. If you can crack that, you\u2019ve a chance to succeed with sec and controls functions. If you don\u2019t know why it\u2019s important to start with finance, you\u2019ll definitely fail\u00a0\u201c"},{"title":"The Worst Volume Control UI","url":"the-worst-volume-control-ui.html","tags":"ui ","body":"Hilarious article from UI Collecitve showing the results of a competition to design the worst possible volume control interface. \ud83d\ude02 \ud83d\ude02\u00a0\ud83d\ude02"},{"title":"Daughter","url":"daughter.html","tags":"family ","body":"Yesterday my daughter asked me to write a page in her\u00a0Freundebuch."},{"title":"Moral\u00a0tyranny","url":"moral-tyranny.html","tags":"oppression, consent ","body":"Of all tyrannies, a tyranny sincerely exercised for the good of its victims may be the most oppressive. It would be better to live under robber barons than under omnipotent moral\u00a0busybodies. The robber baron\u2019s cruelty may sometimes sleep, his cupidity may at some point be satiated; but those who torment us for our own good will torment us without end for they do so with the approval of their own conscience. They may be more likely to go to Heaven yet at the same time likelier to make a Hell of\u00a0earth. This very kindness stings with intolerable insult. To be \u201ccured\u201d against one\u2019s will and cured of states which we may not regard as disease is to be put on a level of those who have not yet reached the age of reason or those who never will; to be classed with infants, imbeciles, and domestic\u00a0animals. - C. S.\u00a0Lewis"},{"title":"Upgrading Cryptographic\u00a0Libraries","url":"upgrading-cryptographic-libraries.html","tags":"hashing, versioning ","body":"Blog post about how to make it easier to upgrade a cryptographic or hashing\u00a0library. Django encodes passwords for database storage like\u00a0this: \u003calgorithm\u003e$\u003citerations\u003e$\u003csalt\u003e$\u003chash\u003e Interestingly, Giovanni Collazo emphasises that we should design systems for change, which initially seems pretty close to contradicting YAGNI, but the answer lies in the\u00a0context."},{"title":"Startup Engineering\u00a0Lessons","url":"startup-engineering-lessons.html","tags":"startup, engineering ","body":"Lessons of a startup engineer is a great blog post from Todd Wolfson. So great that I might write notes on it like I would a\u00a0book. archive"},{"title":"Poisson\u2019s\u00a0Equation","url":"poissons-equation.html","tags":"math ","body":"A great article introducing and showing the relevance of Poisson\u2019s\u00a0Equation."},{"title":"Thomas\u00a0Aquinas","url":"thomas-aquinas.html","tags":"theology, history ","body":"His works in English and\u00a0Latin."},{"title":"Edward Hopper\u2019s\u00a0Paintings","url":"edward-hopper-s-paintings.html","tags":"art, painting, photography ","body":"archive"},{"title":"Some experiences can be taught, but some must be\u00a0lived","url":"some-experience-can-be-taught-some-needs-to-be-lived.html","tags":"meta, advice ","body":"\u201cI have learnt that failure is my greatest\u00a0teacher\u201d - Georges\u00a0St-Pierre"},{"title":"Georges St-Pierre Training\u00a0Meta","url":"georges-st-pierre-training-meta.html","tags":"sport, meta, training ","body":"Contains too much conjecture at the start, but becomes more\u00a0substantial. At high levels of competition the difference between \u201cgood\u201d and \u201cgreat\u201d is partly determined by how much pain you are willing to\u00a0experience. There are great benefits from training in a secondary\u00a0discipline. Anderson Silva is a ballet\u00a0dancer. Conor McGregor does \u201cmovement\u00a0training\u201d. Israel Adesanya dances\u00a0competitively. Georges St-Pierre practices\u00a0gymnastics. archive"},{"title":"I would like to take some time to explore what it means to be\u00a0alive","url":"i-would-like-to-take-some-time-to-explore-what-it-means-to-be-alive.html","tags":"life ","body":"."},{"title":"\u201cBelieve half of what you see and now\u2019t of what you\u00a0hear.\u201d","url":"believe-half-.html","tags":"quote ","body":"source"},{"title":"Django for Startup\u00a0Founders","url":"django-for-startup-founders.html","tags":"django, saas, startups, python ","body":"Better read this article archive"},{"title":"Alfie\u00a0Solomons","url":"alfie-solomons.html","tags":"movie, youtube, peaky-blinders, humanity ","body":"A series of scenes showing the character of Alfie Solomons from Peaky\u00a0Blinders. movie"},{"title":"Bifurcation\u00a0Theory","url":"bifurcation-theory.html","tags":"math, chaos ","body":"Rabbits, fluid convection, the Mandelbrot set and lots of others things too. Also known as bifurcation\u00a0theory. The video shows how the Feigenbaum Constant is defined. It\u2019s a fundamental constant I hadn\u2019t come across before -\u00a04.6692.."},{"title":"Apple\u2019s iCloud+ \u201cVPN\u201d","url":"apple-s-icloud-vpn-.html","tags":"apple, onion, vpn, icloud ","body":"article \u201cAn Apple onion router. The routing uses two hops; Apple provides the first, and independent third parties (not yet specified) provide the\u00a0second.\u201d \u201cIn one move, Apple has taken onion routing from a specialized tool for hackers to something that will be in daily\u00a0use.\u201d"},{"title":"Rich","url":"rich.html","tags":"python, console, shell ","body":"python -m rich for a\u00a0demo Cool Python module to handle terminal output with debugging and logging features. It can even record stack trace errors to\u00a0html. repo demo\u00a0videos"},{"title":"Practice","url":"practice.html","tags":"proverb ","body":"An amateur practices until they can play it correctly, a professional practices until they can\u2019t play it\u00a0incorrectly."},{"title":"Vim\u00a0Sneak","url":"vim-sneak.html","tags":"vim, plugin ","body":"Invoked with s followed by 2\u00a0chars. S goes\u00a0backwards. F, f, T, and t are enabled to work across\u00a0lines. Jump back with \u003cC-O\u003e ; or , to go to next/previous highlighted\u00a0text. 5sxy searches for the next instance of xy within 5\u00a0lines. 3dzqt delete up to the third instance of qt. repo"},{"title":"Axiom","url":"axiom.html","tags":"math ","body":"A basic statement that is assumed to be true. E.g: \u201cA straight line can be drawn between any two\u00a0points\u201d"},{"title":"Foxes and\u00a0Hedgehogs","url":"foxes-and-hedgehogs.html","tags":"meta, classification, thinking ","body":"wikipedia Hedgehogs know one big thing, Foxes know many\u00a0things. A classification system or mental model for writers and\u00a0thinkers."},{"title":"Pair programming using\u00a0Vim","url":"pair-programming-using-vim-tmux-ssh.html","tags":"pair-programming, vim, tmux, ssh ","body":"blog\u00a0post"},{"title":"Man swallowed by\u00a0whale","url":"man-swallowed-by-whale.html","tags":"whale ","body":"A lobster diver was swallowed by a humpback whale. Then it spit him out. Humpback whales don\u2019t have teeth, and have reduced forward vision when they open their mouths to\u00a0feed. article archive"},{"title":"Git LFS","url":"git-lfs-2.html","tags":"git, lfs, github-pages ","body":"Key\u00a0commands git lfs install (also\u00a0uninstall) git lfs track \"**/*.mp4\" git lfs ls-files git lfs status track just updates the .gitattributes file. Commit the .gitattributes file with the tracking configuration before committing the large\u00a0files. status or ls-files should show the large files in question before you push the commit that starts tracking the large\u00a0files."},{"title":"Your .bashrc doesn\u2019t have to be a\u00a0mess","url":"your-bashrc-doesn-t-have-to-be-a-mess.html","tags":"bash, shell, zsh ","body":"Blog post demonstrating how to split a .bashrc file into \u201csubmodules\u201d and keep it\u00a0maintainable. BASHRC_D=~/.config/bashrc.d [[ -r ${BASHRC_D}/bootstrap ]] \u0026\u0026 . ${BASHRC_D}/bootstrap for file in ${BASHRC_D}/*.sh; do [[ -r $file ]] \u0026\u0026 . $file done unset file"},{"title":"John Kelly finishing the 2017 Barkley\u00a0Marathons.","url":"barkley-finisher-15-john-kelly.html","tags":"movie, running, barkley, youtube ","body":"The exhausted moments after running for almost 60 hours through impassable\u00a0terrain: movie"},{"title":"A Project of One\u2019s\u00a0Own","url":"paul-graham-a-project-of-ones-own.html","tags":"paul-graham, meta, learning, school ","body":"An essay called A project of ones own by Paul\u00a0Graham. being pushed into a task vs being\u00a0pulled skating vs\u00a0walking"},{"title":"Performance Optimizations for the shell\u00a0prompt","url":"performance-targets.html","tags":"shell ","body":"Something should happen within 100ms of the users input in order to maintain a feeling of\u00a0responsiveness. If something happens within 50ms of the trigger event, it will feel almost\u00a0instant. Also, checkout hyperfine for performance\u00a0benchmarking. Lots of useful tips in the original blog post."},{"title":"Vim spellcheck\u00a0commands","url":"vim-spell.html","tags":"vim ","body":"[s or ]s \u2192 go to next/previous bad\u00a0word z= \u2192 list of\u00a0suggestions zg \u2192 add word to good word\u00a0list zug \u2192 remove word from good word\u00a0list zw \u2192 add word to bad word\u00a0list zuw \u2192 remove word from bad word\u00a0list"},{"title":"Grep only inside particular\u00a0files","url":"grep-particular-files-only.html","tags":"grep, linux ","body":"grep -inr --include package.json \\ \u0027shortcut\": {\u0027 . -A 3 It\u2019s the --include flag that does the important\u00a0part. -i \u2192 case\u00a0insensitive -n \u2192 print line\u00a0number -r \u2192 recursive from starting\u00a0page . \u2192 start in current\u00a0directory -A 3 \u2192 print the 3 lines below the found\u00a0line"},{"title":"View a List of Keyboard Mappings in\u00a0Vim","url":"vim-debug-mapping.html","tags":"vim ","body":":map \u2192 show a list of the current keyboard mappings for normal, visual, select and operator pending\u00a0modes. :map! \u2192 show a list of the current keyboard mappings for insert and command-line\u00a0mode Top put all the mappings into a convenient text\u00a0file: :redir! \u003e vim_maps.txt :map :map! :redir END source another\u00a0source"},{"title":"Note Taking and Knowledge\u00a0Systems","url":"note-taking-and-knowledge-systems.html","tags":"zettelkasten, notes, knowledge-system ","body":"This blog post arrives at the conclusion that the only way to take good paper notes is to organise them chronologically, and only summarise the content once the notebook is\u00a0full. Keep it simple, trust your\u00a0intuitions. simple \u2192 robust \u2192 reliable Also, it links to zettelkasten.de/the-archive"},{"title":"Training \u2192 Knowledge \u2192 Confidence \u2192\u00a0Victory","url":"trainging-knowledge-confidence-victory.html","tags":"quote, caesar, wisdom ","body":"\u201cWithout training, they lacked knowledge. Without knowledge, they lacked confidence. Without confidence, they lacked\u00a0victory.\u201d - Julius\u00a0Caesar"},{"title":"Forward\u00a0Email","url":"email-forwarding.html","tags":"email ","body":"I know about ImprovMX, which used to be great because you could do a lot for free, but now you only get 1 domain for\u00a0free. ForwardEmail are 3 times cheaper than ImprovMX, and I have 2 domains forwarding email. It\u2019s not particularly private, but I can send and recieve from a domain, for\u00a0free."},{"title":"Nested Auto Commands for Overriding\u00a0Colorschemes","url":"modifying-vim-colorschemes-correctly.html","tags":"vim ","body":"A snippet detailing how to use nested auto commands to apply custom modifications when a colorscheme is loaded. Perhaps this will stop me :e-ing so\u00a0frequently."},{"title":"Vim\u00a0Snippets","url":"vim-snippets.html","tags":"vim, netrw ","body":"A useful collection of gists by Romain\u00a0Lafourcade A gist about netrw."},{"title":"See where Vim is setting an\u00a0option","url":"where-was-a-setting-set-.html","tags":"vim ","body":"See where an option was set in vim using the following\u00a0command: :verbose set textwidth?"},{"title":"Globbing","url":"globbing.html","tags":"linux ","body":"???? \u2192 4\u00a0chars * \u2192 any number of\u00a0chars [:upper:] \u21d4 [A-Z] same for [:lower:] and [:digit:] [:alpha:] \u21d4 [a-zA-Z] [:alnum:] \u21d4 [a-zA-Z0-9] ls -l [a-d] \u2192 part of a\u00a0range ^ and $ works like in\u00a0regex la a*.{doc,docx} \u2192 OR ls a*.(doc|docx) \u2192 OR"},{"title":"Vimscript\u00a0functions","url":"create-custom-functions-in-vim.html","tags":"vim ","body":"Create a custom command and function to create a new file in\u00a0vim. command! -nargs=1 Ms call s:NewFile(\u003cq-args\u003e)` function! s:NewFile(fp) echom a:fp execute \"e \" . \"~/foo/bar/\" . a:fp . \".ext\" endfunction Useful\u00a0help: :h %:h \u2192 filename\u00a0modifiers :h expand() \u2192 expand wildcards, including filename\u00a0modifiers question on SO"},{"title":"Better Text\u00a0Objects","url":"vim-text-objects.html","tags":"vim ","body":"target function\u00a0arguments more types of\u00a0object consistent searching/jumping if you\u2019re not inside the thing you\u2019re\u00a0targeting jump forward or\u00a0backward look for the nth\u00a0occurrence select white space around/inside\u00a0object Github Article about a\u00a0plugin"},{"title":"Delete stuff in Vim without leaving insert\u00a0mode:","url":"delete-from-vim-insert-mode.html","tags":"vim ","body":"\u003cC-h\u003e - same as\u00a0backspace \u003cC-w\u003e - delete previous\u00a0word \u003cC-u\u003e - delete everything before cursor (on same\u00a0row) \u003cC-d\u003e or \u003cC-t\u003e - (un)indent a\u00a0row \u003cC-e\u003e - delete next word (create a mapping in\u00a0vimrc)"},{"title":"Global\u00a0Aliases","url":"global-aliases.html","tags":"alias, linux ","body":"If you want to alias a bunch of arguments for a command, use global\u00a0aliases: alias -g foo=\"some complicated options\" grep some complicated options becomes: grep foo https://www.thorsten-hans.com/5-types-of-zsh-aliases/"},{"title":"Vim register for yanked\u00a0text","url":"vim-yanked-text-buffer.html","tags":"vim, linux, text ","body":"It\u2019s annoying when you delete something and overwrite your yanked\u00a0text. Use numbered registers! \"0 to \"9 \"0 contains the most recent yank. \"1 contains the most recent deleted\u00a0text \"0p - paste the most recent yank, even if you deleted something after yanking\u00a0it"},{"title":"ChezMoi\u00a0shortcuts","url":"chezmoi-shortcuts.html","tags":"dotfiles, alias ","body":"Chezmoi is a great tool for managing dotfiles. This is a shortcut to update the source state based on local\u00a0changes. chezmoi status | cut -c 4- | xargs -I % -p sh -c \u0027chezmoi add ~/%\u0027 Github"},{"title":"Sleep","url":"sleep-is-good.html","tags":"sleep, lifestyle ","body":"\u201cIt enhances your memory and makes you more creative. It makes you look more attractive. It keeps you slim and lowers food cravings. It protects you from cancer and dementia. It wards off colds and the flu. It lowers your risk of heart attacks and stroke, not to mention diabetes. You\u2019ll even feel happier, less depressed, and less\u00a0anxious.\u201d Why We Sleep by Dr. Matt\u00a0Walker"},{"title":"Bash Strict\u00a0Mode","url":"bash-strict-mode.html","tags":"bash, linux ","body":"How to write robust bash\u00a0scripts: Bash Strict\u00a0Mode"},{"title":"How to write an About\u00a0Page","url":"how-to-write-an-about-page.html","tags":"writing ","body":"An often recommended blog post by Kaleigh Moore about writing a good about\u00a0page."},{"title":"Domain Name\u00a0Registrars","url":"domain-name-registrars.html","tags":"web ","body":"https://namecheap.com\u00a0(cheap) https://instantdomainsearch.com\u00a0(variants) https://iwantmyname.com (tld\u00a0comparison)"},{"title":"The Honest Troubleshooting Code of\u00a0Conduct","url":"honest-troubleshooting-code-of-conduct.html","body":"blog\u00a0post"},{"title":"Linux Filesystem Hierarchy\u00a0Standard","url":"linux-etsy-dir.html","tags":"linux, filesystem ","body":"/etc (etsy) \u2192 \u201cetcetera\u201d or \u201ceditable text config\u201d \u2192 a place to put config\u00a0files. Originally, the root directory had /boot for booting, /dev for devices\u2026 One dir for each type of thing. But this put config in many places. so etc/ became\u00a0convention Filesystem Hierarchy\u00a0Standard fhs-2.3"},{"title":"Browser\u00a0Security","url":"browser-security.html","tags":"xss, cors, http ","body":"Blog post about browser/Web-app security,\u00a0including: CSRF CORS HTTP Security\u00a0Headers"},{"title":"HTML\u00a0Templates","url":"html-templates.html","tags":"html, jam ","body":"wickedtemplates.com cruip.com https://versoly.com/templates"},{"title":"Linus\u00a0Torvalds","url":"interview-with-linus-torvalds.html","tags":"linux, interview, linus ","body":"From an Interview: I don\u2019t want to claim that programming is an art, because it really is mostly just about \u2018good engineering\u2019. I\u2019m a big believer in Thomas Edison\u2019s \u2018one percent inspiration and ninety-nine percent perspiration\u2019 mantra. It\u2019s almost all about the little details and the everyday\u00a0grunt-work. But there is that occasional \u2018inspiration\u2019 part, that \u2018good taste\u2019 thing that is about more than just solving some problem - solving it cleanly and nicely and yes, even\u00a0beautifully."},{"title":"Remote Procedure\u00a0Calls","url":"rpc.html","tags":"rpc, linux ","body":"A RPC is when an executable causes a procedure (subroutine) to execute on another computer, It\u2019s coded as if it were a normal (local) subroutine. You don\u2019t explicitly code the details for the remote interaction. You write the same code whether the subroutine is local or\u00a0remote."},{"title":"","url":"useful-blog.html","tags":"linux, shell, fzf, workflow, zsh, bash, builtin ","body":"Just found a really useful blog Interesting discussion about the difference between builtins and\u00a0executables, Nice examples of using fzf to improve workflows."},{"title":"lsblk","url":"lsblk-command.html","tags":"unix, cli ","body":"lsblk is a command to get info about connected\u00a0devices. Used when attaching\u00a0drives."},{"title":"Ranger File\u00a0Manager","url":"ranger-file-manager.html","tags":"ranger, unix, vim, tools ","body":"A console based file manager with vi key\u00a0bindings. Install it with brew install ranger Launch it with ranger"},{"title":"Vim\u00a0Regex","url":"vim-regex.html","tags":"vim, regex ","body":"This is a great article about using regular expressions in\u00a0Vim: marcelfischer.eu/blog/2019/checkbox-regex/"},{"title":"All Known Locations of an\u00a0Executable","url":"where-command.html","tags":"unix, macos, cli, bash ","body":"where \u003cexecutable\u003e See a list of all builtin commands man where"},{"title":"alias to\u00a0real","url":"alias-real.html","tags":"macos, linux, cli, bash ","body":"Make aliased files the real\u00a0file for f in $(find . -type l -maxdepth 1); do cp --remove-destination $(readlink $f) $f; done;"},{"title":"Reorganize tmux\u00a0windows","url":"tmux-window-reorg.html","tags":"tmux, macos, linux, cli ","body":"swap-window -s 3 -t 1"},{"title":"vim save\u00a0sudo","url":"vim-save-sudo.html","tags":"vim, macos, linux ","body":"Save (write) a (read only) Vim file with sudo when you opened it without\u00a0sudo-ing: :w !sudo tee % \u003e /dev/null"},{"title":"The trouble with climbing higher is that eventually you lose sight of the\u00a0ground.","url":"climbing-higher.html","tags":"advice, thoughts, meta ","body":"."},{"title":"Broot","url":"broot.html","tags":"broot, macos, cli ","body":"Broot is a tool that shows the contents of a directory on one screen, even its got lots of files or\u00a0sub-directories."},{"title":"Adding Keyboard\u00a0Navigation","url":"adding-keyboard-navigation.html","tags":"blog, jam, jquery ","body":"I added keyboard navigation to my blog and it works really well. Now I find myself trying to use the same shortcuts on other\u00a0sites."},{"title":"Github\u00a0Actions","url":"github-actions-blog.html","tags":"github, blog ","body":"I should see if I can use GitHub actions to generate html from markdown and run some shell and python\u00a0scripts."},{"title":"","url":"socially-acceptable-mistakes.html","tags":"meta, thinking, advice ","body":"Its more socially acceptable to make mistakes and errors of omission than\u00a0commission."},{"title":"`du` is a tool for showing disk\u00a0usage.","url":"du-command.html","tags":"cli, unix, macos ","body":"There is a similar tool, with a list of other similar tools here"},{"title":"Safe Bash\u00a0Scripting","url":"safe-bash-scripting.html","tags":"bash ","body":"An example of a safe, good, robust bash file\u00a0skeleton."},{"title":"Running a Binary in\u00a0Debian","url":"running-a-binary-in-debian.html","tags":"debian, binary, path ","body":"I was running a binary in Debian that was complaining about an environment variable not existing. I moved the binary into a $PATH directory and logged in as a sudo user. Why did this solve the\u00a0problem?"},{"title":"Creating\u00a0Slowly","url":"creating-slowly.html","tags":"meta, thinking, advice ","body":"As a hacker, or creator, or whatever the best label is, I always want to create something (usually code) and have it\u00a0finished. But a strange creativity and productivity boost comes from dabbling, dipping in and\u00a0out. I think that if the technical challenges aren\u2019t too hard, then the main criteria for success is\u00a0creativity. Creativity needs time away from the project, and sleep, to bubble up and let ideas\u00a0grow. Ultimately, the most successful path is usually the most interesting, because success has more consequences than failure. \u201cInteresting\u201d requires elements of novelty and surprise, and without creativity these elements can\u2019t flourish.\u00a03/n Dabbling results in more creativity than 6+ hours of strenuous work, and is more likely to give you satisfying\u00a0results."},{"title":"Arrow syntax in\u00a0bash","url":"arrow-syntax-in-bash.html","tags":"bash, syntax ","body":"bar \u003c\u003c foo bar will stop reading input when it reached\u00a0\u201cfoo\u201d. bar \u003c\u003c\u003c \"foo\" foo is all the input. bar wont run\u00a0interactively. bar \u003c \u003c(foo:list) process subscription. Kind of like piping in the output of multiple\u00a0commands. Stack\u00a0Overflow"},{"title":"Pretty print JSON","url":"pretty-print-json-in-typescript.html","tags":"typescript, json, syntax ","body":"console.info(`${JSON.stringify(foo, null, 2)}`);"},{"title":"Useful\u00a0Business","url":"useful-business.html","tags":"entrepreneur, saas ","body":"analystsnow.com looks like a really useful\u00a0business."},{"title":"Frantic\u00a0Distraction","url":"frantic-distraction.html","tags":"meta, thinking ","body":"Frantic distraction via productive procrastination is exhausting, and\u00a0useful."},{"title":"Rearrange splits in\u00a0Vim","url":"vim-split-rearranging.html","tags":"vim ","body":"\u003cC-w\u003ex - swap buffers, but keep arrangement the\u00a0same \u003cC-w\u003eH - make the current split cover the left of the\u00a0screen. J, K, L covers the bottom, top, right of the\u00a0screen blog\u00a0post stack\u00a0overflow"},{"title":"Pelican Plugin\u00a0Guide","url":"pelican-plugin-guide.html","tags":"pelican, plugin, guide ","body":"A guide about writing plugins for\u00a0Pelican. Thanks\u00a0@geographeur"},{"title":"Read and Write the Same File in\u00a0Bash","url":"read-and-write-same-file.html","tags":"shell, pipe, syntax, bash ","body":"I tried to read and write the same file in a pipeline, and got caught out by a race condition (why is the file empty?!). Do this\u00a0instead: some_script \u003c file \u003e smscrpt.$$ \\ \u0026\u0026 mv smscrpt.$$ file || rm smscrpt.$$ || removes the temporary file if it\u00a0errors. $$ is the process ID and ensures that you always have a unique temporary file\u00a0name."},{"title":"JSON\u00a0tools","url":"json-tools.html","tags":"json ","body":"jj - A stream editor jq - A json processor python -m json.tool I like jq for pretty printing JSON output, jj for making JSON pretty or\u00a0condensed. This was really useful when optimizing the search index for this\u00a0blog."},{"title":"Docker\u00a0Commands","url":"docker-commands.html","tags":"docker ","body":"docker run -d ... docker logs -f \u003cID\u003e docker run -it ... docker run -itd docker container attach \u003cID\u003e \u003cC-p\u003e\u003cC-q\u003e -\u003e detach from container interactively stack\u00a0overflow"},{"title":"Pipe a Script File into\u00a0Bash","url":"pipe-a-script-files-into-bash.html","tags":"bash, syntax, shell ","body":"Probably it\u2019s one you just curl-ed curl -sSfL https://example.com/install.sh | sh -s"},{"title":"Split Long\u00a0Strings","url":"split-long-output-onto-multiple-lines.html","tags":"bash, linux ","body":"Split long strings (or command outputs) onto multiple lines Find and replace a particular char (maybe :) with a \\n. ... | tr \u0027:\u0027 \u0027\\n\u0027 ... | sed \u0027s/:/\\n/g\u0027"},{"title":"ripgrep\u00a0Regret","url":"ripgrep-regret.html","tags":"ripgrep, fail ","body":"Without noticing, create a .gitignore file with a single * in\u00a0it. Spend a day trying to understand why ripgrep has stopped working for only 1\u00a0project. \ud83d\ude2d\ud83d\ude2d\ud83d\ude2d"},{"title":"Teaching Kids About\u00a0Money","url":"teaching-kids-about-money.html","tags":"parenting, kids, money, teaching ","body":"Teaching my kids about money and work is having an\u00a0effect. Yesterday, my daughter made a painting for me and asked my to buy it using pretend\u00a0money."},{"title":"Stop Prepending sudo to Docker\u00a0Commands","url":"stop-prepending-sudo-to-docker-commands.html","tags":"sudo, docker, linux ","body":"sudo groupadd docker -\u003e make the group sudo gpasswd -a $USER docker -\u003e add $USER to the docker group newgrp docker -\u003e activate the changes"},{"title":"`cat` and a new\u00a0line","url":"cat-and-a-new-line.html","tags":"cat, linux, bash, shell ","body":"If you\u2019re cat-ing a file and the bash prompt doesn\u2019t start on a new line (cos the file you displayed using cat doesn\u2019t end with a new line char) the following will fix\u00a0it: cat \u003cfilename\u003e ; echo"},{"title":"creating users with sudo\u00a0permissions","url":"creating-users-with-sudo-permissions.html","tags":"sudo, linux, user, admin ","body":"adduser -m \u003cusername\u003e usermod -aG sudo \u003cusername\u003e CentOS: adduser -m \u003cusername\u003e passwd \u003cusername\u003e usermod -aG wheel \u003cusername\u003e (wheel is a usergroup with sudo\u00a0permissions)"},{"title":"Disk Full and Disk Usage\u00a0Commands","url":"disk-full-and-usage-commands.html","tags":"linux, du, df, shell, cli ","body":"df -h Show disk\u00a0space du -hs . See how big the current dir\u00a0is"},{"title":"Git LFS","url":"cloning-git-repos-using-lfs.html","tags":"git, git-lfs ","body":"Cloning large repos, or repos with large files in them, doesn\u2019t work with git clone ... you need to use git lfs clone ... So why is git lfs clone deprecated? What\u2019s the\u00a0replacement?"},{"title":"nohup","url":"nohup.html","tags":"linux, cli ","body":"Use nohup to keep a curl process running even when the terminal (tty?) session autocloses at\u00a03am."},{"title":"Shell\u00a0Comparisons","url":"shell-comparisons.html","tags":"zsh, bash, bsh, linux, cli ","body":"You can group shells into\u00a0groups: ksh - korn shell and\u00a0zshell sh - bourne shell and bash (the bourne again\u00a0shell) Because zsh isn\u2019t a superset of\u00a0bash. bash is a superset of the bourne\u00a0shell."},{"title":"","url":"emacs-dreaming.html","tags":"emacs, dream ","body":"Two nights ago, I dreamt I was experimenting with\u00a0Emacs.."}]