本日(5/17)改訂2版 パーフェクトRubyが発売されます
パーフェクトRubyの改訂をしていました
既に技術評論社さんのサイトやAmazonにも載っているのでご存知の方も多いかもしれませんが、最近はパーフェクトRubyの改訂をしていました。
目次などの詳しい情報はgihyo.jpの公式サイトをご覧ください。
書籍版はAmazonでも購入できます。ついうっかり初版を買わない様に注意してください(ヒント:今回のモチーフは鳥です)。
ところで私は見本誌を送付してもらう住所を書き間違えて不達になってしまったため、未だに見本誌が手元にありません😇
初版持ってるんだけど違いはあるの?
いろいろ誤字やなんとも言えないサンプルコードなどを直しているので書籍としてのクオリティは上がってると思うのですが、内容的に大きく変わったところを簡単に書くとこんな感じです
- Ruby 1.9時代などに使われた旧時代の便利テクなどは控えめです
- 初版で対応していたRuby 2.0以降(もちろん2.3, 2.4も)で追加されたメソッドなどにも可能な限り対応しています
- 元々Sinatraを紹介していた章をtest-unitの章に置き換えました
- capistranoには消えてもらいました*1
テストとsinatraにまつわるお気持ちの供養(ただのポエムです)
「パーフェクトRubyはテストがあればパーフェクトなのに」誰だってそー思う。俺だってそー思う。本当にそうだと思うのですが、実は初版の執筆時点ではテストの章はあったんですよね。
15章のツールに対してRSpecでテストを書くというのをやっていたのですが、紙面の都合で泣く泣く削ってしまったのです。
また、当時はシリーズとしてパーフェクトRuby on Railsが無かったため、Rubyの書籍としてWebアプリに関する説明がほぼ無いのはどうなのだ、という懸念があってWebアプリの習作としてSinatraを採用しました。まぁここら辺は私の趣味なんですけどね。
という経緯から数年経ち、Ruby標準で付いてくるテスティングフレームワークも落ち着いた*2*3のもあり、Webアプリに関することはパRailsに任せれば良いかなというところで今回の構成になったのでした。
電子書籍について
gihyo.jpからのPDFなら今すぐ買えます!!!
Amazonでの販売についてはしばしお待ちください😅
RSpecで遅いテストを見つける
--profile
オプションを使う
普段きちんとRSpecを使っている人にとっては常識なのかもしれません。というか普通にhelpに載っているので常識なのでしょう、、、。
RSpecで遅いテストを見つけるには、--profile
オプションを使うと簡単に見つけることができます。
% bundle exec rspec --profile 3 .................................. Top 3 slowest examples (4.24 seconds, 61.5% of total time): Pooka Pooka::Master Worker#run worker received usr1 signal(signal_handler_thread Error) 1.41 seconds ./spec/pooka_spec.rb:86 Pooka Pooka::Master worker received hup signal(fail config reload) 1.41 seconds ./spec/pooka_spec.rb:109 Pooka Pooka::Master Worker#run worker received hup signal 1.41 seconds ./spec/pooka_spec.rb:53 Top 3 slowest example groups: Pooka 0.76258 seconds average (6.86 seconds / 9 examples) ./spec/pooka_spec.rb:3 Pooka::Configuration 0.00121 seconds average (0.01575 seconds / 13 examples) ./spec/pooka/configuration_spec.rb:5 Pooka::PID 0.00063 seconds average (0.00443 seconds / 7 examples) ./spec/pooka/pid_spec.rb:4 Finished in 6.89 seconds (files took 0.24356 seconds to load) 34 examples, 0 failures
--profile
の後に数値を指定することで出力する件数を調整することもできます。
macOS Sierra時代のsyslogとの付き合いかた
/var/log/system.log
へ書き込まれないのでした
ある調査によると、人間は一日におよそ86400回はsyslogに出力したいと願っているそうです*1。
さて例えばlogger
コマンドを使って syslog に出力しておく、なんていうことは稀によくあることではないでしょうか。私は稀によくあります。
ところが、MacにおいてSierraにアップグレードしてからというもの、loggerコマンドや何がしかのプログラミング言語を使ったsyslogへの出力を行なってもsyslogーーいわゆる /var/log/system.log
へ書き込まれないのでした。
統合されたログ環境
実は macOS Sierra 10.12 あたりを見ると、なんとなくsyslogについて言及されている。
要約すると
- ASL (Apple System Logger)という統合されたログ環境になったよ
- 見るなら Console.app を見てね
- log コマンドでも見れるよ
そんなわけで、loggerコマンドなどで出力したログは虚空に吸い込まれたわけではなく、ASLに出力されているのでした。
ログを検索することもできる
新しくなったconsole.appで logger プロセスからの出力でフィルタリングしつつ、loggerコマンドを実行するとこんな感じで出力される。
もちろん、過去に出力されたログを検索することもできる。
また、上記で書いたように log
というコマンドも用意されていて*2、それを使うと、例えばこんな風にログを検索することもできる。
% log show --style syslog --predicate 'processImagePath endswith "logger"' --start "2017-04-06 23:02:30" Skipping info and debug messages, pass --info and/or --debug to include. Filtering the log data using "processImagePath ENDSWITH "logger"" Timestamp (process)[PID] 2017-04-06 23:02:33.918967+0900 localhost logger[51425]: アババババばばばばb
logコマンドについてはまー man log
すれば雰囲気はわかると思う。この先は君自身の目で確かめてくれ!
これでsyslogに何も出力されなくて途方にくれなくて済みますね。
pry起動時に「Sorry, you can't use Pry without Readline or a compatible library.」と言われる場合あるいはirbで矢印キーが動かない場合
irbで矢印キーを入力するとエスケープ文字が出力されてしまったり、pryを移動させるとエラーになってしまう場合の対処。
OSのバージョンをSierraにしたからか、irbやpryがうまく動かなくなってしまった。
# bundle exec pry Sorry, you can't use Pry without Readline or a compatible library. Possible solutions: * Rebuild Ruby with Readline support using `--with-readline` * Use the rb-readline gem, which is a pure-Ruby port of Readline * Use the pry-coolline gem, a pure-ruby alternative to Readline bundler: failed to load command: pry (/private/tmp/hoge/vendor/bundle/bin/pry) LoadError: dlopen(/Users/sugamasao/.rbenv/versions/2.3.1/lib/ruby/2.3.0/x86_64-darwin15/readline.bundle, 9): Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib Referenced from: /Users/sugamasao/.rbenv/versions/2.3.1/lib/ruby/2.3.0/x86_64-darwin15/readline.bundle Reason: image not found - /Users/sugamasao/.rbenv/versions/2.3.1/lib/ruby/2.3.0/x86_64-darwin15/readline.bundle /private/tmp/hoge/vendor/bundle/gems/pry-0.10.4/lib/pry/config/default.rb:151:in `require' /private/tmp/hoge/vendor/bundle/gems/pry-0.10.4/lib/pry/config/default.rb:151:in `lazy_readline' /private/tmp/hoge/vendor/bundle/gems/pry-0.10.4/lib/pry/config/default.rb:6:in `block in <class:Default>' /private/tmp/hoge/vendor/bundle/gems/pry-0.10.4/lib/pry/config/default.rb:125:in `instance_eval' /private/tmp/hoge/vendor/bundle/gems/pry-0.10.4/lib/pry/config/default.rb:125:in `block (2 levels) in <class:Default>' /private/tmp/hoge/vendor/bundle/gems/pry-0.10.4/lib/pry/config/behavior.rb:54:in `public_send' /private/tmp/hoge/vendor/bundle/gems/pry-0.10.4/lib/pry/config/behavior.rb:54:in `method_missing' /private/tmp/hoge/vendor/bundle/gems/pry-0.10.4/lib/pry/history.rb:19:in `restore_default_behavior' /private/tmp/hoge/vendor/bundle/gems/pry-0.10.4/lib/pry/history.rb:14:in `initialize' /private/tmp/hoge/vendor/bundle/gems/pry-0.10.4/lib/pry/pry_class.rb:33:in `new' /private/tmp/hoge/vendor/bundle/gems/pry-0.10.4/lib/pry/pry_class.rb:33:in `history' /private/tmp/hoge/vendor/bundle/gems/pry-0.10.4/lib/pry/pry_class.rb:222:in `load_history' /private/tmp/hoge/vendor/bundle/gems/pry-0.10.4/lib/pry/pry_class.rb:129:in `initial_session_setup' /private/tmp/hoge/vendor/bundle/gems/pry-0.10.4/lib/pry/cli.rb:206:in `block in <top (required)>' /private/tmp/hoge/vendor/bundle/gems/pry-0.10.4/lib/pry/cli.rb:83:in `block in parse_options' /private/tmp/hoge/vendor/bundle/gems/pry-0.10.4/lib/pry/cli.rb:83:in `each' /private/tmp/hoge/vendor/bundle/gems/pry-0.10.4/lib/pry/cli.rb:83:in `parse_options' /private/tmp/hoge/vendor/bundle/gems/pry-0.10.4/bin/pry:16:in `<top (required)>' /private/tmp/hoge/vendor/bundle/bin/pry:23:in `load' /private/tmp/hoge/vendor/bundle/bin/pry:23:in `<top (required)>'
調べてみると、どうも readline
がおかしいらしい。
readlineを入れ直す
複数バージョン入っていたので一度全て消してインストール
$ brew uninstall readline Uninstalling /usr/local/Cellar/readline/7.0... (45 files, 2M) readline 6.3.5, 6.3.8 are still installed. Remove all versions with `brew uninstall --force readline`. $ brew uninstall --force readline Uninstalling readline... (92 files, 4M) $ brew install readline ==> Auto-updated Homebrew! Updated 2 taps (homebrew/core, homebrew/science).
Rubyを入れ直す
rbenvなのでrbenvでuninstallしてinstallする
$ rbenv uninstall 2.3.1 rbenv: remove /Users/sugamasao/.rbenv/versions/2.3.1? y $ rbenv install 2.3.1
これでpryを起動したりするとうまく動くようになった。やったー
「あなたのセキュリティ対応間違っています」をもらった && 読んだ
先日発売した「あなたのセキュリティ対応間違っています」を辻伸弘さんから頂きました。 すぐに読んでブログに書こうと思っていたのですが丸々一週間かかってしまって私はチーズ蒸しパンになりたい。
- 作者: 辻伸弘
- 出版社/メーカー: 日経BP社
- 発売日: 2016/10/21
- メディア: 単行本
- この商品を含むブログ (1件) を見る
- 作者: 辻伸弘
- 出版社/メーカー: 日経BP社
- 発売日: 2016/10/25
- メディア: Kindle版
- この商品を含むブログを見る
セキュリティに関しては特に専門家というわけではないので、取っつきにくいのかなぁ、なんて思ったのですが、難解な説明ではなく、それでいてきちんとそれぞれの事象についてわかるような内容でとても良かったです。
世の中でどういうインシデントが発生しているのか
最近はWebでも結構詳しく情報漏洩手順が書かれたりするんですが、「大まかにはわかるけど具体的にはなにが起きたんだぜ?」ということが多かったりしますよね。
例えば、
などは事例としても比較的記憶に新しいところだと思います。
これらの事件に対して、以下のような点で詳しく書かれています。
- どのように感染したのか
- 感染後の情報流出までの流れ
- 異常をどの時点で検知できたのか(被害を抑えることができたか)
そのほかにも、「アノニマス」の活動についてや一時期流行ったvvvウィルス(ランサムウェア)についても丁寧に解説されています。
セキュリティインシデントに対してどう対応するか
怪しいメールがきた時の調べ方や、日頃の対策の仕方なども書いてあって、単なる事例集とも違って嬉しい点でした。 全然知らなかったんですが、お手軽さというとマイクロソフトが出しているEMET(よく利用される攻撃手順が使われると防いでくれる)というツール、Windows使ってるなら導入すると良さそうですね。
Enhanced Mitigation Experience Toolkit - EMET
あと、本の最後で無料Wi-Fiスポットの話が取り上げられていましたが、個人的には無料Wi-Fiスポットが怖くて使えないんですよね。いつか安心に使える日は来るんですかね……。
- 作者: 辻伸弘
- 出版社/メーカー: 日経BP社
- 発売日: 2016/10/21
- メディア: 単行本
- この商品を含むブログ (1件) を見る
- 作者: 辻伸弘
- 出版社/メーカー: 日経BP社
- 発売日: 2016/10/25
- メディア: Kindle版
- この商品を含むブログを見る
個人的に辻さんと知り合いだからかも知れませんが、「おわりに」の文章がすごく良くて、(謝辞も含めて人柄が伝わって良かった)心構え的な意味でも、この本を読んで良かった。
HomeBrewのanalyticsをoffにする
いつの頃からか analytics を送るようになった
思い立った時にアップデートしてるので当時は気にしてなかったのだけど、ふと思い出して現状を確認しました。
経緯や、現在の対応方法も書いてあるのでここを見ればOKなんですけどね rcmdnk.github.io
実際に確認する
念のため現在のバージョンを確認しておく
% brew -v Homebrew 1.0.0 (git revision c3105; last commit 2016-09-22) Homebrew/homebrew-core (git revision 227e; last commit 2016-09-22)
否定できないくらい最新バージョンなのできっと analytics を送ってるのだろう……。サブコマンドが用意されてるらしいので確認してみよう。
$ brew analytics Analytics is enabled. UUID: xxxxxxxxxxxxxxxxxxxxxxxxxxxx
……有効らしい。切り替えるにはさらにon/off
を指定すれば良いそうだ。
% brew analytics off %
何も表示されないが有効になったってことかな?確認してみよう。
% brew analytics Analytics is disabled.
無効になったようだ。
ぶっちゃけ、自分のプライベートなPCならどっちでも良いんだけど、場合によってはoffにしておきたい場合もあると思うのでメモとして残しておく。
Macで任意のファイルサイズのデータを作る時はmkfileが便利
1年に300日くらいは任意のサイズのファイルを作ってみたいという衝動にかられると思うのですが、Macを使っている場合はお手軽に作る方法があります。
詳しくは man mkfile
をどうぞ
具体的な使い方
$ mkfile ファイルサイズ 出力ファイル名
でできる。ファイルサイズはメガバイトの場合はm、ギガバイトの場合はgなどの単位が使える。
➜ test mkfile 1g foo ➜ test ls -lh total 2097152 -rw------- 1 sugamasao wheel 1.0G 4 16 19:57 foo
べんり!Sorarisにも用意されてるコマンドらしいけど、いかんせんSorarisなんて10年近く触ってないので何もかも忘れました。