読者です 読者をやめる 読者になる 読者になる

"Team Geek"を読んだ感想

Team Geek ―Googleのギークたちはいかにしてチームを作るのか

Team Geek ―Googleのギークたちはいかにしてチームを作るのか

HRTについて

一貫して「HRT」が引き合いに出され、それを土台にしたチーム作り/うまくやる技法について書かれている。

内容とは関係のないことだが、最初に鍵となる概念を提示してそれを基本と一貫して話を続けるのは、わかりやすさという点でも、興味を引くという点でもかなり効果的な技法であると思うが、難しいことだと思う。それにそぐわないことの多くは排除しなければならないから。

最初の「実践HRT」でHRTの基本を学んだときは、HRT的なコミュニケーション方法には懐疑的だった。だって「この部分はxyzzyコードパターンを使ったほうがわかりやすい」と言えば良いものを、「この部分の制御フローがよくわからないのですが、xyzzyコードパターンを使えば読みやすくなるでしょうか?」と伝えるなんて、回りくどすぎる! 自分がそういうのが嫌というよりは、そんな伝え方をされた時にイライラしそうな感じがした。

そんな自分の疑問には答えることなく話はどんどん進むのだが、読んでいるうちにだんだんとHRTに洗脳されていく。

もう少し具体的に言えば、「HRTはコードレビューのときのみ効果を発揮するものではない。全ての人間関係に適応されうるものだ」ということが感覚で理解できるようになってくる。

いや、それは明確に最初の方にも最後の方にも書いてあるのだけれど、いくつもの例を考えていくうちに「HRTを使うべきだ」というのが刷り込まれていく、感覚。

すごく情緒的に書いてしまっているんだけれども、本当にそういう感覚が身についていく実感が読んでいる途中にある。

けものフレンズと同じで、人を優しくする本だと思う。

チームリーディングについて

この本は全体的に、基本は「HRTをどう適用するのがいいのか」というのがいろいろな視点から描かれているものなんだけれども、チームリーディングのところで印象に残ったことを適当に書く。

このパートで重要なことは「エンジニアを大人として扱うこと」。

伝統的なマネージャーはどうやって仕事を完了させるか考える。リーダーは何ができるかを考える…(どうやって仕事を完了させるかはチームに考えてもらう)

また、良いチームのために最重要な「文化」も、チームリーダーが作るのではなく、メンバーが作るものだ。

リーダーは一人のメンバーに文化が支配されないように気をつけながら、チームを陰ながら導いていく。

気になったこと

  • 「みんなの友達になる」や「自信をなくす」ことと、HRTは非常に取り違えやすいと思った。確かに「尊重する」という意味では友達になることに近いかもしれないが、もっと重要なことだけ切り出している。友達は失っても、尊重は失ってはならない。
  • 「明確な意思決定をせずに成り行きに任せるチーム」と「合意ベースのチーム」も非常に取り違えやすい、というか見間違えやすいと感じた。とくに「日本的」な文化が見える会議等では、それが本当に全員の合意なのか、成り行きで出た結論なのかわからないということがある。そうでなくとも、全ての決定について独断がないかと考えるとそこは本当に難しいことだと気づく。
  • 設計書は退屈なイメージがある。設計書通りに書くコードも退屈なイメージがある。でも設計せずに書き始めると、何度もスクラッチから書き直すということは起きる。設計書で解決するかはわからないけど。

その他印象的だった文章

  • 自分の意見を主張するときは、その前に相手の話を聞くようにしよう。ころころ意見を変えると、優柔不断なヤツだとおもわれてしまう

  • エンジニアが相談を持ちかけるのは、君に問題解決をしてほしいからではない。彼が問題解決するのを手伝ってほしいからだ。

  • 簡単にできそうなことをするよりも、できそうもないことに挑戦して失敗するほうが道は開けるはずだ

総括

なんかとんでもなく適当に書いたようなレビュー記事になってしまった。全体的に「方法論」としてかいてあり、部分部分ではいろいろと思うことがあるのだが、全体としてまとめようとするとうまく行かなかった。

結構納得しながらすらすら読むことができる本なのだが、恐らく全部完璧にできている人はいないだろう。なので定期的に読み返し自分の行動を反省していきたいな、と思った本だった。

Go言語でGoogle Cloud SDKを使うときApplication Default CredentialsのJSONファイルをパスではなく文字列で渡す方法

状況

Google Cloud Vision APIをGo言語で使うとき、公式のライブラリがあったのでそれを使っていたら、どんなAPIを叩くにもApplication Default Credentialsが必要だという。Vision APIREST APIから直接叩くにはAPI Keyだけで良いというのに、ライブラリを使うならService Accountが必要。わけわからん(実はライブラリ/依存ライブラリのソースの至るところに"This API is Beta"と書いてあるので今後変更される可能性がある)。

プルリク送ろうとも思ったが、膨大すぎて読みきれなかった/設計の意図を汲み取りきれなかったために断念。おとなしくService Accountを使うことにしたが、Herokuで運用する予定のためJSONファイルをリポジトリ内に置くのはNG。実は先のURLに書いてあるとおり、Application Default CredentialsはキーのJSONファイルのパスを環境変数として指定する方法しかサポートしていない。これは困った。さすがに環境変数で文字列を受け取りそれをファイルに書き込んでからパスで指定するとかしたくない。と思い4時間ソース読んだり試行錯誤したりした先で、やっとこのStack Over Flowを見つけた。

Load GOOGLE_APPLICATION_CREDENTIALS json content via an environment variable instead of a file · Issue #185 · google/google-api-go-client

このページに(ほぼ)内部APIを使ってJSONを変数から読み込みパースし、TokenSource(内部で使われる認証情報を含む構造体)を作るコードが載ってる。

これを参考に(ほぼそのまんまだけど)以下のような感じでいけた。

json := os.Getenv("GOOGLE_APPLICATION_CREDENTIALS_JSON")
ctx := context.Background()
jwtConfig, err := google.JWTConfigFromJSON([]byte(json), vision.Scope)
if err != nil {
    fmt.Println(err)
}
ts := jwtConfig.TokenSource(ctx)
visionClient, err := vision.NewClient(ctx, option.WithTokenSource(ts))

彼はこの世界にいる人間じゃない。

神様は僕達に奇妙な色仕掛けを残していった。…残していったのは、友達だけど。

そんな詩的なのかそうじゃないのかもよくわからない文章をブログの一行目に書きなぐってしまうくらい、今日は複雑な気分でいる。

明るい話題「それは本当に嬉しいことだね」と先輩は言った。嬉しい。

嬉しいけど、正直嬉しくはない。

僕は彼を敵とは思っていない。彼は本当に心から僕といっしょに活動をしてくれているみたいだし、そんなこと思えない。

ただ、でも、明確に諦めている部分もあった。彼はいなくなる運命なのだから、彼に頼んではいけないことと、頼んで良いことをしっかり線引きしてから付き合っていた。

もうひとつある。彼はそのプレゼントを、職人の本性、つまり、ある意味本能的な部分を根源として、原動力として手作りしてくれたということだ。

共感できる。共感できた。

でも共感するとき、不安にならないだろうか? そこに優しさや怒りは本当になかったのか? 誰かのあたたかみがそれに挟まってはいないか? 本当に、本当にそれだけなのか???

本来それは信じられないことなのだ。本来それは物語の中でしか享受できない、僕の人生経験が無いだけと笑われるかもしれないが、そんなことがあって良いのだろうか。というか、あるのか?

信じられるか? 神様を信仰するとき、そこに見返りは無いとしても最後まであなたは手を何の疑問も抱かず手を合わせ続けられるだろうか。ありえない。誰かのメリットや自分の受ける利害を思い描いてこそ、手を合わせ続けられる。

それなしにできた結晶が、そんなに透明なものがこの現実の世界にあると思ってしまって良いのだろうか。

僕は信じられない。嬉しくない。悲しくは…ある。寂しくもある。やるせない。取り返しがつかない。

僕はきっと、その結晶に触れられない。

野獣のように叫びながら、そこに手を伸ばすことさえできずただ涙を流すしか無い。そして

ありがとう。

そう言うんだ。それしか、この涙を形容する方法がないから。

彼は消えたんだ。

コメントを英語で書くときに注意するべきこと

API ドキュメント作成ガイドライン | Rails ガイド」がすごくいい

API ドキュメント作成ガイドライン | Rails ガイド

Rails/Ruby以外にも通用すると思う。

すごく参考になった。

今年について。

はじめに

このエントリは自分の為に書いたものだ。読む人すべてに僕の恥を晒すだろうし、他の人からすれば小さい問題だろうし最後まで読んでも「甘えだろw」としか思わないかもしれないけれど、まあそれでもいい。

まず、これを書く理由としては、

  • 今思っていること、問題点、それに対して行ってきたこと等を一度まとめて言語化することで、頭を整理し、次の解決策につなげる

ということ。次に、これを公開する理由としては、

  • 同じような状況に陥ったことがある人等からの助言を期待すること
  • 心配してくれている両親や友人に自分の状況を正確に伝えること(しゃべるのは苦手なので)

ということである。

これまで/現状について

正直、混乱している。

今年度最も大切だと思っていたことは、大学の単位の取得だった。しかし今年最も結果が出なかったのがそれだ。今年とった単位数は0。もしかしたら今年度中でも0かもしれない。

「まあいいや」とか思って授業に行かなかったことは殆ど無い。比較的単位を取れていた去年と同じような心持ちでいたつもりだ。

しかし、気づけば5回欠席していた。

いつ休んだのか本当に思い出せないが、行った記憶もない。

これを読んでいる人はバカだと思うだろう。こんな言い訳を書いても事実は変わらないと。僕にもただの言い訳に見える。でもマジでなんでこんなことになっているのか理解に苦しんでいる。

ただ、理解に苦しんだまま来年を迎えるわけにも行かないので、今年4期を経る中で徐々にわかってきた、原因となっていることやプロセスを書き連ねてみようと思う。

授業以外の活動の締め切りで授業を忘れる

自分の特性として、ひとつのことに熱中するとそれ以外考えなくなるというのは前々からわかっていたことだが、大体全学期において、授業以外の活動において何かしらの締め切りが入り、それに熱中している間に日々が過ぎてしまう、ということがあった。

だいたいそういう時は、後から思い出そうとしても「この期間何してたっけ...」となる。

「締め切りイベント」の例を挙げると、

  • 課外プロジェクトのプレゼン
  • バイト先(ベンチャー企業)のプロジェクト
  • Start Me Awards(起業家育成プロジェクト)の前座の準備(公式に出場したわけではない...)
  • 留学の申し込み書作成
  • Mashup Awards Second Stage(ハッカソン)のプロダクト作成
  • バイト先でのプレゼン

また、授業の時間に気づかないほど熱中したこととしては、(こちらの割合はかなり少ない&おそらく今年はない)

  • 読書
  • ノベルゲー

もう正直思い出したくないことも多いのと、あと純粋にこういう時のことはほとんど覚えていないので、漏れがあるかもしれない。また、これらのうちどれがクリティカルな原因になったか、とかもわからない。

ただ、気づいたら学校に行かないまま今週が終わっていた、ということの大きな原因の一つであることは間違いない。

出なくても良い授業に出ないでいたらその存在を忘れる

出席が取られない授業で、でなくていいやーとやっていると気づいたらテストまで終わっている、ということがある。

これは今期もひとつあった。

一つ前の原因と重なると更に出なくなるのでやばい。

気分的にひどく落ち込みしばらく学校に行かなくなる。

この状態は最近は比較的頻度が低く、思い出せるだけで今年は2度くらいしかなかったように思う。

ただ一度起こるとその学期全ての単位が落ちるので、かなり厳しい。

落ち込むのには理由があるときとないときがある。ただ、あったとしても今はもう思い出せない。

純粋に授業を忘れる

「今日1限ないと思ってた」というときにあったりする。結構多い気もする。


こうやって書き連ねてみると、基本的に気持ちが授業に向いてないんだなーということがわかる。

「危機感が足りない」とか言われそうだけど、危機感が足りない、という言葉はしっくりこない。(もともと自分は危機感で動くタイプではない... 普通の人たちと同じ行動原理で自己管理しようとしてもうまく行かないことは経験上わかりきっているので、もっと別の言葉/方法で自分をうまくコントロールする必要がある、と言ったほうが正確かもしれない)

自分の関心を授業に向けるためには、授業が嫌、という感情を払拭しなければならない。

なぜ授業が嫌なのか、今度はそれを考えてみたいと思う。

人の話をじっと聞けない

その人自身に興味があるか、かなり面白い話じゃないとこういうことはできない。こういう傾向は自分には当てはまらないと以前から思ってきたが、今年になって「あ、自分もそうなんだ」とわかった。

例えば、言葉と言葉の間に時間が開く。板書の時間がある。プレゼンを切り替える一瞬がある。

そういうとき、待っていられなくなる。更に話の内容が既知のものだと最悪。聞き流さないと、かなりイライラしてくる。

なので、他のことをしながら授業は聞き流す程度に抑えておくとある程度バランスを取れるのだが、教授の目が厳しく内職等できないとその場にいることがかなり苦痛になる。

自分で読み飛ばしたりでき、どこでも読める本のほうが良い。

(プログラミングの授業に関して)低レベルである

内容が低レベルなのではない。正直去年授業から学んだことはたくさんあったし、今年の内容もサラッと聞く分にはかなり面白そうだと思う。

自分にとって問題なのは、「方法が低レベル」なことだ。

説明が回りくどい。課題が考えなくてもできるようなレベル(の問題が延々と続く)。資料がわかりにくい。英語の資料に日本語の説明(どっちかに統一しないと混乱するよね?)課題が意味不明(そのクラスを継承で実装する理由は?)

一度非効率だと感じると本当にやる気をなくす。

課題が嫌い

昔から時間管理が苦手なので、課題ができない。授業中にやるにしても、それを許さない教授もいるし、また耳から話し声が入ってくるとかなり混乱するタイプなので、効率が悪い。課題ができないとモチベーションが下がる。

時間が固定である

一日のうちでどうしても体調が悪い時間帯がある。これは高校時代から戦ってきた事実だが、主に低血糖症によるものだと思っている。

最近はやっとこさ管理方法がわかってきて改善してきたが、それでも2日のうち3時間位の割合でかなり厳しい時間帯がある。

そういうときに授業が重なると一刻も早く教室を出たくなる。時間移動したい。


一部授業方法を否定するような内容になってしまったが、そうではない。この学校を選んだのは自分だし、そもそも上記はどこにいてもぶつかる問題だと思う。

ただ、僕はこれから上記の問題をひとつひとつ解決していかなければならないというだけだ。

これらの問題が段々と言語化されて来る中で、僕も自分に抗わなかったわけではない。あまり意味はないかもしれないが、反省も込めてこれらの問題に立ち向かうために今年行ってみた行動の改善を書き出してみたいと思う。

ランニング・瞑想

某xevra氏の言葉はまあ真実なのは間違いないと思っていて、朝に行うと決めたことがある。ただ続いていない。続けるために更に新たな工夫が必要だと思う。

朝に飲食のアルバイトを入れる

飲食のアルバイトを始めたのは、カフェで働きたいとずっと思っていたのもあるけど、朝起きる習慣を付けたいというのもあった。

はじめは遅刻が多く呆れられたが、最近は安定して出勤している。

いままで何もしてこなかった土日の午前中を有効活用できている・朝起きる習慣がつく・朝食を食べる習慣がつくということで、これは自分にかなり良い影響を与えている。比較的体を動かすのも飲食のいいところだと思う。

糖質制限をする

一時期「低血糖症には糖質制限」という説がインターネット上で流行ったことがあった。去年までの僕はかなり低血糖症に困り果てていたので、大学に入ってすぐ一日一食の糖質制限を始めた(高校時代から決めていた)。

約半年くらい続けたが、急激な体重の増減と突発的な低血糖状態の発生を招いただけだった。

一日5食

いまでもたまにやるが、糖質制限はダメということでできるだけ食事と食事の間を空けない、という意味で一日5食をやっていた時もあった。いまのところ3食食べるのとあまり変わらないので、そのうち3食に戻った。

教科ごとに課題をやる時間を決める

教科ごとに、その教科に集中する時間を決め、カレンダーに入れてそのとおりに動く、というのをやっていた。はじめはうまく行っていたのだが、予定通りに動く、というのはやはり僕にはうまく行かないようで、早々に崩壊した。それよりもやっぱり調子の良い時間帯にちゃんとやるべきことをやるほうがうまく行く気がしている。

朝食券を買う

まあ朝食が安くなってよかったかな、くらいだった。朝のバイトもあるので1000円セール以外はちょっとためらう。

活動を減らす

今年の夏の終わりくらいに、忙しすぎて授業に出れなくなった状況を反省し、大幅に自分の活動を制限した。それ以来新しいハッカソンにはひとつも出ていないし、バイトの時間も減らし、とにかくイベントは本当に行きたいものだけを厳選して出ることにした。

ただ、どうやっても無茶苦茶に忙しい時間というのは来るようで、これは自分の時間管理のできなさに原因があるのだな...と改めて実感した。

取る授業を減らす

3期までは「単位が足りない!」ということで制限一杯いっぱいに授業を入れていたのだが、たくさんいれると混乱するので、はじめから確実に取れるものに絞ろう...ということになった。ただ4期の入力は2期終了時点なので、これはまだやっていないとも言える。自分の中で取っている授業を制限したら、ちょっと頭の整理はしやすくなった感じはある。

スキップテストを設けてもらう*1

普通に授業に出席するのでは落胆すると判断し、個人的に教授にお願いしてテストを受けさせてもらい、結果によって授業に出なくても単位取得を認めてもらう、ということを試みたこともある。具体的に言うとC++の授業だったのだが、肝心のテストで全滅した(自分を過信しすぎた)。その後も何かと教授が気にかけてくれ色々あったのだが、ちょっと色々ありすぎてかなり精神的な負担となったことを覚えている。(思い出したくない) 自分から人を巻き込んで行動を起こすにはある程度責任が伴うことを思い知った。 思いつきで行動するのをやめよう、と思ったのは何度もあるが、これは強烈だった。


こんな感じだろうか。

これからについて

正直、いい方法が思い浮かばない。

このまま来年に突入するとやばい気はする。ただ、絶望するとモチベがあがらないので、少しでも改善しているの信じて自分を鼓舞していき、その上で徐々に改善策を実施しつつ取れる単位を増やしていくしか無い。

毎日のルーティンが違う、というのも結構自分にとっては難しくて、正直毎日同じ時間に始まって同じ時間に終わってもらうと習慣化しやすいなとは思うので、毎日同じ時間に学校に行ってみようかな、とかは思う。(ただ目的が「授業に出ることを忘れないようにするため」だと絶対に続かないので、何か別の目的をつけて(進捗会とか)友人と一緒にやるのが良いかなー。ただ付き合わされる方は迷惑だろうけど...)

あとカレンダーの表示を徹底するのが必要。アラームを自動化したりとか、そういう小さな積み重ねが自分の場合習慣を作っていくので、頑張っていこうと思う...

自分は大学の授業という制度に向いていない

超絶向いていない。ただそれも理解した上で、最低限の授業は取るしか無いと思っている。

大学に来てよかったと思っている。たくさんの仲間に出会えたし、こんなに技術を語れて技術に没頭できる時間、場所、仲間は今までの人生になかった。

「こんな授業に意味はあるのか?」という問いは僕みたいな人間でなくても大抵の人は持つようで、それに対して明確な答えは持っていないのだけれど、明確な答えを持っていない以上、単位を取らないという選択肢はありえない。

就職もしようと思えばいつでもできるだろうが、逃げたみたいで嫌だというのが本音だ...

まとめ

正直、悔しい。

出席が足りていたことも何度かある。ただ、課題だったり、テストだったりで取れなかった。どの授業もはじめは出ていた。課題もやった。でもいつの間にか自分のせいで単位は消え、誰に説明できる結果も出ない。

「この期に及んで悔しいとかwww」みたいな声が聞こえてきそうだが、だって単位を取るつもりだった。

この経験が、これから長い間自分を社会の中で活かすための良い勉強になればいいなと思う。。。

問題点を言語化できたのは良かった。ずっとなんとなく感じているだけだったので。誰かに助けを求めることも重要だとは思う。難しいけどやってみようと思う。

*1:2016/12/28追記。思い出したのと、割と大きな出来事だったので。

チャットボット開発のためのライブラリをGoで書いた話

Chatroomといいます。

github.com

これはAizu Advent Calendarの16日目の記事です。(遅れてすみません)

動機

これまでだと、リクエストが来るたびに該当ユーザーのState情報を取り出し、今の文脈で条件分岐して返答、State情報の更新という一連の流れを行っていたと思います。

これはチャットボットのバックエンドとして基本的なものであり、大規模なものにも必ず含まれているロジックです。

しかし、チャットボットブームと言える今の時代、ネタや実験的に軽くチャットボットを作成したいという需要もあります。

そういったときに毎度State管理から実装するのはちょっと面倒...ということで、このライブラリを作成しました。

で、具体的には?

こんな感じでチャットボットのロジック部分が書けます。

今までだとState管理が必要だった対話的なUIが、State的な部分を意識せずに書けていることがおわかりでしょうか。

しかし実際のコードはこれだけではなく、もっとあります。

というのも、Chatroomは以下の面倒を見てくれません。

  • ユーザーごとの情報の保存(State)
  • LINEやFacebookといったチャットサービスAPIとの通信
  • ユーザーID等による処理の分岐

話が違うじゃねぇか!という声が聞こえてきそうですが、Chatroomがやってくれるのは以下だけです。

  • トリガとなるメッセージごとのモジュール(Topic)の呼び出し
  • Topicへのメッセージの配送・受け取り

上記以外のことは自分で実装する必要があります。(もう少し詳しいことがREADMEに書いてあるよ!)

まとめ

このライブラリで中規模程度のチャットボットも書いていますのでちょっと使ってみてくださると嬉しいです。

(はやくAPI Reference書かなきゃ)

2016/12/28追記: 書いたよ。

地元の人に聞いた平日夜に熱海で日帰り入浴できる場所3つ

- 大湯温泉

- 駅前温泉

- 福島屋

だけらしい。ホテルはもう宿泊客向けのみになってて、それ以外の日帰り温泉は16時ころで終業。福島屋がよさげだけどその日は休業してたので駅前温泉に行った。

 

すごく熱かった。さすが熱海←

 

ありがとう八百屋のおばさん。