ねえぶ

猫好きエンジニアのブログ

先月読んだ本と今月の読書予定(2018年8月)

ブログを引っ越ししましたので,5秒後に移動します

先月の読書実績

漫画,雑誌は除いています.

実績 Fav
数学ガール
なっとく!アルゴリズム
アナタはなぜチェックリストを使わないのか?【ミスを最大限に減らしベストの決断力を持つ!】
イノベーションのジレンマ―技術革新が巨大企業を滅ぼすとき
  • 月末に駆け込みでチェックリストの本読めた

今月の読書予定

新規・継続
数学ガール
イノベーションのジレンマ―技術革新が巨大企業を滅ぼすとき
🆕 新1分間マネジャー

「アナタはなぜチェックリストを使わないのか?」を読んだメモ

ブログを引っ越ししましたので,5秒後に移動します

アナタはなぜチェックリストを使わないのか?【ミスを最大限に減らしベストの決断力を持つ!】を読んだメモです.

失敗の原因

  • 無理
    • そもそも解決できない
  • 無知
    • 解決策が見つかっていない
  • 無能
    • 解決策が正しく実行されない

現代では昔に比べ,無知より無能による失敗が多くなった.解決の仕方は解明されてきたが手順が複雑であり失敗する.

医療においては,超専門化によって複雑化への対応が進められたが,それでもミスはなくならなかった.

無能な失敗の回避方法

高性能な爆撃機の複雑な操作手順を正しく行うために,チェックリストが有効に働いた. チェックリストの内容は一見バカバカしいと思われる簡単なものだが,その効果は絶大である.

チェックリストの効能

  • 人間の記憶力と注意力の危うさ,また手順を省く誘惑を回避できる
  • チェックリストには時間がかかるが,全体の所要時間は短縮される
    • プロセスが形式化し秩序が生まれ,非効率な検討や意思決定プロセスが回避される
  • チェックリストは硬直化を招かない
    • 単純な事柄をチェックリストが片付けてくれるので,人間は難しい問題に専念できる

複雑な問題への対応

問題のタイプは以下に分けられる.

  • 単純な問題
    • ケーキの焼き方など
  • やや複雑な問題
    • ロケットの月への飛ばし方など
    • 再現性がある
  • 複雑な問題
    • 子育て,医療行為など
    • 再現性がなく多様

チェックリストは単純な問題に対しよく作用することはわかるが,複雑な問題に対してはどうか?

建築における例

  • 医療と同様に複雑多様化し,1人の人間が全てをやるのではなく超専門化された
  • 複雑な問題を分解した個々の層のチェックリスト(単純な手順の間違いを防ぐチェックリスト)とは別に,それぞれの層がコミュニケーションをするための「提起スケジュール」もチェックリスト化した
    • 予想外・不確実なの問題に対応するためのチェックリスト
    • 「人」は誤りやすいが,「人々」は誤りにくい

つまり

複雑な問題への対応は,権限の分散(自由と制約の適度な配合)が有用である(=対照的な2つのチェックリスト).

良いチェックリストとは

  • シンプルで,明確で,細かすぎず,重要な手順だけを忘れないようにさせる実用的なもの
  • 入れるべきでないものは入れない
    • チェックリストはマニュアルではなく,熟練者を助けるためのシンプルで使いやすい道具である
  • 一時停止点(いつチェックを行うのか)をはっきりと決める
  • 1ページに収める
  • 余計な装飾や色使いは避ける
  • フォントはサンセリフを使う
  • 必ず実世界で試用(テスト)する

手術においても,チェックリストの洗練と実地でのテストの繰り返しおよび改良をすることによって,大きな効果が証明された. バリュー投資についても同様の事が観測された.

本書で面白かった話

  • チェックリスト自体が機能しているかチェックするために,試金石を入れ込んでおく
    • ロックミュージシャンが「茶色のM&Msだけ除いて用意すること」とリストに入れておき,茶色のM&Msがあったら重大な問題が発生している可能性があることがわかる,という話
  • 活性化現象
    • 最初に何かを言う機会を与えることで,当事者意識と責任感が高まる

先月読んだ本と今月の読書予定(2018年7月)

ブログを引っ越ししましたので,5秒後に移動します

先月の読書実績

漫画,雑誌は除いています.

実績 Fav
数学ガール
なっとく!アルゴリズム
カイゼン・ジャーニー たった1人からはじめて、「越境」するチームをつくるまで
🆕 イノベーションのジレンマ―技術革新が巨大企業を滅ぼすとき
  • 時間がうまく作れなくてあまり読書できなかった

今月の読書予定

新規・継続
数学ガール
なっとく!アルゴリズム
イノベーションのジレンマ―技術革新が巨大企業を滅ぼすとき
🆕 アナタはなぜチェックリストを使わないのか?【ミスを最大限に減らしベストの決断力を持つ!】

先月読んだ本と今月の読書予定(2018年6月)

ブログを引っ越ししましたので,5秒後に移動します

先月の読書実績

漫画,雑誌は除いています.

実績 Fav
いちばんよくわかるHTML5&CSS3デザインきちんと入門
ミライのつくり方2020―2045 僕がVRに賭けるわけ
ほとけ様に教わった 毎日をハッピーにする90の方法
数学ガール
なっとく!アルゴリズム
カイゼン・ジャーニー たった1人からはじめて、「越境」するチームをつくるまで
エリック・エヴァンスのドメイン駆動設計
  • DDDは難しく頭に入ってこないので,第10章まで読んで一旦読むをやめた
  • 数学ガール結構難しい(特に母関数).1巻読み終わったら次読む前に秘密ノートシリーズを先に読もうかな.

今月の読書予定

新規・継続
数学ガール
なっとく!アルゴリズム
カイゼン・ジャーニー たった1人からはじめて、「越境」するチームをつくるまで
🆕 イノベーションのジレンマ―技術革新が巨大企業を滅ぼすとき

先月読んだ本と今月の読書予定(2018年5月)

ブログを引っ越ししましたので,5秒後に移動します

先月の読書予定と実績

雑誌は除いています.

実績 Fav
Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語
仕掛学
Newton 対数の威力」
Newtonライト『統計のきほん』
Newtonライト『ベクトルのきほん』
いちばんよくわかるHTML5&CSS3デザインきちんと入門
エリック・エヴァンスのドメイン駆動設計
  • DDDがまだまだ全然読み終わらない・・・(ちょうど半分くらい)
    • 第2部まで終わったら一旦読むの止めるかも
  • 仕事でCSSの基礎がわかってないことが判明したから,急いでCSSの勉強を割り込みさせて読んでいる
  • 雑誌も先月から読み始めたけど,Newtonはやはり面白い!

今月の読書予定

新規・継続
エリック・エヴァンスのドメイン駆動設計
🆕 なっとく! アルゴリズム
🆕 数学ガール

三楽の森公共緑地・貫井神社を散策

ブログを引っ越ししましたので,5秒後に移動します

通勤路がコンクリートジャングルなので,たまに自然に触れるために公園や神社などを散策しています.

1ヶ月前ですが,3月25日(日)に三楽の森公共緑地に行ってきました! また,その近くにあった貫井神社にも寄ってきました.

基本情報

三楽の森公共緑地

浅間神社

アクセス

JR国分寺駅南口から徒歩で向かいました.三楽の森までは20分くらいでした. 三楽の森の入口は北側のみなので注意です!

三楽の森公共緑地

公園前と,入口を入ったところにある看板. 所有者の前田さんに感謝!

緑地内には様々な木々が生い茂り,ちょうど春先だったので新芽も見られ,とても気持ちよい空間でした.

私の好きな竹林もありました!!

貫井神社

帰りに三楽の森近くにある貫井神社にも寄ってきました.

こちらの神社は境内に池があり,掛かる橋を渡って拝殿に向かいます. 池には鯉や亀が!

本坪鈴は1つ.よい音色でした.

少し外れたところには八雲神社愛宕神社があるのですが,閉まっていました. 昔あった神社なのかな? この2つの神社がある森を抜けて北側に歩いたのですが,よい雰囲気でした.

その他

三楽の森のすぐ近くに小学校があり,校門に大きな桜の木があったのですが,これがまた壮観でした.

冬の公園散策もよいですが,春先はまた温かい陽気でよいですね!

NeomakeでEslintが動かない場合の対処

ブログを引っ越ししましたので,5秒後に移動します

以下のブログを参考にSyntasticからNeomakeに乗り換えてみたのですが,私の環境ではEslintがうまく実行されませんでした.

[Vim]SyntasticによるESLintチェックが遅いのでNeomakeに乗り換えた - dackdive's blog

TL;DR

次のようにしたら動きました.

NeoBundle 'neomake/neomake'
NeoBundle 'benjie/local-npm-bin.vim'

augroup ft_javascript
  autocmd!
  " get eslint path of current environment
  function! s:GetEslintExe()
    let l:eslintExe = GetNpmBin('eslint')
    if empty(l:eslintExe)
      return 'eslint'
    else
      return l:eslintExe
    endif
  endfunction

  " set exe of neomake eslint
  autocmd FileType javascript let g:neomake_javascript_myeslint_maker = {
        \ 'exe': s:GetEslintExe(),
        \ 'args': ['-f', 'compact'],
        \ 'errorformat': '%E%f: line %l\, col %c\, Error - %m,' .
        \ '%W%f: line %l\, col %c\, Warning - %m'
        \ }
augroup END

let g:neomake_javascript_enabled_makers = ['myeslint']
let g:neomake_error_sign = {'text': '>>', 'texthl': 'Error'}
let g:neomake_warning_sign = {'text': '>>',  'texthl': 'Todo'}
call neomake#configure#automake('nrw', 750)

環境

  • Mac 10.13.3
  • MacVim 8.0

現象

参考ブログに倣ってインストールしてみましたが,ローカルのeslintがなく,グローバルのeslintだけある場合にNeomake実行時に次のようなエラーが出ました.

19:31:12 [D +7.45] [-.-:1:1] automake: handling event FileType.
19:31:12 [D      ] [-.-:1:1] Using setting automake.ignore_filetypes=['startify'] from 'global'.
19:31:12 [E +0.02] [-.-:1:1] Exe () of maker eslint is not executable.
19:31:12 [D      ] [-.-:1:1] automake: configured buffer for ft=javascript (no enabled makers).
19:31:12 [D      ] [-.-:1:1] automake: setting tick for new buffer.
19:31:12 [D      ] [-.-:1:1] automake: no enabled makers.

エラーログは次のような設定を入れて出力させました.

let g:neomake_verbose = 3
let g:neomake_logfile = '/tmp/neomake.log'

また,この時:NeomakeInfoを実行すると,eslintのexe項目が空文字でした.

原因

ローカル環境のeslintを使うように調整してくれるbenjie/local-npm-bin.vimが,ローカル環境のeslint(node_modules/.bin/eslint)が見つからない場合にeslintのexeに空文字を設定するようになっていたのが原因でした(該当コードGetNpmBin()はローカル環境の実行ファイルが見つからない時に空文字を返す).

参考ブログのbenjie/neomake-local-eslint.vimから名前から変わっているから,動作が当初から変わってしまったのかな?

解決策

  • myeslintというmakerを新たに定義して,filetypeがjavascriptに変わる時に現在のローカル環境のeslintをmakerのexeにセットするようにしました
  • benjie/local-npm-bin.vimeslintmakerを上書きしてしまうタイミングが後になるからか,eslintmakerをvimrcで書き換える方法ではうまく動きませんでした
" filetype: javascript
augroup ft_javascript
  autocmd!
  " get eslint path of current environment
  function! s:GetEslintExe()
    let l:eslintExe = GetNpmBin('eslint')
    if empty(l:eslintExe)
      return 'eslint'
    else
      return l:eslintExe
    endif
  endfunction

  " set exe of neomake eslint
  autocmd FileType javascript let g:neomake_javascript_myeslint_maker = {
        \ 'exe': s:GetEslintExe(),
        \ 'args': ['-f', 'compact'],
        \ 'errorformat': '%E%f: line %l\, col %c\, Error - %m,' .
        \ '%W%f: line %l\, col %c\, Warning - %m'
        \ }
augroup END

その他

  • 参考ブログではautocmdでNeomakeの実行を設定していましたが,公式の方法に則って以下のようにしました
call neomake#configure#automake('nrw', 750)

syntasticからNeomakeへの乗り換えで変更したdiffは↓で確認可能です.

https://github.com/ottijp/dotfiles/compare/4f8f4690a53cfde376367ac990efc54d59c217fd...36e6207e5a4f290b96dc2eeeb2a0d911ac7666ea