<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Posts on rameezkhan.me</title>
    <link>https://rameezkhan.me/posts/</link>
    <description>Recent content in Posts on rameezkhan.me</description>
    <generator>Hugo -- 0.155.2</generator>
    <language>en-gb</language>
    <lastBuildDate>Wed, 11 Feb 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://rameezkhan.me/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Using Claude Cowork to Process Scanned PDF Receipts for Expense Claims</title>
      <link>https://rameezkhan.me/posts/2026/2026-02-11--using-claude-cowork-to-process-scanned-pdf-receipts-for-expense-claims/</link>
      <pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://rameezkhan.me/posts/2026/2026-02-11--using-claude-cowork-to-process-scanned-pdf-receipts-for-expense-claims/</guid>
      <description>&lt;p&gt;I recently returned from a business trip with a folder full of scanned receipts. The task ahead was familiar and tedious: match each receipt to my bank statement and fill out the company expense form. It&amp;rsquo;s the kind of work that demands attention but not creativity - perfect for automation.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s when I thought: what if I tried Claude&amp;rsquo;s new cowork feature for this?&lt;/p&gt;
&lt;h2 id=&#34;what-is-cowork&#34;&gt;What is Cowork?&lt;/h2&gt;
&lt;p&gt;Cowork is Claude&amp;rsquo;s autonomous work mode. Rather than a back-and-forth conversation, you give Claude a task with clear instructions and let it work through the steps - reading files, creating folders, writing documents, and reasoning through problems.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Extracting, Transcribing, and Summarising Audio from Vimeo</title>
      <link>https://rameezkhan.me/posts/2026/2026-02-10--extracting-transcribing-and-summarising-audio-from-vimeo/</link>
      <pubDate>Tue, 10 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://rameezkhan.me/posts/2026/2026-02-10--extracting-transcribing-and-summarising-audio-from-vimeo/</guid>
      <description>&lt;p&gt;In a previous &lt;a href=&#34;https://rameezkhan.me/tags/nix/&#34;&gt;Nix&lt;/a&gt; &lt;a href=&#34;https://rameezkhan.me/posts/2021/2021-05-10--once-off-commands-with-nix/&#34;&gt;post&lt;/a&gt;
I mentioned how you can run once-off commands with Nix without polluting your system environment.&lt;/p&gt;
&lt;p&gt;First, the why. My community group hosts regular townhall meetings that I often can&amp;rsquo;t attend in person. Fortunately, recordings get posted to Vimeo afterwards. Rather than watching hour-long videos, I wanted a faster way to stay informed - hence this workflow.&lt;/p&gt;
&lt;p&gt;In this post, I want to demonstrate how you can extract audio from a Vimeo video, transcribe it to text, and generate a summary - all using &lt;code&gt;nix run&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Slow Fingers: Week 2 of Colemak on the Moonlander</title>
      <link>https://rameezkhan.me/posts/2024/2024-08-27--slow-fingers-week-2-of-colemak-on-the-moonlander/</link>
      <pubDate>Tue, 27 Aug 2024 00:00:00 +0000</pubDate>
      <guid>https://rameezkhan.me/posts/2024/2024-08-27--slow-fingers-week-2-of-colemak-on-the-moonlander/</guid>
      <description>&lt;p&gt;In the last &lt;a href=&#34;https://rameezkhan.me/posts/2024/2024-08-19--moonlander-split-keyboard-and-split-brain/&#34;&gt;post&lt;/a&gt; I mentioned my journey of attempting to learn the &lt;a href=&#34;https://colemakmods.github.io/mod-dh/&#34;&gt;Colemak DH&lt;/a&gt; keyboard layout on the &lt;a href=&#34;https://www.zsa.io/moonlander&#34;&gt;Moonlander&lt;/a&gt; keyboard.&lt;/p&gt;
&lt;p&gt;I am now about one week into this journey.&lt;/p&gt;
&lt;p&gt;Here is a little snapshot of my progress and overall thoughts.&lt;/p&gt;
&lt;h2 id=&#34;slow-but-consistent-progress&#34;&gt;Slow but consistent progress&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve committed to doing 30 minute sessions daily (not super strict on the weekends) on &lt;a href=&#34;https://www.keybr.com&#34;&gt;Keybr&lt;/a&gt;. You can configure the settings to prefer home row keys first. This is super useful for getting comfortable with which finger should rest on which key.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Moonlander: Split Keyboard and Split Brain</title>
      <link>https://rameezkhan.me/posts/2024/2024-08-19--moonlander-split-keyboard-and-split-brain/</link>
      <pubDate>Mon, 19 Aug 2024 00:00:00 +0000</pubDate>
      <guid>https://rameezkhan.me/posts/2024/2024-08-19--moonlander-split-keyboard-and-split-brain/</guid>
      <description>&lt;p&gt;If you were to ask a programmer what their number one productivity tool in their arsenal is, I&amp;rsquo;d bet very few would say &amp;ldquo;a keyboard&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;This is the very perception I&amp;rsquo;m hoping to challenge with my purchase of the &lt;a href=&#34;https://www.zsa.io/moonlander&#34;&gt;Moonlander&lt;/a&gt; keyboard.&lt;/p&gt;
&lt;h2 id=&#34;current-typing-setup&#34;&gt;Current typing setup&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m currently typing this using a QWERTY layout on a Keychron K2, a 75% keyboard running Cherry MX Browns.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve never fully learned to touch type and as a result I type at an average of 80 to 90 wpm. With an accuracy of around 90 to 95%.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Self-Contained and Reproducible Scripts Using the Nix Shebang</title>
      <link>https://rameezkhan.me/posts/2024/2024-08-08--self-contained-and-reproducible-scripts-using-the-nix-shebang/</link>
      <pubDate>Thu, 08 Aug 2024 00:00:00 +0000</pubDate>
      <guid>https://rameezkhan.me/posts/2024/2024-08-08--self-contained-and-reproducible-scripts-using-the-nix-shebang/</guid>
      <description>&lt;p&gt;In a previous &lt;a href=&#34;https://rameezkhan.me/tags/nix/&#34;&gt;Nix&lt;/a&gt; &lt;a href=&#34;https://rameezkhan.me/posts/2021/2021-05-10--once-off-commands-with-nix/&#34;&gt;post&lt;/a&gt;
I mentioned how you can run once-off commands with Nix without polluting your system environment.&lt;/p&gt;
&lt;p&gt;In this post, I want to demonstrate how you can create self-contained and reproducible scripts using the Nix
&lt;a href=&#34;https://en.wikipedia.org/wiki/Shebang_(Unix)&#34;&gt;shebang&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;simple-cowsay-script&#34;&gt;Simple cowsay script&lt;/h2&gt;
&lt;h3 id=&#34;using-the-interactive-nix-shell&#34;&gt;Using the interactive &lt;code&gt;nix-shell&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;To start, imagine a scenario where you want a cow to &amp;ldquo;moo&amp;rdquo; using &lt;a href=&#34;https://en.wikipedia.org/wiki/Cowsay&#34;&gt;cowsay&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The bash script &lt;code&gt;moo.sh&lt;/code&gt; would contain.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/usr/bin/env bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cowsay &lt;span class=&#34;s2&#34;&gt;&amp;#34;moo&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To obtain the cowsay binary without polluting your system environment you would first generate a temporary environment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Changelog #2: Grinders and Babies</title>
      <link>https://rameezkhan.me/posts/2022/2022-11-14--changelog-2-grinders-and-babies/</link>
      <pubDate>Mon, 14 Nov 2022 00:00:00 +0000</pubDate>
      <guid>https://rameezkhan.me/posts/2022/2022-11-14--changelog-2-grinders-and-babies/</guid>
      <description>&lt;p&gt;Hey Friends, welcome to the 2nd edition of the &lt;a href=&#34;https://rameezkhan.me/series/changelog&#34;&gt;Changelog&lt;/a&gt; series.&lt;/p&gt;
&lt;p&gt;This edition describes some of the happenings roughly between 2022-09 and 2022-10.&lt;/p&gt;
&lt;h2 id=&#34;a-self-declared-coffee-fanatic&#34;&gt;A self-declared coffee fanatic&lt;/h2&gt;
&lt;p&gt;I would call myself a coffee fanatic (snob?).&lt;/p&gt;
&lt;p&gt;The &lt;em&gt;range&lt;/em&gt; of snobbishness is variable I guess. You only have to visit &lt;a href=&#34;https://reddit.com/r/coffee&#34;&gt;r/coffee&lt;/a&gt; to see what I mean.&lt;/p&gt;
&lt;p&gt;Around 2016, we bought our first Nespresso pod machine. It was the &lt;a href=&#34;https://www.nespresso.com/de/de/inissia-machines-range&#34;&gt;Nespresso Inissia&lt;/a&gt;. At the time both the Wife and I were having our coffees with two sugars and milk.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Giscus for Comments</title>
      <link>https://rameezkhan.me/posts/2022/2022-11-01--giscus-for-comments/</link>
      <pubDate>Tue, 01 Nov 2022 00:00:00 +0000</pubDate>
      <guid>https://rameezkhan.me/posts/2022/2022-11-01--giscus-for-comments/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Giscus is a solid option if you&amp;rsquo;re looking for a low-impedance alternative to Disqus.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;remember-when-disqus-was-a-thing&#34;&gt;Remember when Disqus was a thing?&lt;/h2&gt;
&lt;p&gt;On my &lt;a href=&#34;https://github.com/rameezk/blog-old&#34;&gt;old blog&lt;/a&gt; I used an &lt;em&gt;off-the-shelf&lt;/em&gt; &lt;a href=&#34;https://www.gatsbyjs.com/&#34;&gt;Gatsby&lt;/a&gt; template
which came bundled with &lt;a href=&#34;https://disqus.com/&#34;&gt;Disqus&lt;/a&gt; support.&lt;/p&gt;
&lt;p&gt;I didn&amp;rsquo;t know better at the time so I just went with it.&lt;/p&gt;
&lt;p&gt;So I know I&amp;rsquo;m probably late to the &lt;em&gt;lets-move-away-from-disqus-party&lt;/em&gt;, but now, re-writing this blog and re-thinking the tech stack behind it, it was time to give some more thought to this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Colima as a Docker Desktop Replacement?</title>
      <link>https://rameezkhan.me/posts/2022/2022-10-28--colima-as-a-docker-desktop-replacement/</link>
      <pubDate>Fri, 28 Oct 2022 00:00:00 +0000</pubDate>
      <guid>https://rameezkhan.me/posts/2022/2022-10-28--colima-as-a-docker-desktop-replacement/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;An attempt at finding a drop-in replacement for Docker Desktop on macOS.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;why-a-replacement&#34;&gt;Why a replacement?&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.docker.com/products/docker-desktop&#34;&gt;Docker Desktop&lt;/a&gt; has been the gold standard for building and running containers on macOS.&lt;/p&gt;
&lt;p&gt;But what is it? Is it just a fancy container GUI?&lt;/p&gt;
&lt;p&gt;Well, no.&lt;/p&gt;
&lt;p&gt;The single, downloadable package comes built-in with everything you need to build and run Docker images on your machine. Besides running a VM in the background as a daemon, Docker Desktop provides seamless plumbing into the host machine with sane and secure defaults &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Changelog #1: Quarter of the man I used to be</title>
      <link>https://rameezkhan.me/posts/2022/2022-10-20--changelog-1-quarter-of-the-man-i-used-to-be/</link>
      <pubDate>Fri, 21 Oct 2022 00:00:00 +0000</pubDate>
      <guid>https://rameezkhan.me/posts/2022/2022-10-20--changelog-1-quarter-of-the-man-i-used-to-be/</guid>
      <description>&lt;p&gt;Hey Friends, welcome to the 1st edition of what I&amp;rsquo;m calling the &lt;a href=&#34;https://rameezkhan.me/series/changelog&#34;&gt;Changelog&lt;/a&gt; series.
A series where I hope to get all my thoughts and musings down on to &lt;em&gt;paper&lt;/em&gt; (so to say).&lt;/p&gt;
&lt;p&gt;Since this the first in the series, this post is a high level summary of some the highlights roughly between 2021-08 and 2022-09.&lt;/p&gt;
&lt;h2 id=&#34;shedding-a-quarter&#34;&gt;Shedding a quarter&lt;/h2&gt;
&lt;p&gt;Around August last year (2021), while playing in the garden with the first born, I found myself completely out of breath just two minutes in.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Once-off Commands with Nix</title>
      <link>https://rameezkhan.me/posts/2021/2021-05-10--once-off-commands-with-nix/</link>
      <pubDate>Mon, 10 May 2021 00:00:00 +0000</pubDate>
      <guid>https://rameezkhan.me/posts/2021/2021-05-10--once-off-commands-with-nix/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Banner&#34; loading=&#34;lazy&#34; src=&#34;https://rameezkhan.me/posts/2021/2021-05-10--once-off-commands-with-nix/once-off-command-with-nix-banner.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;no-need-to-pollute-your-system-environment&#34;&gt;No need to pollute your system environment&lt;/h2&gt;
&lt;p&gt;In the &lt;a href=&#34;https://rameezkhan.me/per-project-packages-using-nix-and-direnv/&#34;&gt;last post&lt;/a&gt; we discussed why it might not be wise to pollute your system (or global) environment by installing programs you&amp;rsquo;ll only run once.&lt;/p&gt;
&lt;p&gt;Often, these programs are installed and then forgotten about causing unnecessary bloat.&lt;/p&gt;
&lt;p&gt;A pristine system is easily maintained.&lt;/p&gt;
&lt;h2 id=&#34;when-to-use-nix-shell-or-nix-run&#34;&gt;When to use &lt;code&gt;nix-shell&lt;/code&gt; or &lt;code&gt;nix run&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;We also showed in the last post how we could use &lt;a href=&#34;https://rameezkhan.me/per-project-packages-using-nix-and-direnv/&#34;&gt;nix-shell&lt;/a&gt; to temporarily
bring programs into our path. This is still a viable option for running a once off command.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Per Project Packages using Nix and direnv</title>
      <link>https://rameezkhan.me/posts/2021/2021-05-03--per-project-packages-using-nix-and-direnv/</link>
      <pubDate>Mon, 03 May 2021 00:00:00 +0000</pubDate>
      <guid>https://rameezkhan.me/posts/2021/2021-05-03--per-project-packages-using-nix-and-direnv/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Banner&#34; loading=&#34;lazy&#34; src=&#34;https://rameezkhan.me/posts/2021/2021-05-03--per-project-packages-using-nix-and-direnv/per-project-packages-using-nix-and-direnv-banner.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;why-have-project-specific-packages&#34;&gt;Why have project specific packages?&lt;/h2&gt;
&lt;p&gt;There are a few reasons why you would want to have project specific packages.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Different package versions per project e.g. you are maintaining a project that uses an old version of Node.js (like this blog, I&amp;rsquo;m lazy),
but use a newer version globally on your system.&lt;/li&gt;
&lt;li&gt;You don&amp;rsquo;t want to pollute your global environment with packages you&amp;rsquo;ll only use in an isolated project e.g. nixfmt to format *.nix files in my &lt;a href=&#34;https://github.com/rameezk/dotfiles&#34;&gt;dotfiles&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Easy on-boarding of a new team member e.g. packages are declared in the same project and it is easy to install and start contributing (more details coming below).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the &lt;a href=&#34;https://nixos.org/&#34;&gt;Nix&lt;/a&gt; ecosystem, this can be achieved using &lt;a href=&#34;https://nixos.org/manual/nix/unstable/command-ref/nix-shell.html&#34;&gt;nix-shell&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Emacs Native-Comp on WSL2 with Nix</title>
      <link>https://rameezkhan.me/posts/2021/2021-04-26--emacs-native-comp-on-wsl2-with-nix/</link>
      <pubDate>Mon, 26 Apr 2021 00:00:00 +0000</pubDate>
      <guid>https://rameezkhan.me/posts/2021/2021-04-26--emacs-native-comp-on-wsl2-with-nix/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Banner&#34; loading=&#34;lazy&#34; src=&#34;https://rameezkhan.me/posts/2021/2021-04-26--emacs-native-comp-on-wsl2-with-nix/emacs-native-comp-on-wsl2-with-nix-banner.png&#34;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; As of 2021-04-25 GCC/Native-Comp has been &lt;a href=&#34;https://lists.gnu.org/archive/html/emacs-devel/2021-04/msg01175.html&#34;&gt;merged into master&lt;/a&gt;.
I&amp;rsquo;m sure package managers will be updated soon.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;what-is-emacs-native-comp&#34;&gt;What is Emacs Native-Comp?&lt;/h2&gt;
&lt;p&gt;Emacs Native-Comp refers a to the &lt;code&gt;feature/native-comp&lt;/code&gt; branch of Emacs. It adds support for compiling
EmacsLisp to native code using &lt;code&gt;libgccjit&lt;/code&gt;. This provides a notable performance improvement right out
of the box. See &lt;a href=&#34;https://www.emacswiki.org/emacs/GccEmacs&#34;&gt;here&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h2 id=&#34;installing-using-nix-on-wsl2&#34;&gt;Installing using Nix on WSL2&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: All instructions below are sourced from this &lt;a href=&#34;https://gist.github.com/mjlbach/179cf58e1b6f5afcb9a99d4aaf54f549&#34;&gt;gist&lt;/a&gt;. I&amp;rsquo;m sure the gist will be updated with changes more frequently than
this blog post.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nix as a potential Linuxbrew replacement?</title>
      <link>https://rameezkhan.me/posts/2021/2021-04-21--nix-as-a-potential-linuxbrew-replacement/</link>
      <pubDate>Wed, 21 Apr 2021 00:00:00 +0000</pubDate>
      <guid>https://rameezkhan.me/posts/2021/2021-04-21--nix-as-a-potential-linuxbrew-replacement/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Banner&#34; loading=&#34;lazy&#34; src=&#34;https://rameezkhan.me/posts/2021/2021-04-21--nix-as-a-potential-linuxbrew-replacement/nix-as-a-potential-linuxbrew-replacement.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;linuxbrew&#34;&gt;Linuxbrew&lt;/h2&gt;
&lt;p&gt;Coming from a MacBook, I became comfortable with &lt;a href=&#34;https://brew.sh/&#34;&gt;Homebrew&lt;/a&gt; as a package manager.&lt;/p&gt;
&lt;p&gt;Over time, I built up a collection of tools in my &lt;a href=&#34;https://github.com/rameezk/dotfiles&#34;&gt;dotfiles&lt;/a&gt; to maximise my productivity.&lt;/p&gt;
&lt;p&gt;When moving over to Ubuntu, I realized a couple of these tools were missing from Apt. Naturally I went with something I was most
comfortable with, in this case, &lt;a href=&#34;https://docs.brew.sh/Homebrew-on-Linux&#34;&gt;Linuxbrew&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Linuxbrew works. It&amp;rsquo;s just your normal Homebrew on Linux. On the rare occasion, you&amp;rsquo;ll find an unsupported package. But nothing
you can&amp;rsquo;t manually install.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Goodbye pyenv and nvm. Hello ASDF.</title>
      <link>https://rameezkhan.me/posts/2020/2020-10-09--goodbye-python-nvm-hello-asdf/</link>
      <pubDate>Fri, 09 Oct 2020 00:00:00 +0000</pubDate>
      <guid>https://rameezkhan.me/posts/2020/2020-10-09--goodbye-python-nvm-hello-asdf/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Banner&#34; loading=&#34;lazy&#34; src=&#34;https://rameezkhan.me/posts/2020/2020-10-09--goodbye-python-nvm-hello-asdf/goodbye-pyenv-nvm-hello-asdf-1337.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;pyenv-and-nvm&#34;&gt;pyenv and nvm&lt;/h2&gt;
&lt;p&gt;I maintain several side-projects, most of which are either Python or Node.js. For the longest time I used &lt;a href=&#34;https://github.com/pyenv/pyenv&#34;&gt;pyenv&lt;/a&gt; and &lt;a href=&#34;https://github.com/nvm-sh/nvm&#34;&gt;nvm&lt;/a&gt; to manage different versions of Python and Node.js respectively.&lt;/p&gt;
&lt;p&gt;The configuration to manage these would be added to my &lt;a href=&#34;https://github.com/rameezk/dotfiles/&#34;&gt;dotfiles&lt;/a&gt;. Over time, my shell (zsh) startup times increased significantly to the point where it took roughly 3 seconds. I spend most of my life at the terminal, so this was insufferable.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tunneling via Kubernetes</title>
      <link>https://rameezkhan.me/posts/2020/2020-10-02--tunneling-via-kubernetes/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0000</pubDate>
      <guid>https://rameezkhan.me/posts/2020/2020-10-02--tunneling-via-kubernetes/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Banner&#34; loading=&#34;lazy&#34; src=&#34;https://rameezkhan.me/posts/2020/2020-10-02--tunneling-via-kubernetes/tunneling-via-kubernetes-6181.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;For security reasons, you might find your database (or any service for that matter) in an internal subnet, somewhere in the cloud. Accessing this for local debugging/development can be a pain.&lt;/p&gt;
&lt;p&gt;Using Kubernetes (assuming you have a cluster already), you can use this to your advantage.&lt;/p&gt;
&lt;h2 id=&#34;create-the-tunnel&#34;&gt;Create the tunnel&lt;/h2&gt;
&lt;p&gt;What you need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes (with API access via &lt;code&gt;kubectl&lt;/code&gt; ofcourse)&lt;/li&gt;
&lt;li&gt;An image with netcat installed (Nice opportunity to punt &lt;a href=&#34;https://rameezkhan.me/debug-on-kubernetes-with-a-swiss-army-knife-of-tools/&#34;&gt;mine&lt;/a&gt; 😉)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://manpages.debian.org/testing/ucspi-tcp/tcpserver.1.en.html&#34;&gt;tcpserver&lt;/a&gt; (should come with any Debian based distro)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Next, ensure your pod is running. I have a handy alias for this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>An iPhone only Git workflow for blog posts</title>
      <link>https://rameezkhan.me/posts/2020/2020-07-07--new-blog-post-using-only-an-iphone/</link>
      <pubDate>Tue, 07 Jul 2020 00:00:00 +0000</pubDate>
      <guid>https://rameezkhan.me/posts/2020/2020-07-07--new-blog-post-using-only-an-iphone/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Banner&#34; loading=&#34;lazy&#34; src=&#34;https://rameezkhan.me/posts/2020/2020-07-07--new-blog-post-using-only-an-iphone/iphone-only-git-workflow-blog-posts-7351.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;We are truly living in the future folks!&lt;/p&gt;
&lt;p&gt;Or, I may have been living under a rock.&lt;/p&gt;
&lt;p&gt;Seriously, I never thought this would be possible on iOS/iPhone. But with some initial setup it is!&lt;/p&gt;
&lt;p&gt;So without further ado, this is how I managed to write and deploy this post using only my iPhone.&lt;/p&gt;
&lt;h1 id=&#34;apps-used&#34;&gt;Apps Used&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://apps.apple.com/za/app/working-copy-git-client/id896694807&#34;&gt;Working Copy&lt;/a&gt; - Git client&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://apps.apple.com/za/app/textastic-code-editor-9/id1049254261&#34;&gt;Textastic&lt;/a&gt; - Text editor with syntax highlighting&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://apps.apple.com/za/app/canva-card-poster-logo-maker/id897446215&#34;&gt;Canva&lt;/a&gt; - Image editing and templating&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://apps.apple.com/za/app/github/id1477376905&#34;&gt;GitHub&lt;/a&gt; - Official GitHub app for viewing PRs&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;workflow&#34;&gt;Workflow&lt;/h1&gt;
&lt;p&gt;In &lt;strong&gt;Working Copy&lt;/strong&gt; I linked my GitHub account and cloned my blog repo. My blog is written in Gatsby and uses &lt;a href=&#34;https://www.gatsbyjs.org/packages/gatsby-transformer-remark/&#34;&gt;gatsby-remark-transformer&lt;/a&gt; to convert Markdown to what you see now. So in &lt;strong&gt;Working Copy&lt;/strong&gt; I navigated to my &lt;code&gt;posts&lt;/code&gt; directory and created a new directory. Within that directory I created an empty &lt;code&gt;index.md&lt;/code&gt;file.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adding keybindings to Doom Emacs</title>
      <link>https://rameezkhan.me/posts/2020/2020-07-03--adding-keybindings-to-doom-emacs/</link>
      <pubDate>Fri, 03 Jul 2020 00:00:00 +0000</pubDate>
      <guid>https://rameezkhan.me/posts/2020/2020-07-03--adding-keybindings-to-doom-emacs/</guid>
      <description>&lt;h2 id=&#34;doom-emacs-what-happened-to-spacemacs&#34;&gt;Doom Emacs? What happened to Spacemacs?&lt;/h2&gt;
&lt;p&gt;In my previous post last year &amp;hellip; &lt;em&gt;Wow! I&amp;rsquo;ve really been neglecting this blogging thing, haven&amp;rsquo;t I?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;hellip; I sung the praises for Spacemacs (an Emacs distrubution with pre-configured layers).&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve since discovered &lt;a href=&#34;https://github.com/hlissner/doom-emacs&#34;&gt;Doom Emacs&lt;/a&gt; and have recently made the switch to it.
For two reasons mainly:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Speed&lt;/strong&gt;. Doom Emacs is fast! Super Fast! (It has some nice lazy loading)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Configuration&lt;/strong&gt;. Spacemacs did it a lot of magic via its layers configs. I wanted to learn how to configure Emacs myself but didn&amp;rsquo;t want to start
from scratch. Doom Emacs was a nice middle ground.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Search and Replace in Multiple Files with Spacemacs</title>
      <link>https://rameezkhan.me/posts/2019/2019-08-07--search-and-replace-spacemacs/</link>
      <pubDate>Wed, 07 Aug 2019 00:00:00 +0000</pubDate>
      <guid>https://rameezkhan.me/posts/2019/2019-08-07--search-and-replace-spacemacs/</guid>
      <description>&lt;h2 id=&#34;what-is-spacemacs&#34;&gt;What is Spacemacs&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve been a pure Vim user for many years before I stumbled on Spacemacs.&lt;/p&gt;
&lt;p&gt;So what is it?&lt;/p&gt;
&lt;p&gt;Spacemacs is a community driven distribution of Emacs. The tagline is &lt;code&gt;The best editor is neither Emacs nor Vim, it&#39;s Emacs and Vim!&lt;/code&gt;. It&amp;rsquo;s pretty much Emacs with a well structured configuration system (via something called &amp;ldquo;Layers&amp;rdquo;). You can choose to use Vim like keybindings (or what Emacs people call &lt;a href=&#34;https://github.com/emacs-evil/evil&#34;&gt;evil&lt;/a&gt;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Debug on Kubernetes with a Swiss-Army Knife of Tools</title>
      <link>https://rameezkhan.me/posts/2019/2019-01-31--debug-on-kubernetes-with-a-swiss-army-knife-of-tools/</link>
      <pubDate>Thu, 31 Jan 2019 00:00:00 +0000</pubDate>
      <guid>https://rameezkhan.me/posts/2019/2019-01-31--debug-on-kubernetes-with-a-swiss-army-knife-of-tools/</guid>
      <description>&lt;h2 id=&#34;premise&#34;&gt;Premise&lt;/h2&gt;
&lt;p&gt;I often find myself needing to debug some network issue on Kubernetes. This is usually something like doing a traceroute to an external or internal address, checking egress IP addresses, or just needing a shell on the Kubernetes cluster.&lt;/p&gt;
&lt;h2 id=&#34;the-past&#34;&gt;The Past&lt;/h2&gt;
&lt;p&gt;What I used to do is find any running pod on the cluster and shell into it, hoping it&amp;rsquo;s running some sort of base Alpine/Debian image. Then I&amp;rsquo;d use whatever the built-in package manager is (apt, yum, etc) to install my the tools (nmap, traceroute, ping, etc).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Proxy SSH traffic via Bastion Hosts with Proxyjump</title>
      <link>https://rameezkhan.me/posts/2019/2019-01-25--proxy-ssh-traffic-via-bastion-hosts-with-proxyjump/</link>
      <pubDate>Fri, 25 Jan 2019 00:00:00 +0000</pubDate>
      <guid>https://rameezkhan.me/posts/2019/2019-01-25--proxy-ssh-traffic-via-bastion-hosts-with-proxyjump/</guid>
      <description>&lt;h2 id=&#34;so-what-is-a-bastion-host-anyways&#34;&gt;So what is a bastion host anyways?&lt;/h2&gt;
&lt;p&gt;It has become the norm these days to have what is called a &lt;a href=&#34;https://en.wikipedia.org/wiki/Bastion_host&#34;&gt;bastion&lt;/a&gt; host (or perhaps more commonly known as a &lt;a href=&#34;https://en.wikipedia.org/wiki/Jump_server&#34;&gt;Jumpbox&lt;/a&gt;). This machine generally lives in a public subnet and serves as an SSH gateway into the private subnet/network. See below image.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Bastion&#34; loading=&#34;lazy&#34; src=&#34;https://rameezkhan.me/posts/2019/2019-01-25--proxy-ssh-traffic-via-bastion-hosts-with-proxyjump/proxyjump-dbsaydad-2829s.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;proxy-traffic-via-the-bastion&#34;&gt;Proxy traffic via the bastion&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve always used the &lt;strong&gt;ProxyCommand&lt;/strong&gt; before to achieve this. A quick example would be adding the following to your &lt;code&gt;~/.ssh/config&lt;/code&gt; file.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
