失敗から学ぼう「失敗の科学」
まずは1章だけでも
興味深い事例を(悲劇的な事例が多いのだが)多く出して、失敗からいかに学ぶかについての本である。
1章でこの本の言いたいことが全て書かれているので、1章だけでも読んでもらうのが良いと思う。
「失敗から学ぼうとする姿勢」はどのような姿勢なのか。それは「失敗に対してオープンで正直な文化があれば、組織全体が失敗から学べる」としている。
これだけでこの本のエッセンスが詰め込まれている。
ただし1章を読んだらこの本の面白さからその後の章も読んでしまうだろう。
失敗から学ぶことの困難さ
「 人は自分の信念にしがみつけばしがみつくほど、相反する事実を歪めてしまう」 「努力が判断を誤らせる 」
として厳しい試験や過酷な加入儀式によって入った人たちが判断を誤らせる。
米国の司法制度や予言が外れた宗教グループの反応の興味深い例を示している。
世の中のさまざまな集団の加入儀式の狙いが透けて見えそうではある。
失敗から学ぶマインドセットとして、「あえて間違えろ」としている。
また失敗を多くする=小さい改善を積み重ねるとして「マージナル・ゲイン」というアプローチの紹介がされている。
中世から近代まで効果のある医療行為の瀉血について「もし患者が死んでも、「瀉血の力でさえ救えないほど病気が重かった」と自分に言い聞かせた。運よく患者が生き延びれば「瀉血のすばらしい力のおかげだ」と、その認識をますます深めた」と。
瀉血をした患者に対してのその後の調査をしっかりとしてないからこのような考えに至るのである。
失敗した後もきちんとした調査をしないと良いフィードバックを得られないのである。
失敗から学習することを妨げるもの
失敗を非難することについては世の中を単純に考えすぎたり、早計な非難を止めることが必要。
「罰則を強化したところでミスそのものは減らない」としているが、身の覚えがある人も多いのではないだろうか。
上司の仕事として「失敗をオープンに報告できる環境作りをせず、スタッフがその失敗から学ぶことを妨げて」いないか。
「もし「失敗は学習のチャンス」ととらえる組織文化が根付いていれば、非難よりもまず、何が起こったのかを詳しく調査しようという意志が働くだろう」としている。
失敗から学ぶために
失敗から学ぶマインドセットと失敗から学ぶシステムが必要。
失敗は自分を成長させるものというマインドと失敗をオープンに報告できる環境と多くの失敗を重ねて正しい振り返りを繰り返すことが失敗から学ぶこととしている。
興味深い事例や言葉
要約には入れきれなかった興味深い事例を挙げておく。
- 航空業界がいかに失敗から学んでいるか(その一方で言われなき非難をされた機長も何名か紹介されている)
- 帰還した爆撃機の穴の跡は、そこなら撃たれても耐えられる場所を示している。
- 刑務所訪問「スケアード・ストレート」プログラムがすぐに効果がないと証明されたにも関わらず賞賛するドキュメンタリーは作られ続けられた。
- ルイセンコのとった政治的な行動によるソ連の科学の遅れ
- ランダム化比較試験(RCT)
- 選択バイアス
- 小林尊さんの大食いコンテストに対策の努力
- イギリス、ソーシャルワーカーの辞職の急増の例
- イスラエル空軍とリビアン・アラブ航空114便の悲劇
- ベテラン医師が、自分の失敗を受け入れない心理状態は、「神コンプレックス」と呼ばれることについて
- 「成長型マインドセット」とは知性も才能も努力によって伸びると考える。
「」の中の太字は本文からの引用
ansible_specでsudoパスワードを指定する
ansible_spec いいなぁ! いいところは他のサイトの紹介を参考していただくとして sudoパスワードを指定するときに困ったのでその解決方法をメモ。
普通に下記のようにしても動いてくれない
bundle exec rake serverspec:Ansible-Sample-TDD ASK_SUDO_PASSWORD=1
spec_helper.rb の ENV['ASK_BECOME_PASSWORD'] ってなっているところが原因かな?
when 'ssh' # # OS type: UN*X # set :backend, :ssh if ENV['ASK_BECOME_PASSWORD'] begin require 'highline/import' rescue LoadError fail "highline is not available. Try installing it." end set :become_password, ask("Enter become password: ") { |q| q.echo = false } else set :become_password, ENV['BECOME_PASSWORD'] end
ENV['ASK_BECOME_PASSWORD']を ENV['ASK_SUDO_PASSWORD']に変更してみたら sudoパスワードを指定できました。
もっと良い方法あるかと思いますが…
Let's Encryptを導入しようとしたら Client with the currently selected authenticator does not support any combination of challenges that will satisfy the CA. って出た
さくらのVPSで Let’s Encrypt を導入しようとしたら
Client with the currently selected authenticator does not support any combination of challenges that will satisfy the CA.
というエラーメッセージが出た時のした事のメモ。
下記を参考に作業を開始。( OSはCentOS 7)
ネコでもわかる!さくらのVPS講座 ~第六回「無料SSL証明書 Let’s Encryptを導入しよう」 | さくらのナレッジ
yum install certbot python2-certbot-apache
certbot --apache -d example.com
上記のコマンドでタイトルのエラーが発生した。
調べるとCertbotを最新版にしないといけないようだ。
最新版を取得
wget https://dl.eff.org/certbot-auto chmod a+x ./certbot-auto ./certbot-auto --version
webサーバーが動作中だったので、 Webroot プラグインで SSL/TLS 証明書を発行
./certbot-auto certonly --webroot -w /var/www/example.com/htdocs -d example.com
Certbotの使い方は、「Let's Encrypt 総合ポータル」を参考にしました。 letsencrypt.jp
Herokuで独自ドメインの設定とSSL接続の設定
Herokuで独自ドメインの設定とSSLの設定をしたときのメモ (HerokuのDynoはHobbyを利用している前提です)
独自ドメインの設定
DNSの設定
ホスト名 | TYPE | VALUE |
---|---|---|
独自ドメイン | CNAME | アプリ名.heroku.com |
Herokuの設定
$ heroku domains:add 独自ドメイン
追加したドメインの確認
$ heroku Domain Domain Name DNS Target ──────── ──────────── 独自ドメイン 独自ドメイン.heroku.com
これでホスト名に指定した独自ドメインにアクセスするとHerokuのアプリにアクセスできます。
SSL接続の設定
freeプランだと以下の設定は出来ません。 DNSの設定を変更します。
DNSの設定
ホスト名 | TYPE | VALUE |
---|---|---|
独自ドメイン | CNAME | 独自ドメイン.herokudns.com |
Herokuの設定
アプリのSettingsの「Domains and certificates」にある 「Configure SSL」を選択
「Automatically configure using Automated Certificate Management」を選択してContinueを押す
yourapp.herokuapp.com -> yourdomain.herokudns.com という説明がありますが、DNSで設定しているので 「I’ve done this」を選択 暫くすると httpsで接続できるようになります。
$ heroku Domain Domain Name DNS Target ──────── ──────────── 独自ドメイン 独自ドメイン.herokudns.com
また設定におかしなところがあればHerokuのNotificationsにメッセージがくるので その内容を確認するとよいです。
最後に
下記の記事のほうが分かりやすいです kayakuguri.github.io
PHPExcelで画像をはりつけたExcelをつかうと502エラーになる(PHP 7.0.19)
PHPExcelを使う時にテンプレートを用意して、必要な内容をPHPで書き込むと思います。 テンプレートにロゴとか社印とか画像ファイルをつけたりすると思うのですが、 PHPのバージョンが違うと502のエラーになりました。 テンプレートにしたExcelファイルはXLSX形式です。
PHP 7.0.15 だと問題なかったのですが、PHP 7.0.19だと502エラー
処理が失敗している箇所はPHPExcelの Writer/Excel2007/ContentTypes.php のgetImageMimeType。
getImageMimeTypeでExcelファイルにある画像の拡張子を取得しているのですが、 XLSX形式のファイルをzipで解凍してExcelファイルに含まれている画像のパスからだと getimagesize関数では失敗するようです。 PHP 7.0.15で問題なくってPHP 7.0.19で失敗するのか分かりません(涙
とりあえず、テンプレートのファイルをxls形式にすると この問題は発生しませんでした。
私の環境だけかもしれないですが念のためーー
FuelPHPでPHPUnitを使用するときに'PHPUnit_Framework_TestCase' not found って出た
タイトルの通りですが、下記のエラーがでました。 FuelPHPのバージョンは1.8です。
$ php oil test --group=App Tests Running...This may take a few moments. PHP Fatal error: Class 'PHPUnit_Framework_TestCase' not found in /var/www/html/project/fuel/core/classes/testcase.php on line 19 Fatal error: Class 'PHPUnit_Framework_TestCase' not found in /var/www/html/project/fuel/core/classes/testcase.php on line 19 Fatal Error - Class 'PHPUnit_Framework_TestCase' not found in COREPATH/classes/testcase.php on line 19
PHPUnitのバージョンは6です。 なんでかなーと思ってると下記の記事を見つけました。
PHPテストフレームワーク「PHPUnit 6.0」リリース | OSDN Magazine
PHPUnit 6.0では、PHP 5.6がサポート対象外となり、PHPはバージョン7と7.1をサポートする。PHPUnit_Framework_TestCaseがPHPUnit\Framework\TestCaseとなるなど、コードユニットが名前空間化された。
ということなので fuel/core/classes/testcase.php の extends 以降を修正しました。
abstract class TestCase extends \PHPUnit\Framework\TestCase { }
とりあえず、エラーがなくなって PHPUnit が動きました。
修正の方法はもっと別の方法があるような気がするなあ。
WordPressでプラグインなしで全てのカテゴリーを取得する
get_categories関数を使えばカテゴリーが取得できます。
get_categories('get=all');
get_categories関数のパラメーターに get=all を指定すること。
パラメーターなしだとカテゴリーの中で投稿に紐付いてないカテゴリーは取得されないと思います。
get_categoryだとその投稿のカテゴリーしか取得出来なかったです。
function.phpなどに以下のようにして書いて関数を呼んでやれば全てのカテゴリーを表示させられるはずです。
<?php function get_all_categories(){ $all_categories; $categories = get_categories('get=all'); foreach ($categories as $category) { $all_categories .= $category->cat_name; } return $all_categories; } ?>