Modern web applications are commonly split up into two major parts. The first part, called the front-end, is the part that most people interact with. The second part, called the back-end, is hidden from users and manages all of the information which is needed by the application. Splitting applications like this separates the rendering of the information from the generation of the data, which brings certain efficiencies.
Last summer we drove from Akron to Fort Collins, Colorado. Although it was a great experience, we wanted to drive a little less this summer. So we came up with a new adventure idea. We wanted to find a place which was off the grid, but had front-country amenities, like running water, toilets, and great food. And, it had to be within about eight hours of Akron. It seemed like an impossible ask, and I was fairly sure that we would have to compromise on at least one aspect. Then I found Charit Creek Lodge in Tennessee. Amazingly, it has all the desired amenities and is just seven hours and fifty minutes away. As an added bonus, it costs about the same as a stay at a major hotel chain.
Rather than driving straight to Charit Creek, we decided to break our trip up. We were going to do a mix of backpacking at Zaleski, car camping at Cumberland Lake, and lodge camping at Charit Creek.
The last time we headed to the Red River Gorge our intent was just to climb some real, outdoor sport routes. As a part of that goal we wanted to explore the Muir Valley. Now, having a modicum of experience, we had loftier objectives. We wanted to top out on something which was higher than we could get in a rock gym. This time our goal was to send Eureka.
On this site I write about, what I like to believe is, a diverse set of topics. The normal way of presenting posts using a sequential list does nothing to help people discover other material on the site which they may also be interested in. I wanted to provide visitors with a list of links to content which is similar to the page they are currently viewing. However, due to limitations in the platform I’m using, there was no option to simply turn this on. So, I wrote some code and implemented an algorithm to solve this problem.
If you are an Ohioan who is into backpacking and haven’t been to Archer’s Fork yet, you should plan a trip. It is one of the most remote backpacking sites in the state. To illustrate how far out this trail is: we normally grab a meal at a restaurant near the trailhead before heading into the backcountry; the Archer’s Fork trailhead is about an hour drive from the nearest restaurant (possibly longer if you don’t download directions before leaving an area with cell service). For someone from northeastern Ohio, that’s a crazy long way from food. While on the trail you are unlikely to run into other people, which further enhances the feeling of remoteness. The best part may be that it’s only two and a half hours away from the Akron area, so most people in eastern Ohio should be able to get there in under four hours.
Our climbing group was finally ready to move out from under the sodium lights of the indoor climbing gym. So, half of us having completed a lead climbing course, we decided to travel down to the Muir Valley and attempt some outdoor sport routes. Located in Kentucky’s Red River Gorge, one of the largest and most popular sport climbing areas in the Eastern United States, Muir Valley has over 20 crags spread across more than 360 acres of land. The most important part, for us, was that it also has nearly 120 routes which are rated 5.9 or lower.
In his talk at CodeMash this year, Joel Byler mentioned a platform named Nerves which quickly and easily packages up Elixir projects for embeded applications. Joel said the platform boots in seconds, the framework takes care of all the low-level tasks, and the tooling handles all the work required to convert Elixir applications into embeddable firmware. It sounded too good to be true, so I had to try it out.
Getting up and running was actually super easy; I installed Nerves and built my first app in minutes. And, it did boot up incredibly fast, but that first app didn’t actually do anything. I needed to get my device connected to the wireless network so that I could start doing more interesting stuff, and that is when I ran into problems. I have a Raspberry Pi 2 which doesn’t have built-in WiFi, so I have a TP-Link TL-WN725N USB adapter. Unfortunately, Nerves Raspberry Pi 2 system only supports Ralink RT53xx (rt2800usb), RealTek RTL8712U (r8712u) and RealTek RTL 8192 (rtl8192cu) devices.
My first thought was, “I guess I will have to get the latest Raspberry Pi Zero to get this thing working.” Maybe I just wanted an excuse to buy a new little toy, but I’m supposed to have technical skills, so I shouldn’t buy my way out of this problem. Besides, I have used the TL-WN725N adapter in the past and I knew that there was a Linux driver for it. The question was, how do I get that driver installed in Nerves? Here is how I made it work.
A new year, a new programming language. I have recently started developing web applications using Ruby on Rails, rather than React+Redux on Flask+SQLAlchemy+Sqitch on Python. I’m enjoying the relative simplicity; it allows me to focus on creating complexity in other places, places where it will actually help me produce more features in less time. One area where I like to do more with less is in tests. No one likes to spend coding time writing tests, but it makes development easier and more productive in the long run, so it’s an absolute requirement.
One project I’m working on has an administrative area which is only accessible to privileged users. I needed to write test which ensure privileged users get access and everyone else does not. I could just fill in the default Rails generated tests for the authorized user, then copy and modify them for unauthorized users, but that becomes tedious if I want to check more than two roles.