<?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 "tools" - nolan caudill&#39;s internet house</title>
    <link>https://nolancaudill.com/tags/tools/</link>
    <description>Posts tagged "tools" on nolan caudill&#39;s internet house</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 09 Feb 2026 22:21:25 -0800</lastBuildDate>
    <atom:link href="https://nolancaudill.com/tags/tools/feed.xml" rel="self" type="application/rss+xml" />
    <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>Software I gladly pay for</title>
      <link>https://nolancaudill.com/2024/09/11/software-i-gladly-pay-for/</link>
      <pubDate>Wed, 11 Sep 2024 14:25:23 +0000</pubDate>
      <guid>https://nolancaudill.com/2024/09/11/software-i-gladly-pay-for/</guid>
      <description>&lt;p&gt;I always enjoy reading about software that people will actually choose to pay for and endorse, so here&amp;rsquo;s some of mine.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://junecloud.com/software/iphone/deliveries.html&#34;&gt;Deliveries&lt;/a&gt;&lt;/strong&gt;: We probably buy more than we should over the Internet, but this helps us track what&amp;rsquo;s coming and when. The bonus feature that I enjoy is the calendar syncing that add arrival dates so I can see when things are coming out at a glance. It has some fiddly bits, like a couple of the delivery services don&amp;rsquo;t expose an API Deliveries can hit to automatically update but being able to manually set delivery dates is a decent workaround.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://flighty.com&#34;&gt;Flighty&lt;/a&gt;: If you travel a lot by plane, Flighty can you help stay up to date with all the connections, delays and flight times in one polished app. This past summer, we did a multi-week, many-many flight trip to the East Coast, Amsterdam, and Copenhagen, with connections galore and this app was my go-to. It knew about delays sooner than the boards at the airport in some cases, and had lots of extra info about flight ETAs that were fun to know, like how long you taxied for. Another bonus: it syncs with your calendar (if you&amp;rsquo;re noticing a theme&amp;hellip;) which would auto-update as flights moved or got rescheduled, leaving one less thing to think about before travel.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://www.timeshifter.com&#34;&gt;Timeshifter&lt;/a&gt;&lt;/strong&gt;: With that same big trip, jet lag was a concern and this app was truly clutch. You enter in your flight information and sleep patterns and it gives you a regimen of when to seek and avoid light, when and when not to drink caffeine and other tips leading up to the trip. We followed it fairly well, but not perfectly, but landed in Amsterdam after an overnight flight feeling adjusted and honestly had no noticeable jet lag for the trip.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://macrofactorapp.com&#34;&gt;Macrofactor&lt;/a&gt;: I saw a trendline on my weight earlier in the year that I wanted to reverse so I pulled out a calorie tracking app (again) to attempt to lose some weight (again). In reading about nutrition, I saw Macrofactor pop up a few times. This app works by &amp;ldquo;simply&amp;rdquo; taking the number of calories you take in, looking at how your weight changes over the previous week and using that to figure out how many calories you typically burn. It then spits out some calorie goals for the upcoming week. Best of all: it&amp;rsquo;s the first weight management thing I&amp;rsquo;ve done that&amp;rsquo;s ever worked, and I learned a lot about nutrition along the way.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://www.raycast.com&#34;&gt;Raycast&lt;/a&gt;&lt;/strong&gt;: I&amp;rsquo;ve shied away from using the Spotlight-esque apps over the years but decided to give Raycast a go. I use it probably a few hundred times a day now. It has simplified logging into my next Zoom meeting, rearranging the windows on my desktop, gives me a more useful calculator and unit conversions tool, and the quick links make it so much faster to go to the same 3-4 URLs I go to during the workday.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://www.ynab.com&#34;&gt;YNAB&lt;/a&gt;&lt;/strong&gt;: Having a budget gives me a great peace of mind and YNAB works perfectly for me. It&amp;rsquo;s a more powerful version of the envelope system of budgeting (&amp;ldquo;give every dollar a job&amp;rdquo;) and it&amp;rsquo;s nice to see how our spending breaks down and how particular goals trade-off. We&amp;rsquo;ve been using it for our budgeting software since 2017 and I&amp;rsquo;m positive money would be a greater source of stress if it were not for YNAB.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are a few of the daily go-tos, and is undoubtedly an incomplete list, but these are the few I rely on and willingly pay money for.&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>How Secure is my Dropbox?</title>
      <link>https://nolancaudill.com/2013/04/14/how-secure-is-dropbox/</link>
      <pubDate>Sun, 14 Apr 2013 07:00:00 +0000</pubDate>
      <guid>https://nolancaudill.com/2013/04/14/how-secure-is-dropbox/</guid>
      <description>&lt;p&gt;The answer to this is: Secure as any other &amp;ldquo;private&amp;rdquo; content uploaded to the Internet, which is &amp;ldquo;not very.&amp;rdquo;
&lt;a href=&#34;https://www.dropbox.com/&#34;&gt;Dropbox&lt;/a&gt; is a widely-used service that lets you keep a specific directory in sync across many computers. Copy a file into the Dropbox folder on your work computer and it is nearly instantly available on your phone and your home computer. No more emailing files to yourself or scrambling to find a site that&amp;rsquo;ll let you upload a big file. They even give you a slick, web-based interface to browse your files.
This all sounds really easy and convenient which, unfortunately, usually means it&amp;rsquo;s not secure. The problem is that Dropbox stores your files on their servers encrypted in a way that they can read them.
First, what does one mean by &amp;ldquo;secure&amp;rdquo;? My definition of secure is that no one else in the world could possibly see the contents of something unless I let them. If it&amp;rsquo;s a text file, no one except me can read it; if it&amp;rsquo;s a photo, no one except me can see it.
For most of the files people want to share or sync, the security level of Dropbox is adequate. Disregarding that bug a couple of years ago &lt;a href=&#34;https://blog.dropbox.com/2011/06/yesterdays-authentication-bug/&#34;&gt;where anyone could log in with any password&lt;/a&gt;, Dropbox is password protected and they recently introduced two-factor authentication, where you have to type in both your password and a short-lived, always-changing set of numbers from your phone. All connections between you and Dropbox go over SSL. This means no one can snoop on files you send to Dropbox and no evil person can trick your computer into thinking they are Dropbox.
From my limited knowledge of Dropbox&amp;rsquo;s internals, gleaned from reading a few security analysis reports, they do encrypt your files before uploading them. The downside is that they &lt;a href=&#34;https://www.dropbox.com/help/28/en&#34;&gt;own the key to decrypt them&lt;/a&gt; &amp;ldquo;to ensure everyone has the ability to view and share files on the web painlessly.&amp;rdquo; Translated, this means that people-who-are-not-you can read your files.
I&amp;rsquo;ll assume that Dropbox, the company, follows industry standards for security. Only certain engineers get access to certain machines. Only certain support people get access to your files as necessary. Only code that&amp;rsquo;s been properly vetted for security bugs is deployed.
The weak spot in all of Dropbox&amp;rsquo;s efforts are the people. This isn&amp;rsquo;t a knock on Dropbox at all; people are the weakest spot in ANY security system.
&lt;a href=&#34;https://xkcd.com/538/&#34;&gt;&lt;img src=&#34;https://nolancaudill.com/images/external/security.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;
Servers are constantly barraged by people trying to break in, and they often succeed. Support people sometimes stray and snoop at files they they shouldn&amp;rsquo;t. Developers write bugs that let random people on the internet get access to things they shouldn&amp;rsquo;t. It happens, despite best efforts in engineering or culture. People make mistakes.
If you&amp;rsquo;re wanting to keep your music in sync between computers, or want to quickly send a photo to a friend, Dropbox is great. It&amp;rsquo;s incredibly convenient. If it&amp;rsquo;s a file that you wouldn&amp;rsquo;t want another person to have, like your password file or financial documents, you don&amp;rsquo;t give it to Dropbox.
There is one (and only one) workaround to this though. If you encrypt a file on your computer before giving it Dropbox, they won&amp;rsquo;t be able to read it. &lt;a href=&#34;https://agilebits.com/onepassword&#34;&gt;1Password&lt;/a&gt;, the popular password manager, takes this approach. They store your passwords in a file they then encrypt on your computer using high-grade encryption software. They then place this encrypted file into your Dropbox. Even if this file was to leak somehow, no one else but you could open it. Dropbox is purely the syncing service, which is still a handy thing to have.
The sad part of encryption is all the tools are terribly hard to use. &lt;a href=&#34;http://www.truecrypt.org/&#34;&gt;TrueCrypt&lt;/a&gt; is probably the easiest of the bunch but there&amp;rsquo;s still a bit of learning curve to the terminology (partitions, volumes, and encryption algorithms?). I use &lt;a href=&#34;http://www.gnupg.org/&#34;&gt;GnuPG&lt;/a&gt; to encrypt my files, but that involves using a command-line interface, something most people aren&amp;rsquo;t (and probably shouldn&amp;rsquo;t have to be) comfortable using. &lt;a href=&#34;https://www.openssl.org/&#34;&gt;OpenSSL&lt;/a&gt; is the Swiss Army knife of all things encryption but using it properly is like knowing some secret wizard&amp;rsquo;s spell.
Dropbox can read anything you give to it, in the state you give it to them. Give them something that only you can read and you get the joy of having this file everywhere while still being the only one who can open and read it.
I&amp;rsquo;m not saying to not use Dropbox. It&amp;rsquo;s just a fact that any file uploaded to Dropbox, given enough time, stands a good chance of being seen by someone you don&amp;rsquo;t know, so adjust your file syncing accordingly.
&lt;em&gt;This post was inspired by &lt;a href=&#34;https://twitter.com/kellan/status/323092603761479681&#34;&gt;a Twitter message from Kellan&lt;/a&gt; yesterday.&lt;/em&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title>FlickrTrickle</title>
      <link>https://nolancaudill.com/2013/03/30/flickrtrickle/</link>
      <pubDate>Sat, 30 Mar 2013 07:00:00 +0000</pubDate>
      <guid>https://nolancaudill.com/2013/03/30/flickrtrickle/</guid>
      <description>&lt;p&gt;This is a little tool that I wrote a couple of years ago that I think a handful of people use occasionally. To keep up with my philosophy of &amp;ldquo;if it can be open sourced, it should be open sourced,&amp;rdquo; combined with asking for people&amp;rsquo;s read-and-write privileges to their Flickr accounts without showing the code, I finally got around to taking out the secret config bits, writing a README and &lt;a href=&#34;https://github.com/mncaudill/flickrtrickle&#34;&gt;opening it up&lt;/a&gt;. Below is a copy of the README.&lt;/p&gt;
&lt;h2 id=&#34;what&#34;&gt;What?&lt;/h2&gt;
&lt;p&gt;FlickrTrickle lets you slowly introduce photos you upload to Flickr into your contact&amp;rsquo;s streams so they&amp;rsquo;ll get seen by working around Flickr&amp;rsquo;s interface that only shows the last five photos show from a contact, regardless of how many they just uploaded.&lt;/p&gt;
&lt;p&gt;This is the code behind &lt;a href=&#34;https://flickrtrickle.com&#34;&gt;FlickrTrickle&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;why&#34;&gt;Why?&lt;/h2&gt;
&lt;p&gt;So let&amp;rsquo;s say you go on a trip, like hiking the Appalachians, touring federal prisons, or visiting Disneyland, and get shutter-happy and take more than 5 photos. With the rise of digital cameras, taking multiple pictures in one day is not unheard of, and is practically encouraged in some circles. Now, you want to upload your more-than-a-handful number of pictures to Flickr. You&amp;rsquo;re quite proud of these photos, either due to their composition, their dynamics, or the way the light plays softly against edges of your latte art next to the kitten, and want your friends to see them. But Flickr (rightfully) wants to keep your photos-from-your-friend&amp;rsquo;s stream from being dominated by one person if they were to upload 150 photos so they only show the last five uploaded from each your contacts. This is very egalitarian of them.&lt;/p&gt;
&lt;p&gt;Through anecdotal experience, anything beyond that 5-photo barrier gets next to no views. Maybe my storytelling abilities don&amp;rsquo;t drive people to want to see those next photos but the interface doesn&amp;rsquo;t help me out either.&lt;/p&gt;
&lt;p&gt;You want more. You want your friends to see your photos. The best way to make this happen for me is to only upload a maximum of five at a time. Remembering to do this and keeping track of what you&amp;rsquo;ve already made public is an exercise in bookkeeping, something that computers are quite good at and my wife will attest to that I&amp;rsquo;m terrible at.&lt;/p&gt;
&lt;h2 id=&#34;how&#34;&gt;How?&lt;/h2&gt;
&lt;p&gt;The way around this is to use three different Flickr features: tags, privacy settings, and the date-posted-at attribute.&lt;/p&gt;
&lt;p&gt;Flickr sorts your photos in the global stream by the date posted to Flickr. Like most things on the site, this is adjustable by the API, meaning you can lie to the computers and say &amp;ldquo;yep, I uploaded this one a second ago even though you saw me upload it two weeks ago.&amp;rdquo; Computers are gullible that way. We can use that superpower and upload photos to Flickr whenever we&amp;rsquo;d like but set them private just to get them up there. Sometimes you want a photo to be a private without being visible to this trickling-interface (trickle-face?) so the code only pulls photos you&amp;rsquo;ve tagged with &amp;ldquo;flickrtrickle.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Then through a magical web interface (aka, this code), you select the ones you want to be visible to your friends and the date stuff automatically work itself out so it looks like you uploaded them at that moment.&lt;/p&gt;
&lt;p&gt;You get to upload all your photos to Flickr at one time, and then &amp;ldquo;trickle&amp;rdquo; them in a few at a time.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Security vs Convenience</title>
      <link>https://nolancaudill.com/2012/12/18/15/</link>
      <pubDate>Tue, 18 Dec 2012 05:57:00 +0000</pubDate>
      <guid>https://nolancaudill.com/2012/12/18/15/</guid>
      <description>&lt;p&gt;Until a few months ago, my Flickr account was still using the same 6-letter password that Yahoo automatically assigned to me in the late 1990s. Most of my other accounts were using a variation of this password, with a dumb algorithm that used pieces of the site&amp;rsquo;s URL with some numbers attached. None of this was good.&lt;/p&gt;
&lt;p&gt;After &lt;a href=&#34;http://www.emptyage.com/post/28679875595/yes-i-was-hacked-hard&#34;&gt;Mat Honan&amp;rsquo;s terrible hacking fiasco&lt;/a&gt; this past summer, I realized that, yeah, this could happen to me too and I should just take care of locking everything down the best I can. Here&amp;rsquo;s the current state of how I&amp;rsquo;m staying safe online.&lt;/p&gt;
&lt;p&gt;The first major improvement I made is that I started &lt;strong&gt;using a password manager&lt;/strong&gt;, going with &lt;a href=&#34;https://lastpass.com&#34;&gt;LastPass&lt;/a&gt;. I&amp;rsquo;ve used a Linux laptop at home forever and use Macs at work and have an iPhone so I needed something that worked on these different systems. LastPass has an iPhone app, a Chrome plugin, and a nifty website so this worked for me. Quite a few of my friends use &lt;a href=&#34;https://agilebits.com/onepassword&#34;&gt;1Password&lt;/a&gt;, which works on the same principle of storing passwords in an strongly encrypted file. The main difference is that LastPass stores this encrypted file for you whereas 1Password requires you to take care of transporting, protecting, and syncing this file.&lt;/p&gt;
&lt;p&gt;After using a password manager for a few months, there&amp;rsquo;s no way I could go back to remembering a hundred or so slightly different passwords and often having to reset them due to forgetfulness.&lt;/p&gt;
&lt;p&gt;I then started making the effort that every time I hit a site that hadn&amp;rsquo;t been added to my LastPass account, I would change the password to a new, machine-generated password. I also started storing &lt;strong&gt;fake answers to security questions&lt;/strong&gt; alongside each password in a special notes field the manager provides. Now every site I log into has a long, hard-to-crack, and unique password with security questions that no one could answer.&lt;/p&gt;
&lt;p&gt;My current goal is to know only the password to my password manager with all the others locked away. The downside to this is all my passwords are protected by just one password which is a weak spot as passwords can be logged, guessed, or brute forced. Luckily, LastPass offers &lt;strong&gt;two-factor authentication&lt;/strong&gt; which means that people would need both the password and my phone that runs the Google Authenticator app.&lt;/p&gt;
&lt;h2 id=&#34;the-tricky-thing&#34;&gt;The tricky thing&lt;/h2&gt;
&lt;p&gt;Using two-factor authentication is incredibly secure but the tricky part to consider is what happens when I can&amp;rsquo;t access my phone, like in the case of the battery being dead, or stolen or lost in the worst case. Most services that offer two-factor authentication also give you the option to set up ahead of time a short list of one-time passwords. These should be generated and stored where you always have access to them. I store these in two spots: in my wallet and a symmetrically-encrypted file on my personal server for redundancy.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Security and convenience sit on opposite ends of a spectrum. While it takes a little effort to set up, it makes your accounts much more secure from data leaks and hacking attempts and not having to remember multiple, insecure passwords is a burden one should be happy to be relieved of.&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>Nobody puts tarsnap in a corner</title>
      <link>https://nolancaudill.com/2011/11/24/nobody-puts-tarsnap-in-a-corner/</link>
      <pubDate>Thu, 24 Nov 2011 08:00:00 +0000</pubDate>
      <guid>https://nolancaudill.com/2011/11/24/nobody-puts-tarsnap-in-a-corner/</guid>
      <description>&lt;p&gt;I woke up this morning around 7:30 with my laptop (a Lenovo R61i running ArchLinux) not feeling quite as snappy as usual. After viewing &lt;em&gt;top&lt;/em&gt;, I saw where my nightly backup to tarsnap was still running, which kicks off via cron. This script usually takes 5 minutes, tops.&lt;/p&gt;
&lt;p&gt;My first feeling was that it was probably the couple of gigabytes of email that I backed up from Gmail yesterday, though even with the extra bits, my outbound bandwidth should have been able to allow that go through much faster than 4+ hours.&lt;/p&gt;
&lt;p&gt;So I attached to the running tarsnap process with &lt;em&gt;strace&lt;/em&gt;, just to see what it was doing. I saw lots of selects, receives, and sends, so it appeared to be sending things across the network, which was good.&lt;/p&gt;
&lt;p&gt;Seeing the network activity, even though it was behaving properly, set off alarms. A bunch of new files to backup wasn&amp;rsquo;t the only thing I changed yesterday: I had also switched out my Linksys WRT54GL&amp;rsquo;s router firmware with &lt;a href=&#34;http://www.polarcloud.com/tomato&#34;&gt;Tomato&lt;/a&gt;, mainly due to its extensive Quality-of-Service settings.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve got a few streaming media devices around the house and I wanted to give them priority (based on MAC, static IP, network interface, etc).&lt;/p&gt;
&lt;p&gt;Another nice thing about Tomato is that comes with graphs. I love graphs, and Tomato gives you bandwidth graphs, broken down by timerange and NIC.&lt;/p&gt;
&lt;p&gt;Pulling up the graph verified that I had a block of outbound traffic start at 3am, but it was never rising above 30kbps. It was being capped.&lt;/p&gt;
&lt;p&gt;So I went back to the QoS interface and sure enough there was a class of traffic labeled &amp;ldquo;lowest&amp;rdquo; for &amp;ldquo;Bulk Traffic&amp;rdquo; (which matched any TCP/UDP packets heading out to a port 1024 or above) and it was being capped at 30kbps. While fiddling with the inbound limits in the QoS admin, I &lt;em&gt;completely&lt;/em&gt; glazed over the &lt;em&gt;outbound&lt;/em&gt; limit defaults. (Also, this is why I&amp;rsquo;m not a network operator.)&lt;/p&gt;
&lt;p&gt;Since this is the only outbound traffic of any significance through this router, and I run it at night to not interfere, I just disabled all outbound limits.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the 24-hour bandwidth graph after turning the outbound limits off:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://nolancaudill.com/images/tomato.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;The green is outbound traffic, being capped for several hours, and then spiking and then quickly finishing.&lt;/p&gt;
&lt;p&gt;So Tomato is awesome but is evil in that way that only computers can be, which is by doing exactly what you tell them to do.&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>
  </channel>
</rss>
