@kyanny's blog

My life. Opinions are my own.

ブログが消えた

http://blog.kyanny.me というURLでアクセスできなくなった

原因はおそらく、クレジットカードの有効期限切れ

  • はてなブログProの支払いには はてなポイント を利用していた
  • ポイントは自動リチャージ設定にしていた
  • 昨年メインのクレジットカードを変えた
  • 自動リチャージに設定しているクレジットカードもまだ解約していないが、有効期限が切れた
  • 自動リチャージに失敗した(2/13)
    • しかしメール通知などは来なかった…
  • はてなブログProが解約されて独自ドメイン設定が消えた
  • 独自ドメインでブログにアクセスできなくなった

改めてはてなブログProに申し込み、独自ドメイン設定を有効にすれば復活するはず

(しかしせっかくの機会なので乗り換えとか少し検討してもいいかもしれない)

Clarks Natalie

二十代の頃からクラークスのワラビー・ナタリーに憧れていた。けど、欲しい時にカネは無かったりして、買うこともないまま、欲しかったことをすっかり忘れていた。洋服のコーディネートに疎いので、スニーカー以外の靴を手持ちの服(ほぼジーンズのみ)に合わせられる自信が無かったというのもある。

ここ数年、靴は吉祥寺の TOPtoTOP で買っている。年に一回、二足か三足くらい買う。今年もそんな季節になったので行ったら、クラークスのナタリーが売っていて、ついに手に入れる日がやってきた。

ありがちな写真。

昔(から)憧れてて、といってもいい加減なもので、憧れていた靴の名前もろくに思い出せなかった(なぜかメレルのウッドストックを先に思い出し、クラークスのワラビーとナタリーの違いも知らなかった)

履きやすくて、大満足。定番のスエードのやつが最初は欲しかったけど、奥さんがレザーの方がいいよというので、奥さんのセンスに間違いはなかろう(俺より確実に良いことが実証済み)と、レザーを買ったが、やはり正解だった。店員もレザーは珍しいとかなんとかいって勧めてた。

ここ数年スニーカーといえば mobus をよく履いていて、それも買った。白にドイツ国旗の配色のラインが入っているやつ。

こっちはまだ履いてない。雪もだいぶとけてなくなってきたので、汚さなくて済みそうだから、今週どこかでおろしたい。

Remove all ads

Slack のリマインダーのメッセージ本文を展開して一覧表示する Slack アプリを作った

Slack のリマインダー機能はもっぱら「メッセージにリマインダーを設定」する方法で使っている。書式が難しい /remind コマンドよりずっと使いやすい。自分自身への DM にリマインドしたい内容を走り書きして、そのメッセージにリマインダーを設定したりする。パブリックチャンネルに誰かが書いたメッセージにリマインダーを設定したりもする。

たくさんのメッセージにリマインダーを設定していると /remind list コマンドで一覧表示したときどれがどれだかわからくなって不便。

f:id:a666666:20180130041128p:plain

そこでメッセージ本文を展開して一覧表示する Slack アプリを作った。 /expanded-reminders というコマンドで呼び出せるようにした。やってみたらこれがなかなか便利。 Complete ボタンもつけてみた。

f:id:a666666:20180130041220p:plain

やりたいことがはっきりしていたので、Slack API のドキュメントをあちこち読みながらとにかく動くものを完成させることを最優先に、二日くらいで作りきった。コードはかなりやっつけ仕事だけど、飽きてモチベーションが消える前にちゃんと欲しいものが手元で動いてる状態まで持っていけた。

github.com

アプリ本体のサーバーは Heroku で動かしている。最初は ENV に access token をセットしていたけど、せっかくなのでアプリを配布して(再)インストールしやすくする方法を調べて access token は oauth2 のプロトコルにのっとって取得する形にしてみた。でも、サーバー側の実装が不特定多数の人に配布して利用してもらえるようにはなっていないので、 ENV で十分というか、むしろ ENV のほうがよかったのかもしれない。

ENV でちょっと不安だったのは、 Slack アプリを作成すると生成される Tokens for Your Workspace というやつの権限がどうなっているかよくわからなくて、自分以外の人がこの Slack アプリをインストールしたときに、すでに俺が自分で Tokens for Your Workspace を ENV にセットしているサーバーが共用されることになるので、俺の権限でリマインダーの中身を見られたら嫌だなぁ、という点。 oauth2 のフローで access token を取得してサーバー側に永続化すると明らかに俺の権限の access token が保存されるのでよりまずいんだけど、なので現状のサーバー側の実装では二回目以降の oauth2 認証時には access token を上書き保存しないようにしたりしている(このへんがやっつけ仕事の最たるもの)

Slack の API について学んだこと

  • Slash Commands を使うためには呼び出す API サーバを指定するが、この API サーバのレスポンスを JSON で返すと Interactive Components も出せる
  • Interactive Components の action button を使う際に Slash Commands と別のエンドポイントを指定する場合は、 action を POST する URL のレスポンスに Slash Commands で呼び出されたときのレスポンスを同じもの(ただし action の実行後の状態のデータ)を返すのがよい
    • Interactive Components でリマインダーの Complete ボタンを表示する場合、そのリマインダーだけ Complete になったので「未完了のリマインダー」の一覧を JSON で返してやると、 Slack の画面上では Complete を押したリマインダーだけがその場で消えたような見た目・振る舞いになる
  • 単一のメッセージの内容を取得するには conversations.history method | Slack のみを使えばよいが、 permissions は channels:history, im:history など個別に許可しないといけない
  • Slack アプリ内におけるメッセージの permalink は https://quipper.slack.com/archives/D18T55D5F/p1517205394000105 のような形式だが、 archives/ の後ろがチャンネルIDで、その後ろのpに続く数字がタイムスタンプ。しかし conversations.hisory メソッドの ts 引数に渡すときは 1000000 で割ってやる必要がある
  • permalink 内のタイムスタンプがどんぴしゃりのはずなのになぜか一個古いメッセージにヒットしてしまうことがあって、 +0.000001 秒足して回避したりした。なぜだ
  • スレッド内の返信メッセージの本文を得るのはやっかいで、まず permalink の形式が異なる https://quipper.slack.com/archives/C0TLNNUV6/p1514366729000098?thread_ts=1514280850.000103&cid=C0TLNNUV6 その上で conversations.replies メソッドを使う必要があるし、 permalink 内に二つあるタイムスタンプも正しく使い分けないといけない。詳しくは https://github.com/kyanny/slack-app-expanded-reminders/blob/master/app.rb#L21-L25 参照
  • Slack API は本家ドキュメントがしっかりしているけど英語しかないし、挙動がいまいちよくわからないことがある。ぐぐっても込み入った情報はあんまり多くないので、トライアンドエラーでがんばるしかない

「VP of Engineering Meetup by CA #2」に参加した

社内でも話題に挙がっているし、登壇者の方々と以前お話する機会があり、改めて話を聞きたいと思ったので参加した。

懇親会で個別に質問した内容も含め、メモ

  • 自分たちがサバイバルフェーズにいるということを認めたくない人もいると思うが、徹底させるにはやはりある種軍隊式のトップダウンのマネジメントをするしかないのか?
    • サバイバルフェーズの場合、とにかくこれと決めてやりきる、引っ張るのが大事。1on1とか、いわゆるふつうのマネジメントはその後のフェーズで活きてくる。
  • 「メンバーが自走してくれなくて…」というのは、情報共有ができていないということ。知っている情報以上に目線は上がらない。経営情報など。
    • いまの自社に最も足りないのはこれなのでは?と思った。実際、何かにつけ「情報共有されてない、不透明だ」という声が挙がることが増えている。実はサインはとっくに出ていて、適切なアクションをとれていなかっただけなのか?
      • 一方で、シェアされてる情報に隅々まで目を通しているか?というと、そうともいえないような…そんな余裕はない、というのも一理ある、が、共有されている情報への感度は高くなく、共有されないことに対してはネガティブな反応が挙がる、という状態だとしたら、何が問題なのか…
  • エンジニアリング部門からビジネス部門などへ「要求」する前にまず自分たちが責任を果たしていなければいけない、とはいうものの、身辺を整理する余裕もない場合、どうやって負のスパイラルを断ち切ればよいか?
    • まず、本当に余裕がないのかシビアに見極めるのも大事。その上で、「我が振り直せ」も完璧である必要はなく、少しずつでいい。「ちゃんとやってくれている」と伝われば相手もわかってくれる。ギブアンドテイク。

「腹をくくる」という話があった。ここ数ヶ月、そのことについて自問し続けてきて、ようやく「やはり俺はマネジメントはするものされるもの好きではない」という本音と向き合えた。

それでもやはり受け入れるべきなのか?と、まだ不安というか未練というか、踏ん切りがつかない、「腹をくくる」ことができない感じもしていたが、腹をくくった人たちの話を聞いて、「やはり俺は彼らのように腹をくくってマネジメントにコミットすることはできそうもない」と思った。

だから俺は、うまくいくかわからないけど、「マネジメントするものされるもの好きじゃない俺自身が幸せでいられる環境」を作ることにコミットする。それを実現するために必要なあらゆることをする、そこに腹をくくる。

池上彰の宗教がわかれば世界が見える

オーディオブックを聴いた。初めて読了?したオーディオブック。FeBeを使った。

圧倒的にキリスト教が面白かった。断片的には知っていたことも、体系だって知れるとなおよくわかる。知るとなおさら、なんで世界中の人がキリスト教を信仰しているのか不思議で、興味が増す。

通勤時の徒歩移動中を中心に、本当に隙間時間で少しずつ聴いた。読書と同じで、毎日少しずつでもいいから続けると慣れてくる。読書以上に、間隔が空くと内容を忘れるような気がする。ターミナル駅で乗り換える時、電車降りる前に再生し始めると効率がいい。

あと、目が疲れてるときにもオーディオブックは良い。目だけでなく頭が疲れてるときも、悪くない。ただし再生速度を速くするとCPUを使うので、疲れてるときには向かない。1.2倍速でのんびりじっくり聴くのが自分には合っていそう。

池上彰の宗教がわかれば世界が見える (文春新書)

池上彰の宗教がわかれば世界が見える (文春新書)

FeBeのアフィリエイトというのがあるので試してみようかと思ったが、近々リニューアルに伴い廃止されるようだ。

GitHubの通知その後

ごめん。俺が間違っていた。GitHubの通知をGmailで読むのは良いアイデアではありませんでした。特にGmailのタブをPinして開きっぱなしにしている場合は。

通知が目に入ってきづらくなったおかげで、自分がいかに通知に気を取られていたか思い知った。通知センターに新着メールの通知を表示しているわけでもないのに。

GitHubのNotificationsページにユーザースタイルシートとユーザースクリプトでカスタマイズを施している。

gist.github.com

Open notification link to new tab by keyboard for GitHub

まとまった時間を通知読みにあてて、まとめて処理する感じ。通知を読む==PRをレビューしたり、イシューにコメントしたり。これらは自分の現在のメインタスクとは少し違う。メインタスクの話はSlackチャンネルでして、個人のタスク管理に使ってるTrelloボードにイシューごとのカードを作って、個人の作業メモを残したり細かい進捗管理をしている。この話は別で詳しく書きたい。

具体的な操作のスクリーンキャスト。キーストロークをディスプレイに表示するソフトがうまく動かなかったけど、jkで移動してvで個別に新しいタブで開く、Shift+vで全部新しいタブで開く。

アニメGIFを撮ったけど、ファイルサイズが大きすぎたのか、はてなブログにアップロードできなかったので、アニメGIFを再生中のブラウザをQuickTimie Playerで撮影して動画をYouTubeにアップロードするという手間のかかることをした。

最近のキーリマップ事情

⌘英かなに ^M とか ^D とか個別に設定してやりくりしてたけど、気づいたら Firefox とか VSCode とかで効かなくなっていたので今風のやり方を調べて少しやり方を変えた。

blog.kentarok.org

Karabiner-Elements がだいぶ良くなっているらしいので、 Emacs ライクなキーバインドをインポートした。いろいろあるけど自分の場合は Key Bindings (control+keys) をインポートすればだいたい事足りそう。

Karabiner-Elements が動いていると macOS の System Preferences でキーボードの Modifier Keys 設定を変えていても何故かリセットされる(Caps Lock と Ctrl を入れ替えていたのだが)。仕方ないので Karabiner-Elements 側で改めて入れ替えた。

⌘キー左右で IME 切り替えは引き続き⌘英かなで制御する。

ということで、こういう設定で落ち着いた(落ち着くといいな)

f:id:a666666:20180126144554p:plainf:id:a666666:20180126144556p:plainf:id:a666666:20180126144559p:plainf:id:a666666:20180126144601p:plain

ブログのトップページの表示形式を変更した

Before

  • 全文形式
  • 5記事

After

  • 一覧形式
  • 15記事(MAX)

自分でもスマホ版を見慣れてしまって、概要が等間隔に並んでるほうが見やすいと思った。デザインの関係で記事タイトルがそこまで目立たないから、全文表示だと記事の区切りが見つけづらいのもありそう。

CodeGrid で webpack に入門した

webpack 全くわかってなかったので、有り難い記事だった。 CodeGrid 様々。 (「雰囲気で webpack をやっている」どころじゃなく、マジで config を一行も理解してなかったので、超苦手意識があった)

  • webpack は、必要なコードだけロードされるようにバンドルするノードを分けたり、非同期ロードしたりする機能がある
  • しかし実際いま触れてるプロジェクトでは単一のファイルにバンドルして同期的に読み込んでいそう(そういう使い方しかしてなさそう)

  • 設定の最小構成要素は entry と output (こういうことが知りたかった!)
  • entry で指定したファイルから import とか require されてる依存ファイルが自動的にバンドルされる
  • entry と output を複数持てる
  • コマンドラインオプションと設定ファイルのプロパティが対応する

  • Loader というものがある。フィルタとして作用する
  • Loader はチェーンできる
  • チェーンするとき、 use: [ ] と配列で指定するならば、配列の後ろのものから先に適用される
  • ! で区切って指定した場合は、右から先に適用される
    • 上から・左から作用するのではない点に注意。適用順によっては動作しないことがある(よくある)ようなので順序があることを意識する

TODO: Plugin の概念についても学んだら追記する

我が家に Amazon Echo Dot もやってきた

昨年末にリクエストした招待メールがきて、2千円引きなので買ってみた。

想像してたよりずいぶん小さくて驚いた。倍くらい大きいものかと思った。

セットアップは少し戸惑った。アプリを起動したらチュートリアル的にセットアップウィザードが始まるのかと思ったらそうならず、不親切に感じた。Apple TVにAmazonプライムビデオをセットアップしたときの親切さと比べるとずいぶん差がある。むしろこっちのほうがAmazonらしい感じもするが。

いくつかスキルを試したりしてみた。スキルがたくさんあって選べるのは良い。さすがこの分野のパイオニアという感じ。

しかし某サービスのスキルを試してみたところ、「これは便利ではないな…」と感じた(ニュースカテゴリのもの)。スマートスピーカーは入力だけでなく出力も音声なので、情報量があまり多すぎると聞いていられなくなる(長すぎる)。手と目が塞がってるときならば良いのだろうけど、自宅でそういう時間がどれほどあるか。家事をやってるときには悪くないが、音楽なりなんなりかけるだろうしなぁ。

呼びかけ後にコマンドを言うタイミングがSiriやClovaと結構違っていて慣れない。感覚的に、Alexaには「アレクサ,○○」とウェイクワードのあとに間を空けずに言わないといけないが、Siriは「ヘイSiri、○○」と一拍空けないと言ったことの冒頭が拾われない。Clovaに至っては「クローバ。(ポーン)○○」とレスポンスを待ってから言わないといけない。慣れの問題だとは思うけど、Alexaのタイミングがベストなのかはやや疑問。

まだ初日でほんの少し使っただけなので、もう少し日常的に使っていって、感想が変わるか経過を見守りたい。電源の位置の関係でダイニングキッチンの冷蔵庫の上に置いてみたけど、やはり居間に置くべきかもしれない。せっかくAmazon Echoを手に入れたからには自分でスキル開発にもチャレンジしてみたい。

「Management 3.0 〜良いフィードバックと給料を与える方法〜」に参加した

「マネジメントって本当に必要かなぁ。。」と日々疑問を感じているので(する側としてもされる側としても)、何か得るものがあればいいなと思って参加した。

ワークショップもプレゼンテーションもなかなか良かった。三点にはまとめきれないので、箇条書き。

  • チェックイン(アイスブレイク)のために行ったムービングモチベーターズ・ゲームはシンプルで良かった
  • Management 3.0 については、「自己組織化されてて裁量の大きいところで働くほうがいい、ってのはみんなわかってるよなぁ。でも現実にそうしていく難しさがあるんだよなぁ。『フレームワークではなく概念』らしいから、みんなが共通理解を確認しながら継続して改善していく取り組みが大切、ということなのかなぁ」と思った
  • フィードフォースの鈴木さんによる事例紹介のなかで挙げられていた ADKAR (変革管理)の話が素晴らしく、目から鱗だった。要は丁寧に段階を踏まないとついてこれないよ、だから相手がどの段階にいるのかに応じて適切なコミュニケーションがあるし、自分自身も同様に ADKAR のどの段階にいるのか自覚することが大事
  • ワークショップでは迷ったけど Feedback Wrap のほうに参加した。五つのステップを踏んでフィードバックするとよい、という話で、
    1. コンテキストの共有
    2. 観察された事実の確認
    3. 自分の見解を伝える
    4. フィードバックによって得られる価値を説明する
    5. 改善するためにできることを提案する
  • というステップがある。4番目がしっくりこなかったけど、ワークショップ後に質問したりして、「ここでいう価値は、フィードバックを与える人・受ける人・他の関係者含めた全ての人にとっての価値である」ということが確認できてすっきりした
  • 与えられたシチュエーションに対してロールプレイをするのは、不慣れなのでうまくできず、最後までできなかった。シチュエーション設定はいくつかあったがどれもリアリティがあって興味深かった
    • 一人だけ出社が遅いことを注意しても改善しないメンバーに困っているマネージャー vs 同僚から「ウチは自由裁量で働けるよ」と聞いたので出社時間も含めて自己判断しているメンバー
    • クライアントからの急な仕様変更があったとき、仕様をちゃんと確認しなかったメンバーに怒っているマネージャー vs 言われた通りに頑張ってたのに後になって仕様が変わり、マネージャーもクライアントとの会議に同席してたのに何故か自分の落ち度と思われてて不満なメンバー
    • 上のほうのシチュエーションで、コンテキストの共有は「田中くん、毎日朝遅いよね」みたいな問いかけかなと思ったけど、たぶん違うなと思い直した。「田中くんさ、ウチの会社ってフレックスタイム制度は導入してないこと、知ってるよね?」とかが適切
    • ここで認識がズレてたら適切なフィードバックはできない。「え?コアタイム12時からって聞きましたけど?」「え?」みたいな
    • 前提の認識が合って初めてその先のステップが有意義になってくる。「はぁ、まぁ知ってますけど…」「うん、そうなんだ。ところで田中くん、いつも出社するの遅いよね」「はぁ、まぁだいたい昼ごろ来てますかね…」みたいな
  • Salary Formula は、実装するのは難しそうと思った。特に大きな会社、歴史の長い会社の場合は
    • ビアバッシュのとき Stefan さんに「例えば給与の10パーセントだけ Formula で決める、のように小さく始めるのはどうなんでしょう?」と聞いてみたら「面白いアイデアだ」と言っていた(10パーセントでも、今いる会社で始められるイメージはまだわいていないが…)

  • イベントの内容と無関係な雑感
    • フィードフォース社には知人が数名勤めていて、はるか昔の同僚(後輩)と数年ぶり?に再会した(その前は十数年ぶりの全く意外な再会だったので、経過時間に比べてそんなに久しぶりという感じはしなかった)
    • 参加者に完璧ネイティブな日本語を喋るインド人の方がいた。なんとQuipperを知っていた(フィリピンでQuipperと同じオフィスに入居してた会社で働いていたらしい。その会社は俺も知っていた)

大人のための読書の全技術

本をたくさん読もうと思うのであれば、本の読み方を勉強するのがよかろうと思って読んだ。前から気にはなっていた。

なかなかよかった。引用ベストスリー方式というのはこの本の受け売り。

ハイライトした箇所がたくさんありすぎるのと、iBooksはハイライトした文章をコピーできないので、まるごと引用ではなく、特に大事だと思ったことを三つ挙げる。

  • 本は知識で読むものなので、読めば読むほど速度があがる
    • あるジャンルについて知りたいときは、そのジャンルの本を何冊かまとめて読んだりすると効率がよい
  • 本から効率よくインプットするためには、あうとふを意識して読む
    • ブログに感想を書くのは良いアウトプットになりうる。引用ベストスリー方式で、自分的クライマックスに自分なりの解釈を添えるとなお良いはず
  • 本は買った直後が一番読む気があるので、鮮度の良いうちにさばくべし
    • カフェに入って見出しの拾い読みをするくらいでもだいぶ効果的のようだ。少なくとも積ん読は避けられる

大人のための読書の全技術 (中経の文庫)

大人のための読書の全技術 (中経の文庫)

ペーパーナイフを買い直した

何年も前にAssist onで「Birdie Paper Knife」というペーパーナイフを買って、ずっと使ってきた。色はブルー。Twitterの鳥っぽいイメージが気に入っている。

長年使って刃こぼれしてきたので、新調した。今回も同じブルー。真鍮製のものだと長持ちしそうだけど、さすがに五千円は高いので、五百円で買えるふつうのやつで。

金属製ではないので、怪我とかへの心配がちょっと少ないのがよい。

ミッション:インポッシブル/ローグ・ネイション

Amazonプライムビデオで観た。トムクルーズでもってるアクション映画だなーという感じ。水中アクションのシーンはちょっと手に汗握ってしまった。バイクのカーチェイスシーンはスピード出すぎで非現実的だった。時速何キロ想定なんだろう。150か200か。

まんがでわかる 稲盛和夫フィロソフィ (まんがでわかるシリーズ)

電車の待ち時間に本屋で立ち読みして、電車の中で読む用に買った。

稲盛和夫の本はそのうち読んでもいいかなくらいには思っていたのでちょうどよかった。とはいえ興味があったのはもっぱら球場のビール売りのバイトのほうで、漫画部分だけ読んでだいたい満足した。

漫画と活字が混ざってる本を年間読書数に含めるべきか?は難しいところだが、これについては漫画部分しか読んでないので含めないことにする。