Saving images locally using the Paperclip gem on Linux

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

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.


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.


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.




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.

(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.



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.


big 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.


(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.


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:


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


Angel Food French Toast.


Lobster bruschetta with avocado.


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


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.


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

Warning: file_get_contents(https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails&id=awOk9f1s0KI&key=1) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in /home1/timmyb93/public_html/blog/wp-content/plugins/youtube-embed/includes/api-access.php on line 99

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

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


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.

New Front Page Design

It was around this same time last year that I updated timbornholdt.com, and I figured I was due for a bit of a redesign as well.

This time, I went a bit more simplistic: just one page with a short biography and links to some choice projects.

I’d love to hear what you think. Holler at me on Twitter.

C Tolle Run – Carrie’s 5 Minute Ab Workout

Warning: file_get_contents(https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails&id=Yk5hr_U4zqk&key=1) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in /home1/timmyb93/public_html/blog/wp-content/plugins/youtube-embed/includes/api-access.php on line 99

Sometimes, the simplest videos are the best. All we needed was Carrie and 6 minutes of tape to make what will ultimately become one of our most-watched episodes.

I love this ab workout as well. Carrie said she typically doubles each workout so it ends up being 1 minute per exercise instead of 30 seconds. I’m proud to say I can keep up with most of the extended version; I actually love doing old-school crunches. It’s Katie’s maintenance routine filled with planks and bridges that kill me.

C Tolle Run – Tollefsons Tackle Twin Cities

Warning: file_get_contents(https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails&id=zkKLZ8_JzJA&key=1) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in /home1/timmyb93/public_html/blog/wp-content/plugins/youtube-embed/includes/api-access.php on line 99

I’m so proud of Carrie for finishing her first marathon. Documenting the entire process was fun in and of itself, but being able to bike the entire course to watch her along the way was really something.

My job on race day was to bike around the course and get Carrie at key points. I ended up biking just under 50 miles that day. I didn’t start to hurt until I crossed into St. Paul on Lake Street, but the real pain kicked in when the rain began to pour in the afternoon. Shannon ended up having to pick me up about 2 miles from home because I was so tired and covered in sand.

C Tolle Run – Fitness Apps for iPhone and Android

Warning: file_get_contents(https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails&id=lGE8ttMGlJQ&key=1) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in /home1/timmyb93/public_html/blog/wp-content/plugins/youtube-embed/includes/api-access.php on line 99

I had the pleasure of switching roles and being in front of the camera this time. I can honestly say that I have, at one point, used all of these apps to become a better athlete, and I actually use two of them (Runmeter and Check The Weather) on a daily basis.

It was also nice to get a little plug in for the Jed Mahonis Group as well.

C Tolle Run – Home Remedies for Aches and Pains

Warning: file_get_contents(https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails&id=nBhV9vA9jhc&key=1) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in /home1/timmyb93/public_html/blog/wp-content/plugins/youtube-embed/includes/api-access.php on line 99

I think this is C Tolle Run at its best: short, informative videos that present valuable information in a unique way. I love filming and editing these pieces together, and I hope we get the chance to do more of them in the future.

Stay tuned for the abundance of high-quality bloopers at the end.

C Tolle Run – Strength Training for Runners with Kirk DeWindt

Warning: file_get_contents(https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails&id=jQcGXGf1-TU&key=1) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in /home1/timmyb93/public_html/blog/wp-content/plugins/youtube-embed/includes/api-access.php on line 99

As everyone knows, people’s attention spans these days are quite small. Bearing that in mind, we usually try to keep episodes under 4 minutes. In this case, however, it seemed like the length of the episode didn’t really matter much. Kirk and Carrie have great chemistry in front of the camera, which you can really catch at the end of the outtake we show at the end of the episode.

Plus, the content in this episode is great for anyone training for a marathon, half marathon, or even 5k. Strengthening your hips and core is unbelievably important for staying injury-free.