私が歌川です

@utgwkk が書いている

映画「ジョーカー」見た

wwws.warnerbros.co.jp

見た。映画見たの2年ぶりとかそういうオーダーな気がする。

バットマンの文脈は一切知らないまま見たけど演出がよかった。 主人公は自分の意思とは関係なく笑ってしまう病気を持っており、場違いなシーンでもとにかく笑いを上げるのが、作品全体に不気味な雰囲気を漂わせていたと思う。

人間失格」と通じるものがありそうだなとふと思った。どちらも悲哀があり、人生は悲劇なのか喜劇なのか、というところが共通していると思う。

今日のおすすめSlackチャンネルBOTを簡単にHerokuにデプロイできるようにしました

utgwkk.hateblo.jp

今日のおすすめSlackチャンネルBOTをHeroku Buttonクリックで簡単にデプロイできるようにしました。ご活用ください。

Deploy

github.com

確認画面でSlack BOTトークンとチャンネルIDを入れればデプロイできて、スケジューラの設定をすれば毎日おすすめしてくれるようになる、という世界観になっています。

おもしろプロダクトを使ってもらうには、とにかく導入の敷居を下げることが大事だと思うので、やってみました。

Heroku Buttonの置き方

あまり難しいことはしてなくて、公式ドキュメントを読みつつapp.jsonを書いてボタンを置くとだいたいできます。

ハマりどころ

Heroku Button かなりすんなり設置できたけど、1つだけハマりどころがあったので共有します。

公式ドキュメントの formationスキーマが間違っており、GitHubにあるものが正しい

app.json validate というコマンドでapp.jsonスキーマに従っているかのvalidationを行うことができるのですが、以下のような身に覚えのないエラーが出て少し詰まりました。

Found an app.json file, but it's got some issues:

- formation must be of array type

結論から言うと、公式ドキュメントにあるスキーマは間違っており、app.jsonGitHubリポジトリにあるものが正しいです。

github.com

つまり、

"formation": {
  "web": {"quantity": 0}
}

ではなくて、

"formation": [
  {"process": "web", "quantity": 0}
]

のように書きます。

Slackのワークスペースごとにアイコンを変える

Slackのワークスペースが、大学のサークル、アルバイト先、研究室、と増えてきている。どれがどれかはまだ分かるけど、じぶんの発言を見るとどれも同じアイコンでそこに違いはない。

そこでワークスペースごとにじぶんのアイコンを変えてみることにした。 インターネットで普段使っているアイコンとは別のものを使うので、違いが生まれておもしろい。

フリーアイコンいろいろなところで入手できる。たとえばpixivにある。

フリー アイコンの画像投稿作品の検索 [pixiv]

Picrewとか使うと、パーツを組み合わせて最高かつオリジナリティのあるアイコンを作ることができて便利。利用規約には注意する必要がある。

Waifu Labsとか使ったことないけど自動生成されそうなのでいかにもよさそうに見える。

waifulabs.com

今日のおすすめSlackチャンネルBOT

サークルのSlackには、publicなチャンネルが660個ほどある。 その中には、100人以上がjoinしているチャンネルから、数人しかいないチャンネルまでさまざまある。 これだけチャンネルがあると、おもしろいチャンネルかもしれないけど人が少ない、とか、実はこのチャンネルでこんなことが話されている、みたいなことがあるかもしれない。

そこで、毎日おすすめのチャンネルをサジェストしてくれるBOTを作った。

github.com

こんな感じで、毎朝9時におすすめチャンネルを教えてもらうようにしてみた。

gyazo.com

チャンネルのサジェストだけど、#general とかサジェストされてもおもしろくないので、人が少ないチャンネルからランダムでおすすめしてくれるようにしている。

チャンネル多すぎて把握しきれない、どのチャンネルで何を話しているのか分からない、そういった問題に一石を投じるために作りました。 実行ファイルを落として README にあるようにtokenや投稿先チャンネルを書いてやって実行すると動きます。cronとかで動かすとよさそう。ご活用ください。

github.com

靴下を統一すると生活が楽になる

今まで持っていた靴下をぜんぶ捨てて1つに統一した。 靴下、このペアは実はないとか、タンスの奥底にある、みたいな出来事ばかりが発生していて大変だったけど、統一することで生活が楽になった。

靴下を履くとき

靴下の入ってるかごの先頭にある靴下を取って履けばよい。

靴下を洗濯したとき

靴下の入ってるかごの末尾に、洗濯して乾いた靴下を入れればよい。

今後の課題

新しく購入した靴下が、実はちょっとだけ柄が違った、みたいなことがあると破綻しそう。 そもそも、今まで使っていた靴下がこれから永久に購入できる保証はない。

靴下を買うときに既存の靴下をぜんぶ処分する運用が必要になると予想される。

4年前のハッカソンで書いたコードと向き合う

ふと4年前に作ったwebサービスにアクセスしてみたところ、エラーが出ていたので、いい機会だと思いコードの修正をすることにした。

github.com

hatena-bookmark-read-all.herokuapp.com

コードとwebサービスはこれ。はてなブックマークの「あとで読む」を一気に読めるwebサービスで、4年前に はてな×ドワンゴ合同ハッカソン@京都 で作った。

はてなブックマークAPIの仕様が変わっていてエラーを吐いていたので、とりあえず動くようにした。そのついでにコードをガリガリ書き換えていて、いくつか気づきがあった。

  • HerokuもはてなブックマークHTTPS対応してた
  • jQuery!!
    • かっこいい
    • $.ajaxとか登場してる
    • querySelectorとfetch APIで書き直したらjQuery不要になった
      • bootstrapが依存してるのでscriptタグは残す
  • sixを使ってるけど捨てる
    • Python2と3の非互換変更を吸収するライブラリ
    • HerokuがPython3対応してたので退役してもらう
  • requirements.txt使うのをやめてpipenvを使う
    • Herokuのstackをアップグレードしたら自然とpipenvを使うようになった
    • 現代的で良い
  • 状態がいろいろなところに散らばっている
    • ハッカソンで8時間ぐらいで書いたというのもあるけど全体的に雑
    • このころ設計とか知らなくてぜんぶ勘で書いていたと思う
      • 外部API呼び出す関数にいきなりcontrollerの処理が登場している
      • oauth っていう名前なのにOAuth関係ない処理が登場している
  • リクエストごとにAPI叩きまくって一気にデータを持ってきていてワイルド
    • ハッカソンじゃなかったらめっちゃ怒られてると思う
    • ひとまずAPI叩くの1回だけにしてページネーションできるようにする作戦
    • ぜんぶ既読にするボタンは最悪で、一気にリクエスト送ってる(!)
      • 1秒ずつwait入れるようにした
  • かっこよく書こうとして分かりづらいみたいな書き方がある
    • any(map(x.__contains__, ys)) って書いてあったらギョッとすると思う
  • 当然テストはない

これはハッカソンのコードですね、というところから、雑なwebサービスのコードですね、というところまで持っていくことができたと思う。 ページ遷移とくにないので、今やるならReactとかVue.jsとか使ってナウい感じに書くと思う。当時はMVVMみたいな概念は知らなくて、jQuery使ってDOMを直接いじってて手作り感がある。 まだ雑ではあって、認証失敗したらセッションをflushするのでもう一度ログインしてください、というモデルになっている。

みなさんも4年前に作ったもののコードを見直してみてはいかがでしょうか。4年経つとこうも変わるのかというのを感じられてお得だし、リファクタリングの練習になる。

VSCodeのLive Shareでペアプロしたら便利でおもしろかった

先日サークルのコーディング合宿*1に参加したのですが、そのときにサークルの後輩であるnosくんとペアプロをしました。

codecamp.kmc.gr.jp

ペアプロでやったことや感触はだいたいこのインタビューで話した通りで、この記事ではそのほかに思ったことを書きとめることにします。

そもそもLive Shareについて

VSCode拡張機能です。自分のVSCodeの設定を使いつつペアプロ・モブプロができます。導入方法は↓↓こちら↓↓を見てください。

docs.microsoft.com

Live Shareを開始すると共有リンクが生えて、それを踏むと参加できるという仕組みです。

感想

従来、ペアプロ・モブプロといえば周りからどんどん声を上げてコードをどんどん書いていく、というモデルだったと思うんですけど、そこに直接介入できるという路線が生えたのがおもしろかったです。 自分でコードを書くので意思伝達のロスがより少なくなります。

コメントで、今こういうことをやっていてじゃあこれをやりましょうとか、こういう書き方ができますみたいなのをスッと書けるのがよかったです。こういうことを無限に口で伝えていると時間がもっとかかっていたと思います。

エディタだけでなくターミナルも共有されるのが思ったより便利で、gitのコマンドでちょっと難しいことをするとなったときに、相手のGit Bashに入っておもむろにコマンドを打つ、という行いができたのですぐに解決しました。

横だけでなく遠隔でもLive Shareが使えるようになっていて、コーディング合宿に参加していない部員の名前が書いてあるカーソルが登場するなどしていました。

現代は道具がどんどんよくなっていて、人間の方が道具について行くというモデルになっていると思っています。コーディング合宿という場でエディタの新しい機能を試すことができたのがよかったです。普段やろうとしてもなかなか機会がつかめないことがあるので、こういう機会にどんどん試したいです。

*1:福井県の温泉街でひたすらコードを書いたり一日に何度も入浴したりする