<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Tucker Chapman</title>
		<link>https://tuckerchapman.com/</link>
		<description>Recent content on Tucker Chapman</description>
		<generator>Hugo</generator>
		<language>en-US</language>
		
		
		
		
			<lastBuildDate>Mon, 03 Aug 2026 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://tuckerchapman.com/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Generate Random String with CLI</title>
				<link>https://tuckerchapman.com/til/generate-random-string-cli/</link>
				<pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://tuckerchapman.com/til/generate-random-string-cli/</guid>
				<description>&lt;p&gt;TIL a few one-liners for generating random strings.&lt;/p&gt;&#xA;&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;date +%s &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sha512sum &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; base64 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; head -c &lt;span class=&#34;m&#34;&gt;24&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The string is pseudo random and seeded by the current UNIX timestamp. The&#xA;command should work with most Linux distros and MacOS. If running on Linux a&#xA;more random command to try uses &lt;code&gt;/dev/urandom&lt;/code&gt; and &lt;code&gt;tr&lt;/code&gt;.&lt;/p&gt;&#xA;&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;tr -dc A-Za-z0-9 &amp;lt;/dev/urandom &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; head -c 24&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you need a passphrase you can use the dictionary file to select &lt;code&gt;n&lt;/code&gt; random words.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Firefox Address Bar Shortcuts</title>
				<link>https://tuckerchapman.com/til/firefox-address-bar-shortcuts/</link>
				<pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate>
				<guid>https://tuckerchapman.com/til/firefox-address-bar-shortcuts/</guid>
				<description>&lt;p&gt;TIL The Firefox Address Bar includes shortcuts for all kinds of things. Use&#xA;special characters to search your history (^), bookmarks (*), and tabs (%).&#xA;Type the shortcut character before your search to filter the dropdown entries&#xA;to tab through. Use the @ to search configured websites, history, bookmarks,&#xA;and tabs (type @bookmarks, @wikipedia, etc.). Add keywords to your bookmarks to&#xA;create shortcut for your favorite sites (e.g. &amp;ldquo;wiki&amp;rdquo; to go to Wikipedia). For&#xA;the cherry on top, use &lt;strong&gt;Ctrl + L&lt;/strong&gt; (&lt;strong&gt;Cmd + L&lt;/strong&gt;) to focus on the address bar.&lt;/p&gt;</description>
			</item>
			<item>
				<title>JWTs are Base64URL Encoded Strings</title>
				<link>https://tuckerchapman.com/til/jwt-base64url-encoded-strings/</link>
				<pubDate>Sat, 18 Jul 2026 00:00:00 +0000</pubDate>
				<guid>https://tuckerchapman.com/til/jwt-base64url-encoded-strings/</guid>
				<description>&lt;p&gt;TIL a JWT (JSON Web Token) is a couple Base64URL encoded strings with a&#xA;signature. A JWT takes the structure &lt;code&gt;&amp;lt;header&amp;gt;.&amp;lt;payload&amp;gt;.&amp;lt;signature&amp;gt;&lt;/code&gt;. The&#xA;header and payload of a JWT aren&amp;rsquo;t secret (they&amp;rsquo;re Base64URL encoded). The&#xA;magic of JWTs is how the signature is calculated. Calculate the signature by&#xA;Base64URL encoding the header and payload then hashing with a secret&#xA;&lt;code&gt;HMACSHA256(base64UrlEncode(header) + &amp;quot;.&amp;quot; + base64UrlEncode(payload), secret)&lt;/code&gt;.&#xA;Modifying the header or payload changes the signature&amp;ndash;making the data&#xA;untrustworthy.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Proactively Lazy</title>
				<link>https://tuckerchapman.com/posts/proactively-lazy/</link>
				<pubDate>Thu, 09 Jul 2026 09:06:52 -0400</pubDate>
				<guid>https://tuckerchapman.com/posts/proactively-lazy/</guid>
				<description>&lt;p&gt;Get more done by embracing laziness. Motivation—the fickle beast—doesn&amp;rsquo;t make&#xA;you productive, your interaction with your environment does. Use your&#xA;motivation to improve the environment by reducing—or increasing—the energy&#xA;needed do things. Clean the dishes as soon as you finish your meal, display&#xA;your guitar on a stand instead of in the closet, log out of all social media&#xA;accounts when you finish scrolling. James Clear, in his book Atomic Habits,&#xA;quoted Oswald Nuckols who said, &amp;ldquo;People think I work hard but I’m actually&#xA;really lazy. I’m just proactively lazy.&amp;rdquo; Use your motivation energy to reduce&#xA;the &amp;ldquo;activation energy&amp;rdquo; of productivity by improving your environment. Embrace&#xA;your laziness—proactively.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Helpful Vim Ex Mode Commands</title>
				<link>https://tuckerchapman.com/til/vim-ex-mode-commands/</link>
				<pubDate>Sat, 04 Jul 2026 09:52:12 -0400</pubDate>
				<guid>https://tuckerchapman.com/til/vim-ex-mode-commands/</guid>
				<description>&lt;p&gt;Simple patterns to do useful things with the Ex Mode &lt;code&gt;:global&lt;/code&gt; command in Vim&lt;/p&gt;&#xA;&lt;p&gt;Delete all lines that match a pattern (&lt;code&gt;:help pattern&lt;/code&gt;)&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-vim&#34; data-lang=&#34;vim&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/pattern/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;global&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/pattern/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;delete&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Delete all lines that don&amp;rsquo;t match a pattern (&lt;code&gt;:help :vglobal&lt;/code&gt;)&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-vim&#34; data-lang=&#34;vim&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/pattern/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/pattern/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;vglobal&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/pattern/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;delete&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Remove all trailing whitespace with &lt;code&gt;:substitute&lt;/code&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-vim&#34; data-lang=&#34;vim&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;%&lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/\s\+$/&lt;/span&gt;/&lt;span class=&#34;nx&#34;&gt;e&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Find more info by running &lt;a href=&#34;https://vimhelp.org/repeat.txt.html#%3Aglobal&#34;&gt;&lt;code&gt;:help :global&lt;/code&gt;&lt;/a&gt;&#xA;and &lt;a href=&#34;https://vimhelp.org/change.txt.html#%3Asubstitute&#34;&gt;&lt;code&gt;:help :substitute&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>SQL Simple Pivot Pattern</title>
				<link>https://tuckerchapman.com/til/sql-simple-pivot-pattern/</link>
				<pubDate>Sat, 06 Sep 2025 13:16:24 -0400</pubDate>
				<guid>https://tuckerchapman.com/til/sql-simple-pivot-pattern/</guid>
				<description>&lt;p&gt;TIL a simple pattern for pivoting data with an SQL query using &lt;code&gt;FILTER&lt;/code&gt; (or a&#xA;&lt;code&gt;CASE WHEN&lt;/code&gt; clause if the &lt;code&gt;FILTER&lt;/code&gt; keyword &lt;a href=&#34;https://modern-sql.com/feature/filter#compatibility&#34;&gt;isn&amp;rsquo;t supported by the&#xA;database&lt;/a&gt;). The example&#xA;input data is from the &lt;a href=&#34;https://github.com/lerocha/chinook-database&#34;&gt;Chinook&#xA;Database&lt;/a&gt; and is modeled like&#xA;this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;| InvoiceDate         | BillingCountry | Total |&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;| ------------------- | -------------- | ----- |&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;| 2011-02-15 00:00:00 | Belgium        | 1.98  |&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;| 2009-10-17 00:00:00 | Brazil         | 13.86 |&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;| 2009-03-05 00:00:00 | USA            | 3.96  |&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;| 2012-09-05 00:00:00 | Czech Republic | 16.86 |&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;| 2012-10-27 00:00:00 | India          | 1.98  |&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;| 2012-08-27 00:00:00 | Hungary        | 3.96  |&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;| 2011-07-25 00:00:00 | Canada         | 8.91  |&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;| 2012-06-25 00:00:00 | USA            | 1.98  |&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;| 2012-02-22 00:00:00 | Poland         | 1.98  |&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;| 2013-03-05 00:00:00 | Italy          | 8.91  |&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A pivot query using &lt;code&gt;FILTER&lt;/code&gt; (with a SQLite db)&lt;/p&gt;</description>
			</item>
			<item>
				<title>Interpolate Environment Variables with Docker Compose</title>
				<link>https://tuckerchapman.com/til/docker-compose-env/</link>
				<pubDate>Fri, 11 Apr 2025 08:45:08 -0400</pubDate>
				<guid>https://tuckerchapman.com/til/docker-compose-env/</guid>
				<description>&lt;p&gt;TIL you can use environment variables in your docker compose files. I use&#xA;environment variables with my homelab setup as a simple way to keep secrets out&#xA;of version control and reduce repeating common file paths for binded volumes.&#xA;Docker compose even uses a &lt;code&gt;.env&lt;/code&gt; file out of the box. Most&#xA;&lt;a href=&#34;https://docs.docker.com/reference/compose-file/interpolation/&#34;&gt;shell interpolation features&lt;/a&gt; work&#xA;too.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&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 class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;web&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&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 class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;nginx&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&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 class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&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 class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;8080:${NGINX_PORT:-80}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&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 class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&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 class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;NGINX_HOST=${NGINX_HOST:?error}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&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 class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;NGINX_PORT=${NGINX_PORT:-80}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Reference: &lt;a href=&#34;https://docs.docker.com/compose/how-tos/environment-variables/&#34;&gt;Environment Variables in Compose&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Create multiple nvim configs with $NVIM_APPNAME</title>
				<link>https://tuckerchapman.com/til/nvim-appname-env/</link>
				<pubDate>Sat, 08 Feb 2025 09:58:19 -0500</pubDate>
				<guid>https://tuckerchapman.com/til/nvim-appname-env/</guid>
				<description>&lt;p&gt;TIL you can save multiple nvim config setups with the &lt;code&gt;$NVIM_APPNAME&lt;/code&gt;&#xA;environment variable. Nvim will look for, or create, the config in the&#xA;&lt;code&gt;$XDG_CONFIG_HOME/$NVIM_APPNAME&lt;/code&gt; directory. Easily switch between the configs&#xA;with aliases in the startup file for your shell (i.e. &lt;code&gt;.bashrc&lt;/code&gt;, &lt;code&gt;.zshrc&lt;/code&gt;,&#xA;etc.).&lt;/p&gt;&#xA;&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;c1&#34;&gt;# $NVIM_APPNAME defaults to nvim&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;avim&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;NVIM_APPNAME=&amp;#34;nvim-astro&amp;#34; nvim&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;zvim&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;NVIM_APPNAME=&amp;#34;nvim-lazy&amp;#34; nvim&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;kvim&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;NVIM_APPNAME=&amp;#34;nvim-kickstart&amp;#34; nvim&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Source: &lt;a href=&#34;https://neovim.io/doc/user/starting.html#NVIM_APPNAME&#34;&gt;$NVIM_APPNAME docs&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Exclude Directories using the Find command</title>
				<link>https://tuckerchapman.com/til/find-exclude-directory/</link>
				<pubDate>Thu, 18 Jan 2024 15:03:16 -0500</pubDate>
				<guid>https://tuckerchapman.com/til/find-exclude-directory/</guid>
				<description>&lt;p&gt;TIL you can exclude directories when using the &lt;code&gt;find&lt;/code&gt; command.&lt;/p&gt;&#xA;&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;c1&#34;&gt;## Exclude the node modules directory when searching with find&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find ./ -name &lt;span class=&#34;s2&#34;&gt;&amp;#34;*.css&amp;#34;&lt;/span&gt; ! -path &lt;span class=&#34;s2&#34;&gt;&amp;#34;*/node_modules/*&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Source: &lt;a href=&#34;https://stackoverflow.com/a/49296451/5153876&#34;&gt;Stack Overflow&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Python Http Server</title>
				<link>https://tuckerchapman.com/til/python-http-server/</link>
				<pubDate>Thu, 18 Jan 2024 13:26:06 -0400</pubDate>
				<guid>https://tuckerchapman.com/til/python-http-server/</guid>
				<description>&lt;p&gt;Python comes with a simple http server you can use to serve a directory of&#xA;files as a web server. I use it all the time to serve code coverage reports and&#xA;various other static web projects that don&amp;rsquo;t come with a server. Start the&#xA;server using this command:&lt;/p&gt;&#xA;&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;$ python -m http.server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Serving HTTP on :: port &lt;span class=&#34;m&#34;&gt;8000&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;http://&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;::&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:8000/&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once this is running you can now access the files in the directory with your&#xA;web browser (at &lt;a href=&#34;http://localhost:8000&#34;&gt;http://localhost:8000&lt;/a&gt;).&lt;/p&gt;</description>
			</item>
			<item>
				<title>Python Context Manager</title>
				<link>https://tuckerchapman.com/til/python-context-manager/</link>
				<pubDate>Thu, 21 Sep 2023 09:37:02 -0400</pubDate>
				<guid>https://tuckerchapman.com/til/python-context-manager/</guid>
				<description>&lt;p&gt;TIL you can write your own functions to use in a python &lt;code&gt;with&lt;/code&gt; statement. These&#xA;functions are called context managers. A context manager is a simple way to&#xA;wrap a &lt;code&gt;try/except/finally&lt;/code&gt; block in a reusable function.&lt;/p&gt;&#xA;&lt;p&gt;Writing your own context manager is simple.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;contextlib&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;contextmanager&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@contextmanager&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;random_number&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34; https://xkcd.com/221/ &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# do any setup&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;yield&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# Yielded objects can be accessed from the `var` after the `as` keyword&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;except&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# handle any errors&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;pass&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;finally&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# Clean up here (e.g. close db connections or open files)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;pass&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## Call the context manager like this&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;random_number&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# do something with `n`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&#34;https://peps.python.org/pep-0343/&#34;&gt;PEP-343&lt;/a&gt; has some other context manager&#xA;&lt;a href=&#34;https://peps.python.org/pep-0343/#examples&#34;&gt;examples&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Podman Pods</title>
				<link>https://tuckerchapman.com/til/podman-pod/</link>
				<pubDate>Sat, 20 May 2023 18:40:22 -0400</pubDate>
				<guid>https://tuckerchapman.com/til/podman-pod/</guid>
				<description>&lt;p&gt;TIL the POD in Podman is the same idea as Pods in Kubernetes. Pods are&#xA;collections of containers that share resources (i.e. volumes, networks, etc.).&#xA;Create a pod with the &lt;code&gt;podman pod create --name [pod-name]&lt;/code&gt; command. You will&#xA;need to expose ports and setup other resources with the &lt;code&gt;pod create&lt;/code&gt; command.&lt;/p&gt;&#xA;&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;podman pod create --name my-new-pod --infra --publish 8080:80 --network bridge&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Add a container to a pod with the &lt;code&gt;--pod [pod-name]&lt;/code&gt; flag in your run command:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Special tld &#39;.home.arpa&#39;</title>
				<link>https://tuckerchapman.com/til/home.arpa/</link>
				<pubDate>Tue, 03 Jan 2023 11:04:54 -0500</pubDate>
				<guid>https://tuckerchapman.com/til/home.arpa/</guid>
				<description>&lt;p&gt;TIL about the special-use *.home.arpa tld. The &lt;a href=&#34;https://www.rfc-editor.org/rfc/rfc8375&#34;&gt;.home.arpa tld is&#xA;reserved&lt;/a&gt; for &amp;ldquo;non-unique residential&#xA;home networks&amp;rdquo;. If you use Adguard Home, Pi-Hole, or any other DNS server you&#xA;can freely use .home.arpa for all your local assets (printers, self-hosted&#xA;server, etc.)!&lt;/p&gt;</description>
			</item>
			<item>
				<title>Slash or Not to Slash with rsync</title>
				<link>https://tuckerchapman.com/til/rsync-slash-or-not-slash/</link>
				<pubDate>Sat, 26 Nov 2022 00:00:00 +0000</pubDate>
				<guid>https://tuckerchapman.com/til/rsync-slash-or-not-slash/</guid>
				<description>&lt;p&gt;TIL an easy way to remember if you want a slash or not when you run &lt;code&gt;rsync&lt;/code&gt;. A trailing slash will copy the contents of the directory while just the directory name will copy the directory itself. For example&lt;/p&gt;&#xA;&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;c1&#34;&gt;# copies everything in dir into new-dir&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rsync -r dir/ new-dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# copies dir into new-dir&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rsync -r dir new-dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
			</item>
			<item>
				<title>Python List Comprehensions</title>
				<link>https://tuckerchapman.com/til/python-list-comprehensions/</link>
				<pubDate>Fri, 25 Nov 2022 00:00:00 +0000</pubDate>
				<guid>https://tuckerchapman.com/til/python-list-comprehensions/</guid>
				<description>&lt;p&gt;TIL about Python List Comprehensions. I came across code that looked like this&#xA;in a codebase.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;baz&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bar&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;foos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I could see what was happening (&lt;code&gt;baz&lt;/code&gt; is now a list of &lt;code&gt;bar&lt;/code&gt; for each object in&#xA;&lt;code&gt;foos&lt;/code&gt;). I didn&amp;rsquo;t know this was called list comprehension but now I understand&#xA;the data structure.&lt;/p&gt;&#xA;&lt;p&gt;List comprehensions are useful for lots of things when you want to create lists&#xA;from other objects (&lt;a href=&#34;https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions&#34;&gt;docs source&lt;/a&gt;).&lt;/p&gt;</description>
			</item>
			<item>
				<title>Hugo Debug Jsonify</title>
				<link>https://tuckerchapman.com/til/hugo-debug-jsonify/</link>
				<pubDate>Sun, 13 Nov 2022 16:54:29 -0500</pubDate>
				<guid>https://tuckerchapman.com/til/hugo-debug-jsonify/</guid>
				<description>&lt;p&gt;TIL that you can output all the data in &amp;ldquo;the dot&amp;rdquo; from a Hugo template using &lt;code&gt;jsonify&lt;/code&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pre&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;{{ . | jsonify (dict &amp;#34;indent&amp;#34; &amp;#34;  &amp;#34;) }}&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pre&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here is the output of the &lt;code&gt;.Params&lt;/code&gt; value for this post&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pre&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;{{ .Params | jsonify (dict &amp;#34;indent&amp;#34; &amp;#34;  &amp;#34;) }}&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pre&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nt&#34;&gt;&amp;#34;date&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;2022-11-13T16:54:29-05:00&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nt&#34;&gt;&amp;#34;draft&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nt&#34;&gt;&amp;#34;iscjklanguage&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nt&#34;&gt;&amp;#34;lastmod&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;2022-11-13T16:54:29-05:00&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nt&#34;&gt;&amp;#34;publishdate&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;2022-11-13T16:54:29-05:00&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nt&#34;&gt;&amp;#34;tags&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;hugo&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ssg&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;debug&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nt&#34;&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Hugo Debug Jsonify&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
			</item>
			<item>
				<title>cal and ncal</title>
				<link>https://tuckerchapman.com/til/cal-and-ncal/</link>
				<pubDate>Tue, 08 Nov 2022 00:00:00 +0000</pubDate>
				<guid>https://tuckerchapman.com/til/cal-and-ncal/</guid>
				<description>&lt;p&gt;TIL about &lt;code&gt;ncal&lt;/code&gt; (most Linux distros) or &lt;code&gt;CAL&lt;/code&gt; (on MacOS). I have used &lt;code&gt;cal&lt;/code&gt;&#xA;for quite a while which is a convenient calendar tool in the terminal. However,&#xA;I hit CAPS LOCK on accident and ran &lt;code&gt;CAL&lt;/code&gt; instead of &lt;code&gt;cal&lt;/code&gt;, to my surprise it&#xA;output&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;    November 2022&#xA;Mo     7 14 21 28&#xA;Tu  1  8 15 22 29&#xA;We  2  9 16 23 30&#xA;Th  3 10 17 24&#xA;Fr  4 11 18 25&#xA;Sa  5 12 19 26&#xA;Su  6 13 20 27&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;(the normal &lt;code&gt;cal&lt;/code&gt; output)&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to Open Files with Vim</title>
				<link>https://tuckerchapman.com/posts/vim-open-files/</link>
				<pubDate>Tue, 16 Feb 2021 00:00:00 +0000</pubDate>
				<guid>https://tuckerchapman.com/posts/vim-open-files/</guid>
				<description>&lt;p&gt;How exactly do you open a new file without closing and reopening vim? Read on to learn more about how to open files (or buffers) in vim using various included tools or external plugins. Vim uses the word &amp;ldquo;buffer&amp;rdquo; instead of &amp;ldquo;file&amp;rdquo;. When you &lt;code&gt;:wq&lt;/code&gt; you write the current buffer to a file.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Getting started with vim-airline</title>
				<link>https://tuckerchapman.com/posts/getting-started-vim-airline/</link>
				<pubDate>Tue, 15 Sep 2020 00:00:00 +0000</pubDate>
				<guid>https://tuckerchapman.com/posts/getting-started-vim-airline/</guid>
				<description>&lt;p&gt;The default vim status line can work well but &lt;a href=&#34;https://github.com/vim-airline/vim-airline&#34;&gt;vim-airline&lt;/a&gt; inhances it in many ways. Vim-airline is a simple lightweight plugin that integrates with many other popular plugins out of the box (but they are not required). In this post you will learn how to get vim-airline setup with some basic settings and a theme.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Vim Plugin Audit</title>
				<link>https://tuckerchapman.com/posts/vim-plugin-audit/</link>
				<pubDate>Mon, 18 May 2020 00:00:00 +0000</pubDate>
				<guid>https://tuckerchapman.com/posts/vim-plugin-audit/</guid>
				<description>&lt;p&gt;Vim is my daily driver for text editing. I keep my plugin list curated to only what I use on a regular basis. In this post I&amp;rsquo;m going to go over each plugin currently in my &lt;a href=&#34;https://gitlab.com/chaptuck/dotfiles/-/blob/b0e02adcada892477bbe7756555cb2b9d5817257/vim/init/plug.vimrc&#34;&gt;plug file&lt;/a&gt;, write a sentence about it, and determine whether is stays or goes.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Roland FP-30 and Bluetooth</title>
				<link>https://tuckerchapman.com/posts/roland-fp-30-bluetooth/</link>
				<pubDate>Mon, 11 May 2020 00:00:00 +0000</pubDate>
				<guid>https://tuckerchapman.com/posts/roland-fp-30-bluetooth/</guid>
				<description>&lt;p&gt;This may work on other Roland digital piano models but I only tested it on an FP-30 with my Motorola X4. After spending about an hour trying to figure out why my system Bluetooth could not find my piano I figured out how to actually connect. (Hint: it&amp;rsquo;s not through the system Bluetooth)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Download the &lt;a href=&#34;https://www.roland.com/global/products/piano_partner_2/&#34;&gt;Roland Piano Partner 2 App&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Turn on your piano&lt;/li&gt;&#xA;&lt;li&gt;Enable Bluetooth on your phone&lt;/li&gt;&#xA;&lt;li&gt;Turn on the Piano Bluetooth feature (on the FP-30 you hold the function/Bluetooth button and press A0)&lt;/li&gt;&#xA;&lt;li&gt;Open the Piano Partner App&lt;/li&gt;&#xA;&lt;li&gt;Tap the Gearbox in the top right corner&lt;/li&gt;&#xA;&lt;li&gt;Tap &amp;ldquo;Bluetooth MIDI Device&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Tap &amp;ldquo;SCAN&amp;rdquo; (Potentially not needed step)&lt;/li&gt;&#xA;&lt;li&gt;Select your piano from the list (FP-30 in my case)&lt;/li&gt;&#xA;&lt;li&gt;A Successful connection is when an * shows up next to the name&lt;/li&gt;&#xA;&lt;li&gt;Go &amp;ldquo;Back&amp;rdquo; on your phone (tap the triangle in Android 9.0)&lt;/li&gt;&#xA;&lt;li&gt;You will see a &amp;ldquo;Preparing Data&amp;rdquo; loading bar show up&lt;/li&gt;&#xA;&lt;li&gt;Success you are now connected to your piano&lt;/li&gt;&#xA;&lt;li&gt;Practice.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;This is confusing and I could not find how to do it in the manual or online but an hour of trouble shooting got me to these steps. If it&amp;rsquo;s not helpful to anyone else out there at least now I have it written out for myself.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Vim Has Spell Check!?</title>
				<link>https://tuckerchapman.com/posts/vim_spell/</link>
				<pubDate>Sun, 10 May 2020 00:00:00 +0000</pubDate>
				<guid>https://tuckerchapman.com/posts/vim_spell/</guid>
				<description>&lt;p&gt;Did you know vim has a build in spell check system? The built in spell system will ignore code variable names and functions by default but it does detect spelling mistakes in your comments and doc blocks (you do write helpful comments right?).&lt;/p&gt;</description>
			</item>
			<item>
				<title>A Better Way to Organize Your .vimrc</title>
				<link>https://tuckerchapman.com/posts/vimrc_organization/</link>
				<pubDate>Sat, 09 May 2020 00:00:00 +0000</pubDate>
				<guid>https://tuckerchapman.com/posts/vimrc_organization/</guid>
				<description>&lt;p&gt;Vim is a powerful customizable editor. Configuration is stored in custom text files often found in a Unix home directory (ie ~/.vimrc). This vimrc file can get to be rather large the longer one uses vim.&lt;/p&gt;&#xA;&lt;h2 id=&#34;break-the-file-into-parts&#34;&gt;Break the file into parts&lt;/h2&gt;&#xA;&lt;p&gt;The number of files you use is infinite but it works best to keep things simple and organized. I use five files: plugin loader, general settings, leader key settings, custom functions, and plugin specific settings. Source each of these in your main vimrc &lt;code&gt;$HOME/.vimrc&lt;/code&gt;. The &lt;code&gt;$HOME/.vim/init&lt;/code&gt; directory is not used by vim so I keep my files there.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to Use the Vim &lt;leader&gt; Key</title>
				<link>https://tuckerchapman.com/posts/how-to-use-the-vim-leader-key/</link>
				<pubDate>Sat, 16 Jun 2018 00:00:00 +0000</pubDate>
				<guid>https://tuckerchapman.com/posts/how-to-use-the-vim-leader-key/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Vim&lt;/strong&gt; is a keyboard driven text editor which means there are a lot of keyboard shortcuts and commands. The &amp;lt;leader&amp;gt; key is a vim tool that can be used to create personalized shortcuts. Let’s discuss a few different ways to create our own shortcuts.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Refactoring a Rails View</title>
				<link>https://tuckerchapman.com/posts/refactoring-a-rails-view/</link>
				<pubDate>Sun, 20 May 2018 00:00:00 +0000</pubDate>
				<guid>https://tuckerchapman.com/posts/refactoring-a-rails-view/</guid>
				<description>&lt;p&gt;Have you ever looked back on your code and thought “Who wrote this! ….&lt;code&gt;&amp;lt;git blame&amp;gt;&lt;/code&gt;…oh…it was me.” We are all constantly learning new things and frankly our past self is just not as smart as our current self (or so we think). So today I want to walk through a simple refactor I did on a Rails project I have worked on over the years. (Source code found &lt;a href=&#34;https://github.com/tuckerrc/jobs_map&#34;&gt;on my GitHub&lt;/a&gt;)&lt;/p&gt;</description>
			</item>
			<item>
				<title>Qgis Tutorial – Earthquakes in Oklahoma</title>
				<link>https://tuckerchapman.com/posts/qgis-tutorial-earthquakes-in-oklahoma/</link>
				<pubDate>Tue, 04 Apr 2017 00:00:00 +0000</pubDate>
				<guid>https://tuckerchapman.com/posts/qgis-tutorial-earthquakes-in-oklahoma/</guid>
				<description>&lt;p&gt;Download your own copy of QGIS from &lt;a href=&#34;https://qgis.com&#34;&gt;qgis.com&lt;/a&gt; (works on Windows, MacOS X, and Linux)&lt;/p&gt;&#xA;&lt;h2 id=&#34;overview-of-the-interface&#34;&gt;Overview of the Interface&lt;/h2&gt;&#xA;&lt;p&gt;Welcome to QGIS! Quantum GIS (now just known as QGIS) is a cross-platform, free, and open source GIS application. It has all of the features one needs in a GIS and many more can be added simply using the community hosted plugin repository. The &lt;a href=&#34;https://tuckerchapman.com/img/tutorial/qgis_ui-1024x641.png&#34;&gt;QGIS UI Reference Image&lt;/a&gt; can be used to get yourself situated if you are familiar with the ArcMap for Desktop UI.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
