These releases contain two extremely critical security fixes so please update IMMEDIATELY.ってあるので怖話のrailsを3.2.8から3.2.11にupdateしました。

# apt-get install sudo
# adduser username sudo

wheel的なsudo groupが最初からあるのでそれにsudoしたいユーザーを追加しとけばいい。

sudo時のPATHの設定

# visudo

Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

セキュリティ上、sudo時専用のPATHを設定するようになってるので上記を追加。/etc/sudoers.d/以下にファイルで追加するのがホントなのかもしれないがわからない。

GALAXY NEXUSからGALAXY S Ⅲ α(SC-03E)に機種変しました。

期末なので経費を使うためにとりあえず俺はAndroid、@machidaさんはiPhone5に。俺もiPhone5に機種変したいとこだけどそうするとホントに誰もAndroid持ってる奴がいなくなって怖話開発に支障が出るのでキープ。

バッテリーが1日持たなくなってたのが辛かったんですがそれが無くなって嬉しい・・・ぐらい?

パズドラを移行する

ちょっと心配でしたがadbで簡単に移行できました。

GALAXY NEXUSをつないで、

% adb backup -f puzzle-and-dragons.ab -apk jp.gungho.pad

GALAXY S Ⅲ αをつないで、

% adb restore puzzle-and-dragons.ab

普通のユーザーにはちょっと敷居高いかもしれないけど開発者にとってはこれほど分かり易いことはない。喜び勇んで早速レアガチャ引いてみたら、

くそがぁああああああ

確かsignal vs noiseで見て最近ちょっと好きな書き方。

Foo.this_is_the_long_method \
  awesome_long_argument_name,
  fuckin_annoying_long_argument

キモいって人も多いかも。絶対80文字以内じゃなきゃ嫌だってわけじゃないけど、ブログに書く時やスマホで見易いので好き。

API側も自分で作ってる時など、webmockをrequireしてるのに「本当に大丈夫かな?」と実リクエストを飛ばしたい時があるので下記。

WebMock.allow_net_connect!

残したままpushすると大惨事になるので注意が要る。

webmockがmockしてくれない

「webmock使ってるのにresponse bodyが空で帰ってくる」

webmockを勝手にhttp proxy的に捉えてて「おかしいなあ」なんてハマってたんですがwebmockはhttpをmockしてるわけじゃなくて特定のclassをmockしてるだけなんですよね。考えてみれば当たり前なんですがREADMEにちゃんと対応してるライブラリが書いてある。

Supported HTTP libraries

  • Net::HTTP and libraries based on Net::HTTP (i.e RightHttpConnection, REST Client, HTTParty)
  • HTTPClient
  • Patron
  • EM-HTTP-Request
  • Curb (currently only Curb::Easy)
  • Typhoeus (currently only Typhoeus::Hydra)
  • Excon

parallel requestが簡単にできるtyphoeusのメソッドの中で、single requestをするpostメソッドとかを使ってたら常にresponse bodyが空。(何故parallel requestのためのライブラリでsingle requestを使ったのか小一時間問い詰めたい > 俺)

ちゃんとTyphoeus::Hydraしか対応してないって書いてありますね。RestClient.postにしたらあっさり動きました。

しかし、コジャレたライブラリにチャレンジしていく姿勢は失わず行きたい!

seleniumはguard時とかにウィンドウ出てきてウザい。capybara-webkitはcapybara2系に対応してない。(reposのheadでは対応してるので次bump upされたら対応されるっぽい)

現時点ではpoltergeist一択っぽい。

ただ、Macでwebfontを読むとphantomjsがcrushするのでpatch当てる。

$ brew install phantomjs
# Gemfile:
group :test do
  gem 'poltergeist'
  gem 'rack-contrib'
end
# spec/spec_helper.rb:
require 'capybara/poltergeist'

RSpec.configure do |config|
  Capybara.javascript_driver = :poltergeist
end
# config/initializers/poltergeist.rb:
if Rails.env.test?
  require 'rack/contrib/simple_endpoint'
  Rails.application.config.middleware.insert_after Rack::Runtime, Rack::SimpleEndpoint, /\.ttf$/ do |req, res|
    ua = req.env['HTTP_USER_AGENT']                                            
    if ua =~ /Intel Mac OS X.*PhantomJS/                                       
      res.status = 403
      "Denying #{req.fullpath} to #{ua}"                                       
    else
      :pass
    end
  end
end

これは酷い。

この作業、@mreinschとペアプロでやってたんですがpoltergeistってドイツ語だそうです。ちなみに@hrysdがhidden fieldを「ハイデンフィールド」とドイツ語っぽく呼んでたのでドイツ語で何て言うのか聞いたら、「verstecktes felder」だそうです。全く違いました。どんな言語でも「ハイデンフィールド」は間違いだそうです。

もう定年してますが、郵便局の管理職歴うん十年の父親に社会人の大後輩として、

「管理職としてダメなチームをデキるチームにする必勝パターンみたいなのってあるの?」

と聞いたら

「あるよ」

とあっさり。その話が面白かったので紹介します。

背景

  • 父親は郵便局員で公務員だった。
  • 郵政民営化する前の話。
  • 公務員は一般企業と違い犯罪でも犯さない限り首にならない。(管理の難易度が高い)
  • 郵便局の仕事は大きく「郵便」「貯金」「保険」の3つに分かれている。
  • 父親は「保険」のセールスマンの管理職を長年やっていた。
  • 郵便局の管理職は3年(?)毎に別の局(調布市郵便局とか)に移動する。

必勝パターン

1. 新しい職場(チーム)に赴任したらそこの中心人物の協力を取り付ける

中心人物:顔役的な人で大抵が年長者やリーダー気質の人。どこの組織にも必ずいて、誰にでもすぐに分かるそうです。(役職的には自分より下の人です。)

父「誰に聞いても山田(仮)さんがこの局のことに一番詳しいと言っていました。私は赴任したばかりでこの局や地域についてわからないことだらけです。色々と助けていただけるとありがたい。」

そうすると、リーダー気質の人で頼られて嫌な顔をする人は少ないので、

山田「局長の頼みとあっては仕方無い。いっちょ引き受けましょう。」

という感じになるらしい。

2. 中心人物を司会として成績の改善施策案を出す会議を開催してもらう

父「この局が山梨県で最下位の成績なのを何とかしなければいけないんですが、私は貯金から来たので保険に詳しくなくて困っています。職場で改善すべきところは何かあるでしょうか?」

山田「AAAは絶対辞めた方が良い。BBBも無駄だからCCCにしたほうが良いと常々思っています。それと・・・」

父「なるほど、山田さんを中心としてみんなで今後の改善施策案を話し合ってみてもらえないでしょうか。」

現場で直接業務にあたっている人が一番改善すべき点をわかっていて、なおかつそれを言いたがっている。言える場を用意すれば必ず改善施策案ができてくるらしい。

父「なるほど、なるほど。それは私もとてもいい案だと思います。是非お願いします。承認します。」

3. 職場(チーム)で一番デキナイとされている人を全力でフォローする

父「毎日の日報に今日どこのお宅へ訪問したとか、どういう提案の仕方をしたらお客様がどういう反応をしたとか、細かいことも書いてくれないだろうか?」

高橋(仮)「わかりました。」

これは単なる業務命令。

父「そのお客様は好感触ということかもしれないね。もう一つの提案はもっと別のこういった言い方をしたらどうだろうか?私も気になるからもしやってみたら結果を教えて欲しい」

などといった感じで相手の日報の内容以上の文章量で全力で成績が上がるようにフォローするらしい。

あとは保険セールスの小技としては前回訪問した2週間後の日ちょうどに再訪問すると契約が取れる確率が高いらしい。1週間後ではウザがられ、1ヶ月後では忘れられているので2週間後がちょうどいいらしい。日報から高橋の訪問日をメモしておいて、2週間後に「そろそろあのお宅に訪問してみたらどうかな」などと日報で書くと「局長の言った通りに行ったら本当に契約が取れました!」ってなることが多いらしい。

高橋は流石にマンツーマン状態だとサボれないし、普通は怒られてばかりのところを役職的には遥か上の上司にわざわざ細かくフォローされると、がんばろうという気になるものなのだそうです。また、元々最低の成績なので改善させるのは簡単なのだそうだ。

そもそも、いくらお金のためだけに働いてるとしても、本当は仕事が嫌いで人生のプライオリティを趣味に置いている人間でも、長時間接している課題が上手くいかないよりは上手くいったほうが良いと誰もが思っているらしい。上手くいってくると面白くなり、評価されれば誰でも嬉しいので必ず上がってくるらしい。

(しかし元から機転が利いたり、男前だったりする人の保険の成績は高く、ダメだった人が必ずそういう人に勝てるとは言えない。でも確実に平均点ぐらいまでは持っていけるらしい。)

父「ここにいるということは必ず公務員試験に合格しているということだ。一定水準以上の能力があるということだ。その君がこの成績というのはおかしい。少なくとも平均ぐらいの成績を上げるのは難しくないはずだ。一緒に頑張ってみよう。」

そうやって最悪の成績の高橋のフォローを続けていると成績がちょっとづつ上がってくる。

職場のみんなは、

「俺もイマイチな成績だけど高橋がいる。あいつよりはマシだから安心だ。」

という感じで全員成績が悪くて局全体の成績が悪かったのだが、高橋の成績があがってくると、

(あれ?あのヘボ高橋の分際で最近ちょっと成績が上がってきてないか?今月、下手すると高橋と接戦になる可能性も?いやいやそれはヤバいって・・・)

という感じになって何故か全員の成績があがるらしい。

4. 全体の成績がちょっと上がったらべた褒めする

父「今月の成績ですが、なんと!3ヶ月連続山梨県最下位だったのが今月はAAA郵便局に勝ちました!皆さんが考えた改善施策案がたった一ヶ月で早くも効果を表しているようです。やはりこの局の潜在能力はすごい!」

って感じでやっていけばあとはどんどん上がっていくそうです。

その後

そういった感じで管理者次第でチーム全体が劇的に改善することは珍しくないそうです。管理者は3年で別の局に移るのでせっかく良い感じになったチームともお別れですが、新しいところにいったら同じ事をやればいいらしいです。

そこでちょっと気になって聞いてみた。

俺「じゃあさ、そんなに劇的に良くなったチームはその管理者がいなくなったあとはどうなるの?良い成績を上げ続けるわけ?」

父「次に赴任した管理者がダメだとすぐ元の成績に戻るよ。」

俺「ええ〜 ダメじゃんwww 何か対策は無いの?」

父「基本的に引力を持った管理者が上に引っ張りあげてるようなものだからそれが無くなると本来の状態に戻っていくんだよ。それでもなるべく戻るのを遅くするとしたら、文章や写真、ビデオといった自分たちの成功体験が形として残るものを成功している時に残しておくと良い。それを見て自分たちが頑張ればできるんだということを思い出すから。」

俺「身も蓋もないなー。でもなるほどねー」

ボス「ヘイ、ボブ。このあいだやったコメント投稿のログイン必須化の影響がどのぐらいあるかわかるかい?いや、手間がかかるならいいんだが。」

ボブ「お安いご用さ。ワンミニッツ待ってくれ。」

ボブ「上が日別の投稿数で下がコメント数のグラフさ。どうやらコメントにログインを必須にしたことでコメントは減っているけど話の投稿自体は増えているようだね。」

ボス「オー、ボブ、仕事が速いな!次のボーナスは期待してくれよ?」

ボス&ボブ「HAHAHAHAHA!」

$ defaults write com.apple.screencapture location ~/Dropbox/Public
$ killall SystemUIServer

ActiveRecordでserializeを使った場合、デフォルトではyamlでserializeされる。独自のserializerを実装すればそれを渡せる。

Post < ActiveRecord::Base
  serialize :meta, Foo.new
end

しかしデフォルトではjson用のserializerが無いのでserializer-railsを使うと便利。

Post < ActiveRecord::Base
  serialize :meta, format: :json
end

xmlも使えたり、gzip圧縮できたりもする。

mrbrdo/serialize-rails · GitHub