しるてく

技術的な話をします

SlackでHubot Integrationを使わずにHubotを利用する

もしも、深淵な理由でIntegrationをユーザが追加できない場合にslackでhubotが使いたくなったら…。

というアレな状況だったので、hubot-slackのAdapterのmsg.as_user, msg.usernameを直接いじってゴリ押しした。 もしかしたらもっとスマートなやり方があるかもしれない。

github.com

自分が使いたかっただけなので、雑だけどやったこと。

  1. /src/slackをコピーして/src/slack_no_integrationを作成
  2. 自分の発言を無視しないようにした(hubot=自分になるので)
  3. 既読にしないようにした
  4. 名前を設定できるようにした
  5. 無視するチャンネルリストを取得できるようにした(hubotの参加チャンネル=自分の参加チャンネルになるので)

一部のAndroid端末でWebFontの代わりに絵文字が表示されてしまう問題

スマホサイトでWebFontの私用領域つかっていたら、一部のAndroid端末でWebFontの代わりに絵文字が表示されて困った。

DECOLOG TECH BLOG: スマートフォンブラウザの絵文字事情

ココらへんをさけるようにマッピングすれば良さそう。

絵文字を〓にする

MySQLでutf8mb4にしてなくて絵文字(4バイト文字)をDBに格納できない(その文字以降が突っ込まれない)問題があって、とりあえずjavascriptでアレな文字を〓に変換するやつ。

string.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, '〓');

easymockからstubcellへ移行してみた


「チーム開発に役立つstubcell」ってタイトルでCodeGrid 2周年パーティでLTしてきた。 - from scratch

今までAPIのモック作るのにCyberAgent/node-easymock · GitHubを使っていたんだけど、最近メンテされていないっぽいし、

easymock is so simple, but it depends on sqlite3, and could not write comment in JSON file and could not validate json.

ってやつに感動してstubcellに移行した。

移行手順

installしてentry.yaml書いて終わり。簡単!

$ npm install --save-dev grunt-stubcell
$ vi Gruntfile.coffee # edit gruntfile
$ mv easymock mock # easymockって名前でディレクトリ作ってたので変えとく
$ cd mock
$ touch entry.yaml
# easymockのコメントをアレする
$ find . -type f -name '*.json' | xargs perl -i -pe 's{^(<|>)}{//}'
# entry.yamlをカキカキ
$ find . -type f -name '*.json' | perl -i -ne 'if ( /^.(.*)_(.*).json$/ ) { my ($url, $method) = ($1, uc($2)); print << "EOM"
-
  request:
    url: $url
    method: $method
  response:
    status: 200
    file: $_
EOM
}' > entry.yaml
# あとは手作業で:id周りを変換しまくる

雑感

良かった

  • README読むだけでさくっと動いた。楽ちん
  • 適当ワンライナーで簡単に移植できた
  • queryでJSON出し分けできるのステキ
    • looseCompare: true

気になる

  • entry.yamlいちいち書くのだるそう。easymockで不要だっただけに気になる
  • READMEだけじゃrecordがなにか良くわからんかったのであとで読む
    • 勝手にjson作られるやつがそう?timestampみたいなレスポンスに無関係のクエリがファイル名に入った状態で生成されるので悩ましかった
  • 流れるログだけだと、結局どのファイルの中身を返したのか分からないのでルーティングの確認が面倒?
    • devtool見ろや、でもいいけど
  • ドキュメント自動生成とかはなさそう?
    • 直接ファイルみても良いけど、仕様として使うなら一覧できると嬉しそう
  • 変数とか使って楽ちんにリクエストによってレスポンス変えたい、とかは無理そう

jsxをちょこっと触ったので今の感想書いとく

最近Photoshopで画像をバババッってしたくてJSX入門した。

  • 基本的にjavascriptだけど、変数宣言とif/else, forだけ使えれば十分っぽい
  • Adobe ExtendScript Toolkit ってやつ使うとデバッグが楽
    • ただ、エディタとして貧弱
    • ESTKでファイルを開きつつ好きなエディタで書いて保存すると、ESTK側で勝手に「変更加わってるけど最新にする?」って聞いてくるので、YES押して再生ボタンをポチるのが楽っぽい
  • とりあえずこれさえあれば、大体のことは分かる
  • 書き出し系のスクリプトの場合、いろいろ弄くるのでとりあえずdoc.duplicate()して一時ドキュメントであれこれしてtmp_doc.close(SaveOptions.DONOTSAVECHANGES);するのがお手軽で良い
  • レイヤーをいじくるときは、underscore.jsが使えると大分幸せっぽいけど依存増やすの面倒だなあっていうのが悩みどころ
  • layers.getByName('hoge')ってやつ、hogeって名前のレイヤが無いとエラー吐いて落ちるので、あるかないか分からないやつ取ってくるときは、独自でループ回すのが面倒


慣れてくれば、いろんな作業を書き捨てでサクッと書けて便利そうだなあ、という印象でした。