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

みずぴー日記

陽気なプログラマが世界を廻す

今朝書いたシェルスクリプト

こんなシェルスクリプトをいくつか書いてレポジトリにコミットした。

./bin/docker/bundle

#!/bin/sh
docker-compose run --rm app bundle "$@"

./bin/docker/rails

#!/bin/sh
docker-compose run --rm app bundle exec rails "$@"

できること

./bin/docker/bundle install

とか

./bin/docker/rails db:migrate

とかができるようになって便利。

今までは docker-compose run app bash してその中で実行していたが、履歴が残らず不便だったのが解消された。 docker-compose run app .... を毎回打ってもいいんだけど、長くてダルい。

全部

https://github.com/mzp/fumifumi/tree/master/bin/docker

⛄️飛騨・高山旅行

雪と合唱造りの組合せが見たかったので行ってきた。

f:id:mzp:20170123091615j:plain

道中

向う途中でひるがの高原に寄ったが、冗談みたいな量の雪が積もっていた。

f:id:mzp:20170121142443j:plain

f:id:mzp:20170121142454j:plain

古い町並み(昼)

高山市内の古い町並みは予想通りいい感じだった。

f:id:mzp:20170123103446j:plain f:id:mzp:20170121170412j:plain

謎の器具で雪を落している。 f:id:mzp:20170122100354j:plain

寿司はうまい。

f:id:mzp:20170121165334j:plain

団子もうまい。

f:id:mzp:20170121165756j:plain

牛串も当然うまい。

f:id:mzp:20170122100242j:plain

古い町並み(夜)

夜になるとさらにいい感じになる。

f:id:mzp:20170121172100j:plain

f:id:mzp:20170121171948j:plain

⛄️

f:id:mzp:20170121191650j:plain

ものすごく寒いのでうっかりラーメンを食べる。めっちゃうまい。

f:id:mzp:20170121182238j:plain

合掌造り

本当は白川郷に行くつもりが雪が怖くて断念した。かわりに、高山駅近くの飛騨の里に行った。

立ち入り禁止の札が埋まってて迫力がある。

f:id:mzp:20170122163420j:plain

日が落ちるとライトアップがはじまる。

f:id:mzp:20170122173044j:plain

f:id:mzp:20170122174419j:plain

f:id:mzp:20170122172401j:plain

f:id:mzp:20170122174859j:plain

めちゃくちゃ寒いので火に集まる。

f:id:mzp:20170122172428j:plain

氷菓 舞台巡り

氷菓の舞台巡りをしたが「劇中だとこんなに雪が降ってなかったよな?」という疑問がついて回った。

いろいろな箇所に貼ってあったポスター。

f:id:mzp:20170121160533j:plain

図書館。

f:id:mzp:20170121162558j:plain

劇中で二人で閉じ込められていた神社。ここに放置されたら死ぬのでは?

f:id:mzp:20170123125321j:plain

君の名は 舞台巡り

君の名はの舞台になった飛騨古川も見てきた。

アピールしている。

f:id:mzp:20170122133422j:plain

「君の名はを見て来ました」と言ったら、伝票に書かれた。

f:id:mzp:20170122141642j:plain

近くの美術館で君の名は展をやっていたので見てきた。

f:id:mzp:20170122144618j:plain

等身大パネルより背景の雪の量が気になる。

f:id:mzp:20170122144807j:plain

感想

  • 雪が大量にあってたのしい
  • 寒い。痛いくらい寒い。
  • 日がたつにつれどんどん体調が悪化していき、帰ってきてから風邪を引いた

🙆prpr-lgtm

会社ではPull Requestに対して2人がApproveしたのちにマージするという運用をしているので、これを補助するbotを作った。 2人がApproveしたときに、Assigneeに対してメンションが飛ばす。

f:id:mzp:20170103092252j:plain

bot

prprへのプラグインとして実装した: https://github.com/mzp/prpr-lgtm

解決したい問題

Pull Requestに対して2人がApproveしたのちにマージするという運用には以下の2つの問題点があった。

  • Approveした人数がPullRequest一覧では分からない。
  • Approveした人数が2人に達したことに担当者が気付きづらい。

prpr-lgtm

ラベルによるApprove件数の表示

Approveの件数にあわせてラベルの追加・削除を行なう。

  • LGTM:1: 1人がApproveしている
  • LGTM:2+: 1人以上がApproveしている

f:id:mzp:20170103093644p:plain

メンション

2人がApproveしたときに、Assigneeに対してメンションが飛ばす。 このとき本文にしている「Let's Get This Merged」は Rebuild: Aftershow 133: Let's Get This Merged (gfx) が由来。

f:id:mzp:20170103092252j:plain

余談

Pull Request Review CommentのAPIがでるまでは「LGTM」というコメントに反応するようにしていた。 そのせいで「LGTMではないです」といったコメントにも反応してちょっと大変だった。

また、開発中には自分のコメントにも反応して、だいぶ面倒なことになった。

2016年

1月

Tumblrを書くアプリを書いてた(💫Tumblotte 0.1.0 - みずぴー日記)。これを使って2016年は日記を書くぞ、と意気込んでいたけど、わりと無理だった。 タスクリストにも「日記を書く」というのが残り続けている。

f:id:mzp:20161230075812p:plain

2月

ゆゆ式を無限に楽しみたかった話 〜 ゆゆ式 Advent Calendar 2014 20日目 〜 - non117's diaryを参考にNEW GAME!の各コマにアノテーションをつけた(NEW GAME! のコマ検索 - みずぴー日記)。

寒くてテンションが低く、ひたすら単純作業をしたい時期だった。

3月

手動でアノテーションつけるのがつらくなったので、TensorFlowを使って半自動化した(4コマ漫画の画像管理✨ - みずぴー日記)。

4月

NL名古屋SKKLisp辞書について話した(SKK-JISYO.lisp - みずぴー日記)。 この過程で他のSKK実装がどうなっているかも調べた(SKK辞書の闇への対応状況 - みずぴー日記)。

5月

GWに日光に遊びにいったので、🍓 橘ありす分類器 - みずぴー日記を作った。

iTerm2にAquaSKK対応のコードがはいった。長い戦いだった(iTerm2 + AquaSKK - みずぴー日記)。

6月

WWDCを日本から視聴してた。 ほぼすべてのセッションが中継されてたので、生活のリズムが破綻する以外は特に支障はなかった。

ICSE勉強会に参加するために論文リストを確認していたらおもしろい論文があったので読んだ (論文紹介: The Evolution of C Programming Practices: A Study of the Unix Operating System 1973–2015 - みずぴー日記)。

7月〜8月

ファミコンエミュレータを書いてた(ファミコン エミュレータ - みずぴー日記)。 スーパーマリオブラザーズのオープニング画面が表示できたときは感動だった。

9月

デレステ SKK辞書が製作されるのを応援していた。

10月

あまり活動できていない。

11月

MacBookProが届いたので寿司を流して遊んでたら、めっちゃRTされてびっくりした。 こんなに反響あるとは思ってなかった。

これでTouchBarの使い方が分かったので、LoveLiverにTouchBar対応を追加した(Support TouchBar by mzp · Pull Request #13 · mzp/LoveLiver · GitHub)。

12月

NGK2016Bでライブフォトの話をした(Love💕LivePhotos - みずぴー日記)。 同じ日に id:banjunアイマスハッカソンで別視点の話をしてて、宣伝効果が高そうだった。

Github contribution

f:id:mzp:20161230090835p:plain

参加したイベント

その他

  • 沖縄の離島に遊びにいこうとしたら、風が強くて船便が欠航していた。
  • iPhoneの画面を2回割った。
  • 富山に旅行に行ったときに借りた宿がすごくよくて、Airbnbのすごさを感じた(きときと - みずぴー日記)。

🍣絵文字キーの実現

f:id:mzp:20161224105605g:plain

要約

入力メソッドの拡張とキーボードのファームウェア変更により🍣キーを実現した。

ErgoDoxで実現できないキー

ErgoDox EZ等のキー配列を自由に変更できるキーボードがある。 ただし、通常のキーボードにないキーを作ることはできない。

例えば、絵文字を直接入力するキーを作ることはできない。

ファームウェアの制限

ErgoDox EZ等で利用できるファームウェアであるqmk_firmwareにはUnicodeサポート機能がある。しかし実現方法がOSごとに違うため、OSに依存した制限がある。

macOSではUnicode Hex Inputを利用しているが、Unicode Hex Inputは4桁のコードポイントしか受け付けない。そのため4桁を越えるU+1F363(🍣)を入力するキーは作れない。

f:id:mzp:20161224104248p:plain

絵文字キーの実現

入力メソッドの拡張

4桁を越えるコードポイントを入力できるようAquaSKKを拡張した。(codepoint_inputブランチ)

CtrlOption を押しながらコードポイントを入力し、最後に u を入力することで、任意のコードポイントを入力できるようにした。 例えば、 🍣(U+1F363)を入力したい場合は、 CtrlOption を押しながら 1 F 3 6 3 U を押すと🍣が入力できる。

ErgoDoxでの入力

ErgoDox EZのファームウェアを変更し、拡張した入力方法を用いるマクロを作成する。 これにより絵文字キーを実現できる。

// M(1)とM(2)に絵文字を割り当てる
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
      switch(id) {
        case 1:   
        if (record->event.pressed) {
          // 🍣(U+1F363)
          return MACRO(
              D(LALT), D(LCTL),
              T(1), T(F), T(3), T(6), T(3), T(U),
              U(LCTL), U(LALT),
              END );
        }
        break;
        case 2:
        if (record->event.pressed) {
          // 🍺(U+1F374)
          return MACRO(
              D(LALT), D(LCTL),
              T(1), T(F), T(3), T(7), T(A), T(U),
              U(LCTL), U(LALT),
              END );
        }
        break;
      }
    return MACRO_NONE;
};

別解1: サロゲートペア

サロゲートペア使えばAquaSKKの改造いらなかったな。

別解2: TouchBar

TouchBarには絵文字入力補助があって便利!

f:id:mzp:20161224110754p:plain

🎄AquaSKK 4.4.5: 旧かな入力の対応・数値変換の不具合修正

いくつかのプルリクエストをもらったので、それらを取り込んだAquaSKK 4.4.5をリリースした。

ダウンロード

https://github.com/codefirst/aquaskk/releases/tag/4.4.5

変更内容

旧かな変換ルールの追加

f:id:mzp:20161224083618p:plain

「ゐ」「ゑ」に対応するローマ字が、AquaSKKとL辞書でずれていてうまく変換できなかったため、L辞書のほうに統一した。(#71)

さらに設定画面から有効・無効を切り替えれるようにしたり、「くゎ」や「ぐゎ」を入力できるようにした。(#73)

不具合修正

いくつかの不具合を修正した。

  • 数値変換で「100000000えん」が「一億万円」になる問題を修正(#74)
  • カタカナ・半角カナモード時に送りありの変換ができない問題を修正(#72)

Love💕LivePhotos

NGK2016Bでライブフォトの話をしてきた。

資料

関連資料

原稿

自己紹介

f:id:mzp:20161219205727p:plain

仕事ではMisocaというWebサービスを作っているが、これはスポンサーセッションではないので、まったく関係ない話をする。

具体的にはiPhoneの話をする。

ライブフォトの紹介

f:id:mzp:20161219205731p:plain

最近のiPhoneにはライブフォトという機能が搭載されている。 普通に写真を撮ると、前後が動画として記録される。

ライブフォトはロック画面に設定することもできる。 そのため、「動くロック画面」が実現できる。

理想

f:id:mzp:20161219205735p:plain

ので、こういうロック画面を作りたい。

問題点

f:id:mzp:20161219205737p:plain

ライブフォトはiPhoneのカメラで撮影しないと作れない。

それでは困るので、任意の画像・動画からライブフォトを生成する方法を探さないといけない。

調査内容

f:id:mzp:20161219205739p:plain

いろいろ調べた結果、movファイルとjpegファイルのメタデータに同じUUIDを書き込んで、Photosアプリに取り込めばライブフォトになることがわかった。

LoveLiver

f:id:mzp:20161219205742p:plain

これをアプリにした。

アプリ名はライブフォトを愛するという意味でlove liverと名付けた。動画ファイルを取り込んで、指定した箇所をライブフォトに変換できる。

その後

f:id:mzp:20161219205745p:plain

以上が一年前の話です。そして、そのあとの一年に起きたことを順番に話す。

題材

f:id:mzp:20161219205749p:plain

iPhoneは縦長かつ高解像度のため、なかなか適した題材がない。

デレステ 縦MV

f:id:mzp:20161219205752p:plain

奇跡的にデレステの縦MVバグ(?)が見つかる。 これは発見直後のまとめで、みんなが大喜びしているのが分かる。

大量のライブフォト

f:id:mzp:20161219205756p:plain

これにより大量のかわいいライブフォトが生成できるようになった。

ちょいちょい寿司の画像がまざっているのは気にしないでほしい。

WWDC

f:id:mzp:20161219205801p:plain

WWDCにはラボと呼ばれるAppleのエンジニアと一対一で会話する機会がある。

そこにLoveLiverのもう一人の開発者がいって、APIの有無を聞いた。ついでに生成されたライブフォトを見せて、coolと言ってもらった。

Tumblr

f:id:mzp:20161219205806p:plain

長い間、ライブフォトの共有方法はなかったが、先日Tumblrが対応した。

タッチバー対応

f:id:mzp:20161219205812p:plain

最近は、新型MacBookProを買ったので、タッチバー対応をしている。 どこをライブフォトにするかを選択できる。

まとめ

f:id:mzp:20161219205819p:plain