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.

I have a fairly old bread machine (late 90s / early 2000s model) that I use all the time. A few years ago, my dad found a great recipe for bread machine cinnamon rolls that he shared with me. After a minor tweak or two from the original, we've hit upon one of the best cinnamon roll recipes I've ever tried.

Wet Ingredients

  • 1 cup warm milk
  • 2 eggs
  • 6 Tbsp butter

Dry Ingredients

  • 1 tsp salt
  • 1/3 cup white sugar
  • 4 cups bread flour
  • 1 Tbsp yeast

Put all ingredients in the machine in the typical order (most machines call for wet first, then dry). Use the 2-pound dough setting, and let the machine do its thing. Once the machine is done, dump the dough out onto a flat surface (lightly floured if you like to avoid sticking). Roll the dough into a rectangle about 1/4 inch thick.

Filling

  • 2 Tbsp softened butter for spreading
  • 1/4 cup brown sugar
  • 1/4 cup white sugar
  • 2 Tbsp cinnamon
  • 1/2 cup raisins (optional; golden raisins are particularly good)

Spread the butter on the rolled out rectangle, and then sprinkle the sugar/cinnamon mixture on top of the butter. Also add the raisins (if using them). Roll the rectangle into a tight log (starting with long edge) and keep the seam side down to keep it sealed. Cut the log into the desired pieces (I typically get about 15 or so of these at about 1/2" or so thick), and place them in greased pans. Let rise in a warm place for 30 minutes to 1 hour. Bake at 350° for 10 to 15 minutes, or until golden brown.

Icing

  • 1 cup powdered sugar
  • 1/4 tsp vanilla
  • Enough milk to make it thick (this is the tricky part)

I typically use about 1 Tbsp of milk, but it's an art form to guess-timate the right amount. You don't want the icing too thick, and you don't want it too runny. I always double the icing recipe above because I love icing (if I can see the bread of the cinnamon roll, I don't have enough icing on it). Enjoy!

As of today, I am officially withdrawing my development support for the Googlebar Lite Firefox extension. I'm aware that the extension no longer works well in the latest builds of Firefox, and I have absolutely no desire to fix them. Mozilla's development environment has gotten pretty irritating as of late, and I just don't have the cycles (or the drive) to fix the issues that exist.

The future of Firefox add-ons lies in WebExtensions, and toolbar support in that arena is pretty bare-bones (last I looked). The default Firefox search box meets most needs, which has motivated me to drop this extension.

For those that are so-inclined, I will accept pull requests at the official googlebarlite repo. Or, you can fork the project and roll your own.

Back in March of 2010, I mentioned that I had a goal of visiting and photographing every single state park in my home state of North Carolina. In May of that same year, I narrowed my definition slightly to be those parks that have public facilities and for which attendance records are taken. At the time, there were 40 such parks (another has since joined their ranks, for a total of 41 as of this writing).

On Saturday, October 29, after over six years of park visits, I finally completed my goal!

My final state park visit was at Hammocks Beach State Park, the only park with ferry-service to its primary land parcel, Bear Island.

One question I'm often asked when sharing my love of state parks with others is: which park is your favorite? This is a really difficult question to answer, as every single park in our state has something unique to offer (which, incidentally, makes visiting them all so worthwhile). That said, I thought it would be fun to rank some of the state parks from the viewpoint of my favorite park pastime: hiking. In this post, I'll provide a breakdown of my favorite parks to hike in for all three regions of our state: mountains, Piedmont, and coast. I'll also post a list of my least favorite parks for hiking.

Best of the Mountains

North Carolina is blessed with terrific mountain state parks. Here are my favorite mountain state parks to hike:

  1. Gorges: The westernmost park in our state, Gorges is my favorite mountains park. It has a particularly beautiful visitor's center, and though the hikes are very challenging, they offer some of the most beautiful scenery in the state as a reward.
  2. Stone Mountain: Hiking up the giant granite dome is one of the most enjoyable things to do at this fantastic park. Views from the top are great, especially on a clear day, and several waterfalls can't be missed!
  3. Pilot Mountain and Hanging Rock: These two parks are a tie for me. Both have challenging, but rewarding, hiking trails, fantastic views, and lots to do. Regardless of the season you visit, there's always something fascinating to see.

Best of the Piedmont

The Piedmont area of North Carolina is typically very heavily forested, which makes for some great spots to walk in the woods. Here are my favorite Piedmont parks:

  1. Eno River: Easily my favorite Piedmont state park (probably because of its proximity to where I live), Eno River has the best network of diverse hiking trails. For an area that has so many people, this park offers a terrific slice of solitude.
  2. Raven Rock: A popular park with some great trails to interesting geological features. The staircase down the namesake cliff is quite lengthy, so come prepared for a climb!
  3. Weymouth Woods-Sandhills Nature Preserve: This small park is a hidden gem. The hiking trails here are very easy, winding through a very unique long-leaf pine forest. Underbrush in this forest is nearly non-existent, which means you can see a long ways through the stands of trees. Definitely a park not to be missed!

Best of the Coast

Some of the most unique state parks in North Carolina are located along the coast. Here are my favorites:

  1. Jockey's Ridge: Walking up the tallest living sand-dune on the east coast of the United States is something everyone should do. Just be sure to have your shoes on in the summertime: the sand can get quite hot!
  2. Goose Creek: Tucked along the Pamlico River, this park has an impressive boardwalk system. Strolling these boardwalks makes for some terrific sightseeing, and provides a glimpse at what natural life is like in the swamp along a river. Another hidden gem!
  3. Carolina Beach: Have you ever hiked in a forest at the beach? You can do so at this state park, where you'll also find carnivorous plants in their native habitats. Keep your eyes peeled for Venus fly-traps and pitcher plants!

Honorable Mention

Of all the state parks I've visited, I had more pure fun at Merchants Millpond than any other. Canoeing in the millpond there is a delight, especially on a comfortable day. You'll see plenty of wildlife (including alligators!) and you won't want the experience to end. This park has good hiking opportunities too, so it's win-win.

My Least Favorites

Three state parks truly stand out in my mind for least impressive hiking opportunities:

  1. Pettigrew: With only one hiking trail (and a poorly maintained one at that, at least when I visited), this park isn't for hikers. If you like boating, however, you'll love the lake at this park, which happens to be North Carolina's second largest natural one.
  2. Lake Waccamaw: Again, this is primarily a boater's paradise. Hiking here is difficult (the trails aren't very well maintained), and the hike isn't very interesting.
  3. Singletary Lake: This park is only open to large groups, so hiking here is a challenge. The trails that are offered, like many lake-centered state parks, are fairly short.

I hope you've enjoyed this round-up of my visits to various North Carolina state parks. I encourage everyone to visit them all, as it's a great way to see our beautiful state!

Green Chicken Soup

Oct 10, 2016

I grew up eating this soup, which also goes by the name chicken soup with herbs. My family, however, called it "green chicken soup" because the soup has a greenish hue to it. This is a favorite!

  • 2-3 cups diced, cooked chicken
  • 1 cup raw rice
  • 1/2 cup plain flour
  • 1/2 cup butter
  • 2 cups milk (*)
  • 2 cups cream (*)
  • 4 cups chicken stock
  • 4 tsp. chives
  • 4 tsp. marjoram
  • 2 tsp. dill weed
  • 1/4 tsp. nutmeg
  • 1/2 tsp. turmeric
  • Salt & pepper to taste
  • Green onions (optional)

(*) Can substitute 1 quart of half-and-half for these two ingredients

Start by cooking rice separately. We do this by combining 1 cup of rice, 2 cups water, and 1/2 Tbsp. salt in a Pyrex cooking dish, covered, microwaving for 18 minutes on 50% power.

While rice is cooking, and in a large saucepan, dutch oven, or boiling pot, melt butter and blend in the flour. Cook this roux for one minute. Add the milk and cream and, stirring constantly, cook until the mixture thickens. Add the chicken stock, cooked rice, chicken, chives, marjoram, dill, nutmeg, and turmeric. Green onions may also be added, if desired. Stir well. Season to taste with salt and pepper. Can be garnished with chopped parsley and/or toasted sesame seeds. Pairs well with hearty breads.

This soup is very thick (more like a stew), so when reheating it, you may need to thin with milk or water (it thickens as it sits in the refrigerator).