Journal Archives About Books Talks
To Hell and Back: Europe 1914-1949
reviews

To Hell and Back: Europe 1914-1949

Incredibly detailed panoramic view of Europe across the political, sociological, economic, and military landscape from just before the Great War until then end of the 1940s. It weaves an entertaining thread, moving from state to state under each topic as the book inches slowly forward in time.

It's a superb presentation of the interconnectedness of events in Europe over thirty five years of war, revolution, and reconstruction.

The Benedict Option: A Strategy for Christians in a Post-Christian Nation
reviews

The Benedict Option: A Strategy for Christians in a Post-Christian Nation

Definitely not the book I thought it would be based on the reviews, but I enjoyed it nonetheless.

The book wrestles with the question every generation of the church must ask how do Christians live faithfully in this age, in this culture?.

Dreher is Eastern Orthodox so he places more emphasis on tradition than do I, but there is a lot to agree with. The book is written for a broad audience. The theme of each chapter could easily have been broken out into separate books. In the end there are broad strokes for a recommitted Christian rule of life, but it's not the monastic underground you'd expect from the title.

The Kingdom of Speech
reviews

The Kingdom of Speech

More of an extended Medium rant than book, Wolfe paints Darwin and Chomsky as arrogant, ego-driven, and vindictive toward their contemporaries while providing less evidence for those accusations than he says they provided for their theories. Wolfe's over-the-top dramatic retelling of events resembles an episode of the 1960s Batman TV series. His takedowns of Darwin and Chomsky aren't as dramatic as he seems to think, and his own conclusion lacks evidence.

By the end, it felt like waiting for the check after dinner with an obnoxious business associate who has had one too many.

Valiant Ambition: George Washington, Benedict Arnold, and the Fate of the American Revolution
reviews

Valiant Ambition: George Washington, Benedict Arnold, and the Fate of the American Revolution

Nathaniel Philbrick is one of my favorite non-fiction writers, and this title did not disappoint. Going in, I must admit I knew almost nothing of Benedict Arnold beyond his status as a byword for traitor.

Philbrick portrays a remarkably consistent Arnold in which the character traits that led him to battlefield heroics also led him to give up the cause for which he had sacrificed. I enjoyed the interwoven storylines and the historical backdrop in which Washington, the Howe brothers, and others made the choices they did.

I wish there had been a longer ending that told more of Arnold's service in the British army.

linked

asdf: Extendable version manager

If your work involves multiple languages and multiple tools for managing versions, check out asdf, an extendable version manager that provides a single consistent interface for managing them all:

# List all installed ruby versions
❯ asdf list ruby
1.9.3-p545
2.1.2
2.2.3
2.2.4
2.2.5
jruby-9.1.6.0

# Install a new ruby version
❯ asdf install ruby 2.3.3

# List available nodejs versions to install
❯ asdf list-all nodejs

# Install a new nodejs version
❯ asdf install nodejs 7.7.2

I've been using asdf as my primary version manager for Ruby and Node for a few weeks and am really liking it.

h/t Adam

linked

A CLI for Amazon Athena

I've been enjoying Amazon Athena to analyze our application event data.

In case you haven't played with it yet, Athena allows you to query data in S3 using SQL. My only complaint so far is having to use the web interface to manage schemas and run queries. Since Amazon offers a JDBC driver for Athena, I decided to build my first JRuby app - a command line interface for Athena catalogs.

You can run queries:

❯ cat queries/count-by-port.sql
SELECT COUNT(*) AS count, elb_name
FROM sampledb.elb_logs
GROUP BY elb_name
ORDER BY count DESC
LIMIT 10;

❯ athena query queries/count-by-port.sql
COUNT  | ELB_NAME
-------|-------------
151901 | elb_demo_006
151886 | elb_demo_009
151753 | elb_demo_001
151284 | elb_demo_002
151062 | elb_demo_004
150503 | elb_demo_008
149934 | elb_demo_005
149122 | elb_demo_007
148761 | elb_demo_003

manage schemas,

❯ athena table show sampledb.elb_logs
CREATE EXTERNAL TABLE `sampledb.elb_logs`(
  `request_timestamp` string COMMENT '',
  `elb_name` string COMMENT '',
  `request_ip` string COMMENT '',
  `request_port` int COMMENT '',
  `backend_ip` string COMMENT '',
  `backend_port` int COMMENT '',
  `request_processing_time` double COMMENT '',
  `backend_processing_time` double COMMENT '',
  `client_response_time` double COMMENT '',
  `elb_response_code` string COMMENT '',
  `backend_response_code` string COMMENT '',
  `received_bytes` bigint COMMENT '',
  `sent_bytes` bigint COMMENT '',
  `request_verb` string COMMENT '',
  `url` string COMMENT '',
  `protocol` string COMMENT '',
  `user_agent` string COMMENT '',
  `ssl_cipher` string COMMENT '',
  `ssl_protocol` string COMMENT '')
ROW FORMAT SERDE
  'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  'input.regex'='([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*):([0-9]*) ([.0-9]*) ([.0-9]*) ([.0-9]*) (-|[0-9]*) (-|[0-9]*) ([-0-9]*) ([-0-9]*) \\\"([^ ]*) ([^ ]*) (- |[^ ]*)\\\" (\"[^\"]*\") ([A-Z0-9-]+) ([A-Za-z0-9.-]*)$')
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://athena-examples-us-east-1/elb/plaintext'
TBLPROPERTIES (
  'transient_lastDdlTime'='1480278335')

list and rebuild partitions, and more.

Setup instructions and full usage are in the GitHub repository.

Looking for more? View the archives or grab the feed.