Josh Thompson     about     archive     tags

2018 Reading Review & Recommendations

I read many books in 2018. I’m listing them out here, along with recommendations. Here’s the recommendation “key”:

  • 👍 = I recommend this book. (This metric is intentionally fuzzy.)
  • 😔 = This book influenced my mental model of the world/reality/myself
  • 🏢 = Book topic is architecture and/or urbanism
  • 💵 = Book topic is finance/economics/politics
  • 😫 = This book is hard to get through. Lengthy and/or academic
  • 🐲 = Fiction (most of the fiction I read had fantastic(al) creatures in them, hence the dragon)

If you want anything of value from this list, quickly skim through it. If any of the book topics/titles look of interest to you, consider reading. If a book doesn’t look interesting to you, but I’ve strongly recommended it, you should read it. :)

The tl;dr of the subsequent list of 70+ books is:

  1. Read The Problem of Political Authority: An Examination of the Right to Coerce and the Duty to Obey
  2. Read The Color of Law: A Forgotten History of How Our Government Segregated America
  3. If you’re a parent, or have friends who are parents, or might someday be a parent, consider reading How to Raise an Adult: Break Free of the Overparenting Trap and Prepare Your Kid for Success

I did this last year as well: Recommended books from 2017

Notes and Themes

I re-read The Problem of Political Authority, which continues to be my most recommended book. It contains straight-forward, elegant prose, provocative ideas, and perceptive analysis. What else could one want in a book?

I added a few lines on some of these books. Most I didn’t say anything about. I could have spoken at length on many, many more of these books, but it’s daunting to do so on such a list. This makes me want to re-do how I record thoughts on books. Hm.

I read (and finished) the Dresden Files series. All fifteen of them. I enjoyed the series immensely, though I didn’t mark them with a 👍 - if you’re into fiction, film noir, and crime-fighting wizards, this series is for you. If not, don’t waste your time. If you think reading should only be non-fiction to make you smarter, or “hard” fiction, to make you smarter - I disagree. The Dresden files were like candy. Easy, bite-sized, not complex, and delightful. Won’t kill you in small doses.


Dead Beat (The Dresden Files, #7) 🐲

The House of Morgan: An American Banking Dynasty and the Rise of Modern Finance 😔 💵 😫

This is Ron Chernow’s first biography. Ron Chernow has authored many other biographies, including the Hamilton biography that inspired the musical. The institution we know today as “JP Morgan Chase” had an interesting start and history. After reading Money, Bank Credit, and Economic Cycles here’s my analysis on MBCEC, for the curious, I have little appreciation for large banks doing their leveraged buyouts and functionally fraudulent activities, but it’s still interesting to know the basics of such a prominent institution in America.

For a while, the bank had more of a say in international relations than the US government did. The government had limited access to capital, and the bank could provide it, so large banks played a role in “cracking open” south/central America and Asia, often with many deleterious effects in those regions.

The Death and Life of Great American Cities 😔 👍 🏢 💵

Jane Jacobs is a hero. She loves cities, and when you’re done reading this book, you might love them too. She identified huge problems in the 50’s with the profession of “city planning”, and most of the industry is clueless to her critiques, bumbling along, making the same errors they always did. (Sorta like doctors draining “bad humors”.)

I think most of the built environment in America is headed straight for insolvency and bankruptcy, and if there was a time to change bad practices to good ones, it passed long ago. But this book is still a must-read.

Crazy Busy: A (Mercifully) Short Book about a (Really) Big Problem

Preludes & Nocturnes (The Sandman, #1) 👍 🐲

This is the first comic book I’ve read in many years. I loved it. I wish my library had the rest of the series.

>> Read more

Pry-ing into a Stack Trace

I was recently working on a feature, committed what I thought was clean code, and started getting errors. I git stashed, and re-ran my tests, and still got errors. Here’s the full stacktrace:

> b ruby -Itest test/models/model_name_redacted_test.rb -n=/errors/

# Running tests with run options -n=/errors/ --seed 55842:

/Users/joshthompson/.rvm/gems/ruby-2.3.7/gems/minitest-reporters-1.3.5/lib/minitest/reporters/default_reporter.rb:49:in `after_suite': undefined method `name' for nil:NilClass (NoMethodError)
	from /Users/joshthompson/.rvm/gems/ruby-2.3.7/gems/minitest-reporters-1.3.5/lib/minitest/reporters/base_reporter.rb:59:in `report'
	from /Users/joshthompson/.rvm/gems/ruby-2.3.7/gems/minitest-reporters-1.3.5/lib/minitest/reporters/default_reporter.rb:89:in `report'
	from /Users/joshthompson/.rvm/gems/ruby-2.3.7/gems/minitest-reporters-1.3.5/lib/minitest/minitest_reporter_plugin.rb:26:in `each'
	from /Users/joshthompson/.rvm/gems/ruby-2.3.7/gems/minitest-reporters-1.3.5/lib/minitest/minitest_reporter_plugin.rb:26:in `report'
	from /Users/joshthompson/.rvm/gems/ruby-2.3.7/gems/minitest-5.11.3/lib/minitest.rb:808:in `each'
	from /Users/joshthompson/.rvm/gems/ruby-2.3.7/gems/minitest-5.11.3/lib/minitest.rb:808:in `report'
	from /Users/joshthompson/.rvm/gems/ruby-2.3.7/gems/minitest-5.11.3/lib/minitest.rb:141:in `run'
	from /Users/joshthompson/.rvm/gems/ruby-2.3.7/gems/minitest-5.11.3/lib/minitest.rb:63:in `block in autorun'
Coverage report generated for Unit Tests to /Users/joshthompson/wombat/threatsim-rails/threatsim/coverage. 1512 / 17964 LOC (8.42%) covered.

This is a relatively common error. Something is nil where it ought not to be nil.

But now for the kicker.

I found out that if you hold the cmd key down and click one of those file paths, the file in question will open in your editor!!!


>> Read more

Procfile: Run Just a Single Process

Lets say you’ve got something like this in your Procfile:

web:          PORT=3000 RAILS_ENV=development bundle exec puma -C ./config/puma_development.rb -e development
devlog:       tail -f ./log/development.log
mailcatcher:  ruby -rbundler/setup -e "Bundler.clean_exec('mailcatcher', '--foreground')"%

And you want to run just the stuff in the web line.

Old Josh would have cated the procfile, and copy-pasted most of the top line into the terminal.

New Josh knows better.

$ foreman start web 

If I wanted to see just the devlog, I could do:

foreman start devlog

I knew this was possible, I just kept getting the syntax wrong. For example, I tried foreman web, foreman devlog.

Now I know. And so do you.

Additional Reading

Whole Messages in Slack

I use Slack at work. And used it in Turing. And am in a few programming-related Slack groups. (Ahoy, #DenverDevs). My last job, I used Slack. The job before that, I got the whole company on Slack. I’ve used it for years.

Slack delivers value to me, and induces little anxiety, and most importantly, Slack does not interrupt my day, and I don’t think I interrupt other people’s days via Slack much either.

Slack is famous for ruining other people’s work-days. Their complaints are valid:

So, if some people like Slack, and some people hate it, what might account for the difference?

Personal preference is certainly part of the difference… but I think it’s not the whole story.

This is a bit of a “how Josh uses Slack” post. It might pair well with PSPDFKit’s How to Use Slack and Not Go Crazy .

Slack settings (aka “Silence the Beast”)

Slack’s default notification settings will ruin you.

It tries to make sound and pop up a desktop notification every time someone says something in a channel you’ve joined. This is unacceptible.

Turn off all audible notifications, and while you’re at it, turn off the rest, too:

No notifications!

no audible notifications!

I have sometimes been in the same room as people who have audible notifications when someone posts anything to any channel, and feel vaguely horrified. Don’t be this person.

When I’m at my computer, I know that I’ll see Slack regularly. It’s rare that I would go without checking slack for more than 30 minutes. Deep Work: Rules for Focused Success in a Distracted World would probably prefer me to go an hour or two without looking at Slack during the day. I hope to get there some day, but am not there yet.

Since I check Slack regularly when I’m at my computer, I turn off all notifications. If someone sends me an urgent message, they might wait for a while before I write back.

This is OK to me, as I treat direct messages as asynchronous communication, and encourage others to do the same. “You there?” isn’t a message I’ll ever send.

There are a few channels where an @here or @channel will cause a notification “dot” to show up on Slack. The vast majority of the rest of the channels I’m in, I’ve muted even @here and @channel.

This means I can be in many channels, and never even know there’s conversation happening in them until I choose to go look in them.

mute all the things

“You There?” and other messages to never send

A while back, I learned about “whole values” in Ruby objects.

For example, if you call course.duration, it might return 6.

6 what? 6 Days? 6 weeks? Avdi talked about making the value “whole”, by including every element required to correctly parse the duration attribute. course.duration would now return something like Weeks[6], or Months[3]. Unambiguous.

>> Read more

The Complete Guide to Rails Performance: basic setup

You know the feeling.

You are excited to start a guide or a tutorial. You buy it, crack it open, and start working through the environment setup.

Then… something goes wrong. Next thing you know, you’ve spent two three too many hours debugging random crap, and you’re not even done with the introduction to the dang thing.

Oh, this has never happened to you? Must be nice.

I’m working through The Complete Guide to Rails Performance, and I’m thrilled to get learning underway.

I’ve hit a few hiccups, though. I’m not the most sophisticated user out there, so here’s a mess of problems I ran into, and the solutions I did.

All of my struggles were with ElasticSearch. I’ve never used it before, so this isn’t surprising.

The RubyGems docs recommend the following:

Install Elastic Search:

  • Pull ElasticSearch 5.1.2 : docker pull
  • Running Elasticsearch from the command line:
    docker run -p 9200:9200 -e "" -e ""
>> Read more