satoryuの日記

忘れっぽいから覚えてるうちに書いておかないと。

rakuten_web_service v1.10 をリリースしました。

ちまちまと開発を続けているrakuten_web_service v1.10.0 をリリースしました。

今回のリリースで、やっとこさトラベルAPIのうち

を使えるようになりました。

経緯

プルリクエストを振り返ってみると、 このAPIだけがレスポンスの形がマジ糞 設計思想が異なるところから、それをどう取り込んだらいいのか悩んだ挙げ句、途中で挫折してから5年も経ってしまっていました。

github.com

この機能を望んでいる方が現れたので、開発を再開した次第です。

使い方

RakutenWebService::Travel::Hotelsearch メソッドを使い、SimpleHotelSearch APIを利用することができます。

hotels = RWS::Travel::Hotel.search(
  latitude: 128440.51,
  longitude: 503172.21,
  searchRadius: 1
)

また、RakutenWebService::Travel::AreaClass を使うことで、エリアコードを扱うことができます。 AreaClass はLargeClassの唯一のクラス japan を根とした木構造になっています。あるエリアの中の要素は children メソッドで取得することができ、またあるエリアの親エリアの要素はparent で取得することができます。

以下のコードは、東京の子エリアの中から「二子玉川」を含むエリアを取得し、そのエリアに含まれるホテル施設を検索しています。

tokyo = RakutenWebService::Travel::AreaCode::SmallClass['tokyo']
nikotama = tokyo.children.find { |area| area.class_name =~ /二子玉川/ }

nikotama.search.each do |hotel|
  puts "Hotel Name: #{hotel.basic_info['hotelName']}"
end

ご要望、バグ報告があれば、ぜひIssueを!

github.com

突如、"The resource you are looking for has been removed, had its name changed, or is temporarily unavailable." が現れたときの対処

起きたこと

Azure WebApps上で動いているアプリケーションのうち、大きいテキストファイルをアップロードする機能があって、それを使おうとしたら

The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

というメッセージのみが白い画面に出てきた。 もちろん期待してない動作なので、アプリケーションのログなどを漁ってみたが、どうやらアプリケーションのエラーではないことがわかった。

調べたこと

調べてみると、この画面になる原因自体はいくつかあるようで、まずそれが何かを特定するために、WebAppsのDiagnostic Logs(診断ログ)のうちApplication Logを有効にしてみた。するとファイルアップロードをしてみたら、Log Stream上にエラーメッセージが流れてきた。

gistf36249cc3816fff8439ef6b40d7fa210

肝心なところだけ抜いてみると。54行目に

Request filtering is configured on the Web server to deny the request because the content length exceeds the configured value.

と出ている。 どうやら、リクエストが大きすぎるらしい。 このエラーメッセージの後の59行目に対応のヒントも書いてあった。

Verify the configuration/system.webServer/security/requestFiltering/requestLimits@maxAllowedContentLength setting in the applicationhost.config or web.config file.

IISの設定で、許容するContent-Lengthのサイズが指定できるということがわかった。

stackoverflow.com

やったこと

ということで、Application のVirtual Pathのトップに web.config ファイルを置いていたので、そこに以下の設定を追加した。

<requestFiltering>
    <requestLimits maxAllowedContentLength="104857600" /> <!-- up to 100 MB -->
</requestFiltering>

上では100MBまでのContent-Lengthのリクエストを受け入れるように設定している。 100MB なので、

1024 * 1024 * 100 = 104857600

としている。たぶん、おおざっぱに 100000000 としても良かったとは思う。

ということで、これでわりと大きめなリクエストも遅れるようになった。

SmartHRさん主催 公開モブプログラミング会 に行ってきた。

久しぶりに面白いイベントに参加できた。

smarthr.connpass.com

モブプロを始めてから1年半くらい経つけど、他のチームや会社のモブプロを見学する機会が無かったので、ぜひ見てみたいと思って参加してきた。

SmartHRさんの中で今回のイベントを企画したチームでは、定期的にモブプロを実施しているそうだ。詳しくはSmartHRさんのブログに書いてあって、とても良い雰囲気出てて素敵。

tech.smarthr.jp

公開モブプロ

ファーストドリンクからアルコールを提供してくれるとか、ゆるい感じで始まってとても良かった。

始めはSmartHRの方が今回触るコードとサービスについての簡単な説明をしてくれた。 当たり前なのだけど、コード自体の写真は公開できないので写真撮影禁止。 今回触ったサービスの機能は、人事系の事務処理で使う書類のテンプレートをグルーピングして作成・管理するページ。 そこはページングが無いため、他の機能を参考にしつつページングを実装していくというお題だった。 Ruby on RailsとフロントでReactが使われていて、今回はそれらを一通り触るような内容になっていた。

最初のドライバーは、SmartHR社員代表としてkanacanさん。上の写真でピースしている人。 懇親会で聞いたのだけど、彼女自身は別のチームなので今回触るコードは今日初めて見たものだそうだ。 ナビゲーターの方のアドバイスが、単に作業の指示という訳でなく、簡単に動作の仕組みも含めて説明していたので、新人を受け入れる雰囲気を感じた。

次のドライバーを会場から募集したので、他に手を上げそうにないので、せっかくだからやらせてもらった。

2年ぶりくらいのRailsだったり、Reactも数年前にチュートリアルをやったっきりなので、右も左も分からない感じでスタートした。 Rails wayに乗ってるためなのかわからないけど、見ている画面からコードの場所がナビゲーターの指示からわかりやすくて、聞いたことをそのまま打っていくうちにあれよあれよと実装を進めることができた。 もし1人で同じようなことをしようとした場合、対象のコードがどこにあるのかを探すだけでも苦労するし、それが本当に正しいのかも不安を感じながら進めることになっていたと思う。どうせ誰か知ってる人に聞くことになるだろうし、やはり一緒にやることでスムーズに進められると実感した。 1年半前に今のチームでモブプロを始めた時に、PHPほとんど触ったことなかったけど、ナビゲーターのサポートで気持ちよく実装が進んでいく感覚を思い出した。

採用イベントということなんだけど、そうじゃなくて採用プロセスとして候補者をモブプロの一員として入れる、というのは有効だと思った。 候補者にとっても、これから自分が働く開発の現場の雰囲気を感じ取れそうだし、採用する側にとっても同様だろう。 採用にかかる時間は増えてしまうかもしれないけれど、採用できた時のミスマッチのリスクはかなり減らせそうな気もする。

楽しそうにモブをしているチームの中に混ざれたのはとても楽しかった。 良い経験させていただきました。SmartHRさん、ありがとうございました!

INSIDE TOYOTA #1 を観た。

www.youtube.com

たまたまツイッターで見かけて、観てみたのだけど、食い入るように観てしまった。 内容もとてもわかり易くて良い話なのだけど、さすがトヨタのトップというか、プレゼンテーションとしてもすごいと感じた。 わかりやすい言葉選びや会場全体に向けて話す姿勢、悲しい現状を伝えるときの声のトーンの落とし方が訴えかけるようで引き込まれた。 先月、スクラムフェス大阪での発表練習とかひとり黙々とやっていたけど、結局本番ではほとんど吹っ飛んじゃったり、もうちょっと良い言葉を選べたらよかったなぁ、とか反省してたところなので、何度も観てしまった。

内容についても、最後のこのメッセージはとても素晴らしいと思う。

皆さんは、自分のために自分を磨き続けていってください。 トヨタの看板が無くても、外で勝負できるプロを目指してください。 私達マネージメントは、プロになり、どこでも闘える実力をつけたみなさんが、 それでもトヨタで働き続けたいと思ってもらえる環境を作り上げていくために努力していきます。

単なるパフォーマンスとして聞こえの良い言葉を言っているだけと思うかも知れない。 仮にそうだとしても、会社のトップがこれを明言していることは、各マネージメントのミッションを与えたわけだし、豊田社長本人含めマネージメントの責任を感じる。

おまけ

これを書きながらYoutubeをランダム再生してたら、No Rain, No Rainbowが流れてきた。

www.youtube.com

これまたSU-METALの表情とか眼力がすごい。

「モブプログラミング・ベストプラクティス」を読んだ。

モブプログラミング・ベストプラクティス ソフトウェアの品質と生産性をチームで高める

モブプログラミング・ベストプラクティス ソフトウェアの品質と生産性をチームで高める

モブプログラミングについて言葉だけ知ってたり関心がある人はもちろん、 すでにやっている人も、やり始めてから慣れてきた人たちも、うまくいかずに離れてしまった人たちにもぜひ読んでほしいと思った。

というのは、この本はモブプログラミングを知らない人向けではなく、上にあげた人たちに向けて書かれている。 単に、著者が経験したことを書き連ねているのではなく、それぞれの状況を裏付けが書かれている。 特に自分が興味深く思ったのは、3章「モビングと人」ではモビングを構成する人について書かれており、その中で性格特徴のビッグファイブモデルについて書いている。 モビングをうまくいくようにするには、単に心理的安全性という言葉で片付けるのではなく、それをどのようにして作っていくのかといったことが大切だ。 この章では、そういうモビングを形成するための根幹が「人」であるとして、人の性格が持つ5つの特徴について、それをどのようにモブの活動に活かしていくのか紹介している。

単にモビングをどう始め、継続するかだけでなく、導入するにあたりチーム内外に対してどのように説得していくのかが色々書いてあって、 「モブプロ、やりたい!」と思った情熱をどのように注いでいったらいいのかがわかって、開発コーチとかその辺りの人達にも役立ちそうな気がした。

自分にとってモブプログラミングは、楽しく開発するための方法の1つで、今の所はベストだと思っている。 なので、楽しく開発したいという人は一度読んで、読んだだけじゃなくて 実践 してみてほしいな。

Macbook Pro 2017 で音声が再生されない時はcoreaudiodを殺す

昨年末あたりからたまに起こる現象で、急に音声がイヤホンや内蔵スピーカーから再生できなくなることがあった。

調べてみると、Macbookの型番は違うが同じような現象が報告されていた。しかし、解決方法については書かれていない。

discussions.apple.com

別で音声関連の問題を調べてみたら、 coreaudiod というプロセスがおかしな挙動をする問題があるようだ。

www.google.com

coreaudiod は音声再生のためのデーモンらしい。

www.howtogeek.com

試しに以下のようにプロセスを殺してみたところ、自動でプロセスが再起動し、音声が再生されるようになった。

ps aux | grep coreaudiod
_coreaudiod      56073   0.0  0.0  4333268   7684   ??  Ss   11:40PM   0:00.05 /System/Library/Frameworks/CoreAudio.framework/Versions/A/XPCServices/com.apple.audio.DriverHelper.xpc/Contents/MacOS/com.apple.audio.DriverHelper
_coreaudiod      56071   0.0  0.1  4297560   8600   ??  Ss   11:40PM   0:00.02 /System/Library/Frameworks/AudioToolbox.framework/XPCServices/com.apple.audio.SandboxHelper.xpc/Contents/MacOS/com.apple.audio.SandboxHelper
_coreaudiod      56070   0.0  0.1  4320200  15264   ??  Ss   11:40PM   0:00.28 /usr/sbin/coreaudiod

sudo kill -9 56070

根本解決ではないけど、これまで再起動で復旧していたのに比べて簡単。

スクラムフェス大阪2019で喋りきれなかったこと #scrumosaka

satoryu.hatenablog.com

先日、スクラムフェス大阪2019にて発表してきたのですが、時間オーバーしてしまい、最後は巻きで流してしまいました。 ということで、当日お話できなかった

  1. 推しパターンの「傾聴」
  2. コミュ障になぜこの2パターンが推しなのか
  3. おまけ

について書きます。

続きを読む