walls.corpus

By Nathan L. Walls

  • Sunset, Jan. 20, 2017/Raleigh
  • Carmella/Raleigh
  • Reach Through Shadow/Raleigh
  • Sunset, Dec. 7, 2016/Raleigh

Errors and omissions in turn-by-turn directions

Earlier this month, California was getting slammed with torrential rain and lots of snow, leading to road closures in the Sierra Nevada mountains.

Having lived in the Central Valley of California, where the Sacramento news stations would send a reporter up the mountain to report on road conditions along Interstate 80 when snow started falling, various highway closures across the crest of the Sierras isn’t particularly unusual. There are a number of state roads that close for the winter, but a number stay open, too, depending on what conditions are.

I was surprised, however, when I read that cars were getting stuck on the Eastern Slope, just before they’d cross into California. They were trying to route around I-80 being closed:

From the article:

VERDI, Nev. (News 4 & Fox 11) — Interstate 80 has been closed over Donner Pass at least three times in the month of January. Many drivers searching through an alternate route through the Sierra are ending up stranded in the snow on Dog Valley Road near Verdi.

“If weather conditions are bad enough and a major thoroughfare like I-80 is closed, what do you think conditions are going to be like on a single-track dirt road that winds its way through the mountains? They’re not going to be safe.”

“When Interstate 80 is closed, Google Maps wants to take them this way,” Search and Rescue volunteer Jack Wayman said, “and even with signs that are posted saying ‘don’t go this way,’ 'don’t trust your GPS,’ they’re still doing it.”

Many drivers - some of them behind the wheel of big rigs - are using navigation systems to search for alternate routes through the Sierra. This comes as more people are putting their trust in technology when they travel.

For the I-80 case, at least Google/Waze are able to make an adjustment, which is great.:


Besides temporary road closures and “helpful” algorithms guiding users off of freeways onto two-lane mountain roads, this is also a problem that’s plagued other uses of GPS.

Death Valley has been one such case. NPR reported in 2011 on GPS and turn-by-turn navigation systems prompting drivers to head down non-existant roads in Death Valley:

Meanwhile, he (Death Valley Ranger Charlie Callagan – ed) says, he’s been asking himself, what exactly is going on? Why is the GPS going astray? Then, he had an idea.

To explain, he drives out to a lonely corner of the valley. A line pops up in the corner of my GPS screen. Supposedly, it represents a road about to intersect the one we’re driving on. But looking out the window, there is no other road.

“That road there no longer exists. It’s been probably 40 years, but somebody ended up driving on it because it showed up on their GPS,” Callagan says.

In a tragic case from 2009 that the NPR story mentions, but The Sacramento Bee goes into more depth about, a six-year-old, Carlos Sanchez, died after he and his mother became stuck in a remote section of Death Valley:

[Alicia] Sanchez was trying to drive into Death Valley from the south via an unpaved route along the valley floor called the Harry Wade Road. Instead, she ended up on a dead-end backcountry road, which she followed for more than 20 miles along the south side of the Owlshead Mountains.

“The road is very rough. It’s a hard drive,” said [Death Valley ranger Amber] Nattrass. “There was probably a point where she said, 'Oh my God, I don’t know where I am. I’m going to keep going because I think I’m going the right direction.’

"A lot of people don’t realize you should just turn around and go back the way you came,” she said. “We see that a lot here.”

Near where the road ends, Nattrass followed the tire tracks that turned onto “a closed road in the wilderness area going over several small bushes and rocks lined along the road to designate closure,” her report says.

And it was down that road – on Aug. 6, 2009 – that Nattrass spotted the Jeep stuck up to its axles in the sand with SOS spelled in medical tape on the windshield. Alicia, then 28, a nurse from Las Vegas, was lying next to it in the shade, distraught over the death of her son and so dehydrated she had been drinking her own urine.

The NPR story reports that road information for Death Valley was updated by TomTom with updates for other mapping data providers pending.

I’ve heard of, but can’t find a link right at the moment, cases in the United Kingdom of trucks (sorry, lorries) getting stuck on hedge-lined, single-lane roads because their navigation systems take them there without regard for the width of their vehicle. Something similar is happening in Arkansas.


Where this gets personal is back in August, 2016, my wife Robin and I were visiting a group of friends for a weekend retreat in Virginia. We were staying at a bed and breakfast in Lovingston, just off of U.S. 29. We’d meet them at a home north of Shipman. Getting from the bed and breakfast, at least the way Apple Maps showed us, was a six mile/10 minute trip up and over the mountain.

However, the directions our friends gave us were much different. Closer to 11 miles and 25 minutes. This hurt my brain a bit, and so I asked our hosts why what looked like the more direct way wasn’t what they recommended. The answer was Hurricane Camille. In 1969, Camille brought torrential rains and caused a landslide along the road, among with many other horrific problems for Nelson County, Virginia.

Once our retreat was over, we drove as far down the east-end of the road as we felt comfortable and, sure enough, nothing we’d reasonably call a road was available to us.

So, while Apple Maps still shows a connected road across the mountain, looking at satellite imagery, there’s some track work into thick tree stands, but that’s it.


Clearly, using some thought as a driver is required. Local conditions out the window beats whatever satellite-assisted turn-by-turn navigation is saying is happening. But, in the absence of the kind of knowledge and experience you gain driving around a city or rural stretch for months and years, leaning on automated navigation is comfortable and attractive. Frankly, it also works a lot of the time, so granting trust is easy.

My curiosity from all of this is how automated navigation systems and paper map data are updated with ground truth. I intend to explore that as a topic further.

Beginner questions

I recently started a new job. That means new faces, different practices, and lots of new-to-me long-running code. It means a new business domain.

In the past, I’ve approached situations like this and asked what I’ve self-deprecatingly described as, “dumb questions.”

Except, there are no dumb questions.

There are particularly no dumb questions when you’re beginning. Whenever you’re new at a job, new with a programming language, new with a framework, new with a codebase, new with a business domain, new with a team, you’re beginning.

When you’re beginning, you ask beginner questions. Beginner questions aren’t dumb. They are the questions anyone in a situation similar to the one you’re in might ask. They may just be the questions that everyone who is new should ask and might not have thought of. I suspect there’s probably at least one person on your new team who also doesn’t know the answer to your beginner question. They’ll also benefit from hearing the answer.

Effectiveness and expertise is contextual and asking questions is a great way to accelerate understanding and thereby building that effectiveness and expertise.

Remember, you’re asking beginner questions, not dumb questions.

Reading and Learning: Sept. 8, 2015

Here’s another long update, with lots of worthwhile reading and listening. I’m still working on my processes and tooling so these are less cumbersome to edit and publish and consequently less effort to read.

Articles and books

I read the following:

Stationed on the West Coast of the United States, flanked by the blue hues of the Pacific Ocean, is a city that’s home to some of the greatest companies in the…

Humorous take on San Francisco startup culture.

Q: How do I convince my client to pay for research? If I have one FAQ, this is it. Every time I talk with other designers about research, someone asks this…

Erika Hall of Mule Design covers getting essential project research paid for. Similar to her book, Just Enough Research, which is very valuable.

If you haven’t seen byebug before, I recommend that you check it out. It’s a great debugger for Ruby 2.x. … The basic setup is pretty simple. Just install the gem. If you use the byebug method anywhere in your code, execution will stop at that point and you’ll be dropped into a debug console. You can ever set it up to use pry.

Byebug and Pry are two essentials in my toolkit. This is a nice write-up of using Byebug when you’re running a Rails app on Pow.

When I joined Atomic fresh out of school 11 years ago, I didn’t realize I was making the best career decision a young software developer could make. I was…

Switching contexts every two or three months, particularly early in a development career makes for great seasoning. Learning how to learn business domains is an incredibly valuable skill.

Dunbar’s Number is a favorite blunt diagnosis for the pains that affect rapidly growing teams. The number, which is somewhere between 100 and 250 describes a…

An older Michael Lopp piece on the difference between layers of employees. Don’t think like Manager and Direct Reports. Think about who was in early and who arrived later. It’s the difference between the first 5 people at a company, the second group of 15 and the third group of holy crap, who are you people!?

I’ve been on both sides of this at the same company and it is very interesting territory.

Model level caching is something that’s often ignored, even by seasoned developers. Much of it’s due to the misconception that, when you cache the views, you don’t need to cache at the lower levels. While it’s true that much of a bottleneck in the Rails world lies in the View layer, that’s not always the case.

The Internet recently fell in love with picture-parsing websites that guess your age, and whether someone is your twin. Now it offers another spin on novelty…

Like lots of problems we attempt to solve with technology, identifying whether or not a picture has naked people in it sounds easy until you have to identify and handle context. Then, it gets a lot more complex.

When we type something into our terminal program, we’ll often see output. For example:

1
2
$ echo hello
hello

As we can see, echo hello is a command that means “output hello”. But…

Gabe Berke-Williams covers the ins and outs of STDIN, STDOUT, and STDERR.

When you use a rescue clause in Ruby, you can specify what kinds of exceptions you want to rescue. All you need to do is provide a list of exception classes…

You’ll notice more Honey Badger links showing up more in this listing. Their blog is pretty great.

Ruby application servers are typically used together with a web server like nginx. When user requests a page from your Rails app, nginx delegates the request to…

Nothing could be simpler and more boring than the case statement. It’s a holdover from C. You use it to replace a bunch of ifs. Case closed. Or is it?

Nice exploration of some great uses for case.

Pyotr Stolyarsky died in 1944, he was considered Russia’ s greatest violin teacher. He counted among his pupils a coterie of stars, including David Oistrakh and Nathan Milstein, and a school for gifted musicians in his native Odessa was named after him in 1933. But Stolyarsky couldn’t play the violin anywhere near as well as his best students. What he could do was whisper metaphors into their ears. He might lean over and explain how his mother cooked Sabbath dinner. His advice gave no specific information on what angle the bow should describe, or how to move the fingers across the frets to create vibrato. Instead, it distilled his experience of the music into metaphors his students could understand.

This article is coming up on two years old, but I only saw it come up recently. Thoroughly engaging on improving machine learning in a way I still can’t quite wrap my head around.

It’s becoming more and more common to see malware installed not at the server, desktop, laptop, or smartphone level, but at the router level. Routers have become quite capable, powerful little computers in their own right over the last 5 years, and that means they can, unfortunately, be harnessed to work against you.

I write about this because it recently happened to two people I know.

Watch your router firmware, everyone.

Here’s a little conference speaking tip: don’t introduce yourself. Nobody cares who you are or what you’ve done. At least, not yet.

I saw Avdi speak at RubyNation 2014 and he structured that talk very well.

A common Ruby pattern for injecting values from an Array into to a Hash is to use the Enumerable#inject method and pass the hash as the memo.

Good info on working with Enumerable data structures in Ruby, something that I’m still building my experience with, because they are awesome.

Fair warning. You’re going to hate this one. I want to stop pushing the web forward for a while. I want a moratorium on new browser features for about a year or so

I understand the sentiment, but believe this to be a futile request.

In 1969, Milton Packin was pulled over for speeding on a New Jersey highway. He appealed the ticket, claiming that he wasn’t driving the car; it was the cruise…

One of many aspects I find interesting about what looks like a future of at least partially autonomous personal vehicles.

First things first, AWS and Heroku are different things. AWS offer Infrastructure as a Service (IaaS) whereas Heroku offer a Platform as a Service (PaaS).…

Start with Heroku when you’re evaluating whether or not an MVP has traction. If it does, you can afford the time to prepare it for AWS.

One creative writing teacher from Montana’s reinvention of Western thought, and why it’s undergoing a renaissance

Rails 5 is right around the corner (currently targeting Fall 2015) and there are some exciting features coming up.

Best practices for great multi-device web experiences Create flexible, not fixed, layouts. Make your projects look great and interact beautifully.

All too often, I sit in a meeting with a client and conversation goes a lot like this. Me: “Okay, looks like we have 4 features fully fleshed out here. When do you need each of these by.” Client: “We need these yesterday”

Favoring a list of prioritized items is very instructive about what a developer should work on. The project sponsor or business stakeholder’s vote on priority is a clear signal to the development team.

MongoDB is evil. It… … loses data (sources: 1 , 2 ) … in fact, for a long time, ignored errors by default and assumed every single write succeeded no…

Yep, it’s a polemic. I was a MongoDB skeptic going in. I remain a MongoDB skeptic.

RSpec is an excellent test framework with a large community and an active team of maintainers. It sports a powerful DSL that can make testing certain things…

Older piece from Joe Ferris, talking about structuring RSpec tests for understandability over making use of all of RSpec’s features. Learn what a Mystery Guest is, if you don’t already know.

A lesson I learned early in my career as a programmer was to be wary of accidental creativity. If you’re the type of person who really cares about getting the details right, it’s critical to first decide which details truly matter. Not doing so is a recipe for endless frustration, as one will inevitably be distracted and defeated each day — sweating more arbitrary decisions than meaningful ones.

I use sets now…

I’ve been using Ruby for quite some time, but it was only recently that I found a hidden gem in the standard library, the Set class . If you are familiar with…

…sets are cool.

Ruby 2.0 introduced support for keyword arguments. If you’re already familiar with keyword arguments, feel free to skip to the next bit! Keyword arguments…

This is the journey of designing & coding this site, continuing from part 1. I will share how I went from the early mockups to the final site, with the many…

This is the first chapter of how I designed this site. I will share some sketches, deleted concepts and old prototypes explaining how it evolved along the way.…

An ongoing struggle I’ve wrestled with all my career is regarding estimations and their purpose in software development. A key component of SCRUM is that,…

When testing a Rails application with RSpec, there are many different test types to from. When should you pick each type and how do you combine them into…

The find_all/select methods take an enumerable collection return a new array of only the elements for which the given block returns true. It’s the simplest way…

Quick, what’s wrong with this Rails migration? Yep - it can be null. Your Boolean column is supposed to be only true or false. But now you’re in the madness of…

Many developers hit a point 5-10 years in where they feel like becoming a manager is the only way up. And at that point, they’re dangerous. 5-10 years exp?…

This tweet starts a chain with a worthwhile thread to think on. How do companies encourage career growth in their development staff? What do developers look to do when they want to level up?

When you use something as much as Ruby developers use Hashes, it’s easy to think you’ve seen it all.

But I’m here to tell you that the humble ruby Hash has a few tricks up its sleeve. Far from being a dumb key-value system, the Hash object gives you the power to do some very interesting and sophisticated things.

Weather plays an important role in many failures of engineering systems. Snow can overload a roof, ice can build up on transmission lines and towers, rain can infiltrate electrical boxes, and low temperatures can make oils viscous and difficult to pump.

Dr. Drang explains the import of weather data to his engineering practice and how he retrieves and processes data in a way he can use it easily in his work.

I always knew this day would come. The day that Facebook decided my name was not real enough and summarily cut me off from my friends, family and peers and left…

These last two pieces are worth reading and thinking about the consequences of decisions we make as developers, designers and companies. Algorithms and policies are as neutral and benign as the people that write them. Which is to say, not at all. It’s very easy to imagine our positions as neutral and positive because we – generally – have good intentions. But good intentions are not absolution from bias. Workplace diversity, equality, and a generous sense of empathy are necessary to reduce as much bias as possible.

Screencasts and presentations

I watched or attended the following:

Podcasts

I listened to the following:

For some background on what’s going on here, see the first tool sharpening post

Benfits of "throwaway" scripting

I like listening to concerts from some of my favorite artists like Mogwai, Explosions in the Sky and Hot Chip. Some artists have a definitive place to go for concert recordings, such as Reflecting in the Chrome for Nine Inch Nails.

For most artists, I end-up visiting YouTube and finding a concert and recently, I’ve found a bunch on YouTube:

While watching on YouTube is great, I would like to listen to these concerts through iTunes or on my phone.

I looked up how I get YouTube video converted to audio and found this Meta Filter thread.

I ended up using the following idea, highlighted in this comment:

1
2
3
youtube-dl UUGB7bYBlq8
ffmpeg -i UUGB7bYBlq8.WHATEVER -vn \
  -acodec copy 'Artist -Title I Want.mp4'

Three keys here:

  1. Get the IDs of the videos I wanted to convert from YouTube. I did this manually
  2. Install youtube-dl, which I did through Homebrew
  3. Install ffmpeg, also through Homebrew

While there are plenty of online or graphical tools one could use to convert YouTube videos to audio, the benefit of a command line tool is that I could then use these tools in a couple of Ruby scripts.

A lot of times, writing code involves writing tests and solving a problem through an application. Theoretically, I could have done that here. But, that felt like overkill because, right now, I have eight or so concert videos.

I wrote two scripts to help me. The first is download.rb:

1
2
3
4
5
6
7
8
#!/usr/bin/env ruby

file_list = "concerts.md"
files = File.readlines(file_list)

files.each do |file|
  `youtube-dl #{file}`
end

In the file, concerts.md is in the same directory and just contains a list of YouTube video ids.

Once these were all downloaded, I needed another script to convert the video files to audio files. I also wanted to name the resulting files. I could do both with a simple data structure. So, I wrote converter.rb.

Neither of these two files is doing anything particularly difficult. I’m just running those command line utilties. But, I’m not having to run them repeatedly. I was able to use ls and Vim to get the file names into converter.rb, then regular expressions to coerce the file listing into a data structure. I filled out the :destination keys manually. That felt like a pretty decent balance of effort to automation.

If I use this file much more, I may improve both of these scripts into something more mature. But, without waiting for that to happen, I was able to take care of some very pragmatic automation right now to save me some tedium.

I’ll take that.

Reading and Learning: June 17, 2015

I’ve been busy the last few weeks on a client project that consumed a decent chunk of my evenings recently. I learned a lot on the project, and I’ve been able to include a few links and lessons I used along the way.

Articles and books

You are an educated, successful person capable of abstract thought. A VP doing an SVP’s job. Your office, appointed with decent furniture and a healthy amount…

Paul Ford writes 38,000 in Bloomberg about the business of software. Yes, there are shorter books you’ll read. This has been highly spoken of elsewhere, particularly the online experience and the fact that corrections and clarifications are being handled by GitHub.

For an added treat on your desktop machine, open the article, then scroll to the bottom as quickly as you can.

A perceived benefit of a client-side JS framework is the responsiveness of its interface - updates to the UI are instantaneous. A large amount of application…

One of the knocks on Rails (and Ruby) is that they’re slow. Yes, they’re slower than a compiled language. But here are some thoughts on changing how we write Rails applications to deliver in 100 ms. No, not using a client-side framework. Turbolinks.

I feel it’s time to revisit the web vs. native debate, and concede defeat — or, at least, concede that the web cannot, and should not, compete with native when…

With the link above, these are opposite sides of the same coin. Let’s optimize our web applications accordingly.

Startups focus on speed since they are burning cash every day as they search for product/market fit. But over time code/hardware written/built to validate…

Building fast and making technical tradeoffs builds technical debt. The same thing happens at the organizational level and organizational debt is harder to recognize, more damaging, and harder to pay down.

One of the myths of SaaS is that the products are so good, so easy to use, so quick to deploy … that the product sells itself. Given the…

This week I found myself with the rather strange task of testing that styles had been correctly applied to the DOM. There was a good reason for it, honest.…

I just wrapped a client project recently that involves some user-facing customization. This is the technique I used to ensure the style in the customization was being applied correctly. Very helpful.

Recently I worked on a project that required an admin interface for the business owner to manage records within the application. To this end we considered a few different approaches.

Since the goal for this project was to build an MVP (minimum viable product) it was agreed building a custom solution would be too much work. After spending time reviewing both ActiveAdmin and RailsAdmin, a decision was made to go ahead with ActiveAdmin. We much preferred the ActiveAdmin interface and didn’t like the idea of applying configuration in our models for RailsAdmin.

Notwithstanding, ActiveAdmin does have a few of it’s own drawbacks. The first of which is it’s dependency on using Devise for authentication, which conflicts with our preference for using Clearance.

This article was helpful on a recent client project where I implemented ActiveAdmin using Monban for authentication

Late last week, it was revealed that Facebook has seemingly taken either lazy or apathy to a whole new level. Yes, you can apparently now reply to text…

I’ve spent the past 8 years or so looking at ugly code. This isn’t uncommon in software development but in my case, I’ve been looking at different ugly code…

About two months ago I saw a site called “ Stanford Nerd ” on Product Hunt . Stanford Nerd works by sending a text message from the website to a Stanford…

I was an economics major in college, and I’ve been grateful ever since for the few key concepts it drilled into me: things like opportunity cost, sunk cost, and…

Nolan Lawson Fellow JavaScripters, it’s time to admit it: we have a problem with promises. No, not with promises themselves. Promises, as defined by the A+…

Screencasts and presentations

I watched or attended the following:

Podcasts

I listened to the following:

For some background on what’s going on here, see the first tool sharpening post

← Previous