A Case of the Mondays

Dec 17, 2018

At 4:30 this morning, I awoke to our daughter (for the umpteenth time) crying out from her bed for who knows what reason. My wife had just put her back to bed after an early morning feeding. Seeing as my wife had just gotten back to bed herself, I got up to give her a break. After calming our daughter down, our cats decided it was immediately time to eat. Rather than put up with another hour or so of cat mischievousness, I decided to go ahead and feed them.

Having fed the cats, I headed back upstairs to bed. About ten minutes later, I hear a metallic thunk from downstairs. Getting up once again, I went back downstairs to find that I had left the can of cat food on the counter. Our incredibly food-motivated calico had eaten about half of the can, and had knocked it onto the floor, spilling cat food everywhere. After ten more minutes of cleaning (and swearing), I was now wide awake. So I decided to go ahead and get up.

At 6:45, after working for awhile, I decided to have breakfast. Something tasted off, but I chalked it up to being sleep deprived. Halfway through the meal, however, I discovered that the milk I was using was spoiled. I ended up having to toss the rest of the meal, and was too tired to make something else.

As I was about to head out the door to work, our daughter started fussing again, loudly. I brought her back downstairs to calm her down and give my wife some more sleep. After another hour, our daughter fell back asleep, and I put her back in her bed. I quickly gathered my stuff and headed to work, dazed, confused, and hungry.

YouTube Railfanning

Dec 9, 2018

I've loved trains since I was a child, and it's a passion I never grew out of. In fact, one of the best parts of our trip to Switzerland last year was riding the rails, which we did each day. That is one of the (many!) reasons we wish to return to that fantastic country.

Here in the United States, train spotting (i.e. railfanning) primarily consists of watching freight traffic. As fun as it is to see a train in person, I have neither the time nor the inclination to get in my car and ride around chasing trains. To my good fortune, there are plenty of people on YouTube who do enjoy that pursuit and who film their efforts.

One of the best channels I've found to help me scratch that itch is Distant Signal Productions. Danny Harmon, based near Tampa, Florida, wonderfully narrates his railfan adventures. That he works in television is apparent, both from the professional voice-overs to the fantastic video editing. Here are two great introductory videos to his channel:

I learn quite a bit each time I watch one of his videos, and I enjoy it immensely. Another channel worth checking out is Delay in Block Productions, another very professional channel. This video on the Blue Ridge Southern Railroad was exceptionally shot, and fun to watch.

Who Needs Sleep?

Dec 5, 2018

My wife and I welcomed our first child, a daughter, in late October. Our lives have changed so much in the few short weeks since. Former routines have been shattered. Thought patterns changed. Our two house cats even behave differently!

Prior to her arrival, we often got similar comments from friends and strangers: "sleep while you can." If another parent happened to say these words, they inevitably came with a knowing glance or twinkle of the eye. Though unsaid, the implied "trust me on this, and enjoy it while it lasts" always came through with conviction.

Now that we're several weeks into parenthood, I can better identify with those parenting veterans. I knew sleep was going to be a precious commodity, but I didn't know to what extent. Some nights are better than others (and things are slowly improving), but lots of mornings still start in a dense fog of exhaustion. I'm most amazed at how my body has adjusted to this change. As it turns out, we humans can apparently survive on less than 8 hours of sleep a night; who knew?!

In the end, the lack of sleep is small potatoes. When your child needs you, you're there for her in a heartbeat. And when she looks at you and smiles, it gives you the energy to do it all a hundred times over.

Southern Biscuits

Dec 2, 2018

I'm transcribing the White Lily biscuit recipe here, because I hate having to look for it when I want to make some biscuits. This is a great and simple recipe that yields terrific results. Be sure, however, to use the right kind of self-rising flour (White Lily or Southern Biscuit brands are best). These brands consist of soft winter wheat, which is generally better for biscuits.

I also typically double this recipe, since I cut them larger than the recipe calls for (I use a 2 and 3/4 inch cutter).

  • 2 cups self-rising flour
  • 1/4 cup vegetable shortening (e.g. Crisco)
  • 3/4 cup buttermilk

  • Heat oven to 475°F.

  • Place flour in a large bowl. Cut in shortening with a pastry blender (or two forks or knives) until the crumbs are the size of peas. Add buttermilk, stirring with a fork until the flour is moistened.
  • Turn the dough onto a lightly floured surface. Knead gently 5 or 6 times. Roll the dough into a circle that is 3/4 to 1 inch thick. Cut out biscuits using a 2-inch biscuit cutter, and place on a baking sheet 1 inch apart (for softer biscuits, arrange so edges almost touch). Shape dough scraps into a ball, flatten into a circle, and cut remaining biscuits.
  • Bake for 8 to 10 minutes until golden brown. Remove from oven and brush with butter, if desired.

Yields about 12 biscuits.

Slimming Down

Nov 30, 2018

After what seems like an eternity, I've finally had some spare time to dedicate to this website. I've developed a brand new theme for the site, which is visually a lot simpler than the old one. I've ditched the old branding, deciding to stick with a simpler-is-better mindset. In the process of doing this update, I've removed a number of old posts that I feel no longer fit here (namely all the posts on my now-unsupported Firefox extensions and tutorials).

I hope to take this website in a slightly different direction than I have gone in the past. This visual refresh is one step on that journey.

Since I no longer subscribe to my local newspaper, I now primarily read daily comic strips through RSS feeds. comicsrss.com carries the vast majority of the strips I read, but several key strips are not included. It turns out that these missing strips are all owned by King Features which, frustratingly, doesn't provide RSS feeds to their strips.

I have now fixed that.

My new project, comics-rss, is now available for users interested in creating RSS feeds to the comic strips provided by King Features. The project is admittedly brittle at the moment, but it has worked well for me so far. A number of improvements are planned:

  1. The script currently caches the comic strips locally, linking to the cached copy. I'd like to provide an option to use direct links instead, skipping the cache altogether.
  2. Cached strips are not currently cleaned up, so the folder into which they are stored will grow each day. I'll be adding an "expired" configuration option to clean things up.
  3. Error checking in the configuration file isn't very robust, and needs to be improved.

I would be interested in any feedback you might have on this project. If you find bugs or have suggestions for improvement, be sure to file them on the project issues board.

NC Zoo Photos

Oct 4, 2018

My wife and I visited the NC Zoo recently, and I naturally took my camera. Here's a look at what we saw.

Do you run a WordPress site hosted at DreamHost? Are you seeing infinite redirect errors after adjusting the Do you want www in your URL? setting in the DreamHost control panel? Well friend, I had that same issue. Let me tell you how I fixed it. In this example, I will be migrating from the Add www to the Remove www value for the aforementioned setting.

Step 1: Change WordPress internal settings

  1. In WordPress, browse to the Settings » General menu item.
  2. Change both the WordPress Address and the Site Address to the new URL (in this case https://borngeek.com). Make sure there's no trailing slash.

Step 2: Change DreamHost control panel settings

  1. In the DreamHost control panel, navigate to the Domains » Manage Domains menu item.
  2. Click the Edit link next to the domain you want to change.
  3. Set the Do you want www in your URL? setting to the desired value.
  4. Click the Save button to save the change.

Step 3: Change https settings (if applicable)

This is the step that I got tripped up on (but finally stumbled upon). My site has HTTPS turned on, and there's a setting we need to change.

  1. On the Domains » Manage Domains page, click the https On link next to the domain you're changing.
  2. Change the Choose exact URL setting to the variant of your choice.

Now sit back and wait the 5 to 10 minutes for everything to take effect.

Snickerdoodle Cookies

Sep 18, 2018

One of my favorite cookies! If you like a softer cookie, try the second variant.

Coating

  • 1/4 cup granulated sugar
  • 2 Tbsp cinnamon

Cookies

  • 1 cup shortening
  • 1-1/2 cups sugar
  • 2 eggs
  • 2-2/3 cups flour
  • 2 tsp cream of tartar
  • 1 tsp baking soda
  • 1/2 tsp salt

Steps

  1. Preheat oven to 400 degrees.
  2. In a small bowl, mix the coating ingredients together and set aside.
  3. In a second medium bowl, combine shortening, sugar, and eggs, mixing together well.
  4. In a third bowl, mix together the flour, cream of tartar, baking soda, and salt.
  5. Add the shortening mixture to the flour mixture, combining well.
  6. Roll dough into balls (size of your choosing), and then roll into the cinnamon and sugar mixture.
  7. Place the balls of dough on an ungreased cookie sheet.
  8. Bake for 8 to 10 minutes.

Note that the larger the cookie, the longer it may take to bake fully.

Chicken Pie

Sep 16, 2018

Here's another great recipe I grew up eating. The sage in this recipe is the key!

  • Pie crusts (we use store-bought ones like the ones from Pillsbury)
  • Shredded, cooked chicken (roughly 2 to 3 cups); we typically get a rotisserie chicken and use part of that
  • 1 package (1 pound) frozen mixed vegetables
  • 1 stick butter (can use less if desired; 1/2 stick might be ideal)
  • 1 chopped onion
  • One can cream of chicken soup
  • 1-1/2 tsp sage
  • 1-1/2 tsp poultry seasoning

Cook the package of frozen vegetables in salted water. While that is cooking, prepare the bottom pie crust in a pie dish. Next, melt the stick of butter in a skillet, and saute the chopped onion in it. In a large bowl, mix the onion, shredded chicken, cream of chicken soup, and the cooked vegetables. Add the sage and poultry seasoning, mixing gently so as to not tear up the vegetables.

Put this mixture in the bottom pie crust and cover with the top crust. Cut small slits in the pie crust for steam to escape. Bake at 375 until the crusts are done (30 minutes or so).

Photo Post-Processing

Jun 24, 2018

I know that in the world of photography, post-processing is a very personal topic. Every photographer has a different workflow, especially when it comes time to process their photos. Mine has always been pretty haphazard, and for a long time I haven't been as happy with my photos as I would like.

I shoot RAW images, which ultimately gives me a lot more creative control over the end product. Maximizing those possibilities, however, requires effort that I frankly haven't been putting in. I've recently decided to change that, and I'm already seeing improved results. One of my recent photo albums, focusing on garden macro images, is the first album into which I put extra effort into the post-processing step. I'm really happy with every single photo in that album.

Over the past few weeks, I've been watching a lot of online tutorials on post-processing workflows, tips, and tricks. Anthony Morganti's YouTube channel has been particularly helpful to me (he has lots of great pointers).

I've posted a few photos below to show the before and after effects of what I've learned. All of the "before" shots are photos that are posted in my public albums (all three of these shots come from the Lausanne, Switzerland photo album). If you happen to be reading this in an RSS reader, click through to the site for a better before/after experience where the images are stacked.

The first photo is a shot of a castle we visited. My "before" shot lacked detail, was fairly flat, and was generally overexposed. The "after" shot uses improved color, is a better crop (removing a stray head from the bottom of the shot), and has more detail.

This second photo was taken in the castle above. Again, there was missing detail, highlights were really overblown, and there was a general lack of contrast.

One final example originally suffered from overexposure and a lack of contrast. Note how so much more detail shows up in the leaves of the grapevine.

I'm looking forward to using my new-found skills in future photo albums.

Eno River in April

Jun 17, 2018

I'm clearing out some old photo albums from my backlog, including this one from a visit to Eno River state park in April.

June Garden Macros

Jun 13, 2018

I've posted some new macro photos taken from my garden tonight. The colors in some of these photos are really beautiful, in my opinion. I hope to continue posting new photos like this.

The second set of photo albums from last year's trip to Switzerland have been posted. First up this time is an album on our visit to Lausanne and its surrounding areas (a nice place to visit), followed by an album about Zermatt and the Matterhorn. Enjoy!

Last year, my wife and I spent two glorious weeks in Switzerland. While there, we hiked over 90 miles and visited a number of incredible places. We both fell in love with the country, and we intend to return in the future. If I had enough money, I'd even consider living there (though the cost of living is ridiculous)!

I've finally posted photos from this trip to my photos site. The first two albums cover our visits to Luzern and Wengen. Wengen is my top spot in Switzerland, and is perhaps the most beautiful place on Earth.

I will post two more albums in the next week or so, covering the second half of our trip. Stay tuned!

A Subtle Python Bug

Feb 23, 2018

I recently had a very subtle bug with an OrderedDict in my Python code at work. I constructed the contents of this object from a SQL query that was output in a specific order (can you spot the bug?):

qs = models.MyModel.objects.all().order_by("-order")
data = OrderedDict({x.id: x.name for x in qs})

My expectation was output like the following, which I was seeing on my development system (Python 3.6):

OrderedDict([(4, 'Four'), (3, 'Three'), (2, 'Two'), (1, 'One')])

However, on my official sandbox test system (which we use for internal testing, running Python 3.5), I was seeing output like this:

OrderedDict([(1, 'One'), (2, 'Two'), (3, 'Three'), (4, 'Four')])

There are actually two issues in play here, and it took me a while to figure out what was going on.

  1. First, I'm constructing the OrderedDict element incorrectly. I'm using a dictionary comprehension as the initialization data for the object's constructor. Dictionaries are (until recently) not guaranteed to preserve insertion order when iterated over. This is where my order was being screwed up.
  2. Second, the above behavior for dictionary order preservation is an implementation detail that changed in Python 3.6. As of 3.6 (in the CPython implementation), dictionaries now preserve the insertion order when iterated over. My development system, running on 3.6, was therefore outputting things as I expected them. The sandbox system, still running 3.5, did not. What an annoyance!

I've learned two valuable lessons here: (a) make sure you're running on the same levels of code in various places, and (b) don't initialize an OrderedDict with a dictionary comprehension.

As I age, my vision is getting worse (and it's already pretty bad). At work, I use a three monitor setup: my laptop is the middle screen, and two external monitors sit to either side. Given the large screen real estate, and given my increasingly bad eyesight, I've been having a tough time finding my mouse pointer. Windows has an option to show the location of the mouse pointer when you press the Ctrl key, but that has limited usefulness (though I do use it from time to time).

I recently stumbled upon a neat feature in Windows 10 that has helped me tremendously. There are several mouse-specific features in the Ease of Access section of the Windows settings. The pointer size can be adjusted (which is helpful to a degree), but the most helpful feature is the Pointer Color setting. There's an option to adjust the pointer color based on whatever color is beneath it. It took a little getting used to, but I can now find the mouse pointer a lot easier than I could before.

I have always liked a good flashlight. As a kid, I even asked for a 5-cell D Maglite for Christmas (which Santa brought!). This past December, I picked up the ThruNite Archer 2A flashlight from Amazon, based on a review from The Wirecutter. At $30 it's not cheap, but boy is this thing great.

It uses two AA batteries and puts out an incredible amount of light. There are four brightness settings, ranging from dim (great for when your eyes are adjusted to the dark) to blindingly bright. I also like the fact that it's compact; you could easily store this in a bag, car console, or junk drawer without taking up much space.

Since I bought it, I've put it to use in a number of ways (looking for dropped items in the car, using it on walks at night, and hunting under furniture for lost cat toys). I highly recommend this spectacular flashlight.

This post serves as a notice that all Firefox content on this website has been removed. This includes:

  • CoLT
  • Googlebar Lite
  • Firefox Toolbar Tutorial
  • Firefox Profile Tutorial
  • Automatic Extension Updates Tutorial

All links to that content should now redirect to this notice statement. If you're looking for information on the above, here are a few external references for your use:

I have removed my Firefox toolbar tutorial from this site, since it is now woefully out of date. If you're looking for Firefox extension development information, turn to the official documentation.