blog

The Joe Rogan Experience - Ted Nugent


🔗 a linked post to podcasts.joerogan.net » — originally shared here on

I consider myself to be a podcast enthusiast, but I will be the first to admit that I have not listened to many of the most popular podcasts.

I've been a fan of Joe Rogan ever since NewsRadio, and I've seen some clips here and there of The Joe Rogan Experience, but I've never sat down and listened to an entire episode of his podcast. I had a feeling that his political views were more libertarian, but beyond knowing that he's a proponent of weed, I didn't know much about him on a personal level.

With that in mind, I went through the most recent episodes of his podcast to see if there was an episode that would help me learn what he was all about.

I can't be the only one in the world who thinks the political scene in 2018 is incredibly draining and makes me feel ultimately powerless. As soon as I saw that Ted Nugent was on an episode, my initial reaction was, "ugh, why the hell would I listen to this crap and subject myself to more of that same feeling?"

Before listening to this episode, here was the sum total knowledge of facts that I knew about Ted Nugent:

  • He was a musician of some sort
  • He wasn't popular in my Twitter bubble
  • He tends to speak in brash, general, and oversimplified statements

In an effort to remove myself from my bubble, I thought, "you know what? A lot of folks seem to love Ted Nugent, so I'm gonna listen with an open mind and see what it's all about."

The episode was pretty long (over three hours), but if you've got the time, I highly encourage you to give it a listen. A few things I took away:

  • I didn't realize Ted was all about hunting, and I noticed myself nodding my head in agreement during the discussions around being responsible with nature and treating the circle of life with respect.
  • The discussion around the vegan lifestyle was also illuminating. I know a few folks who try to do the vegan thing, and it's interesting to look at it from the perspective of "look at the number of animals and plants you need to kill with pesticides in order to keep them off your land so your tofu can grow."
  • The first hour or so is mostly Ted and Joe talking about how misunderstood hunters are. Of primary note is a part where Ted says that people think hunters are all fat, sloppy rednecks who go out and hunt down hundreds of animals at a time. He says that if non-hunters would actually talk to a hunter and see the world from their perspective, it would really make things better. I thought this was a profound point, which was made completely ironic by the next observation:
  • No fewer than 50 times in this episode does Ted identify a group of people (liberals, politicians, the DNR, bureaucrats, anti-gun folks, illegal immigrants), caricaturize them, and berate them for their "ignorance."

Joe spent a lot of the episode silent, because Ted just would get on a rant and keep going. However, I think Joe did do a great job of holding Ted's feet to the fire a bit over some of his statements.

My favorite part of the episode was when Ted went to the bathroom, Joe monologued about how messed up the gun situation is in our country and that he doesn't have any answers for it. It was refreshing to hear that, since everyone seems to have an answer that wouldn't work in practice.

Like I said above, the episode was long, but I found it to be absolutely illuminating, and I will be seeking out more podcasts like this in order to make sure my perspective on life isn't being persuaded by only one type of voice.

If anything, the biggest takeaway from this episode for me was that what we need right now as a country is to find a way to come back to the table together. Social networks seem to thrive off of exploiting the worst in us as humans, and even though the first word in that phrase is "social", it has made us anything but.

Continue to the full article


Goals (Summer 2018 Edition)

originally shared here on

Back in 2011 when I started this blog, I wrote a post that outlined some short and long-term goals that I had for myself.

I came across that post while re-doing this blog, and I thought that establishing some new goals was a worthwhile task.

For the past few years, I've been using an analogy for setting goals that I like to call "the swimmer's approach", which I came up with while watching triathletes swim during a race.

When you're swimming a fairly long distance, there are times where you need to put your head down and swim hard, and there are times where you need to lift your head out of the water and make a plan to head in a certain direction.

The key here is to combine both as efficiently as possible. If you're just heads down swimming hard all the time, you'll likely start veering off course considerably. Conversely, if you are spending all your time looking off into the distance, you'll never get there.

So today, I'm focusing on getting some new goals. Here's what I've got:

Short Term Goals (by August 15)

  • Completely unplug for a week and enjoy time with my wife
  • Take Charlee to a place she's never been before (like a new splash pad or the science museum)
  • Come up with a sales strategy around our long-term support plan for JMG
  • Finish the Siri integration with my weight tracking app
  • Watch 3 movies on my Plex server
  • Walk around the block without crutches (0.5 miles)
  • Write another blog post for this site

Medium Term Goals (by December 31)

  • Set a budget for marketing at JMG and launch a campaign
  • Close a large sale
  • Merge Rob's project management app (Triangle) with my sales and marketing app (Gil) and give it an awful name (like Trian-Gil)
  • Get the average subscriber count for Constant Variables up to 100 per episode
  • Get version 1.1 of mncraft.beer released
  • Watch 30 movies on my Plex server
  • Go for a 1 mile run
  • Brew my first batch of beer

Long Term Goals (by July 1, 2023)

  • Run another marathon
  • Build up a 6 month emergency fund for the JMG
  • Move to Wisconsin
  • Have an event with one of our businesses
  • Have another kid
  • Finish watching all the movies on my Plex server (currently, I'm at 600+)

Now, it's time to start swimming.


timbornholdt.com Strikes Back

originally shared here on

A few weeks ago, I got an email from Google saying that I had an "unusual number of 404 errors" on my site. I looked into it, and a very helpful script kiddy exploited my Wordpress site and took over the admin account.

It didn't look like there was much in there in terms of damage done, but they basically changed my admin password, bricked my template, and moved on.

After years of neglecting this blog (yet again) and after years of dealing with an annoying CMS, I had the same thought that every web developer has: "Nuts to this, I'm just gonna build this site myself from scratch."

So here we are: timbornholdt.com version whatever!

After reading back from my old posts in 2012, I realized that I really should start blogging again. I really enjoy seeing how much has changed in the past 6 years, and I know that if I start blogging about my life now that I'll look back in another 6 years and have the same feelings.

So without further ado, welcome to the blog, and we'll see you in another 6 years!


How to detect and replace YouTube links by extending the Redcarpet gem

originally shared here on

As I'll explain in a future post, I had an old Wordpress blog that I got sick of maintaining and updating, so I did what any red-blooded developer would do: build my own blog engine.

In doing so, however, I needed to import all my old posts from Wordpress over to my own Rails form. This worked nearly flawlessly, with the exception of my YouTube videos, which looked something like this (without the space inside the tag):

[youtube]nFZZxOHHZlo[/youtube ]

Because I am using the Redcarpet gem, I thought I'd extend its parsing capabilities to detect anything like this and wrap it in a responsive frame.

Here's how I did it (with extreme thanks to this SO post):

Step 1: Create a folder called app/services, and then create a file called custom_markdown.rb:

class CustomMarkdown < Redcarpet::Render::HTML
  def preprocess(text)
    format_youtube(text)
  end

  def format_youtube(text)
    text.gsub! /\[youtube](.*?)\[\/youtube]/ do
      "<div class='embed-container'><iframe src='https://www.youtube.com/embed/#{$1}' frameborder='0' allowfullscreen></iframe></div>"
    end
    text
  end

end

This code will perform a regular expression to find anything wrapped in [youtube] tags and replace it with a <div> that we can now style with CSS.

Step 2: Add the following SCSS somewhere in your project where it makes sense:

.embed-container { 
  position: relative; 
  padding-bottom: 56.25%; 
  height: 0; 
  overflow: hidden; 
  max-width: 100%; 
  iframe, object, embed { 
    position: absolute; 
    top: 0; 
    left: 0; 
    width: 100%; 
    height: 100%; 
  }
} 

Step 3: Use the custom parser when including Redcarpet in your project:

require './app/services/custom_markdown.rb' # This was necessary for me, might not be necessary for you
@blogs = Blog.all.order("published_at desc")
renderer = CustomMarkdown.new()
@markdown = Redcarpet::Markdown.new(renderer, extensions = {})

Now, anywhere you use those [youtube] tags, you'll get this fancy rendering instead:


Proxy Issues with iPhone and Mac OS X

originally shared here on

Like all tried and true iOS developers, I love using the excellent Charles Proxy. However, I've been running into issues where the proxy is running while the iPhone is attached to my Mac.

Whenever I would have Charles closed and my phone plugged in, I was getting this helpful message:

Safari can't open the page https://facebook.com because Safari can't connect to the server https://facebook.com

Usually, you can fix this on Wi-Fi by going into Network > Wi-Fi > Advanced Settings > Proxies, and disabling Web Proxy (HTTP) and Secure Web Proxy (HTTPS).

Unhelpfully, however, you'll note that the iPhone USB network interface does not include an "Advanced Settings" button.

No problem! Head to your Terminal and type in the following two lines of code:

sudo networksetup -setsecurewebproxystate "iPhone USB" off
sudo networksetup -setwebproxystate "iPhone USB" off

This disables both the secure proxy and the unsecure proxy.


Recording Podcasts on the Run

originally shared here on

In 2017, the C Tolle Run team decided to switch over to an audio-only podcast format. Instead of doing a traditional interview-style show over Skype, we came up with the idea to record Carrie and a guest while they went for a run. As a runner myself, I know the kinds of crazy, deep, personal, and often crazy conversations that occur during the course of a 10 mile run.

As the guy responsible for capturing the audio on one of these runs, however, I was a little worried. Even if we were recording people walking, we'd have issues with wind. What are we supposed to do with people running? All of that movement is a recipe for poor audio quality.

Another issue we have is that we haven't quite hit the jackpot with sponsors yet, so I needed to find a suitable solution while running on a tight budget.

If you're reading this, you're probably looking for a good solution for a similar set of circumstances. Let me save you the time and show you what I came up with!


What didn't work

In order to get to a point where we were capturing usable audio, we experimented quite a bit. Here was our first setup: IMG_3561

Take 1 included our guests using a Sony lavalier microphone with a standard, flimsy wind guard attached to it.

We quickly discovered that the Auray Fuzzy Windbuster wind guards provided a night and day difference in ability to block out wind. However, the guards did not stay attached to the microphones all that well, which is obvious if you listen to our episode with Gabe Grunewald.

In addition, because of all the movement that occurs from running, we would frequently hear rhythmic bumping and rubbing due to the cords pulling in odd places on the runners.

What does work

Transmitting the signal

Our primary goal was to get the highest quality signal we can get with the most minimal amount of equipment possible. We figured that the easiest way to do that is to switch to headset microphones.

We now use the Sony ECM322BMP Professional Headset Microphone. In our most recent on the run episode with Kirk DeWindt, both Kirk and Carrie found the headsets to be relatively comfortable, and after a couple minutes, they didn't even notice they were wearing them.

One word of warning: make sure whatever headset mic you purchase is compatible with your wireless system. I can't give a direct Amazon link to our wireless system since we bought it 7 years ago, but the modern comparison would be the Sony UWPD11/30 Lavalier Microphone, Bodypack TX and Portable RX Wireless System. We went through 3 different headset mics before just giving in and dropping the money for the mic that was compatible with our "ancient" system.

Regardless of which headset mic you get, the key piece to cutting down on wind noise is the Auray Fuzzy Windbuster wind guards. Buy at least 6 of these little guys, they are worth every penny. (Pro tip: we went through 2 of these buggers before we got smart and put some gaffer's tape around the base of the wind guard to keep it attached to the neck of the mic.)

The position of the transmitter pack seems to not really be an issue for us, so long as:

  • The antenna has a good line of sight to the receiver
  • The cable connecting the headset and transmitter gets a little slack
  • They don't place the transmitter in the same pocket as a phone

We purchased wireless microphone belts to hold our packs, mostly so we didn't have to fuss with people wondering where the transmitter should go, but those are totally optional.

Receiving the signal

Ideally, we are working to get the receiving end down to a point where Carrie can strap it onto herself and record as she travels around the world.

Currently, the receiving rig is powered by yours truly, following the guests on a bike roughly 10-20 feet back The receivers for the wireless mics are plugged into a Zoom H4n recorder. All three components are strapped into a repurposed water bottle holder (pictured above, which doubles as a great indicator to my personal fashion sense).

Once I turn on the recorder, I immediately hit record and lock it before even plugging in the microphones. My biggest fear is losing audio, and since these things can record hundreds of hours at a time, I'd rather scrub through the audio in post than risk forgetting to hit "go" once the runners are ready.

Next Steps

Currently, our rig is limited to the two inputs of the H4n. The next two things I'd love to tackle are live streaming the audio to my phone so I can do a Facebook Live stream, and recording more than two people at once.

If you have any ideas how I can stream the audio off of a Zoom H4n into an iPhone, or how I can best record multiple people at once, let me know on Twitter and I'll give it a shot!

Also, I'll keep this blog post updated as we refine this system. If you have any suggestions on how I can improve it, give me a shout on Twitter.

One last note: those links above are Amazon Affiliate links. Feel free to strip that code off if you are offended by those types of things.


Saving images locally using the Paperclip gem on Linux

originally shared here on

Like most red-blooded Ruby on Rails developers, I make copious use of the Paperclip gem.

Paperclip (and basically, every developer on the internet) seems to encourage you to use a service like Amazon S3 or some other 3rd party service to store your files.

However, I find that for simple projects, I'm just fine storing the images locally on my Linux server and using good ol' Apache to serve them up.

By default, Paperclip saves these images in your public/system folder, and assigns the same permissions as your Rails app to those images.

The problem I run into is that frequently, it doesn't use the right permissions. I'd be able to upload and save the image, but when I'd load the image, I'd get a 403 error.

In order to solve that issue, you need to set the correct permissions for your public/system/[model] directory.

Here's how to quickly solve that:

1) SSH into your public/system/[model] directory 2) Run "umask 002". This will allow your Linux group to write into this directory. 3) Run "chgrp [your-systems-group] .". In my case, that's www-data. This will change the ownership of the folder to your group.

Now, all the files in your folders (and all subsequently created files) will belong to the correct group, and you won't see any more nasty 403 errors!


First Anniversary Weekend

originally shared here on

Our first anniversary weekend kicked off on Friday afternoon with a trip to the grand opening of Bad Weather Brewing off of West 7th in St. Paul. Bad Weather Brewing It was absolutely packed in there. A nice couple gave us their spot at this rock structure, so we gratefully took it. The brews were decent, and the tap room itself was fairly impressive.


After the brewery, we took the light rail downtown. We grabbed a quick bite at a nice little Panera-esque restaurant in the IDS, and then we walked over to the Orpheum to see The Little Mermaid. Shannon ended up winning some contest where she got to pay $25 for any remaining seat in the house. We ended up sitting in row U on the main floor. IMG_1137 The show itself was decent. There were quite a few technical glitches (mics cutting in and out, light cues not hitting right), and we sat next to an obnoxious group of drunk people who needed to impress the crowd with their versions of Under the Sea. We were quite impressed, however, with the use of the fly system to emulate "swimming". Quite a nifty stage trick.


The next day, Shannon and I woke up early to drop off bagels for her work, and then we drove up to Taylors Falls. We stopped at an awesome bakery in Lundstrom off Highway 8 and had some delicious donuts. IMG_1142 Once we got to Taylors Falls, we hiked along the river. Despite some light traffic noise and an unseasonably hot day, it was a gorgeous hike. The fall colors were absolutely breathtaking. IMG_1145IMG_1146IMG_1167


On the way home from Taylors Falls, we figured we were close enough to Stillwater, so we drove down to Lift Bridge Brewery and tried a few of their brews. IMG_1179 (from left to right: Mini Donut Beer, Citra Kellerbier, Oktoberfest, Harvestör Fresh Hop Ale) All four beers were pretty decent, but man, that Mini Donut Beer was out of this world good. What can I say: I'm a sucker for the novelty beers. Shannon and I tried to purchase a growler of it, but that wasn't in the cards. Dang.


After we had our fill of Mini Donut Beer, we decided lunch was in order, and it wouldn't be a complete anniversary weekend without a trip to Leeann Chin. IMG_1187IMG_1188 I also got my haircut at Great Clips. We're a Great Clips family now, by the way. More on that to come in the next couple of weeks (I hope!)


With a freshly full belly and a neatly trimmed set of hair, we decided to detour on our way home to Big Wood Brewing Company in White Bear Lake. IMG_1189big wood brews (from left to right, top to bottom: Bark Bite IPA, Board #4, Fork, Oktimberfest, Lil' Red Riding Wood) I think we were both a little full from all the Chin and Mini Donut Beer, so maybe we shouldn't have done the heavy flight... but on the whole, the brews there were pretty good. Their Bark Bite is definitely deserving of "flagship status". We left Big Wood and wandered around White Bear Lake a little bit, and then we finally headed home.


One of our other friends mentioned that for a fancy date night one time, they did their own surf and turf at home. That sounded like an affordable way to have a fancy dinner on our anniversary, and since we spent all of our money on beer and Little Mermaid tickets, we figured we could do things ourselves. IMG_1202IMG_1200 (I have to admit, it was a little weird eating lobster after seeing The Little Mermaid.) The meal was phenomenal. We bought a pre-cooked lobster and steamed it in a pot, and we bought a steak that was big enough for the both of us. We accompanied it with some sweet potato fries and a little salad. My wife had to be extra sweet to me and sauté a bunch of mushrooms (which she hates, but knows I love). We capped it off with some homemade chocolate cake and berries. I got to dust the powered sugar myself. Once we demolished this excellent deserts, we watched the latest episode of Empire and fell asleep early. IMG_1205


On Sunday (our actual anniversary), I rolled out of bed around 8am and got my 10 mile run in (prep work for the Seattle Marathon in a few weeks). After that, we got all gussied up and drove down to St. Anthony Main for a Sunday brunch at the Nicollet Island Inn. We had the 5 course meal, which included: IMG_1210

A pastry basket. That bread (not pictured) was so moist and delicious.

IMG_1211

Angel Food French Toast.

IMG_1213

Lobster bruschetta with avocado.

IMG_1215

Mushroom Gnocchi. Oh my goodness, that was incredible. I'm definitely a gnocchi fan.

IMG_1216

Chocolate mousse.

Overall, the experience and the food were incredible; if you're looking for a top-notch place to bring your significant other on a fancy Sunday morning brunch, look no further than the Nicollet Island Inn.


The rest of our Sunday was pretty much a normal Sunday. We got back home and watched the Packers barely edge one out over the Rams (hah), and then we tried to avoid the unseasonable 80 degree heatwave. We did end up getting over to my parent's house to help my mom prepare for her knee replacement surgery later that week, but besides that, it was quite uneventful.


They say that the first year of marriage is the most difficult. If that's the case, then the rest of our lives should be smooth sailing. I'm so lucky to have found the perfect woman for me, and I am looking forward to many, many more anniversaries together. IMG_6795


C Tolle Run - Gabe Grunewald - 3000m Indoor National Champion

originally shared here on

There was quite a bit of drama surrounding Gabe's dominant victory in the 3000m this past weekend, but now that the dust has settled and the proper rulings have been made, Gabe can finally call herself a National Champion.

Gabe is easily one of the nicest people I've ever had the pleasure of meeting. We've only met three times, but when we got to her place to interview her, she greeted us with hugs and genuinely seemed interested in how we were doing. I couldn't be happier for Gabe, and best of luck in Poland! (And if you ever figure out the secret sauce to your ridiculous kick, please let us all know.)


My iPhone Home Screen - December 2013 Edition

originally shared here on

Here's what my home screen looks like as of December 2013: IMG_5864

Besides the standard apps (Messages, Photos, Camera, etc.), here's a breakdown of the other apps I use:

  • Fantastical: Natural language input makes this app throughly indispensable. Being able to just tap the mic icon and speak my appointment makes me really feel like I'm living in the future.
  • Runmeter: Any run I do outdoors, I log with Runmeter. I've been using it for years, and it's the most accurate and robust running app I've ever used. I just recently got a heart rate monitor that pairs with it, so I'm excited to see how that integration will aid my training.
  • Check the Weater: The simplicity of this app combined with its Dark Sky integration make it the only weather app I need to try. Plus, David Smith is an awesome developer (and human being).
  • Google Maps: I'll occasionally use Apple Maps, and while it's definitely improving, it's still bit me too many times to trust on a day-to-day basis.
  • Instapaper: All long-form articles go in here for future reading. If you're not using a read it later type service, you're missing out on a much more satisfying reading experience.
  • Untappd: I've become much more of a beer enthusiast in the past year, and that's almost entirely due to this app. Untappd lets you log beers you've tried and suggests new ones to try. It has certainly turned beer discovery into a fun game.
  • Scanner Pro: Apple recently made this app free for a week, and for great reason. I switched over to this app to log my business receipts about a year ago, and it's ability to auto-detect borders and quickly upload to Dropbox have made this app worth every penny I've paid for it.
  • Day One: I made it a goal part-way through 2013 to start journaling once a week, and Day One is, bar none, the best journaling app on the App Store. Every Friday, I crank this bad boy open and review my week's progress. Every entry gets a picture as well, so that has encouraged me to keep photographing the exciting (or mundane) parts of my life.
  • Twitterrific: I haven't tried Tweetbot, and thanks to this app, I really see no reason to. This app helps me manage my Twitter accounts very easily, and it looks gorgeous to boot. I also really enjoy the cool egg "pull-to-refresh" animation.
  • Reeder: There's no better way to manage your RSS feeds than Reeder (combined with Feed Wrangler). The only thing I wish it did was allow you to send links to Reminders as a new reminder. But besides that, this is a fantastic example of an iOS 7 app, complete with gestures and the like.
  • Castro: Speaking of amazing apps designed with iOS 7 in mind, Castro is a new podcast app that is crazy beautiful. The app is lacking in a couple of key features, like OPML import support and continuous play (and I also miss the gesture-based 30 second skip that Downcast uses), but it's pretty certain that those features will be added in time.