<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts tagged "blogging" - nolan caudill&#39;s internet house</title>
    <link>https://nolancaudill.com/tags/blogging/</link>
    <description>Posts tagged "blogging" on nolan caudill&#39;s internet house</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 11 Feb 2026 21:29:14 -0800</lastBuildDate>
    <atom:link href="https://nolancaudill.com/tags/blogging/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Hosting an RSS reader</title>
      <link>https://nolancaudill.com/2026/02/11/hosting-rss/</link>
      <pubDate>Wed, 11 Feb 2026 21:29:14 -0800</pubDate>
      <guid>https://nolancaudill.com/2026/02/11/hosting-rss/</guid>
      <description>&lt;p&gt;In the year 2026, I decided I wanted to self-host an RSS reader. After setup, I am running &lt;a href=&#34;https://miniflux.app&#34;&gt;miniflux&lt;/a&gt; in Docker on a Synology NAS configured to expose a Google Reader API so I can use &lt;a href=&#34;https://netnewswire.com&#34;&gt;NetNewsWire&lt;/a&gt; as the client on iOS and macOS. Here&amp;rsquo;s how I got that working.&lt;/p&gt;
&lt;h2 id=&#34;motivation&#34;&gt;Motivation&lt;/h2&gt;
&lt;p&gt;My news reading method was incredibly haphazard. I flitted betweeen big news sites, apps like Apple News, various subreddits and blogs. I forgot which sites I visited. I lost track of interesting articles I came across. I was disorganized.&lt;/p&gt;
&lt;p&gt;Also, like every tech-savvy person of a particular age, I really missed Google Reader. I had dozens of RSS feeds I read daily and I missed that. I&amp;rsquo;ve tried various RSS readers over the years and none of them stuck.&lt;/p&gt;
&lt;p&gt;But, &lt;a href=&#34;https://netnewswire.blog/2026/02/11/netnewswire-turns.html&#34;&gt;on its 23rd birthday&lt;/a&gt;, I downloaded NetNewsWire and instantly loved the macOS-familiar UI.&lt;/p&gt;
&lt;p&gt;But, when exploring what RSS syncing service to use, none of the options fit what I wanted. I wouldn&amp;rsquo;t have enough feeds to justify using one of the paid services, and the iCloud option, while being the right price (read: free), is &lt;a href=&#34;https://netnewswire.com/help/iCloud.html&#34;&gt;slow&lt;/a&gt;. So, I dug into self-hosting, which NetNewsWire supports as long as the service exposes a Google Reader-compatible API.&lt;/p&gt;
&lt;p&gt;The option that floated to the top was &lt;a href=&#34;%5Bhttps://miniflux.app&#34;&gt;miniflux&lt;/a&gt;. Miniflux is, in its own words, &amp;ldquo;a minimalist and opinionated feed reader.&amp;rdquo; Perfect. It does have a very usable web UI but I planned to use it primarily via the NetNewsWire apps.&lt;/p&gt;
&lt;p&gt;I uncovered a couple of gotchas so wanted to write them here in case anyone else wants to glue these pieces together and host their own RSS reader.&lt;/p&gt;
&lt;h2 id=&#34;install-miniflux&#34;&gt;Install miniflux&lt;/h2&gt;
&lt;p&gt;First, I created a new directory on the NAS itself.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mkdir -p /[your volume here]/docker/miniflux&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Inside that directory, I created 1 file and 2 more directories.&lt;/p&gt;
&lt;p&gt;The 2 directories were: &lt;code&gt;data/postgres&lt;/code&gt; and &lt;code&gt;var/lib/postgresql/data&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The docker-compose file, titled &lt;code&gt;docker-compose.yml&lt;/code&gt; follows. Note: there are placeholder passwords and URLs in there which may be worth changing.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;version: &amp;#39;3.8&amp;#39;

services:
  miniflux-db:
    image: postgres:15-alpine
    container_name: miniflux-db
    environment:
      - POSTGRES_USER=miniflux
      - POSTGRES_PASSWORD=changeme_strong_password
      - POSTGRES_DB=miniflux
    volumes:
      - ./data/postgres:/var/lib/postgresql/data
    restart: unless-stopped

  miniflux:
    image: miniflux/miniflux:latest
    container_name: miniflux
    ports:
      - &amp;#34;8080:8080&amp;#34;
    depends_on:
      - miniflux-db
    environment:
      - DATABASE_URL=postgres://miniflux:changeme_strong_password@miniflux-db/miniflux?sslmode=disable
      - RUN_MIGRATIONS=1
      - CREATE_ADMIN=1
      - ADMIN_USERNAME=admin
      - ADMIN_PASSWORD=changeme_admin_password
      - BASE_URL=http://your-nas-ip:8080
    restart: unless-stopped
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now that you have the docker-compose file and the required directories created, run: &lt;code&gt;sudo docker-compose up -d&lt;/code&gt; to build the containers and start them.&lt;/p&gt;
&lt;p&gt;When this is complete, you should have a running miniflux reader listening on port 8080. You will now need to login to configure the service.&lt;/p&gt;
&lt;h2 id=&#34;configure-miniflux&#34;&gt;Configure miniflux&lt;/h2&gt;
&lt;p&gt;Once logged in, you will need to configure miniflux to turn on its Google Reader API, which is not on by default. Under Settings -&amp;gt; Integrations, you will see &amp;lsquo;Google Reader&amp;rsquo;. Under this section, you will need to create a new username and password (I just used the same one as the service login). Hit update and you&amp;rsquo;re done.&lt;/p&gt;
&lt;h2 id=&#34;configure-netnewswire&#34;&gt;Configure NetNewsWire&lt;/h2&gt;
&lt;p&gt;In NetNewsWire, you will want to add a new account. In the settings, under accounts, you will see &amp;lsquo;self-hosting&amp;rsquo; with FreshRSS. (NetNewsWire should probably just call this option &amp;ldquo;Google Reader API-compatible service&amp;rdquo; or something, because that&amp;rsquo;s what it is.)&lt;/p&gt;
&lt;p&gt;Select FreshRSS and then enter in the Google Reader integration username/password you just created and enter in the URL that miniflux gave you. It &lt;em&gt;should&lt;/em&gt; just be the base URL of the miniflux service with no trailing slash.&lt;/p&gt;
&lt;p&gt;If all went well, you should be in business.&lt;/p&gt;
&lt;h2 id=&#34;some-new-install-gotchas&#34;&gt;Some new install gotchas&lt;/h2&gt;
&lt;p&gt;I am not sure why but I needed to go to the &amp;lsquo;Feeds&amp;rsquo; section in miniflux and hit &amp;lsquo;refresh all feeds in the background&amp;rsquo; to get them to start polling automatically. I think this was related to the OPML import. I bet that adding a feed automatically queues up the first polling job, but an OPML import doesn&amp;rsquo;t. This fixes whatever problem that is.&lt;/p&gt;
&lt;p&gt;Also, I was moving my OPML from an existing RSS reader to this one. I wasn&amp;rsquo;t able to do it from the NetNewsWire interface but importing via the miniflux import feature worked fine.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;After following the steps above, I now have a hosted RSS reader running on my NAS and some slick native clients that stay in sync. Success.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Dark mode on the site</title>
      <link>https://nolancaudill.com/2026/02/11/2026-02-11-dark-mode/</link>
      <pubDate>Wed, 11 Feb 2026 07:30:41 -0800</pubDate>
      <guid>https://nolancaudill.com/2026/02/11/2026-02-11-dark-mode/</guid>
      <description>&lt;p&gt;Going through the lists of easy things to make the site more usable, I came across &lt;a href=&#34;https://simonwillison.net/2025/Dec/10/dark-mode/&#34;&gt;Simon&amp;rsquo;s post about using LLMs to add dark mode&lt;/a&gt; to his site. Using the literal exact same prompt with Opus 4.6, over my morning cup of coffee, Claude added dark mode. I sat at the counter with one of my kids and tested it out. Worked perfectly.&lt;/p&gt;
&lt;p&gt;Now the site will follow your OS-level dark mode setting, or if you override it by clicking the little icon in the footer, it will remember your choice. Easy.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Now with tagging</title>
      <link>https://nolancaudill.com/2026/02/10/2026-02-10-now-with-tagging/</link>
      <pubDate>Tue, 10 Feb 2026 08:47:52 -0800</pubDate>
      <guid>https://nolancaudill.com/2026/02/10/2026-02-10-now-with-tagging/</guid>
      <description>&lt;p&gt;Reading through &lt;a href=&#34;https://simonwillison.net&#34;&gt;Simon Willison&amp;rsquo;s great blog&lt;/a&gt;, I realized how useful tagging was. I wanted to add it to my blog too but dreaded retroactively reading through 100+ blogposts and thinking through a decently expansive but still concise set of taxonomy terms.&lt;/p&gt;
&lt;p&gt;Good thing there is a set of tools that exist that can consume text, make reasonable judgement on that text, and output new text. Once again: Claude to the rescue.&lt;/p&gt;
&lt;p&gt;Now, this blog has &lt;a href=&#34;https://nolancaudill.com/tags&#34;&gt;tagging&lt;/a&gt;! Once again, a task that would have taken me a good portion of a day to read through the posts and come up with something took a few minutes, and delivered something close to what I would have done.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Building a static website with Claude</title>
      <link>https://nolancaudill.com/2026/02/09/new-site/</link>
      <pubDate>Mon, 09 Feb 2026 22:21:25 -0800</pubDate>
      <guid>https://nolancaudill.com/2026/02/09/new-site/</guid>
      <description>&lt;p&gt;I moved this personal blog to a static site from Wordpress tonight, mostly on a whim.&lt;/p&gt;
&lt;p&gt;If this was 10 years ago, I&amp;rsquo;d have written out a step-by-step instructions of exports and one-off migration scripts but since this is 2026, this is a much more anticlimatic post.&lt;/p&gt;
&lt;p&gt;Instead, using Claude Code, I essentially said, &amp;ldquo;Here is an export from my wordpress site. Make a static site with a clean, simple layout, preserving the current URL structure.&amp;rdquo; A few minutes later, after asking me a few questions like which generator to use (I went with &lt;a href=&#34;https://gohugo.io&#34;&gt;Hugo&lt;/a&gt;), I had a new site. That was it. Magical!&lt;/p&gt;
&lt;p&gt;I then quizzed Claude on the best place to host a static site, and it suggested &lt;a href=&#34;https://pages.cloudflare.com&#34;&gt;Cloudflare Pages&lt;/a&gt;. Setting up the GitHub hook so that a &lt;code&gt;git push&lt;/code&gt; automatically triggers a new site build took a couple of minutes but that was the bulk of the complexity. Cloudflare has a very easy to use DNS migration wizard. Even though that&amp;rsquo;s always a little scary, the switchover worked fine.&lt;/p&gt;
&lt;p&gt;I have to say: building software with Claude is fun. I had stepped away from writing code for the better part of a decade and stepping away for a few weeks usually means new languages, libraries, tools, and services to research and learn how to use. Even when I had the itch to build something, the starting cost was huge and I just wouldn&amp;rsquo;t. Now, I can just describe what I want to see and off it goes. Excited to keep doing this more.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Tiny Tiny RSS, a Google Reader Replacement</title>
      <link>https://nolancaudill.com/2013/06/15/google-reader-replacement/</link>
      <pubDate>Sat, 15 Jun 2013 07:00:00 +0000</pubDate>
      <guid>https://nolancaudill.com/2013/06/15/google-reader-replacement/</guid>
      <description>&lt;p&gt;Google Reader is being &lt;a href=&#34;http://googlereader.blogspot.com/2013/03/powering-down-google-reader.html&#34;&gt;discontinued&lt;/a&gt; on June 30th. This is probably the web application I&amp;rsquo;ve used the most and for the longest so I was a little bummed when they made the announcement. I immediately started looking for its replacement.
I wanted the replacement to be something that had a liberal open-source license (so I could poke at the code and share patches) and something I could host myself to avoid having to worry about the whims of some big corporation&amp;rsquo;s product roadmap.
After some exploration, I found one called &lt;a href=&#34;http://tt-rss.org/redmine/projects/tt-rss/wiki&#34;&gt;Tiny Tiny RSS&lt;/a&gt;. It used just PHP and MySQL, which meant I didn&amp;rsquo;t need to install or maintain any new things on my server. The code looked relatively sane and clean so I downloaded and installed it. Within probably half an hour, I had a very usable and surprisingly feature-rich RSS reader that even included an API. It&amp;rsquo;s also multi-tenant right out of the box.
The only caveat I had was that it didn&amp;rsquo;t have a usable mobile version. Today, I figured out that some kind developer had &lt;a href=&#34;http://tt-rss.org/forum/viewtopic.php?f=22&amp;amp;t=1981&amp;amp;sid=f3ff298fc728efca855d87c6072c0715#p10233&#34;&gt;written a plugin&lt;/a&gt; that exposed a &lt;a href=&#34;http://www.feedafever.com/&#34;&gt;fever&lt;/a&gt;-compatible API which &lt;a href=&#34;http://reederapp.com/iphone/&#34;&gt;Reeder&lt;/a&gt; for iPhone supports. (Hint: After installing the plugin you have to enable API access for your account to make it work. In retrospect that seems obvious, but I had to printf-debug my way through the app to figure why it wouldn&amp;rsquo;t accept my username and password.)
&lt;a href=&#34;http://www.flickr.com/photos/nolancaudill/9054581494/&#34; title=&#34;Another your-URL-goes-here app by Nolan Caudill, on Flickr&#34;&gt;&lt;img src=&#34;https://nolancaudill.com/images/flickr/9054581494_221f9e7fc1.jpg&#34; alt=&#34;Another your-URL-goes-here app&#34;&gt;&lt;/a&gt;
The end result of all this is that I have an RSS reader that will stay running as long as I&amp;rsquo;d like with no danger of it and/or my data being sold to the highest bidder along with a nice-looking iPhone app to read on the go.
This whole thing is also proof that the web can be resilient to vendor lock-in as long open standards (like OPML, RSS, HTTP, etc.) and the spirit that encourages them (like Reeder&amp;rsquo;s your-URL-goes-here screen) sticks around.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Yearbook</title>
      <link>https://nolancaudill.com/2011/11/29/33/</link>
      <pubDate>Tue, 29 Nov 2011 08:00:00 +0000</pubDate>
      <guid>https://nolancaudill.com/2011/11/29/33/</guid>
      <description>&lt;p&gt;So I&amp;rsquo;ve been working on gathering the bits and pieces of my online life from the past year and getting them together into a book that I&amp;rsquo;m tenatively calling &amp;ldquo;Yearbook: 2011&amp;rdquo; (creative, I know).&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not entirely sure why I&amp;rsquo;m doing this, but I&amp;rsquo;m enjoying it and the fact that I might have a real, physical thing &lt;em&gt;that I built&lt;/em&gt; after it&amp;rsquo;s finished is frankly exciting.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.flickr.com/photos/nolancaudill/6423472493/&#34; title=&#34;Chapter 2: Twitter by Nolan Caudill, on Flickr&#34;&gt;&lt;img src=&#34;https://nolancaudill.com/images/flickr/6423472493_a565e8a8b8.jpg&#34; alt=&#34;Chapter 2: Twitter&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The process, like a lot of a lot of processes where you take something you&amp;rsquo;re familiar with and then turn it on its head, has already changed the way I approach what I put online, or at least my perceived impact of it. Now when I write a Twitter message or a blog post, my first thought is, &amp;ldquo;Well, that&amp;rsquo;s going in the book,&amp;rdquo; and I pause, realizing that this will be a concrete thing soon.&lt;/p&gt;
&lt;p&gt;So, I have this website, with the occasional blurb or essay, and my &lt;a href=&#34;http://www.twitter.com/nolancaudill&#34;&gt;Twitter&lt;/a&gt; account where I post mostly inane one-liners (as that&amp;rsquo;s all I&amp;rsquo;ve got room for and the message fits the medium, in my experience) and they are both entirely public. I also like to tell myself that these pieces of content will also exist forever at their current addresses, so that people thousands of the years in the future will be able to read my scribblings. But the fact that it&amp;rsquo;s &amp;ldquo;out there&amp;rdquo;&amp;ndash;as I do a gesture that&amp;rsquo;s vaguely like batting a fly away&amp;ndash;has never really felt like it was built to last or that it had any gravitas.&lt;/p&gt;
&lt;p&gt;And with this perceived slightness, I tend to treat things slightly.&lt;/p&gt;
&lt;p&gt;But now these things are going in a book and a book is a Real Thing. It&amp;rsquo;s what holds history, not just in libraries and bookstores, but in your grandparent&amp;rsquo;s attic. It&amp;rsquo;s also art, with illuminated works hundreds of years old behind glass in museums. And now I&amp;rsquo;m making one of those, too.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t have any visions of grandeur that what&amp;rsquo;s in my book is going to interest anyone but myself, and it will likely never be in a museum, but it&amp;rsquo;s an assemblage of atoms that&amp;rsquo;s going to be on my bookshelf, and will probably outlast me. That&amp;rsquo;s a completely different feeling than pushing some bits from my phone or laptop to some hard drive in a distant data center that I then have to use a computer to look at again.&lt;/p&gt;
&lt;p&gt;And unlike a computer, a book is a self-contained thing. Where my browser will load everything from pictures my friends upload, to emails sent to my landlord, to the daily news, a book is made of its pages, and that&amp;rsquo;s it. When I pick up a novel, I know I&amp;rsquo;m getting an unbroken experience of reading just one story. So I&amp;rsquo;m taking what would normally live beside everything the Internet has to offer, and putting it in its own chunk of dedicated space.&lt;/p&gt;
&lt;p&gt;Something I didn&amp;rsquo;t realize until I started to see the parts go together in the book is that it&amp;rsquo;s also a much better attempt at a truer self-portrait. None of these services by themselves gives a clear view of me as a person, but once you start piecing them together, the previously fuzzy image starts to firm up a little. It&amp;rsquo;s exactly like the &lt;a href=&#34;http://en.wikipedia.org/wiki/Blind_men_and_an_elephant&#34;&gt;blind men and the elephant&lt;/a&gt;, each trying to determine the whole by the description of its parts. I&amp;rsquo;m putting the pieces together, and, even though it&amp;rsquo;s still a bit dim, you can start to make out details in the silhouette.&lt;/p&gt;
&lt;p&gt;So, this book project has changed the way I look at these bits of content I&amp;rsquo;ve scattered around the web. None of those pieces have to be transient, and actually collecting them all and putting them side-by-side actually offers a bit of gravitas that separately they might not have.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>A Well-Designed Post</title>
      <link>https://nolancaudill.com/2011/11/28/type/</link>
      <pubDate>Mon, 28 Nov 2011 08:00:00 +0000</pubDate>
      <guid>https://nolancaudill.com/2011/11/28/type/</guid>
      <description>&lt;p&gt;Yesterday, I toyed around with the idea of turning my entire blog into a nicely-formatted book, in both PDF and epub format. This would probably interest no one but myself, but I&amp;rsquo;ve seen other people turn these online words into a feel-it-with-your-hands book, and to me, seeing something physical from the effort seems to add more weight to the work, but figuratively and literally.
I wanted Latex output, so I installed &lt;a href=&#34;http://johnmacfarlane.net/pandoc/&#34;&gt;pandoc&lt;/a&gt; (which might be one of the most magical pieces of software I&amp;rsquo;ve ever used) and ran it across the Jekyll-created HTML. I then started the yak-shaving to clean up the headers and footers and download the remote linked images. The part I enjoyed most about using pandoc is that it automatically did a lot of the spell-casting that resulted in nicely-sized images that always gives me fits when dealing with Latex.
I then tried to work all these steps into an automated flow, but realized that beyond putting files in their appropriate places, I actually enjoyed the manual &amp;ldquo;typesetting&amp;rdquo; that Latex needs so I tried to stop engineering things for once.
Once I actually saw the some hundred-odd paged book, I had a few more ideas of things that might neat to see in print from the past year and thus don&amp;rsquo;t have anything to show yet for the book efforts, but I did want to just put up a sample of what one post looks like.
&lt;a href=&#34;https://nolancaudill.com/pdfs/2011-11-24-giving-thanks.pdf&#34;&gt;Here&amp;rsquo;s my Thanksgiving post&lt;/a&gt; from last week. There&amp;rsquo;s something odd about seeing what was originally web content in a more typographic form, and it will be even more odd seeing it in print (if it progresses that far).
I plan on documenting the whole process as I&amp;rsquo;d like to see other try this out.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>My New Rule for RSS</title>
      <link>https://nolancaudill.com/2011/10/25/new-rule-rss/</link>
      <pubDate>Tue, 25 Oct 2011 20:00:00 +0000</pubDate>
      <guid>https://nolancaudill.com/2011/10/25/new-rule-rss/</guid>
      <description>&lt;p&gt;A couple of months ago, I realized that I spent way too many spare moments in front of my computer screen, trying to get my Google Reader unread count to zero.
Then, I realized that when I did get to it to zero, I got agitated. I had beaten the game, killed the end-boss, and now I wanted to play again.
So I was bothered when it wasn&amp;rsquo;t zero, and I was bothered when it was zero, and this wasn&amp;rsquo;t good.
So I declared bankruptcy and started over on the whole thing, unsubscribing from everything. (After carefully backing it up of course. Every feed is sacred, or something like that.)
&lt;img src=&#34;https://nolancaudill.com/images/reader.png&#34; alt=&#34;&#34;&gt;
I added back the blogs of a few close friends, and instead of the 20 or so music blogs subscribed to &lt;a href=&#34;http://stereogum.com/&#34;&gt;one good aggregator&lt;/a&gt;. I debated resubscribing to some of the big tech blogs, but I figured my daily visit(s) to &lt;a href=&#34;http://news.ycombinator.com&#34;&gt;Hacker News&lt;/a&gt; and simply talking with my friends and coworkers would get the important stuff in front of me.
So now that I&amp;rsquo;m slowly adding back blogs I &lt;em&gt;truly&lt;/em&gt; find useful and give me more than they take (in time, in attention), I stumbled across a good rule for my RSS reader: &lt;strong&gt;if I have to start adding tags or folders to keep my feeds organized, I have too many&lt;/strong&gt;.
I just added a new RSS feed and started to tag it, you know, to keep my addiction organized. I then stepped back and realized that the reason I was tagging it was so that I wouldn&amp;rsquo;t feel crushed by seeing so many unread blogs in my reader.
These folders masked the issue. It was similar to what a kid does when he doesn&amp;rsquo;t want to finish his vegetables so he spread them around on his plate to make it look like he ate more than he actually did.
So since I&amp;rsquo;ve declared bankruptcy on my RSS reader and did the major housecleaning, I feel &lt;em&gt;calmer&lt;/em&gt; when I&amp;rsquo;m front of my computer, and less like I need to keep hitting the lever for the next fix.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>My Jekyll and Git Workflow</title>
      <link>https://nolancaudill.com/2011/07/03/my-jekyll-setup/</link>
      <pubDate>Sun, 03 Jul 2011 07:00:00 +0000</pubDate>
      <guid>https://nolancaudill.com/2011/07/03/my-jekyll-setup/</guid>
      <description>&lt;p&gt;A few weeks ago, I decided that I wanted to start blogging again. The reasons for why belong to another post but this is a purely technical explanation of how I setup git and jekyll to do things like drafts, site design tweaks and a write-anywhere environment.&lt;/p&gt;
&lt;h2 id=&#34;git-savepoints-for-poorly-formed-thoughts-and-a-little-distribution&#34;&gt;git: savepoints for poorly formed thoughts, and a little distribution&lt;/h2&gt;
&lt;p&gt;From painful past experiences in code, I knew that version control was a must and I knew git, so git it was. Also, I could fork Tom Preston-Werner&amp;rsquo;s original &lt;a href=&#34;https://github.com/mojombo/mojombo.github.com&#34;&gt;jekyll blog&lt;/a&gt;, which I liked because it was simple and was clean enough that I could edit it without too much effort.
Another reason I&amp;rsquo;m using git is so that I can write from different physical locations. Ground zero for clumsy sentences is my laptop. My anywhere-I-am writing location is sitting on the same server that I run the site from. Publishing from my laptop is just an &lt;em&gt;rsync&lt;/em&gt;, and from the server is just a &lt;em&gt;cp&lt;/em&gt; away.
I&amp;rsquo;ve got one central repository on the server that is just a bare checkout of the blog. This is my push and pull point for both my server and laptop writing repositories. I probably could set both writing environments to talk to each other directly, but I like the simplicity of having a third repository that just gets pushed to, especially if I do some writing in one and then switch to the other.
&lt;a href=&#34;https://github.com/mncaudill/nolancaudill.com&#34;&gt;My github repository&lt;/a&gt; should more or less mirror what you see on the site. The only reason it won&amp;rsquo;t is if I&amp;rsquo;m holding back a few minor commits so I don&amp;rsquo;t spam people that follow me on github.com and I&amp;rsquo;ll batch those up. It&amp;rsquo;s only my master branch though, which doesn&amp;rsquo;t include in-process items, and I&amp;rsquo;ll explain that in a bit
When I&amp;rsquo;m at home, or have my laptop with me, I can just write locally. If I don&amp;rsquo;t have Internet access for some reason, I can keep going. This is a great improvement over my last WordPress blog. Having to write in a form field in a web browser offers too much distraction since all those interesting things are just a tab away.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssh -L 4000:localhost:4000 nolancaudill.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If I don&amp;rsquo;t have my laptop, I can just ssh into my box, locally forwarding port 4000, so I can use the webbrick server and see things in my browser by hitting &amp;ldquo;localhost:4000&amp;rdquo; as if I were working locally.&lt;/p&gt;
&lt;h2 id=&#34;git-also-great-for-drafts&#34;&gt;git: also, great for drafts&lt;/h2&gt;
&lt;p&gt;Now that I&amp;rsquo;ve got distribution and publishing down pat, I&amp;rsquo;ll explain how I do drafts. This is actually really simple: I just use a new branch coming off the master branch for every post I&amp;rsquo;m writing. When I&amp;rsquo;m ready to publish a post, I just checkout master and do a &lt;em&gt;git merge &amp;ndash;squash branchname&lt;/em&gt; and, bam, I have one commit on my master branch that introduces a new post, including any images that I&amp;rsquo;ve added.
I do a squash since I don&amp;rsquo;t really care to publish my fumblings with the English language. It&amp;rsquo;s a bit of a shame that I lose the historical record of how the post was formed since I have the data, but I realized that I would never look at it again and I don&amp;rsquo;t want the overhead of having to deal with a long standing branch for every draft.
Since I&amp;rsquo;m basically trying to keep two writing environments in sync, I found it&amp;rsquo;s crucial to not do any destructive branch operations like &lt;em&gt;rebase&lt;/em&gt;. It&amp;rsquo;s tempting since I might make a change to my master branch, like a CSS change, and want to just move my draft to the end of the branch. It&amp;rsquo;s better to just do a &lt;em&gt;merge&lt;/em&gt; and while that&amp;rsquo;s messy if it happens a lot, as soon as that branch is published, the branch goes away.
Whenever I stop writing for the session, I commit all changes to my current draft branch and do a &lt;em&gt;git push&lt;/em&gt;. My origin is set up as that central repository on my server as I push and pull a lot more frequently to that and it really is central to my flow. When I pick up at another time or place, I just do a pull, getting in changes from the other environment, and get going.
Another change I made to my flow is adding the following to my bashrc:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias jekylldraft&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vi $(git diff --name-only master -- _posts/)&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With this, on one of my draft branches, I can just run &lt;em&gt;jekylldraft&lt;/em&gt; and it figures out which file in the posts directory is not on &lt;em&gt;master&lt;/em&gt; and loads it up.&lt;/p&gt;
&lt;h2 id=&#34;design-tweaks&#34;&gt;design tweaks&lt;/h2&gt;
&lt;p&gt;If the design change I&amp;rsquo;m making is small, I&amp;rsquo;ll just add a new commit on my master branch. If something is more involved, I&amp;rsquo;ll create a new redesign branch and just merge that in when I&amp;rsquo;m done. Simple.&lt;/p&gt;
&lt;h2 id=&#34;scripts-make-my-life-easier-and-so-can-you&#34;&gt;scripts make my life easier, and so can you!&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve got a little directory that has &lt;a href=&#34;https://github.com/mncaudill/nolancaudill.com/tree/master/scripts&#34;&gt;three scripts&lt;/a&gt; in it: one to publish locally, one to publish from laptop to server, and one to do my two git master pushes. The first two could probably be combined but I&amp;rsquo;m a simple guy.
The first thing either of my publish scripts does is checkout the master branch. This stops me from doing something dumb (again) like publishing one of my draft branches. I forget things but my script never does. And I use the &lt;em&gt;&amp;amp;&amp;amp;&lt;/em&gt; bash idiom so that if the checkout from master fails, the whole script stops.&lt;/p&gt;
&lt;h2 id=&#34;backups&#34;&gt;backups&lt;/h2&gt;
&lt;p&gt;I use &lt;a href=&#34;http://www.tarsnap.com&#34;&gt;tarsnap&lt;/a&gt; to do a nightly backup of my writing directories (&lt;a href=&#34;https://github.com/mncaudill/tarsnap.pl&#34;&gt;here&lt;/a&gt;&amp;rsquo;s my crappy perl script that does this). Git&amp;rsquo;s not a backup, especially the way I use it by only publishing the master branch to github.com. I have backups running on my Linode server, backups on tarsnap, and then the code physically stored in three spots (ie, laptop, server, and master branch on github). I&amp;rsquo;m not that paranoid about losing anything and requiring redundant backup methods, this was just more a snowball of backup systems that I didn&amp;rsquo;t fully think through.&lt;/p&gt;
&lt;h2 id=&#34;other-niceties&#34;&gt;other niceties&lt;/h2&gt;
&lt;p&gt;Since I&amp;rsquo;m writing on both a Linux laptop and a Linux server, I use vim as my common editor. Here&amp;rsquo;s the settings I use in my vimrc that seem to work for me. I&amp;rsquo;ve pieced these together using the vim docs and from other various helpful blogs that I&amp;rsquo;m a bad person for not writing down and remembering to thank them.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-vim&#34; data-lang=&#34;vim&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;autocmd&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;BufRead&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;BufNewFile&lt;/span&gt; *.&lt;span style=&#34;color:#a6e22e&#34;&gt;markdown&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;setlocal&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;lbr&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;autocmd&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;BufRead&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;BufNewFile&lt;/span&gt; *.&lt;span style=&#34;color:#a6e22e&#34;&gt;markdown&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gj&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;autocmd&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;BufRead&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;BufNewFile&lt;/span&gt; *.&lt;span style=&#34;color:#a6e22e&#34;&gt;markdown&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gk&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;autocmd&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;BufRead&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;BufNewFile&lt;/span&gt; *.&lt;span style=&#34;color:#a6e22e&#34;&gt;markdown&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;setlocal&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;smartindent&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;autocmd&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;BufRead&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;BufNewFile&lt;/span&gt; *.&lt;span style=&#34;color:#a6e22e&#34;&gt;markdown&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;setlocal&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;spell&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;spelllang&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;en_us&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The first three settings are the most helpful in writing prose instead of code. The &lt;em&gt;lbr&lt;/em&gt; tells vim to wrap on word boundaries and don&amp;rsquo;t insert real linebreaks in the text. The &lt;em&gt;j&lt;/em&gt; and &lt;em&gt;k&lt;/em&gt; commands are mapped to to the helpful commands that goes down to the next row instead of the next line.&lt;/p&gt;
&lt;h2 id=&#34;fork-me&#34;&gt;fork me&lt;/h2&gt;
&lt;p&gt;If you liked to see more about how everything is laid out, and get a head start on starting your own jekyll and git enviroment, check out &lt;a href=&#34;https://github.com/mncaudill/nolancaudill.com&#34;&gt;my stuff&lt;/a&gt; and feel free to fork.
&lt;strong&gt;Update&lt;/strong&gt;: I added the bashrc snippet for &lt;em&gt;jekylldraft&lt;/em&gt;. A second update was made later that stopped the bash subsitution (the backticks) from running everytime bashrc was loaded.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>FeedBurner</title>
      <link>https://nolancaudill.com/2009/04/22/feedburner/</link>
      <pubDate>Wed, 22 Apr 2009 07:00:00 +0000</pubDate>
      <guid>https://nolancaudill.com/2009/04/22/feedburner/</guid>
      <description>&lt;p&gt;Switched over to FeedBurner for my feeds. Let&amp;rsquo;s see if this works.&lt;/p&gt;
</description>
    </item>
  </channel>
</rss>
