[{"title":"Learnings from 5 years of tech startup code\u00a0audits","url":"startup-code-audit.html","tags":"security, startup ","body":"A super blog post about how to write secure\u00a0code."},{"title":"Don\u2019t avoid\u00a0sunlight","url":"sunlight.html","tags":"health ","body":"An article in Outside Magazine about the health benefits of\u00a0sunshine."},{"title":"Tmux\u00a0tutorials","url":"tmux.html","tags":"tmux ","body":"A handy site with lots of tmux info, including how to open a pop-up window to fzf another\u00a0session."},{"title":"Newish Command-Line\u00a0Tools","url":"newish-command-line-tools.html","tags":"linux, cli ","body":"A blog post with some new command line\u00a0tools."},{"title":"Why the past 10 years of American life have been uniquely\u00a0stupid","url":"social-media-and-the-tower-of-babel.html","tags":"social-media, tech, history ","body":"An article in the\u00a0Atlantic."},{"title":"MacOS Keyboard\u00a0Shortcuts","url":"macos-keyboard-shortcuts.html","tags":"macos, keyboard ","body":"A blog post explaining some useful keyboard\u00a0shortcuts. A blog post explaining how to make caps lock be escape when pressed alone, and ctrl when pressed with another\u00a0key."},{"title":"Dan Lebrero book\u00a0notes","url":"dan-lebrero-book-notes.html","tags":"reading, books ","body":"A personal blog with some notes on books that look interesting. I\u2019d like to try reading these over the\u00a0summer. Zen and the art of motorcycle\u00a0maintenance The subtle art of not giving a\u00a0fuck Thinking in\u00a0systems"},{"title":"Personal website as a\u00a0mini-game","url":"personal-website-as-a-minigame.html","tags":"web ","body":"A HN article about a personal website that has been made in the style of a Pokemon game. Super\u00a0cool. The site The project\u00a0code"},{"title":"Staff\u00a0Engineer","url":"staff-engineer.html","tags":"tech, career, todo ","body":"A site about career paths after reaching \u201cSenior Software Engineer\u201d. Apparently you have two main branches, either engineering management, or staff\u00a0engineer. The site references several good books about the engineering management career path. I should come back to\u00a0this. archive"},{"title":"Founder\u00a0Salaries","url":"founder-salaries.html","tags":"startups, entrepreneur ","body":"A data driven article comparing equity and salaries broken down by geography, investment stage and number of\u00a0founders."},{"title":"James\u2019 Book\u00a0Summaries","url":"james-book-summaries.html","tags":"reading, education ","body":"Book summaries at Jamesclear.com"},{"title":"Reactance","url":"reactance.html","tags":"psychology ","body":"Reactance would be a good name for a\u00a0church. Also, the Streisand Effect."},{"title":"Tools to help children learn\u00a0to","url":"tools-to-help-children-learn-to.html","tags":"children, learning ","body":"A list of sites that help children learn to\u00a0code."},{"title":"Moxie on\u00a0web3","url":"moxie-on-web3.html","tags":"web3, crypto, nft ","body":"An excellent article about the state of web3 and\u00a0NFTs."},{"title":"Solo\u00a0founder","url":"solo-founder-.html","tags":"entrepreneur, saas, maker, founder ","body":"Corey Zue is an indie maker who made Pegasus (Django boilerplate SaaS) and a wedding place-cards\u00a0product. This is a link to his open startup metrics\u00a0page. Also check out this similar post which has similar links for solo SaaS\u00a0founders."},{"title":"How to monetize a\u00a0SaaS","url":"how-to-monetize-a-saas.html","tags":"saas, side-project, business ","body":"A blog post about monetizing SaaS\u00a0products. Split\u00a0test Pricing Email\u00a0cadence"},{"title":"First five minutes on a\u00a0server","url":"first-five-minutes-on-a-server.html","tags":"security, linux ","body":"An article about linux\u00a0security. This is kind of similar to this\u00a0post."},{"title":"Adding JSON output to a CLI\u00a0app","url":"adding-json-output-to-cli-app.html","tags":"cli ","body":"An article suggesting best practices for adding JSON output to CLI apps, and mentioning why JSON output is a good idea. Do Make a\u00a0Schema Do Flatten the\u00a0Structure Do Output JSON Lines for Streaming\u00a0Output Do Use Predictable Key\u00a0Names Do Pretty Print with Two Spaces or Don\u2019t Format at\u00a0All Don\u2019t Use Special Characters in Key\u00a0Names Don\u2019t Allow Duplicate\u00a0Keys Don\u2019t Use Very Large\u00a0Numbers"},{"title":"nvim.CoC","url":"nvim-coc.html","tags":"vim ","body":"I\u2019ve been trying to replace ALE with CoC. It didn\u2019t work. Maybe I have unusually high fixing expectations, but ALE is more capable and easier to setup. So I\u2019ll be using CoC and ALE together, which feels\u00a0messy. Formatting pip install pep8 autopep8 \u003cleader\u003efs \u003cleader\u003ea - a list of all the wrong\u00a0things vif - select inside\u00a0function vam - select\u00a0method \u003cleader\u003eac - see a box with options to fix imports or ignore\u00a0file"},{"title":"Find","url":"find.html","tags":"fd, cli ","body":"fd is a replacement for find with more intuitive\u00a0defaults. Case-insensitive. Ignores hidden directories and\u00a0files. Ignores patterns in .gitignore. Commands fd PATTERN not find -iname \u0027*PATTERN*\u0027 fd --help repo"},{"title":"Tmux\u00a0sessions","url":"tmux-sessions.html","tags":"tmux, cli ","body":"List of sessions: \u003cprefix\u003e s Last session: \u003cprefix\u003e Z Rename session: \u003cprefix\u003e $ Rename window: \u003cprefix\u003e , Previous session: \u003cprefix\u003e ( For last session I used the following key\u00a0bind: bind Z switch-client -l"},{"title":"Multi-tenant Django\u00a0webapps","url":"multi-tenant-django-webapps.html","tags":"python, django, webapp ","body":"An article explaining how a web-dev shop built a multi-tenant web application using Django and\u00a0python. Also: a book a repo"},{"title":"The 3-2-1 backup\u00a0rule","url":"the-3-2-1-backup-rule.html","tags":"archive, data ","body":"3 copies, 2 types of media, 1 copy\u00a0off-site Have 1 primary backup and 2 duplicates, in additional to the original\u00a0data. NAS, USB drive, Cloud storage, Server, Glacier,\u00a0etc For example, your laptop could be backed up to a NAS, a server, and glacier storage. Or 2 NAS and 1 archival cloud\u00a0storage."},{"title":"Lessons from creating a production\u00a0database","url":"lessons-from-creating-a-production-database.html","tags":"facebook, management ","body":"wip Have a simple, crisp mission statement that expresses your raison\u00a0d\u2019etre. Socialize estimates of task difficulty\u00a0repeatedly; Do whatever it takes to make sure that manager churn does not result in unfair career outcomes for\u00a0ICs source"},{"title":"Proxy\u00a0Servers","url":"reverse-proxy.html","tags":"networks ","body":"Reverse proxy\u00a0server A reverse proxy is a\u00a0server. It sits in front of other servers and forwards client requests to\u00a0them. Is a middleman or broker on behalf of origin\u00a0servers. Usually used\u00a0to: Increase security (keeping the IP addresses of origin servers private makes DDoS attacks much\u00a0harder). Optimize performance\u00a0(caching). Increase reliability (load\u00a0balancing). The client thinks that the reverse proxy is the end-point\u00a0server. Normal\u00a0proxies Also called a web or forwarding (normal)\u00a0proxy. Sits between client machines and\u00a0hosts. Is a middleman on behalf of the\u00a0clients. The server thinks that the client is the\u00a0proxy. Source: cloudflare"},{"title":"Unison","url":"unison.html","tags":"syncronization, linux, macos, infrastructure ","body":"If you can ssh into the server then Unison should\u00a0work. Install the same version on the client and on the\u00a0server. To sync the contents of dir b into dir a: unison -batch -color true \u003cdir-a\u003e ssh://\u003cuser\u003e@a\u003chost\u003e/\u003cdir-b\u003e Setup Download the binary file with wget chmod +x \u003cfile\u003e copy the executable somewhere on your path like /usr/local/bin unison -doc tutorial \u003e remote method \u003e remote shell method use a filewatcher to sync on change, or use cron to sync every n\u00a0minutes You can also use unison to sync files on the same\u00a0computer. References gist Background Recently I needed to work on a codebase that was on a remote machine whilst still using my local workflow and developer\u00a0tools. Vim\u2019s built in scp:// functionality isn\u2019t versatile enough - i wanted to use fzf.vim to search for text across the code base. This led me to rsync, sshfs, and eventually unison."},{"title":"Japanese philosophies for spending\u00a0money","url":"japanese-philosophies-for-spending-money.html","tags":"money, finance, japan ","body":"Chisoku Being content with what you already have. You don\u2019t need more stuff, or new stuff, just because it exists. You\u2019re being marketed at, or marked. Do you need it or do you want it? Need is finite, want is\u00a0infinite. Wabi\u00a0Sabi Beauty in imperfection. As things begin to wear, they develop some character that can make them nicer than something that is fresh. It\u2019s the opposite of new shiny thing syndrome. Mitate An object has more than one purpose. Repurposing, inventing, adapting, etc is interesting and a mini achievement that can be\u00a0celebrated. Source."},{"title":"Uninstall all pip\u00a0packages","url":"uninstall-all-pip-packages.html","tags":"python ","body":"In case you want to reset your\u00a0virtualenv: pip freeze | xargs pip uninstall -y"},{"title":"alpine.js","url":"alpine-js.html","tags":"javascript, front-end, ui ","body":"An introductory article with examples from Smashing Magazine that introduces and explains what alpine.js is and how it is different to jQuery and\u00a0vue.js."},{"title":"Zsh commands: exec vs\u00a0source","url":"zsh-commands-exec-vs-source.html","tags":"zsh, shell ","body":"source and exec are both\u00a0built-ins. source evaluates or runs the content of a file. For example, if you source ~/.zshrc you apply the content of the file to the currently running Zsh process. You can source and valid Zsh\u00a0code. exec replaces the current shell process with another process. Your terminal (tty) session is running a shell. Replace it with another shell without launching another tty. It could be the same shell with different settings or\u00a0flags. The tty (teletypewriter) command prints the name of the terminal you\u2019re\u00a0using."},{"title":"Chezmoi\u00a0commands","url":"chezmoi-commands.html","tags":"dotfiles, tools, productivity, developer ","body":"Chezmoi is a dotfiles\u00a0manager. chezmoi diff - see the difference between the current state of your local dotfiles compared against the checked-in\u00a0versions. cm aa - to update chezmoi with all your local\u00a0changes. alias -g aa=\"status | cut -c 4- | xargs -I % -p sh -c \u0027chezmoi add ~/%\u0027\""},{"title":"zsh suspend or push\u00a0function","url":"zsh-suspend-or-push-function.html","tags":"zsh ","body":"In zsh you can suspend a command whilst typing\u00a0it. This clears the current line, lets you run another command, and then when it finishes the original unfinished text is put\u00a0back. This is useful if whilst typing a command you realise you need to run another command first,\u00a0like: ls to check the name for an\u00a0argument. creating a location before moving something into that\u00a0location. checking man or tldr for a command\u00a0flag. Zsh has built-in functions push-line and push-input. blog post and also this SO\u00a0answer zsh widgets zsh\u00a0documentation"},{"title":"Stoicism","url":"stoicism.html","tags":"philosophy ","body":"Yesterday the YouTube algorithm suggested a video by Daily Stoic."},{"title":"Math\u00a0explainers","url":"math-explainers.html","tags":"math ","body":"I\u2019m really enjoying math explainers lately, on YouTube there\u2019s 3blue1brown and Veritsasium, and for text I\u2019ve enjoyed a couple of Matt Ferraro\u2019s blog\u00a0posts. Check out What is the inverse of a vector? and Poisson\u2019s Equation is the Most Powerful Tool not yet in your Toolbox. This is a great explanation of the geometric reasoning for the solution to quadratics and cubics, which then goes on to introduce imaginary\u00a0numbers."},{"title":"Do-nothing\u00a0scripts","url":"do-nothing-scripts.html","tags":"programming ","body":"Interesting article about writing down a list of manual steps for tasks that can\u2019t be automated. A do-nothing script can take some of the toil out of a manual\u00a0slog. Even though the script doesn\u2019t do anything other than display text on a screen (the instructions to complete the task) it\u2019s still helpful,\u00a0because: All the steps and information required are collected\u00a0together. It lowers the activation energy required to do something\u00a0fiddly. Each step is part of a function, and the function can be updated with automation code if automation becomes\u00a0possible. It\u2019s more difficult to lose your place in the process, or get the order of steps\u00a0wrong. It doesn\u2019t reduce manual effort. It does reduce\u00a0toil."},{"title":"SaaS metrics that\u00a0matter","url":"saas-metrics-that-matter.html","tags":"saas, entrepreneurship ","body":"A blog post about SaaS\u00a0metrics A tool for calculating\u00a0metrics"},{"title":"Training\u00a0Zones","url":"training-zones.html","tags":"running, training, exercise ","body":"Jack Daniels\u2019 book about running has a training plan that seems to be highly\u00a0regarded. LT1 - 75% of maximum heart rate. ~145BPM maybe (for\u00a0running). LT2 - Average heart rate for a maximum sustained effort for 1\u00a0hour. Zone\u00a01 Trains your body to use fat stores as\u00a0energy. Increases your oxidative\u00a0capacity. Trains slow-twitch muscle\u00a0fibres. You can speak a full sentence without taking a\u00a0breath. Zone\u00a03 Trains your body to use carbohydrates as\u00a0energy. Trains your glycolytic\u00a0system. Increases your ability to mitigate lactic\u00a0acid. Trains fast-twitch muscle\u00a0fibres. You can barely speak in this\u00a0zone. Training Zone 2 is not a good place to train, it\u2019s middle of the road and not an efficient use of time or\u00a0effort. 80% of training should be in zone\u00a01. We have much more energy stored as fat than we do as\u00a0carbs."},{"title":"Naming things is\u00a0hard","url":"naming-things-is-hard.html","tags":"entrepreneurship, saas ","body":"Seth\u2019s blog - Background and\u00a0context small business website Process Testing"},{"title":"Tove Lo -\u00a0Habits","url":"tove-lo-habits.html","tags":"pop ","body":"Brutal\u00a0loneliness. wikipedia"},{"title":"Ultra-running\u00a0benchmarks","url":"ultra-running-benchmarks.html","tags":"courtney-dauwalter, running, 150km, jeff-pelletier ","body":"7\u00a0days/week 25\u00a0km/day Start easy. Last 50% begin to move through the\u00a0field. 40% - 50% of entrants DNF 90% of the course is\u00a0runnable 50km: 6:10 min/km (Diez Vista\u00a050km) 50km: 7:25 - 8:00 min/km (Beaver Flat 50 JP) 160km: 10:35 min/km (JP) 150km: 6:30 - 8:00 min/km (UTMB CD) training: 6:10 is slow enough to stay fresh. 5:10-5:30 is\u00a0fast."},{"title":"Vim built-in color\u00a0names","url":"vim-built-in-color-names.html","tags":"vim ","body":"Script to output colors in a\u00a0buffer: :so $VIMRUNTIME/syntax/colortest.vim SO question with reference\u00a0image."},{"title":"Lightning network\u00a0point-of-sale","url":"lightning-network-point-of-sale.html","tags":"lightning, bitcoin, crypto ","body":"A project to demonstrate an offline, fast, point-of-sale device to allow merchants and customers to make fast cheap transactions on the lightning\u00a0network. Github\u00a0repo lnurl super\u00a0protocal Also lnbits Introducing #LNURLPoS!Completely OFFLINE \u003c$10 #bitcoin LN Point-of-Sale.Video tut coming soon, workshops at #hccp21 and @AdoptingBTC Check out the repo! https://t.co/JFCKocDfFO(watch the @lnbits wallet in the background when the transaction is made \ud83e\udd29) pic.twitter.com/fVbMkP1kJT\u2014 Ben Arc \ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f\u270a\u26a1\ufe0f (@arcbtc) September 27, 2021"},{"title":"Make\u00a0files","url":"make-files.html","tags":"automation, build-system ","body":"This article is a fairly practical introduction to the GNU make tool. It\u2019s not the article I was looking for though, so I might swap it out if I find a better\u00a0one."},{"title":"Linux performance analysis in 60\u00a0seconds","url":"linux-performance-analysis-in-60-seconds.html","tags":"linux, security ","body":"A blog post with a checklist of steps to take and questions to ask when investigating a performance issue on a Linux\u00a0server."},{"title":"Stop reading the\u00a0news","url":"stop-reading-the-news.html","tags":"humanity, culture, web ","body":"An article from the Farnham Street\u00a0blog."},{"title":"View and change settings for GCloud CLI","url":"view-and-change-settings-for-gcloud-cli.html","tags":"google-cloud-platform, cli ","body":"gcloud config set account email@example.com gcloud auth list"},{"title":"Google\u00a0Pub/Sub","url":"google-pub-sub.html","tags":"google-cloud-platform, message-systems ","body":"Google Pub/Sub has client libraries in all the usual languages. You can also construct the API calls yourself. This is a link to the API\u00a0documentation. If I were to use a JavaScript beacon to push a message to a topic, my web analytics engine (a collection of cloud functions) could subscribe to the\u00a0topic. This would have the advantage that if the site were flooded with traffic and the maximum number of function instances wasn\u2019t enough to handle all the events, then none of the page views (or other events) would be lost because Pub/Sub guarantees delivery and would keep trying to deliver the message for up to 7\u00a0days. Using the beacon to trigger the cloud functions directly wouldn\u2019t work at scale, because once the maximum number of instances are being triggered as frequently as the function takes to run, the endpoint would become unresponsive. There is no caching\u00a0layer. However, the site isn\u2019t being flooded with traffic, and I have better things to do than fix stuff that isn\u2019t\u00a0broken."},{"title":"Google Cloud Storage - TTL and CORS\u00a0settings","url":"gcp-storage-bucket-ttl-and-cors-settings.html","tags":"google-cloud-platform, storage, cloud, caching ","body":"Documentation explaining how to set CORS and TTL for a storage\u00a0bucket. Create a JSON file with something like\u00a0this: [{ \"origin\": [\"...\"], \"method\": [\"GET\", \"PUT\"], \"responseHeader\": [\"Content-Type\"], \"maxAgeSeconds\": 300 }] gsutil cors set cors.json gs://johnmathews.is gsutil cors get gs://johnmathews.is | jq"},{"title":"Handwritten letters at\u00a0scale","url":"handwritten-letters-at-scale.html","tags":"automation, hardware, marketing, raspberry-pi ","body":"A twitter thread showing how a business started creating handwritten notes to customers using a plotter, and how they scaled up and further automated the\u00a0process. It would be cool to create something like this for western Europe. Handwrytten.com seems to be the main commercial implementation of this idea in NA. Competitors. I still think it would be fun to make a simple photo printing service. Share a photo in a WhatsApp message and its printed and\u00a0delivered."},{"title":"The dangers of social\u00a0media","url":"the-dangers-of-social-media.html","tags":"technology, mobile, social-media ","body":"A ledger (what\u2019s a ledger? It\u2019s a webpage) from the \u201cCenter For Humane Technology\u201d showing some of the dangers of social\u00a0media. The \u201cDo unto others\u201d section is outstanding. It describes the views of some tech company leaders, including how they limit usage of devices and social media for themselves and their\u00a0kids."},{"title":"Visual mathematical\u00a0proofs","url":"visual-mathematical-proofs.html","tags":"math ","body":"A question on Stack Overflow asking for great visual proofs of mathematical\u00a0ideas trigonometry,\u00a0angles Fourier\u00a0transforms right angle\u00a0triangles the area of a\u00a0circle archive"},{"title":"9/11 and the American\u00a0psyche","url":"9-11-and-the-american-psyche.html","tags":"history, essay ","body":"An essay in the FT: \u201cTwenty years later, the political and psychological consequences of the attack have become more\u00a0intelligible\u201d archive"},{"title":"How doctors\u00a0die","url":"how-doctors-die.html","tags":"humanity, death ","body":"An article about why doctors want less treatment for terminal illnesses than their\u00a0patients. archive"},{"title":"Life","url":"life.html","tags":"aphorism ","body":"If youth is wasted on the young, then life is wasted on the\u00a0living."},{"title":"Slavery","url":"slavery.html","tags":"humanity ","body":"This article about how people become slaves is very uncomfortable\u00a0reading. It puts a very different perspective on my life, ambitions and perceived\u00a0risks."},{"title":"Cloud Functions Minimum\u00a0Instances","url":"cloud-functions-minimum-instances.html","tags":"google-cloud-platform, serverless ","body":"Google Cloud Platform have introduced a \u201cminimum instances\u201d features in the Cloud Functions\u00a0product. If you have a function using 128MB of memory (the smallest option), it will cost a minimum \u20ac0.061 per day (\u20ac1.86 per month) to run 1 minimum\u00a0instance."},{"title":"nmap","url":"nmap.html","tags":"networking, cli ","body":"sudo nmap -sP | grep \"Nmap\" Thanks to Jeff Geerling (again) I found this nifty command to see what devices are connected on a local\u00a0network. Found in this article about setting up a\u00a0pi-hole."},{"title":"Understanding GCP\u00a0charges","url":"understanding-gcp-charges.html","tags":"google-cloud-platform ","body":"A clear article solving most of my problems around understanding why I\u2019m incurring charges on Google Cloud Platform (Gcloud, GCP) when I\u2019m clearly within their free usage\u00a0limits. The deployment costs section in this page is also\u00a0useful."},{"title":"My dead dad\u2019s\u00a0journal","url":"my-dead-dads-journal.html","tags":"humanity ","body":"Your relationships will come to define your life more than anything\u00a0else. A blog post about someone who read their dad\u2019s journal after he died. Its about regret, grief, and struggles against internal contradictions. Its about the tangible consequences of intangible\u00a0relationships. The comments are also\u00a0significant."},{"title":"Miller CLI","url":"miller-cli.html","tags":"cli, tools ","body":"Miller is like awk, sed, cut, join, and sort for data formats such as CSV, TSV, tabular JSON and\u00a0positionally-indexed. Try this if you\u2019re operating on JSON of CSV data, and you want to use column names instead of column\u00a0numbers."},{"title":"Conditionally setting your git\u00a0config","url":"conditionally-setting-your-git-config.html","tags":"vcs, git ","body":"Blog post showing how you can set git variables depending on where you are in a directory\u00a0tree. It hinges on conditional includes."},{"title":"Conway\u2019s\u00a0Law","url":"conways-law.html","tags":"organisations ","body":"Organizations which design systems \u2026 are constrained to produce designs which are copies of the communication structures of these organizations - Melvin\u00a0Conway In\u00a0reverse: If the architecture of the system and the architecture of the organization are at odds, the architecture of the organization wins - Ruth\u00a0Malan"},{"title":"Pen-testing web\u00a0apps","url":"blog-post.html","tags":"penetration-testing, hacking, web-apps, credentials ","body":"A blog post about how someone compromised a group of web\u00a0apps. It lists a series of technologies and techniques that the author uses as they progress their\u00a0investigation. These would make a useful list of things to know in order to build safe web-apps and not repeat the mistakes of the unfortunate target\u00a0company."},{"title":"Running through\u00a0adversity","url":"running-through-adversity.html","tags":"hard-rock, running, sport ","body":"The toughness of elite ultra-runners is very\u00a0underrated. Just one of the problems Sabrina Stanley encountered would be enough to justify dropping\u00a0out. archive"},{"title":"Starbase Tour with Elon\u00a0Musk","url":"starbase-tour-with-elon-musk.html","tags":"elon-musk, starbase, engineering ","body":"Part 1 of an incredible interview and tour of starbase with Elon\u00a0Musk archive"},{"title":"Remote\u00a0Working","url":"remote-working.html","tags":"remote, engineering ","body":"I live and work near\u00a0Amsterdam My manager is in\u00a0Berlin A stakeholder is in\u00a0Boston Another stakeholder is in\u00a0India Another stakeholder is in\u00a0Ireland \u00af\\_(\u30c4)_/\u00af"},{"title":"Athletes, Careers, and Mental\u00a0Health","url":"athletes-and-mental-health.html","tags":"sport, competition, comparmentalization, psychology ","body":"Being very good at one particular thing can make it easy to be bad at normal\u00a0things: Getting over\u00a0gold Insecure Overachiever, Searching the FT brings up several similar\u00a0articles."},{"title":"WTF\u00a0Python","url":"wtf-python.html","tags":"python, programming ","body":"A repo of curious syntax\u00a0features."},{"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 more\u00a0discussion"},{"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 \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":"Alfie Solomons - Where the light comes in. 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.. archive"},{"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 archive"},{"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":"An interesting\u00a0blog","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":"Socially Acceptable\u00a0Mistakes","url":"socially-acceptable-mistakes.html","tags":"meta, thinking, advice ","body":"It\u2019s 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 @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.."}]